SlideShare una empresa de Scribd logo
1 de 86
Обеспечение качества
программных систем
с помощью статических методов
Ицыксон В.М.
Санкт-Петербургский государственный политехнический
университет
CSEDays. Application 2010
Екатеринбург
Обеспечение качества программных систем
с помощью статических методов
2
План доклада
 Введение
 Качество ПО
 Методы обеспечения качества
 Статический анализ
 Модели программ
 Алгоритмы статического анализа
 Обнаружение дефектов
 Аннотирование
 Статические анализаторы
 Другие статические методы
 Заключение
Обеспечение качества программных систем
с помощью статических методов
3
Тенденции индустрии
разработки ПО
 Объем программ растет
 Время разработки новых версий ПО
сокращается
 Все большее число задач решается
программно
 ПО все больше используется при
решении критически важных задач
 Существенная часть ПО является
свободной и поставляется “as is”
Обеспечение качества программных систем
с помощью статических методов
4
Известные примеры
программных ошибок
 США, 1962 год. Гибель несущего аппарата
“Маринер-1”. Причина – ошибка в одном
символе программы
 DO 100 I = 1, 10
 DO100I = 1.10
 США, 1987 год. Ускоритель Therac-25.
Переоблучение пациентов онкоклиник.
Причина – ошибка «race condition»
 США, 1991 год. Комплекс Patriot. Погибло
28 чел. Причина – ошибка округления
 Европа, 1996 год. Ракета Ариан-5. Ущерб 7
млрд. $. Причина – использование
унаследованного кода
Обеспечение качества программных систем
с помощью статических методов
5
Известные примеры
программных ошибок
 США, 2003 год. Сбой в энергосистеме
(Blackout). Ущерб 7-10 млрд.$. Причина –
ошибка «race condition»
 Израиль. Сбой навигационной системы
самолетов F16 при полетах над Мертвым
морем.
 Высотомер выдавал значение ≤0.
 Ошибка деления на ноль (или переполнение)
 Голландия, 2000 год. Остановка доменной
печи 29 февраля. Гибель 6 человек. Ошибка
в процедуре расчета даты.
 …
Обеспечение качества программных систем
с помощью статических методов
6
Что такое качественное ПО?
 ПО, в котором отсутствуют ошибки
 ПО, соответствующее требованиям
Обеспечение качества программных систем
с помощью статических методов
7
Качество программного
обеспечения
 ГОСТ Р ИСО/МЭК 9126 (ISO 9126):
 Качество ПО – весь объем признаков
и характеристик программной
продукции, который относится к её
способности удовлетворять
установленным и предполагаемым
свойствам
 Характеристики качества – набор
свойств программной продукции, по
которым её качество описывается и
оценивается
Обеспечение качества программных систем
с помощью статических методов
8
Характеристики качества ПО
1. Функциональные возможности
(Functionality)
2. Надежность (Reliability)
3. Практичность (Usability)
4. Эффективность (Efficiences)
5. Сопровождаемость (Maintainability)
6. Мобильность (Portability)
Обеспечение качества программных систем
с помощью статических методов
9
Качество ПО.
Функциональные возможности
 Пригодность (Suitability)
 Правильность (Accuracy)
 Способность к взаимодействию
(Interoperability)
 Согласованность (Compliance) -
поддержка соответствующих
стандартов или соглашений
 Защищенность (Security)
Обеспечение качества программных систем
с помощью статических методов
10
Качество ПО. Надежность
 Стабильность (Maturity)
 Устойчивость к ошибкам (Fault
tolerance)
 Восстанавливаемость
(Recoverability)
Обеспечение качества программных систем
с помощью статических методов
11
Качество ПО. Практичность
 Понятность (Understandability)
 Обучаемость (Learnability)
 Простота использования
(Operability)
Обеспечение качества программных систем
с помощью статических методов
12
Качество ПО. Эффективность
 Временная эффективность (Time
behavior)
 Характер использования ресурсов
(Resource behavior)
Обеспечение качества программных систем
с помощью статических методов
13
Качество ПО.
Сопровождаемость
 Анализируемость (Analysability)
 Изменяемость (Changeability)
 Устойчивость (Stability)
 Тестируемость (Testability)
Обеспечение качества программных систем
с помощью статических методов
14
Качество ПО. Мобильность
 Адаптируемость (Adaptability)
 Простота внедрения (Installability)
 Соответствие (Conformance) -
подчинение стандартам или
соглашениям, относящимся к
мобильности
 Взаимозаменяемость (Replaceabilily)
Качество ПО.
Заинтересованные лица
 Пользователь/заказчик
 Функциональность
 Надежность
 Практичность
 Эффективность
 Разработчик/руководитель
 Сопровождаемость
 Мобильность
Обеспечение качества программных систем
с помощью статических методов
15
Методы обеспечения качества
 Методы, направленные на проектирование
качественного ПО
 Формальные спецификации
 Синтез ПО на основе спецификаций и моделей
 Контрактное программирование
 И т.п.
 Сегодня не рассматриваются
 Методы, направленные на обеспечение
качества существующего ПО
Обеспечение качества программных систем
с помощью статических методов
16
Обеспечение качества программных систем
с помощью статических методов
17
Методы обеспечения качества
 Динамические методы
 Подразумевают запуск ПО
 Статические методы
 Не используют запуск ПО
 Используют проектные артефакты
(исходные коды, спецификации,
аннотации и т.п.)
 Комбинированные методы
Обеспечение качества программных систем
с помощью статических методов
18
Динамические методы
обеспечения качества
 Тестирование
 Ручное
 Автоматизированное
 Автоматическое
 Профилирование
 Динамический анализ
 Мониторинг
 Анализ трасс исполнения
 …
Обеспечение качества программных систем
с помощью статических методов
19
Достоинства динамических
методов
 Просты в реализации
 Обычно не требовательны к
ресурсам
 Наиболее популярны и развиты
(особенно тестирование)
Обеспечение качества программных систем
с помощью статических методов
20
Недостатки динамических
методов
 Проверяют ограниченное число трасс выполнения
 Проверяют конечный набор входных данных
 Проверяют работоспособность в ограниченном
числе окружений
 Число тестов, позволяющих исчерпывающе
проверить программную систему, потенциально
бесконечно!
 Тестирование не гарантирует отсутствие
ошибок!
 Тестирование может только показать наличие
ошибок!
«Тестирование программ может служить для доказательства
наличия ошибок, но никогда не докажет их отсутствия!»
Э.Дейкстра. Заметки по структурному программированию
Обеспечение качества программных систем
с помощью статических методов
21
Статические методы
обеспечения качества
 Формальные инспекции, аудит
 Формальная верификация
 Дедуктивная верификация
 Model checking
 Статический анализ
 Трансформации
 Рефакторинги
 Модификации
Обеспечение качества программных систем
с помощью статических методов
22
Статический анализ
 Использует исходный код ПО для анализа
 Применяется для
 Форматирования программ
 Вычисления программных метрик
 Оптимизации программ
 Распараллеливания программ
 Преобразования программ
 Обфускации программ
 Деобфускации программ
 Обнаружения дефектов
 …
Обеспечение качества программных систем
с помощью статических методов
23
Статический анализ для
обнаружения дефектов
 Использует исходный код ПО для анализа
 Позволяет проанализировать все
возможные трассы исполнения
 Позволяет проанализировать все наборы
входных данных
 Может быть полностью автоматизирован
 Позволяет обнаружить
нефункциональные дефекты
Обеспечение качества программных систем
с помощью статических методов
24
Нефункциональные дефекты
 Ошибки этапа кодирования
 Не являются явным нарушением
спецификации
 Являются следствием
 сложности языков программирования
 сложности библиотек
 сложности алгоритмов и структур
данных
Обеспечение качества программных систем
с помощью статических методов
25
Нефункциональные дефекты
 Выход за границу массива
 Переполнение буфера
 Использование неинициализированных
объектов
 Работа с некорректным указателем
 Арифметические ошибки
 Утечки ресурсов
 Ошибки форматных строк
 Ошибки работы с ресурсами
 и т.д.
Обеспечение качества программных систем
с помощью статических методов
26
Проявление дефектов
 Без проявления
 Зависания
 Сбои
 Падения
 Деградация производительности
 …
Обеспечение качества программных систем
с помощью статических методов
27
Лирическое отступление
 Почему С?
 Является вместе с Java и С++ наиболее
популярным языком
 Наибольшее число дефектов и уязвимостей
имеются в программах на С и С++
 Язык С (и С++) является языком системного
программирования и используется во многих
критически важных приложениях
 Методы статического анализа наиболее
проработаны для C/C++
 А что с другими языками?
Обеспечение качества программных систем
с помощью статических методов
28
TIOBE Programming
Community Index (Nov 2010)
Обеспечение качества программных систем
с помощью статических методов
29
Опасные конструкции
 Язык С
 Макроопределения
 Указатели
 Массивы
 Адресная арифметика
 Указатели на функции
 Приведения типов
 Объединения (union)
 Язык С++
 Полиморфизм
 Исключения
 …
Обеспечение качества программных систем
с помощью статических методов
30
Характеристики анализа
 Полнота – доля найденных
дефектов по отношению ко всем
дефектам программы
 Точность – доля найденных
истинных дефектов по отношению
ко всем найденным
 Ресурсоемкость
Обеспечение качества программных систем
с помощью статических методов
31
Общая схема обнаружения
дефектов
Обеспечение качества программных систем
с помощью статических методов
32
Модели программ. Требования
 Полнота представления объектов
программы
 Восстанавливаемость
 Идеально: возможность полного
восстановления исходного кода
 Желательно: связь с исходным кодом
 Эффективность поиска объектов
Обеспечение качества программных систем
с помощью статических методов
33
Модели программ. Типы
 Структурные
 Синтаксическое дерево разбора
 Абстрактное синтаксическое дерево (AST –
abstract syntax tree)
 Поведенческие
 Граф потока управления (CFG – control flow graph)
 Граф зависимостей по данным (DDG – data
dependence graph)
 SSA - static single assignment
 Гибридные
 Абстрактный семантический граф (ASG - abstract
semantic graph)
Обеспечение качества программных систем
с помощью статических методов
34
Модели программ: AST
int main()
{
int n = 10;
int f = 1;
while (n > 0)
{
f *= n;
--n;
}
return f;
}
Обеспечение качества программных систем
с помощью статических методов
35
Модели программ: ASG
int main()
{
int n = 10;
int f = 1;
while (n > 0)
{
f *= n;
--n;
}
return f;
}
Обеспечение качества программных систем
с помощью статических методов
36
Модели программ: DDG
int main()
{
int n = 10;
int f = 1;
while (n > 0)
{
f *= n;
--n;
}
return f;
}
Обеспечение качества программных систем
с помощью статических методов
37
Модели программ: CFG
int main()
{
int n = 10;
int f = 1;
while (n > 0)
{
f *= n;
--n;
}
return f;
}
Обеспечение качества программных систем
с помощью статических методов
38
Модели программ: SSA
int main()
{
int n = 10;
int f = 1;
while (n > 0)
{
f *= n;
--n;
}
return f;
}
Обеспечение качества программных систем
с помощью статических методов
39
Модели программ. Резюме
 Для простейшего статического
анализа достаточно структурных
моделей (AST)
 Для обнаружения дефектов
необходим учет семантики:
 ASG
 CFG
 CFG в форме SSA
Обеспечение качества программных систем
с помощью статических методов
40
Модели программ. Построение
 Построение парсера вручную
 Использование генераторов парсеров
(JavaCC, ANTLR, YACC, etc)
 Использование самостоятельных парсеров
(Elsa)
 Использование парсеров в составе средств
разработки (NetBeans, Eclipse CDT)
 Использование Front-End компиляторов
(gcc)
 Использование фреймворков для
статического анализа (SUIF, CIL, LLVM, etc)
Обеспечение качества программных систем
с помощью статических методов
41
Общая схема обнаружения
дефектов
Обеспечение качества программных систем
с помощью статических методов
42
Анализ на основе состояний
программы
 Состояние программы – совокупность
состояний всех объектов программы в
какой-либо точке
 Цель – вычислить все возможные
состояния программы во всех точках
 Обнаружение дефектов происходит на
основе проверки вычисленных состояний
Обеспечение качества программных систем
с помощью статических методов
43
Алгоритмы статического
анализа
 По типу алгоритму
 Интервальный анализ
 Анализ указателей
 Ресурсный анализ
 По масштабу
 Внутрипроцедурный
 Межпроцедурный
 По консервативности
 Пессимистический (консервативный) анализ
 Оптимистический анализ
Обеспечение качества программных систем
с помощью статических методов
44
Интервальный анализ
 Состояние переменных представляются
интервальными значениями
 a = [10;20]
 b = (-40;20) U (30;100)
 c = [0;∞)
 Вычисление состояния после выполнения
оператора языка производится на основе
интервальной арифметики
 Каждому оператору ставится в соответствие
уравнение, связывающее состояние до
выполнения и после
Интервальный анализ
Элемент модели
int a;
a = С;
a = b;
φ(…)
if(cond) Strue
else Sfalse
Обеспечение качества программных систем
с помощью статических методов
45
Интервальное правило
Sl
= Sl-1
∪ <a, noninit>
Sl
= Sl-1
 Ui<a, i> ∪ <a, С>
Sl
= Sl-1
 Ui<a, i> ∪ Uj<a, bj>
Sl
= Ui Si
Strue
= Sl-1
∩ cond
Sfalse
= Sl-1
∩ ¬cond
Обеспечение качества программных систем
с помощью статических методов
46
Интервальный анализ. Пример
int a;
a=10;
int b = f(…);
if (b < 100){
…
a = a + b;
}
else{
…
a = b / 2;
}
<a, noninit>
<a, [10:10]>
<a, [10:10]>, <b, (-∞; ∞)>
<a, [10:10]>, <b, (-∞; 100)>
<a, [-∞+10:110]>, <b, (-∞; 100)>
<a, [10:10]>, <b, [100; ∞)>
<a, [50: ∞/2]>, <b, [100; ∞)>
Обеспечение качества программных систем
с помощью статических методов
47
Анализ указателей
 Отличие от интервального анализа:
 хранятся не интервалы значений, а
списки связи “points-to”
 значения одних объектов могут влиять
на другие
Обеспечение качества программных систем
с помощью статических методов
48
Анализ указателей. Пример
 p, q1 и q2 – указатели на динамическую
память
 Пример для конструкции free(p);
Обеспечение качества программных систем
с помощью статических методов
49
Анализ указателей. Пример
 p, q – указатели
 Пример для конструкции *p = q
Обеспечение качества программных систем
с помощью статических методов
50
Анализ указателей. Пример
 p, q – указатели
 Пример для конструкции p = *q
Обеспечение качества программных систем
с помощью статических методов
51
Ресурсный анализ
 Ресурсы – объекты программы, имеющие свой
жизненный цикл
 Примеры ресурсов:
 Выделенная динамическая память
 Файлы
 Семафоры
 Мьютексы
 Сокеты
 Потоки
 Нити
 …
 Обычно ресурсы характеризуются состоянием и
атрибутами
 Каждый тип ресурса изменяет свое состояние по
определенным правилам
Обеспечение качества программных систем
с помощью статических методов
52
Ресурсный анализ.
Объект в куче
 Правила использования
 Создается ( p = malloc(…) )
 Используется ( *p )
 Освобождается ( free(p) )
 Примеры дефектов
 Использование не созданного объекта
 Повторное освобождение
 Утечка
Обеспечение качества программных систем
с помощью статических методов
53
Ресурсный анализ. Файл
 Правила использования
 Открыть ( f = fopen(“…”, “r” )
 Читать/писать ( fprintf(f, …) )
 Закрыть ( close(f) )
 Примеры дефектов
 Чтение из не открытого файла
 Попытка писать в файл открытый на
чтение
 …
Обеспечение качества программных систем
с помощью статических методов
54
Ресурсный анализ
 Отличие ресурсов от других объектов
программы:
 Управляются операционной системой
 Управление сменой состояний и атрибутов
происходит через функции API
 Необходимо анализировать не
конструкции ЯП, а библиотечные вызовы
 Необходима информация о семантике
библиотечных вызовов:
 Семантика зашита в анализатор
 Семантика описывается через аннотирование
библиотек
Обеспечение качества программных систем
с помощью статических методов
55
Масштаб анализа
 Внутрипроцедурный анализ
 Каждая функция анализируется
отдельно
 Информация не передается между
функциями
 Ресурсоемкость относительно низкая
 Точность и/или полнота – снижаются
 Реализуется большинством
анализаторов
Обеспечение качества программных систем
с помощью статических методов
56
Масштаб анализа
 Межпроцедурный анализ
 Все функция анализируется совместно
 Информация передается между
функциями
 Ресурсоемкость очень высокая
 Точность и/или полнота – выше
 Реализовано в небольшом числе
средств
Обеспечение качества программных систем
с помощью статических методов
57
Консервативность анализа
 Определяется правилами объединения
ветвей
 Консервативный (пессимистический) анализ
 При объединении ветвей объединяет интервалы
 Сохраняет полноту (обнаруживаем все ошибки)
 Теряет точность (много ложных обнаружений)
 Оптимистический анализ
 При объединении ветвей пересекает интервалы
 Теряет полноту (может пропускать ошибки)
 Сохраняет точность (мало ложных обнаружений)
Обеспечение качества программных систем
с помощью статических методов
58
Консервативность анализа
int arr1[10];
int arr2[5];
if (…){
…
} // <i, [1..8]>
else {
…
} // <i, [6..15]>
a = arr1[i]; // возможно ошибка
b = arr2[i]; // ошибка
 Консервативный
анализ:
 <i, [1..15]>
 обнаружит обе ошибки
(возможно первая –
ложная)
 Оптимистический
анализ
 <i, [6..8]>
 обнаружит вторую
ошибку (пропустив
первую)
Обеспечение качества программных систем
с помощью статических методов
59
Решение уравнений
 В результате применения алгоритмов в
явном или неявном виде строится система
уравнений
 Решение системы
 С использованием теории решеток
 Методами абстрактной интерпретации
 Завершаемость процесса решения
обуславливается
 Монотонностью уравнений
 Конечностью системы уравнений
Обеспечение качества программных систем
с помощью статических методов
60
Общая схема обнаружения
дефектов
Обеспечение качества программных систем
с помощью статических методов
61
Обнаружение дефектов
 На основе анализа допустимости
состояний в элементах модели
 Использование неинициализированной
переменной:
 Конструкция: a = b
 Условие: <a, noninit> ∈ Sl-1
 Повторное освобождение объекта
 Конструкция: free(p)
 Условие: <p, invalid> ∈ Sl-1
Обеспечение качества программных систем
с помощью статических методов
62
Обнаружение дефектов
 Разыменование некорректного указателя
 Конструкция: a = *p
 Условие: <p, invalid> ∈ Sl-1
 Арифметические операции над указателями
на разные объекты
 Конструкция: a = p – q;
 Условие: <p, o1>,<q, o2> ∈ Sl-1
, o1≠o2
 Выход за границы объекта
 Конструкция: a = *p;
 Условие: <p, o, k> ∈ Sl-1
, k≥≠osize
Обеспечение качества программных систем
с помощью статических методов
63
Аннотирование
 Что делать если:
 часть исходных кодов отсутствует?
 проект использует библиотечные
вызовы?
 вы знаете о коде нечто такое, что не
способен выявить анализатор?
 Ответ: использовать механизмы
внесения внешней семантики в
процесс анализа - аннотирование
Обеспечение качества программных систем
с помощью статических методов
64
Аннотирование
 Способы аннотирования:
 расширение целевого языка с
помощью аннотирующих комментариев
 расширение целевого языка с
использованием его внутренних
средств
 внешние средства для описания
поведения компонентов
Обеспечение качества программных систем
с помощью статических методов
65
Языки аннотаций
 На основе комментариев С
 ACSL (ANSI/ISO C Specification Language)
 Аннотации в SPlint
 На основе внутренних средств С
 CLANG
 SAL (Source Annotation Language)
 PREfast Annotations
 Оригинальный язык
 Metal
 PanLang
Обеспечение качества программных систем
с помощью статических методов
66
Языки аннотаций: цели
 Описание поведения функций
 Описание глобальных объектов
 Описание ресурсов
 Описание предусловий, инвариантов, …
 Обнаружение новых типов дефектов
 Маскирование ложных дефектов
 Маскирование участков кода
 …
Обеспечение качества программных систем
с помощью статических методов
67
Metal: описание ошибок
работы с ресурсами
state decl any_pointer v;
start: { kfree(v) } ==> v.freed;
v.freed: { *v } ==> v.stop,
{ err("Использование %s после освобождения!",
mc_identifier(v)); }
| { kfree(v) } ==> v.stop,
{ err("Двойное освобождение %s!",
mc_identifier(v)); };
Обеспечение качества программных систем
с помощью статических методов
68
ACSL: пример предусловия
/*@
requires 0 <= n;
requires valid_range(a, 0, n-1);
*/
void example(value_type* a, size_type n);
Обеспечение качества программных систем
с помощью статических методов
69
PanLang: пример аннотации
функции realloc
void* realloc(void* ptr, unsigned size) {
if (size <= 0) {
delete(Heap) ptr;
return 0;
}
else {
void* res = new Heap(Allocated, size, none, true);
if (ptr->size <= size) {
size = ptr->size;
}
copy(res, ptr, size);
delete(Heap) ptr;
return res;
}
}
Обеспечение качества программных систем
с помощью статических методов
70
PanLang: пример аннотации
функции recv
long recv ( int s ,void* buf ,unsigned len ,int flags) {
if ( buf == 0 ) {
defect (INI-03, "Второй аргумент функции - NULL");
}
if ( flags < 0 ) {
defect (INI-01, "Некорректное значение аргумента
функции");
}
if ( state(s) != Established) {
defect (RES-06, "Получение данных из несоединенного
сокета");
}
set ( buf, [-inf:+inf], len );
return [0:len];
}
Проблемы статического
анализа
 Анализ циклов
 Анализ рекурсии и глубокой
вложенности вызовов
 Анализ больших типов данных
 Анализ программ с исключениями
 Анализ программ с полиморфизмом
и указателями на функции
Обеспечение качества программных систем
с помощью статических методов
71
Обеспечение качества программных систем
с помощью статических методов
72
Средства статического
анализа
 Зарубежные анализаторы
 Coverity Prevent SA
 Klockwork Insight
 Fortify SCA
 Mathworks PolySpace
 IBM RSA
 Microsoft SCA
 Microsoft PREFix/PreFast
 ParaSoft C++Test
 Frama-C
 SPlint
 Отечественные анализаторы
 SVaCE Detector (ИСПРАН)
 Viva64, VivaMP (СиПроВер)
 AEGIS (СПбГПУ)
Обеспечение качества программных систем
с помощью статических методов
73
Статический анализатор Aegis
 Разработан анализатор Aegis:
 Поддержка стандарта С (ISO/IEC 9899:2001)
 Поддержка расширений GNU
 Анализ многофайловых проектов
 Обнаружение программных дефектов следующих
типов:
 выход за границу массива
 переполнение буфера
 использование неинициализированных переменных
 работа с некорректными указателями
 ошибки форматной строки
 утечки ресурсов
 некорректная работа с ресурсами
 Поддержка языка аннотаций PanLang
Обеспечение качества программных систем
с помощью статических методов
74
Aegis: плагин к IDE Eclipse
Обеспечение качества программных систем
с помощью статических методов
75
Aegis: свободный сервис
http://digiteklabs.ru/aegis
Обеспечение качества программных систем
с помощью статических методов
76
Статический анализ. Резюме
 Достоинства статического анализа
 Возможность полного обнаружения дефектов
определенного класса
 Полная автоматизация процесса обнаружения
 Недостатки статического анализа
 Наличие ложных обнаружений (false positives)
 Высокая ресурсоемкость
 Невозможность обнаружения функциональных
ошибок
Обеспечение качества программных систем
с помощью статических методов
77
Место статического анализа
 Собственно статический анализ может использоваться
 В составе сред разработки для оперативной проверки
программ
 В системах Continuous integration для постоянного
контроля качества кода и своевременного обнаружения
дефектов
 Статический анализ не заменяет тестирование, а
дополняет его
 Хорошая практика - использование
автоматизированного тестирования вместе со
статическим анализом
Обеспечение качества программных систем
с помощью статических методов
78
Другие статические методы
 Инспекции
 Формальные инспекции
 Аудит кода
 Парное программирование
 Дедуктивная верификация
 Model Checking
Model checking
 Исследуемая система приводится к модели с
конечным числом состояний (например,
модель Крипке)
 Проверяемые свойства представляются
формулами темпоральной логики (LTL, ALTL,
CTL, CTL* и т.д.)
 Проверка модели – формальная проверка
выполнимости формулы на модели.
Результат проверки:
 Формула выполняется
 Формула не выполняется. Контрпример.
 Существуют методы проверки систем с 10200
состояний!
Обеспечение качества программных систем
с помощью статических методов
79
Верификация по методу
Model Checking
Обеспечение качества программных систем
с помощью статических методов
80
Model checking
 Ограничения
 Проверяются свойства, связанные только с
корректностью смены состояний
 Не все свойства представляются в виде
темпоральных формул
 В общем случае задача - NP-полная
 В общем случае неформализуется переход от
реальной системы к модели с конечным числом
состояний
 Программные средства:
 SPIN
 NuSVM
 …
Обеспечение качества программных систем
с помощью статических методов
81
Обеспечение качества программных систем
с помощью статических методов
82
Применение различных методов
обеспечения качества
Хар-ка качества Проблема Обеспечение качества
1 Функциональность Функциональные
ошибки, несоответствие
спецификации
Тестирование
Верификация
2 Надежность Низкая надежность
Наличие уязвимостей
Статический анализ
Тестирование
3 Практичность Сложность использования Тестирование
4 Эффективность Проблемы с
производительностью,
ресурсами
Тестирование
Профилирование
Динамический/статический
анализ
5 Сопровождаемость Сложность сопровождения,
модификации
Рефакторинг
Документирование
6 Мобильность Несоответствие стандартам,
Сложность адаптации
Аудит, рефакторинг
Статический анализ
Литература
 Статический анализ
 M. Schwartzbach. Lecture Notes on Static Analysis.
BRICS, Department of Computer Science
University of Aarhus, Denmark
 D.Jackson, M.Rinard. Software Analysis: a
Roadmap. 2000
 F. Nielson, H. Nielson, C. Hankin. Principles of
Program Analysis
 http://digiteklabs.ru/research/defectdetection/
Обеспечение качества программных систем
с помощью статических методов
83
Литература
 Model checking
 Э. М. Кларк, О. Грамберг, Д.
Пелед. Верификация моделей
программ. Model Checking.
М:МЦНМО, 2002
 Ю.Г. Карпов. Model Checking:
верификация параллельных и
распределенных программных
систем. Изд-во БХВ-Петербург,
2010.
Обеспечение качества программных систем
с помощью статических методов
84
Обеспечение качества программных систем
с помощью статических методов
85
Контактная информация
Санкт-Петербургский государственный политехнический
университет
Факультет технической кибернетики
Кафедра компьютерных систем и программных технологий
Лаборатория программно-аппаратных
разработок. Web: http://digiteklabs.ru
Ицыксон Владимир Михайлович, к.т.н, доц.
E-mail: vlad@ftk.spbstu.ru
Тел.: +7(812)297-22-38
Спасибо за внимание!
Обеспечение качества программных систем
с помощью статических методов
86

Más contenido relacionado

La actualidad más candente

Requirements engineering. IREB practices
Requirements engineering. IREB practicesRequirements engineering. IREB practices
Requirements engineering. IREB practicesEugene Bulba
 
Обеспечение качества перевода
Обеспечение качества переводаОбеспечение качества перевода
Обеспечение качества переводаcomfortgalaxy
 
Tq Metric Compared Sep2009
Tq Metric Compared Sep2009Tq Metric Compared Sep2009
Tq Metric Compared Sep2009Denis Khamin
 
Тестирование ПО
Тестирование ПОТестирование ПО
Тестирование ПОseleznev_stas
 
Software testing foundations_ilya_pluzhnikov
Software testing foundations_ilya_pluzhnikovSoftware testing foundations_ilya_pluzhnikov
Software testing foundations_ilya_pluzhnikovElya Pluzhnikov
 
Александр Александров -- Надёжный тест-дизайн (мастер-класс)
Александр Александров -- Надёжный тест-дизайн (мастер-класс)Александр Александров -- Надёжный тест-дизайн (мастер-класс)
Александр Александров -- Надёжный тест-дизайн (мастер-класс)sqadays8
 
презентация по дисциплине технология разработки программного обеспечения
презентация по дисциплине технология разработки программного обеспеченияпрезентация по дисциплине технология разработки программного обеспечения
презентация по дисциплине технология разработки программного обеспеченияRauan Ibraikhan
 
2.1 Тестирование: основные определения
2.1 Тестирование: основные определения2.1 Тестирование: основные определения
2.1 Тестирование: основные определенияNatalia Odegova
 
доклад на SQADays 2011 в Казани
доклад на SQADays  2011 в Казанидоклад на SQADays  2011 в Казани
доклад на SQADays 2011 в Казаниmargo-qa
 
СОВМЕСТНОЕ ПРИМЕНЕНИЕ КОНТРАКТОВ И ВЕРИФИКАЦИИ ДЛЯ ПОВЫШЕНИЯ КАЧЕСТВА АВТОМАТ...
СОВМЕСТНОЕ ПРИМЕНЕНИЕ КОНТРАКТОВ И ВЕРИФИКАЦИИ ДЛЯ ПОВЫШЕНИЯ КАЧЕСТВА АВТОМАТ...СОВМЕСТНОЕ ПРИМЕНЕНИЕ КОНТРАКТОВ И ВЕРИФИКАЦИИ ДЛЯ ПОВЫШЕНИЯ КАЧЕСТВА АВТОМАТ...
СОВМЕСТНОЕ ПРИМЕНЕНИЕ КОНТРАКТОВ И ВЕРИФИКАЦИИ ДЛЯ ПОВЫШЕНИЯ КАЧЕСТВА АВТОМАТ...ITMO University
 
Теория тестирования, часть 1
Теория тестирования, часть 1 Теория тестирования, часть 1
Теория тестирования, часть 1 DressTester
 
Управление конфигурациями и артефакты тестирования
Управление конфигурациями и артефакты тестированияУправление конфигурациями и артефакты тестирования
Управление конфигурациями и артефакты тестированияSQALab
 

La actualidad más candente (18)

Requirements engineering. IREB practices
Requirements engineering. IREB practicesRequirements engineering. IREB practices
Requirements engineering. IREB practices
 
Istqb lesson 5
Istqb lesson 5Istqb lesson 5
Istqb lesson 5
 
Istqb lesson 1
Istqb lesson 1Istqb lesson 1
Istqb lesson 1
 
Istqb lesson 6
Istqb lesson 6Istqb lesson 6
Istqb lesson 6
 
Istqb lesson 3
Istqb lesson 3Istqb lesson 3
Istqb lesson 3
 
Обеспечение качества перевода
Обеспечение качества переводаОбеспечение качества перевода
Обеспечение качества перевода
 
Istqb lesson 4
Istqb lesson 4Istqb lesson 4
Istqb lesson 4
 
Tq Metric Compared Sep2009
Tq Metric Compared Sep2009Tq Metric Compared Sep2009
Tq Metric Compared Sep2009
 
Тестирование ПО
Тестирование ПОТестирование ПО
Тестирование ПО
 
Software testing foundations_ilya_pluzhnikov
Software testing foundations_ilya_pluzhnikovSoftware testing foundations_ilya_pluzhnikov
Software testing foundations_ilya_pluzhnikov
 
Александр Александров -- Надёжный тест-дизайн (мастер-класс)
Александр Александров -- Надёжный тест-дизайн (мастер-класс)Александр Александров -- Надёжный тест-дизайн (мастер-класс)
Александр Александров -- Надёжный тест-дизайн (мастер-класс)
 
презентация по дисциплине технология разработки программного обеспечения
презентация по дисциплине технология разработки программного обеспеченияпрезентация по дисциплине технология разработки программного обеспечения
презентация по дисциплине технология разработки программного обеспечения
 
2.1 Тестирование: основные определения
2.1 Тестирование: основные определения2.1 Тестирование: основные определения
2.1 Тестирование: основные определения
 
доклад на SQADays 2011 в Казани
доклад на SQADays  2011 в Казанидоклад на SQADays  2011 в Казани
доклад на SQADays 2011 в Казани
 
СОВМЕСТНОЕ ПРИМЕНЕНИЕ КОНТРАКТОВ И ВЕРИФИКАЦИИ ДЛЯ ПОВЫШЕНИЯ КАЧЕСТВА АВТОМАТ...
СОВМЕСТНОЕ ПРИМЕНЕНИЕ КОНТРАКТОВ И ВЕРИФИКАЦИИ ДЛЯ ПОВЫШЕНИЯ КАЧЕСТВА АВТОМАТ...СОВМЕСТНОЕ ПРИМЕНЕНИЕ КОНТРАКТОВ И ВЕРИФИКАЦИИ ДЛЯ ПОВЫШЕНИЯ КАЧЕСТВА АВТОМАТ...
СОВМЕСТНОЕ ПРИМЕНЕНИЕ КОНТРАКТОВ И ВЕРИФИКАЦИИ ДЛЯ ПОВЫШЕНИЯ КАЧЕСТВА АВТОМАТ...
 
Test design print
Test design printTest design print
Test design print
 
Теория тестирования, часть 1
Теория тестирования, часть 1 Теория тестирования, часть 1
Теория тестирования, часть 1
 
Управление конфигурациями и артефакты тестирования
Управление конфигурациями и артефакты тестированияУправление конфигурациями и артефакты тестирования
Управление конфигурациями и артефакты тестирования
 

Similar a Vladimir Itsykson. CSEDays

Использование комбинаторного тестирования для мобильных приложений
Использование комбинаторного тестирования для мобильных приложенийИспользование комбинаторного тестирования для мобильных приложений
Использование комбинаторного тестирования для мобильных приложенийSQALab
 
Тестирование осень 2013 лекция 1
Тестирование осень 2013 лекция 1Тестирование осень 2013 лекция 1
Тестирование осень 2013 лекция 1Technopark
 
Тестирование весна 2014 лекция 1
Тестирование весна 2014 лекция 1Тестирование весна 2014 лекция 1
Тестирование весна 2014 лекция 1Technopark
 
Аудит безопасности программного кода: Подходы, стандарты, технологии выявлени...
Аудит безопасности программного кода: Подходы, стандарты, технологии выявлени...Аудит безопасности программного кода: Подходы, стандарты, технологии выявлени...
Аудит безопасности программного кода: Подходы, стандарты, технологии выявлени...Andrey Fadin
 
Мастер Тест План / Тестовая Стратегия: Что это? Зачем? Как его создать?-От А ...
Мастер Тест План / Тестовая Стратегия: Что это? Зачем? Как его создать?-От А ...Мастер Тест План / Тестовая Стратегия: Что это? Зачем? Как его создать?-От А ...
Мастер Тест План / Тестовая Стратегия: Что это? Зачем? Как его создать?-От А ...SQALab
 
Заблуждения и стереотипы относительно анализа кода
Заблуждения и стереотипы относительно анализа кодаЗаблуждения и стереотипы относительно анализа кода
Заблуждения и стереотипы относительно анализа кодаRISSPA_SPb
 
Маргарита Сафарова - Аудит процессов тестирования при смене проектной команды
Маргарита Сафарова - Аудит процессов тестирования при смене проектной командыМаргарита Сафарова - Аудит процессов тестирования при смене проектной команды
Маргарита Сафарова - Аудит процессов тестирования при смене проектной командыSQALab
 
Какой разработчик лучше? Или как сравнивать качество различных систем?
Какой разработчик лучше? Или как сравнивать качество различных систем?Какой разработчик лучше? Или как сравнивать качество различных систем?
Какой разработчик лучше? Или как сравнивать качество различных систем?SQALab
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...yaevents
 
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...Tatyanazaxarova
 
Ломаем (и строим) вместе
Ломаем (и строим) вместеЛомаем (и строим) вместе
Ломаем (и строим) вместеDmitry Evteev
 
Security Metrics for PCI Compliance
Security Metrics for PCI ComplianceSecurity Metrics for PCI Compliance
Security Metrics for PCI Complianceqqlan
 
Презентация по дисциплине технология разработки программного обеспечения
Презентация по дисциплине технология разработки программного обеспеченияПрезентация по дисциплине технология разработки программного обеспечения
Презентация по дисциплине технология разработки программного обеспеченияRauan Ibraikhan
 
Инструменты автоматизации тестирования - дефективные
Инструменты автоматизации тестирования - дефективныеИнструменты автоматизации тестирования - дефективные
Инструменты автоматизации тестирования - дефективныеSQALab
 
Метрики автоматизированного тестирования на пальцах
Метрики автоматизированного тестирования на пальцахМетрики автоматизированного тестирования на пальцах
Метрики автоматизированного тестирования на пальцахSQALab
 
Процесс тестирования
Процесс тестированияПроцесс тестирования
Процесс тестированияAlexander Solosh
 
Trpo 3 создание_по2
Trpo 3 создание_по2Trpo 3 создание_по2
Trpo 3 создание_по2pogromskaya
 

Similar a Vladimir Itsykson. CSEDays (20)

Использование комбинаторного тестирования для мобильных приложений
Использование комбинаторного тестирования для мобильных приложенийИспользование комбинаторного тестирования для мобильных приложений
Использование комбинаторного тестирования для мобильных приложений
 
лекция № 12
лекция № 12лекция № 12
лекция № 12
 
Тестирование осень 2013 лекция 1
Тестирование осень 2013 лекция 1Тестирование осень 2013 лекция 1
Тестирование осень 2013 лекция 1
 
Тестирование весна 2014 лекция 1
Тестирование весна 2014 лекция 1Тестирование весна 2014 лекция 1
Тестирование весна 2014 лекция 1
 
Аудит безопасности программного кода: Подходы, стандарты, технологии выявлени...
Аудит безопасности программного кода: Подходы, стандарты, технологии выявлени...Аудит безопасности программного кода: Подходы, стандарты, технологии выявлени...
Аудит безопасности программного кода: Подходы, стандарты, технологии выявлени...
 
Мастер Тест План / Тестовая Стратегия: Что это? Зачем? Как его создать?-От А ...
Мастер Тест План / Тестовая Стратегия: Что это? Зачем? Как его создать?-От А ...Мастер Тест План / Тестовая Стратегия: Что это? Зачем? Как его создать?-От А ...
Мастер Тест План / Тестовая Стратегия: Что это? Зачем? Как его создать?-От А ...
 
Заблуждения и стереотипы относительно анализа кода
Заблуждения и стереотипы относительно анализа кодаЗаблуждения и стереотипы относительно анализа кода
Заблуждения и стереотипы относительно анализа кода
 
Маргарита Сафарова - Аудит процессов тестирования при смене проектной команды
Маргарита Сафарова - Аудит процессов тестирования при смене проектной командыМаргарита Сафарова - Аудит процессов тестирования при смене проектной команды
Маргарита Сафарова - Аудит процессов тестирования при смене проектной команды
 
Какой разработчик лучше? Или как сравнивать качество различных систем?
Какой разработчик лучше? Или как сравнивать качество различных систем?Какой разработчик лучше? Или как сравнивать качество различных систем?
Какой разработчик лучше? Или как сравнивать качество различных систем?
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
 
1
11
1
 
1
11
1
 
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
 
Ломаем (и строим) вместе
Ломаем (и строим) вместеЛомаем (и строим) вместе
Ломаем (и строим) вместе
 
Security Metrics for PCI Compliance
Security Metrics for PCI ComplianceSecurity Metrics for PCI Compliance
Security Metrics for PCI Compliance
 
Презентация по дисциплине технология разработки программного обеспечения
Презентация по дисциплине технология разработки программного обеспеченияПрезентация по дисциплине технология разработки программного обеспечения
Презентация по дисциплине технология разработки программного обеспечения
 
Инструменты автоматизации тестирования - дефективные
Инструменты автоматизации тестирования - дефективныеИнструменты автоматизации тестирования - дефективные
Инструменты автоматизации тестирования - дефективные
 
Метрики автоматизированного тестирования на пальцах
Метрики автоматизированного тестирования на пальцахМетрики автоматизированного тестирования на пальцах
Метрики автоматизированного тестирования на пальцах
 
Процесс тестирования
Процесс тестированияПроцесс тестирования
Процесс тестирования
 
Trpo 3 создание_по2
Trpo 3 создание_по2Trpo 3 создание_по2
Trpo 3 создание_по2
 

Más de LiloSEA

CSEDays. Олег Ушмаев
CSEDays. Олег УшмаевCSEDays. Олег Ушмаев
CSEDays. Олег УшмаевLiloSEA
 
CSEDays. Алексей Кадиев
CSEDays. Алексей КадиевCSEDays. Алексей Кадиев
CSEDays. Алексей КадиевLiloSEA
 
CSEDays. Юрий Айдаров
CSEDays. Юрий АйдаровCSEDays. Юрий Айдаров
CSEDays. Юрий АйдаровLiloSEA
 
CSEDays. Александр Семенов
CSEDays. Александр СеменовCSEDays. Александр Семенов
CSEDays. Александр СеменовLiloSEA
 
Александра Торгашова
Александра ТоргашоваАлександра Торгашова
Александра ТоргашоваLiloSEA
 
Степан Петухов
Степан ПетуховСтепан Петухов
Степан ПетуховLiloSEA
 
Лукина Ольга. Безопасность в соц. сетях
Лукина Ольга. Безопасность в соц. сетяхЛукина Ольга. Безопасность в соц. сетях
Лукина Ольга. Безопасность в соц. сетяхLiloSEA
 
Андрей Лабунец. Механизмы трассировки
Андрей Лабунец. Механизмы трассировкиАндрей Лабунец. Механизмы трассировки
Андрей Лабунец. Механизмы трассировкиLiloSEA
 
Андрей Гаража. Биоинформатика
Андрей Гаража. БиоинформатикаАндрей Гаража. Биоинформатика
Андрей Гаража. БиоинформатикаLiloSEA
 
Александр Тиморин. Мошеннические атаки
Александр Тиморин. Мошеннические атакиАлександр Тиморин. Мошеннические атаки
Александр Тиморин. Мошеннические атакиLiloSEA
 
Михаил Рыбалкин. Перестановочные многочлены.
Михаил Рыбалкин. Перестановочные многочлены.Михаил Рыбалкин. Перестановочные многочлены.
Михаил Рыбалкин. Перестановочные многочлены.LiloSEA
 
Cse коновалова титов
Cse коновалова титовCse коновалова титов
Cse коновалова титовLiloSEA
 
схемы разделения секрета
схемы разделения секретасхемы разделения секрета
схемы разделения секретаLiloSEA
 
почти пороговая схема разделения секрета
почти пороговая схема разделения секретапочти пороговая схема разделения секрета
почти пороговая схема разделения секретаLiloSEA
 
Алексей Голдбергс. Криптография для бизнеса
Алексей Голдбергс. Криптография для бизнесаАлексей Голдбергс. Криптография для бизнеса
Алексей Голдбергс. Криптография для бизнесаLiloSEA
 
Hash cse lecture3
Hash cse lecture3Hash cse lecture3
Hash cse lecture3LiloSEA
 
Hash cse lecture1
Hash cse lecture1Hash cse lecture1
Hash cse lecture1LiloSEA
 
Hash cse lecture2
Hash cse lecture2Hash cse lecture2
Hash cse lecture2LiloSEA
 
Simonova sql server-enginetesting
Simonova sql server-enginetestingSimonova sql server-enginetesting
Simonova sql server-enginetestingLiloSEA
 
Simonova CSEDays
Simonova CSEDaysSimonova CSEDays
Simonova CSEDaysLiloSEA
 

Más de LiloSEA (20)

CSEDays. Олег Ушмаев
CSEDays. Олег УшмаевCSEDays. Олег Ушмаев
CSEDays. Олег Ушмаев
 
CSEDays. Алексей Кадиев
CSEDays. Алексей КадиевCSEDays. Алексей Кадиев
CSEDays. Алексей Кадиев
 
CSEDays. Юрий Айдаров
CSEDays. Юрий АйдаровCSEDays. Юрий Айдаров
CSEDays. Юрий Айдаров
 
CSEDays. Александр Семенов
CSEDays. Александр СеменовCSEDays. Александр Семенов
CSEDays. Александр Семенов
 
Александра Торгашова
Александра ТоргашоваАлександра Торгашова
Александра Торгашова
 
Степан Петухов
Степан ПетуховСтепан Петухов
Степан Петухов
 
Лукина Ольга. Безопасность в соц. сетях
Лукина Ольга. Безопасность в соц. сетяхЛукина Ольга. Безопасность в соц. сетях
Лукина Ольга. Безопасность в соц. сетях
 
Андрей Лабунец. Механизмы трассировки
Андрей Лабунец. Механизмы трассировкиАндрей Лабунец. Механизмы трассировки
Андрей Лабунец. Механизмы трассировки
 
Андрей Гаража. Биоинформатика
Андрей Гаража. БиоинформатикаАндрей Гаража. Биоинформатика
Андрей Гаража. Биоинформатика
 
Александр Тиморин. Мошеннические атаки
Александр Тиморин. Мошеннические атакиАлександр Тиморин. Мошеннические атаки
Александр Тиморин. Мошеннические атаки
 
Михаил Рыбалкин. Перестановочные многочлены.
Михаил Рыбалкин. Перестановочные многочлены.Михаил Рыбалкин. Перестановочные многочлены.
Михаил Рыбалкин. Перестановочные многочлены.
 
Cse коновалова титов
Cse коновалова титовCse коновалова титов
Cse коновалова титов
 
схемы разделения секрета
схемы разделения секретасхемы разделения секрета
схемы разделения секрета
 
почти пороговая схема разделения секрета
почти пороговая схема разделения секретапочти пороговая схема разделения секрета
почти пороговая схема разделения секрета
 
Алексей Голдбергс. Криптография для бизнеса
Алексей Голдбергс. Криптография для бизнесаАлексей Голдбергс. Криптография для бизнеса
Алексей Голдбергс. Криптография для бизнеса
 
Hash cse lecture3
Hash cse lecture3Hash cse lecture3
Hash cse lecture3
 
Hash cse lecture1
Hash cse lecture1Hash cse lecture1
Hash cse lecture1
 
Hash cse lecture2
Hash cse lecture2Hash cse lecture2
Hash cse lecture2
 
Simonova sql server-enginetesting
Simonova sql server-enginetestingSimonova sql server-enginetesting
Simonova sql server-enginetesting
 
Simonova CSEDays
Simonova CSEDaysSimonova CSEDays
Simonova CSEDays
 

Vladimir Itsykson. CSEDays

  • 1. Обеспечение качества программных систем с помощью статических методов Ицыксон В.М. Санкт-Петербургский государственный политехнический университет CSEDays. Application 2010 Екатеринбург
  • 2. Обеспечение качества программных систем с помощью статических методов 2 План доклада  Введение  Качество ПО  Методы обеспечения качества  Статический анализ  Модели программ  Алгоритмы статического анализа  Обнаружение дефектов  Аннотирование  Статические анализаторы  Другие статические методы  Заключение
  • 3. Обеспечение качества программных систем с помощью статических методов 3 Тенденции индустрии разработки ПО  Объем программ растет  Время разработки новых версий ПО сокращается  Все большее число задач решается программно  ПО все больше используется при решении критически важных задач  Существенная часть ПО является свободной и поставляется “as is”
  • 4. Обеспечение качества программных систем с помощью статических методов 4 Известные примеры программных ошибок  США, 1962 год. Гибель несущего аппарата “Маринер-1”. Причина – ошибка в одном символе программы  DO 100 I = 1, 10  DO100I = 1.10  США, 1987 год. Ускоритель Therac-25. Переоблучение пациентов онкоклиник. Причина – ошибка «race condition»  США, 1991 год. Комплекс Patriot. Погибло 28 чел. Причина – ошибка округления  Европа, 1996 год. Ракета Ариан-5. Ущерб 7 млрд. $. Причина – использование унаследованного кода
  • 5. Обеспечение качества программных систем с помощью статических методов 5 Известные примеры программных ошибок  США, 2003 год. Сбой в энергосистеме (Blackout). Ущерб 7-10 млрд.$. Причина – ошибка «race condition»  Израиль. Сбой навигационной системы самолетов F16 при полетах над Мертвым морем.  Высотомер выдавал значение ≤0.  Ошибка деления на ноль (или переполнение)  Голландия, 2000 год. Остановка доменной печи 29 февраля. Гибель 6 человек. Ошибка в процедуре расчета даты.  …
  • 6. Обеспечение качества программных систем с помощью статических методов 6 Что такое качественное ПО?  ПО, в котором отсутствуют ошибки  ПО, соответствующее требованиям
  • 7. Обеспечение качества программных систем с помощью статических методов 7 Качество программного обеспечения  ГОСТ Р ИСО/МЭК 9126 (ISO 9126):  Качество ПО – весь объем признаков и характеристик программной продукции, который относится к её способности удовлетворять установленным и предполагаемым свойствам  Характеристики качества – набор свойств программной продукции, по которым её качество описывается и оценивается
  • 8. Обеспечение качества программных систем с помощью статических методов 8 Характеристики качества ПО 1. Функциональные возможности (Functionality) 2. Надежность (Reliability) 3. Практичность (Usability) 4. Эффективность (Efficiences) 5. Сопровождаемость (Maintainability) 6. Мобильность (Portability)
  • 9. Обеспечение качества программных систем с помощью статических методов 9 Качество ПО. Функциональные возможности  Пригодность (Suitability)  Правильность (Accuracy)  Способность к взаимодействию (Interoperability)  Согласованность (Compliance) - поддержка соответствующих стандартов или соглашений  Защищенность (Security)
  • 10. Обеспечение качества программных систем с помощью статических методов 10 Качество ПО. Надежность  Стабильность (Maturity)  Устойчивость к ошибкам (Fault tolerance)  Восстанавливаемость (Recoverability)
  • 11. Обеспечение качества программных систем с помощью статических методов 11 Качество ПО. Практичность  Понятность (Understandability)  Обучаемость (Learnability)  Простота использования (Operability)
  • 12. Обеспечение качества программных систем с помощью статических методов 12 Качество ПО. Эффективность  Временная эффективность (Time behavior)  Характер использования ресурсов (Resource behavior)
  • 13. Обеспечение качества программных систем с помощью статических методов 13 Качество ПО. Сопровождаемость  Анализируемость (Analysability)  Изменяемость (Changeability)  Устойчивость (Stability)  Тестируемость (Testability)
  • 14. Обеспечение качества программных систем с помощью статических методов 14 Качество ПО. Мобильность  Адаптируемость (Adaptability)  Простота внедрения (Installability)  Соответствие (Conformance) - подчинение стандартам или соглашениям, относящимся к мобильности  Взаимозаменяемость (Replaceabilily)
  • 15. Качество ПО. Заинтересованные лица  Пользователь/заказчик  Функциональность  Надежность  Практичность  Эффективность  Разработчик/руководитель  Сопровождаемость  Мобильность Обеспечение качества программных систем с помощью статических методов 15
  • 16. Методы обеспечения качества  Методы, направленные на проектирование качественного ПО  Формальные спецификации  Синтез ПО на основе спецификаций и моделей  Контрактное программирование  И т.п.  Сегодня не рассматриваются  Методы, направленные на обеспечение качества существующего ПО Обеспечение качества программных систем с помощью статических методов 16
  • 17. Обеспечение качества программных систем с помощью статических методов 17 Методы обеспечения качества  Динамические методы  Подразумевают запуск ПО  Статические методы  Не используют запуск ПО  Используют проектные артефакты (исходные коды, спецификации, аннотации и т.п.)  Комбинированные методы
  • 18. Обеспечение качества программных систем с помощью статических методов 18 Динамические методы обеспечения качества  Тестирование  Ручное  Автоматизированное  Автоматическое  Профилирование  Динамический анализ  Мониторинг  Анализ трасс исполнения  …
  • 19. Обеспечение качества программных систем с помощью статических методов 19 Достоинства динамических методов  Просты в реализации  Обычно не требовательны к ресурсам  Наиболее популярны и развиты (особенно тестирование)
  • 20. Обеспечение качества программных систем с помощью статических методов 20 Недостатки динамических методов  Проверяют ограниченное число трасс выполнения  Проверяют конечный набор входных данных  Проверяют работоспособность в ограниченном числе окружений  Число тестов, позволяющих исчерпывающе проверить программную систему, потенциально бесконечно!  Тестирование не гарантирует отсутствие ошибок!  Тестирование может только показать наличие ошибок! «Тестирование программ может служить для доказательства наличия ошибок, но никогда не докажет их отсутствия!» Э.Дейкстра. Заметки по структурному программированию
  • 21. Обеспечение качества программных систем с помощью статических методов 21 Статические методы обеспечения качества  Формальные инспекции, аудит  Формальная верификация  Дедуктивная верификация  Model checking  Статический анализ  Трансформации  Рефакторинги  Модификации
  • 22. Обеспечение качества программных систем с помощью статических методов 22 Статический анализ  Использует исходный код ПО для анализа  Применяется для  Форматирования программ  Вычисления программных метрик  Оптимизации программ  Распараллеливания программ  Преобразования программ  Обфускации программ  Деобфускации программ  Обнаружения дефектов  …
  • 23. Обеспечение качества программных систем с помощью статических методов 23 Статический анализ для обнаружения дефектов  Использует исходный код ПО для анализа  Позволяет проанализировать все возможные трассы исполнения  Позволяет проанализировать все наборы входных данных  Может быть полностью автоматизирован  Позволяет обнаружить нефункциональные дефекты
  • 24. Обеспечение качества программных систем с помощью статических методов 24 Нефункциональные дефекты  Ошибки этапа кодирования  Не являются явным нарушением спецификации  Являются следствием  сложности языков программирования  сложности библиотек  сложности алгоритмов и структур данных
  • 25. Обеспечение качества программных систем с помощью статических методов 25 Нефункциональные дефекты  Выход за границу массива  Переполнение буфера  Использование неинициализированных объектов  Работа с некорректным указателем  Арифметические ошибки  Утечки ресурсов  Ошибки форматных строк  Ошибки работы с ресурсами  и т.д.
  • 26. Обеспечение качества программных систем с помощью статических методов 26 Проявление дефектов  Без проявления  Зависания  Сбои  Падения  Деградация производительности  …
  • 27. Обеспечение качества программных систем с помощью статических методов 27 Лирическое отступление  Почему С?  Является вместе с Java и С++ наиболее популярным языком  Наибольшее число дефектов и уязвимостей имеются в программах на С и С++  Язык С (и С++) является языком системного программирования и используется во многих критически важных приложениях  Методы статического анализа наиболее проработаны для C/C++  А что с другими языками?
  • 28. Обеспечение качества программных систем с помощью статических методов 28 TIOBE Programming Community Index (Nov 2010)
  • 29. Обеспечение качества программных систем с помощью статических методов 29 Опасные конструкции  Язык С  Макроопределения  Указатели  Массивы  Адресная арифметика  Указатели на функции  Приведения типов  Объединения (union)  Язык С++  Полиморфизм  Исключения  …
  • 30. Обеспечение качества программных систем с помощью статических методов 30 Характеристики анализа  Полнота – доля найденных дефектов по отношению ко всем дефектам программы  Точность – доля найденных истинных дефектов по отношению ко всем найденным  Ресурсоемкость
  • 31. Обеспечение качества программных систем с помощью статических методов 31 Общая схема обнаружения дефектов
  • 32. Обеспечение качества программных систем с помощью статических методов 32 Модели программ. Требования  Полнота представления объектов программы  Восстанавливаемость  Идеально: возможность полного восстановления исходного кода  Желательно: связь с исходным кодом  Эффективность поиска объектов
  • 33. Обеспечение качества программных систем с помощью статических методов 33 Модели программ. Типы  Структурные  Синтаксическое дерево разбора  Абстрактное синтаксическое дерево (AST – abstract syntax tree)  Поведенческие  Граф потока управления (CFG – control flow graph)  Граф зависимостей по данным (DDG – data dependence graph)  SSA - static single assignment  Гибридные  Абстрактный семантический граф (ASG - abstract semantic graph)
  • 34. Обеспечение качества программных систем с помощью статических методов 34 Модели программ: AST int main() { int n = 10; int f = 1; while (n > 0) { f *= n; --n; } return f; }
  • 35. Обеспечение качества программных систем с помощью статических методов 35 Модели программ: ASG int main() { int n = 10; int f = 1; while (n > 0) { f *= n; --n; } return f; }
  • 36. Обеспечение качества программных систем с помощью статических методов 36 Модели программ: DDG int main() { int n = 10; int f = 1; while (n > 0) { f *= n; --n; } return f; }
  • 37. Обеспечение качества программных систем с помощью статических методов 37 Модели программ: CFG int main() { int n = 10; int f = 1; while (n > 0) { f *= n; --n; } return f; }
  • 38. Обеспечение качества программных систем с помощью статических методов 38 Модели программ: SSA int main() { int n = 10; int f = 1; while (n > 0) { f *= n; --n; } return f; }
  • 39. Обеспечение качества программных систем с помощью статических методов 39 Модели программ. Резюме  Для простейшего статического анализа достаточно структурных моделей (AST)  Для обнаружения дефектов необходим учет семантики:  ASG  CFG  CFG в форме SSA
  • 40. Обеспечение качества программных систем с помощью статических методов 40 Модели программ. Построение  Построение парсера вручную  Использование генераторов парсеров (JavaCC, ANTLR, YACC, etc)  Использование самостоятельных парсеров (Elsa)  Использование парсеров в составе средств разработки (NetBeans, Eclipse CDT)  Использование Front-End компиляторов (gcc)  Использование фреймворков для статического анализа (SUIF, CIL, LLVM, etc)
  • 41. Обеспечение качества программных систем с помощью статических методов 41 Общая схема обнаружения дефектов
  • 42. Обеспечение качества программных систем с помощью статических методов 42 Анализ на основе состояний программы  Состояние программы – совокупность состояний всех объектов программы в какой-либо точке  Цель – вычислить все возможные состояния программы во всех точках  Обнаружение дефектов происходит на основе проверки вычисленных состояний
  • 43. Обеспечение качества программных систем с помощью статических методов 43 Алгоритмы статического анализа  По типу алгоритму  Интервальный анализ  Анализ указателей  Ресурсный анализ  По масштабу  Внутрипроцедурный  Межпроцедурный  По консервативности  Пессимистический (консервативный) анализ  Оптимистический анализ
  • 44. Обеспечение качества программных систем с помощью статических методов 44 Интервальный анализ  Состояние переменных представляются интервальными значениями  a = [10;20]  b = (-40;20) U (30;100)  c = [0;∞)  Вычисление состояния после выполнения оператора языка производится на основе интервальной арифметики  Каждому оператору ставится в соответствие уравнение, связывающее состояние до выполнения и после
  • 45. Интервальный анализ Элемент модели int a; a = С; a = b; φ(…) if(cond) Strue else Sfalse Обеспечение качества программных систем с помощью статических методов 45 Интервальное правило Sl = Sl-1 ∪ <a, noninit> Sl = Sl-1 Ui<a, i> ∪ <a, С> Sl = Sl-1 Ui<a, i> ∪ Uj<a, bj> Sl = Ui Si Strue = Sl-1 ∩ cond Sfalse = Sl-1 ∩ ¬cond
  • 46. Обеспечение качества программных систем с помощью статических методов 46 Интервальный анализ. Пример int a; a=10; int b = f(…); if (b < 100){ … a = a + b; } else{ … a = b / 2; } <a, noninit> <a, [10:10]> <a, [10:10]>, <b, (-∞; ∞)> <a, [10:10]>, <b, (-∞; 100)> <a, [-∞+10:110]>, <b, (-∞; 100)> <a, [10:10]>, <b, [100; ∞)> <a, [50: ∞/2]>, <b, [100; ∞)>
  • 47. Обеспечение качества программных систем с помощью статических методов 47 Анализ указателей  Отличие от интервального анализа:  хранятся не интервалы значений, а списки связи “points-to”  значения одних объектов могут влиять на другие
  • 48. Обеспечение качества программных систем с помощью статических методов 48 Анализ указателей. Пример  p, q1 и q2 – указатели на динамическую память  Пример для конструкции free(p);
  • 49. Обеспечение качества программных систем с помощью статических методов 49 Анализ указателей. Пример  p, q – указатели  Пример для конструкции *p = q
  • 50. Обеспечение качества программных систем с помощью статических методов 50 Анализ указателей. Пример  p, q – указатели  Пример для конструкции p = *q
  • 51. Обеспечение качества программных систем с помощью статических методов 51 Ресурсный анализ  Ресурсы – объекты программы, имеющие свой жизненный цикл  Примеры ресурсов:  Выделенная динамическая память  Файлы  Семафоры  Мьютексы  Сокеты  Потоки  Нити  …  Обычно ресурсы характеризуются состоянием и атрибутами  Каждый тип ресурса изменяет свое состояние по определенным правилам
  • 52. Обеспечение качества программных систем с помощью статических методов 52 Ресурсный анализ. Объект в куче  Правила использования  Создается ( p = malloc(…) )  Используется ( *p )  Освобождается ( free(p) )  Примеры дефектов  Использование не созданного объекта  Повторное освобождение  Утечка
  • 53. Обеспечение качества программных систем с помощью статических методов 53 Ресурсный анализ. Файл  Правила использования  Открыть ( f = fopen(“…”, “r” )  Читать/писать ( fprintf(f, …) )  Закрыть ( close(f) )  Примеры дефектов  Чтение из не открытого файла  Попытка писать в файл открытый на чтение  …
  • 54. Обеспечение качества программных систем с помощью статических методов 54 Ресурсный анализ  Отличие ресурсов от других объектов программы:  Управляются операционной системой  Управление сменой состояний и атрибутов происходит через функции API  Необходимо анализировать не конструкции ЯП, а библиотечные вызовы  Необходима информация о семантике библиотечных вызовов:  Семантика зашита в анализатор  Семантика описывается через аннотирование библиотек
  • 55. Обеспечение качества программных систем с помощью статических методов 55 Масштаб анализа  Внутрипроцедурный анализ  Каждая функция анализируется отдельно  Информация не передается между функциями  Ресурсоемкость относительно низкая  Точность и/или полнота – снижаются  Реализуется большинством анализаторов
  • 56. Обеспечение качества программных систем с помощью статических методов 56 Масштаб анализа  Межпроцедурный анализ  Все функция анализируется совместно  Информация передается между функциями  Ресурсоемкость очень высокая  Точность и/или полнота – выше  Реализовано в небольшом числе средств
  • 57. Обеспечение качества программных систем с помощью статических методов 57 Консервативность анализа  Определяется правилами объединения ветвей  Консервативный (пессимистический) анализ  При объединении ветвей объединяет интервалы  Сохраняет полноту (обнаруживаем все ошибки)  Теряет точность (много ложных обнаружений)  Оптимистический анализ  При объединении ветвей пересекает интервалы  Теряет полноту (может пропускать ошибки)  Сохраняет точность (мало ложных обнаружений)
  • 58. Обеспечение качества программных систем с помощью статических методов 58 Консервативность анализа int arr1[10]; int arr2[5]; if (…){ … } // <i, [1..8]> else { … } // <i, [6..15]> a = arr1[i]; // возможно ошибка b = arr2[i]; // ошибка  Консервативный анализ:  <i, [1..15]>  обнаружит обе ошибки (возможно первая – ложная)  Оптимистический анализ  <i, [6..8]>  обнаружит вторую ошибку (пропустив первую)
  • 59. Обеспечение качества программных систем с помощью статических методов 59 Решение уравнений  В результате применения алгоритмов в явном или неявном виде строится система уравнений  Решение системы  С использованием теории решеток  Методами абстрактной интерпретации  Завершаемость процесса решения обуславливается  Монотонностью уравнений  Конечностью системы уравнений
  • 60. Обеспечение качества программных систем с помощью статических методов 60 Общая схема обнаружения дефектов
  • 61. Обеспечение качества программных систем с помощью статических методов 61 Обнаружение дефектов  На основе анализа допустимости состояний в элементах модели  Использование неинициализированной переменной:  Конструкция: a = b  Условие: <a, noninit> ∈ Sl-1  Повторное освобождение объекта  Конструкция: free(p)  Условие: <p, invalid> ∈ Sl-1
  • 62. Обеспечение качества программных систем с помощью статических методов 62 Обнаружение дефектов  Разыменование некорректного указателя  Конструкция: a = *p  Условие: <p, invalid> ∈ Sl-1  Арифметические операции над указателями на разные объекты  Конструкция: a = p – q;  Условие: <p, o1>,<q, o2> ∈ Sl-1 , o1≠o2  Выход за границы объекта  Конструкция: a = *p;  Условие: <p, o, k> ∈ Sl-1 , k≥≠osize
  • 63. Обеспечение качества программных систем с помощью статических методов 63 Аннотирование  Что делать если:  часть исходных кодов отсутствует?  проект использует библиотечные вызовы?  вы знаете о коде нечто такое, что не способен выявить анализатор?  Ответ: использовать механизмы внесения внешней семантики в процесс анализа - аннотирование
  • 64. Обеспечение качества программных систем с помощью статических методов 64 Аннотирование  Способы аннотирования:  расширение целевого языка с помощью аннотирующих комментариев  расширение целевого языка с использованием его внутренних средств  внешние средства для описания поведения компонентов
  • 65. Обеспечение качества программных систем с помощью статических методов 65 Языки аннотаций  На основе комментариев С  ACSL (ANSI/ISO C Specification Language)  Аннотации в SPlint  На основе внутренних средств С  CLANG  SAL (Source Annotation Language)  PREfast Annotations  Оригинальный язык  Metal  PanLang
  • 66. Обеспечение качества программных систем с помощью статических методов 66 Языки аннотаций: цели  Описание поведения функций  Описание глобальных объектов  Описание ресурсов  Описание предусловий, инвариантов, …  Обнаружение новых типов дефектов  Маскирование ложных дефектов  Маскирование участков кода  …
  • 67. Обеспечение качества программных систем с помощью статических методов 67 Metal: описание ошибок работы с ресурсами state decl any_pointer v; start: { kfree(v) } ==> v.freed; v.freed: { *v } ==> v.stop, { err("Использование %s после освобождения!", mc_identifier(v)); } | { kfree(v) } ==> v.stop, { err("Двойное освобождение %s!", mc_identifier(v)); };
  • 68. Обеспечение качества программных систем с помощью статических методов 68 ACSL: пример предусловия /*@ requires 0 <= n; requires valid_range(a, 0, n-1); */ void example(value_type* a, size_type n);
  • 69. Обеспечение качества программных систем с помощью статических методов 69 PanLang: пример аннотации функции realloc void* realloc(void* ptr, unsigned size) { if (size <= 0) { delete(Heap) ptr; return 0; } else { void* res = new Heap(Allocated, size, none, true); if (ptr->size <= size) { size = ptr->size; } copy(res, ptr, size); delete(Heap) ptr; return res; } }
  • 70. Обеспечение качества программных систем с помощью статических методов 70 PanLang: пример аннотации функции recv long recv ( int s ,void* buf ,unsigned len ,int flags) { if ( buf == 0 ) { defect (INI-03, "Второй аргумент функции - NULL"); } if ( flags < 0 ) { defect (INI-01, "Некорректное значение аргумента функции"); } if ( state(s) != Established) { defect (RES-06, "Получение данных из несоединенного сокета"); } set ( buf, [-inf:+inf], len ); return [0:len]; }
  • 71. Проблемы статического анализа  Анализ циклов  Анализ рекурсии и глубокой вложенности вызовов  Анализ больших типов данных  Анализ программ с исключениями  Анализ программ с полиморфизмом и указателями на функции Обеспечение качества программных систем с помощью статических методов 71
  • 72. Обеспечение качества программных систем с помощью статических методов 72 Средства статического анализа  Зарубежные анализаторы  Coverity Prevent SA  Klockwork Insight  Fortify SCA  Mathworks PolySpace  IBM RSA  Microsoft SCA  Microsoft PREFix/PreFast  ParaSoft C++Test  Frama-C  SPlint  Отечественные анализаторы  SVaCE Detector (ИСПРАН)  Viva64, VivaMP (СиПроВер)  AEGIS (СПбГПУ)
  • 73. Обеспечение качества программных систем с помощью статических методов 73 Статический анализатор Aegis  Разработан анализатор Aegis:  Поддержка стандарта С (ISO/IEC 9899:2001)  Поддержка расширений GNU  Анализ многофайловых проектов  Обнаружение программных дефектов следующих типов:  выход за границу массива  переполнение буфера  использование неинициализированных переменных  работа с некорректными указателями  ошибки форматной строки  утечки ресурсов  некорректная работа с ресурсами  Поддержка языка аннотаций PanLang
  • 74. Обеспечение качества программных систем с помощью статических методов 74 Aegis: плагин к IDE Eclipse
  • 75. Обеспечение качества программных систем с помощью статических методов 75 Aegis: свободный сервис http://digiteklabs.ru/aegis
  • 76. Обеспечение качества программных систем с помощью статических методов 76 Статический анализ. Резюме  Достоинства статического анализа  Возможность полного обнаружения дефектов определенного класса  Полная автоматизация процесса обнаружения  Недостатки статического анализа  Наличие ложных обнаружений (false positives)  Высокая ресурсоемкость  Невозможность обнаружения функциональных ошибок
  • 77. Обеспечение качества программных систем с помощью статических методов 77 Место статического анализа  Собственно статический анализ может использоваться  В составе сред разработки для оперативной проверки программ  В системах Continuous integration для постоянного контроля качества кода и своевременного обнаружения дефектов  Статический анализ не заменяет тестирование, а дополняет его  Хорошая практика - использование автоматизированного тестирования вместе со статическим анализом
  • 78. Обеспечение качества программных систем с помощью статических методов 78 Другие статические методы  Инспекции  Формальные инспекции  Аудит кода  Парное программирование  Дедуктивная верификация  Model Checking
  • 79. Model checking  Исследуемая система приводится к модели с конечным числом состояний (например, модель Крипке)  Проверяемые свойства представляются формулами темпоральной логики (LTL, ALTL, CTL, CTL* и т.д.)  Проверка модели – формальная проверка выполнимости формулы на модели. Результат проверки:  Формула выполняется  Формула не выполняется. Контрпример.  Существуют методы проверки систем с 10200 состояний! Обеспечение качества программных систем с помощью статических методов 79
  • 80. Верификация по методу Model Checking Обеспечение качества программных систем с помощью статических методов 80
  • 81. Model checking  Ограничения  Проверяются свойства, связанные только с корректностью смены состояний  Не все свойства представляются в виде темпоральных формул  В общем случае задача - NP-полная  В общем случае неформализуется переход от реальной системы к модели с конечным числом состояний  Программные средства:  SPIN  NuSVM  … Обеспечение качества программных систем с помощью статических методов 81
  • 82. Обеспечение качества программных систем с помощью статических методов 82 Применение различных методов обеспечения качества Хар-ка качества Проблема Обеспечение качества 1 Функциональность Функциональные ошибки, несоответствие спецификации Тестирование Верификация 2 Надежность Низкая надежность Наличие уязвимостей Статический анализ Тестирование 3 Практичность Сложность использования Тестирование 4 Эффективность Проблемы с производительностью, ресурсами Тестирование Профилирование Динамический/статический анализ 5 Сопровождаемость Сложность сопровождения, модификации Рефакторинг Документирование 6 Мобильность Несоответствие стандартам, Сложность адаптации Аудит, рефакторинг Статический анализ
  • 83. Литература  Статический анализ  M. Schwartzbach. Lecture Notes on Static Analysis. BRICS, Department of Computer Science University of Aarhus, Denmark  D.Jackson, M.Rinard. Software Analysis: a Roadmap. 2000  F. Nielson, H. Nielson, C. Hankin. Principles of Program Analysis  http://digiteklabs.ru/research/defectdetection/ Обеспечение качества программных систем с помощью статических методов 83
  • 84. Литература  Model checking  Э. М. Кларк, О. Грамберг, Д. Пелед. Верификация моделей программ. Model Checking. М:МЦНМО, 2002  Ю.Г. Карпов. Model Checking: верификация параллельных и распределенных программных систем. Изд-во БХВ-Петербург, 2010. Обеспечение качества программных систем с помощью статических методов 84
  • 85. Обеспечение качества программных систем с помощью статических методов 85 Контактная информация Санкт-Петербургский государственный политехнический университет Факультет технической кибернетики Кафедра компьютерных систем и программных технологий Лаборатория программно-аппаратных разработок. Web: http://digiteklabs.ru Ицыксон Владимир Михайлович, к.т.н, доц. E-mail: vlad@ftk.spbstu.ru Тел.: +7(812)297-22-38
  • 86. Спасибо за внимание! Обеспечение качества программных систем с помощью статических методов 86