Performans tartışması genelde iki yoldan birine sapıyor. Birinci yol sezgi: “şu program ağırdır” denir, biri açar bakar, bir sorgu düzeltilir, konu kapanır. İkinci yol ölçüm: iz kaydı alınır, herkes rakamlara bakar, kimse hangi satırdan başlayacağını bilemez.
İkisi de yanlış değil. İkisi de aynı boşluğu bırakıyor: kodun içinde tekrar eden bir kalıp var mı, varsa nerede?
Bu bir ölçüm sorusu değil, envanter sorusu. İyi tarafı şu: envanteri çıkarmak için kodu çalıştırmanız gerekmiyor.
Kural motoru mu, çalışma zamanı ölçümü mü?
CPA, SAP’den okuduğu ABAP kaynak kodunu tanımlı statik kurallarla tarar. Paket, program, sınıf, fonksiyon ve değişiklik tarihi filtreleriyle nesneler keşfedilir; seçilen başlangıç nesnesinden include, fonksiyon ve sınıf/metot çağrılarına doğru belirlenen derinliğe kadar ilerlenerek bir ilişki ağacı çıkarılır. Kaynak satırları ve bu ilişkiler tarama anlık görüntüsü olarak saklanır.
Sınırı baştan söylemek gerekiyor: bu bir derleyici ya da çalışma zamanı profil aracı değil. Regex ve sınırlı kapsam çözümlemesine dayanan statik bir motor. Yapay zekâ ile kod analizi yapmıyor ve güvenlik açığı tarayıcısı değil; dinamik çağrılar ile çalışma anında üretilen SQL bu kapsamın dışında kalıyor.
Karşılığında verdiği şey net: kodu çalıştırmadan, üretim ortamına dokunmadan, tekrarlanabilir bir bulgu listesi.
Kuralların baktığı kalıplar
- Döngü içinde
SELECT. Doğrudan döngü gövdesinde ya da döngüden çağrılan FORM, fonksiyon veya metodun içinde. - Geniş okuma.
SELECT *kullanımı veSELECT ... ENDSELECTbiçiminde döngüleşen okuma. - Internal table erişimi.
BINARY SEARCHolmadan anahtarla okuma ve iç içe döngüde standart tablo üzerindeWHEREaraması. - Birleştirme adayı. Aynı kapsamdaki iki
SELECT'in ortak koşullarından üretilen join adayı.
Bu listeyi görünce bir şey netleşiyor: kurallar dar ve okunabilir. Bulgu “kod kötü” demiyor, “şu satırda şu kalıp var” diyor. Yanlış pozitif de mümkün — anahtarla okuma bulgusu tablo türünden bağımsız üretilir, birleştirme adayı ise iki sorgunun güvenle birleştirilebildiğini kanıtlamaz.
Düzeltme taslağı nerede biter?
Bulgular nesne, kural, önem seviyesi, satır aralığı ve kaynak bağlamıyla sunulur. Desteklenen durumlarda kaldırılacak, eklenecek ve değiştirilecek satırları gösteren bir düzeltme taslağı üretilir; gerektiğinde tablo alan kataloğu bu taslağa girer.
Taslağın yanındaki işaret asıl önemli olan. Bazı sonuçlar uygulanabilir aday, bazıları yalnız inceleme rehberidir. Üretilen kod SAP’ye uygulanmaz ve taslağın her programda davranışsal olarak güvenli olduğu garanti edilmez. Karar ve test geliştiricide kalır.
Sağlık yüzdesini yönetime nasıl anlatmalı?
Bulgu skorları ve sorgu sayısından türetilen bir sağlık yüzdesi hesaplanır. Bu yüzdeyi yönetime “sistem sağlığımız yüzde 82” diye götürmek yanlış olur; “tanımlı kalıplara göre statik bulgu göstergesi” demek doğru olur. Skorlar kodda sabittir ve ölçülmüş bir çalışma süresi maliyetine karşılık geldiği iddia edilemez.
Tek bir yüzde yerine anlık görüntüler arasındaki değişim daha çok şey söyler. Yeniden tarama önceki taramayı koruyup yeni taramayı aynı zincire bağlar; hangi nesnelerin ve bulguların değiştiği bu karşılaştırmada görünür.
Kontrolü erkene almak isteyenler için bir bağlantı noktası daha var: serbest bırakılan transport isteklerinden gelen olay, değişen nesneler için CPA analizini tetikleyebilir. Bunu zorunlu bir kalite kapısı gibi kurgulamayın; kod üretime çıkmadan önce bir kez daha bakılması için bir kanca olarak düşünün.
Bir teklif: en çok şikâyet aldığınız Z paketini seçin, tek bir tarama çalıştıralım ve çıkan listeyi birlikte üç gruba ayıralım — bu hafta düzeltilecek, sıraya girecek, dokunulmayacak. Bu ayrımı yapabilen ekip bulgu listesinden çekinmeyi bırakıyor.