SOFTWARE
ENGINEERING
PRINCIPLES
UNIT - 1
SOFTWARE AND SOFTWARE ENGINEERING
SOFTWARE ENGINEERING
In order to build software that is ready to meet the challenges of the twenty-
first century, you must recognize a few simple realities:
i. Understand the problem before you build a solution.
- Software is ubiquitous in our daily lives, influencing everything we do.
- Interest in specific application features is growing among users.
- When developing new software, there are often diverse opinions on desired
functionalities.
- Understanding the problem thoroughly is crucial before starting software
development.
- Clear communication and alignment among stakeholders are essential for
successful software projects.
ii. Design is a pivotal software engineering activity.
- IT needs for individuals, businesses, and governments are becoming more
intricate each year.
- Software development, once done by individuals, now involves large teams.
- Modern software is embedded in diverse devices from electronics to medical
tools to weapons.
- The complexity of these systems requires careful consideration of all components.
- Designing these systems is crucial due to their interdependent nature and wide-
ranging applications
iii. Both quality and maintainability are an outgrowth of good design.
- Software is vital for decision-making and daily operations in individuals,
businesses, and governments.
- Failures in software can range from minor inconveniences to catastrophic
outcomes.
- Therefore, ensuring high-quality software is crucial to prevent disruptions and
ensure reliability.
- Quality assurance and testing are essential to meet user expectations and prevent
critical failures.
As the perceived value of a specific application grows, the likelihood is that its
user base and longevity will also grow. As its user base and time-in-use increase,
demands for adaptation and enhancement will also grow. It follows that software
should be maintainable.
Conclusion: Software in all of its forms and across all of its application domains
should be engineered.
Definition of software engineering by Fritz Bauer:
"Establishment and use of sound engineering principles to economically obtain
software that is reliable and works on real machines efficiently."
IEEE defines software engineering as:
“The application of a systematic, disciplined, quantifiable approach to the
development, operation and maintenance of software.”
Software engineering is a layered technology.
It encompasses a process, methods for managing and engineering software, and tools.
Software engineering layers
Quality focus:
- Any engineering approach (including software engineering) must rest on an
organizational commitment to quality.
- Total quality management, Six Sigma, and similar philosophies10 foster a
continuous process improvement culture, and it is this culture that ultimatelyleads
to the development of increasingly more effective approaches to software
engineering.
- The bedrock that supports software engineering is a quality focus.
Process:
- The foundation for software engineering is the process layer.
- The software engineering process is the glue that holds the technology layers
together and enables rational and timely development of computer software.
- Process defines a framework that must be established for effective delivery of
software engineering technology.
- The software process forms the basis for management control of software project
and establishes the context in which technical methods are applied, work
product(models, documents, data, reports, forms, etc.) are produced, milestones are
established, quality is ensured, and change is properly managed.
Methods:
- Methods provide the technical how-to’s for building software.
- Methods encompass a broad array of tasks that includes,
• Communication,
• Requirements analysis,
• Design modeling,
• Program construction,
• Testing,
• Support
- Methods rely on a set of basic principles that govern each area of the technology
and include modeling activities and other descriptive techniques.
Tools:
- Tools provide automated or semiautomated support for the process and the
methods.
(provides a self-os for process & methods)
- When tools are integrated so that information created by one tool can be used by
another, a system for the support of software development, called computer-aided
software engineering, is established.
THE SOFTWARE PROCESS
What are the elements of a software process?
- The process is a collection of activities, actions, and tasks that are performed
whensome work product is to be created.
- An activity strives to achieve a broad objective (e.g., communication with
stakeholders) and is applied regardless of the application domain, size of the
project, complexity of the effort, or degree of rigor with which software
engineering is to be applied.
- An action (e.g., architectural design) encompasses a set of tasks that produce a
major work product (e.g., an architectural design model)
- A task focuses on a small, but well-defined objective (e.g., conducting a unit test)
that produces a tangible outcome.
In the context of software engineering, a process is not a rigid prescription for how
to build computer software.
Rather, it is an adaptable approach that enables the people doing the work (the
software team) to pick and choose the appropriate set of work actions and tasks.
The intent is always to deliver software in a timely manner and with sufficient
quality to satisfy those who have sponsored its creation and those who will use it.
A process framework establishes the foundation for a complete software engineering
process by identifying a small number of framework activities that are applicable to all
software projects, regardless of their size or complexity.
In addition, the process framework encompasses a set of umbrella activities that are
applicable across the entire software process.
The five generic process framework activities:
 Communication (understand the requirements)
 Planning (map—called asoftware project plan—defines the software engineering work
by describing the technical tasks to be conducted, the risks that are likely, the resources
that will be required, the work products to be produced, and a work schedule)
 Modeling (design the model-”sketch”)
 Construction (combination of code generation & testing)
 Deployment (finished software product)
These five generic framework activities can be used during the development of
small, simple programs, the creation of large Web applications, and for the
engineering of large, complex computer-based systems. The details of the software
process will be quite different in each case, but the framework activities remain the
same.
For many software projects, framework activities are applied iteratively as a
project progresses. That is, communication, planning, modeling, construction, and
deployment are applied repeatedly through a number of project iterations. Each
project iteration produces a software increment that provides stakeholders with a
subset of overall software features and functionality. As each increment is
produced, the software becomes more and more complete.
Software engineering process framework activities are complemented by a number
of umbrella activities. In general, umbrella activities are applied throughout a
software project and help a software team manage and control progress, quality,
change, and risk.
Umbrella activities occur throughout the software process and focus primarily on
project management, tracking, and control.
Typical umbrella activities includes,
1) Software project tracking and control—allows the software team to assess
progress against the project plan and take any necessary action to maintain the
schedule.
2) Risk management—assesses risks that may affect the outcome of the project or
the quality of the product.
3) Software quality assurance—defines and conducts the activities required to
ensure software quality.(testing)
4) Technical reviews—assesses software engineering work products in an effort to
uncover and remove errors before they are propagated to the next activity.
5) Measurement—defines and collects process, project, and product measures that
assist the team in delivering software that meets stakeholders’ needs; can be used in
conjunction with all other framework and umbrella activities.
6) Software configuration management—manages the effects of change
throughout the software process.
7) Reusability management—defines criteria for work product reuse (including
software components) and establishes mechanisms to achieve reusable components.
8) Work product preparation and production—encompasses the activities
required to create work products such as models, documents, logs, forms, and lists.
How do process models differ from one another?
The differences are
• Overall flow of activities, actions, and tasks and the interdependencies among them
• Degree to which actions and tasks are defined within each framework activity
• Degree to which work products are identified and required
• Manner in which quality assurance activities are applied
• Manner in which project tracking and control activities are applied
• Overall degree of detail and rigor with which the process is described
• Degree to which the customer and other stakeholders are involved with the
project
• Level of autonomy given to the software team (decision making, methodologies,
tools, task mgmt., problem solving, communication & collaboration- for a satisfied
product outcome)
• Degree to which team organization and roles are prescribed
Perspective Process Models
- Prescriptive process models were originally proposed to bring order to the chaos of
software development.
It has said that these traditional models have brought a certain amount of useful
structure to software engineering work and have provided a reasonably effective road
map for software teams.
- However, software engineering work and the product that it produces remain on “the
edge of chaos.”
(“If the process is right, the results will take care of themselves.”)
- Prescriptive process models are sometimes referred to as “traditional” process
models.
- Prescriptive process models define a prescribed set of process elements and a
predictable process work flow.
The Waterfall Model
The waterfall model, sometimes called the classic life cycle, suggests a systematic,
sequential approach to software development that begins with customer
specification of requirements and progresses through planning, modeling,
construction, and deployment, culminating in ongoing support of the completed
software.
A variation in the representation of the waterfall model is called the V-model.
V - Model
- The V-model depicts the relationship of quality assurance actions to the actions
associated with communication, modeling, and early construction activities.
- As a software team moves down the left side of the V, basic problem requirements
are refined into progressively more detailed and technical representations of the
problem and its solution.
- Once code has been generated, the team moves up the right side of the V,
essentially performing a series of tests (quality assurance actions) that validate each
of the models created as the team moved down the left side.
In reality, there is no fundamental difference between the classic life cycle and the V-
model. The V-model provides a way of visualizing how verification and validation
actions are applied to earlier engineering work. The waterfall model is the oldest
paradigm for software engineering.
Among the problems that are sometimes encountered when the waterfall model is
applied are:
1. Real projects rarely follow the sequential flow that the model proposes.
Although the linear model can accommodate iteration, it does so indirectly.
As a result, changes can cause confusion as the project team proceeds.
2. It is often difficult for the customer to state all requirements explicitly. The
waterfall model requires this and has difficulty accommodating the natural
uncertainty that exists at the beginning of many projects.
3. The customer must have patience. A working version of the program(s) will
not be available until late in the project time span. A major blunder, if undetected
until the working program is reviewed, can be disastrous
- Today, software work is fast-paced and subject to a never-ending stream of
changes.
- The waterfall model is often inappropriate for such work.
- However, it can serve as a useful process model in situations where requirements
are fixed and work is to proceed to completion in a linear manner.
Incremental Process Models
- The incremental model combines elements of linear and parallel process flows , the
incremental model applies linear sequences in a staggered fashion as calendar time
progresses.
- Each linear sequence produces deliverable “increments” of the software in a
manner that is similar to the increments produced by an evolutionary process flow.
- This model was built to mediate the shortcomings of the Waterfall Model, the
incremental model consists of iterative and incremental development stages. The
Incremental Model is essentially comprised of several mini waterfall cycles.
- This model divides the development into small sections/stages and it can allow the
software developers to take advantage of learnings and insights gleaned from earlier
development stages.
The incremental model
- The first increment is often a core product. That is, basic requirements are
addressed but many supplementary features (some known, others unknown) remain
undelivered. The core product is used by the customer.
- As a result of use and/or evaluation, a plan is developed for the next increment.
The plan addresses the modification of the core product to better meet the needs of
the customer and the delivery of additional features and functionality. This process is
repeated following the delivery of each increment, until the complete product is
produced.
- The incremental process model focuses on the delivery of an operational product
with each increment. Early increments are stripped-down versions of the final
product, but they do provide capability that serves the user and also provide a
platform for evaluation by the user.
- The Incremental Model is a great solution for projects that need accommodation for
some change requests between increments. This model also yields the benefit of being
able to detect problems earlier in the software development for better lifecycle
management planning.
Evolutionary Process Model
- The evolutionary model is based on the concept of making an initial product and
then evolving the software product over time with iterative and incremental
approaches with proper feedback.
- In this type of model, the product will go through several iterations and come up
when the final product is built through multiple iterations.
- The development is carried out simultaneously with the feedback during the
development.
- This model has a number of advantages such as customer involvement, taking
feedback from the customer during development, and building the exact product that
the user wants.
- Because of the multiple iterations, the chances of errors get reduced and the
reliability and efficiency will increase.
There are two common evolutionary process models,
• Prototyping
• Spiral Model
Prototyping: a prototyping (advancement from the original product) paradigm may
offer the best approach. (for efficiency of an algorithm, the adaptability of an
operating system, or the form that human-machine interaction)
Although prototyping can be used as a stand-alone process model, it is more
commonly used as a technique that can be implemented within the context of any
one of the process models.
The prototyping paradigm assists you and other stakeholders to better understand
what is to be built when requirements are fuzzy.
The prototyping
paradigm
The prototyping paradigm begins with communication.
(You meet with other stakeholders to define the overall objectives for the software,
identify whatever requirements are known, and outline areas where further definition
is mandatory.)
Prototyping iteration is planned quickly, and modeling (in the form of a “quick
design”) occurs.
A quick design focuses on a representation of those aspects of the software that will
be visible to end users.
The quick design leads to the construction of a prototype.
The prototype is deployed and evaluated by stakeholders, who provide feedback that
is used to further refine requirements.
The prototype serves as a mechanism for identifying software requirements. If a
working prototype is to be built, you can make use of existing program fragments or
apply tools that enable working programs to be generated quickly.
Both stakeholders and software engineers like the prototyping paradigm, as the
developers feels the actual systems are built immediately.
Yet, prototyping can be problematic for the following reasons,
1) Prototype Trap and Quality Concerns:
- Stakeholders often see a seemingly functional prototype without realizing it lacks
proper structure and long-term maintainability.
- Rushed development sacrifices overall software quality.
- When urged to rebuild for quality, stakeholders resist and demand quick fixes.
Management often yields to these demands, compromising long-term integrity.
2) Implementation Compromises:
- Software engineers may compromise on implementation to achieve quick
prototype functionality.
- Choices like using familiar but inappropriate operating systems or programming
languages are made.
- Inefficient algorithms may be implemented to demonstrate capability.
- Over time, engineers may grow comfortable with these compromises, forgetting
their initial drawbacks.
- These compromises can integrate into the system, potentially impacting its
efficiency and maintainability in the long run.
Although problems can occur, prototyping can be an effective paradigm for software
engineering. The key is to define the rules of the game at the beginning; that is, all
stakeholders should agree that the prototype is built to serve as a mechanism for
defining requirements. It is then discarded (at least in part), and the actual software is
engineered with an eye toward quality.
The Spiral Model: The Spiral Model combines elements of both the Iterative and
Waterfall development models, in efforts to combine advantages of top-down and
bottom-up production.
- The Spiral Model has four phases – Identification, Design, Construct/Build, Evaluation
and Risk Analysis.
- The software project repeatedly passes through these phases in iterations called spirals.
- It provides the potential for rapid development of increasingly more complete versions
of the software.
Boehm describes the model in the following manner:
The spiral development model is a risk-driven process model generator that is used
to guide multi-stakeholder concurrent engineering of software intensive systems.
It has two main distinguishing features,
• One is a cyclic approach for incrementally growing a system’s degree of
definition and implementation while decreasing its degree of risk.
• The other is a set of anchor point milestones for ensuring stakeholder
commitment to feasible and mutually satisfactory system solutions.
Using the spiral model, software is developed in a series of evolutionary releases.
During early iterations, the release might be a model or prototype and during later
iterations, increasingly more complete versions of the engineered system are
produced.
A typical spiral model
A spiral model is divided into a set of framework activities defined by the software
engineering team and uses the generic framework activities.
Each of the framework activities represent one segment of the spiral path.
As this evolutionary process begins, the software team performs activities that are
implied by a circuit around the spiral in a clockwise direction, beginning at the
center.
The first circuit around the spiral might result in the development of a product
specification; subsequent passes around the spiral might be used to develop a
prototype and then progressively more sophisticated versions of the software.
Each pass through the planning region results in adjustments to the project plan.
Cost and schedule are adjusted based on feedback derived from the customer after
delivery.
In addition, the project manager adjusts the planned number of iterations required
to complete the software.
Evolutionary process models were conceived to address these issues, and yet, as
a general class of process models, they too have weaknesses.
Despite the unquestionable benefits of evolutionary software processes, we have
some concerns.
- The first concern is that prototyping poses a problem to project planning because of
the uncertain number of cycles required to construct the product.
Most project management and estimation techniques are based on linear layouts of
activities, so they do not fit completely.
- Second, evolutionary software processes do not establish the maximum speed of
the evolution. If the evolutions occur too fast, without a period of relaxation, it is
certain that the process will fall into chaos.
On the other hand if the speed is too slow then productivity could be affected . . .
- Third, software processes should be focused on flexibility and extensibility rather
than on high quality. This assertion sounds scary. However, we should prioritize the
speed of the development over zero defects. Extending the development in order to
reach high quality could result in a late delivery of the product, when the
opportunity niche has disappeared. This paradigm shift is imposed by the
competition on the edge of chaos.
The intent of evolutionary models is to develop high-quality software in an iterative
or incremental manner.
However, it is possible to use an evolutionary process to emphasize flexibility,
extensibility, and speed of development.
The challenge for software teams and their managers is to establish a proper balance
between these critical project and product parameters and customer satisfaction.
SPECIALIZED PROCESS MODELS
Specialized process models take on many of the characteristics of one or more of the
traditional models. However, these models tend to be applied when a specialized or
narrowly defined software engineering approach is chosen.
Component-Based Development
What is Component-Based Development (CBD)?
• CBD uses pre-made software parts called "components" to build applications.
• These components are created by vendors and have specific functions with clear
interfaces.
• The CBD model is similar to the spiral model, meaning it is iterative and
evolutionary.
Steps in Component-Based Development:
• Research and Evaluate Components: Look for existing components that fit the
needs of your application.
Example: If you're building an e-commerce site, you might look for a pre-made
payment processing component.
• Consider Integration Issues: Think about how these components will work
together within your system.
Example: Ensure that the payment processing component can communicate with
your shopping cart system.
• Design the Software Architecture: Plan a structure that can include all the
chosen components.
Example: Create a layout that integrates the payment processor, user management,
and product catalog components.
• Integrate Components: Assemble the chosen components into the designed
architecture.
Example: Connect the payment processing system to the rest of the e-commerce
platform.
• Conduct Comprehensive Testing: Test the complete system to make sure all
components work together correctly.
Example: Check if the payment goes through correctly when a customer buys a
product.
Benefits of Component-Based Development:
1) Software Reuse: Using pre-made components can save time and reduce costs.
Example: Instead of building a payment system from scratch, use an existing, tested
component.
2) Reduced Development Time: Building software with pre-made parts is faster than
creating everything from scratch.
Example: An e-commerce site can be developed quicker by using existing
components for user login, product catalog, and payment processing.
3) Reduced Project Cost: Less development time and effort can lower the overall
cost of the project.
Example: By reusing components, you spend less on development resources and can
bring the product to market faster.
Component-Based Development is like building with LEGO bricks. Instead of
creating each brick yourself, you use pre-made bricks to build your structure. This
approach saves time and money, ensures quality through reuse, and makes the
development process more efficient.
The Formal Methods Model
Formal Methods Model:
A set of activities that leads to the formal mathematical specification of computer
software. (To ensure the correctness of our programs and reduction in the program’s
error.)
Purpose: To specify, develop, and verify computer-based systems using rigorous
mathematical notation.
Variation: Cleanroom Software Engineering.
Key Benefits:
Reduces Issues: Helps eliminate ambiguity, incompleteness, and inconsistency
through mathematical analysis, not ad hoc review.
Error Detection: Serves as a basis for program verification, allowing errors to be
found and fixed that might otherwise be missed.
Challenges:
• Time-Consuming and Expensive: Developing formal models takes a lot of time
and can be costly.
• Requires Training: Few developers have the necessary background; extensive
training is needed.
• Communication Issues: Difficult to use models to communicate with customers
who are not technically sophisticated.
Applications:
Safety-Critical Software: Used by developers of aircraft avionics, medical devices,
and other critical systems where defects can be very costly or dangerous.
Example: Imagine you are designing software for an airplane's navigation system.
Using formal methods, you would:
Specify Requirements: Clearly define all requirements in a mathematical format.
Develop and Verify: Use these formal specifications to develop the software and
verify its correctness through mathematical proofs.
While formal methods are not widely used due to the challenges mentioned, they
offer a path to developing highly reliable, defect-free software, especially important
in areas where safety and economic stakes are high.
AGILE DEVELOPMENT
Agile software development is an approach focused on iterative development, where
requirements and solutions evolve through collaboration between self-organizing
cross-functional teams. It addresses the unpredictability and dynamism of software
projects.
Agile Process
Agile software processes are designed to handle the unpredictable nature of software
projects.
Key Assumptions:
• Changing Requirements:
It's hard to predict which requirements will stay the same and which will change.
Customer priorities can shift during the project.
• Interleaved Design and Construction:
Design and construction happen together. Design models are validated as they are
created. It's difficult to know how much design is needed before construction starts.
• Unpredictable Planning:
Analysis, design, construction, and testing are not always predictable.
Managing Unpredictability:
• Process Adaptability:
-Agile processes are adaptable to rapidly changing project and technical conditions.
-Continual adaptation is key but must be balanced with forward progress.
• Incremental Adaptation:
- Agile processes adapt incrementally.
- Regular customer feedback is essential for appropriate adaptations.
• Incremental Development:
- Software is delivered in small, functional increments (prototypes or portions of the
system).
- Short development cycles ensure that adaptations keep pace with changes.
Customers evaluate each increment, provide feedback, and influence future
adaptations.
Benefits of Agile Process:
Reduces Change Costs:
Software is released in increments, making change easier to manage.
- the graph shows that agile processes reduce the cost of changes compared to
conventional methods.
Dynamic and Growth-Oriented:
Agile processes are dynamic, specific to the context, and embrace change
aggressively.
Example: Imagine developing a mobile app for a retail store. Using agile methods:
i. Incremental Releases: - You release a basic version of the app with core features.
Gather customer feedback.
- Use feedback to make improvements and add new features in subsequent releases.
ii. Customer Feedback Loop: - Customers regularly test and provide feedback.
- Your team adapts and updates the app in response to feedback, ensuring the final
product meets customer needs.
Agile software processes focus on adaptability and incremental progress, handling
changes effectively through continuous customer feedback and iterative
development. This approach makes it easier to manage unpredictability and deliver
software that meets evolving customer needs.
Agility Principles
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.
The Politics of Agile Development
- There is a significant debate about the benefits and applicability of agile software
development versus traditional software engineering processes.
- This debate can sometimes become intense, with strong opinions on both sides.
Pro-Agility vs. Traditional Methods:
Pro-Agility Camp ("Agilists"):
Extreme View: Traditional methodologists are seen as overly focused on producing
flawless documentation rather than delivering a working system that meets business
needs.
Perspective: Agile proponents prioritize adaptability and delivering functional
software quickly.
Traditional Software Engineering Camp:
Extreme View: Agile methodologists are viewed as glorified hackers who may
struggle to scale their methods for enterprise-wide software.(their methods can’t
handle large, complex projects in big companies)
Perspective: Traditionalists prioritize thorough planning, extensive documentation,
and structured processes to ensure quality and scalability.
Key Traits of an Effective Agile Team
To successfully drive the characteristics of the process in agile development, certain
key traits must exist among the people on an agile team and the team itself:
1. Competence: Encompasses innate talent, specific software-related skills, and
overall knowledge of the chosen process.
Importance: Skill and knowledge can and should be taught to all agile team members.
Example: A team member with strong coding skills and knowledge of agile
methodologies can help guide others in best practices.
2. Common Focus: Despite performing different tasks and bringing different skills, all
team members should focus on one goal—delivering a working software increment to
the customer on time.
Continual Adaptation: The team focuses on continual small and large adaptations to
make the process fit their needs.
Example: Developers, testers, and designers all working towards releasing a functional
feature by the end of the sprint.
3. Collaboration: Involves assessing, analyzing, and using information communicated
to the team, creating understandable information for all stakeholders, and building
valuable software.
Stakeholder Interaction: Team members must collaborate with one another and all
stakeholders.
Example: Regular stand-up meetings where team members discuss progress,
challenges, and next steps.
4. Decision-Making Ability: The team must have the freedom to control its own
destiny, implying autonomy in decision-making for both technical and project issues.
Example: The team decides the scope of work for the upcoming sprint based on their
capabilities and project needs.
5. Fuzzy Problem-Solving Ability: Agile teams must deal with ambiguity and
change, often solving different problems than initially expected.
Adaptability: Lessons learned from solving any problem can benefit the team later.
Example: The team quickly pivots to address a newly identified user need, using
insights from previous iterations.
6. Mutual Trust and Respect: The team must become a “jelled” team, exhibiting
trust and respect to make the whole greater than the sum of its parts.
Team Dynamics: Trust and respect are crucial for effective collaboration and morale.
Example: Team members feel comfortable sharing ideas and feedback without fear
of criticism.
7. Self-Organization: Involves the team organizing itself for the work to be done,
the process to accommodate its environment, and the work schedule to achieve
delivery of the software increment.
Benefits: Improves collaboration, boosts morale, and allows the team to serve as its
own management.
Example: The team plans its work for the sprint, selects the tasks it can accomplish,
and commits to fulfilling those commitments.
EXTREME PROGRAMMING
- Extreme Programming (XP) is a widely used agile software development
methodology that emphasizes customer satisfaction, flexibility, and continuous
improvement through iterative development cycles.
- The approach focuses on enhancing software quality and responsiveness to
changing customer requirements through frequent releases in short development
cycles, which improve productivity and introduce checkpoints at which new
customer requirements can be adopted.
- XP promotes high customer involvement, rapid feedback loops, continuous testing,
and planning. It emphasizes close collaboration between developers and customers,
simple and clear code, and a proactive approach to tackling changes.
- The core values of XP—communication, simplicity, feedback, courage, and respect
—drive the development process, ensuring that the team remains focused on
delivering high-quality software that meets customer needs.
- To illustrate an agile process in more detail, consider XP, the most widely used
approach to agile software development. Although early work on the ideas and
methods associated with XP occurred during the late 1980s, the seminal work on the
subject has been written by Kent Beck (2004). More recently, a variant of XP, called
Industrial XP (IXP), has been proposed (Kerievsky, 2005). IXP refines XP and
targets the agile process specifically for use within large organizations
XP Values
In "Extreme Programming Explained," Beck (2004) outlines five core values that
serve as the foundation for all work within XP: communication, simplicity, feedback,
courage, and respect. These values drive specific XP activities, actions, and tasks.
i. Communication: Effective communication between software engineers and
stakeholders is vital for establishing required features and functions. XP promotes
close, informal (verbal) collaboration between customers and developers, using
effective metaphors to convey important concepts, providing continuous feedback,
and minimizing the use of extensive documentation as a communication medium.
ii. Simplicity: Developers are encouraged to design for immediate needs rather than
future ones, resulting in a simple design that can be easily implemented. If
improvements are necessary, the design can be refactored later.
iii. Feedback: Feedback comes from the implemented software, the customer, and
other team members. By implementing an effective testing strategy, feedback is
gathered through test results. XP relies heavily on unit tests as a primary testing
tactic. Each class developed is accompanied by a unit test, and user stories or use
cases implemented in increments are used as the basis for acceptance tests. Feedback
is also provided to customers regarding cost and schedule impact as new
requirements emerge during iterative planning.
iv. Courage (or Discipline): Adhering to XP practices requires courage, or more
accurately, discipline. There is often pressure to design for future requirements, but
an agile XP team must design for current needs, understanding that future
requirements may change significantly, necessitating major rework.
v. Respect: By adhering to these values, the agile team fosters respect among team
members, between stakeholders and team members, and indirectly, for the software
itself. Successful delivery of software increments enhances respect for the XP
process.
These values form the bedrock of XP, guiding the team in delivering high-quality
software while maintaining a productive and collaborative environment.
The 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.
1) Planning
The planning activity (also called the planning game) begins with listening—a
requirements gathering activity that enables the technical members of the XP team to
understand the business context for the software and to get a broad feel for required
output and major features and functionality.
Listening leads to the creation of a set of “stories” (also called user stories) that
describe required output, features, and functionality for software to be built.
User Stories:
Creation: Stories describe the required output, features, and functionality.
Written by Customer: Each story is placed on an index card.
Value Assignment: The customer assigns a priority based on the business value.
Cost Estimation: The XP team estimates the cost in development weeks.
- If a story exceeds three weeks, it is split into smaller stories.
Grouping Stories:
Collaboration: Customers and developers decide how to group stories into the next
release.
Commitment: Agreement on included stories, delivery date, and project matters.
Ordering Stories:
- Implement all stories immediately (within a few weeks).
- Prioritize and implement the highest value stories first.
- Prioritize and implement the riskiest stories first.
Project Velocity:
Definition: The number of customer stories implemented during the first release.
Usage: - Helps estimate delivery dates and schedules for subsequent releases.
- Determines if there is an overcommitment for all stories across the project.
- Adjustments made by modifying release content or changing end delivery dates.
Iterative Adjustments:
Customer Role: Can add, change, split, or eliminate stories.
Team Role: Reconsiders all remaining releases and modifies plans accordingly.
Key Components of XP Planning:
• User Stories: Descriptions of required output, features, and functionality.
• Values and Priorities: Assigned by the customer based on business value.
• Cost Estimation: Measured in development weeks by the XP team.
• Project Velocity: Number of stories implemented during the first release, used for
future planning.
• Iterative Adjustments: Continuous adjustments based on new or changed stories
2) 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 design of extra functionality is discouraged.
XP encourages the use of CRC cards(tool)
CRC Cards: Used to think about the software in an object-oriented context.
(functions and attributes to manipulate the data model)
CRC (Class-Responsibility-Collaborator) Cards: Identify and organize object-
oriented classes relevant to the current software increment.
Design Exercise: The XP team conducts the design exercise using CRC cards, which
are the only design work product produced as part of the XP process.
If a difficult design problem is encountered as part of the design of a story, XP
recommends the immediate creation of an operational prototype of that portion of the
design. Called a spike solution, the design prototype is 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. It is a
disciplined way to clean up code [and modify/simplify the internal design] that
minimizes the chances of introducing bugs. In essence, when you refactor you are
improving the design of the code after it has been written.
- Design is viewed as a transient artifact (short term purpose) that can and should be
continually modified as construction proceeds.
- The intent of refactoring is to control these modifications by suggesting small
design changes that “can radically improve the design”. It should be noted, however,
that the effort required for refactoring can grow dramatically as the size of an
application grows.
A central notion in XP is that design occurs both before and after coding
commences. Refactoring means that design occurs continuously as the system is
constructed. In fact, the construction activity itself will provide the XP team with
guidance on how to improve the design.
Key Points:
• Simplicity: Emphasizes keeping the design simple and avoiding unnecessary
complexity.
• CRC Cards: Effective for organizing and thinking about object-oriented design.
• Spike Solutions: Used to address and mitigate risks in difficult design problems.
• Continuous Refactoring: Ensures that the design remains optimal and clean
throughout development.
3) Coding
Unit Tests First: Before coding begins, the team develops unit tests for each story
included in the current release (software increment).
Purpose of Unit Tests: Helps developers focus on what must be implemented to pass
the test, ensuring simplicity (KIS principle).
Instant Feedback: Once the code is complete, it can be unit-tested immediately,
providing instant feedback to developers.
Pair Programming:
Concept: Two developers work together at one computer workstation to create code
for a story.
Benefits:
Real-time Problem Solving: Two heads are often better than one.
Real-time Quality Assurance: Code is reviewed as it is created.
Focus: Keeps developers focused on the task at hand.
Roles:
One developer may focus on coding details.
The other ensures coding standards are followed and verifies the code meets the unit
test requirements.
Continuous Integration:
Integration of Code: Code developed by pair programmers is integrated with the
work of others.
Integration can be performed daily by an integration team or by the pair
programmers themselves.
Benefits of Continuous Integration:
Avoids compatibility and interfacing problems.
Provides a "smoke testing" environment to uncover errors early.
Key Points:
Unit Tests: Developed before coding to guide the implementation and ensure
simplicity.
Pair Programming: Enhances problem-solving, quality assurance, and focus.
Continuous Integration: Ensures compatibility and early error detection.
4) Testing
Unit Testing:
Key Element: Unit tests are created before coding begins.
Automation: Unit tests should be implemented using a framework that enables
automation.
Regression Testing: Automated tests encourage a regression testing strategy whenever
code is modified, supporting XP's refactoring philosophy.
Universal Testing Suite: Individual unit tests are organized into a universal testing suite,
allowing for daily integration and validation testing.
Benefits:
Provides continual progress updates.
Raises early warning flags if issues arise.
"Fixing small problems every few hours takes less time than fixing huge problems just
before the deadline." - Wells (1999)
Acceptance Testing:
Also Known As: Customer tests.
Specification: Specified by the customer.
Focus: Overall system features and functionality that are visible and reviewable by the
customer.
Derivation: Derived from user stories implemented as part of a software release.
Key Points:
• Pre-Coding Unit Tests: Created to guide development and ensure code meets requirements.
• Automated Testing Framework: Facilitates easy and repeated execution of tests.
• Continuous Integration and Validation: Daily testing provides continuous progress updates
and early issue detection.
• Customer-Driven Acceptance Tests: Ensure the system meets customer expectations and
requirements.
Industrial XP (IXP)
Joshua Kerievsky [Ker05] describes Industrial Extreme Programming (IXP) in the
following manner: “IXP is an organic evolution of XP. It is imbued with XP’s
minimalist, customer-centric, test-driven spirit. IXP differs most from the original XP in
its greater inclusion of management, its expanded role for customers, and its upgraded
technical practices.”
IXP incorporates six new practices that are designed to help ensure that an XP project
works successfully for significant projects within a large organization.
1) Readiness assessment. Prior to the initiation of an IXP project, the organization
should conduct a readiness assessment.
The assessment ascertains whether
(1) an appropriate development environment exists to support IXP,
(2) the team will be populated by the proper set of stakeholders,
(3) the organization has a distinct quality program and supports continuous
4) the organizational culture will support the new values of an agile team,
(5) the broader project community will be populated appropriately.
2) Project Community
Classic XP: Emphasizes using the right people to populate the agile team.
Attributes: Well-trained, adaptable, skilled, and having the proper temperament for a
self-organizing team.
Community Concept:
Large Organizations: For significant projects, the concept of the "team" expands to a
"community."
Community Members:
Central Members: Technologists and customers crucial to the project's success.
Peripheral Members: Other stakeholders such as legal staff, quality auditors,
manufacturing, or sales personnel.
Although they may be on the periphery, they play important roles in the project.
Roles and Coordination:
• Explicit Roles: In IXP, the roles of community members should be explicitly defined.
• Communication and Coordination: Establish mechanisms to facilitate communication
and coordination between community members.
Ensures that all stakeholders are aligned and can contribute effectively to the project.
3) Project chartering.
The IXP team assesses the project itself to determine whether an appropriate
business justification for the project exists and whether the project will further the
overall goals and objectives of the organization. Chartering also examines the
context of the project to determine how it complements, extends, or replaces existing
systems or processes.
4) Test-driven management.
An IXP project requires measurable criteria for assessing the state of the project and
the progress that has been made to date. 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. An IXP team conducts a specialized technical review
after a software increment is delivered. Called a retrospective,
the review examines “issues, events, and lessons-learned” [Ker05] across a
software increment and/or the entire software release. The intent is to
improve the IXP process.
6) Continuous learning. Because learning is a vital part of continuous
process improvement, members of the XP team are encouraged (and possibly,
incented) to learn new methods and techniques that can lead to a higherquality
product.
In addition to the six new practices discussed, IXP modifies a number of existing
XP practices.
- Story-driven development (SDD) insists that stories for acceptance tests be written
before a single line of code is generated.
- Domain-driven design (DDD) is an improvement on the “system metaphor”
concept used in XP. DDD suggests the evolutionary creation of a domain model that
“accurately represents how domain experts think about their subject”.
- Pairing extends the XP pair programming concept to include managers and other
stakeholders. The intent is to improve knowledge sharing among XP team members
who may not be directly involved in technical development.
- Iterative usability discourages front-loaded interface design in favor of usability
design that evolves as software increments are delivered and users’ interaction with
the software is studied.
The XP Debate
• Requirements volatility. Because the customer is an active member of the XP
team, changes to requirements are requested informally. As a consequence,
the scope of the project can change and earlier work may have to be
modified to accommodate current needs. Proponents argue that this happens
regardless of the process that is applied and that XP provides mechanisms for
controlling scope creep.
• Conflicting customer needs. Many projects have multiple customers, each with
his own set of needs. In XP, the team itself is tasked with assimilating the
needs of different customers, a job that may be beyond their scope of
authority.
• Requirements are expressed informally. User stories and acceptance tests are
the only explicit manifestation of requirements in XP. Critics argue that a
more formal model or specification is often needed to ensure that omissions,
inconsistencies, and errors are uncovered before the system is built. Proponents
counter that the changing nature of requirements makes such models
and specification obsolete almost as soon as they are developed.
• Lack of formal design. XP deemphasizes the need for architectural design and
in many instances, suggests that design of all kinds should be relatively
informal. Critics argue that when complex systems are built, design must be
emphasized to ensure that the overall structure of the software will exhibit
quality and maintainability. XP proponents suggest that the incremental
nature of the XP process limits complexity (simplicity is a core value) and
therefore reduces the need for extensive design.

Software Engineering - Introduction to software engineering

  • 1.
  • 2.
    SOFTWARE ENGINEERING In orderto build software that is ready to meet the challenges of the twenty- first century, you must recognize a few simple realities: i. Understand the problem before you build a solution. - Software is ubiquitous in our daily lives, influencing everything we do. - Interest in specific application features is growing among users. - When developing new software, there are often diverse opinions on desired functionalities. - Understanding the problem thoroughly is crucial before starting software development. - Clear communication and alignment among stakeholders are essential for successful software projects.
  • 3.
    ii. Design isa pivotal software engineering activity. - IT needs for individuals, businesses, and governments are becoming more intricate each year. - Software development, once done by individuals, now involves large teams. - Modern software is embedded in diverse devices from electronics to medical tools to weapons. - The complexity of these systems requires careful consideration of all components. - Designing these systems is crucial due to their interdependent nature and wide- ranging applications
  • 4.
    iii. Both qualityand maintainability are an outgrowth of good design. - Software is vital for decision-making and daily operations in individuals, businesses, and governments. - Failures in software can range from minor inconveniences to catastrophic outcomes. - Therefore, ensuring high-quality software is crucial to prevent disruptions and ensure reliability. - Quality assurance and testing are essential to meet user expectations and prevent critical failures. As the perceived value of a specific application grows, the likelihood is that its user base and longevity will also grow. As its user base and time-in-use increase, demands for adaptation and enhancement will also grow. It follows that software should be maintainable.
  • 5.
    Conclusion: Software inall of its forms and across all of its application domains should be engineered. Definition of software engineering by Fritz Bauer: "Establishment and use of sound engineering principles to economically obtain software that is reliable and works on real machines efficiently." IEEE defines software engineering as: “The application of a systematic, disciplined, quantifiable approach to the development, operation and maintenance of software.”
  • 6.
    Software engineering isa layered technology. It encompasses a process, methods for managing and engineering software, and tools. Software engineering layers
  • 7.
    Quality focus: - Anyengineering approach (including software engineering) must rest on an organizational commitment to quality. - Total quality management, Six Sigma, and similar philosophies10 foster a continuous process improvement culture, and it is this culture that ultimatelyleads to the development of increasingly more effective approaches to software engineering. - The bedrock that supports software engineering is a quality focus.
  • 8.
    Process: - The foundationfor software engineering is the process layer. - The software engineering process is the glue that holds the technology layers together and enables rational and timely development of computer software. - Process defines a framework that must be established for effective delivery of software engineering technology. - The software process forms the basis for management control of software project and establishes the context in which technical methods are applied, work product(models, documents, data, reports, forms, etc.) are produced, milestones are established, quality is ensured, and change is properly managed. Methods: - Methods provide the technical how-to’s for building software. - Methods encompass a broad array of tasks that includes,
  • 9.
    • Communication, • Requirementsanalysis, • Design modeling, • Program construction, • Testing, • Support - Methods rely on a set of basic principles that govern each area of the technology and include modeling activities and other descriptive techniques. Tools: - Tools provide automated or semiautomated support for the process and the methods. (provides a self-os for process & methods)
  • 10.
    - When toolsare integrated so that information created by one tool can be used by another, a system for the support of software development, called computer-aided software engineering, is established. THE SOFTWARE PROCESS What are the elements of a software process? - The process is a collection of activities, actions, and tasks that are performed whensome work product is to be created. - An activity strives to achieve a broad objective (e.g., communication with stakeholders) and is applied regardless of the application domain, size of the project, complexity of the effort, or degree of rigor with which software engineering is to be applied.
  • 11.
    - An action(e.g., architectural design) encompasses a set of tasks that produce a major work product (e.g., an architectural design model) - A task focuses on a small, but well-defined objective (e.g., conducting a unit test) that produces a tangible outcome. In the context of software engineering, a process is not a rigid prescription for how to build computer software. Rather, it is an adaptable approach that enables the people doing the work (the software team) to pick and choose the appropriate set of work actions and tasks. The intent is always to deliver software in a timely manner and with sufficient quality to satisfy those who have sponsored its creation and those who will use it.
  • 12.
    A process frameworkestablishes the foundation for a complete software engineering process by identifying a small number of framework activities that are applicable to all software projects, regardless of their size or complexity. In addition, the process framework encompasses a set of umbrella activities that are applicable across the entire software process. The five generic process framework activities:  Communication (understand the requirements)  Planning (map—called asoftware project plan—defines the software engineering work by describing the technical tasks to be conducted, the risks that are likely, the resources that will be required, the work products to be produced, and a work schedule)  Modeling (design the model-”sketch”)  Construction (combination of code generation & testing)  Deployment (finished software product)
  • 13.
    These five genericframework activities can be used during the development of small, simple programs, the creation of large Web applications, and for the engineering of large, complex computer-based systems. The details of the software process will be quite different in each case, but the framework activities remain the same. For many software projects, framework activities are applied iteratively as a project progresses. That is, communication, planning, modeling, construction, and deployment are applied repeatedly through a number of project iterations. Each project iteration produces a software increment that provides stakeholders with a subset of overall software features and functionality. As each increment is produced, the software becomes more and more complete.
  • 14.
    Software engineering processframework activities are complemented by a number of umbrella activities. In general, umbrella activities are applied throughout a software project and help a software team manage and control progress, quality, change, and risk. Umbrella activities occur throughout the software process and focus primarily on project management, tracking, and control. Typical umbrella activities includes, 1) Software project tracking and control—allows the software team to assess progress against the project plan and take any necessary action to maintain the schedule. 2) Risk management—assesses risks that may affect the outcome of the project or the quality of the product. 3) Software quality assurance—defines and conducts the activities required to ensure software quality.(testing)
  • 15.
    4) Technical reviews—assessessoftware engineering work products in an effort to uncover and remove errors before they are propagated to the next activity. 5) Measurement—defines and collects process, project, and product measures that assist the team in delivering software that meets stakeholders’ needs; can be used in conjunction with all other framework and umbrella activities. 6) Software configuration management—manages the effects of change throughout the software process. 7) Reusability management—defines criteria for work product reuse (including software components) and establishes mechanisms to achieve reusable components. 8) Work product preparation and production—encompasses the activities required to create work products such as models, documents, logs, forms, and lists.
  • 16.
    How do processmodels differ from one another? The differences are • Overall flow of activities, actions, and tasks and the interdependencies among them • Degree to which actions and tasks are defined within each framework activity • Degree to which work products are identified and required • Manner in which quality assurance activities are applied • Manner in which project tracking and control activities are applied • Overall degree of detail and rigor with which the process is described • Degree to which the customer and other stakeholders are involved with the project • Level of autonomy given to the software team (decision making, methodologies, tools, task mgmt., problem solving, communication & collaboration- for a satisfied product outcome) • Degree to which team organization and roles are prescribed
  • 17.
    Perspective Process Models -Prescriptive process models were originally proposed to bring order to the chaos of software development. It has said that these traditional models have brought a certain amount of useful structure to software engineering work and have provided a reasonably effective road map for software teams. - However, software engineering work and the product that it produces remain on “the edge of chaos.” (“If the process is right, the results will take care of themselves.”) - Prescriptive process models are sometimes referred to as “traditional” process models. - Prescriptive process models define a prescribed set of process elements and a predictable process work flow.
  • 18.
    The Waterfall Model Thewaterfall model, sometimes called the classic life cycle, suggests a systematic, sequential approach to software development that begins with customer specification of requirements and progresses through planning, modeling, construction, and deployment, culminating in ongoing support of the completed software.
  • 19.
    A variation inthe representation of the waterfall model is called the V-model. V - Model
  • 20.
    - The V-modeldepicts the relationship of quality assurance actions to the actions associated with communication, modeling, and early construction activities. - As a software team moves down the left side of the V, basic problem requirements are refined into progressively more detailed and technical representations of the problem and its solution. - Once code has been generated, the team moves up the right side of the V, essentially performing a series of tests (quality assurance actions) that validate each of the models created as the team moved down the left side. In reality, there is no fundamental difference between the classic life cycle and the V- model. The V-model provides a way of visualizing how verification and validation actions are applied to earlier engineering work. The waterfall model is the oldest paradigm for software engineering.
  • 21.
    Among the problemsthat are sometimes encountered when the waterfall model is applied are: 1. Real projects rarely follow the sequential flow that the model proposes. Although the linear model can accommodate iteration, it does so indirectly. As a result, changes can cause confusion as the project team proceeds. 2. It is often difficult for the customer to state all requirements explicitly. The waterfall model requires this and has difficulty accommodating the natural uncertainty that exists at the beginning of many projects. 3. The customer must have patience. A working version of the program(s) will not be available until late in the project time span. A major blunder, if undetected until the working program is reviewed, can be disastrous
  • 22.
    - Today, softwarework is fast-paced and subject to a never-ending stream of changes. - The waterfall model is often inappropriate for such work. - However, it can serve as a useful process model in situations where requirements are fixed and work is to proceed to completion in a linear manner. Incremental Process Models - The incremental model combines elements of linear and parallel process flows , the incremental model applies linear sequences in a staggered fashion as calendar time progresses. - Each linear sequence produces deliverable “increments” of the software in a manner that is similar to the increments produced by an evolutionary process flow.
  • 23.
    - This modelwas built to mediate the shortcomings of the Waterfall Model, the incremental model consists of iterative and incremental development stages. The Incremental Model is essentially comprised of several mini waterfall cycles. - This model divides the development into small sections/stages and it can allow the software developers to take advantage of learnings and insights gleaned from earlier development stages.
  • 24.
  • 25.
    - The firstincrement is often a core product. That is, basic requirements are addressed but many supplementary features (some known, others unknown) remain undelivered. The core product is used by the customer. - As a result of use and/or evaluation, a plan is developed for the next increment. The plan addresses the modification of the core product to better meet the needs of the customer and the delivery of additional features and functionality. This process is repeated following the delivery of each increment, until the complete product is produced. - The incremental process model focuses on the delivery of an operational product with each increment. Early increments are stripped-down versions of the final product, but they do provide capability that serves the user and also provide a platform for evaluation by the user.
  • 26.
    - The IncrementalModel is a great solution for projects that need accommodation for some change requests between increments. This model also yields the benefit of being able to detect problems earlier in the software development for better lifecycle management planning. Evolutionary Process Model - The evolutionary model is based on the concept of making an initial product and then evolving the software product over time with iterative and incremental approaches with proper feedback. - In this type of model, the product will go through several iterations and come up when the final product is built through multiple iterations. - The development is carried out simultaneously with the feedback during the development.
  • 27.
    - This modelhas a number of advantages such as customer involvement, taking feedback from the customer during development, and building the exact product that the user wants. - Because of the multiple iterations, the chances of errors get reduced and the reliability and efficiency will increase. There are two common evolutionary process models, • Prototyping • Spiral Model Prototyping: a prototyping (advancement from the original product) paradigm may offer the best approach. (for efficiency of an algorithm, the adaptability of an operating system, or the form that human-machine interaction) Although prototyping can be used as a stand-alone process model, it is more commonly used as a technique that can be implemented within the context of any one of the process models.
  • 28.
    The prototyping paradigmassists you and other stakeholders to better understand what is to be built when requirements are fuzzy. The prototyping paradigm
  • 29.
    The prototyping paradigmbegins with communication. (You meet with other stakeholders to define the overall objectives for the software, identify whatever requirements are known, and outline areas where further definition is mandatory.) Prototyping iteration is planned quickly, and modeling (in the form of a “quick design”) occurs. A quick design focuses on a representation of those aspects of the software that will be visible to end users. The quick design leads to the construction of a prototype. The prototype is deployed and evaluated by stakeholders, who provide feedback that is used to further refine requirements. The prototype serves as a mechanism for identifying software requirements. If a working prototype is to be built, you can make use of existing program fragments or apply tools that enable working programs to be generated quickly.
  • 30.
    Both stakeholders andsoftware engineers like the prototyping paradigm, as the developers feels the actual systems are built immediately. Yet, prototyping can be problematic for the following reasons, 1) Prototype Trap and Quality Concerns: - Stakeholders often see a seemingly functional prototype without realizing it lacks proper structure and long-term maintainability. - Rushed development sacrifices overall software quality. - When urged to rebuild for quality, stakeholders resist and demand quick fixes. Management often yields to these demands, compromising long-term integrity.
  • 31.
    2) Implementation Compromises: -Software engineers may compromise on implementation to achieve quick prototype functionality. - Choices like using familiar but inappropriate operating systems or programming languages are made. - Inefficient algorithms may be implemented to demonstrate capability. - Over time, engineers may grow comfortable with these compromises, forgetting their initial drawbacks. - These compromises can integrate into the system, potentially impacting its efficiency and maintainability in the long run.
  • 32.
    Although problems canoccur, prototyping can be an effective paradigm for software engineering. The key is to define the rules of the game at the beginning; that is, all stakeholders should agree that the prototype is built to serve as a mechanism for defining requirements. It is then discarded (at least in part), and the actual software is engineered with an eye toward quality. The Spiral Model: The Spiral Model combines elements of both the Iterative and Waterfall development models, in efforts to combine advantages of top-down and bottom-up production. - The Spiral Model has four phases – Identification, Design, Construct/Build, Evaluation and Risk Analysis. - The software project repeatedly passes through these phases in iterations called spirals. - It provides the potential for rapid development of increasingly more complete versions of the software.
  • 33.
    Boehm describes themodel in the following manner: The spiral development model is a risk-driven process model generator that is used to guide multi-stakeholder concurrent engineering of software intensive systems. It has two main distinguishing features, • One is a cyclic approach for incrementally growing a system’s degree of definition and implementation while decreasing its degree of risk. • The other is a set of anchor point milestones for ensuring stakeholder commitment to feasible and mutually satisfactory system solutions. Using the spiral model, software is developed in a series of evolutionary releases. During early iterations, the release might be a model or prototype and during later iterations, increasingly more complete versions of the engineered system are produced.
  • 34.
  • 35.
    A spiral modelis divided into a set of framework activities defined by the software engineering team and uses the generic framework activities. Each of the framework activities represent one segment of the spiral path. As this evolutionary process begins, the software team performs activities that are implied by a circuit around the spiral in a clockwise direction, beginning at the center. The first circuit around the spiral might result in the development of a product specification; subsequent passes around the spiral might be used to develop a prototype and then progressively more sophisticated versions of the software. Each pass through the planning region results in adjustments to the project plan. Cost and schedule are adjusted based on feedback derived from the customer after delivery. In addition, the project manager adjusts the planned number of iterations required to complete the software.
  • 36.
    Evolutionary process modelswere conceived to address these issues, and yet, as a general class of process models, they too have weaknesses. Despite the unquestionable benefits of evolutionary software processes, we have some concerns. - The first concern is that prototyping poses a problem to project planning because of the uncertain number of cycles required to construct the product. Most project management and estimation techniques are based on linear layouts of activities, so they do not fit completely. - Second, evolutionary software processes do not establish the maximum speed of the evolution. If the evolutions occur too fast, without a period of relaxation, it is certain that the process will fall into chaos. On the other hand if the speed is too slow then productivity could be affected . . .
  • 37.
    - Third, softwareprocesses should be focused on flexibility and extensibility rather than on high quality. This assertion sounds scary. However, we should prioritize the speed of the development over zero defects. Extending the development in order to reach high quality could result in a late delivery of the product, when the opportunity niche has disappeared. This paradigm shift is imposed by the competition on the edge of chaos. The intent of evolutionary models is to develop high-quality software in an iterative or incremental manner. However, it is possible to use an evolutionary process to emphasize flexibility, extensibility, and speed of development. The challenge for software teams and their managers is to establish a proper balance between these critical project and product parameters and customer satisfaction.
  • 38.
    SPECIALIZED PROCESS MODELS Specializedprocess models take on many of the characteristics of one or more of the traditional models. However, these models tend to be applied when a specialized or narrowly defined software engineering approach is chosen. Component-Based Development What is Component-Based Development (CBD)? • CBD uses pre-made software parts called "components" to build applications. • These components are created by vendors and have specific functions with clear interfaces. • The CBD model is similar to the spiral model, meaning it is iterative and evolutionary.
  • 39.
    Steps in Component-BasedDevelopment: • Research and Evaluate Components: Look for existing components that fit the needs of your application. Example: If you're building an e-commerce site, you might look for a pre-made payment processing component. • Consider Integration Issues: Think about how these components will work together within your system. Example: Ensure that the payment processing component can communicate with your shopping cart system. • Design the Software Architecture: Plan a structure that can include all the chosen components. Example: Create a layout that integrates the payment processor, user management, and product catalog components.
  • 40.
    • Integrate Components:Assemble the chosen components into the designed architecture. Example: Connect the payment processing system to the rest of the e-commerce platform. • Conduct Comprehensive Testing: Test the complete system to make sure all components work together correctly. Example: Check if the payment goes through correctly when a customer buys a product. Benefits of Component-Based Development: 1) Software Reuse: Using pre-made components can save time and reduce costs. Example: Instead of building a payment system from scratch, use an existing, tested component.
  • 41.
    2) Reduced DevelopmentTime: Building software with pre-made parts is faster than creating everything from scratch. Example: An e-commerce site can be developed quicker by using existing components for user login, product catalog, and payment processing. 3) Reduced Project Cost: Less development time and effort can lower the overall cost of the project. Example: By reusing components, you spend less on development resources and can bring the product to market faster. Component-Based Development is like building with LEGO bricks. Instead of creating each brick yourself, you use pre-made bricks to build your structure. This approach saves time and money, ensures quality through reuse, and makes the development process more efficient.
  • 42.
    The Formal MethodsModel Formal Methods Model: A set of activities that leads to the formal mathematical specification of computer software. (To ensure the correctness of our programs and reduction in the program’s error.) Purpose: To specify, develop, and verify computer-based systems using rigorous mathematical notation. Variation: Cleanroom Software Engineering. Key Benefits: Reduces Issues: Helps eliminate ambiguity, incompleteness, and inconsistency through mathematical analysis, not ad hoc review. Error Detection: Serves as a basis for program verification, allowing errors to be found and fixed that might otherwise be missed.
  • 43.
    Challenges: • Time-Consuming andExpensive: Developing formal models takes a lot of time and can be costly. • Requires Training: Few developers have the necessary background; extensive training is needed. • Communication Issues: Difficult to use models to communicate with customers who are not technically sophisticated. Applications: Safety-Critical Software: Used by developers of aircraft avionics, medical devices, and other critical systems where defects can be very costly or dangerous.
  • 44.
    Example: Imagine youare designing software for an airplane's navigation system. Using formal methods, you would: Specify Requirements: Clearly define all requirements in a mathematical format. Develop and Verify: Use these formal specifications to develop the software and verify its correctness through mathematical proofs. While formal methods are not widely used due to the challenges mentioned, they offer a path to developing highly reliable, defect-free software, especially important in areas where safety and economic stakes are high.
  • 45.
    AGILE DEVELOPMENT Agile softwaredevelopment is an approach focused on iterative development, where requirements and solutions evolve through collaboration between self-organizing cross-functional teams. It addresses the unpredictability and dynamism of software projects. Agile Process Agile software processes are designed to handle the unpredictable nature of software projects.
  • 47.
    Key Assumptions: • ChangingRequirements: It's hard to predict which requirements will stay the same and which will change. Customer priorities can shift during the project. • Interleaved Design and Construction: Design and construction happen together. Design models are validated as they are created. It's difficult to know how much design is needed before construction starts. • Unpredictable Planning: Analysis, design, construction, and testing are not always predictable.
  • 48.
    Managing Unpredictability: • ProcessAdaptability: -Agile processes are adaptable to rapidly changing project and technical conditions. -Continual adaptation is key but must be balanced with forward progress. • Incremental Adaptation: - Agile processes adapt incrementally. - Regular customer feedback is essential for appropriate adaptations. • Incremental Development: - Software is delivered in small, functional increments (prototypes or portions of the system). - Short development cycles ensure that adaptations keep pace with changes. Customers evaluate each increment, provide feedback, and influence future adaptations.
  • 49.
    Benefits of AgileProcess: Reduces Change Costs: Software is released in increments, making change easier to manage. - the graph shows that agile processes reduce the cost of changes compared to conventional methods.
  • 50.
    Dynamic and Growth-Oriented: Agileprocesses are dynamic, specific to the context, and embrace change aggressively. Example: Imagine developing a mobile app for a retail store. Using agile methods: i. Incremental Releases: - You release a basic version of the app with core features. Gather customer feedback. - Use feedback to make improvements and add new features in subsequent releases. ii. Customer Feedback Loop: - Customers regularly test and provide feedback. - Your team adapts and updates the app in response to feedback, ensuring the final product meets customer needs.
  • 51.
    Agile software processesfocus on adaptability and incremental progress, handling changes effectively through continuous customer feedback and iterative development. This approach makes it easier to manage unpredictability and deliver software that meets evolving customer needs. Agility Principles 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.
  • 52.
    4. Business peopleand 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.
  • 53.
    11. The bestarchitectures, 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 - There is a significant debate about the benefits and applicability of agile software development versus traditional software engineering processes. - This debate can sometimes become intense, with strong opinions on both sides.
  • 54.
    Pro-Agility vs. TraditionalMethods: Pro-Agility Camp ("Agilists"): Extreme View: Traditional methodologists are seen as overly focused on producing flawless documentation rather than delivering a working system that meets business needs. Perspective: Agile proponents prioritize adaptability and delivering functional software quickly. Traditional Software Engineering Camp: Extreme View: Agile methodologists are viewed as glorified hackers who may struggle to scale their methods for enterprise-wide software.(their methods can’t handle large, complex projects in big companies) Perspective: Traditionalists prioritize thorough planning, extensive documentation, and structured processes to ensure quality and scalability.
  • 55.
    Key Traits ofan Effective Agile Team To successfully drive the characteristics of the process in agile development, certain key traits must exist among the people on an agile team and the team itself: 1. Competence: Encompasses innate talent, specific software-related skills, and overall knowledge of the chosen process. Importance: Skill and knowledge can and should be taught to all agile team members. Example: A team member with strong coding skills and knowledge of agile methodologies can help guide others in best practices. 2. Common Focus: Despite performing different tasks and bringing different skills, all team members should focus on one goal—delivering a working software increment to the customer on time. Continual Adaptation: The team focuses on continual small and large adaptations to make the process fit their needs. Example: Developers, testers, and designers all working towards releasing a functional feature by the end of the sprint.
  • 56.
    3. Collaboration: Involvesassessing, analyzing, and using information communicated to the team, creating understandable information for all stakeholders, and building valuable software. Stakeholder Interaction: Team members must collaborate with one another and all stakeholders. Example: Regular stand-up meetings where team members discuss progress, challenges, and next steps. 4. Decision-Making Ability: The team must have the freedom to control its own destiny, implying autonomy in decision-making for both technical and project issues. Example: The team decides the scope of work for the upcoming sprint based on their capabilities and project needs. 5. Fuzzy Problem-Solving Ability: Agile teams must deal with ambiguity and change, often solving different problems than initially expected. Adaptability: Lessons learned from solving any problem can benefit the team later.
  • 57.
    Example: The teamquickly pivots to address a newly identified user need, using insights from previous iterations. 6. Mutual Trust and Respect: The team must become a “jelled” team, exhibiting trust and respect to make the whole greater than the sum of its parts. Team Dynamics: Trust and respect are crucial for effective collaboration and morale. Example: Team members feel comfortable sharing ideas and feedback without fear of criticism. 7. Self-Organization: Involves the team organizing itself for the work to be done, the process to accommodate its environment, and the work schedule to achieve delivery of the software increment. Benefits: Improves collaboration, boosts morale, and allows the team to serve as its own management. Example: The team plans its work for the sprint, selects the tasks it can accomplish, and commits to fulfilling those commitments.
  • 58.
    EXTREME PROGRAMMING - ExtremeProgramming (XP) is a widely used agile software development methodology that emphasizes customer satisfaction, flexibility, and continuous improvement through iterative development cycles. - The approach focuses on enhancing software quality and responsiveness to changing customer requirements through frequent releases in short development cycles, which improve productivity and introduce checkpoints at which new customer requirements can be adopted. - XP promotes high customer involvement, rapid feedback loops, continuous testing, and planning. It emphasizes close collaboration between developers and customers, simple and clear code, and a proactive approach to tackling changes.
  • 59.
    - The corevalues of XP—communication, simplicity, feedback, courage, and respect —drive the development process, ensuring that the team remains focused on delivering high-quality software that meets customer needs. - To illustrate an agile process in more detail, consider XP, the most widely used approach to agile software development. Although early work on the ideas and methods associated with XP occurred during the late 1980s, the seminal work on the subject has been written by Kent Beck (2004). More recently, a variant of XP, called Industrial XP (IXP), has been proposed (Kerievsky, 2005). IXP refines XP and targets the agile process specifically for use within large organizations
  • 60.
    XP Values In "ExtremeProgramming Explained," Beck (2004) outlines five core values that serve as the foundation for all work within XP: communication, simplicity, feedback, courage, and respect. These values drive specific XP activities, actions, and tasks. i. Communication: Effective communication between software engineers and stakeholders is vital for establishing required features and functions. XP promotes close, informal (verbal) collaboration between customers and developers, using effective metaphors to convey important concepts, providing continuous feedback, and minimizing the use of extensive documentation as a communication medium. ii. Simplicity: Developers are encouraged to design for immediate needs rather than future ones, resulting in a simple design that can be easily implemented. If improvements are necessary, the design can be refactored later.
  • 61.
    iii. Feedback: Feedbackcomes from the implemented software, the customer, and other team members. By implementing an effective testing strategy, feedback is gathered through test results. XP relies heavily on unit tests as a primary testing tactic. Each class developed is accompanied by a unit test, and user stories or use cases implemented in increments are used as the basis for acceptance tests. Feedback is also provided to customers regarding cost and schedule impact as new requirements emerge during iterative planning. iv. Courage (or Discipline): Adhering to XP practices requires courage, or more accurately, discipline. There is often pressure to design for future requirements, but an agile XP team must design for current needs, understanding that future requirements may change significantly, necessitating major rework.
  • 62.
    v. Respect: Byadhering to these values, the agile team fosters respect among team members, between stakeholders and team members, and indirectly, for the software itself. Successful delivery of software increments enhances respect for the XP process. These values form the bedrock of XP, guiding the team in delivering high-quality software while maintaining a productive and collaborative environment.
  • 63.
    The XP Process ExtremeProgramming 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.
  • 64.
    1) Planning The planningactivity (also called the planning game) begins with listening—a requirements gathering activity that enables the technical members of the XP team to understand the business context for the software and to get a broad feel for required output and major features and functionality. Listening leads to the creation of a set of “stories” (also called user stories) that describe required output, features, and functionality for software to be built. User Stories: Creation: Stories describe the required output, features, and functionality. Written by Customer: Each story is placed on an index card. Value Assignment: The customer assigns a priority based on the business value. Cost Estimation: The XP team estimates the cost in development weeks. - If a story exceeds three weeks, it is split into smaller stories.
  • 65.
    Grouping Stories: Collaboration: Customersand developers decide how to group stories into the next release. Commitment: Agreement on included stories, delivery date, and project matters. Ordering Stories: - Implement all stories immediately (within a few weeks). - Prioritize and implement the highest value stories first. - Prioritize and implement the riskiest stories first.
  • 66.
    Project Velocity: Definition: Thenumber of customer stories implemented during the first release. Usage: - Helps estimate delivery dates and schedules for subsequent releases. - Determines if there is an overcommitment for all stories across the project. - Adjustments made by modifying release content or changing end delivery dates. Iterative Adjustments: Customer Role: Can add, change, split, or eliminate stories. Team Role: Reconsiders all remaining releases and modifies plans accordingly.
  • 67.
    Key Components ofXP Planning: • User Stories: Descriptions of required output, features, and functionality. • Values and Priorities: Assigned by the customer based on business value. • Cost Estimation: Measured in development weeks by the XP team. • Project Velocity: Number of stories implemented during the first release, used for future planning. • Iterative Adjustments: Continuous adjustments based on new or changed stories 2) 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 design of extra functionality is discouraged.
  • 68.
    XP encourages theuse of CRC cards(tool) CRC Cards: Used to think about the software in an object-oriented context. (functions and attributes to manipulate the data model) CRC (Class-Responsibility-Collaborator) Cards: Identify and organize object- oriented classes relevant to the current software increment. Design Exercise: The XP team conducts the design exercise using CRC cards, which are the only design work product produced as part of the XP process. If a difficult design problem is encountered as part of the design of a story, XP recommends the immediate creation of an operational prototype of that portion of the design. Called a spike solution, the design prototype is 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.
  • 69.
    Refactoring is theprocess 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. It is a disciplined way to clean up code [and modify/simplify the internal design] that minimizes the chances of introducing bugs. In essence, when you refactor you are improving the design of the code after it has been written. - Design is viewed as a transient artifact (short term purpose) that can and should be continually modified as construction proceeds. - The intent of refactoring is to control these modifications by suggesting small design changes that “can radically improve the design”. It should be noted, however, that the effort required for refactoring can grow dramatically as the size of an application grows. A central notion in XP is that design occurs both before and after coding commences. Refactoring means that design occurs continuously as the system is constructed. In fact, the construction activity itself will provide the XP team with guidance on how to improve the design.
  • 70.
    Key Points: • Simplicity:Emphasizes keeping the design simple and avoiding unnecessary complexity. • CRC Cards: Effective for organizing and thinking about object-oriented design. • Spike Solutions: Used to address and mitigate risks in difficult design problems. • Continuous Refactoring: Ensures that the design remains optimal and clean throughout development. 3) Coding Unit Tests First: Before coding begins, the team develops unit tests for each story included in the current release (software increment). Purpose of Unit Tests: Helps developers focus on what must be implemented to pass the test, ensuring simplicity (KIS principle). Instant Feedback: Once the code is complete, it can be unit-tested immediately, providing instant feedback to developers.
  • 71.
    Pair Programming: Concept: Twodevelopers work together at one computer workstation to create code for a story. Benefits: Real-time Problem Solving: Two heads are often better than one. Real-time Quality Assurance: Code is reviewed as it is created. Focus: Keeps developers focused on the task at hand. Roles: One developer may focus on coding details. The other ensures coding standards are followed and verifies the code meets the unit test requirements.
  • 72.
    Continuous Integration: Integration ofCode: Code developed by pair programmers is integrated with the work of others. Integration can be performed daily by an integration team or by the pair programmers themselves. Benefits of Continuous Integration: Avoids compatibility and interfacing problems. Provides a "smoke testing" environment to uncover errors early. Key Points: Unit Tests: Developed before coding to guide the implementation and ensure simplicity. Pair Programming: Enhances problem-solving, quality assurance, and focus. Continuous Integration: Ensures compatibility and early error detection.
  • 73.
    4) Testing Unit Testing: KeyElement: Unit tests are created before coding begins. Automation: Unit tests should be implemented using a framework that enables automation. Regression Testing: Automated tests encourage a regression testing strategy whenever code is modified, supporting XP's refactoring philosophy. Universal Testing Suite: Individual unit tests are organized into a universal testing suite, allowing for daily integration and validation testing. Benefits: Provides continual progress updates. Raises early warning flags if issues arise. "Fixing small problems every few hours takes less time than fixing huge problems just before the deadline." - Wells (1999)
  • 74.
    Acceptance Testing: Also KnownAs: Customer tests. Specification: Specified by the customer. Focus: Overall system features and functionality that are visible and reviewable by the customer. Derivation: Derived from user stories implemented as part of a software release. Key Points: • Pre-Coding Unit Tests: Created to guide development and ensure code meets requirements. • Automated Testing Framework: Facilitates easy and repeated execution of tests. • Continuous Integration and Validation: Daily testing provides continuous progress updates and early issue detection. • Customer-Driven Acceptance Tests: Ensure the system meets customer expectations and requirements.
  • 75.
    Industrial XP (IXP) JoshuaKerievsky [Ker05] describes Industrial Extreme Programming (IXP) in the following manner: “IXP is an organic evolution of XP. It is imbued with XP’s minimalist, customer-centric, test-driven spirit. IXP differs most from the original XP in its greater inclusion of management, its expanded role for customers, and its upgraded technical practices.” IXP incorporates six new practices that are designed to help ensure that an XP project works successfully for significant projects within a large organization. 1) Readiness assessment. Prior to the initiation of an IXP project, the organization should conduct a readiness assessment. The assessment ascertains whether (1) an appropriate development environment exists to support IXP, (2) the team will be populated by the proper set of stakeholders, (3) the organization has a distinct quality program and supports continuous
  • 76.
    4) the organizationalculture will support the new values of an agile team, (5) the broader project community will be populated appropriately. 2) Project Community Classic XP: Emphasizes using the right people to populate the agile team. Attributes: Well-trained, adaptable, skilled, and having the proper temperament for a self-organizing team.
  • 77.
    Community Concept: Large Organizations:For significant projects, the concept of the "team" expands to a "community." Community Members: Central Members: Technologists and customers crucial to the project's success. Peripheral Members: Other stakeholders such as legal staff, quality auditors, manufacturing, or sales personnel. Although they may be on the periphery, they play important roles in the project. Roles and Coordination: • Explicit Roles: In IXP, the roles of community members should be explicitly defined. • Communication and Coordination: Establish mechanisms to facilitate communication and coordination between community members. Ensures that all stakeholders are aligned and can contribute effectively to the project.
  • 78.
    3) Project chartering. TheIXP team assesses the project itself to determine whether an appropriate business justification for the project exists and whether the project will further the overall goals and objectives of the organization. Chartering also examines the context of the project to determine how it complements, extends, or replaces existing systems or processes. 4) Test-driven management. An IXP project requires measurable criteria for assessing the state of the project and the progress that has been made to date. Test-driven management establishes a series of measurable “destinations” and then defines mechanisms for determining whether or not these destinations have been reached.
  • 79.
    5) Retrospectives. AnIXP team conducts a specialized technical review after a software increment is delivered. Called a retrospective, the review examines “issues, events, and lessons-learned” [Ker05] across a software increment and/or the entire software release. The intent is to improve the IXP process. 6) Continuous learning. Because learning is a vital part of continuous process improvement, members of the XP team are encouraged (and possibly, incented) to learn new methods and techniques that can lead to a higherquality product.
  • 80.
    In addition tothe six new practices discussed, IXP modifies a number of existing XP practices. - Story-driven development (SDD) insists that stories for acceptance tests be written before a single line of code is generated. - Domain-driven design (DDD) is an improvement on the “system metaphor” concept used in XP. DDD suggests the evolutionary creation of a domain model that “accurately represents how domain experts think about their subject”. - Pairing extends the XP pair programming concept to include managers and other stakeholders. The intent is to improve knowledge sharing among XP team members who may not be directly involved in technical development. - Iterative usability discourages front-loaded interface design in favor of usability design that evolves as software increments are delivered and users’ interaction with the software is studied.
  • 81.
    The XP Debate •Requirements volatility. Because the customer is an active member of the XP team, changes to requirements are requested informally. As a consequence, the scope of the project can change and earlier work may have to be modified to accommodate current needs. Proponents argue that this happens regardless of the process that is applied and that XP provides mechanisms for controlling scope creep. • Conflicting customer needs. Many projects have multiple customers, each with his own set of needs. In XP, the team itself is tasked with assimilating the needs of different customers, a job that may be beyond their scope of authority.
  • 82.
    • Requirements areexpressed informally. User stories and acceptance tests are the only explicit manifestation of requirements in XP. Critics argue that a more formal model or specification is often needed to ensure that omissions, inconsistencies, and errors are uncovered before the system is built. Proponents counter that the changing nature of requirements makes such models and specification obsolete almost as soon as they are developed. • Lack of formal design. XP deemphasizes the need for architectural design and in many instances, suggests that design of all kinds should be relatively informal. Critics argue that when complex systems are built, design must be emphasized to ensure that the overall structure of the software will exhibit quality and maintainability. XP proponents suggest that the incremental nature of the XP process limits complexity (simplicity is a core value) and therefore reduces the need for extensive design.