Software engineering crisis Flashcards
What makes software complex?
- There are many platforms to consider
- Many types of model to choose from (standalone, client-server, peer to peer)
- It solves hard problems (that may use NNs or AI)
- it can be large (consist of thousands of lines of code)
What are the two types of failure classifications?
- Catastrophic (rare) in terms of cost, lives lost
- Chronic failures (more common)
What are examples of chronic failures?
- Project overruns
- Functionality problems
- Poor performance
- Low quality code
- Poorly structured code
Why would we not want to use generative AI to write software?
It writes code that isn’t reliable or correct.
What are the 3 types of project resolutions in the Standish Chaos report?
Type 1: Successful: project was completed on time and on budget with all features/requirements
Type 2: Challenged: project completed/operational but over time estimate or over budget and offers less functionality than originally promised
Type 3: impaired: project is cancelled
What was the most frequent issue that led to projects being considered challenged or incomplete?
Project objectives were not specified correctly: 51% of failings
What needs to be true about an estimation for how long a project is going to take to complete, when considering if a project failed because it didn’t meet this estimation?
The estimation needs to be realistic in the first place. If it was ridiculously underestimated in the first place, it couldn’t be achieved anyway so it’s not really a failure to have not achieved it.
What was a criticism about the standish chaos report’s data on the number of incomplete projects?
The standish chaos report didn’t publish their data so their claim couldn’t be fact checked
What was a criticism about the standish chaos report definition of an incomplete project?
The standish chaos report declared success as relative to the original estimation
What are the formulas for measuring failure in terms of time and functionality?
- forecast / actual < 1 (didn’t achieve in time given) e.g. 6/8 = 0.75 < 1
- forecast / actual > 1 (didn’t achieve as much as was planned) e.g 10/5 = 2
What is the first problem with the classification of projects that the standish report uses?
The classification is incomplete, some projects don’t fit any of the criteria’s for project outcomes
What is the problem with the standish chaos report’s f/a ratio methodology?
- projects that are successful have a forcast/actual >= 1 time and forcast/actual <= 1 functionality
- however this is dependent on the estimates that were made in the first place
- which may be over or under estimates
What was the interesting point that was found by the rise and fall of the chaos report about the first organisation?
They had a high forecast accuracy yet only achieved a 59% success rate
What was the interesting point that was found by the rise and fall of the chaos report about the second organisation?
The company admitted they used the standish criteria to determine if a project was successful so consequently increased resources when forecasting to achieve a higher success rate.
- Their bias was larger, so accuracy was less but they achieved a higher success rate
What was the interesting point that was found by the rise and fall of the chaos report about the third organisation?
- They had good performance for forecasting with an institutional bias to produce low time forecasts. So they had a low success rate, based on their bias.
What does the rise and fall of the chaos reports case study of 3 organisations show us?
That the raw f/a ratio is a poor judge of project success and organisations following that criteria often bias their forecasts to achieve better success rates.
Why is software engineering hard?
- it is limited (by time, money, requirements)
- it is constrained by hardware, designs and use
- it can become obsolete very quickly
- it solves complex problems
What is inherent complexity?
- Complexity that naturally arises from the problem domain itself.
- It’s unavoidable difficulty that comes with solving that particular problem, no matter what tools or methods you use
What is accidental complexity?
- complexity that arises from the solution, tools or technology being used to solve the problem, rather than the problem itself.
- developers introduce this complexity inadvertently
What are the 4 essential difficulties of software development defined in the “No Silver Bullet: Essence and Accidents of Software Engineering” paper ?
- Complexity
- Conformity
- Changeability
- Invisibility
Describe complexity as one of the essential difficulties of software development defined in the “No Silver Bullet: Essence and Accidents of Software Engineering”:
- Software systems are complex due to their size, they have many states.
- When scaling up problems, complexity increases much more than linearly
- Both technical and management problems arise from complexity of software engineering
Describe conformity as one of the essential difficulties of software development defined in the “No Silver Bullet: Essence and Accidents of Software Engineering”:
- difficulty is added as software must conform to many different institutions, systems and standards
Describe changeability as one of the essential difficulties of software development defined in the “No Silver Bullet: Essence and Accidents of Software Engineering”:
- Software is constantly subjected to the pressure of change
- after release, it may still need to change to conform with new standards
- changes in hardware can force software to need to be updated
- users frequently demand new functionality for the software
Describe invisibility as one of the essential difficulties of software development defined in the “No Silver Bullet: Essence and Accidents of Software Engineering”:
- Software is hard to visualise, so contradictions and omissions are more likely to occur.
- design of software is hard as it doesn’t usually fit into one type of diagram, it becomes multiple types of diagrams
How can accidental complexity be avoided?
- By coding your software well: having strict data types that catch errors, good code structure and abstraction
- using high level languages
- By testing and refactoring: use CASE
What are considered some Silver Bullets by brookes?
- Better high level languages (reduce accidental complexity)
- Object oriented programming (improves code reuse, encapsulation - improves testing, error messages improves debugging)
- AI
- Expert systems
- Automatic programming
- graphical programming
- program verification
- environment and tools
From brookes no silver bullets paper, describe how OOP can enhance software development?
- Advances in OOP can eliminate a certain amount of complexity from accidental difficulties
- improves design of the solution
How can programming verification help software development?
- It can reduce testing load
How can environment and tools help software development?
It can increase productivity, and offer strong debugging tools that improve code quality