SE Module 3 Nots
SE Module 3 Nots
The Agile Alliance defines 12 agility principles for those who want to achieve agility:
1. Our highest priority is to satisfy the customer through early and continuous delivery of valuable
software.
2. Welcome changing requirements, even late in development. Agile processes harness change for
the customer’s competitive advantage.
3. Deliver working software frequently, from a couple of weeks to a couple of months, with a
preference to the shorter timescale.
4. Business people and developers must work together daily throughout the project.
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.
7. Working software is the primary measure of progress.
8. Agile processes promote sustainable development. The sponsors, developers, and users should be
able to maintain a constant pace indefinitely.
9. Continuous attention to technical excellence and good design enhances agility.
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.
Extreme Programming (XP), the most widely used approach to agile software development. XP is a
set of engineering practices. Developers have to go beyond their capabilities while performing these
practices. That’s where the "extreme" in the framework’s title comes from.
Planning, the first stage, is when the customer meets the development team and presents
the requirements in the form of user stories to describe the desired result. The team then estimates the
stories and creates a release plan broken down into iterations needed to cover the required
functionality part after part. If one or more of the stories can’t be estimated, so-called spikes can be
introduced which means that further research is needed.
Designing is actually a part of the planning process, but can be set apart to emphasize its
importance. It’s related to one of the main XP values that we’ll discuss below -- simplicity. A good
design brings logic and structure to the system and allows to avoid unnecessary complexities and
redundancies. XP encourages the use of CRC cards (Chapter 7) as an effective mechanism for
thinking about the software in an object-oriented context
Coding is the phase during which the actual code is created by implementing specific XP practices
such as coding standards, pair programming, continuous integration, and collective code ownership
(the entire list is described below).
Scrum Teams follow five core values: Commitment, Courage, Focus, Openness, Respect
Scrum emphasizes the use of a set of software process patterns [Noy02] that have proven effective
for projects with tight timelines, changing requirements, and business criticality. Each of these
process patterns defines a set of development actions:
Backlog—a prioritized list of project requirements or features that provide business value for the
customer. Items can be added to the backlog at any time (this is how changes are introduced). The
product manager assesses the backlog and updates priorities as required.
Sprints—consist of work units that are required to achieve a requirement defined in the backlog that
must be fit into a predefined time-box. Changes (e.g., backlog work items) are not introduced during
the sprint. Hence, the sprint allows team members to work in a short-term, but stable environment.
Scrum meetings—are short (typically 15 minutes) meetings held daily by the Scrum team. Three key
questions are asked and answered by all team members
• What did you do since the last team meeting?
• What obstacles are you encountering?
• What do you plan to accomplish by the next team meeting?
A Scrum Team needs three specific roles: a Product Owner, Scrum leader, and development team.
A team leader, called a Scrum master, leads the meeting and assesses the responses from each
person. The Scrum meeting helps the team to uncover potential problems as early as possible. Also,
these daily meetings lead to “knowledge socialization” [Bee99] and thereby promote a self-
organizing team structure.
Demos—deliver the software increment to the customer so that functionality that has been
implemented can be demonstrated and evaluated by the customer. It is important to note that the
demo may not contain all planned functionality, but rather those functions that can be delivered
within the time-box that was established.
In the context of FDD, a feature “is a client-valued function that can be implemented in two weeks or
less” [Coa99]. The emphasis on the definition of features provides the following benefits:
• Because features are small blocks of deliverable functionality, users can describe them more easily;
understand how they relate to one another more readily; and better review them for ambiguity, error,
or omissions.
• Features can be organized into a hierarchical business-related grouping.
• 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 inspect effectively.
The FDD approach defines five “collaborating” [Coa99] framework activities (in FDD these are
called “processes”) as shown in Figure.
To accomplish software increments are properly schedule FDD defines six milestones during the
design and implementation of a feature: “design walkthrough, design, design inspection, code, code
inspection, promote to build”
a well-designed agile process “flattens” the cost of change curve (Figure 3.1, shaded,
solid curve), allowing a software team to accommodate changes late in a software
project without dramatic cost and time impact
the most widely used of all agile process models is Extreme Programming (XP). But many
other agile process models have been proposed and are in use across the industry. Among the most
common are:
• Adaptive Software Development (ASD)
• Scrum
• Dynamic Systems Development Method (DSDM)
• Crystal
• Feature Drive Development (FDD)
• Lean Software Development (LSD)
• Agile Modeling (AM)
• Agile Unified Process (AUP)
Lean Software Development (LSD) has adapted the principles of lean manufacturing to the
world of software engineering. The lean principles that inspire the LSD process can be summarized
as eliminate waste, build quality in, create knowledge, defer commitment, deliver fast, respect
people, and optimize the whole.
You often hear people say that software development knowledge has a 3-year half-life: half of what
you need to know today will be obsolete within 3 years. In the domain of technology-related
knowledge, that’s probably about right. But there is another kind of software development
knowledge—a kind that I think of as “software engineering principles”—that does not have a three-
year half-life. These software engineering principles are likely to serve a professional programmer
throughout his or her career.
1. Listen
2. Prepare before you communicate
3. Someone should facilitate the activity
4. Face-to-face communication is best
5. Take notes and document decisions
6. Strive for collaboration
7. Stay focused; modularize your discussion
8. If something is unclear, draw a picture
9. Once you agree to something, move on
10. Negotiation is not a contest or a game. It works best when both parties win
Planning Principles: The planning activity encompasses a set of management and technical practices
that enable the software team to define a road map as it travels toward its strategic goal and tactical
objectives. Over planning is time consuming and fruitless , but under planning is a recipe for chaos.
Regardless of the rigor with which planning is conducted, the following principles always apply:
Modeling Principles: We create models to gain a better understanding of the actual entity to be built.
When the entity is a physical thing we can build a model that is identical in form and shape but
smaller in scale. when the entity to be built is software, our model must take a different form. It must
be capable of representing the information that software transforms, the architecture and functions
that enable the transformation to occur, the features that users desire, and the behavior of the system
as the transformation is taking place.
Construction Principles: The construction activity encompasses a set of coding and testing tasks that
lead to operational software that is ready for delivery to the customer or end user.
Coding Principles. The principles that guide the coding task are closely aligned with
programming style, programming languages, and programming methods. However, there are a
number of fundamental principles that can be stated:
Preparation principles: Before you write one line of code, be sure you
• Understand of the problem you’re trying to solve.
• Understand basic design principles and concepts.
• Pick a programming language that meets the needs of the software to be built and the
environment in which it will operate.
• Select a programming environment that provides tools that will make your work easier.
• Create a set of unit tests that will be applied once the component you code is completed.
Validation Principles: After you’ve completed your first coding pass, be sure you
Conduct a code walkthrough when appropriate.
Perform unit tests and correct errors you’ve uncovered.
Refactor the code.
Deployment Principles: deployment activity encompasses three actions: delivery, support, and
feedback. The delivery of a software increment represents an important milestone for any software
project. A number of key principles should be followed as the team prepares
to deliver an increment: