Module 3 SE
Module 3 SE
Engineering Knowledge
Contents
Chapter 1: Agile Development: What is Agility?, Agility and the cost of
That is, while there is value in the items on the right, we value the items on the left more.
Agility
Traditional Software Development
• It has Low Flexibility; Changes are difficult and costly to implement once a
Agility
While both Traditional Software models and Agile involve iterative and
delivery, and customer involvement set it apart from more rigid and structured
traditional models.
Agility
• What is it? Agile software engineering combines a philosophy and a set of
development guidelines.
• The development guidelines stress delivery over analysis & design, active and
Agility
• Who does it? Software engineers and stakeholders, including managers,
customers, and end users, collaborate on a self-organizing agile team. This team
nurtures communication and collaboration among all members.
• What is the work product? The main work product in agile development is
an operational "software increment" delivered to the customer on the agreed
date. Both customers and engineers view this increment as the most important
output.
Agility
• How do I ensure that I’ve done it right? – If the agile team agrees that the
process works and the delivered software increments satisfy the customer.
Consistent delivery of satisfactory software indicates a successful agile
process.
Agility And The Cost Of Change
• Conventional wisdom in software development indicates that the cost of change increases
nonlinearly as a project progresses.
• Early changes during requirements gathering are minimal in cost and time. A usage scenario might
have to be modified, a list of functions may be extended, or a written specification can be edited. The
costs of doing this work are minimal, and the time required will not adversely affect the outcome of the
project.
• Late changes during validation testing can be costly and time-consuming, requiring extensive
modifications. The team is in the middle of validation testing, and an important stakeholder is
requesting a major functional change. The change requires a modification to the architectural design of
the software, the design and construction of three new components, modifications to another five
components, the design of new tests, and so on. Costs escalate quickly, and the time and cost required
Agility And The Cost Of Change
• Agile proponents argue that a well-designed agile process flattens the cost of
change curve, allowing late changes with less impact.
• Agile practices like incremental delivery, continuous unit testing, and pair
programming help reduce these costs.
• Evidence suggests that significant cost reduction can be achieved through agile
methods.
Agility And The Cost Of Change
What Is An Agile Process?
An agile software process is based on key assumptions:
• It's hard to predict which software requirements will stay the same and which
will change, as well as how customer priorities will shift.
• Analysis, design, construction, and testing are less predictable than desired.
What Is An Agile Process?
• Given these assumptions, the process must be adaptable to handle
unpredictability.
1. Our highest priority is to satisfy the customer through early and continuous
delivery of valuable software.
5. Build projects around motivated individuals. Give them the environment and support
they need and trust them to get the job done.
6. The most efficient and effective method of conveying information to and within a
development team is face-to-face conversation.
10. Simplicity—the art of maximizing the amount of work not done—is essential.
11. The best architectures, requirements, and designs emerge from self– organizing
teams.
12. At regular intervals, the team reflects on how to become more effective, then tunes
and adjusts its behavior accordingly.
The Politics of Agile Development
•Ongoing Debate: There is continuous debate about the benefits of agile versus
traditional software development methods.
•Risk of Ideological Battles: when debates turn into conceptual battles, rational
decision-making can get overshadowed, becoming counterproductive.
The Politics of Agile Development
•Key Questions:
•How to best achieve agility in software development?
•How to build software that meets current customer needs and is scalable for
future requirements?
•No Absolute Answers: There are no definitive solutions, and even within the
agile community, multiple process models exist, each with a different approach
to agility.
The Politics of Agile Development
•Ideas vs. Tasks: Agile methodologies often propose "ideas" rather than specific
•Balanced Approach: The best results come from combining the strengths of both
As Cockburn and Highsmith state, "Agile development focuses on the talents and skills
of individuals, molding the process to specific people and teams." The process adapts to
the team, not the other way around.
•Collaboration: Team members must collaborate with each other and all stakeholders
to assess, analyze, and use information, and to build software that provides business value.
•Decision-Making Ability: The team must have the autonomy to make technical and
project decisions.
Human Factors
•Fuzzy Problem-Solving Ability: Agile teams must handle ambiguity and adapt to changing problems,
learning from all problem-solving activities.
Mutual Trust and Respect: Teams must be "jelled," exhibiting trust and respect to become greater than the
sum of their parts. A jelled team exhibits the trust and respect that are necessary to make them “so strongly knit
that the whole is greater than the sum of the parts.”
Extreme Programming (XP), the most widely used agile approach. Originally
developed by Kent Beck, XP emphasizes five core values: communication,
simplicity, feedback, courage, and respect.
Extreme Programming (XP) Values
XP values: five values that establish a foundation for all work performed as part of XP.
1) Communication - XP emphasizes close, yet informal (verbal) collaboration between customers and
developers. Everyone on a team works jointly at every stage of the project.
2) Simplicity - XP restricts developers to design only for immediate needs, rather than consider future needs.
Developers strive to write simple code bringing more value to a product, as it saves time and effort.
3) Feedback - Feedback is derived from three sources: the implemented software itself, the customer, and
other software team members. XP makes use of the unit test as its primary testing tactic. As each class is
developed, the team develops a unit test to exercise each operation according to its specified functionality. As
an increment is delivered to a customer, the user stories or use cases that are implemented by the increment are
used as a basis for acceptance tests. The degree to which the software implements the output, function, and
behavior of the use case is a form of feedback. Finally, as new requirements are derived as part of iterative
planning, the team provides the customer with rapid feedback regarding cost and schedule impact.
Extreme Programming (XP) Values
4) Courage - Programmers objectively evaluate their own results without making excuses
and are always ready to respond to changes. An agile XP team must have the discipline
(courage) to design for today, recognizing that future requirements may change dramatically,
thereby demanding substantial rework of the design and implemented code.
5) Respect - Every person assigned to a project contributes to a common goal. The agile team
inculcates respect among its members, between other stakeholders and team members, and
indirectly, for the software itself. As they achieve successful delivery of software increments, the
team develops growing respect for the XP process.
Extreme Programming (XP) Process
XP process:
• Extreme Programming uses an object-oriented approach as its preferred development
paradigm and encompasses a set of rules and practices that occur within the context of
four framework activities: planning, design, coding, and testing.
Listening leads to the creation of a set of “user stories” that describe required output, features, and
functionality for software to be built.
Each story (similar to use cases) is written by the customer and is placed on an index card. The customer
assigns a value (i.e., a priority) to the story based on the overall business value of the feature or function.
Members of the XP team then assess each story and assign a cost—measured in development weeks—to it. If
the story is estimated to require more than three development weeks, the customer is asked to split the story
into smaller stories and the assignment of value and cost occurs again. It is important to note that new stories
can be written at any time.
The XP process
Framework activities for XP:
and roles of extreme programming
Planning
Customers and developers work together to decide how to group stories into the next release (the next
software increment) to be developed by the XP team.
Once a basic commitment (agreement on stories to be included, delivery date, and other project matters) is
made for a release, the XP team orders the stories that will be developed in one of three ways:
(1) all stories will be implemented immediately (within a few weeks),
(2) the stories with highest value will be moved up in the schedule and implemented first, or
(3) the riskiest stories will be moved up in the schedule and implemented first.
After the first project release (also called a software increment) has been delivered, the XP team computes
project velocity – the number of customer stories implemented during the first release.
Project velocity can then be used to (1) help estimate delivery dates and schedule for subsequent releases and
(2) determine whether an overcommitment has been made for all stories across the entire development project.
If an overcommitment occurs, the content of releases is modified or end delivery dates are changed.
As development work proceeds, the customer can add stories, change the value of an existing story, split
stories, or eliminate them. The XP team then reconsiders all remaining releases and modifies its plans
accordingly.
The XP process and roles of extreme programming
Framework activities for XP:
Design
XP design rigorously follows the KIS (keep it simple) principle. A simple design is always preferred over a
more complex representation.
In addition, the design provides implementation guidance for a story as it is written—nothing less, nothing
more.
The CRC cards are the only design work product produced as part of the XP process.
The XP process and roles of extreme programming
Framework activities for XP:
Design
If a difficult design problem is encountered as part of the design of a story, XP recommends the immediate
creation of spike solution - an operational prototype of that portion to be implemented and evaluated. The
intent is to lower risk when true implementation starts and to validate the original estimates for the story
containing the design problem.
XP encourages refactoring—a construction technique that is also a method for design optimization.
Refactoring is the process of changing a software system in such a way that it does not alter the external
behavior of the code yet improves the internal structure.
A central notion in XP is that design occurs both before and after coding commences.
Once the unit test has been created, the developer is better able to focus on what must be implemented to pass
the test.
Nothing extraneous is added (KIS). Once the code is complete, it can be unit-tested immediately, thereby
providing instantaneous feedback to the developers.
A key concept during the coding activity is pair programming – two people work together at one computer
workstation to create code for a story. This provides a mechanism for real time problem solving and real-time
quality assurance (the code is reviewed as it is created). It also keeps the developers focused on the problem at
hand. In practice, each person takes on a slightly different role. For example, one person might think about the
coding details of a particular portion of the design while the other ensures that coding standards (a required part
of XP) are being followed or that the code for the story will satisfy the unit test that has been developed to
validate the code against the story.
The XP process and roles of extreme programming
Framework activities for XP:
Coding
As pair programmers complete their work, the code they develop is integrated with the work of others. In some
cases, this is performed on a daily basis by an integration team. In other cases, the pair programmers have
integration responsibility. This “continuous integration” strategy helps to avoid compatibility and interfacing
problems and provides a “smoke testing” environment that helps to uncover errors early.
Testing is the core of extreme programming. It is the regular activity that involves both unit tests (
automated testing to determine if the developed feature works properly) and acceptance tests (customer testing
to verify that the overall system is created according to the initial requirements).
Extreme Programming (XP)
Industrial XP (IXP): Joshua Kerievsky describes Industrial Extreme Programming (IXP) as an organic
evolution of XP, maintaining its minimalist, customer-centric, test-driven nature. IXP differs by
involving management more, expanding customer roles, and upgrading technical practices.
IXP introduces six new practices to ensure success in large organizational projects:
1) Readiness Assessment: Before starting an IXP project, the organization must conduct a readiness
assessment to ascertain whether:
a) an appropriate development environment exists to support IXP,
b) the team will be populated by the proper set of stakeholders,
c) the organization has a distinct quality program and supports continuous improvement,
d) the organizational culture will support the new values of an agile team, and
e) the broader project community will be populated appropriately.
Extreme Programming (XP)
2) Project Community: Unlike classic XP, IXP involves a broader community, including
technologists, customers, and other stakeholders like legal staff and quality auditors. Their roles and
communication mechanisms should be clearly defined. People on the team must be well-trained,
adaptable and skilled, and have the proper temperament to contribute to a self-organizing team. For
important projects, “team” morphs into a community.
3) Project Chartering: The IXP team assesses the project’s business justification and its alignment
with the organization's goals, ensuring it complements or replaces existing systems or processes
appropriately.
4) Test-Driven Management: This involves setting measurable criteria for project progress and
establishing mechanisms to determine if these criteria are met. Test-driven management establishes a
series of measurable “destinations” and then defines mechanisms for determining whether or not these
destinations have been reached.
5) Retrospectives: After delivering a software increment, the IXP team conducts specialized reviews
called Retrospectives to examine “issues, events, and lessons learned”, aiming to improve the IXP
process.
Extreme Programming (Xp)
Industrial XP (IXP):
6) Continuous Learning: Team members are encouraged and possibly incentivized to learn new
methods and techniques to enhance product quality.
• The ASD life cycle has three phases: speculation, collaboration, and learning.
Speculation - the project is initiated and adaptive cycle planning is conducted. Adaptive cycle
planning uses project initiation information—the customer’s mission statement, project
constraints (e.g., delivery dates or user descriptions), and basic requirements—to define the set
of release cycles (software increments) that will be required for the project.
Other Agile Process Models
Adaptive Software Development (ASD)
Learning As ASD teams develop components, they focus equally on learning and progress. Developers often
misjudge their understanding, and learning improves it. ASD teams learn through focus groups, technical
reviews, and project.
Other Agile Process Models
Scrum: Scrum is an agile software development method created by Jeff Sutherland and his
team in the early 1990s.
It follows agile principles and includes these key activities: requirements, analysis, design,
evolution, and delivery. Each activity is divided into "sprints," which are short, adaptable
work periods. Work tasks occur within a process pattern called a sprint.
4. Demos: Deliver the software increment to the customer for review and feedback.
Scrum helps teams manage projects with tight deadlines, changing requirements, and high
business importance by embracing disorder and uncertainty..
Other Agile Process Models
Other Agile Process Models
Dynamic Systems Development Method (DSDM):
An agile software approach that uses incremental prototyping to meet tight deadlines. It follows the
modified Pareto principle, aiming to deliver 80% of an application in 20% of the time needed for
the full application.
DSDM's life cycle includes three different iterative cycles, preceded by two additional life cycle
activities:
1) Feasibility study: establishes the basic business requirements and constraints associated with
the application to be built and then assesses whether the application is a viable candidate for the
DSDM process
2) Business study: establishes the functional and information requirements that will allow the
application to provide business value; also, defines the basic application architecture and
Other Agile Process Models
Dynamic Systems Development Method (DSDM):
3. Functional model iteration: Create incremental prototypes. The intent during this iterative cycle
is to gather additional requirements by eliciting feedback from users as they exercise the prototype.
4. Design and build iteration: Refine prototypes to ensure operational value.
5. Implementation: Deploy the software increment, continue refining as needed. It should be noted
that (1) the increment may not be 100 percent complete or
(2) changes may be requested as the increment is put into place.
In either case, DSDM development work continues by returning to the functional model iteration
DSDM can be combined with XP for a comprehensive approach and adapted with ASD concepts for
enhanced collaboration and self-organizing teams.
Other Agile Process Models
Crystal methods:
Crystal family of agile methods, created by Alistair Cockburn and Jim Highsmith, - achieve
a software development approach that puts a premium on “maneuverability”.
They aim to make software development more flexible and efficient. They focus on
delivering working software along with preparing for future projects.
• The Crystal family offers various agile methodologies tailored to different project
needs. Teams can choose the method that suits their project best.
Other Agile Process Models
Feature Driven Development (FDD):
It was originally coined by Peter Coad and his colleagues as a process model for object-
oriented software engineering. A feature is defined as "a client-valued function that can be
implemented in two weeks or less.“
- Features are small blocks of deliverable functionality, making them easier for users to
describe.
- Since a feature is the FDD deliverable software increment, the team develops operational
features every two weeks.
- Because features are small, their design and code representations are easier to manage.
Other Agile Process Models
Feature Driven Development (FDD):
FDD adopts a philosophy that
(1) emphasizes collaboration among people on an FDD team;
(2) manages problem and project complexity using feature-based decomposition
followed by the integration of software increments, and
(3) communication of technical detail using verbal, graphical, and text-based means.
FDD emphasizes software quality assurance activities by encouraging an incremental
development strategy, the use of design and code inspections, the application of software
quality assurance audits, the collection of metrics, and the use of patterns (for analysis,
design, and construction).
Other Agile Process Models
Feature Driven Development (FDD): The FDD approach defines five “collaborating”
framework activities (in FDD) - these are called “processes”
Other Agile Process Models
Feature Driven Development (FDD):
A feature set groups related features into business-related categories and is defined as:
<action><-ing> a(n) <object>
For example: Making a product sale is a feature set that would encompass the features noted earlier
and others.
FDD defines six milestones during the design and implementation of a feature: “design walkthrough,
design, design inspection, code, code inspection, promote to build”
Other Agile Process Models
Lean Software Development (LSD): Lean Software Development (LSD) has adapted the principles of
lean manufacturing to the world of software engineering.
• LSD process can be summarized as eliminate waste, build quality in, create knowledge, defer
commitment, deliver fast, respect people, and optimize the whole.
• For example, eliminate waste within the context of an agile software project as
(1) adding no extraneous features or functions
(2) assessing the cost and schedule impact of any newly requested requirement,
(3) removing any extra process steps,
(4) establishing mechanisms to improve the way team members find information,
(5) ensuring the testing finds as many errors as possible
(6) reducing the time required to request and get a decision that affects the software or the process
that is applied to create it, and
(7) streamlining the manner in which information is transmitted to all stakeholders involved in
the process.
Other Agile Process Models
Agile Modeling (AM): For large, business critical systems, the scope and complexity is high.
“weight” of these modeling methods - volume of notation required, the degree of formalism
suggested, the sheer size of the models for large projects, and the difficulty in maintaining the
model(s) as changes occur.
Agile Modeling (AM) is a collection of values, principles, and practices for modeling software that
can be applied on a software development project in an effective and light-weight manner.
5. Know your models and tools: Understand the strengths and weaknesses of each
6. Adapt locally: Tailor the modeling approach to suit the needs of the agile team.
A major segment of the software engineering community has adopted the Unified
Modeling Language (UML) as the preferred method for representing analysis and design
models.
Other Agile Process Models
Agile Unified Process (AUP) : An agile approach which adopts a “serial in the large” and
“iterative in the small” philosophy for building computer-based systems. It focuses on both
the larger life-cycle and the iterations within each step to deliver incremental releases
over time.
- Testing: Designing and executing tests to find errors and ensure code meets requirements.
- Deployment: focuses on the delivery of a software increment and the acquisition of
feedback from end users.
Other Agile Process Models
support technology.
A Tool Set For The Agile Process
1. Agile proponents debate the role of software tools, with some seeing them as minor
supplements(less role of tools than communication), while others, like Alistair Cockburn, believe
they can benefit agile teams.
2. Cockburn emphasizes the importance of tools that facilitate rapid understanding, ranging from
social (like pair programming during hiring) to technological (supporting distributed teams) to
physical (whiteboards, posters, index cards).
3. Effective communication is crucial, achieved through active means like pair programming and
passive methods like information displays.
A Tool Set For The Agile Process
4. Project management tools in agile contexts replace traditional Gantt charts with earned value
charts and focus on improving the team's environment and culture.
5. Cockburn suggests that if these tools enhance a team member's work and improve the end
product's quality, they should be considered tools.
Chapter 2: Software Engineering knowledge
Software Engineering knowledge
Many software practitioners(developers) think of software engineering knowledge as
knowledge of specific technologies: Java, Perl, html, C , and so on. Knowledge of specific
Body of Software engineering knowledge had evolved into a “stable core” that represented
As McConnell indicates, core principles are the elemental ideas that guide the software
engineers in the work that they do. It provide a foundation from which software engineering
meaningful software process and the execution of effective software engineering methods.
• At the process level, core principles establish a foundation that guides a software team as it
performs framework and umbrella activities, navigates the process flow, and produces a set of
• At the level of practice, core principles establish a collection of values and rules that serve as a
guide to gather the requirements, analyze a problem, design a solution, implement and test the