Software Engineering and Architecture
TSM_SoftwEngweek 1 to week 7 (technical aspects)
TSM_SoftwEngweek 1 to week 7 (technical aspects)
Kartei Details
Karten | 116 |
---|---|
Sprache | English |
Kategorie | Informatik |
Stufe | Universität |
Erstellt / Aktualisiert | 15.09.2020 / 16.01.2021 |
Weblink |
https://card2brain.ch/box/20200915_software_engineering_and_architecture
|
Einbinden |
<iframe src="https://card2brain.ch/box/20200915_software_engineering_and_architecture/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>
|
What percentage of resources is spent on initial software development compared to their maintanace?
- 25% Initial Development
- 75% Maintanance
Maintanance typically claims 40-80% of all project costs, usually toward the higher end (Barry Boehm)
Give a short summary of the history of Software Evolution:
- 1968: First conference on Software engineering, organized by the NATO Science Committee, with the goal to establish sound engineering principles in order to obtain reliable, efficient and economically viable software.
- 1970: Royce proposes the waterfall life-cycle process for software development. Mantenance is seen as the final phase of the software lifecycle ( with only bug fixes and minor adjustments). did not account for the need to add funcionality due to new and changed requirements. The model had a strong and long influence on the industrial practice of software development.
- Late 1970's: First atempt toward a more evolutionary process model. Identification of new activitiesm, such as impact analysis and change propagatino. In the sam eperiod, formulation of "Laws of software evolution" by Lehman
- 1990's: General acceptance evolution, formalization and development of evolutionary processes (Gilb's evolutionary development, boehm's spiral model, Bennet and Rajichs' staged model, agile approaches).
Software evolution is a crucial ingredient of agile software development (iterative and incremental development, embracing change!)
Describe the to dimensions of Software Evolution:
- What and Why? Software evolution as a scientific discipline which studies the nature of the sotware evolution phenomenon to understand its driving factors. Keiy interests include the formulation and refinement of fundamental theories and laws of software evolution.
- How? Software evolution as an engineering discipline which studies more pragmatic aspects that aid software developers and project managers in their day-tp-day tasks. Key interests include the development and validation of tools and techniques to guide, implement and control software evolution.
What are the two main activiteis of software evolution?
- Reverse Engineering
- Re-engineering
What is Reverse Engineering about?
Activity needed when trying to understand the architecture of behavior of a large software system, when the only reliable information is the source code.
Aims at building higher-level, more abstract, software models from the source code.
What is re-engineering about?
Activity needed when trying to re-structure a legacy system. In other words, systems that are still valuable, but are difficult to maintain.
Aims at producing a new system that is more evolvable.
Name the classification and their meaning of software maintenance activities:
- Corrective - errors need to be fixed
- Preventive - prevent problems in the future
- Adaptive - something has changed in the future (fix design issues)
- Adaptive - something has changed in the environment
- Perfective - improve system qualities e.g. performance
What is meant by Software aging?
"Programs, like people, get old. We can't prevent aging, but we can understand its causes, take steps to limit its effescts, temprarily reverse some of the damage it has caused, and prepare for the day then the software is no longer viable."
Thus changing software is inevitable!
Explain the Causes of Software Aging:
- Lack of movement
- Caused by the failure of the product's owners to modify it to meet changing needs
- Unless software is frequently updated, its users will become dissatisfied and they will change to a new product as soon as the benefits outweigh the costs of retraining and converting
- Ignorant Surgery
- Caused by the changes that are made to software
- Changes made by people who do not understand the original design concept almost always cause the structure of the program to degrade
- Software that has been repeatedly modified in this way becomes very expensive to update
Explain the costs of software aging:
The symptoms of software aging mirror those of human aging:
- Owners of aging software find it incresingliy hard to keep up with the market and lose customers to newer products
- Aging software often degrades in its performance as a result of a gradually deteriorating structure
- Aging software often becomes 'buggy' becuase of errors introduced when changes are made
How can the costs of sofware aging be reduced?
- Preventive medicine
- What can we do to delay the decay and limit its effects?
- Design for change
- Code for change
- Keep reors - documentation
- Second opinion - reviews
- Software geriatrics
- What can we do to treat software aging that has already occurred?
- Stopping the deterioration (Verschlechterung)
- Retroactive (rückwirkende) documentation
- Retroactive invremental modularization
- Amputation
- Major surgery - restructuring
What is the difference between Software maintenance and software evolution?
- Maintenance: The activities of changing the system after it has been delivered
- Evolution: The process of continuous software change from the very beginning
- Development activites + Maintenance activities + Reengineeering activities
Why is Software Evolution that important?
- Organizations have huge investments in their software systems - they are critical business assets
- to maintain the value of these assets to the business, they must be changed and updated
- The majority of the software udget in large companies is devoted to evolving existing software rather than developing new software
- Studies indicate that up to 75% of all software professionals are involved in some form of maintenance/evolution activity
Explain Lehman's 'Laws' of software evolution:
- Proposes a theoretical model to reason aout software systems and their interaction with the socio-economic environment
- Maintenance is costly, but maintenance is not only about bug fixing!
- Propose a classification of software: S-Programs, P-Programs and E-Programs
- Condusts quantitative studies on large scale industial projects (collect metrics)
- Derives 'Laws of Evolution' that are generally applicable
Name Lehaman's program classification and their meaning:
- S-Programs: Programs that can be completely and formally specified
- e.g. program that sorts an arry
- P-Programs: Programs that can be completely specified, but which makes an approximation of the real world
- e.g. a program that plays chess against a human player
- E-Programs: Programs that mechanize a human or scietal activity. The program becomes a part of the world it models
- e.g. an ERP system
Name Lehman's 'Laws of Software Evolution':
- Continuing Change
A Program that is used and that as an implementation of its specification reflects some other reality, undergoes continual change or becomes progressively less useful. The change or Decay process contunues until it is judged more coste effective to replace the system with a recreted version.- Software systems have to evolve, otherwise they gradually become useless
- Increasing Complexity
As an evolving program is continually changed, its complexity, reflecting deteriorating structure, increases unless work is done to maintain or reduce it- If you dont take specific actions, software will become more complex and more difficult to adapt.
- The Fundamental Law of Program Evolution
Program evolution is subject to a dynamics which makes the programming porcess, and hence measures of global project an system attributes, self-ragulating with statistically determinable trends and invariances - Conservations of Organizational Stability
During the active life of a program the global activity rate in a programming project is statistically invariant - Conservation of Familiarity
During the active life of a program the release content (changes, additions, deletions) of the successive releases of an evolving program is statistically invariant
Explain the Initial development stage of the software evolution roadmap:
- Research Challenge: Find ways of developing software, so that it can be changed more easily and reliably in subsequent phases
- Two key outcomes of this phase:
- Architecture an
- Team Knowledge
Explain the evolution stage of the software evolution roadmap:
- Goal: Implement possibly major changes without being able a priori to predict how user requirements will evolve
- Research challenge: program comprehension: We need tools to understand the impact of changes, to display the program strucure, to do regression testing. We also need tools for configuration management and version control of large distributed systems
- Management issue: keep original architects and designers in the team - or risk to move into the servicing stage quickly
Explain the servicing stage of the software evolution roadmap:
- Goal: implement tactical changes, at minimum cost
- Big change in terms of project management: only minor corrections/enhancements should be done, senior staff member are no longer required, accurate cost prediction is needed. It is possible to outsource the servicing (how do we define SLAs?)
- Reserach Challenge: program comprehension. we need tools to understand the impact of changes, to display the program structure, to do regression testing. We also need tools for configuration management and version control of large distributed systems.
How are legacy systems related to software evolution and what does it mean?
- If we talk about software evolution, we also talk about legacy systems
- Legacy systems: Old computer-based systems, ehich are still in use by organizations
- Many of them still business critical
- Incorporate many changes made over the years
- many people have been involved in these changes
- Replacing legacy systems with new systems is resky, yet keeping them means new changes become more and more expensive
--> THEY HAVE TO BE MAINTAINED
Which two complementary techniques are employed to support the continued evolution of legacy systems?
Reverse engineering and
Reengineering
What are typical Characteristics of a legacy software?
- Hardware - may be obsolete mainframe hardware
- Support software - may rely on support software from suppliers who are no longer in business
- Applicatoin software - may be written in obsolete programming languages
- Applicatoin data - often incomplete and inconsistent
- Business processes - may be contrained by software structure and functionality
- Business policies and rules - may be implicit and embedded in the system software
Why might it be difficult/risky to change a legacy system?
- Risks of replacing
- Specification is difficult because ecisting documentation is typically incomplete
- changing business processes may entail high costss
- Undocumented, yet importand business rules may be embedded in the system; a new system may break these rules
- The new system may be delivered late, may cost more than expected, and may not function properly
Which factors make changes to legacy systems expensive?
- In large systems, different parts were implemented by different teams, without consistent programming style
- It is difficult to find personnel who knows the obsolete programming languages used in old systems
- In many cases the only documentation is provided by the source code; even this may be missing
- It is difficult to understand the system given its ad hoc updating over the years
- Data used b the system is diffficult to understand and manipulate; it can also be obsolete and/or redundant
What is forward engineering about?
Traditional process of moving from high-level abstractions and logical, implementation-independent designs to the physical iimplementation of a system.
With which techniques can you deal with software evolution?
- Program comprehension: Understand the existing program in order to change it
- Change impact analysis: Identification of the parts of the system that will be affected by a proposed change
- Change propagation: Making sure that all affected parts are changed correctly
- Restructuring/Refactoring: Improving the software structure or architecture without changing the behavior
- Regression testing: Efficiently verifying that the change preserved the behavior of functionalities that should not be impacted
- Program transformation: One or multiple modifications applied to a program
Name some typical methos and tools for program comprehension (understanding an existing program in order to change it):
- Typical Methods
- Source code analysis
- Metrics
- Visualizatoin tools
- Runtime analysis
- Design and architecture analysis
- Tools
- Sotograph
- Metric
- Checkstyle
- CodeCrawler
- Sonar
Give a defintion of the change impact analysis in software evolution:
- Activity by which the programmers asses the extent of a change, i.e., the compnents that will be impacted by the change
- Change impact analysis indicates how costly the change is going to be and whether it is to be undertaken at all
Which two main scenarios are distinguished in program transformation in software evolution?
- Translations
- Where the source and target language are defferent
- Program Migration, Reverse Engineering, ...
- Reprasings
- Whre the source and target language are the same
- Reengineering, Refactoring, ...
Why would you want to analyze software?
- Engineering
- Constant control quality of on-going work
- Legacy Code / Re-Engineering
- Determine quality of given work
If you analyze software, what would you want to analyze?
Code
Design and
Architecture
What means software analysis?
- Provide concrete figures about software qualitiy
- Metric Numbers
- Provide graphical view on software quality
- Visualization
What are some typical merics in software analysis?
- Size Metrics
- Lines of Code (LoC), Number of Classes, Number of Methods of Classes, Halstead-Metric
- Logical Structure Metrics
- Cycomaltic Complexity McCabe
- Data Structure Metrics
- Number of Variables, Duration
- Style Metrics
- Naming Convention, Nesting
- Metrics fr Cohesion and Coupling -> High Cohesion can result in bad coupling
- Fan-In, Fan-Out, Lack-of-Cohesion, Number of called methods
Between which kinds of Software / Code analysis is differentiated?
- Current (typically static) code analysis gives informatin about the current state
- Time analysis provides information about the system evolved over time