Professional Documents
Culture Documents
Se M4 Combine
Se M4 Combine
12 Agile Principles
➢ Principles behind the Agile Manifesto We follow these principles:
1. Our highest priority is to satisfy the customer through early and continuous
delivery of valuable software.
2. Welcome changing requirements, even late in development. Agile processes
harness change for the customer's competitive advantage.
3. Deliver working software frequently, from a couple of weeks to a couple of
months, with a preference to the shorter timescale.
4. Business people and developers must work together daily throughout the project.
5. Build projects around motivated individuals. Give them the environment and
support they need, and trust them to get the job done.
6. The most efficient and effective method of conveying information to and within
a development team is face-to-face conversation.
7. Working software is the primary measure of progress.
8. Agile processes promote sustainable development. The sponsors, developers,
and users should be able to maintain a constant pace indefinitely.
9. Continuous attention to technical excellence and good design enhances agility.
10. Simplicity--the art of maximizing the amount of work not done--is essential.
11. The best architectures, requirements, and designs emerge from self-organizing
teams.
12. At regular intervals, the team reflects on how to become more effective, then
tunes and adjusts its behavior accordingly.
Who does Agile Development?
➢ Software engineers, managers ,customers and end users work together on an agile
team.
Agile Development-steps
➢ Communication
➢ Planning
➢ Modelling
➢ Construction
➢ Deployment
o Software increments are delivered to the customer on the appropriate commitment
date.
What is Agility?
❖ The ability to both create and respond to change in order to profit in a turbulent
business environment
❖ Agile-very active (ready to accept changes)
o Changes because of new technology.
o Support for changes should be built in everything we do in software.
❖ Encourages more effective communication .
❖ Emphasizes rapid delivery of operational software
Characteristics
➢ Modularity
➢ Iterative
➢ Time-bound
➢ Incremental
➢ Convergent
➢ People-oriented
➢ Collaborative
Human Factors
➢ Process moulds to the needs of the people and team, not the other way around
➢ key traits must exist among the people on an agile team and the team itself:
o – Competence. ( talent, skills, knowledge)
o – Common focus. ( deliver a working software increment )
o – Collaboration. ( peers and stakeholders)
o – Decision-making ability. ( freedom to control its own destiny)
o – Fuzzy problem-solving ability.(ambiguity and constant changes, today
problem may not be tomorrow’s problem)
o – Mutual trust and respect
o – Self-organization. ( themselves for the work done, process for its local
environment, the work schedule)
Agile Methodologies
➢ eXtreme Programming (XP)
➢ Scrum
➢ Crystal family of methodologies
➢ Feature-Driven Development (FDD)
➢ Adaptive Software Development (ASD)
➢ Dynamic System Development Model (DSDM)
➢ Agile Unified Process (AUP)
The 12 Practices
1. The Planning Game
2. Small Releases
3. Metaphor
4. Simple Design
5. Testing
6. Refactoring
7. Pair Programming
8. Collective Ownership
9. Continuous Integration
10. Forty Hour work week
11. On-Site Customer
12. Coding Standards
User stories
❖ Requirements via User Stories
❖ Short cards with natural language description of what a customer wants
❖ Prioritized by customer
❖ Resource and risk estimated by developers
❖ Via “The Planning Game”
❖ Play the Planning Game after each increment
1 - The Planning Game
➢ Planning for the upcoming iteration
➢ Uses stories provided by the customer
➢ Technical persons determine schedules, estimates, costs, etc
➢ A result of collaboration between the customer and the developers.
➢ Sometimes its is hard to estimate the required resources
➢ Small releases have less risk
➢ Requirements specification (SRS) is better than user stories (Written documentation
works well for large projects) Advantages
➢ Reduction in time wasted on useless features
➢ Greater customer appreciation of the cost of a feature
➢ Less guesswork in planning Disadvantages
➢ Customer availability
➢ Is planning this often necessary?
2- Small Releases
➢ Small in terms of functionality
➢ Small releases are really valuable
➢ Manage the risk of delivering something wrong
➢ Helps the customer to define better requirements
➢ Less functionality means releases happen more frequently
➢ Release every few weeks
➢ Large projects are not so flexible
➢ Try to release something, even you know that it will be changed
➢ Support the planning game Advantages
➢ Frequent feedback
➢ Tracking • Reduce chance of overall project slippage Disadvantages
➢ Not easy for all projects
➢ Not needed for all projects
➢ Versioning issues
3 – Metaphor
➢ The oral architecture of the system
➢ A common set of terminology Advantages
➢ Encourages a common set of terms for the system
➢ Reduction of buzz words and jargon
➢ A quick and easy way to explain the system Disadvantages
➢ Often the metaphor is the system
➢ Another opportunity for miscommunication
➢ The system is often not well understood as a metaphor
4 – Simple Design
➢ K.I.S.S. (keep it simple stupid)
➢ Do as little as needed, nothing more
➢ No Big Design Up Front (BDUF)
➢ Do The Simplest Thing That Could Possibly Work
➢ Not too much formal documentation.
➢ Simple design does not mean "no design"
➢ It is about establishing priorities
➢ If something is important for this release and for the whole system, it should be
designed well
➢ Don't lose time to design something you will not use soon! Advantages
➢ Time is not wasted adding superfluous functionality
➢ Easier to understand what is going on
➢ Refactoring and collective ownership is made possible
➢ Helps keeps programmers on track Disadvantages
➢ What is “simple?”
➢ Simple isn’t always best
5 – Testing
➢ Unit testing (use for complex logic only)
➢ Test-first design (Developers write unit tests before coding))
➢ All automated (regression test)
➢ Acceptance Tests (Acts as ‘contract’, Measure of progress) Advantages
➢ Unit testing promote testing completeness
➢ Test-first gives developers a goal
➢ Automation gives a suite of regression test Disadvantages
➢ Automated unit testing isn’t for everything
➢ Reliance on unit testing isn’t a good idea
➢ A test result is only as good as the test itself
6 – Refactoring
➢ Changing how the system does something but not what is done
➢ Improve the design of existing code without changing its functionality
➢ Relies on unit testing to ensure the code is not broken
➢ Improves the quality of the system in some way.
➢ Delivering working software faster is important!
➢ You can write the code to run somehow
➢ With simple design
➢ With less effort
➢ Later you can refactor the code if necessary
➢ Bad smells in code:
1. Long method / class
2. Duplicate code
3. Methods does several different things (bad cohesion)
4. Too much dependencies (bad coupling)
5. Complex / unreadable code
➢ Refactoring is not a reason to intentionally write bad code!
➢ Good coding style is always important! Advantages
➢ Prompts developers to proactively improve the product as a whole
➢ Increases developer knowledge of the system Disadvantages
➢ Not everyone is capable of refactoring
➢ Refactoring may not always be appropriate
➢ Would upfront design eliminate refactoring?
7 – Pair Programming
➢ Two Developers, One monitor, One Keyboard
➢ One “drives” and the other thinks
➢ Switch roles as needed.
➢ Pairs produce higher quality code
➢ Pairs complete their tasks faster
➢ Pairs enjoy their work more
➢ Pairs feel more confident in their work
➢ Pair programming is great for complex and critical logic
➢ When developers need good concentration
➢ Where quality is really important
➢ Especially during design
➢ Reduces time wasting
➢ Trivial tasks can be done alone
➢ Peer reviews instead pair programming is often alternative Advantages
➢ Two heads are better than one
➢ Focus • Two people are more likely to answer the following questions:
➢ Is this whole approach going to work?
➢ What are some test cases that may not work yet?
➢ Is there a way to simplify this? Disadvantages
➢ Many tasks really don’t require two programmers
➢ A hard sell to the customers
➢ Not for everyone
8 – Collective Ownership
➢ Code belongs to the project, not to an individual engineer!
➢ The idea that all developers own all of the code
➢ Any engineer can modify any code
➢ Enables refactoring
➢ Better quality of the code
➢ No need to wait for someone else to fix something.
➢ Collective code ownership is absolutely essential
➢ You need to fight the people who don't agree with this!
➢ Fire people writing unreadable and unmaintainable code
➢ Don't allow somebody to own some module and be irreplaceable Advantages
➢ Helps mitigate the loss of a team member leaving
➢ Promotes developers to take responsibility for the system as a whole rather then
parts of the system Disadvantages
➢ Loss of accountability
➢ Limitation to how much of a large system that an individual can practically “own”
9 – Continuous Integration
➢ New features and changes are worked into the system immediately
➢ Code is not worked on without being integrated for more than a day.
➢ Integrating often is really valuable
➢ Sometimes you cannot finish a task for one day and integrate it
➢ For small projects with small teams integration is not an issue
➢ For large and complex projects it's crucial Advantages
➢ Reduces to lengthy process
➢ Enables the Small Releases practice
➢ Disadvantages
➢ The one day limit is not always practical
➢ Reduces the importance of a well-thought-out architecture
10 – Forty Hour work week
➢ The work week should be limited to 40 hours
➢ Regular overtime is a symptom of a problem and not a long term solution
Advantages • Most developers lose effectiveness past 40-Hours
➢ Value is placed on the developers well-being
➢ Management is forced to find real solutions Disadvantages
➢ 40-Hours is a magic number
➢ Some may like to work more than 40-Hours
11 – On-Site Customer
➢ Just like the title says!
➢ Customer available on site
➢ Clarify user stories
➢ Make critical business decisions
➢ Acts to “steer” the project
➢ Developers don’t make assumptions
➢ Developers don’t have to wait for decisions
➢ Gives quick and continuous feedback to the development team
➢ Face to face communication minimizes the chances of misunderstanding Advantages
➢ Can give quick and knowledgeable answers to real development questions
➢ Makes sure that what is developed is what is needed
➢ Functionality is prioritized correctly. Disadvantages
➢ On-site customer actually does not work!
➢ Customers are busy
➢ Meetings every day is working better
➢ Customers are not competent!
➢ Customers always say "Yes, this is what I want" and later say the opposite
➢ You need to think instead of them (Use prototyping )
12 – Coding Standards
➢ All code should look the same
➢ It should not be possible to determine, who coded what, based on the code itself.
Advantages
➢ Reduces the amount of time developers spend reformatting others code
➢ Reduces the need for internal commenting
➢ Call for clear, unambiguous code Disadvantages
➢ Degrading the quality of inline documentation
SCRUM
Scrum Project Management
❖ Scrum project management is a methodology for managing software delivery that
comes under the broader umbrella of agile project management.
❖ It provides a lightweight process framework that embraces iterative and incremental
practices, helping organizations deliver working software more frequently. Overview
of Scrum
❖ Scrum (term borrowed from Rugby) is one of the agile frameworks for software
development
❖ Scrum is an iterative incremental framework for managing complex work (such as
new product development).
❖ It allows us to rapidly and repeatedly inspect actual working software (every two
weeks to one month).
❖ Project is divided into multiple short time boxes of 2-4 weeks duration called
“sprint”. • Every two weeks to a month anyone can see real working software.
❖ Scrum is an agile process that allows us to focus on delivering the highest business
value in the shortest time.
❖ The business sets the priorities.
❖ Teams self-organize to determine the best way to deliver the highest priority
features.
❖ Focus is on delivering working software fast and on team collaboration
❖ Developed by Jeff Sutherland, Ken Schwaber and Mike Beedle. Scrum
Characteristics • Self-organizing teams
❖ Product progresses in a series of month-long “sprints”
❖ Requirements are captured as items in a list of “product backlog”
❖ No specific engineering practices prescribed.
❖ One of the “agile processes”.
❖ No change during a sprint……
❖ Plan sprint durations around how long you can commit to keeping change out of the
sprint Sprint Scrum projects make progress in a series of “sprints”
❖ Analogous to Extreme Programming iterations
❖ Typical duration is 2–4 weeks or a calendar month at most
❖ A constant duration leads to a better rhythm
❖ Product is designed, coded, and tested during the sprint
Scrum View
ROLES
1.Product Owner
2.Scrum Master
3.Team
Product Owner
• Define the features of the product
• Decide on release date and content
• Be responsible for the profitability of the product
• Prioritize features according to market value
• Adjust features and priority every iteration, as needed
• Accept or reject work result
The Scrum Master
• Represents management to the project
• Responsible for enacting Scrum values and practices
• Removes impediments
• Ensure that the team is fully functional and productive
• Enable close cooperation across all roles and functions
• Shield the team from external interferences
• Scrum Master is a trained responsible person, who renders services as described below
:- Scrum Master Services to the Product Owner
• Finding techniques for effective Product Backlog management.
• Helping the Scrum Team understand the need for clear and concise Product Backlog
items.
• Understanding product planning in an empirical environment.
• Ensuring that the Product Owner knows how to arrange the Product Backlog to
maximize value.
• Understanding and practicing agility.
• Facilitating Scrum events as needed. Scrum Master Services to the Scrum Team
• Coaching the Scrum Team in self-organization and cross-functionality.
• Helping the Scrum Team to create high-value products.
• Removing impediments to the Scrum Team’s progress.
• Facilitating Scrum events as requested or needed.
• Coaching the Scrum Team in organizational environments in which Scrum is not yet
fully adopted and understood. Scrum Master Services to the Organization
• Leading and coaching the organization in its Scrum adoption.
• Planning Scrum implementations within the organization.
• Helping employees and stakeholders understand and enact Scrum and empirical
product development.
• Causing change that increases the productivity of the Scrum Team.
• Working with other Scrum Masters to increase the effectiveness of the application of
Scrum in the organization
Scrum Team
• Typically 5-9 people
• Cross-functional:
• Programmers, testers, user experience designers, etc.
• Members should be full-time
• May be exceptions (e.g., database administrator)
• Teams are self-organizing
• Ideally, no titles but rarely a possibility
• Membership should change only between sprints
CEREMONIES
• Sprint planning
• Sprint review
• Sprint retrospective
Sprint planning
• Team selects items from the product backlog they can commit to completing
• Sprint backlog is created
• Tasks are identified and each is estimated (1-16 hours)
• Collaboratively, not done alone by the Scrum Master
• High-level design is considered
The Sprint Review
• Team presents what it accomplished during the sprint
• Typically takes the form of a demo of new features or underlying architecture
• Informal
• 2-hour prep time rule
• No slides
• Whole team participates
• Invite the world
Sprint Retrospective
• Periodically take a look at what is and is not working
• Typically 15–30 minutes
• Done after every sprint(increment)
• Whole team participates
• Scrum Master
• Product owner
• Team
• Possibly customers and others
The Daily Scrum
• Parameters
• Daily
• 15-minutes
• Stand-up
• Not for problem solving
• Whole world is invited
• Only team members, Scrum Master, product owner, can talk
• Helps avoid other unnecessary meetings
• Is NOT a problem solving session
• Is NOT a way to collect information about WHO is behind the schedule
• Is a meeting in which team members make commitments to each other and to the
Scrum Master
• Is a good way for a Scrum Master to track the progress of the Team
• Everyone answers 3 questions 1. What did you do yesterday? 2. What will you do
today? 3. Is anything in your way?
ARTIFACTS
➢ Product backlog
➢ Sprint backlog
➢ Burndown charts
Scrum Product Backlog
• Scrum Product Backlog is simply a list of all things that needs to be done within the
project.
• It replaces the traditional requirements specification artifacts.
• These items can have a technical nature or can be user-centric e.g. in the form of user
stories.
• it is a prioritized features list, containing short descriptions of all functionality desired
in the product.
• When applying Scrum, it's not necessary to start a project with a lengthy, upfront
effort to document all requirements.
• A Product Backlog is never complete.
• The earliest development of it only lays out the initially known and best-understood
requirements.
• The Product Backlog evolves as the product and the environment in which it will be
used evolves.
• The Product Backlog is dynamic; it constantly changes to identify what the product
needs to be appropriate, competitive, and useful. As long as a product exists, its Product
Backlog also exists.
• The requirements
• A list of all desired work on the project
• Prioritized by the product owner
• Reprioritized at the start of each sprint
Scrum Sprint Backlog
• The sprint backlog is a list of tasks identified by the Scrum team to be completed
during the Scrum sprint (increment).
• During the sprint planning meeting, the team selects some number of product backlog
items, usually in the form of user stories, and identifies the tasks necessary to complete
each user story.
• A short statement of what the work will be focused on during the sprint
• Individuals sign up for work of their own choosing
• Work is never assigned
• Estimated work remaining is updated daily
• Any team member can add, delete or change the sprint backlog
• Work for the sprint emerges
• If work is unclear, define a sprint backlog item with a larger amount of time and break
it down later
• Update work remaining as more becomes known
Burn-down chart
• A burn down chart is a graphical representation of work left to do versus time.
• The outstanding work (or backlog) is often on the vertical axis, with time along the
horizontal.
• That is, it is a run chart of outstanding work.
• It is useful for predicting when all of the work will be completed.
• Are used to represent “work done”.
• Are wonderful Information Radiators
3 Types:
1. Sprint Burn down Chart (progress of the Sprint)
2. Release Burn down Chart (progress of release)
3. Product Burn down chart (progress of the Product)
• X-Axis: time (usually in days)
• Y-Axis: remaining effort
Sprint burn down chart
• Depicts the total Sprint Backlog hours remaining per day
• Shows the estimated amount of time to release
• Ideally should burn down to zero to the end of the Sprint
• Actually is not a straight line
• Can bump UP Release burn down chart
• Will the release be done on right time?
• X-axis: sprints
• Y-axis: amount of hours remaining
• The estimated work remaining can also burn up Product burn down chart
• Is a “big picture” view of project’s progress (all the releases
Scalability
• Typical individual team is 7 ± 2 people
• Scalability comes from teams of teams
• A technique to scale Scrum up to large groups (over a dozen people), consisting of
dividing the groups into Agile teams of 5-10.
• Each daily scrum within a sub-team ends by designating one member as “ambassador”
to participate in a daily meeting with ambassadors from other teams, called the Scrum
of Scrums.
• Scrum of scrums can be used to scale the daily stand-up meeting when multiple teams
are involved.
• Its purpose is to support agile teams in collaborating and coordinating their work with
other teams.
• Factors in scaling
• Type of application
• Team size
• Team dispersion
• Project duration
• The Scrum of Scrums is a regularly scheduled meeting among team representatives
whose purpose is to coordinate dependencies among teams, synchronize delivery
efforts, and provide a heads up for any changes that might be introduced that would
impede others' success.
Desk Checking
• A third human error-detection process is the older practice of desk checking.
• A desk check can be viewed as a one-person inspection or walkthrough:
• A person reads a program, checks it with respect to an error list, and/or walks test data
through it.
• For most people, desk checking is relatively unproductive.
• One reason is that it is a completely undisciplined process.
• A second, and more important reason, is that it runs counter to testing principle 2 (A
programmer should avoid attempting to test his or her own program).
• For this reason, desk checking is best performed by a person other than the author of
the program.
Here are the generic steps followed to carry out any type of Black Box Testing.
• Initially, the requirements and specifications of the system are examined
• Tester chooses valid inputs (positive test scenario) to check whether SUT (System
Under Test) processes them correctly. Also, some invalid inputs (negative test
scenario) are chosen to verify that the SUT is able to detect them
• Tester determines expected outputs for all those inputs
• Software tester constructs test cases with the selected inputs
• The test cases are executed
• Software tester compares the actual outputs with the expected outputs
Black-Box Testing Techniques
1) Equivalence class testing
2) Boundary value testing
3) Decision table testing
4) Pairwise testing
5) State transition testing
6) Use-case testing
Equivalence Class Testing
• Equivalence Partitioning or Equivalence Class Partitioning is type of black box
testing technique which can be applied to all levels of software testing like unit,
integration, system, etc.
• Equivalence class testing is a technique used to reduce the number of test cases (Test
cases consist of inputs, outputs, and order of execution) to a manageable level while
still maintaining reasonable test coverage.
• software testing technique that divides the input data of a software unit into partitions
of equivalent data from which test cases can be derived. In principle, test cases are
designed to cover each partition at least once.
• In this technique, input data units are divided into equivalent partitions that can be
used to derive test cases which reduces time required for testing because of small
number of test cases
• It divides the input data of software into different equivalence data classes. All it
requires are inputs or outputs that can be partitioned based on the system's
requirements.
• An equivalence class consists of a set of data that is treated the same by the module or
that should produce the same result.
• Any data value within a class is equivalent, in terms of testing, to any other value.
• Specifically, we would expect that:
1. If one test case in an equivalence class detects a defect, all other test cases in the
same equivalence class are likely to detect the same defect.
2. If one test case in an equivalence class does not detect a defect, no other test cases
in the same equivalence class is likely to detect the defect.
• Testing-by-Contract is based on the design-by-contract philosophy. Its approach is to
create test cases only for the situations in which the pre-conditions are met.
• Defensive Testing: an approach that tests under both normal and abnormal pre-
conditions.
Use-Case Testing
• A use case is a scenario that describes the use of a system by an actor to accomplish a
specific goal.
• A scenario is a sequence of steps that describe the interactions between the actor and
the system.
• Use cases are made on the basis of user actions and the response of the software
application to those user actions.
• The set of use cases makes up the functional requirements of a system.
• An actor is a user, playing a role with respect to the system, seeking to use the system
to accomplish something worthwhile within a particular context.
• By "actor" we mean a user, playing a role with respect to the system, seeking to use
the system to accomplish something worthwhile within a particular context.
• Actors are generally people although other systems may also be actors.
• The use case is defined from the perspective of the user, not the system.
• It is widely used in developing test cases at system or acceptance level
• An actor is a user, playing a role with respect to the system, seeking to use the system
to accomplish something worthwhile within a particular context.
• By "actor" we mean a user, playing a role with respect to the system, seeking to use
the system to accomplish something worthwhile within a particular context.
• Actors are generally people although other systems may also be actors.
• The use case is defined from the perspective of the user, not the system.
• It is widely used in developing test cases at system or acceptance level
• White box testing is a strategy in which testing is based on the internal paths,
structure, and implementation of the software under test (SUT).
• White box testing is more than code testing—it is path testing.
• Generally, the paths that are tested are within a module (unit testing).
• We can apply the same techniques to test paths between modules within subsystems,
between subsystems within systems, and even between entire systems.
How do you perform White Box Testing?
• It keeps a check at the data receiving points by the variables and its usage points.
• The process is conducted to detect the bugs because of the incorrect usage of data
variables or data values.
• A common programming mistake is referencing the value of a variable without first
assigning a value to it.
• Data flow testing builds on and expands control flow testing techniques.
• As with control flow testing, it should be used for all modules of code that cannot be
tested sufficiently through reviews and inspections.
• Its limitations are that the tester must have sufficient programming skill to understand
the code, its control flow, and its variables.
• Like control flow testing, data flow testing can be very time consuming because of all
the modules, paths, and variables that comprise a system.
Comparison of Black Box and White Box Testing
What is Functional Testing?
➢ Functional testing is a type of testing which verifies that each function of the software
application operates in conformance with the requirement specification. This testing
mainly involves black box testing, and it is not concerned about the source code of the
application.
➢ Every functionality of the system is tested by providing appropriate input, verifying the
output and comparing the actual results with the expected results. This testing involves
checking of User Interface, APIs, Database, security, client/ server applications and
functionality of the Application Under Test. The testing can be done either manually or
using automation
**Testing Automation
➢ Automation Testing or Test Automation is a software testing technique that performs
using special automated testing software tools to execute a test case suite.
➢ On the contrary, Manual Testing is performed by a human sitting in front of a computer
carefully executing the test steps.
➢ Test automation is the process of performing software testing activities with little or no
human interaction, in order to achieve greater speed and efficiency.
Regression Testing
➢ The purpose of regression testing is to verify if code change introduces issues/defects into the
existing functionality.
➢ There are so many kinds of possible changes that can impact the existing functionality in an
application system.
➢ Even the simplest change to the code could impact previously tested functionality.
➢ Regression testing is performed when there is a code change in a software application.
➢ Regression testing:- Test the program's entire functionality to see if any thing changed when
you added new code to the project.
➢ Regression testing (which can also be performed at the unit level) is used to validate the
updated software against the old set of test cases that have already been passed.
➢ Regression testing helps to ensure that changes (due to testing or for other reasons) do not
introduce unintended behavior or additional errors