В статье перечислены виды наиболее часто встречаемых ошибок программного обеспечения (ПО) и предложен один из путей систематизированного их выявления при тестировании функциональных возможностей серверной операционной системы (OC) z/OS.
С точки зрения тестирования ПО можно выделить следующие два класса часто встречаемых ошибок:
Приведенная классификация носит условный характер, так как многие из выявляемых ошибок носят комплексный характер, тем не менее, при проведении функционального тестирования, как тестирования, направленного на проверку корректности функционирования системы на основании спецификации, логические ошибки обнаруживаются наиболее часто. Большая часть ошибок, связанная с производительностью системы, выявляется при проведении нагрузочного и стресс тестирования.
Единственным способом полного обнаружения логических (и большинства ошибок производительности) является исчерпывающее тестирование (exhaustive testing). Данный способ позволяет путём перебора всех возможных комбинаций входных и выходных воздействий исследовать поведение программы. Но на практике даже при тестировании функциональных возможностей мобильных ОС это является непосильной задачей, ввиду невозможности (высокой трудоёмкости) перебора сценариев, которые покрывали бы все возможные варианты поведения ОС. В случае тестирования работы ОС для высокопроизводительных серверов сложность данной задачи многократно возрастает.
Одним из путей решения проблемы поиска ошибок является использование комбинаторного подхода. Согласно эмпирическим результатам Национального Института стандартов и технологии США SP 800-142, большинство ошибок возникают в результате комбинации от 2-х до 6-и параметров [1]. Число тестов при взаимодействии t факторов тестирования для n параметров, которые принимают ϑ значений, оценивается формулой
vtlogn.
Общее число тестов при полном переборе оценивается как
vn.
При t << n будет верно
vn >> vtlogn.
Таким образом, количество тестовых сценариев будет значительно снижено.
Данный подход возможно реализовать на примере генерации тестов для ОС z/OS, серверной ОС для мейнфреймов. Выполнение любой единицы работы в данной ОС осуществляется через составление специальным образом записанного и переданного системе текста-задания. Задание составляется на языке управления заданиями JCL (job control language). Данный язык имеет чётко определённую структуру, которая описывает входные и выходные данные. Общая структура задания приведена ниже:
// JOB... | ← | Определение параметров задания: класс, приоритет, время выполнения |
// EXEC | ← | Указание программы или процедуры, которую необходимо выполнить |
// DD D11 // DD D12 // DD ... | ← | Определение данных и устройств, используемых в задании, входных и выходных наборов данных |
... | ← | Поле для ввода входного потока данных |
↓ | ||
// EXEC. | ||
// DD D21 // DD D22 // DD ... | ||
... |
Входной поток данных может содержать исходный код сценариев, который написан на языке HLASM (High Level Assembler), а также на языках высокого уровня, таких, как С, С++, COBOL, PL/1, Fortran или Java. Более подробную информацию о JCl можно найти в [2].
В силу чёткой структурированности заданий при передаче их на выполнение системы, возможно, осуществить автоматизированную генерацию тестов с использованием комбинаторного подхода. Также возможно осуществить разбор уже существующих тестовых программ на наличие упущенных комбинаций.
В статье рассмотрен один из способов улучшения качества функционального тестирования с использованием комбинаторного подхода. В дальнейшей работе планируется его непосредственная реализация, которая учитывала бы наиболее часто встречаемые ошибки при составлении тестовых сценариев.