Nesneye dayalı yazılımların bakım kolaylığı karakteristiğinin ölçülmesi
Measuring the maintainability characteristic of object-oriented softwares
Yazar: ÖZLEM AKALIN
Danışman: DOÇ. DR. FEZA BUZLUCA
İstanbul Teknik Üniversitesi / Fen Bilimleri Enstitüsü / Bilgisayar Mühendisliği Ana Bilim Dalı / Bilgisayar Mühendisliği Bilim Dalı
Derece: Yüksek Lisans, 2018
Konu: Bilgisayar Mühendisliği Bilimleri-Bilgisayar ve Kontrol = Computer Engineering and Computer Science and Control
Dizin: Bilgisayar yazılımları = Computer softwares ; Nesneye dayalı yazılım = Object oriented software

Özet:
Yazılım projelerinin gün geçtikçe kullanımının artması ve sürekli değişime ihtiyaç duyması sebebiyle yazılımda kalite kavramı önemli hale gelmiştir. Yazılım kalitesinin analiz, tasarım, geliştirme ve test süreçlerinin her biri için değerlendirilmesine ihtiyaç duyulmaktadır. 
Günümüzde yazılım projeleri için müşterilerin sürekli değişen istekleri, teknolojik gelişmeler ve yazılımdaki hataların giderilmesi şirketler için yüksek miktarda zaman ve kaynak maliyetine neden olmaktadır. Bu gereksinimleri karşılamak için şirketler farklı proje yönetim metodolojileri aracılığıyla yapılacak işleri alt parçalara bölerek sürekli olarak müşteriye proje hakkında bilgi vermeyi ve değişen müşteri isteklerine kolay adapte olarak maliyeti düşürmeyi amaçlamaktadır. Bu sebeple sürekli güncellenmesi gereken yazılımların bakım maliyetini düşürmek için kalite ölçüm metodolojileri yazılım dünyasında önem kazanmaktadır. 
Yazılım ürün kalitesini artırmak için yazılımın bakım kolaylığını ölçmek oldukça önemlidir. Bakım maliyeti azaltmak için yazılım geliştirme döngüsünde bir yazılım kalite modeli kullanılarak sistemin kalitesi sürekli olarak değerlendirilebilir ve geliştirilebilir. ISO / IEC 25010 Yazılım Kalite Modelleri Standardına [1] göre, yazılım ürün kalitesinin bakım kolaylığı özelliği beş alt karakteristikten oluşur; modülerlik, değiştirilebilirlik, yeniden kullanılabilirlik, analiz edilebilirlik ve test edilebilirlik. Bu çalışma, yazılım sistemlerinde bakım kolaylığını, yeniden kullanılabilirlik ve değiştirilebilirlik karakteristikleri bakımından değerlendirmek için bir kalite ölçüm modeli önermektedir. Model, boyut, karmaşıklık, uyum, bağımlılık ve kalıtım gibi yeniden kullanılabilirlik ve değiştirilebilirlik ile güçlü bir şekilde ilişkili yazılım özelliklerini içermektedir. 
Bu çalışmada, önerilen kalite modeli özellikle büyük ölçekli nesne yönelimli yazılım sistemlerinin bakım kolaylığını değerlendirmek amacıyla geliştirilmiştir. Yazılım geliştiriciler, projelerin farklı aşamalarında veya başka projelerde hangi sınıfların yeniden kullanılabileceğini bilmeye ihtiyaç duymaktadır. Benzer şekilde, projeye yeni özellikler eklemek, yazılım sınıflarını yeniden düzenlemek veya hata düzeltmek için sınıfların değiştirilme maliyetini bilmeleri gerekir. Hiyerarşik modelimizde yeniden kullanılabilirliği ve değiştirilebilirliği ölçmek için boyut, uyum, bağımlılık, karmaşıklık ve kalıtım gibi nesne yönelimli sistemlerin özellikleri kullanılmıştır. Her özelliğe uygun olarak yazılım kod metrikleri tanımlanmıştır. Metrikler, incelenmesi istenen programlardan kolaylıkla elde edilebilir. Metrik değerleri kullanılarak bir yazılımın bakım kolaylığını ölçülmesi ve sonuçlar doğrultusunda yazılımın iyileştirilebilmesi sağlanmaktadır.
Modelimizde öncellikli olarak, test sistemindeki yazılım sınıflarının metrik değerlerini düşük, orta ve yüksek olarak sınıflandırılır. Bu sınıflandırma, referans yazılım sistemlerinden elde edilen metriklerin ortalama ve medyan değerlerine dayanılarak yapılır. Her metriğin karşılık geldiği özelliğin artması durumunda yazılımın negatif mi yoksa pozitif mi etkileneceğine karar verilir. Daha sonra, önerilen ölçüm yöntemi, sistemdeki her bir sınıfın yeniden kullanılabilirlik ve değiştirilebilirlik puanlarını hesaplamak için metriklerin seviyelerini kullanır. Toplam puanlama sonucunda yazılım sınıfları beş kategoriye ayrılır; Çok düşük, düşük, orta, yüksek ve çok yüksek. Yazılım geliştiricileri, düşük ve çok düşük puanları olan sınıfları inceleyebilir ve gerekirse bunları yeniden düzenleyebilir. Bu sürekli değerlendirme ve geliştirme sırasında yeniden yapılanma, sistemin kalitesini artırabilir ve bakım maliyetlerini azaltabilir. 
Modelimiz iki büyük ölçekli endüstriyel mobil uygulama üzerine uygulanmıştır ve sonuçlar yazılımı geliştirme ekipleriyle tartışılmıştır. Değerlendirmeler sırasında geliştirme ekiplerinin görüşlerini almak için modelde değerlendirilen her bir özelliğin birbiri ile karşılaştırıldığı bir anket hazırlanmıştır. Anket ve model sonuçlarının tutarlılığı istatistiksel olarak karşılaştırılmıştır. Karşılaştırma sonucunda yaklaşımımızın, yeniden kullanılabilirlik ve değiştirilebilirlik özellikleri hakkında sınıfları uygun olarak sınıflandırabildiği görülmüştür. 
Gelecek aşamalarda bakım maliyetinin azalmak için yazılımın farklı özellikleri incelenerek önerilen modelin geliştirilmesi planlanmaktadır.

Abstract:
Because of the increasing use of software projects and the need to constantly change, the concept of quality in software has become important. Software quality needs to be evaluated for each of the analysis, design, development and testing processes. 
Today, constantly changing demands, technological developments and elimination of errors in software for software projects cause high cost and time and resources cost for companies. In order to meet these requirements, companies aim to divide the work to be done through different project management methodologies continuously to inform the customer about the project and reduce the cost as easy adapting to changing customer requests. It is expected that the software systems could be developed, modified, extended, and corrected in a short time without a degradation in its performance. Therefore, many researchers study on models for measuring the maintainability characteristic of the software product quality. The objective is to help developers in detecting modules that are not properly designed and need refactoring to decrease maintenance costs. For this reason, quality measurement methodologies are gaining importance in the software world in order to reduce the maintenance cost of software that needs to be constantly updated.
The internal and external characteristics of the ISO 25010 standard are used by software developers and project managers to ensure that they have knowledge of the quality of the project. Usage quality criteria are used to define where customers and users can expect the project-related expectations. The characteristics within the scope of the standard include abstract meanings. In order to be able to interpret the quality expectations of both users and developers, the characteristics have to be expressed numerically. For this reason, various quality measurement models are created considering the quality standards. During the creation of quality models, the most suitable characteristics are selected for the content of the software. Subsequently, the required numerical values for measuring the characteristics are collected. The quality models created are of great importance in terms of the rate at which the expectations of technical persons, customers and users involved in the software development process can be met.
Software maintainability is defined as the necessary effort for addition of new features to the software system and elimination of defects. Measuring software maintainability is of vital importance for improving software product quality. Using a software quality model in the development life cycle, the quality of the system can be continuously evaluated and improved to reduce the maintenance cost. According to ISO/IEC 25010 Software Quality Models Standard, the maintainability characteristic of software product quality is composed of five sub characteristics; modularity, modifiability, reusability, analyzability and testability In our proposed model, we consider reusability and modifiability characteristics, because they are main factors that affect the maintenance cost. Reusability is defined as the degree to which a software component can be used in more than one system or in implementing other software components. Modifiability is expressed as the degree to which a software system can be efficiently modified without introducing defects or degrading existing product quality [1]. This paper proposes a quality measurement model to evaluate the maintainability of software classes in terms of their reusability and modifiability characteristics in large-scale software systems. The model is based on software properties that are strongly related to reusability and modifiability, such as size, complexity, cohesion, coupling, and inheritance.
Software developers need to know which classes can be reused at different stages of the systems or in other projects. Similarly, they need to know the cost of modifying classes for adding new features, refactoring or bug fixing. In our hierarchical model, to measure reusability and modifiability we use properties of object-oriented systems such as size, cohesion, coupling, complexity, and inheritance. We assigned software code metrics for each property. The metrics can be easily from programs obtained and using their values the maintainability of a system can be measured and enhanced.
In our study, the proposed model first categorizes metric values of software classes in the test system as low, medium and high.  This categorization is done based on the average and median values for these metrics that are obtained from reference software systems. Then, the proposed measurement method uses the levels of the metrics to calculate the reusability and modifiability scores of each class in the system. The scores fall in one of the five categories; very low, low, medium, high, and very high. The developers of the software system can examine classes with low and very low scores and then refactor them if necessary. This continuous evaluation and refactoring during the development can increase the quality of the system and reduce maintenance costs. 
During project-based evaluation, the project was interpreted according to sub-characteristics. At this stage it is aimed at project stakeholders to have an idea of the proportion of the project that meets the quality criteria. Customers can take advantage of the category values resulting from the model to evaluate the projects they want to buy. For example, a customer who wants to reuse a software in different projects may have an idea about the project by looking at the reusability category values of the project. Customers who want to purchase software projects that require frequent updates in a similar way can evaluate the project based on the category values of modifiability. Software project managers and developers can make assumptions by looking at the model's results during the calculation of the project's maintenance period. 
During class-based evaluation, the maintainability characteristic of each class of the project have been examined in terms of reusability and modifiability. It is intended that evaluation of the reusability characteristic leads to software developers on the reusability of all classes in software projects. It is also aimed to evaluate the modifiability characteristic and to guide the characteristics that should be improved during the change of a software class.
We applied our model on two large-scale industrial mobile applications and discussed the results with the development teams of the systems. We saw that our approach could reasonably grade classes on their reusability and modifiability characteristics. Consequently, our model shows that object-oriented metrics can effectively be used as predictors to evaluate maintainability of software systems. Our model results provide different advantages in the software development phase. It generally helps to determine software class quality in terms of their maintainability level. Software developers can focus on software classes that have low quality. Moreover, the model gives information about reasons for their low or high quality levels, such as cohesion, coupling etc. Hence, developers can easily refactor classes to increase their quality level and significantly reduce the maintenance cost of the system.
The most critical and difficult part of the software development phases is undoubtedly maintenance phase. The fact that software developers are adequately knowledgeable about quality software, develop their software in accordance with certain quality criteria as well as the maintenance process to be properly planned will be very useful in terms of the correct use of quality models. Because it is not possible to correctly interpret quality models for project stakeholders who have without adequate knowledge and experience in a maintenance process.
In the future, it is planned to examine the modularity, analyticity and testability sub-characteristics of ISO / IEC 25010: 2011 for evaluating the ease of maintenance of the software. Thus, it is aimed to evaluate the software from different aspects for test-driven development, which is becoming popular nowadays.