Re Sumos
Re Sumos
Bernardo Ramalho
9 January 2021
1
Contents
1 Introduction 7
1.1 What is Software Engineering? . . . . . . . . . . . . . . . . . . 7
1.2 The Software Process . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Why do we need (defined) processes? . . . . . . . . . . . . . . 7
1.3.1 Efficiency . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3.2 Consistency . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3.3 Basis for Improvement . . . . . . . . . . . . . . . . . . 8
1.4 Plan-driven and agile processes . . . . . . . . . . . . . . . . . 8
2 Process Activities 8
2.1 Requirements engineering . . . . . . . . . . . . . . . . . . . . 8
2.2 Software Design and Implementation . . . . . . . . . . . . . . 9
2.3 Software verification and validation . . . . . . . . . . . . . . . 9
2.4 Software evolution (or maintenance) . . . . . . . . . . . . . . . 10
2
5.3.1 The Planning Game . . . . . . . . . . . . . . . . . . . 18
5.3.2 Small Releases . . . . . . . . . . . . . . . . . . . . . . 18
5.3.3 System Metaphor . . . . . . . . . . . . . . . . . . . . . 18
5.3.4 Simple Design . . . . . . . . . . . . . . . . . . . . . . . 18
5.3.5 Test-driven Development . . . . . . . . . . . . . . . . . 19
5.3.6 Refactoring . . . . . . . . . . . . . . . . . . . . . . . . 19
5.3.7 Pair Programming . . . . . . . . . . . . . . . . . . . . 19
5.3.8 Collective Code Ownership . . . . . . . . . . . . . . . . 19
5.3.9 Continuous Integration . . . . . . . . . . . . . . . . . . 20
5.3.10 Sustainable Pace . . . . . . . . . . . . . . . . . . . . . 20
5.3.11 On-Site Customer . . . . . . . . . . . . . . . . . . . . . 20
5.3.12 Coding Standards . . . . . . . . . . . . . . . . . . . . . 20
5.4 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
6 Requirements Engineering 21
6.1 Scope, Importance and Challenges . . . . . . . . . . . . . . . . 21
6.1.1 What is requirements engineering . . . . . . . . . . . . 21
6.1.2 Main problems of RE . . . . . . . . . . . . . . . . . . . 21
6.2 Classification of Software Requirements . . . . . . . . . . . . . 21
6.2.1 Levels of Requirements . . . . . . . . . . . . . . . . . . 21
6.2.2 Types of Requirements . . . . . . . . . . . . . . . . . . 22
6.2.3 ISO/IEC 25010: Product Quality Characteristics . . . 22
6.3 Requirements Engineering in Some Well-Known Processes . . 23
6.3.1 Agile Methods and Requirements . . . . . . . . . . . . 23
6.3.2 User Stories - INVEST . . . . . . . . . . . . . . . . . . 23
6.4 Requirements Engineering Process . . . . . . . . . . . . . . . . 23
6.4.1 Requirements Elicitation(or discovery) . . . . . . . . . 23
6.4.2 Stakeholders . . . . . . . . . . . . . . . . . . . . . . . . 24
6.4.3 Requirements Analysis and Negotiation . . . . . . . . . 24
6.4.4 Requirements Analysis Checklist . . . . . . . . . . . . 25
6.4.5 Requirements Specification . . . . . . . . . . . . . . . . 25
6.4.6 Requirements Validation . . . . . . . . . . . . . . . . . 26
6.5 Requirements Elicitation Techniques . . . . . . . . . . . . . . 26
6.5.1 Interview . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.5.2 Brainstorming . . . . . . . . . . . . . . . . . . . . . . . 26
6.5.3 Questionnaires (surveys) . . . . . . . . . . . . . . . . . 27
6.5.4 Goal Analysis . . . . . . . . . . . . . . . . . . . . . . . 28
6.5.5 Social Observation and Analysis . . . . . . . . . . . . . 28
6.5.6 Prototyping . . . . . . . . . . . . . . . . . . . . . . . . 28
3
7 Use Case Modeling 29
7.1 System Models in Requirements Engineering . . . . . . . . . . 29
7.2 Use Case Diagrams . . . . . . . . . . . . . . . . . . . . . . . . 29
7.3 Actors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
7.4 Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
7.5 Relationships: Generalization . . . . . . . . . . . . . . . . . . 30
7.5.1 Actors . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
7.5.2 Use cases . . . . . . . . . . . . . . . . . . . . . . . . . 30
7.5.3 Extend . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
7.5.4 Include . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
8 User Stories 32
8.1 What Stories Are . . . . . . . . . . . . . . . . . . . . . . . . . 32
8.1.1 What problem do stories address? . . . . . . . . . . . . 32
8.1.2 Balance is Critical . . . . . . . . . . . . . . . . . . . . 32
8.1.3 Resource Allocation . . . . . . . . . . . . . . . . . . . . 32
8.1.4 Imperfect Schedules . . . . . . . . . . . . . . . . . . . . 32
8.1.5 Three Cs . . . . . . . . . . . . . . . . . . . . . . . . . . 33
8.2 Why User Stories . . . . . . . . . . . . . . . . . . . . . . . . . 33
9 Architectural Design 33
9.1 The Role of Software Architecture . . . . . . . . . . . . . . . . 33
9.2 Software Architecture . . . . . . . . . . . . . . . . . . . . . . . 34
9.3 Architectural Knowledge: Reusing . . . . . . . . . . . . . . . . 34
9.4 Architectural Patterns . . . . . . . . . . . . . . . . . . . . . . 34
9.4.1 Model-View-Controller . . . . . . . . . . . . . . . . . . 34
9.4.2 Pipes and Filters (or Data Flow) . . . . . . . . . . . . 34
9.4.3 Layered Architecture . . . . . . . . . . . . . . . . . . . 34
9.4.4 Repository Architecture (data centric . . . . . . . . . . 35
9.5 Typical Outputs of Architectural Design . . . . . . . . . . . . 35
9.6 4+1 View Model of Software Architecture . . . . . . . . . . . 35
9.7 Component Diagrams . . . . . . . . . . . . . . . . . . . . . . . 36
9.7.1 Components . . . . . . . . . . . . . . . . . . . . . . . . 36
9.7.2 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . 36
9.7.3 Dependencies . . . . . . . . . . . . . . . . . . . . . . . 36
9.7.4 Components and Classes . . . . . . . . . . . . . . . . . 37
9.7.5 Components and Artifacts . . . . . . . . . . . . . . . . 37
9.8 Deployment Diagrams . . . . . . . . . . . . . . . . . . . . . . 38
9.8.1 Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
9.8.2 Artifacts . . . . . . . . . . . . . . . . . . . . . . . . . . 39
9.9 Package Diagrams . . . . . . . . . . . . . . . . . . . . . . . . . 39
4
10 Project Management 40
10.1 Controlling Software Projects . . . . . . . . . . . . . . . . . . 40
10.2 The Resource Variable . . . . . . . . . . . . . . . . . . . . . . 40
10.3 The Time Variable . . . . . . . . . . . . . . . . . . . . . . . . 40
10.4 The Scope Variable . . . . . . . . . . . . . . . . . . . . . . . . 40
10.5 Iterative and Incremental . . . . . . . . . . . . . . . . . . . . . 41
10.5.1 Iterative: . . . . . . . . . . . . . . . . . . . . . . . . . . 41
10.5.2 Incremental: . . . . . . . . . . . . . . . . . . . . . . . . 41
10.6 Parallel and Concurrent Activities . . . . . . . . . . . . . . . . 41
10.6.1 Phased Approach: . . . . . . . . . . . . . . . . . . . . . 41
10.6.2 Concurrent and Parallel: . . . . . . . . . . . . . . . . . 41
10.7 Predictive vs Agile Planning . . . . . . . . . . . . . . . . . . . 41
10.7.1 Predictive Planning: . . . . . . . . . . . . . . . . . . . 41
10.7.2 Agile Planning: . . . . . . . . . . . . . . . . . . . . . . 42
10.8 Project Balance in an Agile Process . . . . . . . . . . . . . . . 42
10.8.1 Sustainable Resource Management . . . . . . . . . . . 42
10.8.2 Fixed time management . . . . . . . . . . . . . . . . . 42
10.8.3 Adaptive scope management . . . . . . . . . . . . . . . 42
10.9 Heroic vs Collaborative . . . . . . . . . . . . . . . . . . . . . . 42
10.9.1 Heroic development . . . . . . . . . . . . . . . . . . . . 42
10.9.2 Collaborative development . . . . . . . . . . . . . . . . 42
10.10Management by Facilitation . . . . . . . . . . . . . . . . . . . 43
10.10.1 Traditional “Command and Control Strategy”: . . . . . 43
10.10.2 Replaced by “Facilitation and Empowerment Strategy” 43
10.11Iteration 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
10.12Iterations 1-N . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
10.13Three Types of Iteration Plans . . . . . . . . . . . . . . . . . 44
10.13.1 Complete . . . . . . . . . . . . . . . . . . . . . . . . . 44
10.13.2 Two-iteration plan . . . . . . . . . . . . . . . . . . . . 44
10.13.3 One Iteration . . . . . . . . . . . . . . . . . . . . . . . 44
10.13.4 Best Type of Plan . . . . . . . . . . . . . . . . . . . . 44
10.14Next Iteration Plan . . . . . . . . . . . . . . . . . . . . . . . . 45
10.14.1 Activities . . . . . . . . . . . . . . . . . . . . . . . . . 45
10.14.2 Re-estimation . . . . . . . . . . . . . . . . . . . . . . . 45
10.14.3 Assignment . . . . . . . . . . . . . . . . . . . . . . . . 45
10.15Estimation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
10.15.1 How to estimate by features rather than activity? . . . 45
10.15.2 How to do progressive estimation? . . . . . . . . . . . . 45
10.16Scope Evolution . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5
11 Behaviour-Driven Development (BDD) 46
11.1 Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
11.2 Gherkin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
12 Software Evolution 47
12.1 Software Change . . . . . . . . . . . . . . . . . . . . . . . . . 47
12.2 Importance of Evolution . . . . . . . . . . . . . . . . . . . . . 47
12.3 Evolution and Servicing . . . . . . . . . . . . . . . . . . . . . 48
12.4 Evolution Processes . . . . . . . . . . . . . . . . . . . . . . . . 48
12.4.1 Change Identification and Evolution processes . . . . . 48
12.4.2 The software evolution process . . . . . . . . . . . . . . 48
12.4.3 Change implementation . . . . . . . . . . . . . . . . . 49
12.4.4 Agile Methods and Evolution . . . . . . . . . . . . . . 49
12.4.5 Handover problems . . . . . . . . . . . . . . . . . . . . 49
12.5 Software Maintenance . . . . . . . . . . . . . . . . . . . . . . 49
12.5.1 Definition . . . . . . . . . . . . . . . . . . . . . . . . . 49
12.5.2 Types of Maintenance . . . . . . . . . . . . . . . . . . 50
12.5.3 Re-engineering Process Activities . . . . . . . . . . . . 50
12.6 Key Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6
1 Introduction
1.1 What is Software Engineering?
The application of a systematic, disciplined, quantifiable approach to the
development, operation, and maintenance of software; that is, the application
of engineering to software.
Software engineering is concerned with the cost-effective and timely de-
velopment of high-quality software in a predictable way, particularly for large
scale systems.
1.3.2 Consistency
• Results likely to be similar;
7
1.3.3 Basis for Improvement
• Gathering data on your work helps determine which steps are the most
time consuming, ineffective or troublesome;
2 Process Activities
2.1 Requirements engineering
8
2.2 Software Design and Implementation
9
• Acceptance Testing - The system is tested (under the customer re-
sponsibility) with customer data to check that customer’s needs are
met.
In practice, most large systems are developed using a process that in-
corporates elements from all of these models.
10
3.2 Waterfall
11
next increment. Specification, development and validation may be inter-
leaved. May be plan-driven or agile.
Benefits:
Problems:
12
3.4 Integration and Configuration
Integration and Configuration has reduced costs and risks as less soft-
ware is developed from scratch. It also has faster delivery and deployment
of system. But requirements compromises are inevitable so system may not
meet real needs of users. Another disadvantage is the loss of control over
evolution of reused system elements.
13
• Discriminating the critical use cases of the system, the primary scenar-
ios of operation that will drive the major design trade offs;
• Exhibiting, and maybe demonstrating, at least one candidate architec-
ture against some of the primary scenarios;
• Estimating the overall cost and schedule for the entire project (and
more detailed estimates for the elaboration phase that will immediately
follow);
• Estimating potential risks (the sources of unpredictability;
• Preparing the supporting environment for the project.
14
4.5 Transition Phase
• Executing deployment plans;
15
5 eXtreme Programming (XP)
5.1 Introduction
5.1.1 Agile Methods
Dissatisfaction with the overheads involved in software design methods of
the 1980s and 1990s led to the creation of agile methods. These methods
focus on the code rather than the design, are based on an iterative approach
to software development and are intended to deliver working software quickly
and evolve this quickly to meet changing requirements.
The aim of agile methods is to reduce overheads in the software process
and to be able to respond quickly to changing requirements without
excessive rework.
16
5.1.3 XP motto: Embrace Change
In traditional software life cycle models, the cost of changing a program rises
exponentially over time. A key assumption of XP is that the cost of changing
a program can be hold mostly constant over time.
Hence XP is a lightweight (agile) process:
• Embrace change: iterate often, design and redesign, code and test fre-
quently, keep the customer involved;
5.2 XP Values
5.2.1 Communication
XP emphasizes value of communication (namely face to face communication)
in many of its practices. XP employs a coach whose job is noticing when
people aren’t communicating and reintroduce them.
5.2.2 Simplicity
"Do the simplest thing that could possibly work" (DTSTTCPW) principle,
elsewhere know as KISS (Keep it Simple, Stupid). A coach may say DT-
STTPCW when he sees an XP developer doing something needlessly com-
plicated.
"You ain’t gonna need it" (YAGNI) principle.
5.2.3 Feedback
• Feedback at different time scale;
17
5.2.4 Courage
• The courage to communicate and accept feedback;
5.3 XP Practices
5.3.1 The Planning Game
Customer comes up with a list of desired features. Each feature is written
out as a user story. A user story describes in broad strokes what the feature
requires (typically written in 2-3 sentences on 4x6 story cards).
Developers estimate ’size’ of each story (effort to implement). The total
size done per iteration (= Project Velocity) is important to select the user
stories for each iteration. Given developer estimates the project velocity and
the customer prioritizes which stories to implement.
The customer decides the scope, priorities, release content and deliv-
ery dates. The developers decide the (effort) estimates for each story, the
consequences, the process and the detailed (task) schedule.
It’s a two planning process. Customers and developers decide about
release content (user stories) and date for the next releases (Release plan-
ning). The developers decide about development tasks for the next iteration
(possible iterations per release).
18
5.3.5 Test-driven Development
Test first: before adding a feature, write a test for it. If code has no auto-
mated tests, it’s assumed it doesn’t work. Create tests for bugs discovered,
before fixing them.
Unit tests (or developer tests): testing of small pieces of functionality
as developers write them. Usually for testing single methods, classes or
scenarios. They are usually automated with a unit testing framework, like
JUnit. Experiments show that TDD reduces debugging time.
Acceptance Tests (or customer tests): specified by the customer
to check overall system functioning. A user story is complete when all its
acceptance tests pass. Usually specified as scripts of UI actions and expected
results. Ideally automated with a UT or AT framework, like FIT.
5.3.6 Refactoring
Recently updated to "Design Improvement", refactoring is the act of improv-
ing the structure of the code without changing externally visible behavior.
19
5.3.9 Continuous Integration
All changes are integrated into the code base at least daily as opposed to
"big-bang integration". Tests have to always run before and after integration.
This enables frequent releases.
• Hardly any software is maintained for its whole life by the original
author;
5.4 Conclusions
Extreme programming is a well-known agile method that integrates a range
of good engineering and management practices such as frequent releases
of the software, continuous design improvement and customer participation
in the development team.
20
A particular strength of extreme programming is the development of
automated tests before a program feature is created. All tests must suc-
cessfully execute when an increment is integrated into a system.
6 Requirements Engineering
6.1 Scope, Importance and Challenges
6.1.1 What is requirements engineering
Requirements engineering (RE) is the process of studying customer and user
needs to arrive at a definition of system, hardware, or software require-
ments.
Software Requirement is a property which must be exhibited by soft-
ware developed or adapted to solve a particular problem.
21
(Can be captured in a software requirements specification (SRS) doc-
ument)
22
6.3 Requirements Engineering in Some Well-Known Pro-
cesses
6.3.1 Agile Methods and Requirements
Many agile methods argue that producing detailed system requirements is a
waste of time as requirements change so quickly. Requirements documents
are therefore always out of date.
Agile methods usually use incremental requirements engineering and
may express requirements as user stories. This is practical for business sys-
tems but may be problematic for systems that require pre-delivery analysis
or systems developed by several teams.
• Negotiable;
• Valuable;
• Estimable;
• Testable.
• Interviews;
• Facilitated meetings;
• Questionnarires;
• Goal Analyses;
• (User-Interface) Prototypes;
23
• Scenarios, user stories, use cases (real-life usage examples);
6.4.2 Stakeholders
The stakeholders are people who will be affected by the system and who
have a direct or indirect influence of the elaboration of requirements. Some
example of stakeholders are: customers, end users, managers, people respon-
sible for maintaining the system, clients of the organization that may use the
system, regulatory and certification bodies, etc...
24
6.4.4 Requirements Analysis Checklist
25
6.4.6 Requirements Validation
The goal is to demonstrate that the requirements define the system that the
customer really wants. This is important because requirements error costs
are high so validation is very important. Fixing a requirements error after
delivery may cost up to 100 times the cost of fixing an implementation error.
The techniques used are: requirements reviews and inspections, proto-
typing, acceptance test case generation and model validation.
6.5.2 Brainstorming
Useful to elicit new and innovative requirements. In each requirements brain-
storming sessions there are one moderator (usually a requirements analyst)
and 4-8 people with different/multiple perspectives on the product.
26
There are two phases in brainstorming sessions. The Idea Generation
phase in which participants are encouraged to come up with as many ideas
as possible, without discussion of the merits of the ideas. This phase as some
rules:
• Do not criticize;
The other phase is the Consolidation phase where ideas are discussed,
revised and organized.
27
6.5.4 Goal Analysis
6.5.6 Prototyping
28
7 Use Case Modeling
7.1 System Models in Requirements Engineering
A system model is a simplified representation of a system (as-is or to-be) from
a certain perspective. Models are used in many fields of engineering to tackle
complexity through abstraction. Semi-formal models also help removing the
ambiguity and lack of structure inherent to natural language descriptions.
The following are helpful in requirements engineering:
7.3 Actors
Actors are the user role or external systems. An actor (in relation to a
system) is a role that someone or something of the surrounding environment
plays when interacting with the system. An actor is not an individual since
the same individual can interact with the system in various roles.
29
7.5 Relationships: Generalization
7.5.1 Actors
The specialized use case inherits the behavior, meaning and actors from
the generic use case, and may add behavior. It should be possible to read
"is a (special case of)".
30
7.5.3 Extend
7.5.4 Include
When several use cases share some common behavior, that common
behavior can be separated and described in a new use case which is included
by the first ones. Inclusion is mandatory. In the textual description, write:
include(Electronic payment).
31
8 User Stories
8.1 What Stories Are
8.1.1 What problem do stories address?
32
8.1.5 Three Cs
• Card - stories are traditionally written on note cards. Cards may be
annotated with estimates, notes, etc..
• Conversation - Details behind the story come out during conversa-
tions with product owner.
• Confirmation - Acceptance tests confirm a story was coded correctly.
9 Architectural Design
9.1 The Role of Software Architecture
Software architecture has various roles:
• To control overall system complexity (technological and scale);
• To ensure system integrity;
• To ensure required quality attributes: scalability, interoperability, us-
ability, performance, cost, schedule, modularity, etc...;
• To improve development predictability;
• To establish trade offs that influence system development and future
evolution;
• To ease the collaboration between different development teams;
• The Key Challenge: "to architect and design timeless and (ultra) large-
scale software..".
33
9.2 Software Architecture
Software Architecture is the fundamental organization of a system, embodied
in its components, their relationships to each other and the environment, and
the principles governing its design and evolution.
34
9.4.4 Repository Architecture (data centric
Used for accessing and manipulating shared data by multiple subsystems.
All data in a system is managed in a central repository that is accessible to
all system components or subsystems. Components or subsystems do not
interact directly, only through the repository.
There are two variants: Passive repository, passively accepts requests
from components, Active repository, changes to the repository trigger com-
ponent execution.
• Architectural Views;
• Common Mechanisms;
35
9.7 Component Diagrams
9.7.1 Components
A component represents a modular part of a system that encapsulates its
contents and whose manifestation in replaceable with its environment. Com-
ponents are the central concept in Component-based Software Engi-
neering (CBSE) as units of reuse.
9.7.2 Interfaces
A component defines its behavior in terms of Interfaces provided (or re-
alized), and Interfaces required (or used). Components with the same
interfaces are interchangeable.
9.7.3 Dependencies
To promote interchangeability, components shouldn’t depend directly on
other components but rather on interfaces (that are implemented by other
components).
36
Figure 13: Example of Dependencies.
37
Figure 15: Example of Components and Artifacts.
38
9.8.2 Artifacts
Artifacts are physical information elements used or produced by a software
development process or by the installation or operation of a system, like for
example model files, source code files, executable files, scripts, etc...
Artifacts are deployed on hardware nodes as types or instances. It is
possible to indicate dependencies between artifacts.
39
10 Project Management
10.1 Controlling Software Projects
Four control variables require balancing: Resources, Time, Scope and Qual-
ity. It is not advisable to set a priori the value of all variables simultaneously,
if we want a successful project. "scope" is often the most important variable
to control.
40
10.5 Iterative and Incremental
10.5.1 Iterative:
• Repeatedly executing nested process cycles;
10.5.2 Incremental:
• System is built in progressive stages;
41
10.7.2 Agile Planning:
• Creation of prioritized set of deliverables;
• Opportunistic execution of activities to create deliverables;
• Management via feedback and adaptation.
42
10.10 Management by Facilitation
10.10.1 Traditional “Command and Control Strategy”:
• Decisions made by central authorities;
• Activities delegated;
• Activities accepted;
10.11 Iteration 0
Some people think agile development gives developers license to dive in and
build, spending little or no time on early requirements gathering or architec-
tural issues.
Projects in which months and months of planning, requirements speci-
fication, and architectural philosophizing occur before they deliver any cus-
tomer value are not positively evaluated.
Iteration 0 is a practice that can help teams find that middle ground
and balance anticipation with adaptation.
The "0" means that this iteration has nothing useful to the customer-
features, in other words-gets delivered in this time period. However, the
fact that we have designated an iteration implies that the work is useful
to the project team: architecture work, technological training, requirements
document to base a contract signing.
43
The activities that belong to the iteration planning are:
44
10.14 Next Iteration Plan
10.14.1 Activities
• To construct the list of activities to implement each feature, recording
it on the back of the card.
10.14.2 Re-estimation
• The team re-estimates the work effort based on the more detailed as-
sessment and adjusts the features planned for the iteration if necessary.
10.14.3 Assignment
• Team members sign up for features or activities based on their skills
and/or desires;
• Taking on the responsibility for getting the work done reinforces each
individual’s commitment to the project and thereby contributes to
building a self-organizing team..
10.15 Estimation
10.15.1 How to estimate by features rather than activity?
• Estimate requirements gathering on a feature-by-feature basis, instead
of for the overall project.
• Multiple techniques can provide a better estimate for the entire project;
• Team member estimates should be used for the next iteration plan.
45
10.16 Scope Evolution
• Some scope changes are inexpensive but valuable;
• Some scope changes are extensive and expensive but crucial to deliver-
ing customer value ;
46
Focused on finding the places where there’s a lack of mismatch of un-
derstanding.
Deliberate discovery: assume that we don’t know what we’re doing.
Uses examples to promote conversations.
Requires tools but the main focus are the conversations, not the tools.
11.2 Gherkin
Language used to capture examples of scenarios. Designed to be non-technical
and human readable. It is also designed to promote Behavior-Driven Devel-
opment practices for the whole team. Initially created for Cucumber (BDD
tool for Ruby) but now supported for many different languages.
12 Software Evolution
12.1 Software Change
Software change is inevitable because:
47
12.3 Evolution and Servicing
Evolution is the stage in a software system’s life cycle where it is in opera-
tional use and is evolving as new requirements are proposed and implemented
in the system.
Servicing is the stage where the software remains useful but the only
changes made are those required to keep it operational i.e. bug fixers and
changes to reflect changes in the software’s environment. No new function-
ality is added.
Phase-out is the stage where the software may still be used but no
further changes are made to it.
48
12.4.3 Change implementation
49
12.5.2 Types of Maintenance
50
Software re-engineering is concerned with re-structuring and re-documenting
software to make it easier to understand and change.
Refactoring, making program changes that preserve functionality, is a
form of preventative maintenance.
51