Agile Engineering Best Practices by Richard Cheng

31
Proprietary Material Provided for Training Purposes Only © 2012 Excella Consulting, Inc.

description

By Richard Cheng, Certified Scrum Trainer and Training Business Unit Lead, Excella Consulting 21st Century IT development requires building quality into our development practices yet many software teams fail to implement technical practices that are necessary for long term success. Practices like automated builds, automated tests, automated deployments, continuous integration, and continuous delivery are now considered essential for the success of any software development project. Without these practices, the quality of software goes downhill and teams can no longer sustain their initial high levels of productivity. However, understanding and implementing the practices can seem daunting. This session presents an easy to understand roadmap for implementing engineering best practices for non-technical audiences. Though this topic is about engineering best practices, attendees do not have to be technical to get value from this session. The session gives a non-technical look at a technical concept and is great for any person in the organization managing, working with, or working on IT teams/programs.

Transcript of Agile Engineering Best Practices by Richard Cheng

Page 1: Agile Engineering Best Practices by Richard Cheng

Proprietary Material Provided for Training Purposes Only © 2012 Excella Consulting, Inc.

Page 2: Agile Engineering Best Practices by Richard Cheng

Richard Cheng - @RichardKCheng

◊ Agile trainer & coach

◊ Member of PMI, Scrum Alliance, Agile Alliance, Agile Leadership Network

◊ CST, PMP, CSM, CSPO, CSP, PMI-ACP

◊  Founder & executive committee member of Agile Defense Adoption Proponents Team (ADAPT), the Agile DoD Task Force

◊ Deep expertise in Federal and commercial Agile transformations

◊ [email protected]

Page 3: Agile Engineering Best Practices by Richard Cheng

Quality and the Business Analyst

Validates work Validates correctness Validates usability

Page 4: Agile Engineering Best Practices by Richard Cheng

◊ Building Quality into the process –  Real time identification of quality issues

•  Automation –  Using the right tools and techniques

21st Century Quality Practices

Page 5: Agile Engineering Best Practices by Richard Cheng

Benefits*

Assuming 100 defects in 10,000 lines of code

1.  Traditional testing finds a defect in about 10 hours

2.  Manual code inspections find a defect in 1 hour

3.  Automated testing finds a defect every 6 minutes

þ 36% reduction in defect ratewhen integration/regression testing at each code check-in

þ 90% reduction in bugs reaching QAMajor municipal gas utility

þ

þ

þ

þ

þ

95% cut in cost of bugsLarge retail web site

90% cut in defect remediation costGlobal supplier of healthcare equipment

Faster time-to-marketMore features and higher quality

Agility in the marketplaceAdded new functionality 2 weeks before ship

Confidence in the process“Oozing Confidence”

*Sources: •  Grant, T. (2005). Continuous integration using cruise control. Northern Virginia Java Users Group (Novajug), Reston, Virginia, USA. •  Fredrick, J. (2008). Accelerate software delivery with continuous integration and testing. Japanese Symposium on Software Testing, Tokyo,

Japan. •  Rico, D. F. (2012). The Cost of Quality (CoQ) for Agile vs. Traditional Project Management. Fairfax, VA: Gantthead.Com.

Page 6: Agile Engineering Best Practices by Richard Cheng

Technology Stacks

◊  .Net ◊ Java ◊ Python ◊ Ruby ◊ JavaScript ◊ Others….

Page 7: Agile Engineering Best Practices by Richard Cheng

Don’t Do It All At Once

Do This First 1.  Version

Control 2.  Build

Automation 3.  Automated

Unit Testing 4.  Continuous

Integration

Next Do This 5.  Static Code

Analysis 6.  Dependency

Management

Then Do This 7.  Automated

Integration Testing

8.  Automated Acceptance Testing

9.  Deployment Automation

Page 8: Agile Engineering Best Practices by Richard Cheng

First Do This

1. Version Control –  What: Repository to persist and track version of code and

artifacts –  Effort: Low –  Sample Tools:

•  Traditional – TFS (MS), Subversion •  Distributed Version Control (branching and merging) - Git,

Mercurial

Page 9: Agile Engineering Best Practices by Richard Cheng

First Do This

2. Build Automation –  What: One click or one command launch of build process –  Effort: Low –  Sample Tools:

•  Microsoft – MSBuild, Powershell •  Java/Others – Ant, Gradle, Maven

Page 10: Agile Engineering Best Practices by Richard Cheng

First Do This

3. Automated Unit Testing –  What: An automated stand alone test that test a single

unit of the code. –  Effort: Medium –  Sample Tools:

•  Unit test tools: JUnit (Java), NUnit (MS), MS Test (MS) •  Advanced tools: Moq, Fluent Assertions

Page 11: Agile Engineering Best Practices by Richard Cheng

First Do This

4. Continuous Integration –  What: Provides frequent verification and notification of

changes to the code and application –  Effort: Medium –  Sample Tools: Jenkins, Hudson, TFS (MS), TeamCity

Page 12: Agile Engineering Best Practices by Richard Cheng

Continuous Integration

Build  #1  compile  

unit  test  

integra0on  test  

package  

deploy/run  

acceptance  test  

analyze  code  

Build    Report  

Version    Control  

change  #1  

change  #2  

Build  Server  

Build  #2  compile  

unit  test  

integra0on  test  

package  

deploy/run  

acceptance  test  

analyze  code  

Build    Report          Email  

Failed  Build  

Page 13: Agile Engineering Best Practices by Richard Cheng

Continuous Integration

◊ CI involves: –  Frequent code check-ins –  Regularly scheduled, automated builds –  Automated tests –  Immediate feedback to developers detailing any build

errors or failed tests

◊ Benefit: –  Developers know immediately upon check-in if their code

works and if any other application features were broken as a result

Page 14: Agile Engineering Best Practices by Richard Cheng

CI Effect on Schedule

Code Phase QA Phase Code Phase QA Phase

Code Phase Code Phase

Code + Test Phase Code + Test Phase

Schedule  

Release  1   Release  2  

Original  Plan  

Reality  

With  CI  

Page 15: Agile Engineering Best Practices by Richard Cheng

Benefits of Continuous Integration

◊ Avoids last-minute chaos at release dates ◊ Early warnings of broken code ◊ Early warning of conflicting changes ◊ Immediate testing of all changes ◊ High availability of a "current" build for testing,

demo, or release purposes

Page 16: Agile Engineering Best Practices by Richard Cheng

Don’t Do It All At Once

Do This First 1.  Version Control 2.  Build

Automation 3.  Automated

Unit Testing 4.  Continuous

Integration

Next Do This 5.  Static Code

Analysis 6.  Dependency

Management

Then Do This 7.  Automated

Integration Testing

8.  Automated Acceptance Testing

9.  Deployment Automation

Page 17: Agile Engineering Best Practices by Richard Cheng

Next Do This

5) Static Code Analysis –  What: Checks for coding standards and code quality –  Effort: Low –  Sample Tools: Visual Studio Code Analysis, FindBugs

(Java), PMD, Cobertura, Sonar, CheckStyle

Page 18: Agile Engineering Best Practices by Richard Cheng

Code Quality

Page 19: Agile Engineering Best Practices by Richard Cheng

Next Do This

6) Dependency Management –  What: Manages 3rd party components and ensure we have

the latest / correct version these components –  Effort: Low –  Sample Tools: Gradle, NuGet

Page 20: Agile Engineering Best Practices by Richard Cheng

Don’t Do It All At Once

Do This First 1.  Version Control 2.  Build

Automation 3.  Automated

Unit Testing 4.  Continuous

Integration

Next Do This 5.  Static Code

Analysis 6.  Dependency

Management

Then Do This 7.  Automated

Integration Testing

8.  Automated Acceptance Testing

9.  Deployment Automation

Page 21: Agile Engineering Best Practices by Richard Cheng

Then Do This

7. Automated Integration Testing –  What: Testing interaction between multiple components to

ensure our component dependencies don’t break –  Effort: Medium to High –  Sample Tools: DBUnit (Java), NDBUnit (MS)

Page 22: Agile Engineering Best Practices by Richard Cheng

Then Do This

8. Automated Acceptance Testing –  What: Automated testing to ensure the systems meets

business needs –  Effort: High –  Sample Tools: SpecFlow, Cucumber, FitNess –  For Browser Testing: Selenium, WatiN

Page 23: Agile Engineering Best Practices by Richard Cheng

Automated Tests

◊ Automated tests involves: –  Unit tests: Testing of smallest possible piece of code that can

operate in isolation –  Integration tests: Testing interaction between multiple

components –  Acceptance tests: Testing complete segments of a system to

ensure it meets the business needs

◊ Benefits –  Enables rapid discovery of root cause –  Reduces defect rate –  Saves time in system test –  Ensures testing starts early in cycle –  Provides for a free regression testing suite

Page 24: Agile Engineering Best Practices by Richard Cheng

Testing Quadrant

Functional Tests Acceptance Tests

Unit Tests Component Tests System Tests

Showcases Exploratory Tests Usability Tests

Performance Tests Security Tests

The

Team

The Product

Functionality

The System from Brian Marick

Page 25: Agile Engineering Best Practices by Richard Cheng

Then Do This

8. Automated Deployment –  What: Push button deployment capabilities –  Effort: High –  Sample Tools: FluentMigrator, Puppet, Octopus

Page 26: Agile Engineering Best Practices by Richard Cheng

Automated Deployments

Sandbox

Production Version Control

CI Server

DB

Web Server Web Server

DB

Test DB

Web Server Web Server

DB

DB

Web Server

Automated  Nightly  Deployments  

Push  Bu6on    Deployments  

Managed    Deployments  

Page 27: Agile Engineering Best Practices by Richard Cheng

Benefits of Automated Deployments

◊ Reduces complexity by using standardized script ◊ Reduces risk by re-running same script ◊ Reduces cost by speeding up deployment ◊ Frees up resources to focus on new features

Page 28: Agile Engineering Best Practices by Richard Cheng

Team Member’s Bill of Rights

1. Every {team member} shall have two monitors 2. Every {team member} shall have a fast PC 3. Every {team member} shall have their choice of

mouse and keyboard 4. Every {team member} shall have a comfortable chair 5. Every {team member} shall have a fast internet

connection 6. Every {team member} shall have {effective} working

conditions

Modified from Jeff Atwood’s http://www.codinghorror.com/blog/2006/08/the-programmers-bill-of-rights.html

Page 29: Agile Engineering Best Practices by Richard Cheng

Useful References

◊ Stephen Ritchie, Pro .NET Best Practices, Apress, 2011.

◊ Paul Duvall, Steve Matyas, and Andrew Glover, Continuous Integration: Improving Software Quality and Reducing Risk, Addison-Wesley, 2007.

◊ Jez Humble, Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation, Addison-Wesley, 2010

Page 30: Agile Engineering Best Practices by Richard Cheng

Excella  Consul<ng  Experience  and  Exper<se  in  Agile  Solu<ons  

–  Coaching  –  Training  –  Assessments  

–  Agile  Adop0on  –  Agile  Development  Teams  –  Agile  PMO  

Training  Courses  –  Cer0fied  ScrumMaster  (CSM)  –  Cer0fied  Scrum  Product  Owner  (CSPO):  The  Agile  Business  Analyst  –  Advanced  Cer0fied  Scrum  Product  Owner  (CSPO)  –  Cer0fied  Scrum  Developer  (CSD)  –  Agile  Tes0ng  –  Agile  Business  Intelligence  and  Data  Warehousing  

See  h3p://www.excella.com/services/agile-­‐training-­‐services.aspx  for  more  informa@on  

Page 31: Agile Engineering Best Practices by Richard Cheng

Contact Information

Richard K Cheng [email protected] 703-967-8620 http://www.excella.com Twitter: @RichardKCheng