Software Engineering

Prof. Dr. Mirco Schoenfeld

software crisis

The major cause of the software crisis is that the machines have become several orders of magnitude more powerful! To put it quite bluntly: as long as there were no machines, programming was no problem at all; when we had a few weak computers, programming became a mild problem, and now we have gigantic computers, programming has become an equally gigantic problem.

Edsger Dijkstra, Germany, 1972

computers in 1972

https://becker.wustl.edu/news/groundbreaking-us-china-computer-science-learning-exchange-expedition-1972/

software crisis

Back to the software crisis.

  1. Projects running over-budget
  2. Projects running over-time
  3. Software was very inefficient
  4. Software was of low quality
  5. Software often did not meet requirements
  6. Projects were unmanageable and code difficult to maintain
  7. Software was never delivered

the issue

Large software development projects generally require a team.

https://xkcd.com/2021/

small scale problem

Imagine building a house.

That involves architects, carpenters, plumbers, electricians, construction workers, etc.

large scale problem

How about a larger office building?

Extensive requirements specification, design and planning phases, cost estimations, safety requirements, etc.

a study

Study showed: 68 percent of IT projects fail. (Krigsman 2009)

Solid requirements planning establishes a clear connection between the business case, project goals, and the project outcome.

the issue

Software development going wrong is often not easy to see.

misconception

Big misconception:

Programming is not Software Engineering!

Successful software development

Successful software development requires a plan!

  1. Requirements specification (listen to the customer)
  2. Software Design (listen to the developers, organization)
  3. Implementation
  4. Testing
  5. Documentation

general aim

Aim of Software Engineering:

Find repeatable, predictable processes that
improve productivity and quality.

Software development processes

Some try to systematize or formalize the seemingly unruly task of designing software.

Others apply project management techniques to designing software.

old world

The old world:

  • Requirements gathering
  • Planning and design
  • Development
  • Testing and quality assurance
  • Deployment
  • Maintenance and support

Waterfall

The waterfall model

(Sommerville 2011)

Waterfall

The waterfall model:

  • dates back to 1970
  • strict sequential procedure
  • early commitments, yet no change allowed
  • errors appear very late in the process.

Spiral Model

(Boehm 1988; Sommerville 2011)

Spiral Model

The Spiral model:

  • Main aim: minimizing risk
  • iterative risk analysis
  • incremental

the old world

The old world (summarized)

(Sommerville 2011)

the new world

The new world

(Sommerville 2011)

Agile Development

We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:

Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan

(Beck et al. 2001)

Agile Development

The values are based on these principles:

  1. Customer satisfaction by early and continuous delivery of valuable software.
  2. Welcome changing requirements, even in late development.
  3. Deliver working software frequently (weeks rather than months).
  4. Close, daily cooperation between business people and developers.
  5. Projects are built around motivated individuals, who should be trusted.
  6. Face-to-face conversation is the best form of communication (co-location).

Agile Development

  1. Working software is the primary measure of progress.
  2. Sustainable development, able to maintain a constant pace.
  3. Continuous attention to technical excellence and good design.
  4. Simplicity - the art of maximizing the amount of work not done - is essential.
  5. Best architectures, requirements, and designs emerge from self-organizing teams.
  6. Regularly, the team reflects on how to become more effective, and adjusts accordingly.

Agile Methods

Agile Development is brought to life
by agile methods, or agile practices

  • incremental and continuous delivery
  • customer involvement
  • people not process
  • embrace change
  • maintain simplicity

Agile Methods

Agile methods are most suitable for projects

  • with rapidly changing requirements
  • where working software needs to be delivered quickly
  • in which customers can be involved

Agile Methods

A bunch of methods exist

  • adaptive software development
  • dynamic systems development method
  • extreme programming
  • feature-driven development
  • lean software development
  • kanban
  • scrum

Agile practices

And a bunch of practices exist as well

  • backlogs
  • cross-functional team
  • daily stand-up
  • pair programming
  • scrum events
  • story-driven modeling
  • user stories

Extreme Programming

Best known and most widely used of the agile methods.

(Beck 1999)

Extreme?

Push iterative development to extreme levels:

For example, in XP, several new versions of a system may be developed by different programmers, integrated and tested in a day. (Sommerville 2011)

XP release cycle

Extreme Programming Release Cycle

(Sommerville 2011)

XP implementation

Extreme Programmings implementation of the agile mindset:

 

  1. Incremental Development:
  • small, frequent releases
  • requirements based on user stories
  • user stories decide what functionality is implemented

XP implementation

Extreme Programmings implementation of the agile mindset:

 

  1. Customer Involvement:
  • continuous engagement of customer in dev. team
  • customer takes part in development
  • customer is responsible for defining acceptance tests

XP implementation

Extreme Programmings implementation of the agile mindset:

 

  1. People, not process:
  • pair programming
  • collective ownership of system code
  • sustainable process, no excessively long working hours

XP implementation

Extreme Programmings implementation of the agile mindset:

 

  1. Embrace change:            
  • regular system releases to customers
  • test-first development
  • refactoring of code
  • continuous integration

XP implementation

Extreme Programmings implementation of the agile mindset:

 

  1. Maintain simplicity:
  • constant code refactoring to improve code quality
  • simple designs
  • no anticipation of future changes

XP story cards

Story cards are the main input to the XP planning process.

(Sommerville 2011)

XP tasks

Story cards are broken down into tasks, efforts are estimated, and resources are planned.

(Sommerville 2011)

XP tests

In XP, testing is absolutely crucial.

(Sommerville 2011)

Testing in XP

Test-first development is one of the most important innovations in XP.

Testing is required due to extensive code refactoring and shared responsibilities.

Testing in XP

Key features of testing in XP:

  • Test-first development
  • develop tests from scenarios
  • involve users/customers in test development and validation
  • use automated testing frameworks

Testing in XP

However, many automated tests not necessarily lead to thoroughly tested software:

  1. Programmers are lazy take shortcuts when writing tests
  2. Some tests can be very difficult to write incrementally
  3. Judging completeness of a set of tests is difficult

Pair programming

Pair programming is the second important innovation in XP.

More about XP

Extreme Programming Summarized:

https://en.wikipedia.org/wiki/Extreme_programming

Agile flavors

Agile development has multiple flavors and combinations of methods & practices.

  • DevOps
  • Lean Software Development
  • Dynamic systems development method (DSDM)
  • Kanban

Issues with agile methods

Agile development is sometimes difficult to realize

  • customers need to be willing to be involved
  • team members have to like intense involvement
  • prioritizing changes can be difficult
  • maintaing simplicity is not easy
  • organizations are sometimes too sluggish

Context-specific conflict of objectives

Scientific principles

Learn from data science and scientific principles (Farley 2021)!

Scientific principles

Continuous delivery is founded upon most durable ideas from science:

  • Characterize: Make an observation of the current state.
  • Hypothesize: Create a description, a theory that may explain your observation.
  • Predict: Make a prediction based on your hypothesis.
  • Experiment: Test your prediction.

(Farley 2021)

general aim

Aim of Software Engineering (revisited):

Find repeatable, predictable processes that
improve productivity and quality.

general aim

So far, we focused on productivity.

What about quality?

Quality in Software

(7 2023)

How good is the software?

A good software fulfils requirements.

There are functional requirements and non-functional requirements.

Non-Functional Requirements

(Sommerville 2011)

Quality is more

Quality is more than that.

Software quality

ISO software quality attributes refer to external and internal quality.

(Yenduri and Gadekallu 2023)

Interdependencies

Interdependencies between quality characteristics goes in two ways

positive interdependence
quality aspects support each other
negative interdependence
quality aspects interfere with each other

Not all quality measurements can be maximized at the same time.

Quality in Software

Quality is the key to product success and customer satisfaction.

Quality is multi-dimensional

Quality in software is hard to measure.

References

7, ISO/IEC JTC 1/SC. 2023. Systems and software engineering – Systems and software Quality Requirements and Evaluation (SQuaRE) – Quality-in-use model.” Standard. Geneva, CH: International Organization for Standardization. https://www.iso.org/standard/78177.html.
Beck, Kent. 1999. Extreme Programming Explained: Embrace Change. addison-wesley professional.
Beck, Kent, Mike Beedle, Arie Van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, et al. 2001. “The Agile Manifesto.” http://agilemanifesto.org/.
Boehm, Barry W. 1988. “A Spiral Model of Software Development and Enhancement.” Computer 21 (5): 61–72.
Farley, David. 2021. Modern Software Engineering: Doing What Works to Build Better Software Faster. Addison-Wesley Professional.
Krigsman, Michael. 2009. “Study: 69 Percent of IT Projects Fail.” https://www.zdnet.com/article/study-68-percent-of-it-projects-fail/.
Sommerville, Ian. 2011. “Software Engineering.” ISBN-10 137035152.
Yenduri, Gokul, and Thippa Reddy Gadekallu. 2023. “A Review on Soft Computing Approaches for Predicting Maintainability of Software: State‐of‐the‐art, Technical Challenges, and Future Directions.” Expert Systems 40 (7). https://doi.org/10.1111/exsy.13250.