Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kurs_tips.doc
Скачиваний:
0
Добавлен:
15.12.2019
Размер:
3.17 Mб
Скачать

Повышение надежности системы

  1. Защитное программирование. В начале каждой процедуры помещается блок проверки входных данных на правильность и осмысленность. Каждая компонента должна предполагать, что все другие содержат ошибки. Все получаемые данные считаются ошибочными, пока не будет доказано обратное. Самая надежная величина, не требующая никакой проверки, может быть ошибочна. НО: если выполнять все мыслимые проверки, то проверочная часть программы может стать слишком сложной и следовательно в ней самой могут быть ошибки.

  2. Избыточность позволяет по части данных проверить остальную часть. Если избыточности нет, то ее можно ввести.

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

Основная причина ошибок -- сложность.

Мерой сложности объекта является количество интеллектуальных усилий, необходимых для понимания этого объекта. Ясно, что для каждого человека эта величина разная. Что сложно для одного человека, может быть просто для другого.

Сложность системы зависит от количества и качества связей между ее компонентами и самих компонет.

Простая система

Сложная система

Чтобы уменьшить сложность объекта, вводятся уровни абстракции, иерархическая структура или модульность. В последнем случае проблема (программа) разбивается на части (модули) до тех пор, пока их не удастся решить (запрограммировать).

Тестирование

Тестирование - это поиск ошибок в информационной системе.

Ошибка - это несоответствие того, что есть, тому, что должно быть.

Надежность - это вероятность безотказной работы в течение некоторого периода времени, рассчитанная с учетом стоимости каждого отказа.

Принципы тестирования

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

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

Удачным считается тест, который обнаружил ошибку. Если ни одна ошибка не была обнаружена, то тест считается неудачным.

    • Ошибки имеют свойство группироваться. Если в какой-то части программы найдено много ошибок, то там еще много осталось.

    • Никогда не изменяйте программу, чтобы облегчить ее тестирование.

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

    • Разработка тестов -- творческий процесс, который требует, в некотором роде, разрушительного склада ума.

    • Хорош тот тест, для которого высока вероятность обнаружить ошибку.

    • Необходимо проверять не только, делает ли программа то, для чего она предназначена, но и не делает ли она то, что не должна делать.

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

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

    • Избыток комментариев также усложняет поиск ошибок. Комментарии говорят, что делает программа по мнению автора, а не что она делает на самом деле.

После тестирования нельзя гарантировать отсутствие ошибок, можно лишь говорить о некотором уровне уверенности в правильности работы системы.

Тест - это совокупность входных данных и/или действий пользователя с указанием ожидаемых результатов и/или ответных действий программы.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]