1 / 27

Корректность программ Классические и современные подходы

Корректность программ Классические и современные подходы. В. В. Кулямин Институт системного программирования РАН. Корректные программы. public int gcd ( int x, int y ) { int t; while( y != 0 ) { t = y; y = x % y ; x = t; } return ( x >= 0 )? x :- x; }.

Download Presentation

Корректность программ Классические и современные подходы

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Корректные программы public intgcd(int x, int y) { intt; while(y != 0) { t = y; y =x%y; x = t; } return (x >= 0)?x:-x; } gcd : int int  int gcd(x,y)  0 gcd(x,y)|x gcd(x,y)|y z z|xz|yz|gcd(x,y) Спецификация

  3. Размер программных систем

  4. Ошибки и их причины Среднее количество ошибок на 1000 строк кода (до тестирования) Основная причина ошибок в ПО – его сложность

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

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

  7. Много компонентов

  8. Сложность поведения

  9. Много вариантов

  10. Множество технологий

  11. Риски, связанные с ошибками • Космические аппараты • Mariner I (1962) • Фобос-1 (1988) • Ariane 5 (1996) • Mars Climate Orbiter (1999) • Инфраструктура • AT&T long distance network crash (1990) • Northeast Blackout (2003) • OpenSSLrnd 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)

  12. Что делать? • Не делать ошибок – Невозможно из-за сложности • Предотвращение ошибок – Тщательный анализ требований и возможных решений – Изоляция компонентов – Повышение уровня абстракции языков – Устранение error-prone конструкций – Стандартизация и документирование языков, библиотек, протоколов – Улучшение сопровождаемости, использование образцов, • Выявление ошибок – Анализ свойств ПО – Контроль качества ПО

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

  14. Статика и динамика • Статический анализ • Динамический анализ   Инструмент анализа Требования Исходный код Работа системы   Требования Среда мониторинга Пользователи Создание тестов

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

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

  17. Тестирование на основе моделей Контроль тщательности Генератор воздействий 12% 36% 87% 57% Критерий полноты Метрика полноты Тестируемая система Модель поведения Оракул Контроль корректности

  18. Пример: описание теста @Testpublic 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}; }

  19. Синтетическое тестирование DART [P. Godefroid, G. Agha, K. Sen 2005] Исполнение Программа Поиск новых путей Символическое исполнение Тесты

  20. Пример работы DART intunknown_f(intx0, intx1){ if(x0 == 0)return x1; if(x1 == 0)returnx0; 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; } returnx0; } x0 x1 Ограничение 0 0 x0 == 0 1 0 !(x0 = 0) && x1 == 0 1 1 !(x0 = 0) && !(x1 == 0) && !(x0>0 && x1<0 || x0<0 && x1>0) && !(x1>x0 && x0>0 || x1<x0 && x0<0) 1 5 !(x0 = 0) && !(x1 == 0) && !(x0>0 && x1<0 || x0<0 && x1>0) && (x1>x0 && x0 >0 || x1<x0 && x0 < 0) x1' = 0 x0' = 1

  21. Работы отдела технологий программирования • Разработка тестов и тестирование • Информационная система оператора связи • Операционные системы реального времени • Базовые библиотеки ОС (POSIX, LSB) • Протоколы IPv6, Mobile IPv6, IPsec • Микропроцессоры архитектуры MIPS • Система аварийной эвакуации пилота • Компоненты компиляторов Intel, JDK, DOM API • Технологии и инструменты • Тестирование на основе моделей (UniTESK) • Проверка соответствия стандарту LSB • Верификация драйверов Linux • Инструменты работы с требованиями • Инструменты проектирования и конфигурирования авионики

  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/ petrenko@ispras.ru http://www.ispras.ru/~kuliamin/ kuliamin@ispras.ru

  23. Общие книги по тестированию • 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.

  24. Книги на русском языке • Г. Майерс. Искусство тестирования программ. Финансы и статистика, 1982 • Д. Месарош. Шаблоны тестирования xUnit. Рефакторинг кода тестов. Вильямс, 2009 • Курс лекций http://mbt-course.narod.ru

  25. Модульное тестирование • 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

  26. Тестирование на базе моделей • 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

  27. Теория тестирования • M. Broy, B. Jonsson, J.-P. Katoen, M. Leucker, A. Pretschner, editors. Model Based Testing of Reactive Systems. Advanced Lectures. LNCS 3472, Springer, 2005

More Related