Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Quality Assurance of
Large C++ Projects
Anton Naumovich
Anton Naumovich
Engineering Manager at SolarWinds
Technical Consultant at DPI.Solutions
Developer at Microsoft (Hyper-V) i...
conference.corehard.by - we host a C++ conference in Minsk every season (3-4 times a year)
Quality Assurance
Quality Assurance vs Quality Control
Focus on quality of processes Finding defects in ready product
Proactively preventing...
Goal of Quality Assurance
Improve development processes so that defects do
not arise when the product is being developed
Relative Effectiveness of Quality Techniques
Quality Technique
Informal design reviews
Formal design inspections
Informal ...
General Principle of Software Quality
Improving quality reduces development costs
Source Control
Just use it!
Pick your favourite
Build Tools
List of build tools for C++
De facto standard for build tools
Package managers are gaining popularity
Coding Standards
Importance of Coding Standards
Impossible to build a complex system without standardization
Share experience from the indu...
Available Standards and Guidelines for C++
C++ Core Guidelines by Bjarne & Co
High Integrity C++ Coding Standard
Google C+...
Automate guideline checking as a pre-commit hook for the changeset
No unchecked code in the repository!
Automate Guideline...
Code Reviews
Code Review: Best Practices
Integrate review with your issue tracking system
Independent review by 2 people increase ratio...
Code Review Systems
Review Board
Gerrit for Git
Crucible by Atlassian
… and many more
Code Review Checklist
1. Does the code implement requirements spec?
2. Is the code compliant with the Coding Standards?
3....
Unit Testing
Unit Testing Ideology
Integrate unit tests into your project build process (as a post-build event)
Aim for 100% coverage
D...
Boost.Test
CppUnit
Google Test
CxxTest
… and more: check out Comparison of C++ unit testing frameworks
Unit Testing Framew...
Static Code Analysis
Static Code Analysis: Basics
Your C++ Compiler:
1. Use max warning level and disable checks one-by-one if they are not rea...
Static Code Analysis Tools
Cppcheck - free and open-source
PVS Studio
Coverity
Copy-paste detectors (e.g. CPD)
… check out...
Code Coverage
Code Coverage Tools
lcov for *NIX
OpenCPPCoverage for Windows
Use coverage for Unit Test runs and include
coverage report ...
Intrusive
Runtime Verifiers
Runtime Verification Tools
Application Verifier / Driver Verifier for Windows
Address Sanitizer / Memory Sanitizer / Threa...
Non-intrusive
Runtime Verifiers
Assertive Programming (Programming by contract)
If it can't happen, use assertions to ensure that it won't
Leave assertion...
Crash Dump Reporting/Analysis System
Check out Crash Dump Collection and Analysis System talk
Collect and analyze crash du...
Continuous Integration
Continuous Integration Tools
TeamCity: 3 agents for free
Jenkins
Team Foundation Server
Staging Repository
Mainline
Repository
Staging
Repository
Developer commits
1. Review
2. Build bots
3. Unit tests
4. Stati...
“Free” Lunch
Thanks! Questions?
Anton.Naumovich@SolarWinds.com
Upcoming SlideShare
Loading in …5
×

Quality assurance of large c++ projects

5,206 views

Published on

Quality assurance of large c++ projects

Published in: Technology
  • Be the first to comment

Quality assurance of large c++ projects

  1. 1. Quality Assurance of Large C++ Projects Anton Naumovich
  2. 2. Anton Naumovich Engineering Manager at SolarWinds Technical Consultant at DPI.Solutions Developer at Microsoft (Hyper-V) in the past We are doing backup :)
  3. 3. conference.corehard.by - we host a C++ conference in Minsk every season (3-4 times a year)
  4. 4. Quality Assurance
  5. 5. Quality Assurance vs Quality Control Focus on quality of processes Finding defects in ready product Proactively preventing defects Reactively identify defects
  6. 6. Goal of Quality Assurance Improve development processes so that defects do not arise when the product is being developed
  7. 7. Relative Effectiveness of Quality Techniques Quality Technique Informal design reviews Formal design inspections Informal code reviews Formal code inspections Modeling or prototyping Personal desk-checking of code Unit test New function (component) test Integration test Regression test System test Low-volume beta test (<10 sites) High-volume beta test (>1,000 sites) Average Rate of Found Defects 35% 55% 25% 60% 65% 40% 30% 30% 35% 25% 40% 35% 75% Only combination of techniques can assure 95% and higher quality
  8. 8. General Principle of Software Quality Improving quality reduces development costs
  9. 9. Source Control
  10. 10. Just use it! Pick your favourite
  11. 11. Build Tools
  12. 12. List of build tools for C++ De facto standard for build tools Package managers are gaining popularity
  13. 13. Coding Standards
  14. 14. Importance of Coding Standards Impossible to build a complex system without standardization Share experience from the industry and your project Make code look and behave uniformly Use only the “safest” subset of the C++ Language Антон Семенченко. Закон иерархических компенсаций Седова и C++ Core Guidelines
  15. 15. Available Standards and Guidelines for C++ C++ Core Guidelines by Bjarne & Co High Integrity C++ Coding Standard Google C++ Style Guide Sutter, Alexandrescu: C++ Coding Standards … and many more Make your Guidelines extensible. Support by the Dev Team Enrich your Guidelines as a result of problems retrospective
  16. 16. Automate guideline checking as a pre-commit hook for the changeset No unchecked code in the repository! Automate Guideline Checking cpplint.py – regex-based tool for Google C++ Style Guide Guideline Checker Tool – available with VS 2015 for C++ Core Guidelines ★ clang-tidy – clang-based tool for C++ Core Guidelines, Google C++ Style Guide, and your own checks! Uncrustify, clang-tidy: modernize – source code transformers
  17. 17. Code Reviews
  18. 18. Code Review: Best Practices Integrate review with your issue tracking system Independent review by 2 people increase ratio of found defects Prefer pre-commit reviews if possible Development Review Validataion
  19. 19. Code Review Systems Review Board Gerrit for Git Crucible by Atlassian … and many more
  20. 20. Code Review Checklist 1. Does the code implement requirements spec? 2. Is the code compliant with the Coding Standards? 3. Does the code change any existing functionality? 4. Are all non-success scenarios handled? 5. ...
  21. 21. Unit Testing
  22. 22. Unit Testing Ideology Integrate unit tests into your project build process (as a post-build event) Aim for 100% coverage Design code to be testable: Test-Driven Design Практики надежного модульного тестирования для C++ - Юрий Ефимочев
  23. 23. Boost.Test CppUnit Google Test CxxTest … and more: check out Comparison of C++ unit testing frameworks Unit Testing Frameworks
  24. 24. Static Code Analysis
  25. 25. Static Code Analysis: Basics Your C++ Compiler: 1. Use max warning level and disable checks one-by-one if they are not reasonable 2. Use built-in static analysis checks (e.g. -Weffc++ for gcc) 3. Use several compilers because they have different checks Run static analysis as a build or pre-commit step More recommendations on using compilers by Jason Turner
  26. 26. Static Code Analysis Tools Cppcheck - free and open-source PVS Studio Coverity Copy-paste detectors (e.g. CPD) … check out Static Code Analysis Tools for C++
  27. 27. Code Coverage
  28. 28. Code Coverage Tools lcov for *NIX OpenCPPCoverage for Windows Use coverage for Unit Test runs and include coverage report into code review checklist
  29. 29. Intrusive Runtime Verifiers
  30. 30. Runtime Verification Tools Application Verifier / Driver Verifier for Windows Address Sanitizer / Memory Sanitizer / Thread Sanitizer (clang) Undefined Behavior Sanitizer Valgrind / Helgrind / Massif Memory leaks: UMDH, LeakDiag
  31. 31. Non-intrusive Runtime Verifiers
  32. 32. Assertive Programming (Programming by contract) If it can't happen, use assertions to ensure that it won't Leave assertions turned on in production code (except for when it affects performance) Collect and analyze assertions
  33. 33. Crash Dump Reporting/Analysis System Check out Crash Dump Collection and Analysis System talk Collect and analyze crash dumps from test labs and from production
  34. 34. Continuous Integration
  35. 35. Continuous Integration Tools TeamCity: 3 agents for free Jenkins Team Foundation Server
  36. 36. Staging Repository Mainline Repository Staging Repository Developer commits 1. Review 2. Build bots 3. Unit tests 4. Static analysis 5. Code coverage 6. Autotests Production builds Merge
  37. 37. “Free” Lunch
  38. 38. Thanks! Questions? Anton.Naumovich@SolarWinds.com

×