İçeriğe geç
Mert Yılmaz
CVEnglishİletişim
Tüm yazılar

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.