Transcript mudge

Automated Software
Maintainability through
by Eric Learning
Mudge
Machine
Software Maintainability
IEEE Definition - “Software maintenance is the process of
modifying a software system or component after delivery to
correct faults, improve performances or other attributes, or
adapt to a changed environment."
Expensive - 77-78% of current software engineers are doing a
defined maintenance task. "THE ECONOMICS OF SOFTWARE MAINTENANCE IN THE TWENTY
FIRST CENTURY" by Capers Jones
Motivation
Current software maintenance done by hand.
- Code Review
- Pair Programming
- Metrics Testing and Quality Review
Goal is to reduce man hours spent on software
maintenance
More time on new products
More job excitement
More Profits
Previous Work
Most work takes the form of predicting future costs :
Empirically Guided Software Development Using Metric-Based Classification Trees
(1990)
by A Porter, R Selby
Machine learning approaches to estimating software development effort (1995)
Srinivasan, K. Fisher, D.
Software cost estimation using an Albus perceptron (1998)
by Bill Samson, David Ellison and Pat Dugard
Using Machine Learning to Predict Project Effort: Empirical
Case Studies in Data-Starved Domains (2001)
by Gary D. Boetticher
Metrics
McCabes Cyclometric Complexity
- Measures predicate depth
Halsteads Measures of Volume and Effort
- Dependent on number of unique operands/operators and
total numbers of operands/operators
Maintainability Index
- Kurt Welker, Paul Oman, and Gerald Atkinson
- Combination of Total LOC, McCabe, Halstead,
(Comments)
- Gives Reliable Maintenance Metric
Search Based Software Engineering
Use of genetic programming, and other search based
techniques to solve software engineering problems
Applied to other problems such as architecture design, and
designing of test data
Next step in software engineering
Proposed Approach
Use Genetic Programming and the maintainability metric as a
fitness function in order to automatically increase the
maintainability of code
Begin on a functional level using procedural metrics rather than
object oriented metrics
Next step would be to improve system level, including
refactoring
Practicalities
Utilize Resource Standard Metrics software
Necessary to be able to modify code such that functional
outputs remain constant
Use opensource or commercial Genetic Programing packages
Prompt areas in code for comments based on complexity of
specific sections
Achieve real maintenance improvements rather than numerical
improvements
Evaluation
Direct increase in the maintainability index will be the goal
Human evaluation of whether software has actually become
more maintainable
Method for Completion
1) Figure out intricacies of genetic programming
2) Merge Genetic Programming with metrics software as fitness
function
3) Test on software, tweak GP to increase performance
4) Profit.
QUESTIONS?!