Рефераты по БЖД

Моделирование аварийных ситуаций на опасных производственных объектах

Разработка программного обеспечения, в частности программного обеспечения больших размеров, представляет собой сложную и трудную задачу, которую можно решить различными методами.

Естественно, что большинство программных ошибок выявляются на стадии тестирования. Если программа должна быть выпущена для общего пользования, то число программных ошибок теоретически должно равняться нулю. Практически это не всегда можно осуществить для каждой программы, написанной и используемой на некоторой вычислительной установке, но при хорошем персонале программистов частота появления ошибок может быть сведена к уровню частоты появления ошибок в системном программном обеспечении.

Один из общих законов практического применения состоит в том, что ни одна программа не дает желаемых результатов при первой попытке трансляции и выполнения. Программист должен не только аккуратно писать эффективные программы, но и уметь находить в них ошибки. Большинство программистов расходуют на тестирование программ около половины своего рабочего времени, в то время как их обучение целиком ориентировано на выполнение другой половины работы. Причина заключается в том, что поиск ошибок считается чисто интуитивным процессом, которому нельзя обучить и которым программист может овладеть только на практике. Тем не менее, есть несколько правил отладки программ, которые могут быть успешно применены при создании программ.

Существуют два типа программных ошибок:

а) Синтаксические ошибки, которые являются нарушениями правил языка программирования, они обычно выявляются во время компиляции.

б) Семантические или логические ошибки, приводящие к некорректным вычислениям или ошибкам выполнения. Обнаруживаются они в основном при тестировании программы, то есть при выполнении ее тщательно подобранными проверочными данными, для которых известны результаты.

Анализ синтаксических ошибок

Синтаксические ошибки могут быть исключены сравнительно легко. Большинство из них программист может выявить, тщательно просматривая текст программы, выявляя орфографические ошибки, недопустимые форматы команд, неопределенные или неинициализированные переменные, недостающие операторы, ошибки в константах и пунктуации и так далее. Многие программисты опускают этот этап, целиком предоставляя егокомпилятору. Все компиляторы выявляют во время компиляции синтаксические ошибки, поскольку только синтаксически корректные операторы могут быть скомпилированы.

Такие синтаксические ошибки как пропущенная арифметическая операция в любом языке программирования высокого уровня, могут быть обнаружены непосредственно во время трансляции ошибочного оператора. Другие ошибки, например такие, как "метка", могут быть выявлены только после завершения компиляции. Независимо от того, когда обнаружена ошибка, все компиляторы выдают сообщение о ней, ссылаясь на ошибочный оператор.

Форма сообщения в компиляторах различны. Некоторые сообщения содержат только номер оператора и стандартный номер ошибки, по которому программист ищет ее в справочном руководстве. Другие компилятор выдают сообщения с подробным описанием ошибки с указанием ее места в операторе.

Даже при обнаружении синтаксической ошибки все компиляторы продолжают трансляцию для обнаружения дальнейших синтаксических ошибок. Некоторые компиляторы не пытаются вырабатывать объектную программу после обнаружения первого нетранслируемого оператора. Другие укорачивают или отрабатывают непонятные операторы, связывая с каждой ошибкой "вес", отражающий степень ее серьезности, и продолжают трансляцию и генерацию кода. Операционная система предоставляет возможность выполнить программу, если "вес" не превосходит уровня, заданного программистом с помощью управляющей карты. Подобные действия имеют смысл, так как часто можно извлечь полезную информацию из выполненной программы, даже если некоторые операторы ее отброшены или некорректны. Если бы ошибкой была неопределенная метка, она могла бы совсем не использоваться при выполнении программы с данным набором тестовых данных. Таким образом, программист может частично проверить даже синтаксически некорректную программу.

Лучшие компиляторы имеют возможности обхода синтаксических ошибок и пытаются скорректировать их. Естественно, сообщение об ошибке выдается и в том случае, когда оператор скорректирован компилятором. В этом случае генерируется объектный код, и программист имеет возможность решить, выполнять или не выполнять исходную программу.

Хорошие компиляторы выдают предупреждающие сообщения для синтаксически корректных, но, вероятно, логически ошибочных операторах.

Семантические (логические) ошибки

Целью тестирования модуля является обнаружение различий между логической схемой модуля и его интерфейсом и их внешними спецификациями.

Тестирование модуля может проводиться произвольным образом, когда лицо, выполняющее тестирование, пытается бессистемно выполнить работу, не имея определенного плана. Другой, научный подход, состоит в том, что специалист, тестирующий программу с осторожностью выбирает необходимую тестовую информацию, внимательно составляет набор вопросов для тестирования и тщательно проводит сам тест.

При использовании произвольного метода к тестированию модуля, практически невозможно избежать тестирования одного и того же участка по два и более раз, нельзя оценить, насколько всеобъемлющим является тестирование, а также определить момент его завершения.

Тестирование модуля включает в себя проведение определенного объема работ: проектирование набора тестовых комбинаций на основе анализа внешних спецификаций и программы модуля; написание программы тестирования и ее проверка и выполнение программы тестирования. Рассмотрим содержание этих работ.

Проектирование программы тестирования - сугубо творческий процесс, хотя и существует ряд правил, которые позволяют получить разумное множество проверочных тестов. Семантические ошибки обычно устраняются посредством выполнения программы с тщательно подобранными проверочными данными, для которых известен правильный ответ, полученный либо с помощью ручного вычисления, либо с помощью тщательно проверенных вычислений на машине.

Первым шагом семантической проверки является ручной прогон. Программист моделирует прохождение данных через его программу с помощью карандаша и листа бумаги. Если программа превышает минимальный уровень длины или сложности, (большинство программ его превышает) то такая проверка становится практически невозможной. Поэтому самое большее, что можно сделать на практике, проверить все возможности, все возможные типы или наиболее вероятные типы комбинаций данных выполняемых ветвей в программе. Если они дают правильные результаты, предполагается, что непроверенные комбинации тоже дали бы правильные результаты. Это не математическое допущение, а только предположение. Естественно, временное заключение, которое можно сделать, состоит в том, что тестирование больших программ с проверочными данными может очень эффективно использоваться для того, чтобы показать наличие ошибки, а не ее отсутствие.

Перейти на страницу номер:
 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15 
 16  17 


Другие рефераты:

© 2010-2024 рефераты по безопасности жизнедеятельности