<!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>PL/SQL Programları İçin Veri Tabanı Bağımlılık Analizi</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Ersin Ersoy</string-name>
          <email>ersin.ersoy@turkcell.com.tr</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Metin Altınışık</string-name>
          <email>metin.altinisik@turkcell.com.tr</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Hasan Sözer</string-name>
          <email>hasan.sozer@ozyegin.edu.tr</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Anahtar Kelimeler: Yazılım Mimarisi</institution>
          ,
          <addr-line>Etki Analizi, Yazılım İdamesi, PL/SQL</addr-line>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Özyeğin Üniversitesi</institution>
          ,
          <addr-line>İstanbul</addr-line>
          ,
          <country country="TR">Türkiye</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>Turkcell</institution>
          ,
          <addr-line>İstanbul</addr-line>
          ,
          <country country="TR">Türkiye</country>
        </aff>
      </contrib-group>
      <fpage>114</fpage>
      <lpage>125</lpage>
      <abstract>
        <p>Özet. PL/SQL dili ile yazılan programlar, veri tabanı üzerinde prosedür ve fonksiyon objeleri, ve bu objelerin bir kümesini barındıran paket objeleri olarak geliştirilmektedirler. Bu objeler yoğun olarak tablo ve görünüm gibi veri tabanı objelerini kullanmaktadırlar. Mevcut analiz araçları ile her bir objenin hangi diğer objelere bağımlılığı olduğunu görmek mümkündür. Ancak bu bilgi paket seviyesinde sağlanıp, paketler içindeki her bir prosedür ve fonksiyonun hangi veri tabanı elemanlarını kullanıldığı bilgisine ulaşılamamaktadır. Özellikle uzun yıllardır idame edilen programlarda, paketler çok fazla sayıda prosedür ve fonksiyon barındırmaktadır ve bu paketlerin belirli zamanlarda parçalanması idame edilebilirlik açısından fayda sağlamaktadır. Bu amaçla programların yeniden yapılandırılması, değişikliklere ilişkin etki analizlerinin yapılabilmesine destek sağlayacak bir analiz aracı geliştirilmiştir. Bu araç, paketler içerisinde yer alan prosedür ve fonksiyonların kullandıkları ortak veri tabanı tablolarını tespit edebilmekte ve böylece değişiklik etki analizi ile tasarım kararlarına destek olmaktadır. Geliştirdiğimiz analiz aracı, bir teknoloji şirketindeki müşteri ilişkileri yönetimi sistemine uygulanmıştır.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Database Dependency Analysis for PL/SQL Programs</p>
    </sec>
    <sec id="sec-2">
      <title>Ersin Ersoy1, Metin Altınışık1, Hasan Sözer2</title>
      <sec id="sec-2-1">
        <title>1 Turkcell, Istanbul, Turkey</title>
        <p>{ersin.ersoy, metin.altinisik}@turkcell.com.tr</p>
      </sec>
      <sec id="sec-2-2">
        <title>2 Ozyegin University, Istanbul, Turkey</title>
        <p>
          hasan.sozer@ozyegin.edu.tr
Abstract. PL/SQL programs are composed of procedure and function objects
deployed on a database. These objects can be grouped into a set of package
objects and they extensively use database objects such as tables and views.
Existing analysis tools can detect which objects are dependent on which other
objects. However, this information is available only at the package level. It is not
possible to detect database dependencies of procedures and functions that are
encapsulated in packages. Existing packages might include many procedures
and functions and they might have to be refactored to improve software
maintainability, especially in the case of legacy systems that are maintained for
years. In this work, we developed a dependency analysis tool to support
software refactoring and impact analysis. This tool detects database dependencies
of procedures and functions taking place in packages. It supports change impact
analysis and design decisions by detecting database tables commonly accessed
by various objects. We applied our tool on a customer relations management
system maintained by a technology firm.
Modülerlik, yazılım tasarımında gözetilen önemli niteliklerden biridir [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]. Büyük
ölçekli sistemlerde, idame ettirilebilirlik açısından bu nitelik daha da fazla önem
arzetmektedir. Modülerliği sağlamak amacıyla, sistemler birbirleri arasındaki
bağımlılığın az olduğu birimlerden oluşacak şekilde tasarlanmaktadırlar. Böylece sistem
üzerinde yapılması gereken değişiklikler bu birimlerin kapsamında
değerlendirilebilmektedir. Birimler arası bağımlılıklar ne kadar az olursa, değişikliklerin diğer birimlere
bir etkisi olma ihtimali o kadar az olmaktadır. Sonuç olarak hata ortaya çıkma riski ve
idame maliyetleri azalmaktadır.
        </p>
      </sec>
      <sec id="sec-2-3">
        <title>Yazılım birimleri arasındaki bağımlılıkları sistematik olarak tespit edebilme prob</title>
        <p>
          lemi literatürde uzun yıllardır çalışılan bir konudur [
          <xref ref-type="bibr" rid="ref2 ref3 ref4 ref5 ref9">2,3,4,5,9</xref>
          ]. Bu sayede, yazılım
sistemindeki bir birim üzerinde yapılan değişikliklerin diğer birimler üzerine olan
etkileri analiz edilebilmektedir [
          <xref ref-type="bibr" rid="ref6 ref7">6,7</xref>
          ]. Tespit edilen bağımlılıklar yazılım mimarisnin
dokümantasyonu veya yeniden yapılandırılması için kullanılabilmektedir [
          <xref ref-type="bibr" rid="ref13 ref14 ref8 ref9">8,9,13,14</xref>
          ].
        </p>
      </sec>
      <sec id="sec-2-4">
        <title>Yazılım birimleri arasındaki bağımlılıklar farklı şekillerde olabilmektedir</title>
        <p>
          [
          <xref ref-type="bibr" rid="ref14 ref15 ref16 ref17 ref18">14,15,16,17,18</xref>
          ]. Genel olarak literatürde raporlanan çalışmalar ağırlıklı olarak direkt
bağımlılıkları göz önünde bulundurmuştur. Bu bağımlılıklar statik [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ] ve/veya
dinamik [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ] analizler ile tespit edilen, bir birimin diğer birimin elemanlarına doğrudan
erişimi, kullanımı, çağrımı [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ] şeklinde ortaya çıkmaktadır. Oysa bazı yazılım
birimleri ortak kullanılan kaynaklardan ötürü dolaylı olarak bağımlıdırlar [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ].
        </p>
        <p>
          Dolaylı bağımlılık endüstride yaygın olarak kullanılan PL/SQL programlarında
özellikle sık rastlanan bir durumdur [
          <xref ref-type="bibr" rid="ref13 ref14">13,14</xref>
          ]. PL/SQL programları veri tabanı üzerinde
prosedür ve fonksiyon objeleri, ve bu objelerin bir kümesini barındıran paket objeleri
olarak geliştirilmektedirler. Bu objeler birbirlerini doğrudan kullanmasalar da, bazı
veri tabanı tabloları üzerinde ortak çalışabilirler. Mevcut analiz araçları ile her bir
objenin hangi diğer objelere bağımlılığı olduğunu görmek mümkündür. Ancak bu
bilgi paket seviyesinde sağlanıp, paketler içindeki her bir objenin hangi veri tabanı
elemanlarını kullanıldığı bilgisine ulaşılamamaktadır.
        </p>
        <p>
          Daha önceki çalışmamızda paketler arasındaki ve herhangi bir paket içinde yer
almayan objeler arasındaki veri bağımlılıkları değerlendirilmiştir [
          <xref ref-type="bibr" rid="ref13 ref14">13,14</xref>
          ]. Biz bu
çalışmamızda bir PL/SQL programı içerisindeki, herhangi bir paket içinde yer alsın veya
almasın, tüm objeler için ortak kullanılan veri tabanı elemanlarını tespit eden bir veri
bağımlılık analiz aracı geliştirdik. Bu araç PL/SQL programları için yazılım
bağımlılık analizi, değişiklik analizi gerçekletirebilmeyi mümkün kılmakta ve böylece
tasarım kararlarına destek olmaktadır.
        </p>
      </sec>
      <sec id="sec-2-5">
        <title>Geliştirdiğimiz analiz aracı, bir teknoloji şirketindeki müşteri ilişkileri yönetimi</title>
        <p>sistemine uygulanmıştır. Bu uygulama sonucunda, bazı objelerin veri
bağımlılıklarından ötürü mevcut duruma göre farklı paketler içinde yer alması gerektiği görülmüştür.</p>
      </sec>
      <sec id="sec-2-6">
        <title>Bu tespitler idame maliyetlerini azaltmak üzere yazılım mimarisinin tekrardan yapı</title>
        <p>landırılması için değerlendirilmektedir.</p>
        <p>Bildirinin organizasyonu şu şekildedir: Bir sonraki bölümde literatürde
yayınlanmış ilgili çalışmalar özetlenmektedir. 3. Bölüm’de kısaca PL/SQL programları
tanıtılmaktadır. 4. Bölüm’de geliştirdiğimiz analiz aracı ve kullandığımız yöntemler
anlatılmaktadır. 5. Bölüm’de modülerlik değerlendirmesi için kullanılan ölçütler
açıklamıştır. 6. Bölüm’de analiz aracın endüstriden bir vaka çalışması ile değerlendirilmesi
sunulmuştur. 7. Bölüm’de sonuçlar özetlenerek bildiri sonlandırılmaktadır.
2</p>
        <p>
          İlgili Çalışmalar
Bu bölümde, ilgili çalışmalar hakkında bilgiler verilmektedir. Özellikle de bu
çalışmaya benzerlik gösteren ve PL/SQL programları üzerine uygulamaları bulunan
çalışmalar özetlenerek bu çalışmadan farkları vurgulanmıştır. Literatürde yazılım
bağımlılık analizi ile ilgili birçok farklı çalışma yayınlanmıştır. Bu çalışmalar, yazılım
mimarisinin tekrar elde edilmesi [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ], görselleştirilmesi [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] veya iyileştirilmesini
[
          <xref ref-type="bibr" rid="ref12">12</xref>
          ] amaçlamıştır. Ancak önerilen tüm analiz araçları C/C++ ve Java dili ile
geliştirilmiş yazılım sistemlerine ve yazılım modülleri arasındaki doğrudan
bağımlılıklara odaklanmıştır. PL/SQL programları ve veri bağımlılığı gibi dolaylı
bağımlıklıkların analizi üzerine çok az sayıda çalışma bulunmaktadır.
        </p>
        <p>
          Daha önceki çalışmalarımızda [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ] [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ], PL/SQL prosedür ve fonksiyonların
otomatik olarak gruplanması problemine odaklanılmıştır. Her iki çalışmada da
herhangi bir paketten bağımsız olarak oluşturulmuş prosedür ve fonksiyonların belirli bir
paket ya da paketler altında birleştirilmesi ile ilgili yazılım geliştiricilere yol
gösterilmesi amaçlanmıştır. Bu çalışmada ise hali hazırda bir paket içinde yer alan
prosedür ve fonksiyonların kullandıkları, yani bağımlı oldukları tablo ve görünümleri
belirlemek ve bu bilgiler ışığında sistemin modülerliğini iyileştirmek amaçlı
yapılabilecek çalışmalar ile ilgili tasarımcılara yol göstermek amaçlanmaktadır.
        </p>
      </sec>
      <sec id="sec-2-7">
        <title>Yoğun olarak veriye erişim içeren uygulamalardaki modüllerin veri elemanlarına</title>
        <p>
          olan bağımlılıkları tespit etmek için statik kod analizi tekniklerini geliştirilmiştir [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ].
        </p>
      </sec>
      <sec id="sec-2-8">
        <title>Bu teknikler ile kullanılmayan elemanların belirlenerek temizlenmesi ve böylece</title>
        <p>
          verimlilik artışı amaçlanmıştır. Benzer bir başka çalışma da bankacılık sektörü
özelinde yapılmıştır [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ]. Ancak bu iki çalışmada da veri bağımlılık analizi paket
seviyesinde yapılmaktadır. Analiz paketler içerisindeki prosedür ve fonksiyonlar
seviyesinde olmadığından bizim çalışmamızdan ayrışmaktadır.
        </p>
      </sec>
      <sec id="sec-2-9">
        <title>Bu çalışmalar dışında bizim çalışmamıza benzer kullanılabilecek Cocolab PL/SQL</title>
        <p>
          Analiz [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ] ve Trivadis PL/SQL &amp; SQL Kod Analiz [
          <xref ref-type="bibr" rid="ref22">22</xref>
          ] araçları bulunmaktadır. Bu
araçlar prosedür ve fonksiyon seviyesinde veri bağımlılık analizi
gerçekleştirebilmektedirler. Ancak her iki uygulamanın da analiz yapılacak bilgisayar üzerine
kurulması ve bu şekilde çalıştırılması gerekmektedir. Bizim çalışmamız kapsamında
geliştirilen aracın kendisi de PL/SQL dili kullanılarak geliştirildiğinden sadece bir
kereye mahsus olarak veri tabanına yerleştirilmekte ve sonrasında yetkisi olan tüm
kullanıcılar tarafından ek bir kuruluma gerek kalmadan kullanılabilmektedir.
        </p>
      </sec>
      <sec id="sec-2-10">
        <title>Bir sonraki bölümde, PL/SQL programları hakkında temel bilgiler verilmektedir.</title>
      </sec>
      <sec id="sec-2-11">
        <title>PL/SQL programlarını diğer programlardan ayıran özeliklere kısaca değinilmektedir.</title>
        <sec id="sec-2-11-1">
          <title>PL/SQL Programları</title>
        </sec>
      </sec>
      <sec id="sec-2-12">
        <title>PL/SQL (Procedural Language/Structured Query Language) [23], SQL dilini</title>
        <p>prosüdürel dillerin özellikleri ile birleştiren 3. nesil bir programlama dilidir. Oracle1
veritabanı yönetim sistemini kullanan büyük ölçekli finans kuruluşlarında,
telekomunikasyon operatörlerinde ve devlet kurumlarındaki yazılım sistemlerinin büyük bir
kısmı PL/SQL dili ile geliştirilmiştir.</p>
        <p>Genel olarak PL/SQL programları paketler altında gruplanmış prosedür ve
fonksiyonlardan oluşmaktadır. Ayrıca herhangi bir paket altında gruplanmamış tekil
prosedür ve fonksiyonlar da olabilmektedir. Tüm prosedür, fonksiyon ve paketler
derlendikten sonra ilgili veritabanının bir parçası olarak veritabanında
kaydedilmektedirler ve bu veritabanına bağlanan uygulamalardan doğrudan
çağrılabilmektedirler. Şekil 1’de bir PL/SQL prosedürünün 3 ana kısımdan oluşan temel
blok yapısını gösteren bir örnek bulunmaktadır.</p>
        <p>Şekil 1. PL/SQL bloklarının genel yapısı.</p>
      </sec>
      <sec id="sec-2-13">
        <title>Tanımlama kısmı (Satır 1-4) uygulama akışında kullanılan değişkenlerin</title>
        <p>tanımlandığı kısımdır. Bu kısım eğer programda kullanılan herhangi bir değişken
yoksa zorunlu değildir. Çalıştırılabilir kısım, BEGIN ifadesi ile başlayıp END ifadesi
ile sonlanan (Satır 5-22) kısım olup, programın ana iş akışını içermektedir. Bu kısım
tüm PL/SQL prosedürleri için zorunludur. Hata kontrol kısmı, EXCEPTION ifadesi
ile başlar (satır 15-22) ve çalıştırabilir kısımdaki olası hataları yönetmektedir.</p>
      </sec>
      <sec id="sec-2-14">
        <title>Kurumsal seviyedeki uygulamalar genelde çok büyük ve karmaşık uygulamalardır.</title>
      </sec>
      <sec id="sec-2-15">
        <title>Bu nedenle PL/SQL programlarında genelde bu karmaşıklığı daha iyi yönetmek için</title>
      </sec>
      <sec id="sec-2-16">
        <title>1 www.oracle.com</title>
        <p>paket yapıları kullanılmaktadır. Paketler fonksiyon ve prosedürleri gruplamak için
kullanılan objelerdir.</p>
      </sec>
      <sec id="sec-2-17">
        <title>Paketler tanımlama ve gövde olmak üzere iki kısımdan oluaşmaktadır. Tanımlama kısmı paketin arayüz kısmıdır. Bu kısımda değişkenler, sabitler, hata tipleri, dışardan çağrılabilecek olan fonskiyon ve procedurlerin tanımı yapılır. Şekil 2’de standart bir paket tanımının genel bir görümü gösterilmiştir.</title>
        <p>Şekil 2. PL/SQL standart paket spesifikasyon kısmı.</p>
      </sec>
      <sec id="sec-2-18">
        <title>Paketlerin gövde kısmında ise prosedür ve fonksiyonların asıl kod kısımları</title>
        <p>bulunmaktadır. Paket gövdesinin genel bir görünümü Şekil 3’de gösterilmiştir.</p>
        <p>Şekil 3. PL/SQL standart paket gövde kısmı.
4</p>
        <sec id="sec-2-18-1">
          <title>PL/SQL Veri Bağımlılık Analizi Aracı</title>
        </sec>
      </sec>
      <sec id="sec-2-19">
        <title>Bu bölümde PL/SQL paketlerinin içerisinde yer alan fonksiyon ve prosedürlerin analiz edilmesi amacıyla geliştirdiğimiz analiz aracı anlatılmaktadır. Oracle veri tabanlarında objelerin birbiri ile ilişkilerini analiz etmek üzere geliştirilmiş olan veri sözlük</title>
        <p>görünümleri, PL/SQL programları için sadece paket seviyesinde bilgi vermektedir.</p>
      </sec>
      <sec id="sec-2-20">
        <title>Paketlerin içinde yer alan her bir prosedür ve fonksiyon için bu bilgi ancak göz ile</title>
        <p>kontrol edilerek elde edilebilir. Büyük ölçekli yazılımlar için bu yöntem elverişli
değildir. Tüm prosedür ve fonksiyonların veri bağımlılıklarını otomatik olarak elde
edebilmek için bir araç geliştirdik. Geliştirdiğimiz araç bir PL/SQL programının
kaynak kodunu statik olarak analiz etmektedir. Analiz, aşağıdaki algoritmada
listelenen adımlardan oluşmaktadır:</p>
        <p>Algoritma 1. PL/SQL prosedürleri ve fonksiyonları için veri bağımlılık analizi.
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21</p>
        <p>GİRDİ: Veri tabanı Şeması, S
ÇIKTI: BAĞIMLILIK LİSTESİ, B
B ← ∅
P ← S içindeki tüm paketler
Her p ∈ P için</p>
        <p>F ← p içindeki prosedürler / fonksiyonlar
Her f ∈ F için
f.b ← f başlangıç satır numarası
f.s ← f bitiş satır numarası
Son
T ← p içinde geçen tablo ve görünüm bağımlılıkları
Her t ∈ T için
t.a ← tablo / görünüm adı
t.i ← işlem tipi
t.s ← t satır numarası
Her f ∈ F için</p>
        <p>Eğer f.b &lt; t.s &lt; f.s ise</p>
        <p>B ← B + (f, t.a, t.i)</p>
        <p>Son</p>
        <p>Son</p>
        <p>Son</p>
        <p>Son</p>
      </sec>
      <sec id="sec-2-21">
        <title>Birinci adımda paket içindeki prosedürler, Oracle veri tabanının hali hazırda</title>
        <p>sağladığı kütüphane görünümlerinin otomatik analizi ile bulunmaktadır (Satır 5).</p>
      </sec>
      <sec id="sec-2-22">
        <title>Bundan sonraki her bir adımda da Oracle veri tabanının hali hazırda sağladığı</title>
        <p>kütüphane görünümleri (ALL_SOURCE, ALL_DEPENDENCIES vb.) kullanılmıştır.
Sonrasında bulunan her bir prosedürün paket içindeki başlangıç ve bitiş satırları
bulunmaktadır (Satır 6-9). Her bir prosedür, “PROCEDURE” ya da “FUNCTION”
anahtar kelimesi sonrasında prosedür adı gelecek şekilde tanımlanmaktadır. Bitiş
satırı için ise “END” anahtar kelimesi zorunludur. Bu kelimenin ardından ilgili
prosedürün adı dayazılabilir (Örnek: Şekil 3), ancak bu zorunlu değildir (Örnek: Şekil
1). Bu nedenle son satırlarında “END” anahtar kelimesi sonrası prosedür adı
yazılmayanlar prosedürleri bulmak için ek analiz gerektirmektedir. Sonraki adımda, paketin
bağımlı olduğu (kullandığı) tablo ve görünümler bulunmaktadır (Satır 10). Bu
aşamada, SELECT cümleciklerinde birden fazla tablo kullanılması durumunda, sadece ilk
tablo dikkate alınmıştır. Ayrıca, PL/SQL dilinin yapısından dolayı bir komut
cümleciği tek bir satırda olmak zorunda değildir (Örnek: Şekil 1). Dolayısıyla, doğru
komut cümleciğini bulmak için analiz ettiğimiz her satır kendinden önceki ve sonraki
satırlarla birlikte ele alınmalıdır. Bu durum, tekrarlayan bilgilerin oluşmasına neden
olmaktadır. Bu bilgiler bir sonraki adıma geçmeden önce temizlenmektedir. Bulunan
her bir tablo ve görünüm bağımlılığının paket içinde hangi satırlarda ve hangi işlem
ile (sorgulama, güncelleme, vs.) kullanıldığı bulunmaktadır (Satır 12-14). Son olarak,
bulunan satır numaraları kullanılarak, bağımlılığın paket için hangi prosedürlerden
kaynaklandığı bulunmakta ve bu bilgi kaydedilmektedir (Satır 15-18).</p>
      </sec>
      <sec id="sec-2-23">
        <title>Bir sonraki bölümde, prosedürlerin veri bağımlılıklarından yola çıkarak, PL/SQL paketleri arasındaki bağımlılıkların ve paketlere ilişkin modülerliğin değerlendirmesi için kullanılan ölçütler açıklanmaktadır.</title>
        <p>5</p>
        <sec id="sec-2-23-1">
          <title>Bağımlılık ve Modülerlik Ölçütleri</title>
          <p>Bir önceki bölümde tanıtılan aracımız tarafından tespit edilen veri bağımlılıklarını
dikkate alarak yazılım mimarisi üzerinde bir bağımlılık (coupling) ve uyumluluk
(cohesion) alanizi gerçekleştirmek için çeşitli ölçütler kullanılmıştır. Öncelikle, her bir
prosedür, f için dışa bağımlılık (BD) ölçütü aşağıdaki gibi hesaplanmıştır.
,
|  | = 0
|  | &gt; 0</p>
          <p>Burada,   f prosedürü tarafından kullanılan tablo kümesini,   ise bu prosedürün
dahil olduğu paketi ifade etmektedir. Hiçbir pakete dahil olmayan prosedürlerin yapay
bir paketin parçaları oldukları varsayılarak heseplamalar yapılmıştır. Bir fonksiyon
tarafından ve bu fonksiyon ile aynı pakete dahil olmayan fonksiyonlar tarafından
ortak kulanılan tablo sayısı, fonksiyon tarafından kullanılan toplam tablo sayısına
bölünerek hesaplama yapılmıştır. Bu ölçüt ile dışa bağımlılığı fazla olan prosedürler
tespit edilebilmektedir.</p>
          <p>Her paket çifti p1 ve p2 için bağımlılık (B) ölçütü aşağıdaki gibi hesaplanmıştır.
 1,2
=
|1|
∑
1 ∈ 1</p>
          <p>|2|
2 ∈ 2</p>
          <p>∑ (1 ve 2 tarafından kullanılan ortak tablo sayısı)</p>
        </sec>
      </sec>
      <sec id="sec-2-24">
        <title>Burada | |, p paketi içerisinde yer alan prosedür sayısını, f ise her bir prosedürü</title>
        <p>ifade etmektedir. B ölçütünün hesaplanması için iki farklı paket içerisinde yer alan her
bir prosedür çifti için ortak kullanılan tabloların sayısı hesaplanarak toplanmıştır.</p>
      </sec>
      <sec id="sec-2-25">
        <title>Her bir paket için Uyumsuzluk ölçütü (UX) ise 0 ile 1 arasında bir değer verecek şekilde, LCOM (Lack of Cohesion Metric) ölçütünden esinlenerek [24] aşağıdaki gibi tanımlanmnıştır.</title>
        <p>İŞLEM
INSERT
SELECT
DELETE
INSERT
UPDATE</p>
        <p>Burada,   p paketi tarafından kullanılan tablo kümesini,   ise p paketi
kapsamında yer alan prosedürlerin kümesini ifade etmektedir. UX değeri ne kadar 0 değerine
yakın olursa paket o kadar uyumlu, 1 değerine ne kadar yakın olursa paket o kadar
uyumsuz demektir. Bir sonraki bölümde, bu ölçütler kullanılarak analiz aracımızın bir
endüstriyel vaka çalışması kapsamında kullanımı ve elde edilen sonuçlar
anlatılmaktadır.
6</p>
        <sec id="sec-2-25-1">
          <title>Endüstriyel Vaka Çalışması</title>
        </sec>
      </sec>
      <sec id="sec-2-26">
        <title>Vaka çalışmamız bir iletişim ve teknoloji şirketindeki müşteri ilişkileri yönetimi veri</title>
        <p>tabanı şemasının analizi üzerinden yapılmıştır. Söz konusu şema içindeki 88 paket, bu
paketlerin içindeki 671 prosedür bağımlı oldukları 203 adet tablo ve görünüm objesi
baz alınarak analiz edilmiştir. Sonuç olarak Tablo 1’de örnek olarak gösterilmiş
formatta analiz ettiğimiz şema için toplam 2032 bağımlılık tepit edilmiştir.</p>
      </sec>
      <sec id="sec-2-27">
        <title>Tablo 1. Örnek olarak bir kısmı listelenmiş olan bağımlılık bilgileri.</title>
        <p>REFERANS</p>
        <p>PAKET</p>
        <p>PROSEDÜR
ŞEMA
CRM
CRM
CRM
CRM
CRM
İSİM
PK42_P332
PK42_P330
PK40_P310
PK40_P310
PK39_P300</p>
        <p>T149
T149
T129
T129
T110</p>
        <p>PK42
PK42
PK40
PK40
PK39</p>
        <p>P332
P330
P310
P310
P300
  =
∑ ∈  

 ç</p>
        <p>Tespit edilen bağımlılıklardan yola çıkılarak, bir önceki bölümde tanıtılmış olan
ölçütler hesaplanmıştır. Hesaplama sonuçları Tablo 2’de görülmektedir. Yer kısıtı
nedeniyle matrisin belirli kısımları eklenmiştir. Bu tabloda her bir satır ve kolon birer
pakete tekabül etmektedir. Ortaya çıkan 88x88 matristeki her bir satır ilgili paketin
diğer paketlerle olan bağımlılık değerleridir. Köşegende ise uyumsuzluk değerleri
bulunmaktadır. İyi seviyede bir modülerlik için düşük bağımlılık ve uyumsuzluk
değeri arzulanmaktadır. Örnek olarak bu bakış açısından 30 nolu paket için sonuçların
olumlu çıktığı görülebilir. Ancak 15 nolu paket için bir yeniden yapılandırma ihtiyacı
olduğu görülmektedir.</p>
        <p>Tablo 2. Hesaplama sonuçları.</p>
        <sec id="sec-2-27-1">
          <title>Sonuçlar ve Gelecek Çalışmalar</title>
        </sec>
      </sec>
      <sec id="sec-2-28">
        <title>Geliştirdiğimiz analiz aracı ile daha önce oldukça üst seviye de kalan bağımlılık ana</title>
        <p>lizinin geliştirtirilmesi sonucunda paket içindeki prosedür ve fonksiyonların
bağımlılıkları görünür hale gelmiştir. Bu detayda bağımlılık bilgisini görünür hale
getirmek ile sistemin idame maliyetlerine katkı sağlayacak aynı zamanda bütünlüğü
koruyacak aksiyonların alınması kolaylaşmıştır.</p>
      </sec>
      <sec id="sec-2-29">
        <title>PL/SQL programlarında, bazı prosedürler ve fonksiyonlar bir paketin gövdesinde</title>
        <p>yer almakla birlikte, bu paketin spesifikasyon bölümünde tanımlanmamış olabilirler.</p>
      </sec>
      <sec id="sec-2-30">
        <title>Gerçekleştirdiğimiz analizlerde bu tip prosedürler ve fonksiyonlar göz ardı edilmiştir. Buna ek olarak, SELECT cümleciklerinde birden fazla tablo kullanılması durumunda sadece ilk tablo dikkate alınmıştır. Analiz ettiğimiz müşteri ilişkileri yönetimi şemasında bu durumların sayısı nispeten az olduğu için analiz sonuçlarına etkisi göz</title>
        <p>ardı edilebilir ancak çalışmamızı belirttiğimiz durumların daha yaygın olduğu
şemalara da uygulamak istediğimizden, bu konuları iyileştirme planlanmaktadır.</p>
        <p>Yapmış olduğumuz ilk incelemelerde, bazı prosedüler ve fonskiyonların
modülerlik açısından yer almaları gerektikleri paketlerde yer almadıkları fark edilmiştir. Bu
sebeple, yazılım mimarisinin yeniden yapılandırılarak iyileştirilmesi gerektiği ortaya
çıkmıştır. Gelecekte, prosedüler ve fonskiyonları bağımlılıklarına göre otomatik
olarak gruplamak üzere kümeleme yöntemlerinin kullanılması planlanmaktadır. Bu
şekilde, göz ile fark edemediğimiz başka iyileştirme alanlarınının da tespit edilmesi
mümkün olacaktır.</p>
        <p>Kaynaklar</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Parnas</surname>
            ,
            <given-names>D.L.</given-names>
          </string-name>
          :
          <article-title>On the criteria to be used in decomposing systems into modules</article-title>
          .
          <source>Communications of the ACM</source>
          <volume>15</volume>
          (
          <issue>12</issue>
          ),
          <fpage>1053</fpage>
          -
          <lpage>1058</lpage>
          (
          <year>1972</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Chen</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          :
          <article-title>Reverse engineering</article-title>
          . In: Practical Reusable Unix Software, Krishnamurthy,
          <string-name>
            <surname>B</surname>
          </string-name>
          . (ed),
          <source>chapter 6</source>
          , pp.
          <fpage>177</fpage>
          -
          <lpage>208</lpage>
          , New York: John Wiley &amp; Sons (
          <year>1995</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Chen</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gansner</surname>
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Koutsofios</surname>
          </string-name>
          , E.:
          <string-name>
            <surname>A C+</surname>
          </string-name>
          <article-title>+ data model supporting reachability analysis and dead code detection</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          <volume>24</volume>
          (
          <issue>9</issue>
          ),
          <fpage>682</fpage>
          -
          <lpage>694</lpage>
          (
          <year>1997</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Korn</surname>
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Chen</surname>
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Koutsofios</surname>
            <given-names>E.</given-names>
          </string-name>
          : Chava:
          <article-title>Reverse engineering and tracking of Java applets</article-title>
          .
          <source>In: Proceedings of the 6th Working Conference on Reverse Engineering</source>
          , pp.
          <fpage>314</fpage>
          -
          <lpage>325</lpage>
          , Atlanta,
          <string-name>
            <surname>GA</surname>
          </string-name>
          , USA (
          <year>1999</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Sangal</surname>
          </string-name>
          , N.,
          <string-name>
            <surname>Jordan</surname>
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sinha</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jackson</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Using dependency models to manage complex software architecture</article-title>
          .
          <source>In: Proceedings of the 20th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages and Applications</source>
          , pp.
          <fpage>167</fpage>
          -
          <lpage>176</lpage>
          , San Diego, CA, USA (
          <year>2005</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Arnold</surname>
            ,
            <given-names>R.S.:</given-names>
          </string-name>
          <article-title>Software change impact analysis</article-title>
          .
          <source>IEEE Computer</source>
          Society Press, Los Alamitos, CA, USA (
          <year>1996</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Li</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sun</surname>
            ,
            <given-names>X.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Leung</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          and Zhang,
          <string-name>
            <surname>S.:</surname>
          </string-name>
          <article-title>A survey of code-based change impact analysis techniques</article-title>
          .
          <source>Software Testing, Verification and Reliability</source>
          ,
          <volume>23</volume>
          ,
          <fpage>613</fpage>
          -
          <lpage>646</lpage>
          (
          <year>2013</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Mens</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tourwe</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          :
          <article-title>A survey of software refactoring</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          <volume>30</volume>
          (
          <issue>2</issue>
          ),
          <fpage>126</fpage>
          -
          <lpage>139</lpage>
          (
          <year>2004</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Ducasse</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pollet</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Software architecture reconstruction: A processs oriented taxonomy</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          <volume>35</volume>
          (
          <issue>4</issue>
          ),
          <fpage>573</fpage>
          -
          <lpage>591</lpage>
          (
          <year>2009</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Guo</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Atlee</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Kazman</surname>
            ,
            <given-names>R.:.</given-names>
          </string-name>
          <article-title>A software architecture reconstruction method</article-title>
          .
          <source>In: Proceedings of the 1st Working Conference on Software Architecture</source>
          , pp.
          <fpage>15</fpage>
          -
          <lpage>34</lpage>
          , Deventer, The Netherlands, (
          <year>1999</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Koschke</surname>
          </string-name>
          , R.:
          <article-title>Software visualization in software maintenance, reverse engineering, and reengineering: a research survey</article-title>
          .
          <source>Journal of Software Maintenance and Evolution: Research and Practice</source>
          ,
          <volume>15</volume>
          (
          <issue>2</issue>
          ),
          <fpage>87</fpage>
          -
          <lpage>109</lpage>
          (
          <year>2003</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Ferrante</surname>
            ,
            <given-names>K.O.J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Warren</surname>
            ,
            <given-names>J.D.:</given-names>
          </string-name>
          <article-title>The program dependence graph and its use in optimization</article-title>
          .
          <source>ACM Transactions on Programming Languages and Systems</source>
          ,
          <volume>9</volume>
          (
          <issue>3</issue>
          ),
          <fpage>319</fpage>
          -
          <lpage>349</lpage>
          , (
          <year>1987</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Ersoy</surname>
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kaya</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Altınışık</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sözer</surname>
          </string-name>
          , H.:
          <article-title>Using hypergraph clustering for software architecture reconstruction of data-tier software</article-title>
          .
          <source>In: Proceedings of the 10th European Conference on Software Architecture</source>
          , pp.
          <fpage>326</fpage>
          -
          <lpage>333</lpage>
          , LNCS, vol.
          <volume>9839</volume>
          , Copenhagen, Denmark (
          <year>2016</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Altınışık</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sözer</surname>
          </string-name>
          , H.:
          <article-title>Automated procedure clustering for reverse engineering PL/SQL programs</article-title>
          .
          <source>In: Proceedings of the 31st Annual ACM Symposium on Applied Computing</source>
          , pp.
          <fpage>1440</fpage>
          -
          <lpage>1445</lpage>
          , ACM, Pisa, Italy (
          <year>2016</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Offutt</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Harrold</surname>
            <given-names>M.J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kolte</surname>
            <given-names>P.:</given-names>
          </string-name>
          <article-title>A software metric system for module coupling</article-title>
          .
          <source>Journal of Systems and Software</source>
          ,
          <volume>20</volume>
          (
          <issue>3</issue>
          ),
          <fpage>295</fpage>
          -
          <lpage>308</lpage>
          (
          <year>1993</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Briand</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Daly</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wust</surname>
            ,
            <given-names>J:</given-names>
          </string-name>
          <article-title>A unified framework for coupling measurement in objectoriented systems</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          ,
          <volume>25</volume>
          (
          <issue>1</issue>
          )
          <fpage>91</fpage>
          -
          <lpage>121</lpage>
          (
          <year>1999</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Arisholm</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Briand</surname>
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Foyen</surname>
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Dynamic coupling measurement for object-oriented software</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          ,
          <volume>30</volume>
          (
          <issue>8</issue>
          )
          <fpage>491</fpage>
          -
          <lpage>506</lpage>
          (
          <year>2004</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Kirbas</surname>
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hall</surname>
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sen</surname>
            <given-names>A</given-names>
          </string-name>
          .:
          <article-title>Evolutionary coupling measurement: Making sense of the current chaos</article-title>
          .
          <source>Science of Computer Programming</source>
          ,
          <volume>135</volume>
          ,
          <fpage>4</fpage>
          -
          <lpage>19</lpage>
          (
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <given-names>C.</given-names>
            <surname>Nagy</surname>
          </string-name>
          .
          <article-title>Static analysis of data-intensive applications</article-title>
          .
          <source>In Software Maintenance and Reengineering (CSMR)</source>
          ,
          <year>2013</year>
          17th European Conference on, pages
          <fpage>435</fpage>
          -
          <lpage>438</lpage>
          .IEEE, (
          <year>2013</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Nagy</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ferenc</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          and Bakota,
          <string-name>
            <surname>T.</surname>
          </string-name>
          ,
          <year>2011</year>
          ,
          <string-name>
            <surname>September.</surname>
          </string-name>
          <article-title>A true story of refactoring a large oracle pl/sql banking system</article-title>
          .
          <source>In Industrial Track of the 8th joint meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering (ESEC/FSE</source>
          <year>2011</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Cocolab</surname>
            <given-names>PL</given-names>
          </string-name>
          /SQL Analiz, www.cocolab.com/app_plsql.html.
          <source>Erişim Haziran</source>
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <surname>Trivadis</surname>
            <given-names>PL</given-names>
          </string-name>
          /SQL Analiz, www.salvis.com/blog/2013/07/28/tvdca-0-5-1
          <string-name>
            <surname>-</surname>
          </string-name>
          beta-released/.
          <source>Erişim Haziran</source>
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23.
          <string-name>
            <surname>Oracle Database</surname>
            <given-names>PL</given-names>
          </string-name>
          /SQL Language Reference, https://docs.oracle.com/cloud/latest/db112/LNPLS/toc.htm.
          <source>Erişim Haziran</source>
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24.
          <string-name>
            <surname>Chidamber</surname>
            ,
            <given-names>S.R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kemerer</surname>
            ,
            <given-names>C.F.</given-names>
          </string-name>
          :
          <article-title>A metrics suite for object oriented design</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          ,
          <volume>20</volume>
          (
          <issue>6</issue>
          ),
          <fpage>476</fpage>
          -
          <lpage>493</lpage>
          (
          <year>1994</year>
          ).
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>