Yazılım Kalitesi Ve Statik Kod Analizi Nedir?
Yazılım kalitesi nedir, neden önemli?
Öncelikle kalite nedir ondan bahsetmemiz gerekiyor. Kalite aslında çok geniş bir kavram olup tarih boyunca defalarca tanımlanmaya çalışılmıştır. Ürün veya hizmete bağlı olarak tanımı değişebilir. Fakat en genel tabiri ile müşteri isteklerini önceden tahmin ederek, müşteri beklentilerini karşılamak ve ötesine geçmek, ürünün doğal yaşamı boyunca müşteriyi memnun etmek olarak tanımlanmaktadır.
Tabiki bunun da değerlendirmemiz gereken çok fazla açısı var. Siz bir danışmanlık firmasıysanız, ve kodu geliştirip veriyorsanız, müşteri açısından bakıldığında müşterinin tüm ihtiyaçlarını karşılaması olacaktır. Ancak kurumsal bir firma, örneğin bir banka, buradaki kalite öncelikle güvenlik, daha sonrasında performans, sağlımlık olacaktır.
Şimdi tabiki kod kalitesi konusunda da sadece developer’lara iş düşüyor gibi gözükse de aslında tester’lar, yöneticiler de kod kalitesi konusunda en az developer’lar kadar sorumluluk altında olmalı.
Neden önemli?
Tahmin ettiğiniz gibi bence kaliteye çok önem verilmemektedir. Sadece yazılımda değil, bence çoğu üründe kalite anlayışımız yetersiz. Daha ucuz olsun mantığı, bakış açısı yetersizliği aslında bence bizi bu konuda daha fazla zarara uğratmaktadır. Biliyorsunuz 2014’de icloud hack’lendi haberleri çıktı, ve bu aslında kullanıcıların yetersiz şifre kombinasyonu kullanmasından kaynaklıydı. Burada apple’ın suçunu soracak olursanız, 2 adımlı güvenlik dediğimiz 2 factor authontication henüz uygulanmamaktaydı. Sonuç: Maddi kısmı tahmin edilemeyen bir prestij kaybı.
Statik kod analizi nedir ? Bir test aracı mı ?
Statik kod analizi genelde test ile karıştırılır. Test’ler runtime’da bug’ları, hataları gözlemler, bu hatalara kod tarafında fix uygulanır. Statik kod analizi ise, kaynak kodu okur, pattern’lere göre üzerinde bulunan kuralları ihlal edip etmediğini ölçer.
Yazılım kalitesi ve güvenliği hangi tool'lar ile ölçülür?
Öncelikle şu yanlış algıyı kesinlikle ortadan kaldırmalıyız. Test’ler ve gözle yapılan kontroller hiç bir zaman yeterli değil. Piyasada bulunan ve domine eden bir kaç tane tool mevcut, bunlara örnek olarak CAST ve Sonarqube’u verebiliriz. Tabiki bunların dışında da çoklu teknolojiyi kapsayan tool’larda sadece wikipedia’da 36 adet tool bulunmaktadır. En bilinenleri Veracode, IBM Security AppScan, Coverity, Micro Focus. Tabiki çok basitleştirilmiş halini herkes kendi de uygulayabilir. Örneğin class isimleri belirli bir pattern’de olmalı kuralını koyduğunuzda bir reg-ex araması yaparsanız bu statik analize girer.
Senin şirketin CAST danışmanlığı veriyor. Peki CAST nedir, diğerlerinden farkları nelerdir?
CAST fransız menşeili bir ürün. Bu yüzden (KEST) değil de (KAST) diye okunur. Cast linkleme methodolojisini kullanarak kendini önplana çıkarıyor. Yani siz bir class’dan diğerine eriştiğinizde bunu bir link olarak atıyor ve buna bağlı olarak da kurallar sunuyor. Örneğin bir method’un ya da bir class’ın hiç kullanılmaması Cast’da bir kuraldır. Bunun dışında merkezi dashboard’ları ile sadece developer’ları değil, üst düzey yöneticileri de bilgilendiriyor. Bunu şöyle örneklendirebiliriz: Okula giden bir çocuğun dersler içeriğini annesinin bilmesine gerek yoktur. Ancak çocuğunun durumunu aldığı notlardan ölçüp anlayabilir. CAST da kodu ölçüp puanlıyor, daha önceki sonuçlarla birlikte tüm uygulamaları bir merkezde topluyor.
CAST merkezi dashboard'larda hangi başlıklar bulunmaktadır?
Toplamda 5 ana başlıkla kodu inceliyor CAST, Güvenlik, sağlamlık, verimlilik, transfer edilebilirlik, ve değiştirebilirlik.
Bir de TQI dediğimiz ana puan var, bu da tüm kurallara göre aldığı sonuç.
Sonarqube nedir?
Sonarqube da Cast gibi bir statik kod analizi tool’u ve opensource bir tool. Core’u search engine, plug-in’leri teknolojileri kapsıyor. Open source olarak örneğin C / C++ analyzer’ı mevcut. Ancak IOS Swift teknolojinin analizini yapmanız için bunu geliştiren şirkete para verip almanız gerekiyor. Ayrıca CAST’daki gibi merkezi dashboard’lara sahip olmanız için yine belirli bir para ödeminiz gerekiyor. Şöyle güzel bir özelliği var, opensource olduğu için yazılımcılar arasında çok kullanılan tool’lardan bir tanesi.
Bunların oluşturduğu kurallar nerelerden gelmektedir, nasıl oluşturulmaktadır?
Best practice’ler en temel kural kaynağı. Tool’lara özel kurallar da var. Bunların dışında teknoloji yayınlayıcılarının, örneğin Microsoft’un paylaştığı, düzeltilmesi gereken, bug’lara neden olan şeyleri kural haline getirmeyi de dahil edebiliriz. Ancak en büyük referansımız uluslaraası standartlar. CISQ (Consortium for IT Software Quality) 24 ayrı şirketin kurduğu bir yazılım kalite geliştiricisi. CWE: Common Weakness Enumeration. 600’den fazla kategoriye sahip. Güvenlik metriklerini içeriyor ve bu hem dinamik test, hem de statik kod analizlerine referans oluyor. Buffer overflow, cross-site scripting gibi kuralların belirleyicisi ve düzenli bir liste açıklıyor. OWAPS (open software security community) ise Web projeleri için J2EE, ASP.NET, and PHP code’larında referanslarını açıklayan bir standart belirleyicisi.
Kurumsal Firmalarda yazılım kalitesine önem veriliyor mu?
Bence burada doğru soru doğru şekilde önem veriliyor mu olmalı. Örneğin CAST neredeyse tüm bankalar ve sigorta şirketlerinde mevcut. Ancak SDLC sürecinde CAST ya da farklı bir statik analiz tool’unun bulunma oranı o kadar düşük ki kurumsal şirketlerde, tamamen yazılımcının insafına bağlı bırakılıyor. Hata yönetimi, o developer’ın sorumluluğunda, kalite ise yine onun canı nasıl isterse öyle olsun şeklinde oluyor. Bence henüz tam olarak doğru şekilde önem verilmiyor. Bunun için ülkemizde yazılım kalite uzmanları olmalı ve birimler kurulmalı. Kod üretiminde de yer verilmeli.
Danışmanlar ne kadar kazanıyor?
3bin ile 10bin arasında bir skala mevcut bizim işimizde. Her ne kadar sadece CAST danışmanı gibi görülsek de aslında işimizin daha kapsamlı olduğunu düşünüyorum. Bir development ve üretim bandı gereksimlerine hakim olmak çok önemli.
Yazılım kalitesi ile ilgili gelecekte bizi neler bekliyor?
Kaliteli kod geliştirmek, öyle öğretici ve bulaşıcı ki, bir kuralı öğrendiğinizde yazarken zaten istemsizce de olsa doğrusunu geliştiriyorsunuz. Ne kadar yaygınlaşırsa o kadar kaliteli kod’lar oluşur diyebiliriz. Bu kalite de yazılımın her alanınki kullanıcıya yansıyacaktır diye düşünüyorum. Devops’un gelişimi ile bu tool’lar implemente edilmesi katkı sağlayacaktır.
Autom8 şirketi şu anda yapay zeka ile uluslararası standart’ları birleştirmeyi hedefliyor mesela. Saniyeler içinde milyonlarca satır kodu tarayıp, uygun düzeltmeyi sunmayı planlıyor. Hataları öğrenip, teknolojiden bağımsız bir şekilde çözüm sunması güzel bir özellik olacaktır. Diğer tool’larda ise geleceğin nasıl şekilleneceğini beraber göreceğiz.
Yorumlar
YORUM YAP
Hesabınız varsa giriş yapmak için tıklayın