Back home

Eski sistemlerin modernizasyonu öncelikle uyumluluk merdivenini gerektirir

Copilot'un asıl faydalı kısmı ortamı, girişi, testi ve sınır katmanını katman katman ortaya çıkarmaktır.

Önce eski sistemi modernleştirin ve uyumluluk merdivenini oluşturun

Yirmi yıl önce ilk kez bir Java projesi açtığımda ilk gördüğüm şey kod kokusu değil, yaş kokusuydu. Build.xml hala oradadır ancak pom.xml orada değildir; dizin yapısı eski moda, test girişi de eski moda ve hatta “çalıştırılabilir bir ürünü yeniden oluşturup oluşturamayacağının” yeniden doğrulanması gerekiyor. Bu aşamada en sık yapılan hata, derslere ve yöntemlere odaklanmak ve modernleşmeyi asıl engelleyen şeyin ortam ve giriş olduğunu görmezden gelmektir.

Eski sistemleri modernleştirirken yapılacak ilk şey bir uyumluluk merdiveni oluşturmaktır. Merdivenin tabanında genellikle tek bir şey vardır: eski sistemin eski kurallar çerçevesinde istikrarlı bir şekilde çalışmasını sağlamak ve tercihen bir zaman kapsülü görevi görmek. Docker, eski JDK, eski derleme araçları, eski test komutları, bunlar kaba görünüyor ama çok etkililer. Bu temel düzgün olmadığı sürece, sonraki her değişiklik yeni gürültüye yol açacaktır: bozuk olanın kod mu, yoksa JVM, görüntü, mimari ve eklentiler mi bozuk olduğunu söylemek imkansızdır.

Sonra sıra köprüyü seçmeye geldi. Köprünün amacı çok spesifiktir: bir ucu eski kaynak koduna, diğer ucu ise yeni makineye bağlanır. Bu proje sonunda Java 8 ve Gradle 7.6’nın eline geçti ve bu da her iki tarafın kısıtlamalarına takılıp kaldı: Java 17 artık Java 1.5’in kaynak kodunu derlemeye istekli değil ve Java 6, ARM64’ün yerel ortamında çalışamıyor. Köprü yanlışsa modernizasyon alet zincirine takılıp kalacak; köprü doğruysa sonraki geçişler adım adım ilerleyebilecektir.

Buradaki en faydalı şey düzenleme ve çeviriyi büyük modele bırakmaktır. Ant mantığını Gradle’a çevirmeye, dizinleri eski düzene eşlemeye ve tekrarlayan ve mekanik konfigürasyonları ortadan kaldırmaya yardımcı olabilir. Örneğin, kaynak kodu dizinini açıkça eski yola yönlendirin ve eski main() testini çalıştırmak için özel bir görev ekleyin:

java {
    sourceCompatibility = JavaVersion.VERSION_1_5
    targetCompatibility = JavaVersion.VERSION_1_5
}
sourceSets {
    main {
        java {
            srcDirs = ['java']
        }
    }
}
tasks.register('runLegacyTest', JavaExec) {
    mainClass.set(project.findProperty('mainClass'))
    classpath = sourceSets.main.runtimeClasspath
}

Bu yapılanmanın önemi eski dünyanın kurallarını açık hale getirmektir. Eski projelerdeki en sıkıntılı şey çoğu zaman yetenek eksikliği değil, o yeteneğin alışkanlıklarda gizli olmasıdır. Test, main() girişi aracılığıyla gerçekleştirilir, kaynak kodu eski dizine yerleştirilir ve yapı, Ant dönemindeki yol varsayılarak yazılır. Copilot burada zamandan tasarruf edebilir, ancak yargılama süresinden değil çeviri süresinden tasarruf sağlar.

Yargılama süresi dışarıdan temin edilemez. Gradle 8 daha yeni görünüyor, Java 17 daha modern görünüyor ve doğrudan yukarıya atlamak da daha temiz görünüyor, ancak bu seçenekler aynı zamanda eski kaynak kodunun ve eski testlerin kısıtlamalarını karşılamayabilir. Modernizasyondaki en büyük korku, araç yükseltmelerini ilerleme olarak görmek, komutları çalıştırmayı ise sistemi anlamak olarak görmektir. Bir proje operasyonel temel çizgiyi tutturamadığı sürece, yeşil test bir zafer olarak görülmez; yalnızca şimdilik açıkta kalan yüzeye ulaşmamak olarak düşünülebilir.

Daha çok güvendiğim yaklaşım, öncelikle sorunu dört düzeye ayırmaktır: çalıştırılabilir mi, düzenlenebilir mi, test edilebilir mi ve değiştirilip değiştirilemez mi? İlk seviye sahneyi yeniden oluşturmak, ikinci seviye köprüyü belirlemek, üçüncü seviye eski testin neyi kurtardığını belirlemek ve dördüncü seviye gerçek yeniden düzenlemedir. Yardımcı pilot özellikle ilk iki seviyede faydalıdır. Günlükleri ve dizin yapılarını takip eden fiziksel çalışmalar ve parçalanmış ipuçlarını okunabilir bir harita halinde bir araya getirmek için uygundur. Dördüncü düzeyde, model yalnızca ulaşım ve yönlendirmelerden sorumlu olmalı ve insanların karar verme konusunda insanlara güvenmesi gerekir.

Eski sistemi modernleştirmenin en değerli sonucu, “çalışması gereken” birçok şeyi “gerçekten işe yarayan ve neden çalıştıklarını bildiğimiz şeylere” dönüştürmektir. Bu uyumluluk merdiveni oluşturulduktan sonra sonraki sökümlerin bir ritmi olacak ve değişikliklerin sınırları olacaktır. Yardımcı pilot şu anda ön saflarda yer alan bir asistan gibidir; elinde bir el feneriyle yaşa, girişe ve bağımlılıklara bakar. Asıl yönü belirleyen ise eski sistemin geçmişine dair yargılardır.

FAQ

What to read next

Related

Continue reading