Корректность программ презентация

Содержание

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

Слайд 1Корректность программ
В. В. Кулямин
Институт системного программирования РАН


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

23

Слайд 3Причины ошибок





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

23




?

!




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

ПО –
его сложность

/ 23


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


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


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


Слайд 8Сложность – запутанность
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;
}

/ 23


Слайд 9Борьба с ошибками
Безошибочное программирование
– Сильно ограничивается сложностью

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

систем
– Изменяет существенные источники ошибок

Интеграция разработки и контроля качества
– Нужны методы и инструменты контроля качества ПО

Стандартизация
– Нужны методы и инструменты проверки соответствия стандартам

/ 23


Слайд 10Контроль качества ПО
Экспертиза (review, inspection)
Статический анализ
Проверка правил корректности
Поиск конкретных ошибок по

шаблонам
Динамический анализ
Мониторинг
Тестирование
Формальная верификация
Дедуктивный анализ
Проверка моделей
Гибридные методы

/ 23


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



Динамический анализ
/ 23







Требования
Исходный код
Инструмент анализа





Требования
Работа системы
Среда мониторинга
Создание

тестов

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


Слайд 12Формальная верификация
Дедуктивный анализ [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



















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

структурное тестирование

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

/ 23


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








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

12%


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






36%

57%

87%



Слайд 16Пример: описание и работа теста
/ 23
@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, 137, 1000000};
}






Слайд 17Синтетическое тестирование
DART
[P. Godefroid, G. Agha, K. Sen 2005]

/ 23
Исполнение


Программа
Символическое

исполнение






Поиск новых путей


Тесты



Слайд 18Пример работы 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





Слайд 19Counterexample guided abstraction refinement
[E. M. Clarke & O. Grumberg et al

2000,
T. 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








































Слайд 22Карьера в ИСП РАН
/ 23






студент
разработчик
преподаватель
старший разработчик
руководитель группы



архитектор
исследователь
аспирант






Слайд 23 / 23
Спасибо за внимание!

Вопросы?


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика