0 likes | 3 Views
This is the basic understanding of Agile Software development
E N D
Unit-1 Fundamentals of Agile: Agile Software Development By: Dr. Amit Khare Dr. Amit KhareProfessor,Department of Computer Science and Engineering,School of Engineering and Technology,Mody University of Science and Technology, Lakshmangarh
Topics: Fundamentals of Agile: The genesis of Agile, introduction and background, Agile manifesto and principles, overview of Scrum, extreme programming, feature driven development, lean software development, Agile project management, design and development practices in Agile projects, test driven development, continuous integration, refactoring, pair programming, simple design, user stories, Agile testing, Agile tools.
What is Agile? Agile is the ability to create and respond to change. Agile is a set of principles and practices for software development and project management that emphasizes flexibility, collaboration, and customer satisfaction. Originating from the Agile Manifesto, Agile aims to address the limitations of traditional, rigid project management methods.
Agile Frameworks and Methodologies • Scrum: Focuses on iterative development with fixed-length sprints (usually 2-4 weeks) and roles like Scrum Master, Product Owner, and Scrum Team. • Kanban: Emphasizes visualizing work on a Kanban board and managing work in progress to improve flow and efficiency. • Extreme Programming (XP): Prioritizes technical excellence and practices such as Test-Driven Development (TDD) and pair programming. • Lean: Focuses on optimizing efficiency and reducing waste in the development process.
Feature-Driven Development (FDD): Centers on developing features and following a structured, model-driven approach. Note: Agile methodologies promote adaptability, customer collaboration, and iterative development to deliver high- quality software that meets users' evolving needs.
Scrum: • Scrum is a specific Agile framework used to manage and complete complex projects, particularly in software development. • It provides a structured yet flexible approach to project management and emphasizes iterative progress, teamwork, and regular feedback.
Key Components of Scrum: Roles • Scrum Master: Facilitates the Scrum process, helps the team adhere to Scrum practices, removes limitation, and ensures effective communication. • Product Owner: Represents the stakeholders and customers, defines and prioritizes the product backlog, and ensures the team delivers value. • Scrum Team: A cross-functional team responsible for delivering the product increment.
Artifacts • Product Backlog: A prioritized list of features, enhancements, fixes, and technical tasks that need to be addressed. It evolves over time based on stakeholder feedback and project needs. • Sprint Backlog: A subset of the product backlog that the team commits to delivering in a sprint. It includes tasks and goals for the current sprint. • Increment: The sum of all completed product backlog items during a sprint and all previous sprints. It represents the latest version of the product.
Events • Sprint: A time-boxed iteration, typically lasting 2-4 weeks, during which a specific set of product backlog items is developed and delivered. Each sprint produces a potentially shippable product increment. • Sprint Planning: A meeting held at the beginning of each sprint where the team discusses and plans the work to be done during the sprint. The team selects items from the product backlog and creates the sprint backlog. • Daily Scrum (Standup): A short, daily meeting (usually 15 minutes) where the team discusses what was done yesterday, what will be done today, and any obstacles faced. • Sprint Review: A meeting held at the end of the sprint to review the increment and gather feedback from stakeholders. The team demonstrates what they’ve completed. • Sprint Retrospective: A meeting held after the sprint review where the team reflects on the sprint process, discusses what went well, what could be improved, and how to make improvements in the next sprint.
Rules and Practices • Scrum Values: Commitment, Courage, Focus, Openness, and Respect are fundamental to Scrum teams and their work. • Definition of Done: A shared understanding of what it means for work to be considered complete. It ensures that the product increment is ready for delivery. It supports a collaborative environment where feedback is integrated regularly, allowing for flexibility and responsiveness to change.
Kanban: • Kanban is a visual management method used to manage and optimize workflows, primarily in software development and manufacturing. • It emphasizes, continuous delivery flexibility, and efficiency by visualizing work and managing the flow of tasks.
Key Components of Kanban: • Kanban Board: The central tool in Kanban, used to visualize work. It typically consists of columns representing different stages of the workflow (e.g., To Do, In Progress, Done). • Work Items: Represented as cards on the Kanban board, these include tasks, features, or any unit of work that needs to be completed. Each card typically contains information about the task, such as a description, assignee, and deadlines.
Work In Progress (WIP) Limits: Kanban uses WIP limits to control the number of tasks in each stage of the workflow. This helps to prevent bottlenecks and ensures that the team is not overloaded with work. WIP limits encourage focus on completing tasks before starting new ones. Flow: Kanban emphasizes smooth and continuous flow of work through the system. The goal is to minimize delays and interruptions, ensuring that tasks move efficiently from start to finish.
Pull System: Instead of pushing tasks onto team members, Kanban uses a pull system where work is pulled into the workflow based on capacity and availability. This means that team members take on new tasks only when they have the capacity to handle them. Continuous Improvement: Kanban encourages ongoing evaluation and improvement of processes. Teams regularly review their workflow, identify inefficiencies or bottlenecks, and make adjustments to enhance productivity.
Kanban Principles: • Visualize Work: Use a Kanban board to make work visible and track progress. This helps the team understand the current status of tasks and workflow. • Limit Work in Progress: Set WIP limits to prevent overloading team members and ensure focus on completing tasks before starting new ones. • Manage Flow: Monitor and optimize the flow of work through the system. Identify and address bottlenecks to improve efficiency.
Make Process Policies Explicit: Clearly define and communicate the rules and policies for how work is managed and processed. • Use feedback and data to make incremental improvements toImprove Collaboratively: the workflow. Engage the team in continuous improvement efforts. • Respect Current Roles and Responsibilities: Kanban does not prescribe specific roles or structures. It respects the existing roles and responsibilities within the team while focusing on improving processes.
Kanban vs. Scrum: While both Kanban and Scrum are Agile methodologies, they differ in several ways: • Structure: Scrum uses time-boxed iterations (sprints) with defined roles and ceremonies, whereas Kanban focuses on continuous flow without fixed iterations. • Flexibility: Kanban allows for more flexibility in workflow management and is less prescriptive than Scrum. • WIP Limits: Kanban emphasizes WIP limits to manage flow, while Scrum uses sprint goals and backlogs to manage work.
Extreme Programming (XP): Extreme Programming (XP) is an Agile software development methodology designed to improve software quality and responsiveness to changing customer requirements. It emphasizes technical excellence and frequent releases of small, functional pieces of software.
Key Practices of Extreme Programming: Continuous Integration: Developers integrate their code into a shared repository frequently, often multiple times a day. This practice helps to detect integration issues early and ensures that the codebase remains in a deployable state. Test-Driven Development (TDD): Developers write automated tests before writing the actual code. This ensures that the code meets the requirements and helps maintain high code quality.
Pair Programming: Two developers work together at one workstation. One writes code (the "driver") while the other reviews and provides guidance (the "observer" or "navigator"). This practice enhances code quality and facilitates knowledge sharing. Continuous Refactoring: The code is continuously improved and refined to improve its structure and clarity without altering its behavior. Refactoring helps to maintain a clean and efficient codebase.
Collective Code Ownership: All team members are responsible for the codebase, which means anyone can modify any part of the code at any time. This fosters a shared responsibility for code quality and encourages collaboration. Sustainable Pace: XP promotes a balanced work pace to avoid burnout. The development team should work at a pace that can be sustained indefinitely, avoiding excessive overtime and ensuring long-term productivity.
Simple Design: The design of the software is kept simple and straightforward. Developers focus on implementing the features that are needed now, rather than trying to anticipate future requirements. This approach helps to avoid over-engineering and keeps the codebase manageable. Customer Involvement: The customer or product owner is involved throughout the development process. They provide continuous feedback, prioritize features, and clarify requirements, ensuring that the development aligns with their needs.
Small Releases: XP encourages frequent, small releases of software, which helps to get early feedback and deliver value to customers quickly. Metaphor: XP encourages the use of simple and clear metaphors to describe the system architecture and design. This helps to ensure that the team has a shared understanding of the system.
XP vs. Other Agile Methodologies Scrum: While both XP and Scrum focus on iterative development and customer feedback, XP places a stronger emphasis on technical practices and engineering excellence. Scrum uses time-boxed sprints and ceremonies, whereas XP focuses on continuous practices and flexibility in iterations. Kanban: Kanban emphasizes visualizing work and managing flow, while XP emphasizes technical practices like pair programming and TDD. Kanban is less prescriptive in terms of roles and ceremonies compared to XP.
Lean Lean is a methodology that focuses on maximizing value by eliminating waste and improving efficiency. Originally developed for manufacturing, particularly in the Toyota Production System, Lean principles have been adapted for various industries, including software development.
Key Principles of Lean: • Value: Identify what delivers value to the customer and focus on enhancing it. Everything that does not add value from the customer’s perspective is considered waste. • Value Stream: Map out all the steps in the process (value stream) required to deliver the product or service. This helps to visualize and understand the flow of value and identify areas for improvement. • Flow: Ensure that the steps in the value stream flow smoothly without interruptions, delays, or bottlenecks.
Pull: Implement a pull system where work is pulled through the process based on demand rather than pushed through based on a predetermined schedule. This helps to avoid overproduction and reduces inventory. • Perfection: Continuously seek perfection by making incremental improvements. Engage in regular reflection and assessment to find better ways to create value and eliminate waste.
Types of Waste in Lean (The 7 Wastes): • Transport: Unnecessary movement of products or materials. • Inventory: Excess products or materials not being processed. • Motion: Unnecessary movements by people (e.g., searching for tools or information). • Waiting: Idle time waiting for the next step in the process. • Overproduction: Producing more than what is needed or before it is needed. • Overprocessing: Doing more work or using more resources than necessary. • Defects: Effort involved in inspecting and fixing defects.
Lean Tools and Techniques: • 5S: A workplace organization method that includes five steps: Sort, Set in order, Shine, Standardize, and Sustain. It helps to create a clean, organized, and efficient work environment. • Kaizen: A philosophy of continuous improvement involving small, incremental changes. It encourages all employees to contribute ideas for improvement. • Kanban: A visual tool to manage work in progress and optimize flow. It helps to visualize tasks and limit work in progress to enhance efficiency.
Value Stream Mapping (VSM): A technique to visualize and analyze the flow of materials and information required to bring a product or service to the customer. It helps identify bottlenecks and opportunities for improvement. • Just-In-Time (JIT): A strategy to increase efficiency by receiving goods only as they are needed in the production process, thereby reducing inventory costs. • Total Productive Maintenance (TPM): A proactive approach to maintain and improve production and quality systems through regular, preventative maintenance activities.
Lean vs. Agile: While Lean and Agile share common goals of improving efficiency and delivering value, they have different origins and focus areas: • Lean: Originated in manufacturing with a focus on eliminating waste and optimizing processes. It emphasizes continuous improvement and efficiency. • Agile: Originated in software development with a focus on flexibility, collaboration, and customer feedback. It emphasizes iterative development and adaptability.
Lean can be seen as a philosophy or mindset that complements Agile practices, and many organizations integrate principles from both methodologies to enhance their processes and deliver value more effectively.
Feature-Driven Development (FDD): Feature-Driven Development (FDD) is an Agile software development methodology focused on delivering working software features in a regular and predictable manner. It combines several industry-recognized best practices into a cohesive whole, specifically emphasizing a feature-centric approach.
Key Concepts of FDD: Feature: In FDD, a feature is a small, client-valued function expressed in the form of <action> the <result> <by/of/for/to> a(n) <object>. Examples include "Calculate the total price for a shopping cart" or "Approve a purchase order." Domain Object Modeling: This involves creating a high-level model of the domain of interest, focusing on the main entities and their relationships.
Key Roles in FDD: • Project Manager: Oversees the project and ensures that it stays on track. • Chief Architect: Responsible for the overall architecture of the system. • Development Manager: Manages the development process and team. • Chief Programmer: Leads a small team responsible for specific features. • Class Owner: Responsible for the design, coding, testing, and documentation of a class or set of classes. • Domain Expert: Provides in-depth knowledge about the domain to ensure that the features meet the users' needs.
Benefits of FDD: • Scalability: Suitable for large teams and complex projects due to its structured approach. • Predictability: Regular, frequent delivery of features provides a predictable development process. • Client Value Focus: Emphasizes features that deliver immediate value to the client. • Quality Assurance: Built-in design and code inspections enhance quality and reduce defects. • Team Ownership: Encourages team members to take ownership of specific features and classes, promoting accountability and expertise.
FDD vs. Other Agile Methodologies: • Scrum: Scrum is more focused on iterative sprints and roles like Scrum Master and Product Owner. FDD is more feature-centric and structured around domain modeling and feature lists. • Kanban: Kanban emphasizes continuous flow and visualizing work, while FDD focuses on feature-driven progress with specific processes for modeling, planning, designing, and building features. • Extreme Programming (XP): XP focuses on technical practices like Test-Driven Development (TDD) and pair programming.
What is Agile Software Development? Agile software development is more than frameworks such as Scrum, Extreme Programming or Feature-Driven Development (FDD). Agile software development is more than practices such as pair programming, test-driven development, stand-ups, planning sessions and sprints. Agile software development is an umbrella term for a set of frameworks and practices based on the values and principles expressed in the Manifesto for Agile Software Development and the 12 Principles behind it.
One thing that separates Agile from other approaches to softwaredevelopment is the focus on the people doing the work and howthey work together. Solutions evolve through collaboration between self-organizing cross-functional teams utilizing the appropriate practices for their context. There’s a big focus in the Agile software development communityoncollaboration and the self-organizing team.
When most teams and organizations start doing Agile software development, they focus on the practices that help with collaboration and organizing the work, which is great.
The Agile Manifesto We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value: • Individuals and interactions over processes and tools • Working software over comprehensive documentation • Customer collaboration over contract negotiation • Responding to change over following a plan
12 Principles are based on the Agile Manifesto 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 themto 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 aconstant 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. (You’ve probably heard of the 80/20 rule—the concept that you can usually get 80% of your intended results with just 20% of the work. Agile principles encourage thinking this way; doing the things that can have the most impact.) 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.
What is agile project management? Agile project management is a modern, flexible approach to project management. It allows you to break large projects down into more manageable tasks, which are tackled in short iterations or sprints. This enables your team to adapt to change quickly and deliver work fast.
Key Principles of Agile Project Management: • Customer Collaboration Over Contract Negotiation: Agile prioritizes continuous collaboration with the customer to meet their needs effectively. • Responding to Change Over Following a Plan: Agile welcomes changes in requirements, even late in the development process. • Individuals and Interactions Over Processes and Tools: Agile values direct communication and collaboration among team members. • Working Software Over Comprehensive Documentation: Agile focuses on delivering working software frequently, with a preference for shorter timescales.
Short Iterations or Sprints Definition: • Short Iterations/Sprints: These are time-boxed periods, typically ranging from one to four weeks, during which specific work has to be completed and made ready for review. Purpose: • To break down large projects into smaller, more manageable chunks. • To allow for frequent reassessment and adaptation of plans based on feedback and changing requirements.
Benefits: • Increases flexibility and adaptability. • Enhances collaboration and communication within the team. • Allows for early and continuous delivery of valuable software. • Provides regular opportunities for stakeholder feedback, which can be incorporated into future sprints.