Module-03 Software Engineering - PM
Module-03 Software Engineering - PM
Module-03
What is Agility?
1. Definition of Agility:
o Agility refers to the ability of a software team to quickly and
effectively respond to changes.
2. Nature of Software Development:
o Software development is inherently about change—changes in the
product, team members, technology, and other factors.
3. Built-in Support for Change:
o Support for change should be embedded in all aspects of software
development, as it is fundamental to the process.
4. Team Dynamics:
o Successful software development relies on the skills and collaboration
of individuals within teams.
5. Response to Change:
o Software engineers need to be agile to accommodate rapid changes in
various aspects of the project.
6. Agility Beyond Change Management:
o Agility also includes adopting the philosophy of the Agile Manifesto,
which emphasizes:
Improved communication among team members, technologists,
business people, and managers.
Rapid delivery of functional software.
1. Conventional Wisdom:
o The cost of change increases nonlinearly as a project progresses.
o Early changes (e.g., during requirements gathering) are inexpensive
and quick to implement.
o Late changes (e.g., during validation testing) are costly and time-
consuming due to extensive modifications required.
These points highlight the conventional wisdom and the agile approach regarding
the cost of change in software development.
Addressing Unpredictability:
1. Adaptability:
o The process must adapt to rapidly changing project and technical
conditions.
o Adaptation should occur incrementally to ensure continuous progress.
2. Customer Feedback:
o Regular feedback from customers is crucial for guiding necessary
adaptations.
o Feedback is facilitated by delivering operational prototypes or
portions of the system.
3. Incremental Development:
o Software is developed and delivered in small, functional increments.
o Each increment is a working piece of software, allowing for frequent
evaluations and feedback loops.
4. Iterative Approach:
Agility Principles:
The Agile Alliance defines 12 principles for achieving agility [Agi03], [Fow01]:
1. Customer Satisfaction:
o Satisfy the customer through early and continuous delivery of
valuable software.
2. Welcome Change:
o Embrace changing requirements, even late in development, for the
customer's competitive advantage.
3. Frequent Delivery:
o Deliver working software frequently, with a preference for shorter
timescales (e.g., every few weeks).
4. Collaboration:
o Business people and developers must work together daily throughout
the project.
5. Motivated Individuals:
o Build projects around motivated individuals, providing them with the
environment and support they need.
6. Face-to-Face Communication:
o The most efficient and effective method of conveying information
within a development team is face-to-face conversation.
7. Working Software:
At regular intervals, the team reflects on how to become more effective and
adjusts its behavior accordingly.
There is considerable debate about the benefits and applicability of agile software
development versus traditional software engineering processes. Key points include:
1. Pro-Agility View:
o Agilists view traditional methodologies as overly rigid and
documentation-heavy, hindering the delivery of working systems.
2. Traditional View:
1. Competence:
o Competence includes innate talent, specific skills, and knowledge of
the chosen process. Training should be provided to all team members.
2. Common Focus:
o Team members should focus on delivering a working software
increment within the promised time, continually adapting the process
to fit team needs.
3. Collaboration:
o Effective collaboration within the team and with stakeholders is
essential for success.
4. Decision-Making Ability:
o Teams should have the autonomy to make decisions about both
technical and project issues.
5. Fuzzy Problem-Solving Ability:
o Teams must be able to handle ambiguity and change, learning from all
problem-solving activities.
6. Mutual Trust and Respect:
o Teams should develop trust and respect, creating a cohesive unit
where the whole is greater than the sum of its parts.
7. Self-Organization:
o Teams should self-organize for the work, process, and schedule to
achieve delivery of software increments. This improves collaboration
and boosts morale.
XP Values
Kent Beck defines five core values for XP: communication, simplicity, feedback,
courage, and respect. These values drive specific activities, actions, and tasks
within the XP framework.
The XP Process
Industrial XP (IXP)
The XP Debate
XP has spurred discussion and debate, with critics pointing out potential issues:
Proponents argue that XP's iterative and adaptive nature addresses these issues
effectively.
Scrum
Scrum, developed by Jeff Sutherland and his team in the early 1990s, is an
agile method that follows principles consistent with the agile manifesto.
It comprises framework activities such as requirements, analysis, design,
evolution, and delivery. Work tasks within these activities occur in sprints,
which are short, predefined time-boxes.
Key elements of Scrum include the backlog (a prioritized list of
requirements), sprints (work units within a time-box), daily Scrum meetings
Crystal
The Crystal family of agile methods, created by Alistair Cockburn and Jim
Highsmith, emphasizes maneuverability and adaptability in software development.
Crystal methodologies have core elements common to all and specific elements
unique to each. They are designed to be selected based on the specific needs of a
project and its environment.
FDD, conceived by Peter Coad and extended by Stephen Palmer and John
Felsing, is an agile process for object-oriented software engineering. It
emphasizes collaboration, feature-based decomposition, and communication.
A feature is a client-valued function that can be implemented in two weeks
or less. FDD focuses on quality assurance through design and code
inspections, audits, metrics, and the use of patterns.
It provides a structured approach to project management with six milestones
for each feature: design walkthrough, design, design inspection, code, code
inspection, and promote to build.
The Agile Unified Process (AUP) follows a "serial in the large" and
"iterative in the small" approach.
It includes classic UP activities (inception, elaboration, construction, and
transition) and iterates within these activities to deliver software increments
rapidly.
Social Tools:
o Starting from the hiring stage to assess the "fit" of a prospective team
member, such as pair programming sessions.
Technological Tools:
o Help distributed teams simulate physical presence.
Physical Tools:
o Used in workshops to manipulate information and coordinate
activities.
Examples of Tools:
Tools are defined as anything that facilitates the work performed by an agile
team member and enhances the quality of the end product.
1. Technology-Specific Knowledge:
Core principles
The core principles of software engineering are essential for both the process and
practice levels, providing a foundation and guiding values for effective
development.
1. Be Agile:
o Emphasize simplicity and economy of action.
o Keep work products concise and make local decisions when possible.
2. Focus on Quality at Every Step:
o Ensure every activity and task produces high-quality work products.
3. Be Ready to Adapt:
o Adapt approaches based on constraints from the problem, people, and
project.
4. Build an Effective Team:
o Focus on building a self-organizing team with mutual trust and
respect.
5. Establish Mechanisms for Communication and Coordination:
o Address management issues to ensure critical information is shared
and coordinated effectively.
6. Manage Change:
o Establish formal or informal mechanisms to manage change requests,
assessments, approvals, and implementations.
7. Assess Risk:
o Identify potential issues and establish contingency plans.
8. Create Work Products That Provide Value for Others:
o Produce only those work products that are necessary and valuable for
subsequent process activities.
Communication Principles
1. Listen: Focus on the speaker’s words and ask for clarification without
constant interruptions.
2. Prepare Before You Communicate: Understand the problem and prepare
an agenda if you’re conducting a meeting.
3. Facilitate the Activity: Ensure meetings have a leader to keep discussions
productive and mediate conflicts.
Planning Principles
Effective planning provides guidance to the software team and helps manage the
project's progression:
1. Understand the Scope of the Project: Know the project’s destination to use
a road map effectively.
2. Involve Stakeholders in the Planning Activity: Engage stakeholders to
define priorities and establish constraints.
3. Recognize That Planning Is Iterative: Adjust the plan as work progresses
and new information emerges.
4. Estimate Based on What You Know: Provide estimates based on the
current understanding of the work.
5. Consider Risk as You Define the Plan: Adjust the project plan to
accommodate high-impact, high-probability risks.
6. Be Realistic: Account for human factors, communication noise, and the
likelihood of changes and mistakes.
7. Adjust Granularity as You Define the Plan: Plan in detail for the short
term and broadly for the long term, adjusting as needed.
8. Define How You Intend to Ensure Quality: Identify and schedule quality
assurance activities like technical reviews and pair programming.
9. Describe How You Intend to Accommodate Change: Define how changes
will be requested, assessed, and implemented.
10.Track the Plan Frequently and Make Adjustments as Required: Monitor
progress daily and adjust the plan to address slippages.
Modeling Principles
Models help in understanding and building the software. There are two types of
models: requirements models (analysis models) and design models. Agile
modeling principles, although intended for agile processes, apply to all software
engineering:
5. State an Explicit Purpose for Each Model: Justify the creation of each
model; if not justified, don’t create it.
6. Adapt Models to the System at Hand: Tailor model notation or rules to the
specific application.
7. Forget About Building Perfect Models: Aim for useful models rather than
perfect ones; avoid diminishing returns.
8. Don’t Be Dogmatic About Model Syntax: Focus on successful
communication of content rather than strict adherence to syntax.
9. Trust Your Instincts: Experienced software engineers should trust their
instincts about models, even if they seem fine on paper.
10.Get Feedback Quickly: Review models with the team to correct mistakes,
address misinterpretations, and add missing features.
Construction Principles
The construction phase involves coding and testing tasks leading to operational
software:
Coding Principles
1. Preparation Principles:
Testing Principles
1. Traceability to Requirements:
o Tests should map directly to customer requirements.
2. Early Test Planning:
o Plan tests early, ideally as soon as requirements and design models are
solidified.
3. Pareto Principle in Testing:
o Focus on the 20% of components likely to contain 80% of errors.
4. Progressive Testing:
o Start with small components and progress to integrated system testing.
5. Impossibility of Exhaustive Testing:
o Focus on adequate coverage rather than exhaustive path testing.
Deployment Principles