Тестирование – важная часть процесса создания ПО, которая позволяет определить, достигли ли мы конечной точки нашей работы.
Методы тестирования
- ручное
- автоматическое
Ручное тестирование – естественный процесс, который органично связан с разработкой. Программисты выполняют его сотни раз, но для качественного ручного тестирования нужен отдельный человек, со свежим взглядом на жизнь и желанием “сломать” программу, подвергая её жестокому обращению: ввод некорректных данных, кликанье мышкой куда попало, запуск отчётов с немыслимыми параметрами и т.д.
Автоматическое тестирование – это процесс, который пытаются отложить до момента, когда без него не удаётся добиться требуемого качества программного продукта. К сожалению, к этому моменту стоимость внедрения систем автоматического тестирования может оказаться сравнима со стоимостью самого проекта. Чем дольше жизненный цикл проекта, чем больше людей вовлечено в него, тем раньше нужно внедрять систему автоматического тестирования. В идеале – в самом начале проекта, с первыми строками кода.
Виды тестирования:
- модульное
- функциональное
МОДУЛЬНОЕ ТЕСТИРОВАНИЕ
Хорошо подходит для библиотек процедур, невизуальных классов. Каждый тест отвечает на вопрос, работает ли определенный модуль в системе или нет.
Реализация
Для каждого тестируемого модуля необходимо создать ещё один модуль, содержащий тестовые задания. Этот модуль имеет:
- метод запуска подтестов
- метод протоколирования
Для запуска модульных тестов компилируется отдельная программа, ядро которой выполнят последовательный (иерархический) запуск тестовых модулей, ведёт протокол тестирования и отображение результатов в графическом виде.
Пример
// состояние теста
TTestState = ( tsUnknow, tsOK, tsFault, tsExecute );
// базовый элемент тест
TBaseTest = class
private
FState: TTestState; // текущее состояние
protected
// обновить индикатор состояния
procedure SetState(Value:TTestState); virtual;
// функционал теста
function ExecuteTest:TTestState; virtual; abstract;
// логирование
procedure AddToLog(value:string);
public
// строковый идентификатор
Name: string;
// название - отображается в дереве
Caption: string;
// описание теста
Description: string;
// связь с элементом структуры
Node: TTreeNode;
// текущее состояние
property State: TTestState read FState write SetState;
constructor Create;
// выполнение теста
procedure Execute; virtual;
end;
// группа тестов
TTestGroup = class(TBaseTest)
protected
procedure SetState(Value:TTestState); override;
public
procedure Execute; override;
end;
Code language: Delphi (delphi)
ФУНКЦИОНАЛЬНОЕ ТЕСТИРОВАНИЕ
Подходит для комплексного тестирования программы. Ориентировано на техническое задание (требования к программе): каждый тест отвечает на вопрос, работает ли определенный функционал в системе или нет.
Реализация
Хорошо зарекомендовал себя подход, при котором в тестируемую систему встраивается интерпретатор скрипта выполнения. Скрипт выполнения – запись последовательности действий пользователя и методов контроля их выполнения. Такой подход позволяет писать функциональные тесты без привязки к элементам графического интерфейса (расположение кнопок, пунктов меню), но подразумевает, что для тестирования GUI используются другие методики ( ручное тестирование или скрипты для кликанья мышкой / нажатия клавиш ).