Eski bir uygulamayı inceleyip modernleştirmek: yaklaşım ve sınırlar
Yayın
Kısa cevap
Önce uygulamayı inceleme hakkın olduğundan emin ol, sonra dışarıdan gözlemlenebilir davranışını (ekranlar, ağ istekleri, veri biçimleri) belgele, bundan bir sözleşme (API şeması, veri modeli, iş kuralları) çıkar, bu sözleşmeyi testlere dönüştür ve yeni sistemi aynı testlerden geçirerek parça parça taşı. Amaç eski kodu kopyalamak değil, davranışı doğru biçimde yeniden kurmaktır.
1. Önce yetki ve hukuk
Bir uygulamayı tersine mühendislikle incelemek yalnızca sahibi olduğun, lisansının buna izin verdiği ya da bunun için yetkilendirildiğin yazılımlarda yapılmalıdır. Lisans sözleşmeleri ve yerel yasalar bunu kısıtlayabilir. Emin değilsen başlamadan önce hukuki görüş al. Bu yazı, hakkın olan uygulamalar için bir mühendislik yaklaşımı anlatır.
2. Davranışı gözlemle
- Ekran akışlarını ve her ekranın yaptığı işi belgele.
- Kendi cihazında çalıştırdığın uygulamanın ağ isteklerini bir proxy aracıyla kaydet: adresler, istek ve yanıt örnekleri, kimlik doğrulama biçimi.
- Veritabanı şemasını, dosya biçimlerini ve logları incele.
- Kaynak kodu elindeyse oku ve eksik dokümanı koddan çıkar.
3. Sözleşmeyi çıkar
Gözlemlerinden uygulamanın dışarıya verdiği sözleşmeyi yaz: endpoint listesi, her birinin girdi ve çıktı şeması, veri modeli ve iş kuralları (hesaplamalar, durum geçişleri, yetki kuralları). Bu belge, modernleştirmenin gerçek kaynağıdır ve çoğu zaman eski sistemin hiç sahip olmadığı dokümandır.
4. Karakterizasyon testleri yaz
Eski sistemin bugünkü davranışını test olarak sabitle: belirli girdiye hangi çıktıyı veriyor? Bu testler hem eski hem yeni sistemde çalışmalıdır. Eski sistemdeki bir tuhaflık gerçek bir iş kuralı mı yoksa bir hata mı olduğuna bilinçli olarak karar ver.
5. Parça parça taşı
Her şeyi bir seferde değiştirmek yerine yeni sistemi eskinin yanında kur ve işlevleri tek tek yeni tarafa kaydır (strangler fig deseni). Her adımda testler geçmeli ve gerekirse eskiye dönebilmelisin. Böylece risk küçük kalır ve kullanıcılar kesinti görmez.
6. Belgele ve devret
Çıkardığın sözleşmeyi, kararları ve bilinen tuhaflıkları dokümana dönüştür. Modernleştirmenin kalıcı kazancı, sistemin artık anlaşılır ve test edilebilir olmasıdır.
Sık sorulanlar
- Tersine mühendislik yasal mı?
- Duruma bağlıdır. Sahibi olduğun, lisansın izin verdiği ya da yetkilendirildiğin yazılımlarda genellikle sorun olmaz; ama lisans ve yerel yasalar kısıtlayabilir. Emin değilsen hukuki görüş al.
- Kaynak kodu yoksa modernleştirme mümkün mü?
- Çoğu zaman evet. Ekranları, ağ isteklerini, verileri ve çıktıları gözlemleyip davranışı belgeler ve yeniden kurarsın. Ama kaynak koda göre daha fazla çaba ve belirsizlik gerekir.
- Modernleştirme ne kadar sürer?
- Uygulamanın büyüklüğüne ve ne kadar belgelendiğine bağlı. Küçük bir inceleme ile kapsamı netleştirmek en doğru ilk adımdır.
Bu konuda çalışıyorum
Yazan: Mert Yılmaz, freelance fullstack geliştirici.