Software Evolution (WK7) Flashcards
Name some examples of where software changes come from
- when software gets used
- errors
- business environment changes
- new hardware added
- need to improve performance/reliability
- changes in laws
What are Lehmans laws? Applied to all systems as they evolve
Continuing change: A program must change or it risks becoming progressively less useful in that environment.
Increasing complexity: As a program changes, its structure tend to become more complex - extra resources must be applied to stopping this.
Large program evolution: program evolution is a self-regulating process
Organisational stability: over a programs lifetime, its rate of development is approximately constant
Why is software evolution important?
- Software systems are critical business assets and to maintain value, they must be changed and updated
- majority of budget of software is for change and evolution
Ways of implementing evolution in agile methodology
- log changes to change tracker/backlog
- eliminate need for approvals as much as possible
- have a light change control form
- keep stakeholders and operations involved
What are the four sections in the spiral model
Specification, implementation, validation, operation
What is the difference between evolution and servicing/maintenance?
Servicing/maintenance is concerned with just keeping the software functional, adding no new changes. Evolution is when new changes are being added in. Servicing often comes before phase-out.
What are the 3 types of software maintenance?
Fault repairs: changing a system to fix bugs/vulnerabilities (24%)
Environmental Adaptation: adapting software to different operating environment (19%)
Functionality Addition/Modification: modifying the system to satisfy new requirements (58%)
Describe some of the costs of maintenance
- Maintenance costs usually greater than development costs
- both technical and non technical factors
- increases as software is maintained
- ageing software can have high support costs
- usually more expensive to add new features during maintenance
Things to look at when predicting maintenance and change
Maintenance: parts of the system will be most expensive, short and long term costs
Change: system interfaces, volatile system requirements, business processes used by the system
What is software re-engineering?
Restructuring or rewriting without changing functionality. Helps make code more easily maintainable/better documented/ etc. Would re-engineer when the project faces major issues.
Examples: port to a new platform, migrate to fortran 955, translate to C.
What is software refactoring?
Making improvements to program to slow down degradation (preventative maintenance). Involves modifying a program to improve its structure, reduce complexity, or make it easier to understand. Does not add new functionality.
Examples: removing dead code, renaming variables, modularising the program, eliminating common code blocks, etc.
Advantages of re-engineering
- reduced risk (less need to do completely new software development)
- reduced cost (long term)
BUT - high cost in short term
What are 4 main re-engineering process activities
- source code translation to a new language
- reverse-engineering (analysing program to understand it)
- program modularisation/structure improvement
- data re-engineering (cleanup and restructure data (format) that the system operated on
Anti-patterns
Anti-patterns are code that looks like it should follow a pattern but does not - code smells. Bad smells are things like: duplicate code, along methods
Its a good idea to seperate out things that change from those that don’t
- program to an interface not an implementation
- use composition and delegation over inheritance