<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Kamu Yazılımlarında Ürün Kalitesinin Değerlendirilmesi İçin Pratik Bir Kod Kalitesi Modeli</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Savaş Öztürk</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Nurhan Yağcı</string-name>
          <email>nurhan.yagci2@tubitak.gov.tr</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Anahtar Kelimeler: Yazılım Kalite Metrikleri</institution>
          ,
          <addr-line>Ölçüm Otomasyonu, Araç Seçimi</addr-line>
        </aff>
      </contrib-group>
      <fpage>724</fpage>
      <lpage>737</lpage>
      <abstract>
        <p>Özet. Yazılım kalitesini etkileyen faktörler temel olarak doğrudan ölçülebilenler ve doğrudan ölçülemeyenler olarak ikiye ayrılır. Kamu yazılımlarında süreç ve ürün kalitesi genellikle ihmal edilir ve bu durum maliyeti olumsuz etkiler. Yazılımın test edilmesi ve incelenmesi istendiğinde çoğu zaman projenin sonuna yaklaşılmıştır ve elde sadece yazılım kodu vardır. Bu tür yazılımların kalitesi değerlendirilmek istendiğinde, doğrudan ölçülemeyen kullanılabilirlik, test edilebilirlik, taşınabilirlik gibi kalite faktörlerinin incelenmesi zordur. Diğer taraftan yazılım kodu doğrudan ölçülebilir ve yazılımın kalitesi hakkında ipuçları verebilir. Bu çalışmada, sadece yazılımın koduna bakarak yazılımın kalitesi hakkında elde edilebilecekler araştırılmış ve yazılım kalitesi, yazılım güvenilirliği ve bakım yapılabilirliğini ölçmek amacıyla geliştirilen pratik yazılım kalite modelleri karşılaştırmalı olarak incelenmiştir. Sonuç olarak, yazılımın kalitesini hızlı ve basit bir şekilde ölçmek amacıyla kullanılacak pratik bir model önerilmiştir.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Giriş</title>
      <sec id="sec-1-1">
        <title>BT Denetimlerinde yazılım kalitesini değerlendirmeye nasıl katabiliriz? (Sayıştay)</title>
      </sec>
      <sec id="sec-1-2">
        <title>Tedarik ettiğimiz/geliştirdiğimiz/alt yükleniciye yaptırdığımız projelerde</title>
        <p>yazılımların kalitesini en az maliyetle ve en kısa sürede nasıl
değerlendirebiliriz? (Çok sayıda kamu kurumu)</p>
        <p>Taleplerin ve talep edenlerin çeşitliliği; sadece uzmanlar tarafından değil herkes
tarafından anlaşılabilen, ekonomik, aynı ürün için her zaman aynı sonucu veren,
uygulanabilir iyileştirme önerileri içeren bir kalite değerlendirme raporlamasına ihtiyaç
olduğunu göstermektedir.</p>
        <p>Ülkemizde başta e-devlet yazılımları olmak üzere kamunun ihtiyacına yönelik
geliştirilen yazılımlar, genelde bakım yapılabilirlik ve güvenilirlik sorunları içerir,
yeterince test edilmeden onaylanır ve kullanılırken çok sayıda sorun yaşanır. Müşteri,
yazılımın şartnameye uygun olarak geliştirildiğinin incelenmesi ve test edilmesi
gerektiğini genellikle teslim alırken fark eder. Bu aşamada kendisine sadece yazılımın kodu
ile varsa şartnamede belirtilen kısıtlı sayıda dokümantasyon teslim edilir. Kod
incelenerek yazılımın kalitesi ve içerdiği hata sayısında öngörüde bulunma başarısı da doğal
olarak düşmektedir.</p>
        <p>
          Diğer yandan sadece statik kod analizi ile yazılım hakkında çok önemli bilgiler
edinilebileceği, yazılımın barındırdığı çok sayıda hatanın testlerden önce elimine
edilebileceği araştırma konusu olmuştur. Johns [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] çok sayıda yazılım projesinden yaptığı
çıkarımla, statik kod analizi ile yazılımdaki toplam hata (defect) sayısının %60’ının
tespit edilebileceğini ortaya koymuştur. Rome Laboratuvarı Modeli gibi güvenilirlik
modelleri de bir projede konsept aşamasından testlere kadar bütün süreçlere ait denetim
listeleri ve ölçümleri değerlendirse de, en çok hatanın kodlama sürecinde yapılan
yanlışlardan kaynaklandığını iddia etmektedir [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ].
        </p>
        <p>
          Bu çalışmada, yazılımın kalitesinin değerlendirilmesi için sadece kodun sunulduğu
durumlarda, öncelikle incelemeye tabi yazılımın kalitesinin pratik bir şekilde
değerlendirilmesi, ardından da etkin ve uygulanabilir iyileştirme önerilerinin sunulması için
altyapı kurulması amaçlanmıştır. Sadece kod üzerinde inceleme yapılarak, yazılım
kalitesinin ne seviyede olduğunu değerlendirmek için kullanılan modeller incelenmiş
ve bu modellerden günümüz ihtiyaçlarına göre uygulanabilir bir kod kalitesi
değerlendirme modeli oluşturulmuştur. Modeli oluştururken yazılım kalitesine yönelik
ISO/IEC 25010:2011 standardı [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] ve McCall yazılım kalitesi modeline [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] ilave olarak
bakım yapılabilirliğe ve güvenilirliğe yönelik güncel modellerden Rome Lab.
Güvenilirlik Modeli, Sonar Kalite İndeksi Modeli, Sonar Toplam Kalite Modeli, Oman Bakım
Yapılabilirlik İndeksi, SIG (Software Improvement Group) Bakim Yapılabilirlik
        </p>
      </sec>
      <sec id="sec-1-3">
        <title>Modeli, Neufelder Full-Scale Modeli incelenmiştir.</title>
        <p>Bütün bu modeller incelendiğinde kod üzerinde karmaşıklık, büyüklük, tasarımsal
yaklaşım, birim test miktarı, uygulama açıklık bulguları, tekrarlanmış kod oranı,
kodlama stili gibi çok çeşitli faktörün dikkate alındığı ve bunların çeşitli
kombinasyonlarla bileşkesinin alınarak modeller oluşturulduğu görülmektedir. Öznel
değerlendirmelere yol açabilecek denetim listelerinden kaçınılarak ve herkes tarafından erişilebilir
özellikle açık kaynak kodlu araçlar tercih edilerek inceleme yapılabilecek bir model
önerilmiştir. İncelenen modellerde uygulanabilirliği tarafımızca mümkün olmayan ya
da programlama paradigmalarındaki gelişime ayak uyduramayan bazı kriterler
uyarlanarak kullanılmıştır. Önerilen modelin etkinliği, seçilen açık kaynak kodlu yazılımlar
üzerinde yapılan analizlerle gösterilmiştir.</p>
        <p>Bildirinin ikinci bölümünde adı geçen modeler anlatılacak, üçüncü bölümde modellerin
karşılaştırmalı analizi yapılacak, dördüncü bölümde önerilen model açıklanacak ve
beşinci bölümde çalışmanın özeti yer alacaktır.
2</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>Pratik Bakış Açısıyla Yazılım Kalite Modelleri</title>
      <p>Yazılım kalite modelleri yetmişli yıllardan itibaren kullanılmakta ve yazılımın
kalitesini bütünlük, esneklik, tekrar kullanılabilirlik gibi çeşitli açılardan
incelemektedir. Bu bölümde yazılım kalitesini değerlendirmeyi hedefleyen belli başlı modeller
incelenecek ve farklılıkları karşılaştırılacaktır.
2.1</p>
      <sec id="sec-2-1">
        <title>McCall Modeli</title>
        <p>
          Yazılım kalitesini belirleyen faktörler iki geniş kategoriye ayırılabilir: 1) Doğrudan
ölçülebilenler (örneğin satır sayısı başına düşen hata sayısı) 2) Doğrudan
ölçülemeyenler (kullanılabilirlik ya da bakım yapılabilirlik) Her iki kategori için de ölçmek istenen
yazılım (doküman, program, veri) bazı kıyas noktaları ile karşılaştırılarak kalitenin
seviyesi belirlenmeye çalışılır. Yazılım kalitesini doğrudan ölçmek amacıyla kullanılan
ölçütleri geliştirmek çok zordur ve bazı durumlarda imkansızdır.Yazılım kalitesini
etkileyen faktörlerin belirlenmesi ve kalitenin sayısal bir şekilde ifade edilmesine yönelik
ilk çalışmalardan birisi McCall Kalite Modeli'dir [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ].
        </p>
        <p>McCall modeli modelinde bakım yapılabilik, güvenilirlik, esneklik gibi 11 adet kalite
faktörü ve bu faktörleri etkileyen 23 kriteri tanımlamıştır. Bu model kalitenin
karakteristikleri ile metrikler arasında bağ kurmuştur. Her faktörün kaliteye etkisini ölçmek için
Fq, yazılım kalite faktörü, cn regresyon katsayısı, mn de metrik değeri olmak üzere (1)
tanımlanmıştır.</p>
        <p>Fq = c1 m1 + c2 m2 + . . . + cn mn
(1)</p>
        <sec id="sec-2-1-1">
          <title>Bu modelde metriklerin çoğu öznel bir şekilde ölçülmektedir. Değerlendiriciye her</title>
          <p>faktörle ilgili sunulan sorulara 0 (düşük) ile 10 (yüksek) skalasında bir not vermesi
istenmektedir. Değerlendiricinin yazılımla ilgili rolüne ve kişisel özelliklerine göre
farklı sonuçlar çıkması muhtemeldir. Metriklerin nesnelliği tartışmalıdır ve yazılım
ürününün işlevselliği doğrudan ele alınmamıştır.
2.2</p>
        </sec>
      </sec>
      <sec id="sec-2-2">
        <title>ISO/IEC 9126 ve ISO/IEC 25010 Standartları</title>
        <p>
          ISO/IEC 9126 standardı yazılım ürün kalitesini 6 temel karakteristik bileşeni ile ifade
eder [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ]: İşlevsellik, güvenilirlik, bakım yapılabilirlik, taşınabilirlik, kullanılabilirlik ve
verimlilik. Bu 6 karakter 27 alt karaktere bölünür. Standard, bu faktörlerin göstergesi
olabilecek metrikler hakkında da standard bir bilgi sunar. ISO kalite modeli standard
bir terminoloji sunarak metrikler ve kalite faktörleri hakkında ortak çerçeve oluşturur.
Ancak standartta listelenen, harcanan efor, hata düzeltme veya test süresi gibi metrikler
doğrudan ölçülemeyen metriklerdir ve birtakım kabullere dayanır. ISO/IEC 9126’nın
güncellenmiş hali olan ISO/IEC 25010 standardı da kalite faktörlerine uyumluluk ve
güvenliği ekler, ancak doğrudan ölçülebilir metriklere değinmez [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ][
          <xref ref-type="bibr" rid="ref6">6</xref>
          ].
2.3
        </p>
      </sec>
      <sec id="sec-2-3">
        <title>Rome Lab. Güvenilirlik Modeli</title>
        <p>
          Yazılım kalitesini ya da kaliteyi oluşturan alt faktörleri değerlendiren çok sayıda
model de kalite faktörlerinin bir denetim listesinde yer alan sorulara cevap verilmesi
dayalı olduğu benzer bir yöntemi izlemiştir. 1992 yılında ortaya çıkan Rome
Laboratuvarı Modeli yazılım güvenilirliği öngörümü (prediction) ve tahminine (estimation)
yönelik kapsamlı bir yaklaşım sunar [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ]. Bu model yazılım projesinin konsept
aşamasından sistemin devreye alınması ve bakım sürecine kadar tüm safhalarda yazılım
hakkında topladığı çeşitli veriler ile yazılımın hata yoğunluğunu (yazılımın barındırdığı
satır sayısı başına hata sayısı) öngörür, sistem arızası oranını (belirli bir zaman
aralığında sistem arızası oluşmasına yol açan yazılımsal hata) tahmin eder. Bu modeli
geliştiren ABD Hava Kuvvetleri'nin geliştirdiği projelerden elde edilen birikim
kullanılır, bir takım denetim listeleri yardımı ile öznel bilgiler derlenir, dokümantasyon,
süreç, ekibin yapısı ve yazılım kodu da dahil olmak üzere kapsamlı bir veri ile
güvenilirlik değerleri sayısallaştırılır. Tablo 1’de Rome Lab. Modeli Hata Yoğunluğu öngörüm
metrikleri yer alır.
        </p>
        <sec id="sec-2-3-1">
          <title>Tablo 1. Rome Lab. Modeli Ölçütleri</title>
          <p>Metrik Grubu</p>
          <p>Metrik
İsim
Ölçüt
Uygulama Tipi
Metriği
İster Metriği
Tasarım
Metrikleri
Gerçekleştirme
Metrikleri</p>
          <p>A
D
SA
ST
SQ
SL
SX
SM
SR</p>
          <p>Uygulama Tipi
(Application)
Geliştirme Organizasyonu
(Development
Organization)
Yazılım Anomali Yönetimi
(Software Anomaly
Management)
Yazılım İzlenebilirliği
(Software Traceability)
Yazılım Kalitesi
(Software Quality)
Yazılım Dili
(Software Language)
Yazılım Karmaşıklığı
(Software Complexity)
Yazılım Modülaritesi
(Software Modularity)
Yazılım Standartları
Değerlendirmesi
(Software Standards
Review)</p>
          <p>Değişik tipte uygulamalar
geliştirmenin getirdiği zorluk
Geliştirme organizasyonu,
proje yönetimi, metodlar,
araçlar, teknikler,
dokümantasyon
Hataya duyarlı tasarımın
göstergesi
Tasarım ve kodun isterlere
olan izlenebilirliği
Kodlama standartlarına uyum
Hata yoğunluğunun yazılım
diline göre normalizasyonu
Birim karmaşıklığı
Birim büyüklüğü
Tasarım kurallarına
uyumluluk</p>
          <p>En düşük ve en
yüksek çarpan
değerleri
2-14 (hata/1000
satır)
0.5 - 2.0
0.9 - 1.1
1.0 - 1.1
1.0 - 1.1
1.0 - 1.4
0.8 - 1.5
0.9 - 2.0
0.75 - 1.5</p>
          <p>Modelde yazılımın her sürecinde mevcut dokümantasyon ve veri kullanılarak yapılan
değerlendirmede, tarihsel ve deneysel verilerden elde edilen çıkarımlarla hesaplanmış
katsayılar kullanılır. Denetim listelerine verilebilecek öznel cevaplar sonucu
etkileyebilir. Hesaplamalarda günümüzde donanımların güçlenmesi ile artık geçerliliği
kalmamış ya da elde edilmesi zor bazı parametreler (örneğin işlemci için milyon saniyede
gerçekleştirilen işlem sayısı (MIPS) değerleri, artık kullanılmayan diller) bulunması da
modelin revize edilmesi ihtiyacını doğurmaktadır. Kullanılan kodlama standardının
kalitesi de modele önemli bir katsayı ile girdi sağlayan kriterdir. Ancak bu modelin
getirdiği en büyük katkı, yazılım kodu üzerinde yapılan satır sayısı ve çevrimsel
karmaşıklık ölçümlerinin, modele nesnel, ölçülebilir bir girdi sağlamasıdır.</p>
          <p>Tablo 1’de yer alan SX metriğinin hesaplanmasında McCabe çevrimsel karmaşıklık
metriğinden faydalanılır. SM metriğinin hesaplanmasında ise birim kod büyüklüğüne
bakılır.</p>
          <p>SX = (1.5a + b + 0.8c) / NM (2)
SM = (0.9u + w + 2x) / NM (3)
a = çevrimsel karmaşıklığı 20'ye eşit veya daha yüksek olan metodların sayısı
b = çevrimsel karmaşıklığı 20'den az ve 6'dan fazla olan metodların sayısı
c = çevrimsel karmaşıklığı 6'dan az olan metodların sayısı
u = satır sayısı 100'e eşit veya daha düşük olan metodların sayısı
w = satır sayısı 100'den fazla veya 500'den az olan metodların sayısı
x = satır sayısı 500'den fazla olan metodların sayısı
NM = toplam metod sayısı</p>
          <p>
            En eski fakat en çok kullanılan yazılım kalite metriklerinden birisini ortaya koyan
McCabe, çevrimsel karmaşıklık eşiğini 10 olarak belirlemiş olup, Rome Lab.
Modelinde eşik değeri olarak atanan 6 değeri katı bir kriterdir [
            <xref ref-type="bibr" rid="ref6">6</xref>
            ]. Bu model projenin
ihtiyaçlarına göre katsayıları değiştirilerek kullanılabilir.
2.4
          </p>
        </sec>
      </sec>
      <sec id="sec-2-4">
        <title>Full-Scale Yazılım Güvenilirlik Modeli</title>
        <p>
          Roma Lab. Modeli'nde kriterler doksanlı yıllarda 50'ye yakın projeden elde edilen
verilerle belirlenmiştir. Neufelder Rome Lab. Modeli'ne benzer ve daha kapsamlı bir
model ileri sürmüştür [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ]. Full Scale adlı model 3 aşamada, kapsam genişletilerek
uygulanabilir. Modelde çoğunlukla günümüz yazılımlarından elde edilen çıkarımlar
kullanıldığı için günceldir. Modelin yer aldığı Frestimate adlı yazılım Roma Lab.
modelinin uygulanmasını da içermektedir. 2 yılda bir ücrete tabi katsayı güncellemesi
yapılabilmektedir. Daha çok emniyet kritik yazılımlar için ihtiyaç olan güvenilirlik
analizlerinin yapılabilmesi için tercih edilen bu yaklaşımlar, kamu yazılımlarının
değerlendirilmesi için maliyetli olabilir. Bu nedenle, düşük maliyetli ya da ücretsiz açık
kaynak kodlu yazılımların incelenmesi gerekmiştir.
2.5
        </p>
      </sec>
      <sec id="sec-2-5">
        <title>Software Improvement Group (SIG) Bakım Yapılabilirlik Modeli</title>
        <p>
          Yalnızca kodun incelenmesi ile yazılımın bakım yapılabilirliğini derecelendiren SIG
Bakım Yapılabilirlik Modeli, oldukça pratik ve herkes tarafından anlaşılabilir bir
çözüm sunar [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ]. Avrupa’da sertifkasyon kuruluşu TüvIT bu modeli kullanarak
yazılımlara Bakım Yapılabilirlik sertifikası vermektedir [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ]. Yazılımın projesinin
büyüklüğü, yazılım birimlerinin büyüklüğü ve karmaşıklığı, kod tekrarı oranı ve birim
testlerinin kodun ne kadarını kapladığı (coverage) ölçülerek, yazılım analiz
edilebilirlik, değiştirilebilirlik, test edilebilirlik ve kararlılık kriterleri yönünden derecelendirilir.
Nihai sonuç ise yazılım bakım yapılabilirliğinin 1 (en düşük) ila 5 (en yüksek) arasında
bir bakım yapılabilirlik notu ile ifade edilebilmesidir. SIG Bakım Yapılabilirlik Modeli
açık kaynak kodlu bir yazılım kalitesi aracı olan Sonar'da eklenti olarak yer almıştır.
SIG modelinin yazılım büyüklüğüne ve karmaşıklığa yaklaşımı Rome Lab.
Modeli’nden biraz farklıdır. Rome Lab. Modeli’nde eşik değerleri aşan metodların
sayısı tüm metod sayısına oranlanırken, SIG'de birimlerin satır sayıları, genele
oranlanmaktadır. SIG modelinin yazılım büyüklüğü, kod tekrarları ve test kapsaması
kriterleri Tablo 2, birim kod karmaşıklığı Tablo 3, birim kod büyüklüğü ise Tablo 4’deki
derecelendirmeye göre yapılır.
        </p>
        <sec id="sec-2-5-1">
          <title>Tablo 2. SIG Bakım Yapılabilirlik Modeli seviyelendirme</title>
          <p>Seviye
1
2
3
4
5</p>
          <p>Yazılım
Büyüklüğü</p>
          <p>
            SIG modelinin geliştirilmesinde en önemli motivasyon ISO/IEC 9126, ISO/IEC
25010 gibi standartların yazılım kalitesinde yönelik nesnel, ölçülebilir girdiler
sağlayamayışı ve Oman Bakım Yapılabilirlik İndeksi'nin ayrıştırıcı bir sonuç vermemesi
olmuştur [
            <xref ref-type="bibr" rid="ref8">8</xref>
            ][
            <xref ref-type="bibr" rid="ref10">10</xref>
            ]. Oman bakım yapılabilirlik metriği satır sayısı, yorum satır sayısı,
karmaşıklık ve halstead metriklerini birlikte değerlendiren matematiksel bir modeldir
[
            <xref ref-type="bibr" rid="ref11">11</xref>
            ]. Günümüz yazılım paradigmaları için geçerli sonuçlar üretememektedir. C++, Java
gibi yüksek seviyeli dillerde Halstead metriğinin kullanımı anlam ifade etmemektedir
[
            <xref ref-type="bibr" rid="ref12">12</xref>
            ]. Düşük kaliteli yazılımlarda bile yüksek bakım yapılabilirlik notları ortaya
çıkmaktadır. Eşik değeri olan 85'in altında çıkan proje sayısı yok denecek kadar az olmuştur.
Model en çok yorum satır sayısının bakım yapılabilirliğine etkisini kıyaslamada
etkilidir (Şekil 1).
          </p>
          <p>Şekil 1. Oman Bakım Yapılabilirlik İndeksi’nin hesaplanması
2.7</p>
        </sec>
      </sec>
      <sec id="sec-2-6">
        <title>Sonar Toplam Kalite Modeli (Sonar Total Quality Plugin - TQ)</title>
        <p>Sonar'da kalite değerlendirmeye yönelik entegre edilmiş pratik modeller SIG ile
sınırlı değildir. Çok sayıda eklenti arasından Quality Index, Total Quality Plugin ve
SQALE eklentileri de kod üzerinden değerlendirme yapmaktadır. Sonar bu eklentilerin
genişleştilmiş versiyonlarını ticari sürümüne dahil etmektedir.</p>
        <p>Total Quality modeli de SIG modeli gibi farklı açılardan kodu incelemeyi amaçlar.
İncelenen diğer modellere göre ilave olarak mimari karmaşıklığın, nesne yönelimli
tasarım metriklerinin ve birim test başarı oranının kullanıldığı görülmektedir. Ancak
kullanımdan kaldırıldığı için bazı parametreler hakkında belirsizlikler vardır. Total</p>
        <sec id="sec-2-6-1">
          <title>Quality (4)’deki gibi hesaplanır.</title>
          <p>TQ = 0.25*ARCH + 0.25*DES + 0.25*CODE + 0.25*TS
Mimari: İlk defa mimariye yönelik bir metrik tanımlanmış olsa da Tangle Index’in ne
olduğu ve nasıl hesaplandığı literatürde bulunmamaktadır.</p>
          <p>
            ARCH = 100 – TI (Karmaşıklık indeksi)
Tasarım: Nesne Yönelimli programlama paradigması ve Chidamber&amp;Kemerer
metriklerinin kullanılması açısından da olumlu bir örnektir [
            <xref ref-type="bibr" rid="ref13">13</xref>
            ]. Ancak burada da acel
adındaki ivmeleme faktörünün ne amaçla kullanıldığı ve nasıl ayarlanabileceği net
değildir.
          </p>
          <p>DES=0.15*NOM+0.15*LCOM+0.25*RFC0.25*CBO+0.20*DIT (6)
NOM = (1 - (class_complexity - 12) / (acel * 12)) * 50 + (1 - (method_complexity - 2.5) / (acel
* 2.5)) * 50
LCOM = (1 - (lack_of_cohesion_of_method - 1) / (acel * 1)) * 100
RFC = (1 - (response_for_class - 50) / (acel * 50)) * 100
CBO = (1 - (efferent_coupling - 5) / (acel * 5)) * 100
DIT = (1 - (depth_of_inheritance_tree - 5) / (acel * 5)) * 100
Birim Kod Büyüklüğü: Bu metrik yorum satırlarını ve tekrar kod yoğunluğuna baktığı
gibi Sonar aracı içerisinden hesaplanacak kural uyumluluğu indeksini de formülasyona
ekler.</p>
          <p>Code = 0.15*DOC + 0.45*RULES + 0.40*DRYNESS
(4)
(5)
(7)
DOC = Belgelenmiş API yoğunluğu (yorum satırları)
RULES = Kurallara uygunluk indeksi
DRYNESS = 100 – tekrarlanan kod yoğunluğu
Birim Test Kapsaması: Burada birim test kapsama oranı %80 etki ettiği gibi ilk defa
birim test başarım oranı kullanılmıştır.</p>
          <p>Test = 0.80*COV + 0.20*SUC
COV = Test kapsama oranı
SUC = Birim test başarım oranı
2.8</p>
        </sec>
      </sec>
      <sec id="sec-2-7">
        <title>Sonar Kalite Endeksi Modeli (Sonar Quality Index Plugin- SQI)</title>
        <p>Sonar Kalite Endeksi Modeli, PMD, CheckStyle gibi açık kaynak kodlu güçlü kalite
araçlarından faydalanmaktadır. Bu model statik kod analizi ile uygulama açıklarını
değerlendirir, kodlama stili yanlışlıklarını puanlamaya katar. Modelin bileşenleri
aşağıdaki gibidir:
Uygulama Açıkları Analiz bulguları: PMD aracı ile analiz edilen ve listelenen
hataların kritikliğine göre puanlama yapılır ve tekrarlanmış kodları elimine ederek bulduğu
geçerli satır sayısı değeri ile puanlama normalize edilir. Blocker türünde bir hata, 10
adet Minor ya da Info türünde hataya eşdeğer Kabul edilmiştir. Statik kod analizinde
en büyük sorunlardan birisi “false positive” adı verilen yanlış tespitlerin çokluğudur.
Dolayısı ile Info ve Minor türünde yanlış şekilde oluşturulan yüzlerce hata çıkabilir ve
sonucu yanlış etkileyebilir. Info ve Minor’un hesaplamaya katılmaması önerilir.
Coding = (Blocker * 10 + Critical * 5 + Major * 3 + Minor + Info) / ValidLines</p>
        <sec id="sec-2-7-1">
          <title>ValidLines: Toplam satır sayısı – Tekrarlanan kod satır sayısı</title>
        </sec>
        <sec id="sec-2-7-2">
          <title>Blocker: PMD Blocker türünde hata sayısı</title>
        </sec>
        <sec id="sec-2-7-3">
          <title>Critical: PMD Critical türünde hata sayısı</title>
        </sec>
        <sec id="sec-2-7-4">
          <title>Major: PMD Major türünde hata sayısı</title>
        </sec>
        <sec id="sec-2-7-5">
          <title>Minor: PMD Minor türünde hata sayısı</title>
        </sec>
        <sec id="sec-2-7-6">
          <title>Info: PMD Info türünde hata sayısı</title>
          <p>Birim Kod Karmaşıklığı: Karmaşıklığa yaklaşım daha önce incelenen
modellerdekine benzemekle birlikte eşik değerlerince ve normalizasyon yaklaşımında farklılık
bulunmaktadır.</p>
          <p>Complexity = (Complexity&gt;30 * 10 + Complexity&gt;20 * 5 + Complexity&gt;10 * 3 +
Complexity&gt;1) / ValidLines (10)</p>
        </sec>
        <sec id="sec-2-7-7">
          <title>Birim Test Kapsaması: Birim test kapsama oranı doğrudan kullanılır. Kodlama Stili: CheckStyle aracı ile listelenen hataların kritikliğine göre puanlama yapar ve tekrarlanmış kodları elimine ederek bulduğu geçerli satır sayısı değeri ile puanlamayı normalize eder.</title>
          <p>Style = (Errors * 10 + Warnings) / ValidLines * 10 (11)</p>
        </sec>
        <sec id="sec-2-7-8">
          <title>Errors: CheckStyle ile tespit edilen Blocker ve Critical türünde hataların toplamıdır. Warnings: CheckStyle ile tespit edilen Major, Minor ve Info türünde hataların toplamıdır.</title>
          <p>(8)
(9)
Coding, Complexity, Coverage ve Style bileşenlerini kullanarak PMD hatalarının en
fazla etki ettiği kalite endeksi (10) ve karmaşıklığı 30’dan fazla olan metodların
sayısının oranına göre hesaplanan karmaşıklık faktörü (11) adlı iki adet kalite ölçütü
üretilir.</p>
          <p>Quality Index = 10 - 4.5 * Coding - 2 * Complexity - 2 * Coverage - 1.5 * Style (12)
Complexity Factor = (5 * Complexity&gt;30) * 100 / (Complexity&gt;1 + Complexity&gt;10 +
Complexity&gt;20 + Complexity&gt;30) (13)
Bu model de Sonar'ın sonradan eklediği modeller nedeniyle destek vermeyi bıraktığı
eklentiler arasında yer almıştır.
2.9</p>
        </sec>
      </sec>
      <sec id="sec-2-8">
        <title>Yazılım Kalite Risk Oranı (YKRO)</title>
        <p>
          YKRO, yazılım kalite metrik ölçüm sonuçlarını kullanarak bir her metod ve sınıf için
yazılımın toplam kalitesini ne derece etkilediğini sayısal olarak belirlemeye dayanan
bir modeldir [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ]. Metod bazında ve sınıf bazında ayrı analizler gerçekleştirilir.
Metodların ve sınıfların YKRO toplamları 100’ü verir. Bu nedenle kalite problemleri
projeye mi yayılmış, belirli yerlerde mi yoğunlaşmış soruları YKRO analizi ile
cevaplanabilir.
        </p>
        <sec id="sec-2-8-1">
          <title>Bir metot ya da sınıfın YKRO değeri Formül (14) ve Formül (15) e göre hesaplanır.</title>
          <p>Tdj = ∑ (MVij-Thrj) (14)
YKROi = ∑ ( (MVij-Thrj) / Tdj * 100) * Cj (15)</p>
        </sec>
        <sec id="sec-2-8-2">
          <title>Formül (14) ve Formül (15) de i metot ya da sınıf numaralandırıcısıdır, j metrik tipi,</title>
          <p>Tdj metot ya da sınıfın risk değeri, MVij metrik ölçüm sonucu, Thrj seçilen metriğin
eşik değeri ve Cj seçilen metriğe verilen katsayıdır. MVij - Thrj değerinin Thrj´in MVij
den büyük olması durumunda 0 olarak kabul edilmesi gereklidir.
3</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Tartışma ve Öneriler</title>
      <p>Bir önceki bölümde incelenen yazılım kalite modellerinin bir kısmının çoğunlukla
dolaylı ölçülebilen kriterlere dayandığı, bir kısmının da ticarileşerek maliyetinin arttığı
gözlenmektedir. Örneğin; sayılan Sonar eklentilerinin tamamı belli bir süre sonra daha
kapsamlı başka bir modelle yer değiştirmiş ve son modellerden olan SQALE modelinin
ileri özellikleri ise ücretli olarak sunulmuştur. SQALE’in benzeri bir model olan
SQuARE ise ISO/IEC 9126 standardının kalite faktörlerini göze hitap eden bir arayüz
paneli ile sunan ücretli bir yazılımdır.</p>
      <p>Kamunun ihtiyacı ücretsiz ve pratik bir çözümdür, bazılarının kullanımı için
neredeyse uzman olmak gereken bu modelleri anlaşılır şekilde sunmak önemli bir fayda
sağlayacaktır. Bu amaçla model incelemesinden elde edilen çıkarımlar kullanılarak,
yazılım kodundan elde edilebilen tüm ipuçları çekilecek ve kapsamlı ama pratik bir
model önerilecektir. İncelenen modellerin baz aldığı kriterler Tablo 5’de özetlenmiştir.
McCall
25010
ROME
Full-scale
SIG
Oman
TQI
SQI
YKRO</p>
      <sec id="sec-3-1">
        <title>Tablo 4. Yazılım Kalite Modelleri ve İncelenen Girdiler</title>
        <p>DOĞRUDAN ÖLÇÜLEBİLEN KRİTERLER
DOLAYLI
ü
ğ
ü
l
k
ü
y
ü
B
n
ü
r
Ü
X
X
ü
ğ
ü
l
k
ü
y
ü
B
m
ii
r
B
X
X
X
X
X
i
r
e
ilt
k
r
e
m
d
a
e
lt
s
a
H
X
ıılı
ğ
k
ş
a
m
r
a
K
m
ii
r
B
X
X
X
X
X
ı
r
a
l
r
a
r
k
e
T
d
o
K
X
X
ili
z
a
n
A
okdK lıragu
i
ttaS luB
X
a
m
a
s
p
a
k
t
s
e
t
m
ii
r
B
X
X
X
i
r
e
l
k
r
t
e
m
m
ı
r
a
s
a
T
X
X
a
m
a
lod ilit
K S
X
X
i
r
e
ilt
e
s
L
m
it
e
n
e
D
X
X
X
X
4</p>
        <p>Önerilen Model</p>
        <p>
          Pratik kalite modellerinin incelenmesi ve tartışılması ışığında, YTKDL yazılımları
aşağıdaki kriterlere göre değerlendirecek, bir model ve uygulama geliştirmiştir:
 Birim metod satır sayısı ve karmaşıklığı ifade etmede SIG bakım yapılabilirlik
metriği oldukça kolay anlaşılmaktadır. Bu nedenle sadece birim satır sayıları geçiş
aralıkları Tablo 6a’daki gibi uyarlanarak aynen kullanılmıştır. SIG modeli,
YTKDL’deki yazılım kalite değerlendirmesi tecrübelerine dayanarak, birim
büyüklüğü karşısında birim karmaşıklığının önemini artıracak şekilde
güncellenmiştir.
 İncelenen modellerde tasarıma yönelik bir incelemenin yapıldığı tek model vardır ve
orada da modelin etkinliği kanıtlanmamıştır. Kamu yazılımları için tasarımla ilgili
yeni bir yaklaşım önerilecektir. YTKDL’de kullanılmakta olan türetilmiş metrik
Yazılım Kalite Risk Oranı (YKRO) kullanılacaktır [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ]. Buna gore YKRO değeri en
yüksek 3 metodun toplamına göre Tablo 6b’deki sınıflandırma kullanılmakta ve
bakım yapılabilirlik notuna eklenmektedir. En bozuk ilk 3 sınıfın YKRO toplamı
%20’den yüksekse, bu tasarımın iyi yapılmadığı anlamına gelir ve bakım
yapılabilirlik notu 1 olur. Belirlenen YKRO seviyelendirmesi notu 1. Adımda anlatılan
notlandırmaya eklenir ve 10 üzerinden bir puan elde edilir.
 Kamu yazılımlarında görülen en büyük eksikliklerden birisi müşteri isteklerinin tam
anlaşılamayışı, mimari tasarımın yapılmaması ve müşteriye onaylatılmaması, daha
sonradan ortaya çıkan isteklerin mimariye etkisi tartılmadan kodlanması ve yeterince
test edilmeden kullanıma alınmasıdır. Bunun sonucunda çok yerde kod tekrarı
olmakta, bunlar tespit edildiğinde tasarımın baştan aşağı değişmesi gerekmekte
ancak riskler içerdiğinden dolayı müdahale edilmemektedir. Diğer yandan birim test
alışkanlığı da yok denecek kadar azdır. Çoğu kamu yazılımında kod tekrarı %20’nin
üzerinde ve birim test kapsaması da %0 olacağı için, bu kriterlerin ayrıştırıcı sonuçlar
vermeyeceğinden dolayı kullanılması tercih edilmemiştir.
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>Tablo 5. Önerilen Modelde – a) birim satır sayısının seviyelendirmeye etkisi b) kalite risk oranının seviyelendirmeye etkisi</title>
        <p>Kritiklik seviyesi</p>
        <p>Birim Satır Sayısı
 Yazılımın hata yoğunluğunu öngörmek için Rome Lab. Modeli yaklaşımı yardımcı
olmaktadır, ancak metod sayılarına gore değil kod satır sayısına gore yapılan
hesaplama daha doğru sonuç verecektir, bu nedenle yöntem ve katsayılar aşağıdaki
gibi revize edilmiştir. SX ve SM değerleri 100 ile çarpılarak hata yoğunluğu
bulunabilir. Başlangıç hata yoğunluğu 10 hata/1000 satır varsayılırsa 1000 * SX * SM
değeri yazılımın barındırdığı öngörülen (predicted) toplam hata sayısını verecektir.</p>
        <p>SX = (1.5a + b + 0.8c) / TLOC (16)
SM = (0.9u + w + 2x) / TLOC (17)
a = çevrimsel karmaşıklığı 20'ye eşit veya daha yüksek olan metodların toplam satır
sayısı
b = çevrimsel karmaşıklığı 20'den az ve 10'dan fazla olan metodların toplam satır sayısı
c = çevrimsel karmaşıklığı 10'dan az olan metodların toplam satır sayısı
u = satır sayısı 200'e eşit veya daha düşük olan metodların toplam satır sayısı
w = satır sayısı 200'den fazla veya 500'den az olan metodların toplam satır sayısı
x = satır sayısı 500'den fazla olan metodların toplam satır sayısı</p>
        <p>TLOC = toplam satır sayısı
 Statik kod analizi ve kodlama stili analizinin kalite modeline etkisini formülize etme
çalışmaları devam etmektedir. Doğru kullanımı yanlışmış gibi gösteren (“false
positive”) hataların otomatik olarak ayıklanması çözülmesi gereken önemli bir problem
olarak durmaktadır. “Minor” ve “Info” gibi hata türlerini hesaplamaya hiç katmamak
bir çözüm olabilir.</p>
        <p>Mevcut modellere ve önerilen modellere göre yapılan sınıflandırmaları karşılaştırmak
için Şekil 2’de bir örnek sunulmaktadır. 8 adet açık kaynak kodlu Java yazılım kalitesi
aracının (JUnit, Findbugs, UCDetector, Xradar, Tattletale, Cobertura, JDepend,</p>
      </sec>
      <sec id="sec-3-3">
        <title>QALab) kodları 3 adet mevcut, 2 adet önerilen modele gore değerlendirilmiştir. Oman ve SIG bakım yapılabilirlik modelleri sonuçları önerilen bakım yapılabilirlik modeli sonuçları ile, Rome Lab. Güvenilirlik modeli sonuçları ise önerilen Güvenilirlik modeli sonuçları ile karşılaştırılmıştır.</title>
        <p>Şekil 2. Mevcut ve önerilen modellere gore açık kaynak kodlu yazılımlar üzerinde örnek bir
ölçüm karşılaştırması ve yazılımların kalitesine göre sıralanması</p>
      </sec>
      <sec id="sec-3-4">
        <title>Karşılaştırma sonuçları aşağıdaki gibi sıralanabilir:</title>
        <p> Toplamda 5 farklı model aynı yazılımlar üzerinde denenmiştir, UCDetector 4 modele
gore en iyi derece olarak 4.lüğe yerleşirken, Oman’da birinci çıkmıştır. Bu durum
Oman değerlendirmesinde yorum satır sayısına yüksek puan verilmesinden ve daha
sonra kullanılmak üzere yorum satırı haline getirilmiş kodların fazlalığından
kaynaklanmaktadır.
 SIG modelinde “bakım yapılamaz” (1) notu alan yazılımlar bile Oman metriğine
gore “bakım yapılabilirlik açısından başarılı” eşiği olan 85’in üzerindedir. Bu durum
Oman modelinin bakım yapılabilirlik durumu açısından kullanıcıyı yanılttığını
ortaya koymaktadır. Oman modeline gore üretilen puan, kullanıcıya hangi
iyileştirmeleri yaparsa kaliteyi artıracağına yönelik ipucu sunmamaktadır. Halbuki SIG
modeli ve ondan esinlenerek önerilen modelde yazılımın hangi iyileştirmeleri
yaparsa kalitesini artıracağı nettir.
 SIG ile “mükemmel bakım yapılabilir” çıkan yazılımlar, önerilen bakım
yapılabilirlik modelinde, 10 üzerinden 7 puan almıştır. Önerilen modeldeki YKRO Tasarımsal
bileşeni ayırdedicilik sağlamıştır. SIG modeline gore 5 alan yazılımlar YKRO
modeline gore 2 almıştır. Bu yazılımlardan 3 almaya en yakın olan yazılım JUnit
olup, problemlerin yoğunlaştığı ilk 3 metod üzerindeki %2’lik bir iyileştirme notunu
3’e yükseltecektir.
 En yüksek 3 YKRO değeri toplanarak hesaplanan tasarım kriterinde, yüzdelik
aralıkları laboratuvarımızda edinilen tecrübeler ışığında belirlenmiştir. Bu aralık
değerleri deneysel çalışmalar ile revize edilecektir. Bu ilk kullanımda 5 üzerinden</p>
      </sec>
      <sec id="sec-3-5">
        <title>2’yi aşan not alabilen yazılım çıkmamıştır.</title>
        <p> QALab ve Findbugs sonuçları Oman modeline gore neredeyse aynı çıkarken SIG
modelinde büyük fark (2 basamak) var gözlenmiştir. Önerilen model, QALab ve
Findbugs arasındaki farkı 1 basamağa indirmiştir. SIG modeline bakılarak cope
atılması beklenen bir yazılımın iyileştirilebileceği yönünde bir sonuç ortaya çıkmıştır.
 Rome modeline gore en kaliteli ve en kalitesiz yazılım arasında sadece %3.5
güvenilirlik farkı görünmektedir. Halbuki, ilk sıradaki JUnit ile son sıradaki Tattletale
arasında çok belirgin farklar tespit edilmiştir. JUnit’te karmaşıklık değeri 20’yi aşan
kod oranı %1 bile değil iken, TattleTale’in kodunun neredeyse yarısının karmaşıklığı
20’nin üzerindedir. Önerilen güvenilirlik modeli daha ayrıştırıcı, farkları daha net
görmeyi sağlayan sonuçlar vermiştir. JUnit ile TattleTale arasında %29’luk fark
(+%28 ile -%1) hesaplanmıştır. Aynı şekilde önerilen bakım yapılabilirlik modeli
tasarımla ilgili ölçütleri de hesaba kattığından,
 Çıkarılabilecek bir sonuç da asıl amacı yazılım kalitesini değerlendirmek olan
araçlarda da yazılım kalitesi yönünden sorunlar olduğunun görülmesidir.
Önerilen modelde metrik ölçümleri için, laboratuvar imkanları dahilinde McCabe IQ,
Understand gibi ticari araçlara ilave olarak Eclipse Metrics eklentisi gibi ücretsiz
yazılımlar da kullanılabilmektedir. Sonuç olarak ortaya ücretsiz açık kaynak kodlu
yazılımlardan faydalanan ve genel kabul görmüş pratik modellerden uyarlanan, kamu
yazılımlarında pratik değerlendirme imkanı sağlayarak ihtiyacı karşılayan bir model ve
yazılım geliştirilmiştir. Araçlar tarafından otomatik olarak üretilen ve YTKDL’de
üretilen yazılım kalite değerlendirme raporları ilk başlarda çok büyük hacimli ve
genelde uygulanması zor öneriler içeren dokümanlar iken, önerilen kalite modeline ait
sonuçlar daha anlaşılır ve uygulanabilir maddeler içermektedir.
5</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Sonuç</title>
      <p>Yazılım kalitesinin, bakım yapılabilirliğinin, güvenilirliğinin kısa sürede
değerlendirilmesi, çıkan sonucun da herkes tarafından kolaylıkla ve aynı şekilde
anlaşılabilmesi önemli bir ihtiyaç olmuş, bu amaçla birtakım modeller geliştirilmiştir. Bu
modeller incelendiğinde, incelenen faktörlerin, ölçütlerin, değerlendirme yöntemlerinin
farklılıklar içerdiği görülmektedir. Bu çalışmada, geliştirme süreci bitmiş ya da sonuna
yaklaşılmış kamu yazılım projelerinde, hızlı ve anlaşılır bir kalite değerlendirmesinin,
mevcut kalite modellerinden faydalanılarak nasıl gerçekleştirilebileceği araştırılmıştır.
Sonuç olarak satır sayısı ve karmaşıklık ölçütlerinin uyarlanarak kullanıldığı, tasarım
ölçütlerinin yeni bir yaklaşımla ele alındığı, kod tekrarı ve birim test kapsaması
ölçütlerinin ise kamu yazılımlarında ayrıştırıcı olmayacağı için kullanılmadığı bir model
önerilmektedir. Önerilen model, özellikle, herhangi bir sürece uygun olarak
geliştirilmemiş düşük kaliteli yazılımlar için anlık resim çekmekte ve yazılımın
geleceği için karar verici olan mercilere faydalı bir girdi sağlamaktadır.</p>
      <sec id="sec-4-1">
        <title>Teşekkür - Yazarlar, bu çalışmanın gerçekleştirilmesi için destek sağlayan TÜBİTAK BİLGEM Yazılım Test ve Kalite Değerlendirme Laboratuvarı'na teşekkür eder.</title>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Jones</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          , “
          <article-title>Software Quality Metrics: Three Harmful Metrics and Two Helpful Metrics”</article-title>
          ,
          <source>Technical Report</source>
          ,
          <year>2012</year>
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2. Rome Laboratory,
          <source>Reliability Engineer's Toolkit</source>
          ,
          <source>Technical Report</source>
          ,
          <year>1993</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3. ISO/IEC 25010:
          <fpage>2011</fpage>
          -
          <article-title>Systems and software engineering -- Systems and software Quality Requirements and Evaluation (SQuaRE) -- System and software quality models</article-title>
          , http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.
          <source>htm?csnumber=35733</source>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>McCall</surname>
            ,
            <given-names>J.A</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Richards</surname>
            ,
            <given-names>P.K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Walters</surname>
            ,
            <given-names>G.F</given-names>
          </string-name>
          ,”
          <article-title>Factors in Software Quality”</article-title>
          ,
          <source>Final Tech Report, RADC-TR-77-369</source>
          , Rome Air Development Center,
          <source>Griffith Air Force Base</source>
          ,
          <year>1977</year>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5. ISO/IEC 9126-1:
          <fpage>2001</fpage>
          ,
          <string-name>
            <surname>Software</surname>
          </string-name>
          engineering --
          <string-name>
            <surname>Product</surname>
          </string-name>
          quality -- Part 1: Quality model, http://www.iso.org/iso/catalogue_detail.
          <source>htm?csnumber=22749</source>
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>McCabe</surname>
            ,
            <given-names>T. J. “A Complexity</given-names>
          </string-name>
          <string-name>
            <surname>Measure</surname>
            <given-names>”</given-names>
          </string-name>
          ,
          <source>IEEE Trans. Software Eng. SE-2</source>
          ,
          <issue>4</issue>
          (Dec.
          <year>1976</year>
          ),
          <fpage>308</fpage>
          -
          <lpage>320</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Neufelder</surname>
          </string-name>
          , A.M, “
          <article-title>Predict Software Reliability Before the Code is Written”</article-title>
          ,
          <source>Technical Report</source>
          , SoftRel, LLC ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Heitlager</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kuipers</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Visser</surname>
          </string-name>
          , J., “
          <article-title>A Practical Model for Measuring Maintainability”</article-title>
          .
          <source>6th International Conference on the Quality of Information and Communications Technology</source>
          ,
          <year>2007</year>
          , pp.
          <fpage>30</fpage>
          -
          <lpage>39</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Baggen</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schill</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Visser</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <source>”Standardized Code Quality Benchmarking for Improving Software Maintainability”, 14th European Conference on Software Maintenance and Reengineering, March</source>
          <volume>15</volume>
          -18, 2010 in Universidad Rey Juan Carlos, Madrid, Spain
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Oman</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Hagemeister</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <article-title>Construction and testing of polynomials predicting software maintainability</article-title>
          .
          <source>In Journal of Systems and Software</source>
          ,
          <year>1994</year>
          , vol.
          <volume>24</volume>
          (
          <issue>3</issue>
          ), pp.
          <fpage>251</fpage>
          -
          <lpage>266</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Halstead</surname>
            ,
            <given-names>M. H.</given-names>
          </string-name>
          <article-title>"Elements of Software Science"</article-title>
          , New York: Elsevier North-Holland,
          <year>1977</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Palıgu</surname>
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Öztürk</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Yağcı</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <source>“Kodu İyileştirmeye Nereden Başlamalı? Bir Yazılım Metrik Yaklaşımı: Yazılım Kalite Risk Oranı”, 7th Turkish National Software Engineering Symposium</source>
          , İzmir,
          <year>2013</year>
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Chidamber</surname>
            ,
            <given-names>S. R.</given-names>
          </string-name>
          ve Kemerer,
          <string-name>
            <surname>C. F.</surname>
          </string-name>
          ,
          <article-title>“A Metrics Suite for Object-Oriented Design”</article-title>
          ,
          <source>IEEE Trans. Software Eng.</source>
          , vol.
          <volume>20</volume>
          , no.
          <issue>6</issue>
          , June 1994, pp.
          <fpage>476</fpage>
          -
          <lpage>493</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>