17 research outputs found
Code Cognitive Complexity: A New Measure
Abstract-There are different facets of software complexity, some of which have been computed using widely accepted metrics like cyclomatic complexity, data/information flow metrics, but very less attempts have been made to measure the cognitive aspect of the complexity. The human mind's efforts needed for the comprehension of the source code reflect a different dimension of complexity, which is being measured in this paper. There are two aspects of the readability of the source code. One of these is spatial aspect and the other is architectural aspect. This paper is an attempt to measure the cognitive complexity of the source code, by integrating the spatial distances, impact of control statements, and effect of input & output parameters. The proposed metric is evaluated against 5 different programs and also compared with standalone metrics to prove its usefulness
Differential Search Algorithm for Multiobjective Problems
AbstractIn this paper, a novel Differential Search Algorithm (DSA) approach is proposed to solve multiobjective optimization problems, called Multiobjective Differential Search Algorithm (MODSA). MODSA utilizes the concept of Pareto dominance to determine the direction of a super-organism and it maintains non-dominated solutions in the external repository. This approach also uses the external repository of super-organisms that is used to guide other super-organisms. It guides the artificial organisms to search towards non-crowding and external regions of Pareto front. The performance of proposed approach is evaluated against the other well-known multiobjective optimization algorithms over a set of multiobjective benchmark test functions. Experimental results reveal that the MODSA outperforms the other competitive algorithms for benchmark test functions
Improving package structure of object-oriented software using multi-objective optimization and weighted class connections
The software maintenance activities performed without following the original design decisions about the package structure usually deteriorate the quality of software modularization, leading to decay of the quality of the system. One of the main reasons for such structural deterioration is inappropriate grouping of source code classes in software packages. To improve such grouping/modular-structure, previous researchers formulated the software remodularization problem as an optimization problem and solved it using search-based meta-heuristic techniques. These optimization approaches aimed at improving the quality metrics values of the structure without considering the original package design decisions, often resulting into a totally new software modularization. The entirely changed software modularization becomes costly to realize as well as difficult to understand for the developers/maintainers. To alleviate this issue, we propose a multi-objective optimization approach to improve the modularization quality of an object-oriented system with minimum possible movement of classes between existing packages of original software modularization. The optimization is performed using NSGA-II, a widely-accepted multi-objective evolutionary algorithm. In order to ensure minimum modification of original package structure, a new approach of computing class relations using weighted strengths has been proposed here. The weights of relations among different classes are computed on the basis of the original package structure. A new objective function has been formulated using these weighted class relations. This objective function drives the optimization process toward better modularization quality simultaneously ensuring preservation of original structure. To evaluate the results of the proposed approach, a series of experiments are conducted over four real-worlds and two random software applications. The experimental results clearly indicate the effectiveness of our approach in improving the modularization quality of existing package structure by doing very small movement of classes between packages of original software modularization
Clustering for Software Remodularization by Using Structural, Conceptual and Evolutionary
During various phases of software development lifecycle, the internal structure of the software degrades which finally results in increased maintenance efforts and hence cost. One quick solution to this problem is software remodularization in which restructuring of different software elements such as classes/ packages/ methods is done (without changing their original meaning and functionality). Several researchers have proposed different techniques for software remodularization. Each technique considers two points of view: dependency measurement among software elements (based on structural, conceptual and/or change history based relations) and performing clustering using different algorithms. So, in this paper, first of all, an empirical evaluation is carried out in order to test the role of different dependency relations in modeling dependency among different software elements. From an empirical evaluation, it is observed that the change history of a software system plays a major role in modeling dependency relations and hence must be used along with other relations for more accurate measures. Then, a new weighted dependency measurement scheme is proposed by combining structural, conceptual and change history based relations among software elements together, with more importance to evolutionary dependency relations. Finally, different dependency schemes are evaluated with six clustering algorithms by applying them to four standard open source Java software of variable sizes and belonging to different domains. The obtained results show that our proposed approach is capable of accurately determining dependence relations among various software elements as compared to other similar approaches present in literature and thus increases restructuring accuracy
Sensitivity Analysis of Evolutionary Algorithm for Software Reusability
Fast and competitive software industry demands rapid development using Component Based Software Development (CBSD). CBSD is dependent on the availability of the high-quality reusable component libraries. Recently, evolutionary multi-objective optimization algorithms have been used to identify sets of reusable software components from the source-code of Object Oriented (OO) software, using different quality indicators (e.g. cohesion, coupling, etc.). Sometimes, these used quality indicators are quite sensitive towards the small variations in their values, although they should not be. Therefore, this paper analyzes the sensitivity of the evolutionary technique for three quality indicators used during the identification: Frequent Usage Pattern (FUP), Semantic and evolutionary coupling. The sensitivity analysis is performed on three widely used open-source OO software. The experimentation is performed by mutating the system to different degrees. Results of the empirical analysis indicate that the semantic parameter is most sensitive and important. Ignoring this feature highly degrades the quality; FUP relation is uniformly sensitive and evolutionary relations's sensitivity is non-uniform
Effect of Harmony Search Parameters’ Variation in Clustering
AbstractHarmony search (HS) is a relatively new meta-heuristic optimization method, which is based on the concept of music improvisation. This paper depicts the impact of constant parameters such as Harmony Memory Consideration Rate and Pitch Adjusting Rate, and presents an approach for parameter tuning. It presents modifications in existing harmony search, by choosing appropriate values of these two parameters and allows them to change dynamically during the process of improvisation. The proposed algorithm has been evaluated for data clustering on five benchmark datasets. The clustering performance of proposed algorithm is compared with K-Means, Genetic algorithm, HS and improved version of HS. Experimental results reveal that proposed algorithm provides better results than the above said techniques in terms of precision, recall, G-Measure, inter-cluster and intra-cluster distance