Upload
richard-cheng
View
105
Download
0
Tags:
Embed Size (px)
DESCRIPTION
Non technical guide to engineering best practices. Should be applied on IT projects, regardless of Agile or not.
Citation preview
(Agile) Engineering Best PracticesWhat a project manager needs to know
Proprietary Material Provided for Training Purposes Only© 2012 Excella Consulting, Inc.
Richard Cheng
◊ Agile trainer & coach
◊ Excella Agile Center of Excellence Lead
◊ Member of PMI, Scrum Alliance, Agile Alliance, Agile Leadership Network
◊ 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
◊ Building Quality into the process– Real time identification of quality issues
• Automation– Using the right tools and techniques
21st Century Engineering Practices
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.
Don’t Do It All At Once
Do This First1. Version
Control2. Build
Automation 3. Automated
Unit Testing
4. Continuous Integration
Next Do This5. Static Code
Analysis6. Dependency
Management
Then Do This7. Automated
Integration Testing
8. Automated Acceptance Testing
9. Deployment Automation
First Do This
1. Version Control– What: Repository to persist and track version of
code and artifacts – Effort: Low– Sample Tools:
• Distributed Version Control (eliminate branching and merging hell) – Git, Mercurial
• Traditional – TFS (MS), Subversion
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
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
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
Continuous Integration
Build #1compile
unit test
integration test
package
deploy/run
acceptance test
analyze code
Build Report
Version Control
change#1
change#2
BuildServer
Build #2compile
unit test
integration test
package
deploy/run
acceptance test
analyze code
Build Report Email
Failed Build
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
CI Effect on Schedule
Code Phase QA Phase Code Phase QA Phase
Code Phase Code Phase
Code + Test PhaseCode + Test
Phase
Schedule
Release 1 Release 2
Original Plan
Reality
With CI
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
Don’t Do It All At Once
Do This First1. Version
Control2. Build
Automation 3. Automated
Unit Testing 4. Continuous
Integration
Next Do This5. Static Code
Analysis6. Dependenc
y Management
Then Do This7. Automated
Integration Testing
8. Automated Acceptance Testing
9. Deployment Automation
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
Code Quality
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
Don’t Do It All At Once
Do This First1. Version
Control2. Build
Automation 3. Automated
Unit Testing 4. Continuous
Integration
Next Do This5. Static Code
Analysis6. Dependency
Management
Then Do This7. Automated
Integration Testing
8. Automated Acceptance Testing
9. Deployment Automation
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)
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
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
Testing Quadrant
Functional TestsAcceptance Tests
Unit TestsComponent TestsSystem Tests
ShowcasesExploratory TestsUsability Tests
Performance TestsSecurity Tests
Su
pp
ort
Pro
gra
mm
ing
Critiq
ue P
rod
uct
Business Facing
Technology Facingfrom Brian Marick
Then Do This
8. Automated Deployment– What: Push button deployment capabilities– Effort: High– Sample Tools: FluentMigrator, Puppet, Octopus
Automated Deployments
Sandbox
ProductionVersion Control
CIServer
Oracle
Websphere
Websphere
Oracle
TestOracle
Websphere
Websphere
Oracle
Oracle
Websphere
Automated NightlyDeployments
Push Button Deployments
Managed Deployments
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
One More Thing - Developers
Developer’s Bill of Rights1.Every programmer shall have two monitors 2.Every programmer shall have a fast PC 3.Every programmer shall have their choice of mouse
and keyboard 4.Every programmer shall have a comfortable chair 5.Every programmer shall have a fast internet
connection 6.Every programmer shall have {effective} working
conditions
Posted by Jeff Atwood , http://www.codinghorror.com/blog/2006/08/the-programmers-bill-of-rights.html
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
Upcoming Events
◊ 10/10 - ADAPT Breakfast Meeting – Lowering Contracting Barriers to Agile Methods in Government – http://www.afei.org/events/4A20/Pages/default.aspx
◊ 11/20 – 11/22 - ADAPT / SEI Agile for Government Summit – Incremental, Modular, Scalable and Agile– http://www.afei.org/events/4A01/Pages/default.aspx
Upcoming Training
◊ 10/21 – 10/22 Certified ScrumMaster (CSM)◊ 10/24 – 10/25 Certified Scrum Product Owner (CSPO)◊ 11/14 – Agile Business Intelligence and Data
Warehouse◊ 11/18 – 11/19 Certified ScrumMaster (CSM)◊ 12/16 – 12/17 Certified ScrumMaster (CSM)◊ 12/19 – 12/20 Certified Scrum Product Owner (CSPO)◊ 1/22 – 1/24 Certified Scrum Developer (CSD)
See http://excella.eventbrite.com/ for details and registration. Contact [email protected] for discount codes.
Contact Information
Richard K [email protected]
m703-967-8620http://www.excella.comTwitter: @RichardKCheng