U-5 Swa
U-5 Swa
U-5 Swa
Planning
Requirements Analysis
Design
Coding
Unit Testing and
Acceptance Testing.
What is Agile?
Agile model believes that every project needs to be handled
differently and the existing methods need to be tailored to best
suit the project requirements. In Agile, the tasks are divided to
time boxes (small time frames) to deliver specific features for a
release.
Principles of Agile −
While Agile itself is more of an ideology or manifesto, there are different form
of implementation of the same as explained above. However, one look at
those methodologies and one can figure out that all of them have a common
skeleton or some basic ideas over which all those methodologies are based
on. Based on the Agile manifesto, there are a total of 12 principles or
guideline which all the agile methodologies standby. Which are −
Agile promotes early and continuous delivery of valuable
software. That means while customer satisfaction is one of the major
focus in Agile, clients always look for faster delivery and early or on
time delivery is a way to keep your customers happy as at the end of
the day, they mainly care about the end product rather than the overall
process.
Being flexible about change at any point of development. One
of agile’s primary focus is customer satisfaction and agile is all about
customer’s input and involvement throughout the process including
integrating requirement changes at any point of time during the
development.
Working on frequent and short deliveries throughout the
development process. Those deliveries can be weekly or monthly
based depending upon the cycle/ sprint duration in order to keep the
client updated periodically regarding present status of development.
Agile promotes transparency between business people and
developers and requires them to work together which helps in
better coordination, risk management as well as understanding of the
product development flow both technically as well as from a business
point of view.
Agile advocates for motivating individuals in the team. By
providing a better productive environment and providing them with all
the support, motivation and respect, there will be a team that is
motivated and trust each other which is highly effective in getting
better productivity.
While technical advancement has gifted us with many alternative ways
to communicate, agile believes in face to face communication as
the most effective way to communicate between and to
development team.
Agile focuses on through planning and designing in order to get a clear
understanding of the user requirement. Agile motivates continuous
attention towards effective designing and technical
excellence through following optimal code standard. It can be done
through regular code inspection on technical reviews and refactoring
based on the reviews at regular intervals.
Agile promotes sustainable development. The developers, users
and sponsors should work together in order to ship out delivery at a
constant pace. As requirement changes as well as blockages during the
development process are bound to happen, the whole team must work
together so that the delivery process is followed indefinitely.
Working software is the primary measure of progress. In simple
terms, none of the planning, designing or overall development process
matters if the end product is not in working condition. The properly
working end software product is what the success of an agile process
depends on.
Simplicity—the art of maximizing the amount of work not done
—is essential. In simple terms, to extract maximum result with less
hard work. Agile promotes removing unnecessary tasks and prioritizing
activities can have maximum impact with less and effective work done.
The best architectures, requirements, and designs emerge
from self-organizing teams. Agile advocates encouraging and
appreciating motivated individuals in a team, who are passionate about
the whole development process, take ownership of their tasks and
share ideas among each other through effective communication. This
results in having a team of motivated and highly valuable team players
with a sense of ownership working together to provide better
productivity.
At regular intervals, the team reflects on how to become more
effective, then tunes and adjusts its behavior
accordingly. There is always a scope for change and improvement.
Agile promotes team members should focus on self –improvement.
They should do regular analysis and work on improving the overall
delivery or the development proces
Agile Software Testing
Last Updated : 24 May, 2023
Agile Testing is a type of software testing that follows the
principles of agile software development to test the software
application. All members of the project team along with the
special experts and testers are involved in agile testing. Agile
testing is not a separate phase and it is carried out with all the
development phases i.e. requirements, design and coding, and
test case generation. Agile testing takes place simultaneously
throughout the Development Life Cycle. Agile testers participate
in the entire development life cycle along with development team
members and the testers help in building the software according
to the customer requirements and with better design and thus
code becomes possible. The agile testing team works as a single
team towards the single objective of achieving quality. Agile
Testing has shorter time frames called iterations or loops. This
methodology is also called the delivery-driven approach because
it provides a better prediction on the workable products in less
duration time.
Agile testing is an informal process that is specified as a
dynamic type of testing.
It is performed regularly throughout every iteration of the
Software Development Lifecycle (SDLC).
Customer satisfaction is the primary concern for agile test
engineers at some stage in the agile testing process.
Features of Agile Testing
Some of the key features of agile software testing are:
Simplistic approach: In agile testing, testers perform
only the necessary tests but at the same time do not
leave behind any essential tests. This approach delivers a
product that is simple and provides value.
Continuous improvement: In agile testing, agile testers
depend mainly on feedback and self-learning for
improvement and they perform their activities efficiently
continuously.
Self-organized: Agile testers are highly efficient and
tend to solve problems by bringing teams together to
resolve them.
Testers enjoy work: In agile testing, testers enjoy their
work and thus will be able to deliver a product with the
greatest value to the consumer.
Encourage Constant communication: In agile testing,
efficient communication channels are set up with all the
stakeholders of the project to reduce errors and
miscommunications.
Constant feedback: Agile testers need to constantly
provide feedback to the developers if necessary.
Agile Testing Principles
Shortening feedback iteration: In Agile Testing, the
testing team gets to know the product development and
its quality for each and every iteration. Thus continuous
feedback minimizes the feedback response time and the
fixing cost is also reduced.
Testing is performed alongside Agile testing is not a
different phase. It is performed alongside the
development phase. It ensures that the features
implemented during that iteration are actually done.
Testing is not kept pending for a later phase.
Involvement of all members: Agile testing involves
each and every member of the development team and
the testing team. It includes various developers and
experts.
Documentation is weightless: In place of global test
documentation, agile testers use reusable checklists to
suggest tests and focus on the essence of the test rather
than the incidental details. Lightweight documentation
tools are used.
Clean code: The defects that are detected are fixed
within the same iteration. This ensures clean code at any
stage of development.
Constant response: Agile testing helps to deliver
responses or feedback on an ongoing basis. Thus, the
product can meet the business needs.
Customer satisfaction: In agile testing, customers are
exposed to the product throughout the development
process. Throughout the development process, the
customer can modify the requirements, and update the
requirements and the tests can also be changed as per
the changed requirements.
Test-driven: In agile testing, the testing needs to be
conducted alongside the development process to shorten
the development time. But testing is implemented after
the implementation or when the software is developed in
the traditional process.
Agile Testing Methodologies
Some of the agile testing methodologies are:
1. Test-Driven Development (TDD): TDD is the software
development process relying on creating unit test cases
before developing the actual code of the software. It is an
iterative approach that combines 3 operations,
programming, creation of unit tests, and refactoring.
2. Behavior Driven Development (BDD): BDD is agile
software testing that aims to document and develop the
application around the user behavior a user expects to
experience when interacting with the application. It
encourages collaboration among the developer, quality
experts, and customer representatives.
3. Exploratory Testing: In exploratory testing, the tester
has the freedom to explore the code and create effective
and efficient software. It helps to discover the unknown
risks and explore each aspect of the software
functionality.
Agile Testing Life Cycle
The agile testing life cycle has 5 different phases:
1. Impact Assessment: This is the first phase of the agile
testing life cycle also known as the feedback phase
where the inputs and responses are collected from the
users and stakeholders. This phase supports the test
engineers to set the objective for the next phase in the
cycle.
2. Agile Testing Planning: In this phase, the developers,
customers, test engineers, and stakeholders team up to
plan the testing process schedules, regular meetings,
and deliverables.
3. Release Readiness: This is the third phase in the agile
testing lifecycle where the test engineers review the
features which have been created entirely and test if the
features are ready to go live or not and the features that
need to be sent again to the previous development
phase.
4. Daily Scrums: This phase involves the daily morning
meetings to check on testing and determine the
objectives for the day. The goals are set daily to enable
test engineers to understand the status of testing.
5. Test Agility Review: This is the last phase of the agile
testing lifecycle that includes weekly meetings with the
stakeholders to evaluate and assess the progress against
the goals.
Pig aur chicken ki kahani daily scrum meetings mein aane wale logon ke tarikon ko define
karti hai.
Pigs woh log hote hain jo chopping block par hote hain - yeh committed log hote hain jinka
project mein stake hota hai aur jo project ke success ya failure ke liye zaroori hote hain.
Chickens woh log hote hain jo meeting attend karte hain lekin unka update, meeting progress
ya project se koi seedha sambandh nahi hota. Isliye, chickens woh log hote hain jo kuch
kehna chahte hain lekin aksar kuch contribute nahi karte. Meeting ke listeners maane jane
Kanban is part of agile methodologies, focusing on flexibility and continuous delivery. The
main benefit of Kanban is that it helps teams manage their workflow effectively, identify
bottlenecks, and improve overall productivity.
Core Values
1. Communication: Emphasizes direct communication within the team and with customers to
ensure everyone is on the same page.
2. Simplicity: Focuses on developing only what is needed, avoiding over-engineering and
complexity.
3. Feedback: Regular feedback from the system, the customer, and the team helps improve the
development process.
4. Courage: Encourages taking bold steps and making necessary changes even if they are
difficult.
5. Respect: Fosters mutual respect among team members, creating a positive and collaborative
working environment.
Key Practices
1. Test-Driven Development (TDD): Writing tests before writing the actual code. This ensures
that the code works as expected and facilitates refactoring.
2. Pair Programming: Two programmers work together at one workstation. One writes the
code (the driver) while the other reviews each line of code as it’s written (the observer or
navigator).
3. Continuous Integration: Code changes are integrated into the main codebase frequently,
often multiple times a day, to avoid integration problems.
4. Refactoring: Continuously improving the design of the code without changing its
functionality, making the code simpler and more maintainable.
5. Small Releases: Delivering small, functional pieces of the software frequently. This allows for
quicker feedback and reduces the risk of large, unmanageable changes.
6. Collective Code Ownership: Every team member is responsible for the entire codebase.
Anyone can make changes anywhere in the code at any time.
7. Coding Standards: Adhering to a set of agreed-upon coding standards to ensure code
consistency and readability.
8. Sustainable Pace: Working at a pace that can be sustained indefinitely without causing
burnout. Typically, this means not working overtime regularly.
9. Customer Involvement: The customer (or a customer representative) is always available to
provide feedback, clarify requirements, and set priorities.
10. Planning Game: A collaborative planning process where the team and the customer decide
the features to be implemented in the next iteration based on their priority and the team's
capacity.
Improved Software Quality: Practices like TDD and refactoring lead to higher quality and
more maintainable code.
Flexibility: The iterative approach allows for easy accommodation of changing requirements.
Customer Satisfaction: Frequent releases and customer involvement ensure that the
product meets user needs.
Enhanced Team Collaboration: Practices like pair programming and collective code
ownership foster teamwork and knowledge sharing.
Challenges of XP
Cultural Shift: Requires significant changes in mindset and practices, which can be
challenging for teams accustomed to traditional development methods.
Discipline: Requires strict adherence to practices, which can be difficult to maintain.
Resource Intensive: Practices like pair programming can be seen as resource-intensive,
although they can lead to higher quality and fewer bugs in the long run.
1. Focus on the Business Need: Every decision is taken with business priorities in mind to
deliver the maximum business value.
2. Deliver on Time: Using timeboxing, projects are kept on schedule with set deadlines for each
phase.
3. Collaborate: Effective collaboration between all stakeholders, including the development
team and business users, is emphasized.
4. Never Compromise Quality: Quality is never sacrificed; standards are set from the start and
maintained throughout.
5. Build Incrementally from Firm Foundations: Development progresses in iterations, building
on a solid understanding of requirements and architecture.
6. Develop Iteratively: Iterative development allows for refinement and adaptation based on
feedback.
7. Communicate Continuously and Clearly: Open and clear communication is crucial for
effective collaboration and progress tracking.
8. Demonstrate Control: Project control is maintained through clear and frequent status
checks and adjustments.
Objective: Check if the project is possible and worth doing. Understand the basic business
requirements and constraints.
Output: Feasibility Report, Outline Plan, Risk Log
2. Business Study
Objective: Understand the detailed business needs and information requirements for the
project. Identify the basic design and maintainability requirements.
Output: Business Study Report, Prioritized Requirements List, Outline Prototype
3. Functional Model Iteration
Objective: Create small models (prototypes) that show how the system will work. Gather
additional requirements by getting feedback from users as they try out the prototypes.
Output: Functional Prototypes, Updated Prioritized Requirements List
Objective: Improve the prototypes created during the functional model iteration to make
sure they provide real business value to end users. Sometimes, functional model iteration
and design and build iteration happen at the same time.
Output: Tested System Components, User Documentation
5. Implementation
Objective: Deploy the latest version of the code (an operational prototype) into the real
environment. Note that:
o (a) The increment might not be 100% complete, or
o (b) Changes may be requested when the increment is deployed. In either case,
DSDM development continues by returning to the functional model iteration
activity.
Output: Implemented System, Project Review Report
History
FDD was first applied in the year 1997 on a real-world application
by Jeff De Luca for large software development with specific
needs of 15-month and 50 persons and published as a discussion
in book Java Modeling in Color with UML in the year 1999.
FDD Lifecycle
Build overall model
Build feature list
Plan by feature
Design by feature
Build by feature
Characteristics of FDD
Short iterative: FDD lifecycle works in simple and short
iterations to efficiently finish the work on time and gives
good pace for large projects.
Customer focused: This agile practice is totally based
on inspection of each feature by client and then pushed
to main build code.
Structured and feature focused: Initial activities in
lifecycle builds the domain model and features list in the
beginning of timeline and more than 70% of efforts are
given to last 2 activities.
Frequent releases: Feature-driven development
provides continuous releases of features in the software
and retaining continuous success of the project.
Advantages of FDD
Reporting at all levels leads to easier progress tracking.
FDD provides continuous success for larger size of teams
and projects.
Reduction in risks is observed as whole model and design
is build in smaller segments.
FDD provides greater accuracy in cost estimation of the
project due to feature segmentation.
Disadvantages of FDD
This agile practice is not good for smaller projects.
There is high dependency on lead programmers,
designers and mentors.
There is lack of documentation which can create an issue
afterwards.