ASE Unit-5
ASE Unit-5
ASE Unit-5
Agile product development refers to a set of product development practices and methods
based on the principles and values of the Agile Manifesto. In Agile product development,
teams build products using short iterations that enable continuous feedback and rapid
improvement.
The Agile methodology is an iterative approach to project management that focuses on
breaking down projects into smaller, more manageable tasks. Compared to traditional project
management approaches like Waterfall, Agile prioritizes speed, flexibility, cross-team
collaboration, and frequent feedback. Teams continuously evaluate requirements, progress,
and results, so they can respond to change quickly.
The product development process is divided into sprints or iterations—short and periodic
time frames that usually last from one to four weeks. Each sprint starts with a planning
meeting where cross-functional teams come together to discuss and prioritize the work that
needs to be done.
Every iteration is like a small project that includes all the stages of the product development
process, from product discovery to release. Once the sprint ends, the product team presents a
working product, or Minimum Viable Product (MVP), to customers and stakeholders. The
goal is to create something simple that they can iterate on based on users’ feedback. It might
take multiple iterations before launching the final feature or product to market.
THE PROS
High flexibility. Continuous delivery and constant iterations allow product teams to adjust or
shift priorities as the project moves forward. Agile teams can adapt to change rapidly and
tailor the product to the customers' expectations.
Reduced risk. As testing is run at the end of each sprint, product teams can identify problems
early and solve them before they become major issues. The fast feedback loops help them
validate assumptions and understand what adds real value to the customer.
Faster time-to-market. Agile teams deliver smaller and more frequent releases to customers.
Reducing the time to market gives companies a competitive advantage—they can collect
more frequent feedback and react faster to market changes.
THE CONS
Less predictability. Agile values responding to change rather than following a plan. The
possibility to adjust requirements and priorities as the project evolves makes it harder to
predict efforts like cost, time, and resources needed.
More time and dedication. Agile product development demands a considerable commitment
from everyone involved in the project. Cross-functional teams need to communicate and
collaborate on an ongoing basis to evaluate what is working and what needs improvement.
Lack of long-term planning. An Agile project can run the risk of losing direction, going off
track, or falling behind schedule due to frequently changing requirements.
Key tips for a successful agile product development process
Fast and efficient product development becomes a competitive advantage in an ever-changing
market. By following an Agile methodology, you and your product team will be able to
respond quickly to shifting customer needs and adjust the direction as needed.
More and more companies are recognizing the benefits of Agile product development. But
what are the best ways to transition to an Agile process? Here are a few tips to keep in mind:
Agile is, first and foremost, a mindset. Make sure everyone in the team understands and fully
embraces the Agile values and principles.
Encourage team members to communicate and collaborate often. The alignment of goals and
priorities is vital for the success of a cross-functional team.
Promote continuous improvement. Try the Agile approach with smaller projects at first,
experiment with different practices, and discuss what works best for you with your team.
Test early and often. Incorporate tests at every stage of the product development process to
get real-time feedback that helps you iterate and improve.
When it comes to software development , quality is everything. Quality
Assurance (QA) is a systematic process that ensures product and service
excellence. A robust QA team examines the requirements to design, develop,
and manufacture reliable products whereby increasing client confidence,
company credibility and the ability to thrive in a competitive environment. We
want to give you some of our best practice tips for the agile QA process .The
agile QA process begins at the inception of the software development life
cycle. From the initial design meeting, through the development phase, to final
testing and hardening of the application. This process is repeated in two-week
sprints until the project is released.
AGILE METRICS
Agile metrics help agile development teams and their management measure the development
process, gauging productivity, work quality, predictability, and health of the team and
products being developed. A key focus of agile metrics is on value delivered to customers –
instead of measuring “what” or “how much” we are doing, we measure how it impacted a
customer.
Lean metrics – Focus on ensuring a flow of value from the organization to its
customers and eliminating wasteful activities. Common metrics include lead time and
cycle time.
Kanban metrics – Focus on workflow, organizing and prioritizing work and getting
it done. A common metric is a cumulative flow.
Scrum metrics – Focus on the predictable delivery of working software to customers.
Common metrics include the burndown chart and team velocity.
Agile methodologies place a special emphasis on quality because the end goal is delivering
working software to users – buggy or unusable software is not working software. Quality is
also manifested in internal aspects that are not directly visible to customers, such as code
quality, maintainability and technical debt.
Agile testing metrics can help teams measure and visualize the effort spent in software
quality, and to a certain extent, the results of this effort. For example, the escaped defects
metric measures, across versions, sprints or product lines, how many bugs were discovered in
production – whereas ideally bugs should be discovered and fixed during the development
stage.
What makes for a powerful metric in an agile environment?
Agile environments require metrics that are well understood by teams and can help learn and
improve processes.
Here are a few qualities that make a metric powerful, in the sense that it can help drive
positive improvement in an agile team:
The metric is used by the team – Agile metrics should not be imposed or measured
by management, they should be used voluntarily by agile teams to learn and improve.
The metric is surrounded by conversation – Metrics should not just be numbers,
they should be the starting point of a conversation about process and roadblocks
affecting the team.
The metric is part of a specific experiment – Metrics should be used to answer a
specific question about agile processes, not just measured for the sake of
measurement.
The metric is used in tandem with other metrics – Even a great metric, if used
alone, might lead to tunnel vision, and incentivise teams to maximize that metric at
the expense of all else. Using several metrics together provides a balanced picture of
agile activity.
The metric is easy to calculate and understand – Metrics that are overly complex
or not fully understood, even if they provide good insights about a team’s work, are
not useful in guiding day-to-day activities.
1. Sprint Burndown
The sprint burndown chart visualizes how many story points have been completed during the
sprint and how many remain, and helps forecast if the sprint scope will be completed on time.
Makes it instantly clear how much value a sprint has already delivered and how close we are
to completing our commitment to customers.
2. Agile Velocity
Velocity measures how many story points were completed by a team, on average, over the
past few sprints. It can be used to predict the team’s output in the upcoming sprints.
Velocity is powerful because it’s a result metric – how much value was actually
delivered to customers in a series of sprints. Be careful not to compare velocity across teams
because story points and definition of done can vary between teams.
3. Lead Time
Lead time measures the total time from the moment a story enters the system (in the
backlog), until it is completed as part of a sprint, or released to customers. It measures the
total time for a requirement to be realized and start earning value – the speed of your value
chain.
lead time is more important than velocity because it measures the entire agile system
from end to end. Reducing lead time means the entire development pipeline is becoming
more efficient.
4. Cycle Time
As illustrated above, the cycle time is a subset of lead time – it measures the time for a task to
go from “started” or “in progress” to “done”. Normally, cycle times should be around half the
sprint length. If cycle times are longer than a sprint, teams are not completing work they
committed to.
A very simple metric that can raise a red flag when items within sprints across your entire
system are not moving forward.
5. Code Coverage
Code coverage measures the percentage of your code which is covered by unit tests. It can be
measured by the number of methods, statements, branches or conditions which are executed
as part of a unit test suite.
Code coverage can be run automatically as part of every build and gives a crude
picture showing how much of the codebase has been tested. A low code coverage almost
always indicates low code quality. However, a high coverage may not equal high quality,
because there are other types of tests – such as UI or integration tests – which are not
counted.
6. Static Code Analysis
While not exactly a metric, this is an automated process that can provide insights into code
quality and clean code from simple errors redundancies. Code quality, while difficult to
define and measure, is known to be a key contributor to software quality in general, and in
particular, software maintainability.
Static code analysis provides a safe baseline for code quality. However, it is no
substitute for human input into code quality, via manual code reviews, pair programming or
other methods.
Net Promoter Score (NPS), calculated for a software release, measures whether users would
recommend the software to others, do nothing, or recommend against using it. It is an
important gauge of customer satisfaction.
8. Cumulative Flow
This is a kanban metric which shows the status of tasks – in a sprint, a release or across
software teams. It can visualize bottlenecks in the process – a disproportionately large
number of tasks in any of the workflow stages indicates a problem. For example, a big
“bubble” in the chart in a verification or testing stage indicates this stage has insufficient
resources.
As with the burndown chart, the power of this metric is in its visual simplicity – you
can grasp a process in one glance and immediately identify issues. Cumulative flow lets you
catch problems in mid-process before they result in delayed delivery.
9. Failed Deployments
Measures the number of deployments (either to test, production environments, or both). Can
help understand how solid environments are and whether teams are really building potentially
shippable software.
Especially when applied to production environments, this metric can provide a clear
indication that sprints or releases are production ready, or not.
The number of bugs discovered only after a build or release enters production. Escaped
defects should ideally be zero. Measuring them across releases or teams provides a crude, but
still highly relevant, a measure of deployed software quality.
Production bugs, especially if frequent, are a problem in the agile process. Just like in
lean manufacturing, we should “stop the production line” and discover what’s wrong.
A new category of tools called Software Quality Intelligence can provide this missing
metric: a clear view of software quality. SeaLights is a platform which combines data about
code changes, production uses and test execution, to provide the following quality metrics:
Test gap analytics—Identifying areas where the code was recently changed or
executed in production but is untested. Test gaps are the best place to invest resources
to improve quality.
Quality trend intelligence—Showing which parts of a system are improving in
quality coverage, and which are getting worse—meaning more testing time should be
invested.
Release quality analytics—SeaLights performs real-time analytics on hundreds of
thousands of test executions, code changes, builds and production events to assess the
readiness of a release. Which build is best and provides the highest quality for users?
Financial Metrics:
1. Cost per Feature: Calculate the cost of developing each feature. This metric helps in
assessing the efficiency of development efforts and budget allocation.
2. Return on Investment (ROI): Evaluate the financial returns generated by features
developed using FDD. This metric is essential for assessing the profitability of
individual features or the project as a whole.
3. Resource Utilization: Measure the utilization of resources, including developer time
and infrastructure costs, to ensure efficient allocation and cost control.
4. Cost Overruns: Monitor and report any deviations from the budget or unexpected
costs that arise during feature development.
5. Customer Acquisition Cost (CAC): Calculate the cost of acquiring new customers
or users, which is particularly relevant for projects involving new features that aim to
attract or retain customers.
6. Revenue per Feature: Assess the revenue generated by individual features. This
metric can be used to prioritize and invest in the development of features that have a
higher potential to drive revenue.
Production Metrics:
1. Feature Completion Rate: Track the rate at which features are completed and
delivered to the end-users. This helps in measuring the progress of feature
development.
2. Defect Density: Monitor the number of defects or issues found in each feature. Lower
defect density is a sign of higher quality and efficiency in development.
3. Feature Lead Time: Measure the time it takes from the inception of a feature idea to
its implementation and delivery. Reducing lead time can improve overall agility.
4. Feature Cycle Time: Track the time it takes to develop and release a single feature.
This metric can help identify bottlenecks and improve development efficiency.
5. Feature Test Coverage: Measure the extent to which a feature is covered by
automated tests. High test coverage is crucial for maintaining product quality.
6. Feature Feedback Loop Time: Analyze the time it takes to gather user feedback and
make improvements to features. Reducing this time can lead to more customer-centric
development.
7. Feature Dependency Analysis: Identify and assess dependencies between features.
Managing dependencies effectively is essential for maintaining a smooth development
flow.
8. Feature Retrospective Metrics: Collect feedback from development teams on each
feature development cycle to continuously improve the FDD process.
9. Feature Prioritization and Value Metrics: Evaluate how effectively features are
prioritized based on their value to the business or users.
In FDD, these financial and production metrics provide insights into the project's health and
progress, enabling teams and stakeholders to make informed decisions about the development
process and the potential impact on the business. It's important to adapt and select metrics
that align with the goals and objectives of the specific project being managed using FDD.
AGILE QA PROCESS
Most companies have made the shift from the traditional waterfall development
methodology to an agile process. Agile testing introduces QA into the project
as early as possible to foresee issues, write and execute test cases, and uncover
any gaps in requirements. With the project divided into iterative stages, QA
engineers are able to add focus to the development process and provide rapid,
continuous feedback.
Sprints benefit the client by delivering working software earlier rather than later,
anticipating change, providing better estimates in less time, and allowing for course
corrections instead of completely derailing the project. The QA team can incorporate
lessons learned from previous projects to improve the process for future projects. .
RISK ANALYSISAn important aspect of any QA process is risk analysis. Risk
analysis is defined as the process of identifying and assessing potential risks and their
impact. The process helps organizations avoid and mitigate risks.
It’s highly unlikely for an application to be 100% bug free, but a dedicated QA
team should attempt to remove or prevent the most problematic bugs.
Understanding all the possible outcomes of a project allows your team to
establish preventive measures that reduce the probability of occurrence.
The agile model aims to incorporate QA at each stage of the project’s lifecycle
to identify issues as early as possible. Within each sprint, QA engineers test
and retest the product with each new feature added. This allows them to
validate that the new features were implemented as expected and to catch any
problems that may have been introduced. Testing early and often leads to the
conservation of time and budget.
Understanding the target audience will improve the QA process. Tailoring the
development and QA process around your users needs will enable your team to
build value-driving applications. When you are familiar with who will be using the
actual end-product, you can better prioritize the QA process to save time and
money.
The TDD approach originates from the Agile manifesto principles and Extreme
programming.
As the name suggests, the test process drives software development.
Moreover, it’s a structuring practice that enables developers and testers to obtain optimized
code that proves resilient in the long term.
In TDD, developers create small test cases for every feature based on their initial
understanding. The primary intention of this technique is to modify or write new code only if
the tests fail. This prevents duplication of test scripts.
Approach: TDD is an agile development methodology where tests are written before the
code is developed. In contrast, traditional testing is performed after the code is written.
Testing Scope: TDD focuses on testing small code units at a time, while traditional testing
covers testing the system as a whole, including integration, functional, and acceptance
testing.
Iterative: TDD follows an iterative process, where small chunks of code are developed,
tested, and refined until they pass all tests. The code is usually tested once and then refined
based on the results in traditional testing.
Debugging: TDD aims to catch errors as early as possible in the development process,
making debugging and fixing them easier. Traditional testing, on the other hand, may require
more effort to debug errors that are discovered later in the development process.
Documentation: TDD documentation typically focuses on the test cases and their results,
while traditional testing documentation may include more detailed information about the
testing process, the test environment, and the system under test.
Overall, TDD offers a more efficient and reliable approach to software development,
ensuring that code is thoroughly tested before being integrated into the system. Traditional
testing, however, may be more appropriate for larger and more complex projects where a
more comprehensive approach to testing is required.
1. Create precise tests: Developers need to create exact unit tests to verify the
functionality of specific features. They must ensure that the test compiles so that it can
execute. In most cases, the test is bound to fail. This is a meaningful failure as developers
create compact tests based on their assumptions of how the feature will behave.
2. Correcting the Code: Once a test fails, developers must make the minimal changes
required to update the code to run successfully when re-executed.
3. Refactor the Code: Once the test runs successfully, check for redundancy or any
possible code optimizations to enhance overall performance. Ensure that refactoring does not
affect the external behavior of the program.
The image below represents a high-level TDD approach toward development:
1. csUnit and NUnit are open source unit testing frameworks for .NET projects.
2. PyUnit and DocTest: Popular Unit testing framework for Python.
3. Junit: Widely used unit testing tool for Java
4. TestNG: Another popular Java testing framework. This framework overcomes the
limitations of Junit.
5. Rspec: A testing framework for Ruby projects
Agile is a type of software development methodology that anticipates the need for flexibility
and applies a level of pragmatism to the delivery of the finished product. Agile software
development requires a cultural shift in many companies because it focuses on the clean
delivery of individual pieces or parts of the software and not on the entire application.
Benefits of Agile include its ability to help teams in an evolving landscape while maintaining
a focus on the efficient delivery of business value. The collaborative culture facilitated by
Agile also improves efficiency throughout the organization as teams work together and
understand their specific roles in the process. Finally, companies using Agile software
development can feel confident that they are releasing a high-quality product because testing
is performed throughout development. This provides the opportunity to make changes as
needed and alert teams to any potential issues.
Agile has largely replaced waterfall as the most popular development methodology in most
companies, but is itself at risk of being eclipsed or consumed by the growing popularity
of DevOps.
In 2001, 17 software development professionals gathered to discuss concepts around the idea
of lightweight software development and ended up creating the Agile Manifesto. The
Manifesto outlines the four core values of Agile, and although there has been debate about
whether the Manifesto has outlived its usefulness, it remains at the core of the Agile
movement.
The four core values outlined in the Agile Manifesto are as follows:
Individual interactions are more important than processes and tools. People drive the
development process and respond to business needs. They are the most important part of
development and should be valued above processes and tools. If the processes or tools drive
development, then the team will be less likely to respond and adapt to change and, therefore,
less likely to meet customer needs.
A focus on working software rather than thorough documentation. Before Agile, a large
amount of time was spent documenting the product throughout development for delivery. The
list of documented requirements was lengthy and would cause long delays in the
development process. While Agile does not eliminate the use of documentation, it streamlines
it in a way that provides the developer with only the information that is needed to do the work
-- such as user stories. The Agile Manifesto continues to place value on the process of
documentation, but it places higher value on working software.
The Agile software development cycle can be broken down into the following six steps:
concept
inception
iteration/construction
release
production
retirement
The first step, concept, involves the identification of business opportunities in each potential
project as well as an estimation of the time and work that will be required to complete the
project. This information can then be used to prioritize projects and discern which ones are
worth pursuing based on technical and economic feasibility.
During the second step, inception, team members are identified, funding is established and
the initial requirements are discussed with the customer. A timeline should also be created
that outlines the various responsibilities of teams and clearly defines when work is expected
to be completed for each sprint. A sprint is a set period of time during which specific work
has to be completed and made ready for review.
A
visualization of the Agile software development cycle
The third step, iteration/construction, is when teams start creating working software based on
requirements and continuous feedback. The Agile software development cycle relies on
iterations -- or single development cycles -- that build upon each other and lead into the next
step of the overall development process until the project is completed. Each iteration typically
lasts between two to four weeks, with a set completion date. The goal is to have a working
product to launch at the end of each iteration.
Multiple iterations occur throughout the development cycle and they each possess their
own workflow. A typical iteration flow consists of the following:
defining requirements based on the product backlog, sprint backlog and customer and
stakeholder feedback;
developing software based on the set requirements;
conducting QA testing, internal and external training and documentation;
delivering and integrating the working product into production; and
gathering customer and stakeholder feedback on the iteration in order to define new
requirements for the next sprint.
The fourth step, release, involves final QA testing, resolution of any remaining defects,
finalization of the system and user documentation and, at the end, release of the final iteration
into production.
After the release, the fifth step, production, focuses on the ongoing support necessary to
maintain the software. The development teams must keep the software running smoothly
while also teaching users exactly how to use it. The production phase continues until the
support has ended or the product is planned for retirement.
The final step, retirement, incorporates all end-of-life activities, such as notifying customers
and final migration. The system release must be removed from production. This is usually
done when a system needs to be replaced by a new release or if the system becomes outdated,
unnecessary or starts to go against the business model.
Throughout the Agile cycle, different features can be added to the product backlog, but the
entire process should consist of repeating each step over and over until every item in the
backlog has been satisfied. This makes the Agile cycle more of a loop than a linear process.
At any time, an enterprise can have multiple projects occurring simultaneously with iterations
that are logged on different product lines and a variety of internal and external customers
providing different business needs.
The goal of every Agile methodology is to embrace and adapt to change while delivering
working software as efficiently as possible. However, each method varies in the way it
defines the steps of software development. The most widely used Agile methods include the
following:
Scrum
Lean software development
Extreme programming
Crystal
Kanban
Dynamic systems development method
Feature-driven development