<!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>Yazılım Kalite Metriklerinin Kıyaslanması: Örnek Bir Olay İncelemesi Comparison of Software Quality Metrics: A Case Study</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Anahtar Kelimeler: Yazılım Kalite Ölçütleri, CK ölçütleri</institution>
          ,
          <addr-line>Karmaşıklık Analizi, Understand, SPSS</addr-line>
        </aff>
      </contrib-group>
      <fpage>0000</fpage>
      <lpage>0002</lpage>
      <abstract>
        <p>Lack of time during planning stages leads to overlooking some small but crucial details in software design projects. These points cause major problems later on along the life of the project. In order to avoid facing with many problems during maintenance phase, it is becoming much more important to measure the quality of the software projects. For this reason, in this study, the quality of the software projects is measured and a ranking of the most important criteria is provided by a case study. Because of the ease of access to perform the sample work, 16 object-oriented open</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>source software was selected and the code complexity analysis of these
software was performed.</p>
      <p>The software quality criteria of Chidamber and Kemerer (CK) were used to
measure the qualities of the software projects and the values of these criteria
were determined by the “Understand” code analysis tool.</p>
      <p>It was determined that the obtained values exceeded the threshold values
stated in the literature. These frequencies of CK software quality criteria exceeding
the threshold value in 16 open source software projects were examined and the
importance ranks were determined with SPSS statistical analysis tool and the
results were given.</p>
      <p>When the results are evaluated, the most important criteria to be considered in
the source code are Lack of Cohesion in Methods (LCOM), Coupling between
Object Classes (CBO), Depth of Inherence Tree (DIT), Weighted Methods per
Class (WMC) Class) and NOC (Number of Children), respectively.
1</p>
    </sec>
    <sec id="sec-2">
      <title>Giriş</title>
      <p>Gelişen teknoloji ile birlikte yüksek işlem gücüne sahip bilgisayar donanımları düşük
maliyetlerle üretilebilmektedir. Bu durum beraberinde daha kapsamlı yazılım
ihtiyaları, daha büyük yazılım projeleri ve bu projeleri yürüten kalabalık ekipler
getirmektedir.</p>
      <p>
        Bir yazılım projesinin büyümesi demek; bakım-onarım masrafları, proje maliyeti,
yazılım geliştirme zamanı vb. gibi değişkenlerin de büyümesi demektir. Eğer proje
yönetim süreci doğru yürütülmezse, günümüzde olduğu gibi pek çok yazılım
projesinin başarısızlıkla sonuçlandığı görülecektir. Kullanılamayan, müşteriler tarafından
reddedilen, proje iptaliyle sonuçlanan, yüksek bakım-onarım maliyeti gerektiren
yazılımların ülke ekonomisine verdiği zararlar da göz ardı edilemeyecek kadar büyük
olabilmektedir. Örnek olarak, 2002 yılı verilerine göre başarısız olan yazılımların
Amerikan ekonomisine yıllık zararı yaklaşık 59 Milyar $ olmuştur [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Ayrıca yazılım
test araçları geliştiren Tricentis firmasının 2017 yılı verilerine göre de başarısız
yazılımların dünya geneli yarattığı finansal zarar toplam 1.7 Trilyon $ civarındadır [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
      </p>
      <p>Yazılım kalitesinin ölçülmesi ile; yazılımın müşteri ihtiyaçlarına ne kadar hizmet
edebildiği, geliştirici açısından yazılımın kolay anlaşılırlığı ve müdahale edilebilirliği,
yazılımın yapısal kalitesi, arzu edilen kalitenin elde edilebilmesi için maliyet-fiyat
dengesinin orantısı gibi anahtar faktörler projenin erken safhalarında
değerlendirilebilir ve gerekli önlemler alınabilir.</p>
      <p>Büyük yazılım projelerinde kod satırının, metot, sınıf, obje ve değişkenin tek tek
takibinin ve kontrolünün kısa sürede yapılması güçtür. Bu ölçümleri çok kısa
sürelerde gerçekleştirebilen çok sayıda ve çeşitte kod analiz araçları bulunmaktadır.</p>
      <p>Bu çalışmada ilgili alanda daha önce yapılan çalışmalar incelenmiş, Java
programlama dilinde yazılmış olan “Uluslararası Uzay ve Havacılık” sektörüne ait açık
kaynak kodlu 16 adet nesne-yönelimli yazılımın kalite ölçümleri “Understand” statik kod
analiz aracı yardımıyla yapılarak ilgili metrik değerleri incelenmiştir. Elde edilen
değerler yorumlanmıştır.</p>
      <p>Çalışmanın 2. bölümünde literatür araştırmasına yer verilmiş, bölüm 3‟te örnek
olay incelemesi için kullanılan projelerden bahsedilerek eşik değerleri hesaplanmış ve
son olarak da bölüm 4 „te elde edilen sonuçlar değerlendirilmiştir.
2</p>
      <p>
        İlgili Çalışmalar
Yazılım kalitesini kalite özelliği ve kalite ölçütü olmak üzere iki ana başlık altında
inceleyecek olursak, literatürde yaygın olarak kullanılan ISO 9126 uluslararası kalite
standardının kalite gereksinimleri ve bu gereksinimler için tanımlanan kalite
özellikleri Tablo 1‟de verilmiştir [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>Tablo 1. ISO 9126 Kalite Standardı için Kalite Gereksinimleri ve Kalite Özellikleri
Kalite Gereksinimleri
İşlevsellik
Güvenilirlik
Kullanılabilirlik
Verimlilik
Bakım
Taşınabilirlik</p>
      <p>Kalite Özellikleri
Uygunluk, Doğruluk, Güvenlik vb.</p>
      <p>Olgunluk, Hata toleransı vb.</p>
      <p>Anlaşılabilirlik, Öğrenilebilirlik vb.</p>
      <p>Kaynak Kullanımı vb.</p>
      <p>Test Edilebilirlik, Sağlamlık vb.</p>
      <p>Uyumluluk, Değiştirilebilirlik vb.</p>
      <p>Bu gereksinimlere göre ölçümler yapabilmek için, yazılım alanında çalışan insanlar
ölçüt kümeleri ortaya sunmuşlar. Bu kümeler statik ve dinamik olarak iki gruba
ayrılabilmektedir. Statik metrikler yazılımın yapısıyla, dinamik metrikler ise yazılımın
çalışma anındaki verileriyle ilgilidir.</p>
      <p>
        Statik metrik kümelerinden en sık kullanılanlar arasında; ilk olarak 1974 yılında
yazılım karmaşıklığını ölçmek amacıyla Thomas McCabe tarafından kendi adını
verdiği McCabe Complexity Metric Suite öne sürülmüştür [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. 1994 yılında Chidamber
&amp; Kemerer‟in yayınladığı metrik kümesi CK Metric Suite ismiyle öne sürülmüş ve 6
metrikten oluşmaktadır [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Nesne yönelimli yöntemin temellerine dayanan MOOD
metrik kümesi de kapsülleme, çok şekillilik ve mesaj aktarımı mekanizmalarına
dayanmakta ve 6 metrikten oluşmaktadır [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
      </p>
      <p>Bu çalışmada, nesne yönelimli yazılımların kalıtım derinliği, sınıflar arası cohesion
ve coupling durumu, sınıflara ait metot sayıları ve bu metotların başka sınıflardan
çağırılma durumlarını daha etkili ölçebilme kabiliyetinden dolayı CK Metrikleri
seçilmiş olup Java programlama dilinde yazılmış 16 açık kaynak kodlu proje, 6 adet CK
metriği ile Understand kod analiz aracı kullanılarak ölçülmüştür.</p>
      <p>
        Ancak literatürde bu ölçümler yapıldıktan sonra farklı farklı eşik değerleri
üzerinden değerlendirmeler yapıldığı görülmüştür. Yine literatür araştırmalarında çalışılan
projeye göre özel eşik değerleri hesaplamanın daha uygun olduğu görüşü daha
geçerlidir [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ].
      </p>
      <p>Örnek Olay İncelemesi
Çalışma için güvenilirlik seviyesinin yüksek olacağı düşünüldüğünden “uzay ve
havacılık” alanındaki projeler seçilmiştir. NASA, ESA ve SpaceX açık kaynak kodlu,
JAVA programlama dilinde yazılmış nesne-yönelimli ve orta ölçekli yazılımlardır.</p>
      <p>
        Bu yazılımlar, kuruluşun kendi sitesinden herkes tarafından erişilebilen yazılım
kütüphanesi üzerinden [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] ve GitHUB‟tan indirilmiştir. İlgili yazılımlar Tablo 2‟de
gösterilmektedir.
      </p>
      <p>Tablo 2. Açık Kaynak Kodlu JAVA projeleri
Proje
CCSDS_MO_GraphicalEditor
CCSDS_MO_TESTBEDS
CCSDS_MO_TRANS
GUSTO
nmf-core
NMF_MISSION_OPS-SAT
NMF_MISSION_SOFTWARE_SI
CCDD
11K
25K
14K
13K
30K
32K
12K
75K
KLOC</p>
      <p>Proje</p>
      <p>
        KLOC
DAVEtools-master 15K
DERT-master 42K
FEI-master 63K
JavaGenes 32K
jpf-core-master 114K
symbc-master 199K
mct-master 124K
SpaceLaunchNow-Android-master 25K
Bu çalışmada kullanılan yazılım projelerinin analizi “Understand” statik kod analizi
aracıyla gerçekleştirilmiştir. Scientific Tools INC. tarafından geliştirilen yazılım,
kaynak kodunu analiz ederek kod hakkında; detaylı metrik raporu, akış diyagramı
grafikleri, detaylı bağımlılık analizi gibi önemli bilgileri çıktı olarak sunmaktadır [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
3.1
      </p>
      <p>CK Metrikleri için Eşik-Değer Üretimi
CK Metrikleri için çeşitli çalışmalarda çeşitli eşik-değerleri önerilmiştir. Tablo 3‟te bu
değerlerden sık kullanılanlar gösterilmektedir.</p>
      <p>
        Tablo 3. CK Metrik Eşik Değerleri
İlişkili Çalışmalar
[
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]
[
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]
[
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]
[
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]
[
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]
      </p>
      <p>
        LCOM
3
1
Düşük
20
Düşük
Tablo 3‟te görüldüğü gibi herkes tarafından kabul gören sabit bir eşik değer
bulabilmek çok güçtür ve CK Metrikleri için proje bazlı eşik-değer üretilmesi tavsiye
edilmiştir. Statik kod analiz aracından elde edilen metrik sonuçları için, her bir metriğin
sınıflara göre ölçüm değerlerinin ortalaması ve standart sapması bulunup toplanarak
ilgili proje için bir eşik değer türetmek bir yöntem olarak kabul edilebilmektedir [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ].
Kullanılan formül Denklem (1) de verilmiştir, T eşik değer, μ ortalama değer, Ω
standart sapma değerlerini göstermektedir.
      </p>
      <p>T = μ + Ω
(1)
Bu çalışmada tek bir proje yerine 16 adet yazılım projesi bulunduğundan, 16 proje
için bulunan eşik değerlere yukarıdaki μ + Ω işlemi tekrar yapılarak genel bir
eşikdeğer kümesi oluşturulmuştur. Elde edilen değerler Tablo 3 ile birleştirilerek Tablo
4‟te tekrar verilmiştir (Understand aracında LCOM değerleri yüzdelik olarak verildiği
için tabloda da yüzdelik eşik değer kullanılmıştır).</p>
      <p>
        Tablo 4. 16 Proje için CK Metrik Eşik Değerleri
İlişkili Çalışmalar
[
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]
[
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]
[
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]
[
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]
[
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]
Bu Çalışma
      </p>
      <p>LCOM
3
1
Düşük
20
Düşük
%86,8
Tablo 5‟e göre özellikle “High-Cohesion &amp; Low Coupling” kuralına dikkat edilmesi
gerektiği sonucuna varılabilmektedir.</p>
      <p>Bu çalışmada projelerin geneli üzerinden DIT eşik değeri 2.9 olarak belirlenmiştir.
Ancak kalıtım derinliği için genelde kullanılan 4-6 aralığında bir değer alınsa idi
büyük oranda tüm projelerde DIT metrik değerini ihlal eden sınıf olmayacak idi.
İncelenen 16 projenin tamamında DIT değeri çok nadiren 5 değerlerine çıkmakla birlikte,
genelde 5‟in altında gözlemlenmiştir. Proje bazlı 2.9 DIT eşik değerimizden kaynaklı
frekans aşımını bu noktada göz ardı edilebileceği düşünülmektedir.</p>
      <p>RFC ve WMC metrikleri için de yine proje bazlı çok farklı büyüklüklerde eşik
değerler alabildiği Tablo 4‟te görülebilmektedir. 16 projeden elde ettiğimiz RFC ve
WMC eşik değerlerinin genel olarak çok fazla aşılmadığı da Tablo 5‟te
görülebilmektedir. Bazı tekil projeler yüksek aşım frekansına sahiptirler ve bu durum projeye özgü
olarak değerlendirilebilir.</p>
      <p>Yukarıdaki istisnai durumlar LCOM ve CBO için geçerli değildir. Bu nedenle
cohesion ve coupling metrikleri daha önemli kabul edilebilir. Tablo 5‟teki oranlar ve
istisnai durumlar incelendiğinde metriklerin önem sıraları; LCOM, CBO, DIT, WMC,
RFC ve NOC olacak şekilde sıralanabilmektedir.
4</p>
    </sec>
    <sec id="sec-3">
      <title>Sonuçlar</title>
      <p>Bu çalışmada yazılım projelerinin kalitesini ölçerek en çok dikkat edilmesi gereken
ölçütlerin sıralanması örnek bir olay incelemesi ile sağlanmıştır. Örnek çalışmayı
gerçekleştirebilmek için erişim kolaylığı nedeniyle 16 adet nesne yönelimli açık
kaynak kodlu yazılım seçilmiş ve bu yazılımların kod karmaşıklık analizi yapılmıştır.</p>
      <p>Yazılım projelerinin kalitelerini ölçmek için Chidamber and Kemerer‟in (CK)
yazılım kalite ölçütleri kullanılmış olup bu ölçütlerin değerleri “Understand” kod analiz
aracı ile belirlenmiştir.</p>
      <p>Sonuçlar değerlendirildiğinde yazılan kaynak kodda en dikkat edilmesi gereken
ölçütlerin sıralaması LCOM (Lack of Cohesion in Methods), CBO (Coupling between
Object Classes), DIT (Depth of Inheritence Tree), WMC (Weighted Methods per
Class), RFC (Response for a Class) ve NOC (Number of Children) şeklinde olmuştur.</p>
      <p>Yazılım geliştiriciler ve proje yöneticileri kod yazım esnasında en çok hata yapılan
kısımları bildikleri takdirde erken safhada önlem alınmasının maddi manevi proje
başarısını etkileyeceği düşünüldüğünden bu çalışmanın araştırmacılara yol
göstereceği düşünülmekte olup, ileride yapılacak çalışmalarda proje sayısı artırılıp daha
kapsamlı istatistiki çalışmalar yapılarak elde edilen veriler değerlendirilecektir.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1. National Institute of Standards and Technology Homepage, https://www.nist.gov/sites/default/files/documents/director/planning/report02-
          <fpage>3</fpage>
          .pdf, p:
          <fpage>ES3</fpage>
          ,
          <source>Last Accessed</source>
          <year>2018</year>
          /08/07
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Jung</surname>
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kim</surname>
            <given-names>S.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Chung</surname>
            <given-names>C.</given-names>
          </string-name>
          , “
          <article-title>Measuring Software Product Quality: A Survey of ISO/IEC 9126”</article-title>
          , September/
          <year>October 2004</year>
          , IEEE Software, p:
          <fpage>88</fpage>
          -
          <lpage>92</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>S.</given-names>
            <surname>Chidamber</surname>
          </string-name>
          and
          <string-name>
            <given-names>C.</given-names>
            <surname>Kemerer</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>
          , pp.
          <fpage>476</fpage>
          -
          <lpage>493</lpage>
          ,
          <year>June 1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>T. J.</given-names>
            <surname>McCabe</surname>
          </string-name>
          .
          <article-title>A complexity measure</article-title>
          .
          <source>In ICSE ‟76: Proceedings of the 2nd international conference on Software engineering</source>
          . IEEE Computer Society Press,
          <year>1976</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5. F. Brito e Abreu, G. Pereira, and
          <string-name>
            <given-names>P.</given-names>
            <surname>Soursa</surname>
          </string-name>
          , “
          <article-title>CouplingGuided Cluster Analysis Approach to Reengineer the Modularity of Object-Oriented Systems</article-title>
          ,
          <source>” Proc. Euromicro Conf. Software Maintenance and Reeng</source>
          ., pp.
          <fpage>13</fpage>
          -
          <lpage>22</lpage>
          ,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>S.</given-names>
            <surname>Singh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Kaur</surname>
          </string-name>
          , “Deriving And
          <string-name>
            <surname>Validating Software Metrics Threshold Values For Design Errors</surname>
          </string-name>
          ”
          <source>International Journal of Engineering Technology and Scientific Research Volume 2 Issue</source>
          <volume>2</volume>
          (
          <year>April 2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>NASA</given-names>
            <surname>Open Source</surname>
          </string-name>
          <string-name>
            <surname>Software</surname>
          </string-name>
          , https://code.nasa.gov/,
          <source>Last Accessed</source>
          <year>2018</year>
          /05/18
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>8. SciTools.com Features Page, https://scitools.com/features/ Last Accessed 2018/06/15</mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Antony</surname>
            <given-names>P.</given-names>
          </string-name>
          ,
          <source>Predicting Reliability of Software Using Thresholds of CK Metrics</source>
          .
          <source>International Journal of Advanced Networking</source>
          ,
          <fpage>1778</fpage>
          -
          <lpage>1785</lpage>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Zhou</surname>
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Leung</surname>
            <given-names>H.</given-names>
          </string-name>
          ,
          <article-title>Empirical analysis of object-oriented design metrics for predicting high and low severity faults</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          ,
          <fpage>771</fpage>
          -
          <lpage>789</lpage>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Mago</surname>
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kaur</surname>
            <given-names>P.</given-names>
          </string-name>
          ,
          <article-title>Analysis of quality of the design of the object oriented software using fuzzy logic</article-title>
          .
          <source>International Conference on Recent Advances and Future Trends in Information Technology (iRAFIT2012) Proceedings Published in International Journal of Computer Applications® (IJCA)</source>
          ,
          <fpage>21</fpage>
          -
          <lpage>25</lpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>A.D. Bakar</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Sultan</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          <string-name>
            <surname>Zulzalil</surname>
            and
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Din</surname>
          </string-name>
          ,
          <year>2014</year>
          .
          <article-title>Predicting Maintainability of Objectoriented Software Using Metric Threshold</article-title>
          .
          <source>Information Technology Journal</source>
          ,
          <volume>13</volume>
          :
          <fpage>1540</fpage>
          -
          <lpage>1547</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Software</surname>
          </string-name>
          <article-title>Testing Tools for Continuous Testing Webpage</article-title>
          , https://www.tricentis.com/wpcontent/uploads/2018/01/20180119_
          <string-name>
            <surname>Software-Fails-Watch</surname>
          </string-name>
          _
          <article-title>Small_Web.pdf, Last A ccessed</article-title>
          <year>2018</year>
          /08/07
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>