Корректность программ

Содержание

Слайд 2

Статистика ошибок

Среднее количество ошибок
на 1000 строк кода до тестирования

/ 23

Статистика ошибок Среднее количество ошибок на 1000 строк кода до тестирования / 23

Слайд 3

Причины ошибок
Неправильное понимание задач
Неправильное решение задач
Неправильный перенос решений в код

/ 23

?

!

Причины ошибок Неправильное понимание задач Неправильное решение задач Неправильный перенос решений в

Слайд 4

Сложность программ

Конференция NATO 1968 –
software сложнее hardware

Основная причина ошибок в ПО

Сложность программ Конференция NATO 1968 – software сложнее hardware Основная причина ошибок

его сложность

/ 23

Слайд 5

Сложность – большой размер

/ 23

Сложность – большой размер / 23

Слайд 6

Сложность – сложность данных

/ 23

Сложность – сложность данных / 23

Слайд 7

Сложность задач и интерфейса

/ 23

Сложность задач и интерфейса / 23

Слайд 8

Сложность – запутанность

int unknown_f(int x0, int x1) {
if(x0 == 0) return

Сложность – запутанность int unknown_f(int x0, int x1) { if(x0 == 0)
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 = x1-x0; x1 = x1-x0; x0 = x0+x1; }
x1 = x0-x1;
x0 = x0-x1;
}
  return x0;
}

/ 23

Слайд 9

Борьба с ошибками

Безошибочное программирование
– Сильно ограничивается сложностью
Автоматизация разработки
– Повышает сложность возможных систем

Борьба с ошибками Безошибочное программирование – Сильно ограничивается сложностью Автоматизация разработки –
Изменяет существенные источники ошибок
Интеграция разработки и контроля качества
– Нужны методы и инструменты контроля качества ПО
Стандартизация
– Нужны методы и инструменты проверки соответствия стандартам

/ 23

Слайд 10

Контроль качества ПО

Экспертиза (review, inspection)
Статический анализ
Проверка правил корректности
Поиск конкретных ошибок по шаблонам
Динамический

Контроль качества ПО Экспертиза (review, inspection) Статический анализ Проверка правил корректности Поиск
анализ
Мониторинг
Тестирование
Формальная верификация
Дедуктивный анализ
Проверка моделей
Гибридные методы

/ 23

Слайд 11

Статика и динамика

Статический анализ
Динамический анализ

/ 23



Требования

Исходный код

Инструмент анализа



Требования

Работа системы

Среда мониторинга

Создание тестов

Пользователи

Статика и динамика Статический анализ Динамический анализ / 23 ☑ ☒ Требования

Слайд 12

Формальная верификация

Дедуктивный анализ [R. Floyd 1967, C. A. R. Hoare 1969]
Логика Хоара

Формальная верификация Дедуктивный анализ [R. Floyd 1967, C. A. R. Hoare 1969]
– {Pre} Program {Post}
Правила вывода
Проверка моделей [E. M. Clarke & E. A. Emerson 1980, J. P. Queille & J. Sifakis 1982]
Анализ достижимых состояний

/ 23

Слайд 13

Зачем нужна формальность?

/ 23

Зачем нужна формальность? / 23

Слайд 14

Гибридные методы

Интегрируют элементы различных подходов
Тестирование на основе моделей
Расширенный статический анализ
Формальный мониторинг
Синтетическое структурное

Гибридные методы Интегрируют элементы различных подходов Тестирование на основе моделей Расширенный статический
тестирование
Вспомогательные техники
Символическое исполнение
Абстрактная интерпретация
Вывод ограничений
Разрешение ограничений
Автоматическое уточнение моделей

/ 23

Слайд 15

Тестирование на основе моделей

/ 23

Оракул

Модель состояния

Тестируемая система

Модель поведения

Генератор воздействий



Тестирование на основе моделей / 23 Оракул Модель состояния Тестируемая система Модель


Метрика полноты

12%

Критерий полноты

36%

57%

87%

Слайд 16

Пример: описание и работа теста

/ 23

@Test public class AccountTest
{
Account account;

Пример: описание и работа теста / 23 @Test public class AccountTest {
@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, 137, 1000000};
}

Слайд 17

Синтетическое тестирование

DART
[P. Godefroid, G. Agha, K. Sen 2005]

/ 23

Исполнение

Программа

Символическое исполнение

Поиск

Синтетическое тестирование DART [P. Godefroid, G. Agha, K. Sen 2005] / 23
новых путей

Тесты

Слайд 18

Пример работы DART

/ 23

int unknown_f(int x0, int x1) {
if(x0 ==

Пример работы DART / 23 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 = 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 == 0

1

0

&& x1 == 0

1

1

&& !(x0>0 && x1<0 || x0<0 && x1>0)

&& !(x1>x0 && x0>0 || x1

x1' = 0

x0' = 1

1

5

Слайд 19

Counterexample guided abstraction refinement
[E. M. Clarke & O. Grumberg et al 2000,
T.

Counterexample guided abstraction refinement [E. M. Clarke & O. Grumberg et al
Ball & S. K. Rajamani 2000]

do {
;
...
if(*) {
...
;
}
} while (*);

Авто-уточнение моделей

/ 23

do {
nPacketsOld = nPackets;
...
if(request) {
...
nPackets++;
}
} while (nPackets != nPacketsOld);

do {
b = true;
...
if(*) {
...
b = b?false:*;
}
} while (!b);

Слайд 20

Работы отдела ТП

Разработка тестов и тестирование
Информационная система оператора связи
Операционные системы реального времени
Базовые

Работы отдела ТП Разработка тестов и тестирование Информационная система оператора связи Операционные
библиотеки Linux (Linux Standard Base)
Протоколы IPv6, Mobile IPv6, IPsec
Отдельные модули компиляторов Intel
Микропроцессоры архитектуры MIPS
Создание технологий и инструментов
Тестирование на основе моделей (UniTESK)
Проверка соответствия стандарту LSB
Верификация драйверов Linux

/ 23

Слайд 21

Разработки и исследования

/ 23

Разработки и исследования / 23

Слайд 22

Карьера в ИСП РАН

/ 23

студент

разработчик

преподаватель

старший разработчик

руководитель группы

архитектор

исследователь

аспирант

Карьера в ИСП РАН / 23 студент разработчик преподаватель старший разработчик руководитель группы архитектор исследователь аспирант
Имя файла: Корректность-программ.pptx
Количество просмотров: 169
Количество скачиваний: 3