Модели в профессиональной инженерии
      и тестировании программ

       Д.ф.-м.н., Александр Константинович ПЕТРЕНКО,
  Заведующий отделом Технологий программирования ИСП РАН
                     petrenko@ispras.ru
                 http://ispras.ru/~petrenko




                YaC, 19 сентября 2011 года
MBT – Model Based Testing.
  Где это используется?



             Участники                Число докладов
 Встроенные и real-time (Siemens и          6
 др.)
 Microsoft                                  5
 Телеком (Nokia, Ericsson, Alcatel-         5
 Lucent, Siemens)
 Стандартизация                             3
 Information systems (SAP и др.)            2          2
История возникновения моего
     интереса к этой теме
• 1974-1984 – разработка системного ПО, в частности,
  для космических программ
• 1985-1993 – разработка и тестирование компилятора
  для кораблей типа «Буран»
• 1994 – автоматизация тестирования ОС, компиляторы,
  телеком. протоколы, микропроцессоры,
  математические функции (Nortel, Microsoft, Intel,
  Daimler Chrysler, Motorola, Linux Foundation, Nokia,
  Google, Вымпелком, НИИСИ, МЦСТ, ГосНИИАС,
  «Русские Системы»)

                                                         3
Протестировать компилятор
•   1974-1984 – разработка системного ПО, в частности, для космических программ

• 1985-1993 – разработка и тестирование компилятора
  для кораблей типа «Буран»
•   1994 – автоматизация тестирования ОС, компиляторы, телеком. протоколы,
    микропроцессоры, математические функции (Nortel, Microsoft, Intel, Daimler
    Chrysler, Motorola, Linux Foundation, Nokia, Google, Вымпелком, НИИСИ, МЦСТ,
    ГосНИИАС, «Русские Системы»)



        Пусть надо протестировать компилятор:
        -Что надо проверить и каковы критерии корректности?
        -Когда надо остановиться?
        - Как сэкономить – писать минимум и получать максимум?

                                                                                   4
Задача – спроектировать набор
     тестов для программного модуля
Структура реализации - граф control flow.
Задача генератора тестов - перебор путей теста по структуре control flow
                                                          в реализации


                                    Подход практические не применим
                                    к большим системам, к компиляторам,
                                    в частности.




                                                                       5
Протестировать компилятор (2)
      •   1974-1984 – разработка системного ПО, в частности, для космических программ

      • 1985-1993 – разработка и тестирование компилятора
        для кораблей типа «Буран»
      •   1994 – автоматизация тестирования ОС, компиляторы, телеком. протоколы,
          микропроцессоры, математические функции (Nortel, Microsoft, Intel, Daimler
          Chrysler, Motorola, Linux Foundation, Nokia, Google, Вымпелком, НИИСИ, МЦСТ,
          ГосНИИАС, «Русские Системы»)



                            Предложенный ответ:
-Что надо проверить?        -Описать формальную модель целевого языка
                            (синтаксис и семантику)
- Когда остановиться?       - Проверить все конструкции и альтернативы в этих моделях
- Как сэкономить            - Вручную написать собственно модель и генератор
                            покрытия конструкций и альтернатив
                                                                                        6
Протестировать компилятор (3)

Модель - грамматика:

<assign> ::= <id> “:=” <expr>
<expr> ::= <intexp> | <boolexp>
Протестировать компилятор (4).
Перебор путей теста по грамматике
 1.
 <assign> ::= <id> “:=” <expr>
 <expr> ::= <intexp> | <boolexp>
 2.
 <assign> ::= <id> “:=” <expr>
 <expr> ::= <intexp> | <boolexp>
Протестировать операционную систему
 •   1974-1984 – разработка системного ПО, в частности, для космических программ
 •   1985-1993 – разработка и тестирование компилятора для кораблей типа «Буран»

 • 1994 – автоматизация тестирования ОС, компиляторы,
     телеком. протоколы, микропроцессоры, математические функции (Nortel,
     Microsoft, Intel, Daimler Chrysler, Motorola, Linux Foundation, Nokia, Google,
     Вымпелком, НИИСИ, МЦСТ, ГосНИИАС, «Русские Системы»)



           ?????????????????????:
           -Что можно использовать в качестве моделей для тестирования
           операционных систем, протоколов, ….. ?
           - Что нужно извлекать из моделей для построения теста?


                                                                                      9
Виды моделей программ
                          op2
FSM /    State1                           Грамматика
                    op1
 FA        op2                  State 2
                                          <assign> ::= <id> “:=” <expr>
                    op3
                          op3             <expr> ::= <intexp> | <boolexp>
                           State 3
        State op3
              4
                          op3             Программный контракт

                                          class ArrayList { public virtual void
                                          Insert(int index , object value)
 MSC                                      requires 0 <= index && index <= Count;
                                          requires !IsReadOnly && !IsFixedSize;
                                          ensures Count == old(Count) + 1;
                                          ensures value == this[index ];
                                          ensures Forall{int i in 0 : index ; old(this[i])
                                                                          == this[i]};
 SDL                                      ensures Forall{int i in index : old(Count);
                                          old(this[i]) == this[i + 1]};
                                          {...}
                                                                                     10
Какие задачи помогают решать
           модели?
• Уточнение понимания (требований, проекта/дизайна,
  критериев корректности, угроз, рисков, источников
  проблем)
• В тестировании:
   – систематический перебор входных данных/тестовых
     воздействий
   – Проблемы создания генератора ожидаемых результатов;
     альтернатива – генератор оракулов
   – оценка полноты проверки
      • поведения внешней среды (по модели окружения)
      • поведения системы (модель реализации и/или модель потока
        результатов)
                                                                   11
Процесс тестирования на основе моделей
Подпроцесс                       Требования
                                                                       Подпроцесс
верификации                                                             реализации

                            Фаза 1

   Модели, например,               Дизайн
    программный                 архитектуры и                  Проектная
   контракт                      интерфейсов                  документация


                                     Фаза 2
                        Разработка
Модель окружения,        тестовой             Реализация                   Реализация
 модель тестовых         системы                                         (исходный код)
   воздействий



                                     Фаза 3

                                   Анализ
          Bug reports            результатов               Error free software
                                тестирования
Тестирование на основе моделей
                  Генератор
                 воздействий
                                    12%
                                    36%
                                    87%
                                    57%
      Критерий     Метрика
      полноты      покрытия



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


      Модель        Модель
                 Модель состояния         Тестовый
     поведения       + оракул
                  состояния                оракул


 09.10.2011                                          13
Виды
моделей-систем-задач тестирования
           Модель           Целевая система            Задача тестирования
 Граф control-flow         СУБД                 Генерация тестовых данных
 Граф data-flow            База данных          Генерация тестовых воздействий
 Конечный автомат (FSM),   Компилятор           Оценка корректности реализации
 система переходов (LTS)
 Программный контракт      Библиотека функций   Оценка полноты тестового покрытия
 Система аксиом,           Реактивная система   Связка реализации и моделей
 темпоральные
 спецификации (CTL/LTL)

 Сеть Петри                Телеком. протокол    Транспорт и хранение воздействий и
                                                реакций
 MSC (Sequence diagram)    Модель               Распараллеливание тестов, re-play,
                           микропроцессора      контрольные точки
                                                                                     14
              …                    …                            …
Инструменты MBT в практике
• Авионика:
  – SCADE (Esterel Technologies)
  – Rhapsody (i-Logic / IBM)
• Телеком: Rational Tau (Telelogic / IBM)
• Общего назначения:
  –   SpecExplorer (Microsoft Research),
  –   Test Design (Conformiq),
  –   UniTESK (ИСПРАН)
  –   Code Contract (Microsoft Research)
                                            15
Унифицированный язык
      тестирования – TTCN-3
• Происхождение - Телеком
• Основные игроки:
   – Европейские программы стандартизации в областях:
      • Автомобилестроение, авионика, здравоохранение
      • IBM (Telelogic/Rational tools)
• WWW.OMG.ORG Open Management Group
   – UML Testing Profile (UTP)

      MBT?
              В основе концепции лежит модель теста,
              но не модель целевой системы
                                                        16
Пример большого проекта:
      MS Interoperability Initiative
• 2002 год.
• Требование US Department of Justice Европейской
  комиссии к Microsoft:
   – Опубликовать документацию достаточную для использования
     сторонними разработчиками для создания клиентских и
     серверных программ.
• => Microsoft Interoperability Initiative
   – 60,000 страниц API документации.
   – > 50,000 дефектов.
   – Размер команды > 200 специалистов, срок > 4-х лет.
• Основной инструмент - SpecExplorer
                                                          17
MS Interoperability Initiative




                                 18
MS Interoperability Initiative




                                 19
ПРИМЕРЫ ИНСТРУМЕНТОВ


                       20
SCADE (Esterel Technologies)




                               21
TAU(Telelogic/IBM)
• SDL/UML                 модель поведения

• MSC (UML sequence diagram)

                     модель поведения теста

• TTCN-3 (UML Testing Profile - UTP)
          модель архитектуры теста
                                       22
SpecExplorer (Microsoft)
• Программный контракт

class ArrayList { public virtual void Insert(int index , object value)
 requires 0 <= index && index <= Count;
 requires !IsReadOnly && !IsFixedSize;
 ensures Count == old(Count) + 1;
 ensures value == this[index ];
 ensures Forall{int i in 0 : index ; old(this[i]) == this[i]};
 ensures Forall{int i in index : old(Count); old(this[i]) == this[i + 1]};
{...}




                                                                             23
QTRONIC / Test Design (Conformiq)




                              24
UniTESK (ИСПРАН)
• CTESK (UniTESK для C)
• JavaTESK (UniTESK для Java)
• C++TESK, MicroTESK (для микропроцессоров)




                                              25
UniTESK (ИСПРАН)
Пример спецификации в JavaTESK (программный контракт):

specification int withdraw(int sum) {
pre { return sum > 0; }
post {
    if (balance > 0)
            mark "Withdrawal from account with positive balance";
    else if (balance == 0)
            mark "Withdrawal from empty account";
    else
            mark "Withdrawal from account with negative balance";
    if(balance < sum - maximumCredit)
    {
            branch TooLargeSum;
    return balance == pre balance && withdraw == 0 ;
    }
    else
    {
    branch Normal;
    return balance == pre balance – sum && withdraw == sum ;
}}}                                                                 26
Отчет о покрытии




                   27
Как сгенерировать последовательность
         вызовов операций?
Пример спецификации в JavaTESK:
                                                                                        op2
specification int withdraw(int sum) {
pre { return sum > 0; }                                          State1
post {                                                                           op1
      if (balance > 0)
                mark "Withdrawal from account with positive                                            State 2
      balance";
                                                                        op2
      else if (balance == 0)
                mark "Withdrawal from empty account";                           op3
      else
                mark "Withdrawal from account with negative                             op3
      balance";
      if(balance < sum - maximumCredit)
      {
                branch TooLargeSum;                                                          State 3
      return balance == pre balance && withdraw == 0 ;
                                                                          op3
      }                                                       State 4
      else
      {
      branch Normal;                                                                   op3
      return balance == pre balance – sum && withdraw ==
      sum ;
}}}                                                                                                    28
Пример отчета.
Граф обхода конечного автомата




                            29
Пример спецификации с использованием
      библиотеки CodeContract
         (Microsoft Research)
 using System;
 using System.Diagnostics .Contracts;
 …
 class Math
 {
   public static double Sqrt ( double x )
   {
     Contract.Requires( x > 0 );
     Contract.Ensures (
       Contract.Result<double>()*Contract.Result<double>() == x);
     ...
   }
 }
                                                                    30
Обсуждение.
Где полезно применение MBT?




                          31
Спасибо!

А.К.Петренко
petrenko@ispras.ru
http://ispras.ru/~petrenko




                             32
Запасные слайды




                  33
MS Interoperability Initiative




                                 34
Соотношение MBT и MBSE
MBT - Model Based Testing
• Тестирование на основе моделей – это
  часть общего подхода MBSE
MBSE – Model Based Software (Systems)
  Engineering



                                         35
ПРИМЕРЫ MBSE КОМПЛЕКСОВ


                      36
Boeing OSEE
Open System Engineering Environment is
an integrated, extensible tool environment
for large engineering projects




    Разработан Boeing для поддержки разработки системы
   управления полетом Apache Attack Helicopter
    Разрабатывается с 2004 года

    С 2007 года опубликован под Eclipse Public License как проект

   Eclipse Foundation
TOPCASED

Модели в профессиональной инженерии и тестировании программ. Александр Петренко, ИСП РАН

  • 1.
    Модели в профессиональнойинженерии и тестировании программ Д.ф.-м.н., Александр Константинович ПЕТРЕНКО, Заведующий отделом Технологий программирования ИСП РАН petrenko@ispras.ru http://ispras.ru/~petrenko YaC, 19 сентября 2011 года
  • 2.
    MBT – ModelBased Testing. Где это используется? Участники Число докладов Встроенные и real-time (Siemens и 6 др.) Microsoft 5 Телеком (Nokia, Ericsson, Alcatel- 5 Lucent, Siemens) Стандартизация 3 Information systems (SAP и др.) 2 2
  • 3.
    История возникновения моего интереса к этой теме • 1974-1984 – разработка системного ПО, в частности, для космических программ • 1985-1993 – разработка и тестирование компилятора для кораблей типа «Буран» • 1994 – автоматизация тестирования ОС, компиляторы, телеком. протоколы, микропроцессоры, математические функции (Nortel, Microsoft, Intel, Daimler Chrysler, Motorola, Linux Foundation, Nokia, Google, Вымпелком, НИИСИ, МЦСТ, ГосНИИАС, «Русские Системы») 3
  • 4.
    Протестировать компилятор • 1974-1984 – разработка системного ПО, в частности, для космических программ • 1985-1993 – разработка и тестирование компилятора для кораблей типа «Буран» • 1994 – автоматизация тестирования ОС, компиляторы, телеком. протоколы, микропроцессоры, математические функции (Nortel, Microsoft, Intel, Daimler Chrysler, Motorola, Linux Foundation, Nokia, Google, Вымпелком, НИИСИ, МЦСТ, ГосНИИАС, «Русские Системы») Пусть надо протестировать компилятор: -Что надо проверить и каковы критерии корректности? -Когда надо остановиться? - Как сэкономить – писать минимум и получать максимум? 4
  • 5.
    Задача – спроектироватьнабор тестов для программного модуля Структура реализации - граф control flow. Задача генератора тестов - перебор путей теста по структуре control flow в реализации Подход практические не применим к большим системам, к компиляторам, в частности. 5
  • 6.
    Протестировать компилятор (2) • 1974-1984 – разработка системного ПО, в частности, для космических программ • 1985-1993 – разработка и тестирование компилятора для кораблей типа «Буран» • 1994 – автоматизация тестирования ОС, компиляторы, телеком. протоколы, микропроцессоры, математические функции (Nortel, Microsoft, Intel, Daimler Chrysler, Motorola, Linux Foundation, Nokia, Google, Вымпелком, НИИСИ, МЦСТ, ГосНИИАС, «Русские Системы») Предложенный ответ: -Что надо проверить? -Описать формальную модель целевого языка (синтаксис и семантику) - Когда остановиться? - Проверить все конструкции и альтернативы в этих моделях - Как сэкономить - Вручную написать собственно модель и генератор покрытия конструкций и альтернатив 6
  • 7.
    Протестировать компилятор (3) Модель- грамматика: <assign> ::= <id> “:=” <expr> <expr> ::= <intexp> | <boolexp>
  • 8.
    Протестировать компилятор (4). Переборпутей теста по грамматике 1. <assign> ::= <id> “:=” <expr> <expr> ::= <intexp> | <boolexp> 2. <assign> ::= <id> “:=” <expr> <expr> ::= <intexp> | <boolexp>
  • 9.
    Протестировать операционную систему • 1974-1984 – разработка системного ПО, в частности, для космических программ • 1985-1993 – разработка и тестирование компилятора для кораблей типа «Буран» • 1994 – автоматизация тестирования ОС, компиляторы, телеком. протоколы, микропроцессоры, математические функции (Nortel, Microsoft, Intel, Daimler Chrysler, Motorola, Linux Foundation, Nokia, Google, Вымпелком, НИИСИ, МЦСТ, ГосНИИАС, «Русские Системы») ?????????????????????: -Что можно использовать в качестве моделей для тестирования операционных систем, протоколов, ….. ? - Что нужно извлекать из моделей для построения теста? 9
  • 10.
    Виды моделей программ op2 FSM / State1 Грамматика op1 FA op2 State 2 <assign> ::= <id> “:=” <expr> op3 op3 <expr> ::= <intexp> | <boolexp> State 3 State op3 4 op3 Программный контракт class ArrayList { public virtual void Insert(int index , object value) MSC requires 0 <= index && index <= Count; requires !IsReadOnly && !IsFixedSize; ensures Count == old(Count) + 1; ensures value == this[index ]; ensures Forall{int i in 0 : index ; old(this[i]) == this[i]}; SDL ensures Forall{int i in index : old(Count); old(this[i]) == this[i + 1]}; {...} 10
  • 11.
    Какие задачи помогаютрешать модели? • Уточнение понимания (требований, проекта/дизайна, критериев корректности, угроз, рисков, источников проблем) • В тестировании: – систематический перебор входных данных/тестовых воздействий – Проблемы создания генератора ожидаемых результатов; альтернатива – генератор оракулов – оценка полноты проверки • поведения внешней среды (по модели окружения) • поведения системы (модель реализации и/или модель потока результатов) 11
  • 12.
    Процесс тестирования наоснове моделей Подпроцесс Требования Подпроцесс верификации реализации Фаза 1 Модели, например, Дизайн программный архитектуры и Проектная контракт интерфейсов документация Фаза 2 Разработка Модель окружения, тестовой Реализация Реализация модель тестовых системы (исходный код) воздействий Фаза 3 Анализ Bug reports результатов Error free software тестирования
  • 13.
    Тестирование на основемоделей Генератор воздействий 12% 36% 87% 57% Критерий Метрика полноты покрытия Тестируемая система Модель Модель Модель состояния Тестовый поведения + оракул состояния оракул 09.10.2011 13
  • 14.
    Виды моделей-систем-задач тестирования Модель Целевая система Задача тестирования Граф control-flow СУБД Генерация тестовых данных Граф data-flow База данных Генерация тестовых воздействий Конечный автомат (FSM), Компилятор Оценка корректности реализации система переходов (LTS) Программный контракт Библиотека функций Оценка полноты тестового покрытия Система аксиом, Реактивная система Связка реализации и моделей темпоральные спецификации (CTL/LTL) Сеть Петри Телеком. протокол Транспорт и хранение воздействий и реакций MSC (Sequence diagram) Модель Распараллеливание тестов, re-play, микропроцессора контрольные точки 14 … … …
  • 15.
    Инструменты MBT впрактике • Авионика: – SCADE (Esterel Technologies) – Rhapsody (i-Logic / IBM) • Телеком: Rational Tau (Telelogic / IBM) • Общего назначения: – SpecExplorer (Microsoft Research), – Test Design (Conformiq), – UniTESK (ИСПРАН) – Code Contract (Microsoft Research) 15
  • 16.
    Унифицированный язык тестирования – TTCN-3 • Происхождение - Телеком • Основные игроки: – Европейские программы стандартизации в областях: • Автомобилестроение, авионика, здравоохранение • IBM (Telelogic/Rational tools) • WWW.OMG.ORG Open Management Group – UML Testing Profile (UTP) MBT? В основе концепции лежит модель теста, но не модель целевой системы 16
  • 17.
    Пример большого проекта: MS Interoperability Initiative • 2002 год. • Требование US Department of Justice Европейской комиссии к Microsoft: – Опубликовать документацию достаточную для использования сторонними разработчиками для создания клиентских и серверных программ. • => Microsoft Interoperability Initiative – 60,000 страниц API документации. – > 50,000 дефектов. – Размер команды > 200 специалистов, срок > 4-х лет. • Основной инструмент - SpecExplorer 17
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
    TAU(Telelogic/IBM) • SDL/UML модель поведения • MSC (UML sequence diagram) модель поведения теста • TTCN-3 (UML Testing Profile - UTP) модель архитектуры теста 22
  • 23.
    SpecExplorer (Microsoft) • Программныйконтракт class ArrayList { public virtual void Insert(int index , object value) requires 0 <= index && index <= Count; requires !IsReadOnly && !IsFixedSize; ensures Count == old(Count) + 1; ensures value == this[index ]; ensures Forall{int i in 0 : index ; old(this[i]) == this[i]}; ensures Forall{int i in index : old(Count); old(this[i]) == this[i + 1]}; {...} 23
  • 24.
    QTRONIC / TestDesign (Conformiq) 24
  • 25.
    UniTESK (ИСПРАН) • CTESK(UniTESK для C) • JavaTESK (UniTESK для Java) • C++TESK, MicroTESK (для микропроцессоров) 25
  • 26.
    UniTESK (ИСПРАН) Пример спецификациив JavaTESK (программный контракт): specification int withdraw(int sum) { pre { return sum > 0; } post { if (balance > 0) mark "Withdrawal from account with positive balance"; else if (balance == 0) mark "Withdrawal from empty account"; else mark "Withdrawal from account with negative balance"; if(balance < sum - maximumCredit) { branch TooLargeSum; return balance == pre balance && withdraw == 0 ; } else { branch Normal; return balance == pre balance – sum && withdraw == sum ; }}} 26
  • 27.
  • 28.
    Как сгенерировать последовательность вызовов операций? Пример спецификации в JavaTESK: op2 specification int withdraw(int sum) { pre { return sum > 0; } State1 post { op1 if (balance > 0) mark "Withdrawal from account with positive State 2 balance"; op2 else if (balance == 0) mark "Withdrawal from empty account"; op3 else mark "Withdrawal from account with negative op3 balance"; if(balance < sum - maximumCredit) { branch TooLargeSum; State 3 return balance == pre balance && withdraw == 0 ; op3 } State 4 else { branch Normal; op3 return balance == pre balance – sum && withdraw == sum ; }}} 28
  • 29.
    Пример отчета. Граф обходаконечного автомата 29
  • 30.
    Пример спецификации сиспользованием библиотеки CodeContract (Microsoft Research) using System; using System.Diagnostics .Contracts; … class Math { public static double Sqrt ( double x ) { Contract.Requires( x > 0 ); Contract.Ensures ( Contract.Result<double>()*Contract.Result<double>() == x); ... } } 30
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
    Соотношение MBT иMBSE MBT - Model Based Testing • Тестирование на основе моделей – это часть общего подхода MBSE MBSE – Model Based Software (Systems) Engineering 35
  • 36.
  • 37.
    Boeing OSEE Open SystemEngineering Environment is an integrated, extensible tool environment for large engineering projects  Разработан Boeing для поддержки разработки системы управления полетом Apache Attack Helicopter  Разрабатывается с 2004 года  С 2007 года опубликован под Eclipse Public License как проект Eclipse Foundation
  • 38.