Bir geliştiriciyle çalışmak, çalışmalarındaki son durumları görmezden geliyor


25

Ekibimdeki geliştiricilerden biriyle konuştuğum ilginç, oldukça ortak bir ilgim var. Adam harika bir geliştiricidir, hızlı ve üretken çalışır, oldukça iyi kalitede kod üretir. İyi mühendis Ancak onunla ilgili bir sorun var - sık sık kodundaki son durumları ele almakta başarısız oluyor.

Onunla birçok kez konuştuk ve deniyor ama sanırım bu şekilde düşünmüyor. Yani, sonuçta ortaya çıkan şey, QA'nın koduyla ilgili çok sayıda sorun bulması ve tekrar tekrar geliştirme için geri vermesi ve sonuçta kaçırılan son teslim tarihlerine ve takımdaki herkesin mutsuz olmasıyla sonuçlanması.

Onunla ne yapacağımı ve bu sorunun üstesinden nasıl gelebileceğini bilmiyorum. Belki de daha fazla deneyime sahip biri tavsiye verebilir?


11
Birinden kodunu birim testleriyle örtmesini isteyin.
İş

8
Kodu test etmek için en nitelikli kişi yazarıdır.

16
@ Geliştirici Sanat: Tamamen katılmıyorum. Herhangi bir kod testi yapan en kötü kişi bu kodu geliştiren kişidir. Herkesin kör noktaları var ama yaratmayı yapan kişi koduna göre en büyük kör noktaya sahip.
James P. Wright,

2
@Geleloper Art: Otomatikleştirilmiş test yazmanın aslında oldukça yaygın bir rol olduğuna inanıyorum. Tipik olarak, bulunduğunuz şirkette asıl süreye hazır değilseniz, bir veya iki yıl boyunca yaptığınız bir şeydir. Bu bir tür araf dönemi.
Morgan Herlocker

19
Onu "büyük geliştirici", "üretken", "iyi bir mühendis" ve "iyi kalite kodu" olarak tanımlıyorsunuz, ancak QA çalışmalarında sorun bulmaya devam ediyor. - Birinin bir profesyonel olarak tanımlanması ve yaptıkları işin hiç uyuşmamasından dolayı, bu hikayenin daha fazla olup olmadığını merak ediyorum
Thomas Owens

Yanıtlar:


29

Kodu için otomatik birim testleri yazmasını isteyin. Birim testleri yazmak, birini kenar davalardan düşünmeye zorlar.

Bazı detaylar:

  1. Kendini iyi hissetmediğinden emin olmak için, bu tüm ekibin için kurulmalıdır. Herkesin değiştirdiği yeni kod veya kod için otomatik birim testleri yazmasını isteyin.
  2. Birim test isimlerinin, test ettikleri duruma göre açıklayıcı olmalarını isteyin.
  3. Kod incelemesinde otomatik birim testlerini yüksek bir seviyeyle örtün. Hakemlerin kaçırılan test vakalarını aramasını sağlayın (yani, çok uzun süredir kaçırdığı kenar davaları). Ekibinden kaçırılan vakalarla ilgili bir miktar geri bildirim aldıktan sonra, muhtemelen incelemeden önce bunları düşünmeyi öğrenecektir.
  4. Bu kuralı tüm ekip için uygulayın: QA bir hata bulursa, sorumlu geliştirici, arızayı onaylayan ve ardından düzelttiklerini ispatlayan otomatik teste sahiptir. (başka işler yapmadan önce)

Amin, daha da iyisi, herkesin kodunu ilk önce test etmesini gerektirir. Bir BDD çerçevesini kullanmak genellikle bunun acısını azaltır
George Mauer,

@ George İyi fikir. TDD burada daha da yardımcı olur.
Matthew Rodatus

3
Birim testi hata bulma ile ilgili değildir - blog.stevensanderson.com/2009/08/24/…
Dainius

1
@Dainius Katılıyorum. Birim testi, geliştiricilerin hataları engelleyebilen (ancak tanımlayamayan) uç vakalar üzerinden düşünmesini kolaylaştırır.
Matthew Rodatus

After some amount of feedback from his team about missed edge cases, he will probably learn to consider thoseKötü uygulamalara sahip olan geliştiriciler genellikle iyi uygulama için gereken ek çabanın önemsiz olduğunu iddia eder (çünkü bunu yapmanın faydasını görmezler). Geliştirici, ek vakalar eklediğinizde bilgi sahibi olsa da, bunun konuyla alakalı olduğunu veya kendisinin ekleyip eklemeyeceğini düşündüğü anlamına gelmez.
flater

23

Ona bir kontrol listesi verin, örneğin

  • boş girişler
  • aşırı geniş aralık sonunda girişler
  • aşırı küçük aralık sonunda girişler
  • kombinasyonlar
  • varsayılan değişmezleri ihlal eden girdiler (örneğin, x = y ise)

QA çalışanları kontrol listesinin oluşturulmasına yardımcı olabilir

Kontrol listesini sadece geliştiricilere değil, tüm geliştiricilere ver.


1
Tüm geliştiricilerin kontrol listesini kullanması gerektiğine dair iyi bir nokta, bir geliştiricinin seçilmesi kötü duygulara neden olabilir. Ve her birinin kod kalitesini yükseltmeye yardımcı olabilir .
SinirliFormsDesigner'la

İyi fikir, bunun Devs perspektifinden nasıl görülebileceğini merak etmeme rağmen. Aslında bu pratikte bir geliştirici olarak kariyerime rastlamadım, bu yüzden reaksiyonu ölçmek biraz zor. Orada görüş var mı?
Alex N.

@Alex: kontrol listeleri bazı geliştiriciler için rutin bir uygulama ve diğerleri için korkunç bir hakarettir. Dene ve ne olacağını gör. Bırakırsa, kod kaliteniz artacak ;-)
Steven A. Lowe

4
Devlerin kontrol listelerini kullanmayacak mı? Bir kontrol listesi hayat kurtarabilseydi, onları kullanır mıydı? Birçok doktor almaz ve hastalar acı çeker. Bunu okuyun: newyorker.com/reporting/2007/12/10/071210fa_fact_gawande
Barry Brown

1
@Barry, yapmayacaklarını söylemedim. Bu durumda kontrol listeleri, IMHO, sorunun kendisi için değil, bir sorunun belirtileri için bir çare gibi geliyor. Sorun bu durumda disiplin ve titizlik. Sorun, yüksek derecede sorumluluk ve stres içeren acil durum bakımı gerektiren bir sistemin karmaşıklığı olduğunda, ayrıntıya verilen dikkat seviyesinin düşmesine neden olur, sonra evet, ftw kontrol listeleri (pilotlar, doktorlar, vb.) Bir felsefi tartışmanın bu sorunun kapsamı dışında olduğunu düşünüyorum.
Alex N.

17

İyi mühendis

Tamam.

Ancak onunla ilgili bir sorun var - sık sık kodundaki son durumları ele almakta başarısız oluyor.

İyi bir mühendisin paylaşmadığı bir kalite.


Uç vakaları izlemek insanda var olan veya olmayan bir özelliktir. Mühendis ya da programcı olmakla alakası yok. Bu özelliğin gelişimi kültürel geçmiş, yaşam ortamı, çocukluk olayları ve yaşam deneyimlerinden etkilenir. Daha sonra, tutum basitçe bir bireyin yaptığı herhangi bir işe uygulanır.

İhtiyacınız olan şey, erkeğinizin bu tür bir algı oluşturmayan (belki de henüz) bu tipte olup olmadığını bulmak. Ayrıca bir nedenden ya da başka birinden umursamadığı da çok muhtemeldir. İşinde mutlu olup olmadığını tüm durumu analiz etmelisin. Eğer değilse o zaman belki önce ona yardım etmek için bir şeyler yapmalısınız.

İşi iyi yapıyorsa, ancak son vaka tehlikesini yaşamamışsa, onu eğitmeye başlayabilirsiniz. Bunu ciddiye alırsa zamanla yollarını değiştirebilir. Bu konuda şüpheci olmama rağmen, yine de deneyebilirsin.

Bununla birlikte, ileriki durumlarda iyi olmayan bir insan olarak ortaya çıkacaksa, onu takımdan çıkarmaktan başka hiçbir şey kalmayabilir. Bu özellik pratik programlama için çok önemlidir. Ne yazık ki, onsuz harika bir insan bile iyi iş çıkarmaz.


6
1 Bu, bazı insanlar bir bazı insanlar sahip oldukları bir yetenektir sahip iyi bir programcı olmayı öğrenmek. Bununla birlikte, iki tip ileri vaka olduğunu unutmam: İş gereksinimi son durumları ("27 sol eğitimci ve 28 doğru eğitimci siparişi muhtemelen yanlıştırsa sipariş verirsek"), proje gereksinimlerinde ele alınması gereken ve Kodlama vakaları (geçersiz girdilerle uğraşmak, bir karma setin x'ten daha büyük hale geldiğinde bir karmaşa hızının daha akıllı olacağı durumlarda listelerde sürekli yinelemek), bu da sadece öğrenmeniz gereken bir şeydir.
Ed James,

Görüşünüz için teşekkür ederim. Gerçekten takdir ediyorum. Buradaki bütün cephelerde oldukça haklısın, merak etmeme rağmen, eğer harika biriyse ama bu sadece harika mühendisleri harika yapan bir şeyden yoksundur, nasıl hala başka işler yapıp onu organizasyonda tutabilirim? başka bir takıma veya başka bir şeye geçiyorum ... Sanırım sadece bu soruyu cevaplayabilsem :)
Alex N.

Bunu düşünüyordum ama emin değilim. Bu tür bir insan için kabul edilebilir olmak için bir başka rol de detaylara dikkat edilmemelidir ve bir yazılım firmasında çoğu yoktur.

İlk cümlenin ima ettiği gibi dünya o kadar siyah ve beyaz değil. Sanırım bazı vakaları tanımlayabilecek geliştiriciler var ama hepsi değil.
Mike Partridge

5

İşlem sırasında daha önce kod incelemeleri yapabilir veya incelemeleri tasarlayabilir misiniz?


4

İlk önce test programlamasını yap. Onunla eşleş. Test senaryolarını yazacaksınız ve testleri geçmek için kod yazacak.


3

QA'nın özellik geliştirme sürecine yeterince erken katılması, baştan sona yaklaşacak yakın vakaların bir listesini sunmasına yardımcı olabilir mi? Bazıları bunu geliştiricinin her şeyi kapsamasını beklemiyor gibi görse de, bu bir test cihazının başlangıçta yakalayabileceği sınır durumlarını özleme eğiliminde olduğu takdirde bu sorunu çözmenin bir yolu olabilir.

Burada sahip olduğum diğer fikir, bu konuyu nasıl görüyor olduğu. Bu kalıptan dolayı gerçekten sinirlenmiş ve işaretlenmiş mi, yoksa bunu normal olarak mı görüyor ve çözmede endişelenecek bir şey değil mi? Bunu kabul etmek, büyük bir güven ve onun bakış açısına açık kalmasını gerektiriyor, ancak burada, bakış açısıyla bir şey görebiliyorsanız, burada yardımcı olabilecek bir empati derecesi olduğunu düşünüyorum.


3

Sonsuz sayıda uç vaka var, hepsini kapsayanlar mümkün değil. Ya biri yaparsa #define TRUE FALSE? Son vakalar ekler, siz de kontrol eder misiniz?

Ayrıca, özel bir sınıfın veya içsel işlevin her işlevini kandırmayacağını düşünmezdim.

Çok sağlam ve kararlı olması gereken kod için seçtiğim yaklaşım:

if(conditions_met)
{
DoStuff();
}
else
{
CrashAppAndDumpMemory();
}

Bu sayede katı uygulama QA'ya ulaşır ve bir sürüm almaya başladığınızda uygulama sağlam ve güvenlidir.

Hatalarla çalışmak kötüdür. Tamam, dosya tanıtıcısı boşsa ve boş döndürürse, bir işlevi kaydedebilirsiniz, ancak çoğu durumda, bir yerde bir tasarım hatası olabilir ve uygulama çökmesi sizi nedenini bulmaya zorlamak için daha iyi bir yoldur. Çoğu kenar durumu bir sorunu gizleyerek hatayı maskeler, say - düğmenin çalışması durdu. Crash, ürünle ilgili bazı varsayımların yanlış olduğunu ve kazaya neden olan mantığı gözden geçirmeniz gerektiğini söylüyor.


#define DOĞRU YANLIŞ, son durum değil, işten çıkarma suçudur.
gnasher729

1

Eğer bir kenar davasıysa, dikkate alınması gereken bir şey mi var? Kenar kasaları önemliyse, kenar kasaların gereksinimler / özellik / kullanıcı hikayesiyle beslenmesi gerekir.

Kenar kasaları bir iş parçasının parçası olarak değerlendirilmişse ve cihazların yerleştirilmesi gerekiyorsa, o zaman iş parçasının bir parçası olmalı ve tanım gereği, iş parçası, kenar çantasını taşıma mekanizması tamamlanıncaya kadar tamamlanmamış olmalıdır. yerinde.

Bu, size Ekip Lideri olarak iş sonrası tartışma sırasında iş tamamlandıktan sonra bakılması gereken bir şey verir ve geliştiriciye çalışmayı tamamlarken aleyhinde çalışacak bir şeyler verir.


Her zaman kenar davaları vardır. Birisi uç davalarla asla karşılaşılmayacağını iddia ederse, bunlar doğru dava değildir.
Barry Brown

1
@Barry Brown Her zaman kenar davaları olduğu konusunda hemfikirim ancak Paydaşların önemli olduğunu düşündüğümüz önemli davalar ile bir geliştiricinin önemli olduğunu düşündüğümüz Senaryolar ve kenar davaları arasında bir fark var. Bir Paydaş bir şeyin önemli olduğunu düşünüyorsa, planlama oturumunda tartışılmalı ve Kullanıcı Hikayesinde Senaryo olarak dahil edilmeli ve düşünmek için geliştiriciye bırakılmamalı, bu göreve karşı uygun bir gereklilik olmalıdır. Çok zaman alıyor ve gerekli değil, ancak halka açık olmayan her yöntemdeki parametrelere karşı yapılan denetlemeleri geçersiz kılıyor.
Bronumski

1

Son vakaları yakalamak, KG'nin varlığının nedenidir. Programcıların işleri zamanında yapmaktan sorumluluğu vardır. Tüm vaktini son vakaları aramak için harcamak çok yetersiz. Oldukça hızlı bir yineleme döngüsü varsa, bu hiç sorun olmamalıdır. Kenar kasaları sayıca sonsuzdur. "Çekirdek" vakalarında bir sorun olsaydı, o zaman biraz endişeliydim. Geliştiricilerin geliştirme konusunda uzman oldukları gibi, bir test cihazı da test konusunda uzman olmalıdır. Bir test cihazı bir problem bulduğunda, onu tekrar gelişime gönderir. Geliştirici sorunu düzeltir. Sorun çözüldü. Bir geliştiricinin her bir vakayı takip etme süresi, yinelemeli test döngüsünün almasından çok daha uzundur. Ayrıca, testten bahsettiğimde, beyaz kutu birim testleri değil, kesinlikle kara kutu testleri demek istediğimi de not edin.


1
Bu gerçekten doğru cevap değil. Yarı kaliteli iş çıktısı için ödüllendirilmek kötü bir uygulamadır. Geliştirme ekibi bir bütün olarak yüksek kaliteli işlerden sorumlu olmalıdır.
David

İyi bir geliştirici, ileri vakalara bakmak zorunda değildir . Bazı kodlar kenar durumlarda olmadığından, bazı durumlarda kenar durumlarda belirgindir. Son durumlarda işlem yapmayan kod eksik koddur.
gnasher729

0

Teste dayalı geliştirmenin kurtarmaya geldiğine inandığım durumlardan biri de budur; çünkü son durumlar ve kodu kırabilecek herhangi bir şey hakkında düşünmeye yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.