Upload
chapa
View
54
Download
0
Embed Size (px)
DESCRIPTION
Корректность программ Классические и современные подходы. В. В. Кулямин Институт системного программирования РАН. Корректные программы. public int gcd ( int x, int y ) { int t; while( y != 0 ) { t = y; y = x % y ; x = t; } return ( x >= 0 )? x :- x; }. - PowerPoint PPT Presentation
Citation preview
Корректность программКлассические и современные
подходы
В. В. Кулямин
Институт системного программирования РАН
Корректные программы
public int gcd(int x, int y){ int t; while(y != 0) { t = y; y = x%y; x = t; } return (x >= 0)?x:-x;}
2 / 22
gcd : int int intgcd(x,y) 0gcd(x,y)|x
gcd(x,y)|y
z z|x z|y z|gcd(x,y)
Спецификация
Размер программных систем
3 / 22
36 10 15 16 30
4551
25
59
105
216
283
20 30
80
140
180
40
45
89
138
0
50
100
150
200
250
300
Код Windows, млн. строк Код Debian Linux, млн. строк
Команда Windows, 10 чел. Команда Debian, 10 чел.
Ошибки и их причины
Среднее количество ошибок на 1000 строк кода (до тестирования)
4 / 22
Основная причина ошибок в ПО –
его сложность
Сложность задач и интерфейса
5 / 22
Сложность данных
6 / 22
Много компонентов
7
8
Сложность поведения
Много вариантов
9
Множество технологий
10
Риски, связанные с ошибками
● Космические аппараты♦ Mariner I (1962)♦ Фобос-1 (1988)♦ Ariane 5 (1996)♦ Mars Climate Orbiter (1999)
● Инфраструктура♦ AT&T long distance network
crash (1990)♦ Northeast Blackout (2003)♦ OpenSSL rnd in Debian
(2006-8)♦ Heathrow Airport Terminal 5
baggage system (2008)♦ Банковские карты Gemalt
(2010)
● Автомобили♦ Toyota Prius (2005, 2010)
● Медицинское оборудование♦ Therac-25 (1985-7)♦ Medtronic Maximo (2008)
● Авионика и военное оборудование♦ Lockheed F-117 (1982)♦ MIM-104 Patriot (1991)♦ Chinook ZD576 (1994)♦ USS Yorktown (1997)♦ F-22 Raptor (2007)
11 / 22
Что делать?
● Не делать ошибок– Невозможно из-за сложности
● Предотвращение ошибок– Тщательный анализ требований и возможных решений– Изоляция компонентов– Повышение уровня абстракции языков– Устранение error-prone конструкций– Стандартизация и документирование языков, библиотек,
протоколов– Улучшение сопровождаемости, использование образцов,
● Выявление ошибок– Анализ свойств ПО– Контроль качества ПО
12 / 22
Контроль качества ПО
● Экспертиза (review, inspection)● Статический анализ
♦ Проверка правил корректности♦ Поиск конкретных ошибок по шаблонам
● Динамический анализ♦ Мониторинг♦ Тестирование
● Формальная верификация♦ Дедуктивный анализ♦ Проверка моделей
● Гибридные методы
13 / 22
Статика и динамика
● Статический анализ
● Динамический анализ
14 / 22
Требования Исходный кодИнструмент
анализа
Требования
Работа системы
Среда мониторинга
Создание тестов
Пользователи
Формальная верификация
● Дедуктивный анализ [R. Floyd 1967, C. A. R. Hoare 1969]♦ Логика Хоара – {Pre} Program {Post}♦ Правила вывода
● Проверка моделей[E. M. Clarke & E. A. Emerson 1980, J. P. Queille & J. Sifakis 1982]♦ Анализ достижимых состояний
15 / 22
Гибридные методы
Интегрируют элементы различных подходов● Тестирование на основе моделей● Расширенный статический анализ● Формальный мониторинг● Синтетическое структурное тестирование
Вспомогательные техники• Символическое исполнение• Абстрактная интерпретация• Вывод ограничений• Разрешение ограничений• Автоматическое уточнение моделей 16 / 22
Тестирование на основе моделей
17 / 22
Оракул
Тестируемая система
Модель поведения
Генератор воздействий
Метрика полноты
12%
Критерий полноты
36%57%87%
Контроль корректност
и
Контроль тщательности
Пример: описание теста
18 / 22
@Test public class AccountTest{ Account account;
@State public int getBalance() { return account.getBalance(); } @Test @DataProvider(name = "sums") @Guard(name = "bound“) public void testDeposit(int x) { account.deposit(x); }
@Test @DataProvider(name = "sums") public void testWithdraw(int x) { account.withdraw(x); } public boolean bound() { return getBalance() < 500; } public int[] sums = new int[]{0, 1, 2, 5};}
Синтетическое тестирование
DART [P. Godefroid, G. Agha, K. Sen 2005]
19 / 22
Исполнение
Программа
Символическое исполнение
Поиск новых путей
Тесты
Пример работы DART
20 / 22
int unknown_f(int x0, int x1) {
if(x0 == 0) return x1;
if(x1 == 0) return x0;
if(x0>0 && x1<0
|| x0<0 && x1>0) x1 = -x1;
while(x1 != 0) {
if(x1>x0 && x0>0
|| x1<x0 && x0<0)
{ x0 = x1-x0; x1 = x1-x0;
x0 = x0+x1; }
x1 = x0-x1;
x0 = x0-x1;
}
return x0;
}
x0 x1 Ограничение
0 0
!(x0 = 0)
!(x0 = 0) && !(x1 == 0)
!(x0 = 0) && !(x1 == 0) && !(x0>0 && x1<0 || x0<0 && x1>0) && (x1>x0 && x0 >0 || x1<x0 && x0 < 0)
x0 == 0
1 0 && x1 == 0
1 1&& !(x0>0 && x1<0 || x0<0 && x1>0) && !(x1>x0 && x0>0 || x1<x0 && x0<0)
x1' = 0
x0' = 1
1 5
Работы отдела технологий программирования
● Разработка тестов и тестирование♦ Информационная система оператора связи♦ Операционные системы реального времени♦ Базовые библиотеки ОС (POSIX, LSB)♦ Протоколы IPv6, Mobile IPv6, IPsec♦ Микропроцессоры архитектуры MIPS♦ Система аварийной эвакуации пилота♦ Компоненты компиляторов Intel, JDK, DOM API
● Технологии и инструменты♦ Тестирование на основе моделей (UniTESK)♦ Проверка соответствия стандарту LSB♦ Верификация драйверов Linux♦ Инструменты работы с требованиями♦ Инструменты проектирования и конфигурирования авионики
21 / 22
22 / 22
Спасибо за внимание!Вопросы?
http://sp.cmc.msu.ru/specsem/vvp/
http://www.linuxtesting.ru/
http://www.unitesk.ru/
http://hardware.ispras.ru/
http://www.ispras.ru/~petrenko/[email protected]
http://www.ispras.ru/~kuliamin/ [email protected]
Общие книги по тестированию
23 / 22
● B. Beizer. Software Testing Techniques. Thomson Computer Press, 1990
● R. Binder. Testing Object-Oriented Systems: Models, Patterns, and Tools. Addison-Wesley, 2000
● P. Ammann, J. Offutt. Introduction to software testing. Cambridge University Press, 2008.
Книги на русском языке
● Г. Майерс. Искусство тестирования программ. Финансы и статистика, 1982
● Д. Месарош. Шаблоны тестирования xUnit. Рефакторинг кода тестов. Вильямс, 2009
● Курс лекций http://mbt-course.narod.ru
24 / 22
Модульное тестирование
● J.B.Rainsberger. JUnit Recipes. Practical Methods for Programmer Testing. Manning, 2005
● C. Beust, H. Suleiman. Next Generation Java Testing. TestNG and Advanced Concepts. Addison-Wesley, 2007
25 / 22
Тестирование на базе моделей
26 / 22
● M. Utting, B. Legeard. Practical Model-Based Testing. A Tools Approach. Morgan Kaufmann, 2006
● J. Jacky, M. Veanes, C. Campbell, W. Schulte. Model Based Analysis and Testing with C#. Cambridge University Press, 2007
Теория тестирования
● M. Broy, B. Jonsson, J.-P. Katoen, M. Leucker, A. Pretschner, editors. Model Based Testing of Reactive Systems. Advanced Lectures. LNCS 3472, Springer, 2005
27 / 22