Ayrıca bkz TDD ile bir Sudoku çözücü oluşturmak için Ron Jeffries girişimini maalesef iş vermedi.
Algoritma, algoritma tasarım ilkelerinin önemli bir şekilde anlaşılmasını gerektirir. Bu prensiplerle Peter Norvig'in yaptığı gibi bir planla aşamalı olarak ilerlemek gerçekten mümkündür .
Aslında, önemsiz olmayan tasarım çabası gerektiren algoritmalar için, neredeyse her zaman çabanın doğası artmaktadır. Ancak , bir algoritma tasarımcısının gözünde küçük olan her "artış", bu özel algoritma ailesiyle aynı uzmanlığa veya bilgiye sahip olmayan bir kişiye kuantum sıçraması gibi görünür (ifadenizi ödünç almak için).
Bu nedenle, CS teorisindeki temel eğitimin birçok algoritma programlama uygulaması ile birleşmesi de aynı derecede önemlidir. Belirli bir "tekniğin" (algoritmaların küçük yapı taşları) var olduğunu bilmek, bu artımlı kuantum sıçramaları yapmak için uzun bir yoldur.
Yine de algoritmalarda artımlı ilerleme ve TDD arasında bazı önemli farklılıklar vardır.
Farklardan biri JeffO tarafından belirtilmiştir : Çıktı verilerinin doğruluğunu doğrulayan bir test , aynı algoritmanın farklı uygulanması (veya aynı çözümü vermek için yarışan farklı algoritmalar) arasındaki performansı destekleyen bir testten ayrıdır .
TDD'de kişi test şeklinde yeni bir gereklilik ekler ve bu test başlangıçta geçmeyecektir (kırmızı). Sonra gereksinim karşılanır (yeşil). Son olarak kod yeniden düzenlenir.
Algoritma geliştirmede, gereksinim genellikle değişmez. Sonuç doğruluğu doğrulama testi ya ilk olarak ya da algoritmanın taslak (son derece kendinden emin ama yavaş) uygulaması tamamlandıktan kısa bir süre sonra yazılır. Bu veri doğruluğu testi nadiren değiştirilir; biri TDD ayininin bir parçası olarak başarısız (kırmızı) olarak değiştirmez.
Bununla birlikte, bu açıdan, veri analizi algoritma geliştirmeden belirgin şekilde farklıdır, çünkü veri analizi gereklilikleri (hem girdi kümeleri hem de beklenen sonuçlar) sadece insan anlayışında gevşek bir şekilde tanımlanmıştır. Böylece gereksinimler teknik düzeyde sık sık değişir. Bu hızlı değişim, algoritma geliştirme ile genel yazılım uygulaması geliştirme arasında veri analizini bir yere koyuyor - yine de algoritma ağırlıklı olsa da, gereksinimler de herhangi bir programcının zevkine göre "çok hızlı" değişiyor.
Gereksinim değişirse, genellikle farklı bir algoritma gerektirir.
Algoritma geliştirmede, performans karşılaştırma testinin başarısız (kırmızı) olarak değiştirilmesi (sıkılması) saçmadır - algoritmanızda performansı artıracak olası değişiklikler hakkında herhangi bir fikir vermez.
Bu nedenle, algoritma geliştirmede, hem doğruluk testi hem de performans testi TDD testleri değildir. Bunun yerine, her ikisi de regresyon testleridir . Özellikle, doğruluk regresyon testi algoritmada doğruluğunu bozacak değişiklikler yapmanızı engeller; performans testi algoritmada daha yavaş çalışmasını sağlayacak değişiklikler yapmanızı engeller.
TDD'yi kişisel çalışma tarzı olarak da dahil edebilirsiniz, ancak "kırmızı - yeşil - refaktör" ritüelinin algoritma geliştirmenin düşünce sürecinde kesin olarak gerekli olmaması veya özellikle yararlı olmaması gerekir .
Algoritma geliştirmelerinin gerçekte mevcut algoritmanın veri akış diyagramlarına rasgele (gerekli olmayan) permütasyonlar yapmasından veya bunları önceden bilinen uygulamalar arasında karıştırıp eşleştirmesinden kaynaklandığını iddia ediyorum.
TDD, test setinize aşamalı olarak eklenebilecek birden fazla gereksinim olduğunda kullanılır .
Alternatif olarak, algoritmanız veriye dayalıysa, her bir test verisi / test durumu parçası aşamalı olarak eklenebilir. TDD de faydalı olacaktır. Bu nedenle, yeni test verileri ekleme - bu verileri doğru bir şekilde işlemek için kodu geliştirin - refactor "" TDD benzeri "yaklaşımı, algoritmaların hedeflerinin insanlarda tanımlandığı açık uçlu veri analizi çalışması için de çalışacaktır. merkezli kelimeler ve başarı ölçüsü de insan tanımlı terimlerle değerlendirilir.
Tek bir denemede tüm (düzinelerce veya yüzlerce) gereksinimi karşılamaya çalışmaktan daha az ezici bir yol öğretmeyi amaçlıyor . Başka bir deyişle, çözümünüzün bazı erken taslaklarını uygularken belirli gereksinimlerin veya esneme hedeflerinin geçici olarak göz ardı edilebileceğini dikte edebildiğinizde TDD etkinleştirilir .
TDD, bilgisayar biliminin yerini tutmaz. Programcıların aynı anda birçok gereksinimi karşılama şokunun üstesinden gelmesine yardımcı olan psikolojik bir koltuk değneği .
Ancak, doğru sonucu veren bir uygulamanız varsa, TDD hedefinin yerine getirildiğini ve kodun (yeniden düzenleme veya başka bir programcı kullanıcı için) dağıtılmaya hazır olduğunu düşünür. Bir anlamda, objektif olarak size kodun "yeterince iyi" olduğuna dair bir sinyal vererek (tüm doğruluk testlerini geçmek için) kodunuzu erken optimize etmemenizi teşvik eder.
TDD'de "mikro gereksinimlere" (veya gizli niteliklere) de odaklanılmaktadır. Örneğin, parametre doğrulamaları, iddialar, istisna atma ve işleme, vb. TDD, yazılım yürütmenin normal seyrinde sık kullanılmayan yürütme yollarının doğruluğunun sağlanmasına yardımcı olur.
Bazı algoritma kodu türleri de bunları içerir; bunlar TDD'ye uygundur. Ancak, algoritmanın genel iş akışı TDD olmadığı için, bu tür testler (parametre doğrulamaları, iddialar ve istisna atma ve işleme), uygulama kodu zaten (en azından kısmen) yazıldıktan sonra yazma eğilimindedir.