Тестирование проводится в нескольких формах и может выполняться на разных этапах. Помимо проверки проекта до того, как код будет написан, тестирование кода можно разделить на модульное тестирование, интеграционное тестирование, системное тестирование и приемочное тестирование (хотя точные сроки и количество этапов могут очень сильно). В модели V они будут соответствовать по горизонтали этапам требований и разработки дизайна. Также при разработке и обслуживании вы можете проводить регрессионное тестирование, гарантируя, что исправленные ошибки остаются исправленными при применении других изменений.
Что касается инструментов, их можно разделить на статический анализ и динамический анализ. Статические инструменты анализируют исходный код без выполнения, тогда как динамический анализ связан с поведением кода во время выполнения. Некоторые (дорогие) инструменты выполняют «абстрактное выполнение», которое представляет собой метод статического анализа, который определяет, как код может потерпеть неудачу во время выполнения без фактического выполнения, этот подход требует больших вычислительных затрат, но может обрабатывать гораздо больше путей выполнения и состояний переменных, чем традиционный динамический анализ.
Самой простой формой статического анализа является проверка кода; заставить человека читать твой код. Существуют инструменты, помогающие даже в этом якобы ручном процессе, такие как SmartBear's Code Collaborator . Аналогично, самая простая форма динамического анализа - просто пройтись по коду в отладчике или даже просто запустить код с различными сценариями тестирования. Первое может быть сделано программистом во время разработки и отладки модуля, а второе больше подходит для приемочного или интеграционного тестирования.
Несмотря на то, что хорошо выполненный анализ кода может удалить большое количество ошибок, особенно ошибок проектирования, он не настолько эффективен, возможно, при поиске определенных типов ошибок, вызванных тонкой или загадочной семантикой языков программирования. Этот тип ошибок поддается автоматическому обнаружению с использованием инструментов статического анализа, таких как Gimpel's PC-Lint и FlexeLint или Programming Research - инструменты QA , хотя и с более низкими затратами, такими как настройка компилятора высокий уровень предупреждения и компиляция с несколькими компиляторами также полезны.
Инструменты динамического анализа имеют различные формы, такие как анализ покрытия кода, профилирование производительности кода, анализ управления памятью и проверка границ.
Более мощные инструменты / поставщики включают Coverity , PolySpace (инструмент абстрактного анализа), Cantata , LDRA и Klocwork . На нижнем уровне (по цене, не обязательно эффективности) находятся такие инструменты, как PC-Lint и Tessy , или даже splint с открытым исходным кодом (только C) и большое количество из инструментов для модульного тестирования