В учебных программах по дисциплине "Обеспечение качества и тестирование программ" есть вопрос "Понятие тестирования программного обеспечения. Основные определения". В программе обучения базового уровня International Software Testing Qualifications Board "Сертифицированный тестировщик" указано на необходимость "Вспомнить общие цели тестирования", "Предоставить примеры, отражающие цели тестирования на различных стадиях жизненного цикла программного обеспечения" и "Отличать тестирование от отладки".
Составил подборку определений термина "тестирование программного обеспечения" из четырнадцати источников учебной и научной литературы, стандартов программного обеспечения. Да прибудет с нами фундаментальное понимание темы.
"Искусство тестирования программ", Глендфорд Майерс. Москва, Финансы и статистика, 1982 год. 17-18 страницы:
Поначалу может показаться тривиальным жизненно важный вопрос определения термина "тестирование". Необходимость обсуждения этого термина связана с тем, что большинство специалистов используют его неверно, а это в свою очередь приводит к плохому тестированию. Таковы, например, следующие определения: "Тестирование представляет собой процесс, демонстрирующий отсутствие ошибок в программе", "Цель тестирования - показать, что программа корректно исполняет предусмотренные функции", "Тестирование - это процесс, позволяющий убедиться в том, что программа выполняет свое назначение".
Эти определения описывают нечто //противоположное// тому, что следует понимать под тестированием, поэтому они неверны...
Программа тестируется не для того, чтобы показать, что она работает, а скорее наоборот - тестирование начинается с предположения, что в ней есть ошибки (это предположение справедливо практически для любой программы), а затем уже обнаруживается их максимально возможное число. Таким образом, сформулируем наиболее приемлемое определение: "Тестирование - это процесс исполнения программы с целью обнаружения ошибок".
Стандартный глоссарий терминологии по программированию Института инженеров электротехники и электроники, Institute of Electrical and Electronics Engineers Std 610.12-1990, IEEE Standard Glossary of Software Engineering Technology. 76 страница:
testing. (1) The process of operating a system or component under specified conditions, observing or recording the results, and making an evaluation of some aspect of the system or component.
(2) (IEEE Std 829-1983 [51) The process of analyzing a software item to detect the differences between existing and required conditions (that is, bugs) and to evaluate the features of the software items.
See also: acceptance testing; benchmark; checkout; component testing; development testing; dynamic analysis; formal testing; functional testing; informal testing; integration testing; interface testing; loopback testing; mutation testing; operational testing; performance testing; qualification testing; regression testing; stress testing; structural testing; system testing; unit testing.
"Software Considerations in Airborne Systems and Equipment Certification, Requirements and Technical Concepts for Aviation", DO-178B 1992. 85 страница,
Testing - The process of exercising a system or system component to verify that it satisfies specified requirements and to detect errors.
"Glossary of terms used in software testing", Version 6.3 produced by the British Computer Society Specialist, Interest Group in Software Testing (BCS SIGIST), BS 7925-1:1998:
Testing: The process of exercising software to verify that it satisfies specified requirements and to detect errors. After [do178b]
"Информационная технология. Пакеты программ. Требования к качеству и тестирование", Государственный стандарт Российской Федерации, Международная организация по стандартизации, Международная электротехническая комиссия 12119-2000:
Тестирование (test): Техническая операция, которая заключается в определении одной или нескольких характеристик данного продукта, процесса или услуги по соответствующей процедуре (Руководство ИСО/МЭК 2-91, Общие термины и определения в области стандартизации и смежных видов деятельности).
«Тестирование программного обеспечения. Фундаментальные концепции менеджмента бизнес-приложений», Сэм Канер, Джек Фолк и Енг Кек Нгуен, Москва, ДиаСофт, 2001, 39-49 страницы:
Тестирование — это процесс поиска как можно большего количества проблем в программе с целью исправления и улучшения качества программного продукта.
«Основы программной инженерии (по SWEBOK). Программная инженерия. Тестирование программного обеспечения» на базе IEEE Guide to SWEBOK® 2004, Сергей Орлик, 02-03 страницы:
Тестирование (software testing) - это деятельность, выполняемая для оценки и улучшения качества программного обеспечения, которая базируется на обнаружении дефектов и проблем в программных системах и состоит из динамической верификации поведения программ на конечном (ограниченном) наборе тестов (set of test cases), выбранных соответствующим образом из обычно выполняемых действий прикладной области и обеспечивающих проверку соответствия ожидаемому поведению системы.
В данном определении тестирования выделены слова, определяющие основные вопросы, которым адресуется данная область знаний:
Динамичность (dynamic). Термин подразумевает тестирование, как деятельность по выполнению тестируемой программы с заданными входными данными. При этом, величины, задаваемые на вход тестируемому программному обеспечению, не всегда достаточны для определения теста. Сложность и недетерминированность систем приводит к тому, что система может по разному реагировать на одни и те же входные параметры, в зависимости от состояния системы. В данной области знаний термин “вход” (input) будет использоваться в рамках соглашения о том, что вход может также специфицировать состояние системы, в тех случаях, когда это необходимо. Кроме динамических техник проверки качества, то есть тестирования, существуют также и статические техники, рассматриваемые в области знаний “Software Quality”.
Конечность (ограниченность, finite): даже для простых программ теоретически возможно столь большое количество тестовых сценариев, что исчерпывающее тестирование может занять многие месяцы и даже годы. Именно поэтому, с практической точки зрения, всестороннее тестирование считается бесконечным. Тестирование всегда предполагает компромисс между ограниченными ресурсами и заданными сроками, с одной стороны, и практически неограниченными требованиями по тестированию, с другой.
Выбор (selection). Инженеры по программному обеспечению должны обладать представлением о том, что различные критерии выбора тестов могут давать разные результаты, с точки зрения эффективности тестирования. Определение подходящего набора тестов для заданных условий является очень сложной проблемой. Обычно, для выбора соответствующих тестов совместно применяют техники анализа рисков, анализ требований и соответствующую экспертизу в области тестирования и заданной прикладной области.
Ожидаемое поведение (expected behaviour). Хотя это не всегда легко, все же необходимо решить, какое наблюдаемое поведение программы будет приемлемо, а какое – нет. В противном случае, усилия по тестированию – бесполезны. Наблюдаемое поведение может рассматриваться в контексте пользовательских ожиданий (подразумевая “тестирования для проверки” - testing for validation), спецификации (“тестирование для аттестации” - testing for verification) или, наконец, в контексте предсказанного поведения на основе неявных требований или обоснованных ожиданий.
«Ключевые процессы тестирования. Планирование, подготовка, проведение, совершенствование», Рекс Блэк, Москва, Лори, 2006, 536/545 страница:
Тестирование (Testing). Функционально это процесс оценки качества системы, предоставление услуг и информации, позволяющий компании управлять рисками качества системы. Организационно это группа специалистов, предоставляющая данные услуги и информационные продукты для проекта, в котором она занята.
«Верификация программного обеспечения», Сергей Владимирович Синицын, Никита Юрьевич Налютин. МИФИ, Курс лекций, 2006, 19-20 страницы:
Тестирование программного обеспечения – вид деятельности в процессе разработки, связанный с выполнением процедур, направленных на обнаружение (доказательство наличия) ошибок (несоответствий, неполноты, двусмысленностей и т.д.) в текущем определении разрабатываемой программной системы. Процесс тестирования относится в первую очередь к проверке корректности программной реализации системы, соответствия реализации требованиям, т.е. тестирование – это управляемое выполнение программы с целью обнаружения несоответствий ее поведения и требований.
Верификация программного обеспечения – более общее понятие, чем тестирование. Целью верификации является достижение гарантии того, что верифицируемый объект (требования или программный код) соответствует требованиям, реализован без непредусмотренных функций и удовлетворяет проектным спецификациям и стандартам. Процесс верификации включает в себя инспекции, тестирование кода, анализ результатов тестирования, формирование и анализ отчетов о проблемах. Таким образом, принято считать, что процесс тестирования является составной частью процесса верификации, такое же допущение сделано и в данном учебном курсе.
Валидация программной системы – процесс, целью которого является доказательство того, что в результате разработки системы мы достигли тех целей, которые планировали достичь благодаря ее использованию. Иными словами, валидация – это проверка соответствия системы ожиданиям заказчика. Вопросы, связанные с валидацией выходят за рамки данного учебного курса и представляют собой отдельную интересную тему для изучения.
Если посмотреть на эти три процесса с точки зрения вопроса, на который они дают ответ, то тестирование отвечает на вопрос «Как это сделано?» или «Соответствует ли поведение разработанной программы требованиям?», верификация – «Что сделано?» или «Соответствует ли разработанная система требованиям?», а валидация – «Сделано ли то, что нужно?» или «Соответствует ли разработанная система ожиданиям заказчика?».
"Основы тестирования программного обеспечения, разработанного на C#. Учебное пособие", Всеволод Котляров и Татьяна Коликова, 2004, 9, 29 страницы:
Тестирование - это выполнение приложения на некотором множестве исходных данных и сверке получаемых результатов с заранее известными (эталонными) с целью установить соответствие различных свойств и характеристик приложения заказанным свойствам.
Тестирование – это процесс выполнения программного обеспечения системы или компонента в условиях анализа или записи получаемых результатов с целью проверки (оценки) некоторых свойств тестируемого объекта. Процесс анализа пункта требований к программному обеспечению с целью фиксации различий между существующим состоянием программного обеспечения и требуемым (что свидетельствует о проявлении ошибки) при экспериментальной проверке соответствующего пункта требований. Institute of Electrical and Electronics Engineers Std 610.12-1990 - IEEE Standard Glossary of Software Engineering Technology.
Тестирование - это контролируемое выполнение программы на конечном множестве тестовых данных и анализ результатов этого выполнения для поиска ошибок. American national standards institute, Institute of Electrical and Electronics Engineers Std 829-1983 - IEEE Standard for Software Test Documentation.
«Основы инженерии качества программных систем», Филипп Андон, Галина Коваль, Татьяна Коротун, Екатерина Лаврищева, В. Суслов, Академпериодика, 2007. 300 страница:
Тестирование – неотъемлемая составляющая процесса программной инженерии, один из методов дальнейшего улучшения качества разработанного программного обеспечения системы посредством выявления оставшихся дефектов, не обнаруженных ранее всеми другими видами проверок.
Термин testing (тестирование) широко используется в литературе, но определяется по-разному.
Стандарт IEEE Std. 610.12:1990. IEEE Standard Glossary of Software Engineering Terminology определяет термин testing в самом его широком смысле как любое действие по анализу ПО (включая методы как динамической, так и статической проверки).
Г. Майерс определяет этот термин в самом узком смысле: «тестирование – процесс выполнения программы (или ее части) с целью обнаружения ошибок… Отладка (debugging) – диагностирование точной природы известных ошибок и их исправление».
Слово testing может быть переведено не только как тестирование, но и как испытания (как это сделано в стандартах ДСТУ 2844-94 "Програмні засоби ЕОМ. Забезпечення якості. Терміни та визначення", ДСТУ 2853-94" Програмні засоби ЕОМ. Підготовлення і проведення випробувань"). Однако, понятие «испытания» нам привычнее связывать с завершающими стадиями жизненного цикла, на которых выполняется не поиск ошибок, а подтверждение пригодности разработанного программного продукта. В данной главе тестирование рассматривается как процесс выполнения программной системы (или элементов программной системы) с целью проверки ее соответствия установленным требованиям и обнаружения дефектов.
«Тестирование Дот Ком, или Пособие по жестокому обращению с багами в интернет-стартапах», Роман Савин, Москва: Дело, 2007, 33-34, 63, 94 страницы:
Тестирование - это творческий процесс поиска багов, забота о качестве в виде обнаружения багов до того, как их найдут пользователи с целью обеспечения счастья пользователей и самосохранения любой интернет-компании.
«Сертифицированный тестировщик Программа обучения Базового уровня», версия 2011 (от 13 апреля 2011 года), International Software Testing Qualifications Board, Андрей Конушин (председатель), Александр Александров, Алексей Александров, Татьяна Смехнова, Елена Абрамова. 14-15/101 страница:
Общие цели тестирования:
- Обнаружение дефектов.
- Повышение уверенности в уровне качества.
- Предоставление информации для принятия решений.
- Предотвращение дефектов.
Цели тестирования на различных стадиях жизненного цикла программного обеспечения:
- Рецензирование документов (например, требований), идентификация и разрешение проблем также помогают предотвратить появление дефектов в коде.
- Цели процессов и действия, связанные с проектированием тестов на раннем этапе жизненного цикла программного обеспечения (например, при компонентном, интеграционном и системном тестировании), могут помочь предотвратить попадание дефектов в код.
- В тестировании на этапе разработки (таком, как компонентное, интеграционное и системное тестирование), основная цель может заключаться в том, чтобы вызвать как можно больше отказов, чтобы дефекты в программном обеспечении были идентифицированы и могли быть исправлены.
- В некоторых случаях основная цель тестирования может состоять в том, чтобы оценить качество программного обеспечения (без намерения исправлять дефекты) и дать информацию заинтересованным лицам о рисках выпуска системы в установленный срок.
- В приемочном тестировании основная цель может состоять в том, чтобы подтвердить, что система работает, как ожидалось и повысить уверенность в том, что она удовлетворяет требованиям.
- Тестирование в период сопровождения в основном заключается в проверке отсутствия новых дефектов, которые могли попасть во время разработки изменений.
- Во время эксплуатационного тестирования основная цель может заключаться в том, чтобы оценить системные характеристики, такие как надежность или доступность.
Стоит различать отладку и тестирование. Динамическое тестирование может выявить отказы, вызванные дефектами. Отладка – это действия разработчиков, которые находят, анализируют и устраняют причину отказа. Повторное тестирование гарантирует, что изменение действительно предотвращает отказ. Ответственность за тестирование обычно несут тестировщики, а за отладку - разработчики.
"Стандартный глоссарий терминов, используемых в тестировании программного обеспечения", версия 2.3 (от 9 июля 2014 года), International Software Testing Qualifications Board, ред. пер. Александр Александров, 54 страница:
Тестирование (testing): Процесс, содержащий в себе все активности жизненного цикла, как динамические, так и статические, касающиеся планирования, подготовки и оценки программного продукта и связанных с этим результатов работ с целью определить, что они соответствуют описанным требованиям, показать, что они подходят для заявленных целей и для определения дефектов.
Эта заметка-конспект является ответом на экзаменационный вопрос "Понятие тестирования ПО. Основные определения" по учебной дисциплине "Обеспечение качества и тестирование программ" и вопросы программы обучения базового уровня International Software Testing Qualifications Board "Сертифицированный тестировщик". Полный перечень вопросов привел в заметке Учебные программы, экзаменационные вопросы и литература по обеспечению качества и тестированию программ.
07.05.2017