Kafayı yiyecektim! Şu ana kadar yazdığım en karmaşık, birbirine dolanmış sınıflardan birini temizlemem gerekiyordu. Kod o kadar iç içe geçmişti ki, bir metodu değiştirirken hangi köşeden başka bir hata çıkacağını kestirmek imkansızdı. Ama sonra gözüm test klasörüme ilişti ve içim rahatladı.
Test Güven Ağım
Elimdeki en büyük koz, kapsamlı yazılmış birim testlerdi. Bu testler, kodun her bir küçük parçasının "şu anda" doğru çalıştığının garantisiydi. Refactor'a başlamadan önce tek yaptığım, tüm test suite'ini çalıştırıp hepsinin yeşil tik (pass) verdiğinden emin olmaktı. Bu benim başlangıç noktamdı.
Refactor Savaş Alanı
Sonra, korkusuzca dalış yaptım. Metotları böldüm, gereksiz bağımlılıkları dependency injection ile temizledim, isimleri anlamlı hale getirdim. Her değişiklikten sonra, hızlıca ilgili birim testlerini çalıştırıyordum. Bir test kırmızıya (fail) döndüğünde, bu bir felaket değil, bir erken uyarı sistemiydi. "Hey, az önce yaptığın değişiklik şu beklenen davranışı bozdu" diye bağırıyordu bana. Meğerse sorun, yeni yazdığım metodun edge case'lerden birini atlamasıymış. Test olmasa, bu bug production'a kadar gizli kalabilirdi!
Güvenle İlerlemek
Bu süreç, agresif bir temizlik yaparken hiçbir işlevselliği bozmadığımdan emin olmamı sağladı. Kod yapısı değişiyor, her şey yerinden oynuyordu ama testler, davranışın aynı kaldığının canlı kanıtıydı. Şaka gibi ama, en riskli görünen değişikliği yaparken bile içinizde o rahatlık oluyor. "Neyse ki testim var, beni korur" diye düşünüyorsunuz.
Sonuçta, baştan sona yeniden yazılmış gibi duran bir modülüm oldu, ama tüm birim testlerim yine yeşil. Sistem eskisinden çok daha okunaklı ve bakımı kolay. Tüm bu cesareti, o yazdığım (bazen can sıkıcı da olsa) testlere borçluyum.
Siz de büyük refactor'lerden önce test yazmak için ekstra efor harcıyor musunuz? Yoksa "önceden test yazayım da rahat edeyim" diyenlerden misiniz? Ya da test yazmadan korkusuzca koda dalabilen var mı aramızda?
Elimdeki en büyük koz, kapsamlı yazılmış birim testlerdi. Bu testler, kodun her bir küçük parçasının "şu anda" doğru çalıştığının garantisiydi. Refactor'a başlamadan önce tek yaptığım, tüm test suite'ini çalıştırıp hepsinin yeşil tik (pass) verdiğinden emin olmaktı. Bu benim başlangıç noktamdı.
Python:
pytest -v
# Tüm testler PASS, tamam, hadi başlayalım!
Sonra, korkusuzca dalış yaptım. Metotları böldüm, gereksiz bağımlılıkları dependency injection ile temizledim, isimleri anlamlı hale getirdim. Her değişiklikten sonra, hızlıca ilgili birim testlerini çalıştırıyordum. Bir test kırmızıya (fail) döndüğünde, bu bir felaket değil, bir erken uyarı sistemiydi. "Hey, az önce yaptığın değişiklik şu beklenen davranışı bozdu" diye bağırıyordu bana. Meğerse sorun, yeni yazdığım metodun edge case'lerden birini atlamasıymış. Test olmasa, bu bug production'a kadar gizli kalabilirdi!
Bu süreç, agresif bir temizlik yaparken hiçbir işlevselliği bozmadığımdan emin olmamı sağladı. Kod yapısı değişiyor, her şey yerinden oynuyordu ama testler, davranışın aynı kaldığının canlı kanıtıydı. Şaka gibi ama, en riskli görünen değişikliği yaparken bile içinizde o rahatlık oluyor. "Neyse ki testim var, beni korur" diye düşünüyorsunuz.
Sonuçta, baştan sona yeniden yazılmış gibi duran bir modülüm oldu, ama tüm birim testlerim yine yeşil. Sistem eskisinden çok daha okunaklı ve bakımı kolay. Tüm bu cesareti, o yazdığım (bazen can sıkıcı da olsa) testlere borçluyum.
Siz de büyük refactor'lerden önce test yazmak için ekstra efor harcıyor musunuz? Yoksa "önceden test yazayım da rahat edeyim" diyenlerden misiniz? Ya da test yazmadan korkusuzca koda dalabilen var mı aramızda?