Sqa8 urazov

Preview:

Citation preview

Применение современныхПрименение современныхстатических анализаторовстатических анализаторов

Андрей Уразов – 2010Андрей Уразов – 2010

Ход доклада

Что такое статический анализ Виды обнаруживаемых изъянов Достоинства и недостатки Внедрение в производственный цикл ПО Как выбрать решение для статического анализа

Статический анализ кода

Анализ кода без его реального исполнения Виды статического анализа:

На основе деревьев разбора Анализ потока данных и управления

Кто мог это написать?

Это код из Eclipse 3.0.0M8. Что же можно обнаружить в проектах, которые

мы тестируем?!

if (in == null) try { in.close();

Из кода JDK

Этот метод с бесконечной рекурсией написан самим Джошуа Блохом

Если гениальные люди делают такие ошибки, то что можно найти коде, написанном «обычными» разработчиками?

public String foundType() { return this.foundType();}

Зачем нужен статический анализ

Обнаружение ошибок Выявление архитектурных проблем кода,

отступлений от лучших практик Соответствие стандартам Обучение разработчиков

Зачем нужен статический анализ

Повышение качества ПО (увеличение доходов) Увеличение производительности труда

(сокращение издержек)

Возможности

Метрики Уязвимости безопасности Проблемы многопоточности Утечки ресурсов Критические ошибки:

Выходы за границы массива Ошибки работы с памятью Исключения

Примеры: обнаружение NPE

Parasoft Jtest находит ошибку в коде Apache-Ant-1.7.0beta1 (ClassNotFound-Exception не обрабатывается должным образом и приводит к NPE)

Примеры: избавляемся от утечек

Parasoft Jtest находит утечку в коде Ant-1.7.0beta1(утечка происходит, когда dis.read() бросает исключение)

Примеры: оптимизируем код

Parasoft Jtest находит неоптимальный код в FindBugs v1.0.0

Достоинства

Широкий класс ошибок Обнаружение ошибок не требует участия

человека Ошибки находятся сразу после появления Всегда отображается причина проблемы в коде

Недостатки

Неполнота анализа Ложные срабатывания

Внедрение в процесс разработки

Использование системы управления исходным кодом

Определение политики качества Автоматизированное тестирование каждую ночь Каждое утро разработчики получают в среде

разработки набор обнаруженных ошибок Набор автоматически определяемых ошибок

расширяется по необходимости

В отделе контроля качества

Отделение истинных ошибок от ложных срабатываний

Направление усилий по тестированию на наиболее уязвимые части кода

Что учитывать при выборе решения

Стоимость владения, окупаемость Виды обнаруживаемых ошибок Точность обнаружения Удобство использования

Удобство использования

Интеграция в среду разработки Гибкая настройка Распределение задач Подавление ложных срабатываний Отслеживание уровня качества

Итоги: использование СА

Увеличение выявляемости ошибок при использовании вместе с тестированием

Непрерывное обеспечение качества Направление усилий по тестированию,

опираясь на СА Ускорение цикла производства ПО Улучшение качества производимых продуктов

Благодарность

Спасибо за внимание :-)