Kendi kodunuzu test etmede nasıl daha iyi olunur


45

Ben nispeten yeni bir yazılım geliştiricisiyim ve geliştirmem gerektiğini düşündüğüm şeylerden biri de kendi kodumu sınama yeteneğim. Ne zaman yeni bir işlevsellik geliştirsem, olası tüm yolları takip etmekte zorlanıyorum, böylelikle hataları bulabiliyorum. Her şeyin çalıştığı yolu takip etme eğilimindeyim. Bunun programcıların bildiği bir sorun olduğunu biliyorum, ancak şu anki işverenimde test uzmanlarımız yok ve meslektaşlarım bu konuda oldukça iyi görünüyor.

Kuruluşumda ne test odaklı bir gelişme ne de birim test yapıyoruz. Bana çok yardımcı olurdu, ancak bunun değişmesi muhtemel değildir.

Bunun üstesinden gelmek için ne yapabileceğimi düşünüyorsunuz? Kendi kodunuzu test ederken hangi yaklaşımı kullanıyorsunuz?


28
Sadece kuruluşunuzun TDD kullanmaması veya birim testlerinin yapılması, son tarihlerinizi karşılamaya ve kalite kodunu üretmeye devam ettiğiniz sürece yapamayacağınız anlamına gelmez.
Thomas Owens

1
Sanırım Thomas beni dövdü ama ben de benzer bir durumdayım. Bir kod değişikliğinin ne yapması gerektiğine dair çok üst düzeyde beklentiler yazarım ve ne zaman ne yapabilirsem (eğer şirketimiz resmi olarak birim test yapmasa da) birim testleri yazarım. Onları taahhüt etmek zorunda değilsiniz ve işlevlerin nasıl davranması gerektiğini (veya düzelttikten sonra da davranması gerektiğini) öğrenmek için harika yollar.
Brian,

6
@Brian, bence başkalarının şu anda kullanıp kullanmadıklarından bağımsız olarak onları taahhüt etmelisiniz. Belki de iyi uygulamaları göstermek başkalarını takip etmelerini sağlayacaktır.
CaffGeek

Yanıtlar:


20

Bir kodlayıcının işi bir şeyler inşa etmektir.

Bir test cihazının görevi bir şeyleri kırmaktır.

En zor, az önce yaptığın şeyleri kırmak. Sadece bu psikolojik engeli aşarak başaracaksın.


27
-1 Bir kodlayıcının işi, çalışan şeyleri oluşturmaktır . Bu her zaman bir miktar test gerektirir. Ayrı bir testçi rolüne ihtiyaç olduğuna katılıyorum, ancak tek savunma hattı değil.
Matthew Rodatus

8
@Matthew Rodatus - Kodlayıcı tarafında yer alan testler yalnızca çalışacak şeyin gerçekten işe yaradığını doğrulamayı amaçlamaktadır. Test cihazı tarafında amaç, kodun çalıştığını gözlemlememek değil böcek bulmaktır.
mouviciel

2
Cevabınızdan farklı, ve ben buna daha çok katılıyorum. Ama yine de tam olarak aynı fikirde değilim. Kalite kodu yazmak, zamanın ilerisinde başarısız olma ihtimalini düşünmeyi öğrenirken pratikten gelir. Bu olasılıkları yaratmayı öğrenmeden başarısızlık olanakları üzerinden düşünmeyi öğrenmezsiniz. Kodlayıcıların tek savunma hattı olması gerektiğini düşünmüyorum, ancak ilk savunma hattı olması gerektiğini düşünüyorum. Tehdit konusu mesleğin eksiksizliği ve ustalığından biridir.
Matthew Rodatus

2
@mouviciel - sahte ikilik. Bir kodlayıcının işi, çalışan şeyleri inşa etmektir ve bunu, kodunun hangi şartlarda çalışması gerektiği konusunda bir a priori düşünerek yapar. Ve bu, en azından yıkıcı test + bazı geçici sınır analizi ( en azından tekrar) oluşturarak doğrulanır . Ayrıca, şartnamelere karşı iyi bir kodlayıcı çalışır ve şartnamelere (geçerli olduğunda) her zaman test edilebilir. (.. Ve genellikle req yazarak bunu sen testleri geçen koduna sahip dek başlangıçta başarısız testler) iyi bir kodlayıcı bu gereklilikler kodunda karşılandığını doğrulamak O testi geliştiren Yani
luis.espinal

2
@Dave Lasley - Bu kesinlikle benim açımdan: mimar, evini yıkmak için en iyi insan değil: kusurlarını görmenin ne kadar güçlü olduğu ile gurur duyuyor. Sadece başka bir mimar (sokaktaki adam değil) evin üzerine objektif bir bakış getirebilir ve evin eski mimarın hayal edemeyecek kadar kör olduğu belirli koşullar altında kırılabileceğini bulabilir.
mouviciel

14

Franciso, burada söylediklerine dayanarak bazı varsayımlar yapacağım:

“TDD'yi ve birim testini yapmıyoruz. Bu bana çok yardımcı olacak ama bunun değişmesi muhtemel değil.”

Bundan sonra, ekibinizin test veya yönetime çok fazla değer vermediğinden şüpheliyim, ekibin mevcut kodu denemesi ve düzenli tutması ve teknik borçları minimumda tutması için zaman harcamaması.

Öncelikle, ekibinizi / yönetiminizi testin değerine ikna etmeniz gerekir. Diplomatik ol. Yönetim ekibinizin ilerlemesini sürdürüyorsa, onlara her sürümdeki kusur oranı gibi bazı gerçekleri göstermeniz gerekir. Harcanan hasarı gidermek için harcanan zaman, uygulamanın iyileştirilmesi ve gelecekteki gereksinimlere daha uyumlu hale getirilmesi gibi başka şeylere daha iyi harcanabilir.

Genel olarak ekip ve yönetim, kodu düzeltme konusunda ilgisizlerse ve bu konuda mutsuz hissediyorsanız, söylediğim gibi ikna edemediğiniz sürece, çalışmak için başka bir yer aramanız gerekebilir. Çalıştığım her yerde bu sorunla farklı derecelerde karşılaştım. Uygun bir etki alanı modeli eksikliğinden, ekip içinde zayıf iletişime kadar her şey olabilir.

Kodunuzu ve geliştirdiğiniz ürünün kalitesini önemsemek iyi bir özelliktir ve her zaman diğer insanlarda teşvik etmek istediğiniz bir tanesidir.


11

C, Objective-C veya C ++ olarak kodlarsanız , kaynağınızı gerçekten çalıştırmadan eleştirmek için CLang Static Analyzer'ı kullanabilirsiniz.

Kullanılabilecek bazı bellek hata ayıklama araçları vardır: ValGrind, Mac OS X'te Guard Malloc, * NIX'te Elektrikli Çit.

Bazı geliştirme ortamları, yeni atanan sayfaları ve yeni serbest bırakılan sayfaları çöple doldurmak, ayrılmamış işaretçilerin serbest kaldığını tespit etmek ve her bir yığın bloğundan önce ve sonra veri ayıklayıcı olmak üzere bazı veriler yazmak gibi bir hata ayıklama belleği ayırıcısı kullanma seçeneği sunar Bu verinin bilinen şekli değişse bile denir.

Slashdot'taki bazı adamlar, hata ayıklayıcıdaki tek adımlı yeni kaynak satırından çok değerli olduğunu söyledi. “İşte bu” dedi. Onun tavsiyelerine her zaman uymam, ama sahip olduğumda bana çok yardımcı oldu. Yaygın olmayan bir kod yolunu uyaran bir test durumunuz olmasa bile, bu tür yolları almak için hata ayıklayıcınızdaki bir değişkeni, örneğin bir bellek ayırarak, ardından yeni işaretçinizi NULL yerine NULL değerine ayarlamak için hata ayıklayıcısını kullanabilirsiniz. hafıza adresi, ardından tahsisat başarısız işleyicisini adım adım izleyin.

İddiaları kullanın - C, C ++ ve Objective-C'deki assert () makrosu. Diliniz bir güvenlik işlevi sağlamazsa, kendiniz bir tane yazın.

Varlıkları liberal olarak kullanın, ardından kodunuzda bırakın. Assert () “Test etmeye devam eden test” diyorum. Onları en çok, fonksiyonlarımın çoğu giriş noktasında ön koşulları kontrol etmek için kullanıyorum. Bu, Eyfel programlama dilinde yerleşik olan “Sözleşme ile Programlamanın” bir parçası. Diğer kısım ise post koşullardır, diğer bir deyişle, fonksiyon dönüş noktalarında assert () kullanılır, ancak ondan daha fazla ön koşul almadığımı anlıyorum.

Sınıf değişmezlerini kontrol etmek için assert kullanabilirsiniz. Hiçbir sınıfın hiçbir şekilde değişmez olması zorunlu olmamakla birlikte, en hassas şekilde tasarlanmış sınıfların hepsinde vardır. Sınıf değişmezliği, nesnenizi geçici olarak tutarsız bir duruma getirebilecek üye işlevlerinin içinde dışındaki her zaman doğru olan bir durumdur. Bu tür işlevler geri dönmeden önce tutarlılığı her zaman geri almalıdır.

Böylece her üye işlevi giriş ve çıkışta değişmezleri kontrol edebilir ve sınıf CheckInvariant adlı başka bir kodun herhangi bir zamanda çağırabileceği bir işlev tanımlayabilir.

Kaynağınızın hangi satırlarının gerçekten test edildiğini kontrol etmek için bir kod kapsamı aracı kullanın, ardından test edilmemiş satırları uyaran testleri tasarlayın. Örneğin, uygulamanızı çok az fiziksel bellekle yapılandırılmış bir VM içinde ve takas dosyası ya da çok küçük bir dosya olmadan çalıştırarak düşük bellek işleyicilerini kontrol edebilirsiniz.

(Bir nedenden ötürü hiç bir zaman mahrem olmadığım halde, BeOS takas dosyası olmadan çalışabilirken, bu şekilde oldukça kararsızdı. BFS dosya sistemini yazan Dominic Giampaolo, hiçbir zaman BeOS'u takas etmeden çalıştırmamı istedi. neden önemli olması gerektiğine bakın, ancak bir çeşit uygulama artefaktı olmalı.)

Ayrıca, kodunuzun G / Ç hatalarına yanıtını da sınamalısınız. Tüm dosyalarınızı bir ağ paylaşımına kaydetmeyi deneyin, ardından uygulamanızın iş yükü yüksekken ağ kablosunu çıkarın. Bir ağ üzerinden iletişim kuruyorsanız, kabloyu çıkarın ya da kablosuz bağlantısını kapatın.

Özellikle sinir bozucu bulduğum bir şey, sağlam Javascript koduna sahip olmayan web siteleri. Facebook'un sayfaları düzinelerce küçük Javascript dosyası yüklüyor, ancak herhangi biri indirmeyi başaramazsa, sayfa kırılıyor. Bir hata toleransı sağlamanın, bir yüklemeyi yeniden denemenin ya da komut dosyalarınızın bazılarını indirmediğinde bir tür makul geri dönüş sağlamanın bir yolu olmalı.

Uygulamanızı hata ayıklayıcıyla ya da * NIX'teki "kill -9" ile öldürmeyi deneyin, büyük, önemli bir dosya yazmanın tam ortasında. Uygulamanız gayet iyi düzenlenmişse, dosyanın tamamı yazılır veya hiç yazılmaz veya belki de kısmen yazılırsa, yazılanlar bozulmaz, hangi veriler tarafından tamamen kullanılabilir hale gelir dosyayı yeniden okuduktan sonra app.

veritabanlarında her zaman hataya dayanıklı disk G / Ç bulunur, ancak başka hiçbir uygulamada bulunmaz. Günlüklü dosya sistemleri, elektrik kesintisi veya çökmesi durumunda dosya sisteminin bozulmasını önlerken, son kullanıcı verilerinin bozulmasını veya kaybolmasını önlemek için hiçbir şey yapmazlar. Bu, kullanıcı uygulamalarının sorumluluğundadır, ancak veritabanlarından başka hiçbiri hataya dayanıklılık göstermez.


1
Başkalarından destek gerektirmeyen +1 birçok pratik öneri. Ekleyeceğim tek şey, iddiada, kodda bir hata olmadıkça başarısız olamayacak koşulları belgelemek ve kontrol etmek . Asla bulunamayan önemli bir dosya veya geçersiz girdi vb. Gibi 'şanssızlık' nedeniyle başarısız olabilecek şeyleri asla öne
sürmeyin

10

Kodumu sınamaya baktığımda, genellikle bir dizi düşünce sürecinden geçiyorum:

  1. Bu "şeyi" nasıl test edilebilir boyutta bir parçaya ayırabilirim? Test etmek istediğim şeyi nasıl izole edebilirim? Hangi taslakları / alayları oluşturmalıyım?
  2. Her öbek için: Bu öbekleri makul bir doğru girdi grubuna doğru şekilde yanıt verdiğinden emin olmak için nasıl test ederim?
  3. Her öbek için: Öbeklerin yanlış girdilere (NULL işaretçiler, geçersiz değerler) doğru tepki verdiğini nasıl test ederim?
  4. Sınırları nasıl test ederim (örneğin, değerler imzasız, imzasız, 8 bit ila 16 bit, vb. Arasında nereye gider?)?
  5. Testlerim kodu ne kadar iyi kapsıyor? Kaçırdığım koşullar var mı? [Bu kod kapsama araçları için harika bir yer.] Kaçırılan ve hiç çalıştırılamayan bir kod varsa, gerçekten orada olması gerekir mi? [Bu tamamen başka bir soru!]

Bunu yapmanın en kolay yolu, kodumu ile birlikte testlerimi geliştirmektir. Bir kod parçası bile yazdığımda, bunun için bir test yazmayı seviyorum. Testlerin tümünü, önemsiz olmayan çevrimsel kod karmaşıklığı ile birlikte birkaç bin kod satırını kodladıktan sonra yapmaya çalışmak bir kabustur. Birkaç kod satırı ekledikten sonra bir veya iki test daha eklemek gerçekten kolaydır.

BTW, sadece çalıştığınız şirketin ve / veya meslektaşlarınızın Ünite Testi veya TDD yapmadığı için, özellikle yasaklanmadıkça, onları deneyemeyeceğiniz anlamına gelmez. Belki de sağlam kodlar oluşturmak için bunları kullanmak başkaları için iyi bir örnek olacaktır.


5

Diğer cevaplarda verilen tavsiyelere ek olarak, test başlamadan önce olası hataları bulmak için teste başlamadan önce olası hataları bulmak için statik analiz araçlarını (Wikipedia'da çeşitli diller için bir takım statik analiz araçlarının bir listesi vardır) kullanmanızı öneririm . döngüsel karmaşıklık , Halstead karmaşıklığı ölçütleri ve uyum ve eşleşme gibi kodların test edilebilirliği (bunları, içeri girip çıkma ile ölçebilirsiniz).

Test edilmesi zor olan kodları bulmak ve test etmeyi kolaylaştırmak, test senaryoları yazmanızı kolaylaştıracaktır. Ayrıca, kusurları erken yakalamak, tüm kalite güvence uygulamalarınıza (test dahil) değer katar. Buradan, birim test araçlarına ve alaycı araçlara aşina olmak, testinizi uygulamanızı kolaylaştıracaktır.


1
Siklomatik karmaşıklık için +1. “Olası yolları bulabilmem için tüm olası yolları takip etmeyi gerçekten zor buluyorum”, diyor ki OP'nin kodunun daha küçük ve daha az karmaşık parçalara bölünmesi gerekebilir.
Toby,

@Toby Evet, bu yüzden statik analiz yapmaya başladım. Kodunuzu test edemiyorsanız, sorunlarınız var. Ve kodunuzla ilgili bir probleminiz varsa, başkaları da olabilir. Potansiyel uyarı bayraklarını bulmak, bunları değerlendirmek ve gerektiği şekilde düzeltmek için bir araç kullanın. Sadece test edilebilir bir kodunuz değil, aynı zamanda daha okunabilir bir kodunuz olacaktır.
Thomas Owens

3

Kodunuzdaki tüm potansiyel yolları tanımlamanıza yardımcı olması için Doğruluk Tablolarının kullanımına bakabilirsiniz . Karmaşık fonksiyonlardaki tüm olasılıkları hesaba katmak imkansızdır, ancak bilinen tüm yollar için kullanımınızı oluşturduktan sonra, başka bir durum için bir kullanım alanı oluşturabilirsiniz.

Bu özel kabiliyetin büyük bir kısmı olsa da tecrübe ile öğrenilir. Belirli bir çerçeveyi önemli bir süre kullandıktan sonra, bir kod parçasına bakmanıza ve küçük bir değişikliğin büyük bir hataya neden olabileceğini görmenize olanak verecek davranış biçimlerini ve izlerini görmeye başlarsınız. Bu konuda yeteneğinizi arttırmayı düşünebilmemin tek yolu pratik.


3

Birim testine ihtiyacınız olmadığını söylediğiniz gibi, kendi kodunuzu manuel olarak kırmaya çalışmaktan daha iyi bir yaklaşım göremiyorum.

Kodunuzu sınırlara zorlamaya çalışın . Örneğin, değişkenleri sınır limitlerini aşan bir fonksiyona geçirmeyi deneyin. Kullanıcı girişini filtrelemesi gereken bir fonksiyonunuz var mı? Farklı karakter kombinasyonları girmeyi deneyin.

Kullanıcının bakış açısını düşünün . Uygulamanızı veya işlev kitaplığınızı kullanacak kullanıcılardan biri olmaya çalışın.


1
Kullanıcı bakış açısından bir şeyler gördüğünüz için +1.
Matthew Rodatus

3

ama şu andaki işverenimde test uzmanlarımız yok ve meslektaşlarım bu konuda oldukça başarılı görünüyorlar

Meslektaşlarınız TDD veya birim testini takip etmemek ve asla böcek üretmemek için istisnai bir durum olmalı, bu nedenle bazı seviyelerde kendilerini test eden herhangi bir birim yapmadıklarından şüpheliyim.

Meslektaşlarınızın izin verilenden daha fazla test yaptığını tahmin ediyorum, ancak bu gerçek yönetim tarafından bilinmediği için organizasyon sonuç olarak acı çekiyor çünkü yönetim gerçek testin yapılmadığı ve hata sayısının düşük olduğu izlenimini alıyor. Testler önemsizdir ve bunun için zaman planlanmayacaktır.

Meslektaşlarınızla konuşun ve ne tür ünite testleri yaptıklarını anlamaya çalışın ve buna öykünün. Daha sonra, birim testi ve TDD özelliklerini daha iyi şekillendirmek için prototipler oluşturabilir ve bu kavramları daha kolay benimsemek için yavaşça takıma aktarabilirsiniz.


2
  • Kodunuzu yazmadan önce testlerinizi yazın.
  • Test tarafından yakalanmayan bir hatayı düzelttiğinizde, bu hatayı yakalamak için bir test yazın.

Kuruluşunuz tam olarak kapsama almasa bile, yazdıklarınızla ilgili olarak kapsama alabilmelisiniz. Programlamadaki pek çok şey gibi, bunu tekrar tekrar yapma deneyimi de verimli olmanın en iyi yollarından biri.


2

Diğer tüm yorumlara ek olarak, meslektaşlarınızın mutlu olmayan yol testleri yazma konusunda iyi olduklarını söylediğiniz için, neden bazı testler yazma konusunda sizinle eşleşmelerini istemiyorsunuz?

Öğrenmenin en iyi yolu, nasıl yapıldığını görmek ve ondan öğrendiklerinizi almaktır.


2

Kara kutu testi! Sınıflarınızı / yöntemlerinizi akılda tutarak sınava giriyor olmalısınız. Testleriniz, yazılımın özelliklerine dayanmalı ve Sıra diyagramınızda açıkça belirtilmelidir (kullanım durumları aracılığıyla).

Şimdi test odaklı bir gelişim yapmak istemeyeceğiniz için ...

Gelen tüm verilere giriş onayını koy; kimseye güvenme .Net çerçevesi geçersiz argümanlara, boş referanslara ve geçersiz durumlara dayanarak birçok istisna atar. Zaten UI katmanında giriş onaylamayı kullanmayı düşünmeliydin, bu yüzden orta depodaki aynı numara.

Fakat gerçekten bir çeşit otomatik test yapıyor olmalısınız; bu şey hayat kurtarıyor.


2

Tecrübelerime göre

Test ünitesi, tamamen otomatik değilse, işe yaramaz. Bir sivri saçlı patronu satın alabilir gibi daha fazla. Neden ?, çünkü Test Ünitesi size bazı test işlemlerini otomatikleştirmek için zamandan (ve paradan) tasarruf etme sözü verdi. Ancak, bazı test birimi araçları bunun tersini yapar, programcıları garip bir şekilde çalışmaya zorlar ve diğerlerini aşırı uzatma testi oluşturmaya zorlar. Çoğu zaman, çalışma saatinden tasarruf etmeyecek, ancak KG'den geliştiriciye geçen süreyi artıracaktır.

UML başka zaman harcıyor. tek bir beyaz tahta + kalem aynı, daha ucuz ve hızlı bir şekilde yapabilirdi.

BTW, Kodlamada iyi olmak (ve hataları önlemek)?

  • a) atomiklik. Bir basit (veya birkaç tek görev) yapan bir işlev. Anlaması kolay olduğu için izlemesi ve çözmesi kolaydır.

  • b) Homoloji. Örneğin, bir mağaza prosedürü kullanarak bir veritabanını çağırıyorsanız, kodun geri kalanını yapın.

  • c) "Yaratıcı kodu" tanımlayın, azaltın ve izole edin. Kodun çoğu hemen hemen kopyala ve yapıştır. Yaratıcı kod tam tersidir, yeni bir koddur ve prototip görevi görür, başarısız olabilir. Bu kod mantıksal hataya açıktır, bu yüzden onu azaltmak, izole etmek ve tanımlamak önemlidir.

  • d) "İnce buz" kodu, "yanlış" (veya potansiyel olarak tehlikeli) olduğunu bildiğiniz, ancak örneğin çok görevli bir işlem için güvensiz kodlara ihtiyaç duyduğunuz koddur. Yapabilirseniz kaçının.

  • e) Kara kutu kodundan kaçının, bu sizin tarafınızdan yapılmayan kodu (örneğin çerçeve) ve düzenli ifadeyi içerir. Bu tür bir kod ile bir hatayı özlemek kolaydır. Örneğin, Jboss kullanarak bir projede çalıştım ve Jboss'da bir tane değil 10 hata buldum (en son kararlı sürümü kullanarak), bunları bulmak PITA idi. Özel olarak Hazırda Bekletme modundan kaçının, uygulamayı gizler, bu nedenle hataları giderir.

  • f) kodunuza yorumlar ekleyin.

  • g) hataların kaynağı olarak kullanıcı girişi. tanımla. Örneğin, SQL Injection bir kullanıcı girişinden kaynaklanır.

  • h) Takımın kötü unsurunu belirlemek ve verilen görevi ayırmak. Bazı programcılar kodu bozmaya eğilimlidir.

  • i) Gereksiz kodlardan kaçının. Örneğin, Eğer sınıf gerek Arayüz , kullanın aksi alakasız kodu eklemek kaçının.

a) ve b) anahtardır. Örneğin, bir sistemde bir sorun vardı, bir düğmeye tıkladığımda (kaydet) formu kaydetmedi. Sonra bir kontrol listesi yaptım:

  • düğme çalışıyor mu? ... evet.
  • veritabanı bir şey saklıyor mu? hayır, bu yüzden hata orta adımdaydı.
  • sonra veritabanında depolanan sınıf çalışır? hayır <- tamam, hatayı buldum. (veritabanı izni ile ilgiliydi). Sonra sadece bu prosedürü değil, aynı işlemi yapan her prosedürü de kontrol ettim (çünkü kodun homolojisi). Bu hatayı izlemek için 5 dakika ve bunu çözmek için 1 dakika (ve diğer birçok hata) aldı.

Ve bir yazı tahtası

KG , çoğu zaman (Dev'in ayrı bir bölümü olarak) emer , projede çalışılmadıklarında yararsızdır. Bazı testler yapıyorlar ve başka pek bir şey yapmıyorlar. Mantık hatalarının çoğunu tanımlayamıyorlar. Benim durumumda, prestijli bir bankada çalışıyordum, bir programcı kodu bitirdi ve onu QA'ya yolladı. QA kodu onayladı ve üretime girdi ... sonra kod başarısız oldu (epik bir başarısızlık), kimin suçlandığını biliyor musunuz? evet, programcı.


2

Bir test cihazı ve programcı, sorunu farklı açılardan karşı karşıya getirir, ancak her iki rol de işlevselliği tam olarak test etmeli ve hataları bulmalıdır. Rollerin farklı olduğu yerler odaktadır. Klasik bir test cihazı uygulamayı sadece dışardan görür (örn. Kara kutu). Onlar uygulamanın işlevsel gereksinimleri konusunda uzmandır. Bir programcının hem işlevsel gereksinimler hem de kod konusunda uzman olması beklenir (ancak daha çok koda odaklanma eğilimindedir).

(Programcıların açıkça gereksinimler konusunda uzman olması beklenip beklenmeyeceği kuruluşa bağlıdır. Ne olursa olsun, örtük beklenti oradadır - eğer yanlış bir şey tasarlarsanız, gereksinimler için değil - suçu alırsınız.)

Bu ikili uzman rolü, programcının aklında vergi almaktadır ve en deneyimli olanlar hariç, gereksinimlerdeki yeterliliği azaltabilir. Uygulamanın kullanıcılarını düşünmek için, zihinsel olarak vites değiştirmem gerektiğini düşünüyorum. İşte bana yardımcı olan şey:

  1. Hata ayıklama ; kesme noktalarını kodda ayarlayın ve uygulamayı çalıştırın. Bir kesme noktasına bastığınızda, uygulama ile etkileşime girerken çizgilerden geçin.
  2. Otomatik test ; kodunuzu test eden kod yazın. Bu, yalnızca kullanıcı arayüzünün altındaki katmanlarda yardımcı olur.
  3. Test cihazlarınızı tanıyın ; Uygulamayı sizden daha iyi biliyor olabilirler, bu yüzden onlardan öğrenin. Onlara uygulamanızın zayıf yönlerini ve hataları bulmak için hangi taktikleri kullandıklarını sorun.
  4. Kullanıcılarınızı tanıyın ; kullanıcılarınızın ayakkabılarında yürümeyi öğrenin. İşlevsel gereksinimler, kullanıcılarınızın parmak izidir. İşlev gereksinimlerinde açıkça anlaşılamayan uygulama hakkında kullanıcılarınızın bildiği birçok şey vardır. Kullanıcılarınızı daha iyi anladıkça - gerçek dünyadaki çalışmalarının niteliği ve uygulamanızın onlara nasıl yardım etmesi gerektiği - uygulamanın ne olması gerektiğini daha iyi anlayacaksınız.

2

Sanırım iki cephede çalışmak istiyorsun. Birincisi, kuruluşunuzun belirli bir düzeyde teste geçmesini sağlamak (zamanla daha fazla benimsemeleri umuduyla) politiktir. İş yerinizin dışındaki KG mühendisleriyle konuşun. QA kitaplarının listesini bulun . İlgili wikipedia makalelerinin etrafında durmak . Kalite güvencesi prensipleri ve uygulamaları hakkında bilgi edinin. Bu şeyleri öğrenmek sizi organizasyonunuzda yapabileceğiniz en inandırıcı olamaya hazırlayacaktır. İyi kalite güvencesi departmanları var ve örgütlerine büyük değer katıyorlar.

Bireysel geliştirici olarak, kendi işinizde kullanmak için stratejiler benimseyin. TDD'yi birlikte geliştiren kod ve testlerle kendiniz kullanın . Testleri açık ve iyi bir şekilde muhafaza edin. Bunu neden yaptığınız sorulursa, gerilemeleri önlediğinizi söyleyebilir ve düşünce sürecinizi daha iyi organize ettiğini (her ikisi de gerçek olacak) söyleyebilirsiniz. Test edilebilir kod yazmanın bir sanatı var, onu öğrenin. Diğer geliştiricileriniz için iyi bir örnek olun.

Kısmen burada kendime vaaz veriyorum, çünkü bildiğimden daha az şey yapıyorum.

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.