Learning Outcomes of this course
Agile Practices
Overview of Extreme Programming
Planning
Testing
Refactoring
Designing
UML and UP
Pragmatic Programming
XP Values
Patterns and Practices
Patterns for Test-Driven
Design Principles
The Dependency Inversion Principle
Design Patterns
1
Overview
•Introduction to Agile Software Development
•Benefits of Agile Approach
•Principle of Agile Development
•Agile Practices
•Extreme Programming
•
2
What is Agile Software Development?
•Definition of Agile
•Agile Manifesto
•Principles of Agile Manifesto
3
Principles of Agile Manifesto
•Individual and interactions over processes and tools
•Working software over comprehensive documentation
•Customer collaboration over contract negotiation
•Responding to change over following a plan
4
Agile Principles (continued)
•Embracing Change
•Delivering Value Incrementally
•Collaboration and Communication
•Self-organizing Teams
5
Early and Continuous Delivery
Importance of Early
Delivery
Frequent Deliveries Agile Practices
Early delivery of a partially
functioning system has a
strong correlation with
higher quality in the final
system.
Frequent deliveries of
increasing functionality
correlate with higher final
system quality.
Agile set of practices
emphasize early and
continuous delivery of
software.
Agile Practices
Changing
Requirements Frequent Deliveries Daily Collaboration
Agile processes welcome
changing requirements for the
customer's competitive
advantage.
Deliver working software
frequently, focusing on shorter
timescales.
Business people and
developers work together daily
throughout the project in agile
practices.
Agile Practices (Contd.)
•Iterative Development
•Continuous Integration
•Test-Driven Development (TDD)
•Pair Programming
•Refactoring
8
Iterative Development
•Definition and Concept
•Advantages of Iterative Development
•Examples of Iterative Development in Agile Projects
9
Advantages of Iterative Development
1.Flexibility: It allows for changes and enhancements to be made throughout the development process,
as feedback is continuously incorporated into subsequent iterations.
2.Faster Time to Market: Since development is done in smaller cycles, usable portions of the software
can be released sooner, allowing for quicker delivery of value to users.
3.Improved Quality: Regular testing and feedback help in identifying and addressing issues early in the
development process, resulting in a higher-quality end product.
4.Risk Reduction: By breaking the project into smaller iterations, risks are better managed, and
potential problems can be identified and addressed earlier.
5.Customer Involvement: Iterative development encourages regular interaction with stakeholders and
end-users, ensuring that their requirements are continuously met and increasing overall satisfaction.
6.Incremental Development: The software is built incrementally, with each iteration adding new features
or improving existing ones, which allows for a more manageable and less overwhelming development
process.
7.Adaptability: It enables teams to adapt to changing requirements or market conditions more easily, as
adjustments can be made at the beginning of each iteration based on feedback and evolving needs.
10
Continuous Integration
•Definition and Concept
•Benefits of Continuous Integration
•Implementation Strategies
11
Continuous Integration
1.Frequent Integration: Developers integrate their code changes into a shared repository several times a day,
rather than waiting for a big integration event at the end of a development cycle. This ensures that changes are
continuously incorporated into the main codebase.
2.Automated Build and Tests: Upon each integration, an automated build process compiles the code and runs
a suite of automated tests to detect any errors or regressions introduced by the new changes. These tests
include unit tests, integration tests, and other forms of automated validation.
3.Immediate Feedback: If any issues arise during the build or test process, developers are immediately
notified, allowing them to address and resolve the problems quickly. This rapid feedback loop minimizes the
time between introducing a defect and detecting it, reducing the cost and effort required to fix it.
4.Ensures Code Quality: Continuous Integration promotes code quality by enforcing coding standards,
identifying and preventing integration issues early, and reducing the likelihood of introducing bugs into the
codebase.
5.Supports Collaboration: Since changes are integrated frequently and tested automatically, Continuous
Integration fosters collaboration among team members. Developers can work more independently, knowing
that their changes will seamlessly integrate with the rest of the codebase.
6.Enables Continuous Delivery/Deployment: Continuous Integration is a prerequisite for Continuous Delivery
and Continuous Deployment practices. Once code passes the automated tests in the CI pipeline, it can be
automatically deployed to production environments with confidence, knowing that it meets quality standards.
12
Test-Driven Development (TDD)
•Introduction to TDD
•Red-Green-Refactor Cycle
•Benefits of TDD
13
Test-driven Development (TDD)
1.Definition: Test-driven Development is a software development approach where tests are
written before the code. The development process revolves around a short cycle of adding a
test, writing just enough code to make it pass, and then refactoring.
2.Core Principles:
1. Write a failing test.
2. Write the simplest code to make the test pass.
3. Refactor the code while ensuring all tests pass.
3.Key Components:
1. Writing automated tests.
2. Iterative development process.
3. Focus on small, incremental changes.
14
Red-Green-Refactor Cycle
1.Red: Write a failing test that describes the desired behavior.
1. Test fails because the feature doesn't exist yet.
2.Green: Write the simplest code to make the test pass.
1. Implement the feature or functionality.
3.Refactor: Improve the code without changing its behavior.
1. Remove duplication, improve readability, and maintainability.
15
Benefits of TDD
1.Improved Code Quality:
1. Code is more reliable and less prone to bugs.
2. Encourages better design and modularity.
2.Faster Feedback:
1. Defects are caught earlier in the development process.
2. Reduces debugging time.
3.Increased Confidence:
1. Confidence in code changes due to comprehensive test coverage.
2. Facilitates easier code maintenance and updates.
4.Supports Agile Practices:
1. Fits well with Agile methodologies, enabling rapid iterations and continuous delivery.
5.Documentation and Specification:
1. Tests serve as documentation of system behavior and requirements.
16
Pair Programming
•Explanation of Pair Programming
•Benefits of Pair Programming
•Guidelines for Effective Pair Programming
17
Benefits of Pair Programming
1.Improved Code Quality: Two sets of eyes catch more errors and ensure higher quality
code.
2.Knowledge Sharing: Developers learn from each other, enhancing overall team
knowledge and skills.
3.Faster Problem Solving: Issues are resolved more quickly with immediate
collaboration.
4.Reduced Bugs: Continuous peer review minimizes the introduction of bugs into the
codebase.
5.Enhanced Creativity: Diverse perspectives lead to innovative solutions and designs.
6.Increased Accountability: Developers take ownership of their code and decisions.
18
Guidelines for Effective Pair Programming
1.Establish Clear Roles: Designate roles such as "driver" (writes code) and "navigator"
(reviews and guides).
2.Rotate Roles Regularly: Switch roles frequently to maintain engagement and prevent
fatigue.
3.Communicate Effectively: Maintain open communication to share ideas, ask
questions, and provide feedback.
4.Set Goals: Define clear objectives and outcomes for each pairing session to stay
focused and productive.
5.Take Breaks: Schedule regular breaks to prevent burnout and maintain productivity.
6.Provide Constructive Feedback: Offer feedback respectfully and constructively to
foster a positive working environment.
19
Refactoring
•Definition of Refactoring
•Why Refactor?
•Examples of Refactoring Techniques
20
Definition of Refactoring
•Refactoring is the process of restructuring existing code without changing its external
behavior.
•It involves making improvements to the code's internal structure to enhance readability,
maintainability, and performance.
•Refactoring aims to make code easier to understand, modify, and extend without
introducing new functionality.
21
Why Refactor?
•Code Maintainability: Refactoring improves the maintainability of code by making it
easier to understand and modify, reducing the likelihood of introducing bugs during
future changes.
•Code Readability: Refactored code is more readable, making it easier for developers to
comprehend its purpose and functionality.
•Performance Optimization: Refactoring can improve the performance of code by
eliminating inefficiencies and reducing computational overhead.
•Reduce Technical Debt: Refactoring reduces technical debt by addressing
accumulated design flaws and poor coding practices, leading to a more sustainable
codebase.
•Facilitate Future Development: Refactoring prepares code for future enhancements
and features by restructuring it to be more modular, flexible, and adaptable.
22
Examples of Refactoring Techniques
•Extract Method: Breaks down a large, complex method into smaller, more manageable units, improving
readability and promoting code reuse.
•Rename Variable: Renames variables with more descriptive and meaningful names, enhancing code clarity
and maintainability.
•Inline Method: Replaces a method call with its contents, simplifying code and eliminating unnecessary
abstraction.
•Extract Class: Moves related fields and methods from one class to a new class, improving organization and
cohesion.
•Merge Classes: Combines two or more closely related classes into a single class, reducing complexity and
improving code structure.
•Replace Conditional with Polymorphism: Replaces complex conditional logic with polymorphic behavior,
making code more extensible and maintainable.
•Optimize Imports: Removes unused imports and organizes import statements, improving code cleanliness
and reducing clutter.
•Introduce Parameter Object: Groups related method parameters into a single object, simplifying method
signatures and reducing parameter proliferation.
23
Case Study: Agile in Action
•Real-world Example of Agile Implementation
•Challenges Faced and Solutions
•Lessons Learned
24
Project: Developing a Mobile Banking App
•Agile Methodology Adopted: Scrum
•Team Composition: Cross-functional team including developers, testers, UI/UX
designers, and product owner.
25
Challenges Faced
1.Scope Creep: Constantly changing requirements leading to scope creep and timeline
delays.
2.Communication Issues: Lack of clear communication between team members and
stakeholders causing misunderstandings.
3.Resource Constraints: Limited resources and conflicting priorities impacting project
progress.
26
Solutions Implemented
1.Regular Sprint Reviews: Conducted frequent sprint reviews with stakeholders to
gather feedback and prioritize features.
2.Improved Communication Channels: Implemented daily stand-up meetings and used
collaboration tools like Slack for better communication.
3.Resource Allocation Optimization: Optimized resource allocation and cross-skilling to
address resource constraints and ensure smooth project execution.
27
Introduction to Extreme Programming (XP)
•Definition of Extreme Programming
•Brief overview of XP's principles and practices
•Importance of XP in Agile software development
28
Extreme Programming
1.Definition of Extreme Programming (XP)
1. Extreme Programming (XP) is an Agile software development methodology focused on
improving software quality and responsiveness to changing customer requirements.
2. It emphasizes collaborative teamwork, frequent releases, and continuous feedback to
deliver high-quality software efficiently.
2.Overview of XP's Principles and Practices
1. XP is based on a set of values, principles, and practices designed to promote simplicity,
communication, feedback, and respect within development teams.
2. Key practices include test-driven development (TDD), pair programming, continuous
integration, collective code ownership, and frequent releases.
29
Importance of Extreme Programming (XP) in
Agile Software Development
1.Facilitates Rapid Adaptation
1. XP enables teams to quickly respond to changing requirements and market conditions through its emphasis
on flexibility and continuous feedback.
2.Enhances Software Quality
1. By prioritizing practices like TDD, continuous integration, and collective code ownership, XP helps maintain
high software quality and reduces the likelihood of defects.
3.Encourages Collaboration
1. XP practices such as pair programming and collective code ownership foster collaboration and knowledge
sharing among team members, leading to better outcomes.
4.Supports Customer Satisfaction
1. XP's focus on delivering working software incrementally and involving customers in the development process
ensures that the final product meets their needs and expectations.
5.Promotes Sustainable Pace
1. XP promotes sustainable development practices, prioritizing work-life balance and preventing burnout among
team members, which leads to higher productivity and morale.
30
Key Principles of Extreme Programming
•Communication
•Simplicity
•Feedback
•Courage
•Respect
31
Core Practices of Extreme Programming
•Test-Driven Development (TDD)
•Continuous Integration (CI)
•Pair Programming
•Sustainable Pace
•Open Workspace
•The Planning Game
•Simple Design
•Refactoring
•Metaphor
32
Sustainable Pace
•Importance of maintaining a sustainable pace
•Comparison with a sprint vs. a marathon
•XP rule on working overtime
33
Open Workspace
•Benefits of an open workspace in XP
•Characteristics of an open workspace
•Research findings supporting the effectiveness of open workspaces
34
Characteristics of an Open Workspace
1.Minimal Physical Barriers: Absence of cubicles or walls, promoting an open and
inclusive environment.
2.Shared Spaces: Common areas such as meeting rooms, collaboration zones, and
communal workstations encourage interaction and teamwork.
3.Flexible Seating Arrangements: Adjustable furniture and modular layouts
accommodate different work styles and activities.
4.Access to Resources: Easy access to tools, resources, and shared amenities fosters
collaboration and efficiency.
35
The Planning Game
•Definition and purpose
•Collaboration between business and development teams
•Budgeting and story selection process
36
Simple Design
•Importance of simplicity in design
•Focus on current iteration stories
•Iterative improvement of system design
37
Simple Design (Contd)
•Facilitates easier maintenance and updates
•Enhances code readability and understanding
•Reduces complexity, leading to fewer bugs and defects
•Enables faster development and iteration
•Supports adaptability to changing requirements
•Improves collaboration within the development team
•Minimizes technical debt accumulation
38
Metaphor
•Definition and significance
•Use of metaphor in guiding system design
•Examples illustrating the power of metaphor in software development
39
Metaphor (contd.)
•Metaphor in Agile development refers to using a simple analogy or concept to describe
complex ideas or processes.
•It helps teams understand and communicate abstract concepts by relating them to
familiar or concrete experiences.
•Metaphors can be used to explain Agile principles, practices, and methodologies in a
more understandable and relatable way.
•Examples of metaphors in Agile include "sprint" to describe a time-boxed development
cycle and "product backlog" to represent a prioritized list of work items.
•Metaphors promote shared understanding, alignment, and effective collaboration within
Agile teams.
40

01- Lecture -Introduction to IT Agile Development.

  • 1.
    Learning Outcomes ofthis course Agile Practices Overview of Extreme Programming Planning Testing Refactoring Designing UML and UP Pragmatic Programming XP Values Patterns and Practices Patterns for Test-Driven Design Principles The Dependency Inversion Principle Design Patterns 1
  • 2.
    Overview •Introduction to AgileSoftware Development •Benefits of Agile Approach •Principle of Agile Development •Agile Practices •Extreme Programming • 2
  • 3.
    What is AgileSoftware Development? •Definition of Agile •Agile Manifesto •Principles of Agile Manifesto 3
  • 4.
    Principles of AgileManifesto •Individual and interactions over processes and tools •Working software over comprehensive documentation •Customer collaboration over contract negotiation •Responding to change over following a plan 4
  • 5.
    Agile Principles (continued) •EmbracingChange •Delivering Value Incrementally •Collaboration and Communication •Self-organizing Teams 5
  • 6.
    Early and ContinuousDelivery Importance of Early Delivery Frequent Deliveries Agile Practices Early delivery of a partially functioning system has a strong correlation with higher quality in the final system. Frequent deliveries of increasing functionality correlate with higher final system quality. Agile set of practices emphasize early and continuous delivery of software.
  • 7.
    Agile Practices Changing Requirements FrequentDeliveries Daily Collaboration Agile processes welcome changing requirements for the customer's competitive advantage. Deliver working software frequently, focusing on shorter timescales. Business people and developers work together daily throughout the project in agile practices.
  • 8.
    Agile Practices (Contd.) •IterativeDevelopment •Continuous Integration •Test-Driven Development (TDD) •Pair Programming •Refactoring 8
  • 9.
    Iterative Development •Definition andConcept •Advantages of Iterative Development •Examples of Iterative Development in Agile Projects 9
  • 10.
    Advantages of IterativeDevelopment 1.Flexibility: It allows for changes and enhancements to be made throughout the development process, as feedback is continuously incorporated into subsequent iterations. 2.Faster Time to Market: Since development is done in smaller cycles, usable portions of the software can be released sooner, allowing for quicker delivery of value to users. 3.Improved Quality: Regular testing and feedback help in identifying and addressing issues early in the development process, resulting in a higher-quality end product. 4.Risk Reduction: By breaking the project into smaller iterations, risks are better managed, and potential problems can be identified and addressed earlier. 5.Customer Involvement: Iterative development encourages regular interaction with stakeholders and end-users, ensuring that their requirements are continuously met and increasing overall satisfaction. 6.Incremental Development: The software is built incrementally, with each iteration adding new features or improving existing ones, which allows for a more manageable and less overwhelming development process. 7.Adaptability: It enables teams to adapt to changing requirements or market conditions more easily, as adjustments can be made at the beginning of each iteration based on feedback and evolving needs. 10
  • 11.
    Continuous Integration •Definition andConcept •Benefits of Continuous Integration •Implementation Strategies 11
  • 12.
    Continuous Integration 1.Frequent Integration:Developers integrate their code changes into a shared repository several times a day, rather than waiting for a big integration event at the end of a development cycle. This ensures that changes are continuously incorporated into the main codebase. 2.Automated Build and Tests: Upon each integration, an automated build process compiles the code and runs a suite of automated tests to detect any errors or regressions introduced by the new changes. These tests include unit tests, integration tests, and other forms of automated validation. 3.Immediate Feedback: If any issues arise during the build or test process, developers are immediately notified, allowing them to address and resolve the problems quickly. This rapid feedback loop minimizes the time between introducing a defect and detecting it, reducing the cost and effort required to fix it. 4.Ensures Code Quality: Continuous Integration promotes code quality by enforcing coding standards, identifying and preventing integration issues early, and reducing the likelihood of introducing bugs into the codebase. 5.Supports Collaboration: Since changes are integrated frequently and tested automatically, Continuous Integration fosters collaboration among team members. Developers can work more independently, knowing that their changes will seamlessly integrate with the rest of the codebase. 6.Enables Continuous Delivery/Deployment: Continuous Integration is a prerequisite for Continuous Delivery and Continuous Deployment practices. Once code passes the automated tests in the CI pipeline, it can be automatically deployed to production environments with confidence, knowing that it meets quality standards. 12
  • 13.
    Test-Driven Development (TDD) •Introductionto TDD •Red-Green-Refactor Cycle •Benefits of TDD 13
  • 14.
    Test-driven Development (TDD) 1.Definition:Test-driven Development is a software development approach where tests are written before the code. The development process revolves around a short cycle of adding a test, writing just enough code to make it pass, and then refactoring. 2.Core Principles: 1. Write a failing test. 2. Write the simplest code to make the test pass. 3. Refactor the code while ensuring all tests pass. 3.Key Components: 1. Writing automated tests. 2. Iterative development process. 3. Focus on small, incremental changes. 14
  • 15.
    Red-Green-Refactor Cycle 1.Red: Writea failing test that describes the desired behavior. 1. Test fails because the feature doesn't exist yet. 2.Green: Write the simplest code to make the test pass. 1. Implement the feature or functionality. 3.Refactor: Improve the code without changing its behavior. 1. Remove duplication, improve readability, and maintainability. 15
  • 16.
    Benefits of TDD 1.ImprovedCode Quality: 1. Code is more reliable and less prone to bugs. 2. Encourages better design and modularity. 2.Faster Feedback: 1. Defects are caught earlier in the development process. 2. Reduces debugging time. 3.Increased Confidence: 1. Confidence in code changes due to comprehensive test coverage. 2. Facilitates easier code maintenance and updates. 4.Supports Agile Practices: 1. Fits well with Agile methodologies, enabling rapid iterations and continuous delivery. 5.Documentation and Specification: 1. Tests serve as documentation of system behavior and requirements. 16
  • 17.
    Pair Programming •Explanation ofPair Programming •Benefits of Pair Programming •Guidelines for Effective Pair Programming 17
  • 18.
    Benefits of PairProgramming 1.Improved Code Quality: Two sets of eyes catch more errors and ensure higher quality code. 2.Knowledge Sharing: Developers learn from each other, enhancing overall team knowledge and skills. 3.Faster Problem Solving: Issues are resolved more quickly with immediate collaboration. 4.Reduced Bugs: Continuous peer review minimizes the introduction of bugs into the codebase. 5.Enhanced Creativity: Diverse perspectives lead to innovative solutions and designs. 6.Increased Accountability: Developers take ownership of their code and decisions. 18
  • 19.
    Guidelines for EffectivePair Programming 1.Establish Clear Roles: Designate roles such as "driver" (writes code) and "navigator" (reviews and guides). 2.Rotate Roles Regularly: Switch roles frequently to maintain engagement and prevent fatigue. 3.Communicate Effectively: Maintain open communication to share ideas, ask questions, and provide feedback. 4.Set Goals: Define clear objectives and outcomes for each pairing session to stay focused and productive. 5.Take Breaks: Schedule regular breaks to prevent burnout and maintain productivity. 6.Provide Constructive Feedback: Offer feedback respectfully and constructively to foster a positive working environment. 19
  • 20.
    Refactoring •Definition of Refactoring •WhyRefactor? •Examples of Refactoring Techniques 20
  • 21.
    Definition of Refactoring •Refactoringis the process of restructuring existing code without changing its external behavior. •It involves making improvements to the code's internal structure to enhance readability, maintainability, and performance. •Refactoring aims to make code easier to understand, modify, and extend without introducing new functionality. 21
  • 22.
    Why Refactor? •Code Maintainability:Refactoring improves the maintainability of code by making it easier to understand and modify, reducing the likelihood of introducing bugs during future changes. •Code Readability: Refactored code is more readable, making it easier for developers to comprehend its purpose and functionality. •Performance Optimization: Refactoring can improve the performance of code by eliminating inefficiencies and reducing computational overhead. •Reduce Technical Debt: Refactoring reduces technical debt by addressing accumulated design flaws and poor coding practices, leading to a more sustainable codebase. •Facilitate Future Development: Refactoring prepares code for future enhancements and features by restructuring it to be more modular, flexible, and adaptable. 22
  • 23.
    Examples of RefactoringTechniques •Extract Method: Breaks down a large, complex method into smaller, more manageable units, improving readability and promoting code reuse. •Rename Variable: Renames variables with more descriptive and meaningful names, enhancing code clarity and maintainability. •Inline Method: Replaces a method call with its contents, simplifying code and eliminating unnecessary abstraction. •Extract Class: Moves related fields and methods from one class to a new class, improving organization and cohesion. •Merge Classes: Combines two or more closely related classes into a single class, reducing complexity and improving code structure. •Replace Conditional with Polymorphism: Replaces complex conditional logic with polymorphic behavior, making code more extensible and maintainable. •Optimize Imports: Removes unused imports and organizes import statements, improving code cleanliness and reducing clutter. •Introduce Parameter Object: Groups related method parameters into a single object, simplifying method signatures and reducing parameter proliferation. 23
  • 24.
    Case Study: Agilein Action •Real-world Example of Agile Implementation •Challenges Faced and Solutions •Lessons Learned 24
  • 25.
    Project: Developing aMobile Banking App •Agile Methodology Adopted: Scrum •Team Composition: Cross-functional team including developers, testers, UI/UX designers, and product owner. 25
  • 26.
    Challenges Faced 1.Scope Creep:Constantly changing requirements leading to scope creep and timeline delays. 2.Communication Issues: Lack of clear communication between team members and stakeholders causing misunderstandings. 3.Resource Constraints: Limited resources and conflicting priorities impacting project progress. 26
  • 27.
    Solutions Implemented 1.Regular SprintReviews: Conducted frequent sprint reviews with stakeholders to gather feedback and prioritize features. 2.Improved Communication Channels: Implemented daily stand-up meetings and used collaboration tools like Slack for better communication. 3.Resource Allocation Optimization: Optimized resource allocation and cross-skilling to address resource constraints and ensure smooth project execution. 27
  • 28.
    Introduction to ExtremeProgramming (XP) •Definition of Extreme Programming •Brief overview of XP's principles and practices •Importance of XP in Agile software development 28
  • 29.
    Extreme Programming 1.Definition ofExtreme Programming (XP) 1. Extreme Programming (XP) is an Agile software development methodology focused on improving software quality and responsiveness to changing customer requirements. 2. It emphasizes collaborative teamwork, frequent releases, and continuous feedback to deliver high-quality software efficiently. 2.Overview of XP's Principles and Practices 1. XP is based on a set of values, principles, and practices designed to promote simplicity, communication, feedback, and respect within development teams. 2. Key practices include test-driven development (TDD), pair programming, continuous integration, collective code ownership, and frequent releases. 29
  • 30.
    Importance of ExtremeProgramming (XP) in Agile Software Development 1.Facilitates Rapid Adaptation 1. XP enables teams to quickly respond to changing requirements and market conditions through its emphasis on flexibility and continuous feedback. 2.Enhances Software Quality 1. By prioritizing practices like TDD, continuous integration, and collective code ownership, XP helps maintain high software quality and reduces the likelihood of defects. 3.Encourages Collaboration 1. XP practices such as pair programming and collective code ownership foster collaboration and knowledge sharing among team members, leading to better outcomes. 4.Supports Customer Satisfaction 1. XP's focus on delivering working software incrementally and involving customers in the development process ensures that the final product meets their needs and expectations. 5.Promotes Sustainable Pace 1. XP promotes sustainable development practices, prioritizing work-life balance and preventing burnout among team members, which leads to higher productivity and morale. 30
  • 31.
    Key Principles ofExtreme Programming •Communication •Simplicity •Feedback •Courage •Respect 31
  • 32.
    Core Practices ofExtreme Programming •Test-Driven Development (TDD) •Continuous Integration (CI) •Pair Programming •Sustainable Pace •Open Workspace •The Planning Game •Simple Design •Refactoring •Metaphor 32
  • 33.
    Sustainable Pace •Importance ofmaintaining a sustainable pace •Comparison with a sprint vs. a marathon •XP rule on working overtime 33
  • 34.
    Open Workspace •Benefits ofan open workspace in XP •Characteristics of an open workspace •Research findings supporting the effectiveness of open workspaces 34
  • 35.
    Characteristics of anOpen Workspace 1.Minimal Physical Barriers: Absence of cubicles or walls, promoting an open and inclusive environment. 2.Shared Spaces: Common areas such as meeting rooms, collaboration zones, and communal workstations encourage interaction and teamwork. 3.Flexible Seating Arrangements: Adjustable furniture and modular layouts accommodate different work styles and activities. 4.Access to Resources: Easy access to tools, resources, and shared amenities fosters collaboration and efficiency. 35
  • 36.
    The Planning Game •Definitionand purpose •Collaboration between business and development teams •Budgeting and story selection process 36
  • 37.
    Simple Design •Importance ofsimplicity in design •Focus on current iteration stories •Iterative improvement of system design 37
  • 38.
    Simple Design (Contd) •Facilitateseasier maintenance and updates •Enhances code readability and understanding •Reduces complexity, leading to fewer bugs and defects •Enables faster development and iteration •Supports adaptability to changing requirements •Improves collaboration within the development team •Minimizes technical debt accumulation 38
  • 39.
    Metaphor •Definition and significance •Useof metaphor in guiding system design •Examples illustrating the power of metaphor in software development 39
  • 40.
    Metaphor (contd.) •Metaphor inAgile development refers to using a simple analogy or concept to describe complex ideas or processes. •It helps teams understand and communicate abstract concepts by relating them to familiar or concrete experiences. •Metaphors can be used to explain Agile principles, practices, and methodologies in a more understandable and relatable way. •Examples of metaphors in Agile include "sprint" to describe a time-boxed development cycle and "product backlog" to represent a prioritized list of work items. •Metaphors promote shared understanding, alignment, and effective collaboration within Agile teams. 40