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