Тестирование в информатике
Тести́рование, в информатике – деятельность в рамках разработки и развития программно-аппаратной системы (или отдельно программного обеспечения), при которой проверяется соответствие реального поведения системы требованиям к ней на выбранном определённым образом наборе ситуаций.
В рамках разработки и сопровождения систем выделяют специфические виды деятельности, также обычно называемые видами тестирования, но не укладывающиеся в это определение и выполняемые по другим принципам (например, тестирование удобства использования).
Ситуации, в которых выполняются проверки в рамках тестирования, называются тестовыми ситуациями (англ. test situation, иногда test purpose). Тестовые ситуации могут быть относительно простыми: вызов определённой процедуры, обращение к методу или функции с некоторыми значениями параметров [в таком контексте эти значения называются тестовыми данными (англ. test data)] или посылка определённого сообщения системе с некоторыми значениями атрибутов этого сообщения (тестовые данные здесь – значения атрибутов). Чаще используются тестовые ситуации, включающие, помимо вызываемого метода и значений его параметров, ещё и состояние системы, в котором этот вызов должен произойти. Для приведения системы в нужное состояние может потребоваться вызвать несколько различных методов с определёнными аргументами в нужной последовательности. Такая последовательность действий, вызовов или отправленных сообщений называется тестовой последовательностью (англ. test sequence). Более сложно устроенные ситуации могут включать частично упорядоченные последовательности обращений к различным асинхронно взаимодействующим компонентам системы, а также установку определённого состояния окружения, от которого тоже может зависеть поведение проверяемой системы.
Тестом (англ. test) называется описание тестовой ситуации в виде (частично упорядоченной) последовательности выполняемых действий при взаимодействии с тестируемой системой вместе с проверками, которые должны быть выполнены в ней (возможно, в нескольких местах) для контроля соблюдения требований. Множество тестов может быть объединено в тестовый набор (англ. test suite). Задачи такого объединения могут варьироваться в зависимости от потребностей разработчиков и используемого процесса разработки и развития системы: могут создаваться тестовые наборы для проверки отдельных свойств тестируемой системы (надёжности, переносимости, производительности и пр.), могут быть выделены тестовые наборы для проведения регулярных проверок при каждой сборке системы или при выпуске очередной её версии, могут быть наборы для проверки отдельных важных функций (англ. features) или для тестирования отдельных компонентов системы. Для организации тестовых наборов используются специфические проектные решения и образцы.
Тестирование – один из наиболее широко применяемых методов контроля качества программно-аппаратных систем, разновидность верификации и динамического анализа.
Основной целью тестирования является оценка качества тестируемой системы. При этом, чтобы эта оценка была достоверной, необходимо, чтобы используемый при тестировании набор ситуаций, несмотря на свою ограниченность, как можно полнее/точнее представлял все возможные ситуации при работе системы. Представительность набора ситуаций оценивается при помощи критерия полноты тестирования (англ. test adequacy criterion) или критерия тестового покрытия (англ. test coverage criterion).
При тестировании и разработке тестов, помимо основной цели, могут достигаться и другие, основные из которых – выявление ошибок (нарушений требований) в работе тестируемой системы и контроль развития системы за счёт создания тестовых наборов, которые служат инструментами контроля её качества, хорошо подобранными именно к данной системе. Сопровождение достаточно полного набора тестов в соответствии с изменениями кода тестируемой системы и требований к ней позволяет аккуратно отслеживать изменение качества системы в её развитии.
Поскольку тестирование применяется для решения различных задач в процессе разработки, имеется достаточно много различных видов тестирования.
Тестирование начало использоваться в рамках разработки почти сразу после возникновения первых активно используемых программ и аппаратных систем (схем и устройств). До начала 1980-х гг. тестирование считалось частью отладки и лишь после работ Г. Дж. Майерса (Гленфорд Дж. Майерс, 1980) стало выделяться в отдельный вид деятельности. Во многих организациях и в ряде литературных источников тестирование доныне не отделяется чётко от других видов контроля качества программно-аппаратных систем, в этом случае тестированием называют практически любые действия по верификации и иногда валидации таких систем.
См. также Виды тестирования в информатике.