2. Anton Naumovich
Engineering Manager at SolarWinds
Technical Consultant at DPI.Solutions
Developer at Microsoft (Hyper-V) in the past
We are doing backup :)
5. Quality Assurance vs Quality Control
Focus on quality of processes Finding defects in ready product
Proactively preventing defects Reactively identify defects
6. Goal of Quality Assurance
Improve development processes so that defects do
not arise when the product is being developed
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. General Principle of Software Quality
Improving quality reduces development costs
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. 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. 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
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
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. ...
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++ - Юрий Ефимочев
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. 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++
28. Code Coverage Tools
lcov for *NIX
OpenCPPCoverage for Windows
Use coverage for Unit Test runs and include
coverage report into code review checklist
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. 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
Поговорим о тру-Quality Assurance: о практиках, процессах и артефактах которые помогают поддерживать качество программы.
Обсудим для чего это нужно, как и в какие процессы эти практики внедрять, и каким инструментарием пользоваться в контексте С++
Почему большие проекты? Потому что именно на больших проектах количество переходит в качество и кристаллизуются новые роли, практики и процессы
MAX Backup: ежемесячные релизы не только клиента, но и платформы. Какие же практики помогают достичь качества?
Само понятие QA пришло из промышленного производства
На просторах СНГ под QA понимается то, что в англоязычном мире называется QC
QA: процессы качества производства, предотвращение дефектов. QC: нахождение дефектов в готовом продукте
Основная задача Quality Assurance - улучшить процессы так, чтобы дефект не появлялся, или не доживал до релиза
Каждая индивидуальная техника не может обеспечить качество более 75% что неприемлемо для продакшена
Только комбинация техник может гарантировать 95+ процент нахождения дефектов
Важность стандартизации больших систем
Закон иерархических компенсаций Седова
В прошлом году появились поддерживаемые
Можно и нужно основать
Гайдлайны должны прочувствованы и поддерживаться командой, и включать в себя опыт конкретного проекта
Один из основополагающих принципов разработки - все что автоматизируемо, должно быть автоматизированно
Автоматизируйте проверку стиля, и не допускайте непроверенный код в репозиторий
Code Review выполняет множество функций
Две головы лучше одной
Передача знаний о разных частях кода внутри команды