Автотестирование и самотестирование Теория программирования, лекция первая
Что такое тестирование?
Виды тестирования Ручное Автоматическое – Юнит-тесты – Внешние тесты – Эмуляция работы пользователя Самотестирование программы
Заключается в том, что в ряде потенциально проблемных мест ставятся специальные проверки корректности работы программы, которые работают только под отладкой
Assert Assert(expr : Boolean [; const msg: string]); Пример – Assert(index > 0); Или более человечно: – Assert(index > 0, Обращение к базе книг по неверному индексу);
Assert. Боевой пример Function GetHumanNameOfDigit(digit: Byte): String; Begin Assert(digit >= 0); Assert(digit
Моя процедура – моя крепость Обычно проверяют – Невероятные ситуации – Данные, пришедшие извне (с сервера?) – Параметры процедур
Assert в больших проектах Все остальные программисты, запускающие в отладке вашу программу, параллельно работают тестерами ;-) Assert помогает – Когда другие программисты правят ваш код, не разбираясь в нем на 100% – Когда другие программисты правят код соседних модулей, генерирующих данные для вашего – Когда у вас болит голова и вы делаете ошибки
Включение/выключение ассертов Включить – {$C+} или – {$ASSERTIONS ON} Выключить – {$C-} – {$ASSERTIONS OFF} По умолчанию – включены
Юнит-тесты Юнит-тест – это набор тестов, которые проверяют корректность работы процедуры при любых параметрах её вызова. Юнит-тесты запускаются в начале работы программы или перед началом работы программы.
Покрытие юнит-тестами Считается, что 100% процедур должно быть покрыто юнит-тестами. На практике, это условие может быть соблюдено только в NASA и аналогично по масштабам вложений в ПО организациям.
Пример юнит-тестов Procedure TestGetHumanNameOfDigit(); Begin Assert(GetHumanNameOfDigit(-1) = ); Assert(GetHumanNameOfDigit(10) = ); Assert(GetHumanNameOfDigit(2) = два); End;
Правило покрытия тестами ф-ии Каждая ветвь исполнения кода должна быть проверена хотя бы 1 раз.
4 веточки – 4 проверки Function GetSignedDigitHumanName(digit: Byte): String; Begin If (digit < -9) Then … Else If (digit < 0) Then … Else If (digit < 10) Then … Else … End;
Тоже 4 ветви Function CalcFunc(a, b: Byte): Integer; Begin If (a > 0) Then begin if (b > 0) Then …. else …. end else begin if (b > 0) Then …. else …. end; End;
Запуск юнит-тестов При использовании достаточно сложных подходов можно запускать тесты отдельно от программы Надо понять принцип: – Поэтому можем запускать, когда в командной строке при запуске программы указан ключ «- tests»
Пример If (ParamCount = 1) And (ParamStr(1) = - tests) Then begin TestGetDigitHumanString(); … end;
Важность Считается, что без автотестирования / самотестирования большой проект не сделать.
Вопросы