<!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 Depolarının Analizi ile Tasarım - Kod Uyumluluğunun Araştırılması</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Kadriye ÖZBAġ ÇAĞLAYAN</string-name>
          <email>kadriye.caglayan@tubitak.gov.tr</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ali H. DOĞRU</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>ODTÜ Bilgisayar Mühendisliği Bölümü</institution>
          ,
          <addr-line>ANKARA</addr-line>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>TÜBĠTAK-BĠLGEM Yazılım Teknolojileri AraĢtırma Enstitüsü</institution>
          ,
          <addr-line>ANKARA</addr-line>
        </aff>
      </contrib-group>
      <abstract>
        <p>Özet. Yazılım projelerinde analiz aĢamasında tanımlanan probleme çözüm üretme aĢaması olan tasarım, geliĢtiriciler tarafından yazılımı gerçekleĢtirmek üzere yürütülen kodlama sürecine girdi sağlar. Yazılım geliĢtirilirken ya da güncellenirken, kod ve tasarımın uyumlu olarak idamesi uzun vadeli bir yatırımdır ve idame ettirilebilir bir proje sonucunu doğurur. Ancak gerçek hayatta tecrübesizlik, bilgi eksikliği ya da tasarımın atıl kalmıĢ olması gibi sebeplerle geliĢtiricilerin tasarımla tam olarak tutarlı kod gerçekleĢtiremediği durumlar yaĢanabilmektedir. Tasarım ile uyumsuzluk ise kalite açısından tahmin edilemez bir kod oluĢmasına sebep olur. Tasarım ile kod arasındaki uyumluluğun kontrol edilmesi faydalı ancak iĢ gücü yoğun bir iĢlemdir. Uyumluluğun kontrolü amacı ile yazılım depolarının analizinin yapılması, tersine mühendislik ve manuel kontrol süreçlerinde karĢılaĢılan güçlüklerin üstesinden gelinmesini sağlayacak ve zamanda yazılım geliĢtirme / idame süreçlerinin yöneticilerine değerli bilgiler sunacaktır. Bu çalıĢmada kod - tasarım arasında uyumluluğun belirlenmesi amacı ile yazılım depolarının analiz edilmesi için geliĢtirilen yaklaĢım ile bu yaklaĢımın örnek bir sürüm üzerinde uygulaması anlatılmaktadır.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Giriş</title>
      <p>Yazılım geliĢtirme projelerinde, analiz aĢamasında belirlenen soruna çözüm tasarım
aĢamasında oluĢturulduğundan ötürü, tasarım oldukça önemli bir aĢamadır. Tasarım
aĢamasında alternatifler arasından en iyi tasarım seçimi ile birlikte çözüm kararları da
alınır. Tasarımda belirlenen çözüm ve tasarım bileĢenler, daha sonraki aĢamada bir ve
daha fazla geliĢtirici tarafından yürütülen kodlama aĢaması ile gerçekleĢtirilerek
tasarım kaynak koduna dönüĢtürülür. Bu nedenle, üretilen kaynak kodunun çözümü
tanımlayan tasarım ile uyumlu olması beklenir.</p>
      <p>
        Tasarım, yazılım geliĢtirilirken ya da bakımı yapılırken üretilen yazılımın
karmaĢıklığını azaltmaya yardımcı bir unsurdur. Kaynak kodu ve tasarım arasında
uyumluluğu korumak yüksek kaliteli ve sürdürülebilir bir proje için uzun vadeli bir
yatırımdır. Ancak gerçek hayatta tecrübesizlik, bilgi eksikliği ya da yazılımın yaĢlanması
sonucu tasarımın atıl kalmıĢ olması [1] gibi sebeplerle geliĢtiricilerin tasarımla tam
olarak tutarlı kod gerçekleĢtiremediği durumlar yaĢanabilmektedir. Bazı
araĢtırmacılar bu sorunları tasarım ilkelerine uyulmamasına [
        <xref ref-type="bibr" rid="ref1">2</xref>
        ] ve tasarım kalıplarının
kullanılmamasına [
        <xref ref-type="bibr" rid="ref2">3</xref>
        ] dayandırır; özellikle de yazılım geliĢtirme ve bakım aĢamalarında bu
konuların dikkate alınması konusuna vurgu yapar [
        <xref ref-type="bibr" rid="ref3">4</xref>
        ]. Tasarım ile uyumsuzluk ise
kalite açısından tahmin edilemez bir kod oluĢmasına sebep olur.
      </p>
      <p>Tasarım ile kod arasındaki uyumluluğun kontrol edilmesi faydalı ancak iĢ gücü
yoğun bir iĢlemdir. Çünkü bu iĢlem kodun tersine mühendislik yaklaĢımı ile tasarıma
dönüĢtürülmesini ve hedeflenen tasarım ile manuel olarak uyumluluğunun kontrol
edilmesini gerektirir. Kod – tasarım uyumluluğunun kontrolü amacı ile yazılım
ürünlerinin saklandığı yazılım depolarında analizler yapılması, tersine mühendislik ve
manuel kontrol süreçlerinde karĢılaĢılan güçlüklerin üstesinden gelinmesini
sağlayacaktır. Benzer Ģekilde, kod – tasarım arasındaki uyumluluğun incelenmesi, yazılım
geliĢtirme / idame süreçlerinin yöneticilerine değerli bilgiler sunacaktır.</p>
      <p>Bu çalıĢmada, tasarım ve kod uyum düzeylerini analiz etmek yazılım deposu analiz
yöntemi ve kısmen metin madenciliği teknikleri kullanılması hedeflenmektedir.</p>
      <p>Makalenin geri kalan kısmı Ģu Ģekilde düzenlenmiĢtir: 2. bölümde ilgili literatür
gözden geçirilmiĢtir. 3. bölümde tasarım-kod uyumluluğu analizi için izlenen yöntem
açıklanmaktadır. 4. bölümde tasarım-kod uyumluluğunu değerlendirmek için yapılan
örnek analiz çalıĢmasının sonuçları sunulmuĢtur. Son bölümde ise bu çalıĢmanın
sonuçları ve gelecek çalıĢmalar özetlenmiĢtir.
2</p>
      <p>
        İlgili Çalışmalar
Yazılım mühendisliği araĢtırmacıları, yazılımın geliĢimi ve değiĢimi bağlamında
yazılım depolarından iliĢkileri ve eğilimleri ortaya çıkarmak için geniĢ bir yelpazede farklı
yaklaĢımlar geliĢtirdiler. Yazılım depolarından yapısal kaynak kodu değiĢiminin tespit
edilmesi için geliĢtirilen bir araç [
        <xref ref-type="bibr" rid="ref4">5</xref>
        ]'te verilmiĢtir. Söz konusu araç ile parametre /
değiĢken / metot ekleme / kaldırma; bir değiĢkenin / metodun gizlenmesi / açılması /
isim değiĢikliği; gizlemek / açmak / yeniden adlandırma; özniteliğin / metodun /
sınıfın yerinin değiĢtirilmesi; süper sınıf / arayüz / sınıf bilgisinin çıkartılması gibi
değiĢim türleri tespit edilebilmektedir.
      </p>
      <p>
        Kaynak kodu ile birlikte test kodunun değiĢiminin eĢgüdümü, bir projenin
sürümleri için kod kapsama oranları ve test / kaynak kodlarının boyutları incelenerek tespit
edilmiĢtir [
        <xref ref-type="bibr" rid="ref5">6</xref>
        ].
      </p>
      <p>
        Levenshtein mesafesi algoritması ile bilgi çekme teknikleri (Vektör Uzayı Modeli)
birleĢtirerek CVS depolarındaki kaynak kodları analiz edilmiĢ, kod satırı düzeyinde
değiĢiklikleri tespit etme yöntemi tanımlanmıĢtır [
        <xref ref-type="bibr" rid="ref6">7</xref>
        ].
      </p>
      <p>Kodlama ve tasarım arasındaki uyumluluk kontrolleri ile ilgili olarak literatürde
geçen eserler arasında yer alan Yazılım Yansıma Modeli [8] tekniği ile projenin bir iĢ
ürününün (örneğin, tasarım modeli), bir baĢka iĢ ürünü (örneğin, kaynak kodları) ile
uyumlu ya da uyumsuz olduğu noktaları özetleyerek yazılım mühendislerine yardımcı
olmayı hedeflemektedir.</p>
      <p>
        Kullanım durumları ile kaynak kodları arasındaki izlenebilirlik iliĢkilerinin
otomatik olarak kurulabilmesine ya da hatalı olarak kurulmuĢ izlenebilirlik iliĢkilerinin
tespit edilmesine yönelik olarak bir çözüm sunmak üzere geliĢtirilen LeanArt aracı,
geliĢtirici tarafından örnek olarak kurulan izlenebilirlik iliĢkilerinden derlenen
bilgilerle diğer izlenebilirlik iliĢkilerini tahmin etmeye çalıĢır [
        <xref ref-type="bibr" rid="ref7">9</xref>
        ]. LeanArt otomatik
öğrenme yöntemi olan Çok Stratejili Öğrenme YaklaĢımı (Multistrategy Learning
Approach) ile geliĢtirilmiĢ olup kullanım durumu adları ile kod elemanları isimleri
arasında birebir uyum olmasa da izlenebilirlik iliĢkilerini tespit edebilmeyi hedeflemektedir.
      </p>
      <p>
        Nesne-yönelimli tasarımın ilgili kaynak kodu ile uyumunu kontrol etmek için
Düzenleme Mesafesi’nin hesaplanması ve maksimum eĢleĢme algoritmasından
faydalanan bir yöntem [
        <xref ref-type="bibr" rid="ref8">10</xref>
        ]’de sunulmuĢtur. Bu yöntemde C++ kaynak kodlarından mevcut
tasarım çıkartılır ve gerçek tasarım ile karĢılaĢtırılarak tutarsızlıklar bulunur. Önerilen
yöntemin çıktısı, her eĢleĢen sınıf için benzerlik ölçütleri ve eĢleĢmeyen sınıflar
kümesi Ģeklinde sunulmaktadır.
      </p>
      <p>UML modellerinin yapısal farklılaĢmalarını tespit etmeye yönelik olarak önerilen
UMLDiff algoritması baz alınarak nesne yönelimli yazılım sistemlerinin değiĢimini
analiz eden bir yöntemde [11] ise tasarım değiĢimlerinin analizi, kaynak kodunun
ardıĢık olarak bir dizi anlık durumunu girdi alarak gerçekleĢtirilir.
3</p>
    </sec>
    <sec id="sec-2">
      <title>Kod-Tasarım Uyumluluğu Analizi Yaklaşımı</title>
      <p>Bu çalıĢmada, artırımlı yinelemeli yaĢam döngüsü kullanılan ve toplamda 5 farklı
sürüm yayınlanan bir projede ilk (v1.0) ve son sürümünden (v4.1) elde edilen veriler
analiz edilmiĢtir. Artırımlı yinelemeli yaĢam döngüsünün her bir yinelemesinde
sisteme yeni özellikler eklenir ve mevcut özellikler kullanıcı geri bildirimleri
doğrultusunda iyileĢtirilir. Her yineleme analiz, tasarım, kodlama ve sistem testleri
aĢamalarından oluĢur ve projenin iĢ ürünleri her yinelemede bu aĢamalarında sonunda
dayanaklandırılır. Bu çalıĢmada, tasarım aĢaması sonunda dayanaklandırılan tasarım
modelinden elde edilen veriler ile ve sistem testlerinin sonunda dayanaklandırılan kaynak
kodundan elde edilen veriler kullanılmıĢtır. Söz konusu veriler Enterprise Architect
aracı ile UML 2.1 notasyonu kullanılarak oluĢturulmuĢ tasarım modeli ve Java
programlama dili kullanılarak geliĢtirilmiĢ kaynak kodlardan elde edilmiĢtir. Veriler elde
edilirken, öncelikle tasarım modelinden sınıf tanımlarını içeren kod Enterprise
Architect aracı kullanılarak üretilmiĢ, tasarımdan üretilen kodda ve gerçekte geliĢtirilen
kodda yer alan sınıf tanımları, bu çalıĢma kapsamında geliĢtirilen bir metin ayrıĢtırıcı
kullanılarak çıkartılmıĢtır.</p>
      <p>Bu makale kapsamında tasarım ve kod arasında uyum incelenirken, tasarımda
sadece statik özelliklerin modellendiği sınıf tanımları ve kalıtım (inheritance) ve
gerçekleĢtirim (implementation) iliĢkileri dikkate alınmıĢtır. Bu bağlamda yazarlar, dinamik
özelliklerin modellendiği sıralama (sequence) ve aktivite diyagramları gibi tanımların
yanı sıra birlik (association) ve birleĢtirme (composition) iliĢkilerinin de
incelenmesinin çalıĢmada sunulan yaklaĢımı zenginleĢtireceğini ve sonuçları daha iyileĢtireceğini
değerlendirmekle birlikte söz konusu incelemeleri ileriki aĢamalarda yapılacak
çalıĢmalara bırakmıĢlardır. Tasarım ve sistem testleri dayanaklarından çıkartılan sınıf
tanımlarını içeren ham veri iĢlenerek, sınıf tanımları aĢağıdaki öznitelikleri içerecek
Ģekilde yapısal bir duruma getirilmiĢtir:</p>
      <p>Adı (String) - Sınıfın adı
EriĢimTürü (Sayısal) – public / private / protected sınıf
SınıfMı (Sayısal) - class veya interface olduğu
SoyutMu (Sayısal) - soyut bir sınıf / arayüzü olup olmadığı
FinalMi (Sayısal) - final bir sınıf / arayüzü olup olmadığı
Extends (0 .. n) (String) - Sınıf tarafından extend edilen sınıflar
Implements (0 .. n) (String) - Sınıf tarafından implement edilen sınıflar
Kodda yer alan bir sınıf tanımı ile tasarımda yer alan bir sınıf tanımının tam olarak
eĢleĢme karĢılaĢtırması, yukarıda listelenen özniteliklerin tümü karĢılaĢtırılarak
yapılmakta ve yalnızca tüm öznitelikler aynı ise kod ve tasarım sınıfları uyumlu
olarak kabul edilmektedir. Özniteliklerden herhangi birisi kod ve tasarımda aynı
değilse, kod ve tasarım sınıfları uyumsuz kabul edilmiĢtir. Veri analizleri RapidMiner
(Text Processing özelliği ile) kullanılarak yapılmıĢtır.
4</p>
    </sec>
    <sec id="sec-3">
      <title>Uyumluluk Analizi Sonuçları ve Tartışma</title>
      <p>Veri analizinde ilk adım olarak, tasarım ve kodda yer alan sınıfların sayıları tespit
edilmiĢ, bu sınıflardan sınıf isimleri birebir eĢleĢen sınıf sayıları belirlenmiĢtir. Kod
ve tasarım arasında uyumu irdelemek amacı ile tam olarak eĢleĢen sınıf tanımları
bulunmuĢtur. 3. Bölüm’de de açıklandığı gibi, tam olarak eĢleĢme analizi yukarıda
belirtilen özniteliklerin tamamında eĢleĢme kontrolü yapar; yani sınıflar tüm
özniteliklerinin eĢleĢmesi durumunda uyumlu, aksi takdirde uyumsuz olarak sayılır.</p>
      <p>Tablo 1. Sürümlere Göre Tasarım ve Kod Ölçümleri
Sürüm v1.0
337
2344
108
53
95
4
771
33</p>
      <p>Sürüm v4.1
1144
3118
845
74
336
11
2279
73</p>
      <p>Tablo 1’de yer alan ölçüm sonuçları incelendiğinde, sınıf isimleri açısından tasarım
ve kodlama arasında ~% 50 - % 75 arası birebir uyum söz konusudur. Tasarım ve kod
arasında tam olarak (tüm öznitelikleri birebir) eĢleĢen sınıf tanımlarına bakıldığında
ise çok daha düĢük seviyelerde eĢleĢme olduğu görülmektedir (~% 4 - % 11).</p>
      <p>Bu sonuçlar ile ilgili proje ekibi ile yapılan görüĢmeler üzerine, tasarımda birbirini
tekrarlayan durumlar için tek bir örnek kalıba yer verildiği, bu tasarım kalıbına
karĢılık kodda pek çok sınıf bulunabildiği anlaĢılmıĢtır (örneğin, “tüm XXXView sınıfları
IProjectView sınıfını “implement” etmelidir” kalıbı tasarımda bir kez belirtilir ancak
bu kalıp ile uyumlu olarak kodda 75+ XXXView sınıfı mevcuttur). Bu tespitin
ardından, bahsi geçen tasarım kalıplarını temsil etmek üzere düzenli ifadeler (örneğin,
sınıf adı *View Ģeklinde geçiyorsa bu sınıf tanımının devamında “implements
IProjectView” ifadesi de geçmelidir kuralını ayrıĢtıran kurallar) tanımlanarak tasarım
kalıbı ile örtüĢen sınıf tanımları tespit edilmiĢtir. Bu düzenli ifadeler, öncelikle
taraĢım tanımında kontrol edilmiĢ, tasarımda bu kurala uygun bir sınıf tanımı varsa kodda
kurala uyan tüm sınıflar tasarım ile uyumlu sayılmıĢtır. Söz konusu iyileĢtirmenin
ardından tasarım ve kod sınıfları arasındaki eĢleĢme oranları öenmli ölçüde artmıĢtır
(% 33 - % 73).</p>
      <p>Tablo 1'de verilen sonuçların da özetlediği gibi kod ve tasarım arasındaki uyum
düzeyleri proje ilerledikçe yükselmektedir. Bu sonuçlar arkasındaki nedenlerinden
biri, iĢ kuralı kontrolü, uyarı ve hata mesajı sınıfları gibi birbirine çok benzer ancak
son derece basit tanımı olan sınıflar kodda mevcut olmakla birlikte tasarımda mevcut
değildir (ilk sürümdeki sınıfların yaklaĢık olarak % 40’ı bu tür sınıflardır). Diğer bir
neden de bir sınıfın tasarımdaki tanımına ilave olarak bir baĢka sınıfı da “extend”
etmesi gibi durumlarda uyumun yok sayılması, sadece tam uyuma odaklanılması ve
kısmi uyumun herhangi bir Ģekilde sayılmamasıdır.
5</p>
    </sec>
    <sec id="sec-4">
      <title>Sonuçlar ve Gelecek Çalışmalar</title>
      <p>Bu makalede, tasarım ve kod arasındaki uyumluluğu belirlemek için yazılım
depolarında yer alan tasarım modeli ve kaynak kodlarının eĢleĢme analizi için bir yaklaĢım
sunulmuĢtur. Sınıf tanımları arasındaki tam eĢleme ve sonrasında düzenli ifadeler
kullanılarak tasarım kalıpları ile kod arasında eĢleĢme durumları incelenmiĢtir.
Tasarım kalıplarının dikkate alındığı durumda tasarım ve kod arasındaki uyum
düzeylerinin oldukça iyileĢtiği görülmüĢtür.</p>
      <p>Daha sonraki aĢamalarda yapılacak çalıĢmalarda tam uyuma ek olarak kısmi
uyumun da dikkate alınmasına yer verilebilir. Düzenli ifadeler tanımlayarak tasarım
kalıplarına uyumu incelemek yerine bu kalıpların veri madenciliği / metin madenciliği
teknikleri ile tespit edilmesi de çalıĢmanın önemli bir açılımı olacaktır. Ayrıca,
tasarım modeli ve kaynak kodların eĢleĢme analizlerinde sıralama (sequence) ve aktivite
diyagramları gibi dinamik modelin yanı sıra birlik (association) ve birleĢtirme
(composition) iliĢkilerinin de incelenmesi çalıĢma sonuçlarının doğruluğunu artıracaktır.
Kaynaklar
1. Parnas D.L.: "Software aging," 16th Int. Conf. on Software Engineering, Soronto, Italy
(1994) 279-287</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          2.
          <string-name>
            <surname>Martin</surname>
            <given-names>R. C.</given-names>
          </string-name>
          :
          <article-title>Agile software development: principles, patterns and practices</article-title>
          , Prentice Hall, (
          <year>2003</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          3.
          <string-name>
            <surname>Gamma</surname>
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Helm</surname>
            <given-names>R.</given-names>
          </string-name>
          , Johnson R., Vlissides J.:
          <article-title>Design patterns: elements of reusable objectoriented software</article-title>
          ,
          <source>Addison Wesley</source>
          (
          <year>1995</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          4.
          <string-name>
            <surname>Chatzigeorgiou</surname>
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Manakos</surname>
            <given-names>A</given-names>
          </string-name>
          .:
          <article-title>“Investigating the evolution of bad smells in object-oriented code</article-title>
          ,
          <source>” 7th International Conference on the Quality of Information and Communications Technology</source>
          (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          5.
          <string-name>
            <surname>Gerlec</surname>
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Krajnc</surname>
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Heričko</surname>
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Božnik</surname>
            <given-names>J</given-names>
          </string-name>
          .: “
          <article-title>Mining source code changes from software repositories,” 7th Central and</article-title>
          Eastern European Software Engineering Conference in Russia (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          6.
          <string-name>
            <surname>Zaidman</surname>
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rompaey</surname>
            <given-names>B. van</given-names>
          </string-name>
          , Demeyer S., van,
          <source>Deursen A.: “Mining Software Repositories to Study Co-Evolution of Production &amp; Test Code,” 1st International Conference on Software Testing</source>
          , Verification, and
          <string-name>
            <surname>Validation</surname>
          </string-name>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          7.
          <string-name>
            <surname>Canfora</surname>
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cerulo</surname>
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Di Penta</surname>
            <given-names>M.</given-names>
          </string-name>
          : “
          <source>Identifying Changed Source Code Lines from Version Repositories,” 4th International Workshop on Mining Software Repositories</source>
          (
          <year>2007</year>
          )
          <article-title>8</article-title>
          .
          <string-name>
            <surname>Murphy</surname>
            <given-names>G. C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Notkin</surname>
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sullivan K. J.</surname>
          </string-name>
          <article-title>: “Software Reflexion Models: Bridging the Gap between Design and Implementation,”</article-title>
          <source>IEEE Transactions on Software Engineering</source>
          , Cilt No
          <volume>27</volume>
          ,
          <fpage>364</fpage>
          -
          <lpage>380</lpage>
          (
          <year>2001</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          9.
          <string-name>
            <surname>Grechanik</surname>
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>McKinley</surname>
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Perry</surname>
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>“Recovering And Using Use-Case-</article-title>
          <string-name>
            <surname>Diagram-ToSource-Code Traceability</surname>
            <given-names>Links</given-names>
          </string-name>
          ,
          <source>” 6th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering</source>
          (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          10.
          <string-name>
            <surname>Antoniol</surname>
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Potrich</surname>
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tonella</surname>
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Fiutem</surname>
            <given-names>R</given-names>
          </string-name>
          .: “
          <article-title>Evolving object oriented design to improve code traceability</article-title>
          ,
          <source>” 7th International Workshop on Program Comprehension</source>
          (
          <year>1999</year>
          )
          <fpage>11</fpage>
          .Xing
          <string-name>
            <surname>Z.</surname>
          </string-name>
          , Stroulia E.:
          <article-title>“Analyzing the Evolutionary History of the Logical Design of ObjectOriented Software,”</article-title>
          <source>IEEE Journal on Software Engineering</source>
          (
          <year>2005</year>
          )
          <fpage>850</fpage>
          -
          <lpage>868</lpage>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>