Crafting Quality Software
Best Good Practices
Intro - Tarcio
Intro - Adam
What is Quality?
What is Quality?
Meets
customer needs
and provides
satisfaction
“Fitness for use”
(Juran)
“Conformance
to requirements”
(Crosby)
“Quality is pride
of workmanship”
(Deming)
Freedom from
defects of
deficiencies
Value of
worthiness
Definition of
quality
How good or bad
something is?
What is Quality?
What is Quality?
What is Quality?
What is Quality?
● Perceptions
● Preconditioned
● Experiences
● Education
● Culture
● Opinions
Individual Traits
A Historical Perspective of Quality
A Historical Perspective of Quality
A Historical Perspective of Quality
A Historical Perspective of Quality
A Historical Perspective of Quality
Integrate learnings
Renew theories
Adjust methods
Do we need to
learn more?
Act
Study
(Check)
Do
Plan
Monitor outcomes, test
validity
of theory. Test the plan.
Examine success or
unexpected outcomes.
Look for new lessons or
problems to solve.
Execute the plan,
carry out the
activities, apply our
best knowledge,
pursue the desired
purpose and goals.
Identify purpose and
goals. Formulate
theories and
proposals. Define
measures of success
(and how to measure
them). Plan activities.
A Historical Perspective of Quality
● Team motivation.
● Increased customer satisfaction.
● Return on investment.
What are the Benefits of Quality?
● Individual and collective responsibility.
● Individuals can contribute in different ways.
● Starts when an idea is conceived and
continues throughout a product’s lifecycle.
Who is Responsible?
Applying Quality
3 Aspects of Software Quality
Process
Structural Functional
What can we do to
ensure quality?
Does the software do what
is supposed to do?
Is the software easy to
modify and enhance?
Functional and Structural Traits
Correctness
Usability
Efficiency
Reliability
Integrity
Adaptability
Accuracy
Robustness
Maintainability
Flexibility
Portability
Reusability
Readability
Testability
Understandability
Security
FunctionalStructural
Process’ activities
Inception
Iteration
Zero
Iteration
Kick Off
Story
Kick Off
Story
Walkthrough
Release
Development Retrospective
Functional + Structural Quality
UnderstandabilityKnowledge share
Pairing
Better
written software
Team Collaboration
Pair Programming
Nope, not like this
Pair Programming
Yeah, more like this
Pair Programming Traits
● Emotionally demanding
● Constant learning
● Conversational
● Collaborative
● High quality output
● Costly (2 heads per problem)
TIME
Productivity
Q
uality
Cost
Testing
Functional + Structural Quality
TestabilityValidates requirements
Confidence
Robustness
● Costs more
● No real focus
● Slow to run
● Longer to write
● Too Integrated
Testing Sad Reality
Testing Ideal
Exploratory
Testing
Test Driven Development
Test Driven Development
● Not a silver bullet
● Know when to use it
● Understand first, TDD later
Unit Testing
Small
Fast
Isolated
Cost effective
Focused
Unit Testing
Helps design
Find issues early
Facilitate change
Facilitate integration
Integration Testing
Two unit tests, no integration test.
Acceptance Testing
Exploratory Testing
Test Design
Test Execution
Analysis
Learn
Other Types of Testing
“You never know what a customer will do
to your product until they do it”
- Adam Crough
● Smoke testing.
● Penetration testing.
● Performance testing.
● User testing.
● Accessibility testing.
● Regression testing.
● A/B testing.
● Functional testing.
● Acceptance testing.
● Security testing.
Continuous Integration
● Automate code checks
● Exercise regression testing
● Improves team confidence
Visibility
Continuous Delivery
Plan Build
Release Test
One more thing
User Validation
User Validation - Types
Q & A Observation Prototyping Release early
User Validation - Benefits (Case Study)
18 Month Project
3 months 6 months 9 months
Final thoughts
Collaborate often
Test, test, test
Automate checks
Visualize results
Involve users early
Everyone is responsible for quality
Thank you!
@tarciosaraiva
http://bit.ly/acrough

Crafting Quality Software