Страницы с тегами : testing
Code Review vs Testing
Почти все знают, что баг в программе, исправленный на этапе использования, стоит примерно в 100 раз дороже, чем исправленный до использования. Кто не верит – может почитать результаты исследования Shull defects paper.
Если спросить программистов какой метод исправления поиска и исправления багов наиболее эффективный, то большинство ответит - “тестирование”. И будут неправы…
Эффективность различных методов устранения ошибок
В книге МакКоннелла CodeComplete есть статистика (да-да, все её читали, но никто сходу не может вспомнить что там написано), которая разрывает мозг многим апологетам тестов.
Методика | Результативность в среднем |
Regression test | 25% |
Informal code reviews | 25% |
Unit test | 30% |
New function (component) test | 30% |
Integration test | 35% |
Low-volume beta test (< 10 users) | 35% |
Informal design reviews | 35% |
Personal desk checking of code | 40% |
System test | 40% |
Formal design inspections | 55% |
Formal code inspections | 60% |
Modeling or prototyping | 65% |
High-volume beta test (> 1000 users) | 75% |
То есть в среднем все методы тестирования менее результативны, чем формальные инспекции дизайна и кода. А если еще поделить результативность на затраченное время, то review становится в разы эффективнее тестирования.
Как делать review
Для начала надо почитать того же МакКоннелла, у него все более чем подробно описано. Ключевые моменты:
- Чтобы проводить инспекции нужны чек-листы.
- Темп code review составляет 120-200 строк в час.
- Инспекторов должно быть как минимум два.
- Должны быть адекватно описаны требования к коду: быть полными и не содержать противоречий и неточностей.
- Код должен компилироваться.
- Код должен быть проверен разработчиком, как минимум выполнять основные сценарии на его машине.
В настоящий момент существует множество инструментов для code review, в том числе встроенных в средства разработки, поэтому необходимость в review meeting значительно ниже. Возможно для review верхнеуровневого дизайна потребуется совещание, но для review кода митинги скорее вредны.
Как повысить эффективность code review
Средняя продолжительность продуктивного писания кода – 4-5 часов в день. То есть 3-4 часа в день программист не занимается написанием кода, или занимается, но лучше бы этого не делал. Можно скорректировать время работы программистов, чтобы 4 часа в день они писали код, два часа делали review, еще два часа занимались проектированием, митингами и административными задачам. То есть review получается практически бесплатно.
Команда в 3-4 человека будет вполне успевать проводить review написанного за день кода в оставшиеся 2 часа после кодирования.
Значительную часть review можно автоматизировать, есть множество инструментов, которые проверяют качество кода.
Если все так круто, то почему же все занимаются тестированием?
Ответ на этот вопрос я долго искал, пока не наткнулся на презентацию Эрика Липперта о психологических аспектах анализа кода (http://www.slideshare.net/Coverity/the-psychology-of-c-analysis-24025354). Несмотря на то, что в презентации рассказывается об автоматизированном анализе, причины недоверия более чем верны для code review.
Основная причина – психология программистов. Для проведения review необходимо взаимодействовать с людьми, получать от них замечания к своему коду. Психологически это гораздо тяжелее, чем писать тесты к своему коду.
Вы наверное и сами обращали внимание, что смотреть чужой код и находить в нем ошибки бывает даже интересно. А вот когда ваш код кто-то смотрит и указывает на ошибки в нем – уже вызывает дискомфорт, а у некоторых откровенное неприятие.
Кроме того тесты это тоже код, это значит менеджер может посмотреть чем программист занимался. А еще лучше если менеджер посмотрит результаты тестового покрытия, хотя эта величина практически бесполезна.
Заключение
Несколько статей про code review, в них есть много интересных ссылок на исследования и книги:
- http://kev.inburke.com/kevin/the-best-ways-to-find-bugs-in-your-code/
- http://monead.com/blog/?p=1291
- http://www.developer.com/tech/article.php/3579756/Effective-Code-Reviews-Without-the-Pain.htm
- http://www.codinghorror.com/blog/2006/01/code-reviews-just-do-it.html
- http://accelerateddevelopment.ca/blog/inspections-are-not-optional/
Немного про SharePoint. Джентльменский набор для анализа кода:
- http://www.spcaf.com/
- http://archive.msdn.microsoft.com/SPDisposeCheck
- http://www.jetbrains.com/resharper/
- http://stylecop.codeplex.com/
- FxCop\Visual Studio Code Analysis
- http://vswebessentials.com/ (встроенный JSHint)
- http://gandjustas.blogspot.ru/2012/11/sharepoint.html
- http://gandjustas.blogspot.ru/2012/12/sharepoint.html
- http://www.rharbridge.com/?page_id=259
ЗЫ. Все написанное выше не означает что надо бросить тестирование и все силы перекинуть на review. У того же МакКоннелла написано, что наибольший эффект достигается при применении минимум трех методик.