пятница, 18 июня 2010 г.

Классификация нестандартных ситуаций

1. Является ли ситуация допустимой?

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

Пример, в нормальных условиях следующее предположение верно:
assert( 2+2 == 4 );

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

2. Возможен ли преодолеть нестандартную ситуацию?

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

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

Ещё пример, если на уровне операций с файлами программа обнаружила непреодолимую ошибку, то на другом уровне программа может отключить функцию работы с файлами и продолжить работу.

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

Комментариев нет: