Yazılımda direniş

Projede uzun zamandır giderilmeyen çeşitli hatalar var. Bunlar sistemin çalışmasını çok kısıtlayan hatalar değil ama en azından rahatsız edici şeyler.

Birbiriyler haberleşme yapan uygulamaların daha bu haberleşmeye hazır olmadan iletişime geçmeleri en basit örneklerden biri. Sistemde, haberleşme başladığı an belli aşamaların bitirildiği varsayılır. Bunun dışında haberleşme başlayınca yine karşılıklı olarak beklenen davranışlar da vardır ve bunlar protokollerle tanımlanmıştır. Kontrol birimi makinenin durumunu bildirirken haberleşme başlatılırken açılmış olan oturumun kod numarasını kullanmalıdır gibi. Eğer bu oturum kod numarası kullanılmazsa diğer uygulamalar bu mesajları göz ardı eder ve sistem beklendiği gibi çalışmaz (ama çalışır).

Başka bir hata ise çok farklı makinelerin üretilmesine rağmen ortak arabirimlerin ihmal edilmesi. Örneğin, görüntü işleme birimi belli durumlarda otomatik olarak tekrar ayarlanmalı. Bunu yapmak için belli bir modüldeki bir parametreye bir değer yazmak yeterli. Projeye 10 yıl önce başladığımızda da böyle yaptık. Zamanla daha farklı kameralar kullanmaya başladık, dolayısıyla da yeni modüller ve parametreler tanımlandı. Bazı modüllerde birden fazla parametrenin kullanılması gerekti. Böylece bu parametreyi kullanan uygulamanın kodu iyice karışık haller almaya başladı. Bu sorunu halletmenin yolllarından biri tabii ki bu işlem için bir arabirim tanımlamak. Anlaşılan bu parametre diğer parametrelere göre daha özel bir duruma sahip ve nerede olduğu da makineye göre değişebiliyor. Eğer otomatik ayarlama diye bir komut tanımlansaydı bu her makinede kolayca uygulanabilirdi ama görüntü işleme grubu bunu programlayamayacağını bildirdi. Anlaşılan kullandıkları kütüphanede bu değişikliği yapabilecek birine sahip değillerdi. Bir başka çözüm olarak yazdığım program bir konfigürasyon dosyasında bu bilgileri tutabilir ve her makine için bu dosya değiştirilebilir. Bunun avantajı tabii ki tek bir kodun her makine için çalışması. Tabii ki dezavantajları da var. Makineyi kuran elemanın bu dosyanın dilini anlaması lazım ve görüntü işleme birimiyle beraber bu değişiklikleri yapması lazım. Bu çözüme de yanaşılmadı. Ben de bütün bildiğim parametrelere ayarlama anında değerler yazmaya başladım. Tabii ki bazı makinelerde bu modüller mevcut olmadığından ekranda uyarı mesajları görünüyordu.

Test grubu bu hata mesajlarını her gördüğünde bunlar üzerine kısa toplantılar yapılıyordu ve her seferinde bunların nasıl çözüleceğini anlatıyordum. Cevap hep aynıydı: Bu değişiklikleri yapacak zamanımız yok. Doğru bir çözüm ile sorunlara yaklaşılmadığından daha kışkırtıcı çözümler aramaya başladım. Diğer uygulamaların protokolleri çiğnediği her durum için hata mesajları tanımlamaya başladım. Her seferinde bu hataları kullanıcı arabiriminde gösteriyorum.

Bu sabah görüntü işlemecilerden biri geldi ve bir makinede ufak tefek sorunlar olduğunu söyledi. Sorunların neler olduğunu sordum. Yazdığım uygulama mevcut olmayan modüllerdeki parametreleri sorguluyormuş. “Tabii ki yapıyor” dedim. “Bana verilmiş tanımlı bir arabirim olmadığı sürece bütün parametreleri sorgulayacağım” dedim. Görüntü işlemeci de “Veri tabanında o parametrenin olmadığını biliyorsun, onu sormana gerek yok ki” diye cevap verdi. Durumu daha açık bir şekilde anlatmam gerektiğini anladım ve kısa tiradıma başladım. “Eğer veri tabanında olmayan parametreyi sorgulamazsam hata mesajı gelmez. O zaman da herkes makine doğru çalışıyor diye düşünür. Makine doğru çalışıyor izlenimi yaratırsam kimse daha temeldeki bu tasarım problemleriyle ilgilenmez. Yani bütün bu hata mesajlarını sizi rahatsız etmek için yapıyorum. Bu program ve tasarım hataları giderilene kadar da mesajları göreceksiniz. Bunların ne olduğunu soranlara da durumu anlatmak zorunda kalacaksınız. Bunu durdurmanın yolu çok kolay. Protokollere uyun. Bana arabirim verin.” diye karşılık verdim.

Sonra ne mi oldu? Tabii ki hiçbir şey. Eleman, birkaç hafta sonra aynı konuşmayı tekrar yapmak üzere gülerek uzaklaştı. Ben de bir sonraki hata mesajım ne olsun acaba diye düşünmeye başladım.

Bir yanıt yazın