Валерий Лаптев писал(а):
Возникла мысль, и я ее думаю: повышение надежности разрабатываемых систем, в первую очередь, упирается в надежность инструмента, на котором пишется система, и в специальную организацию кода. Например, локализация аварийных ситуаций только тем модулем, где возникла, и разруливание этой ситуации там же на месте.
Не всегда. Иногда должна вмешаться "центральная нервная система, эндокринная система или имунная система", а иногда поможет только напарник или "реаниматолог", то есть модуль-контролер. Мне кажется, что аналогии с живыми организмами, чья отказоустойчивость изумляет, здесь очень уместна. Вообще же отказоустойчивость - это целая наука:
http://en.wikipedia.org/wiki/Fault-tolerant_systemВалерий Лаптев писал(а):
Надежность инструмента можно понимать в двух ипостасях:
1. инструмент диктует жесткую дисциплину организации кода.
Это идеал!
Валерий Лаптев писал(а):
2. инструмент выполняет тотальные проверки всего и при компиляции и при выполнении.
И идет эффективность лесом.
Ы?
При помодульной отладке время компиляции никого уже особо не волнует.
Что касается проверок при выполнении, то с этим придется смириться. Программист ОБЯЗАН предусмотреть и, если необходимо, указать действия системы во всех исключительных ситуациях, возникающих при ошибках времени исполнения (возможный выход вводимой переменной за пределы допустимого диапазона значений, недопустимое отклонение расчетной величины от контрольного значения, противоречивые данные, отсутствие необходимых данных и т.п.), иначе компилятор не должен принимать исходный код. Для этого инструментарий должен показать программисту все возможные места возникновения ошибок времени исполнения. Кроме того, инструментарий должен содержать механизмы разруливания исключительных ситуаций "по умолчанию" и, может быть, какие-то сценарии, из которых программист выберет один. Критичная система может содержать механизмы самообучения в процессе тестирования и генерить тестовые данные, но вряд ли это удастся как-то встроить в инструментарий.
В то же время, проверки времени исполнения должны осуществляться как параллельные процессы, чтобы не тормозить основной алгоритм. Тогда все забудут даже слово такое - "эффективность".