создание программного обеспечения является таким же важным делом, как проектирование самой машины и ее компонетов.
Существуют два подхода, позволяющих повысить надежность программного обеспечения. Один из подходов направлен на то, чтобы на этапе программирования не допустить появления ошибок. Если с самого начала программа составлена без ошибок, то в дальнейшем проблемы возникать не будут.
Впервые эти соображения изложил Дейкстра в 1969 г. на технической конференции НАТО по программному обеспечению. Оно базируется на следующем убеждении. Проверка программы может свидетельствовать о том, что в ней не существует ошибок. Однако это не может служить доказательством того, что ошибок фактически нет. С помощью структурной лингвистики можно конкретизировать это положение. Для этого необходимо соответствующим образом организовать прохождение программы, а также разработать целесообразную структуру переменных. При этом удается в более простой форме выразить то, что должно быть запрограммировано. К настоящему времени издано много книг, в которых рассматрива-
ются проблемы структуризации программирования.
Однако накопленный опыт не свидетельствует о том, что в программах совершенно отсутствуют ошибки, даже если исходить из то-
го, что они написаны на языке структурного и объектно-ориенти-
рованного программирования. В таком случае если на этапе составления программы не удается полностью исключить ошибки, то необходимо использовать проверки. Вэтом состоитсуть второго подхода.
Проверка программы (программный тест) представляет собой понятие, которое существенно отличается от понятия отладки. Задача теста состоит в том, чтобы устранить ошибки (неполадки), содержащиеся внутри программы. При отладке с программой непосредственно работает тот, кто ее разрабатывал. Тестирование же является процессом, который объективно и систематически выполняется другими сотрудниками. При этом обнаруженные на месте ошибки не исправляются, а возвращаются обратно в программу.
Рассмотрим некоторые свойства, которыми должен обладать хороший тест. Первым таким свойством является детективность. Вполне естественно, что тестирование должно правильно обнаруживать ошибки, которые могут существовать в программе. Вторым свойством является покрывающая способность, характеризуемая количеством воз-