Test-driven development yaklaşımıyla kırmızı-yeşil-refactor döngüsünü uygulayın. Kullanıcı TDD ile özellik geliştirmek veya hata düzeltmek istediğinde, "red-green-refactor" metodundan bahsettiğinde, entegrasyon testleri veya test-first geliştirme talep ettiğinde kullanın.
cd ~/.claude/skills
git clone https://github.com/mattpocock/skills.git skills mkdir -p ~/.claude/skills/tdd
curl -fsSL https://raw.githubusercontent.com/mattpocock/skills/HEAD/skills/engineering/tdd/SKILL.md \
-o ~/.claude/skills/tdd/SKILL.md Temel ilke: Testler davranışı public interface'ler üzerinden doğrulamalı, implementasyon detaylarından değil. Kod tamamen değişebilir; testler değişmemeli.
İyi testler entegrasyon tarzındadır: real kod yollarını public API'ler üzerinden çalıştırırlar. Sistemin ne yaptığını, nasıl yaptığını değil, anlatırlar. İyi bir test bir specification gibi okunur - "user geçerli cart ile checkout yapabilir" tam olarak hangi kabiliyetin var olduğunu söyler. Bu testler refactor'ları survive ederler çünkü iç yapıya umursamazlar.
Kötü testler implementasyona bağlıdır. Internal collaborator'ları mock ederler, private method'ları test ederler, veya external araçlar üzerinden doğrularlar (örneğin interface'i kullanmak yerine doğrudan database sorgulama). Uyarı işareti: test refactor yaptığında kırılır ama davranış değişmemiş. Eğer internal bir function'ı rename ettiğinizde testler fail olursa, bu testler implementasyonu test ediyordu, davranışı değil.
Örnekler için tests.md'ye ve mocking yönergeleri için mocking.md'ye bak.
YAPMAYINIZ tüm testleri önce yazıp, sonra tüm implementasyonu yazınız. Bu "horizontal slicing" - RED'i "tüm testleri yaz" ve GREEN'i "tüm kodu yaz" olarak almak.
Bu çöp testler üretir:
Doğru yaklaşım: Tracer bullet'lar via vertical slices. Bir test → bir implementasyon → tekrarlayın. Her test önceki döngüden öğrendiklerinize cevap verir. Kodu az önce yazdığınız için, tam olarak hangi davranışın önemli olduğunu ve nasıl doğrulanacağını bilirsiniz.
YANLIŞ (horizontal):
RED: test1, test2, test3, test4, test5
GREEN: impl1, impl2, impl3, impl4, impl5
DOĞRU (vertical):
RED→GREEN: test1→impl1
RED→GREEN: test2→impl2
RED→GREEN: test3→impl3
...
Codebase'i keşfederken, proje'nin domain glossary'sini kullanın ki test isimleri ve interface vocabulary'si projenin diline uygun olsun, ve dokunduğunuz alandaki ADR'lere saygı gösterin.
Herhangi bir kod yazmadan önce:
Sorun: "Public interface neye benzemeli? Hangi davranışlar test etmek için en önemli?"
Her şeyi test edemezsiniz. User ile tam olarak hangi davranışların en önemli olduğunu onaylayın. Test çabasını kritik yollar ve karmaşık logic'e odaklayın, her olası edge case'e değil.
SİSTEM hakkında BİR şeyi doğrulayan BİR test yazın:
RED: İlk davranış için test yaz → test fail eder
GREEN: Geçirmek için minimal kod yaz → test pass eder
Bu sizin tracer bullet'ınız - yolun end-to-end çalıştığını kanıtlar.
Kalan her davranış için:
RED: Sonraki test yaz → fail eder
GREEN: Geçirmek için minimal kod → pass eder
Kurallar:
Tüm testler pass ettikten sonra, refactor adaylarına bakın:
RED iken asla refactor yapmayınız. Önce GREEN'e ulaşın.
[ ] Test davranışı anlatır, implementasyonu değil
[ ] Test sadece public interface kullanır
[ ] Test internal refactor'ı survive ederdi
[ ] Kod bu test için minimal
[ ] Spekulatif feature eklenmedi
Herhangi bir yaratıcı çalışmaya başlamadan önce bunu mutlaka kullanın - feature oluştururken, component inşa ederken, functionality eklerken veya davranış değiştirirken. Kullanıcı niyetini, gereksinimleri ve tasarımı implementation öncesinde araştırır.
Uygulama tamamlandığında, tüm testler geçtiğinde ve çalışmanızı nasıl entegre edeceğinize karar vermeniz gerektiğinde kullanın - merge, PR veya cleanup seçeneklerini sunarak geliştirme sürecinin tamamlanmasını rehberlik eder.
Kod incelemesi geri bildirimi alırken, önerileri uygulamadan önce kullanın; özellikle geri bildirim belirsiz veya teknik olarak şüpheli görünüyorsa - performatif anlaşmadan veya körü körüne uygulamadan ziyade teknik titizlik ve doğrulama gerekir.
Görevleri tamamlarken, büyük özellikleri hayata geçirirken veya merge etmeden önce çalışmanın gereksinimleri karşıladığını doğrulamak için kullanın.
Yeni bir feature üzerinde çalışmaya başlarken veya implementasyon planını yürütmeden önce kullanın - native araçlar veya git worktree fallback aracılığıyla izole edilmiş bir workspace sağlar.
Herhangi bir konuşma başlatırken kullanın - skill'lerin nasıl bulunacağını ve kullanılacağını belirler, clarification soruları da dahil olmak üzere HERHANGİ bir yanıt vermeden önce skill invocation gerektirir.