Уважаемый Кирилл! Благодарю Вас за конкретные предложения по устранению ряда ошибок (пока Вы единственный из участников обсуждения, кто это сделал).
Буду рад, если Вам поможет (для развития методики по сокращению ошибок программирования) предложение ввести понятие "уровни ошибок". Я приведу примеры, а потом поясню зачем.
4 уровня ошибок (не настаиваю именно на таком разделении, но мне важен пример).
Уровень 1. Ошибки, причиной которых является простая неаккуратность, неорганизованность...
Примеров множество в любой отрасли.
Уровень 2. Например, такие ошибки, которые описаны в Ваших статьях:
http://www.homepc.ru/doityourself/22457/
http://www.homepc.ru/doityourself/22598/
http://www.homepc.ru/doityourself/22697/
http://www.homepc.ru/school/22854/
Ваш Пример. "Ступенчатый метод" (или слишком длинная цепочка делегирования)
Аналоги за пределами программирования: в любой технологии слишком длинная цепочка делегирований приводит к ошибкам. Так многие инженеры, уже построив рабочий техпроцесс, затем пытаются провести его "свертывание" (то есть, создать модель, когда те же функции выполняются меньшим числом операций). Причем обычно рекомендуется это делать независимо от того обнаружены ли уже ошибки в базовом процессе или нет, ибо при длинной технологической цепочке они всегда вероятны.
Ваш Пример. Перенос части кода из одного фрагмента в другой. Создание нового документа/кода на основе копии старого.
Аналоги за пределами программирования. Их множество. Вот простейший: делопроизводитель создает договор на основе другого договора и создает ошибки. Затем данные ошибки тиражируются, если на основании этих документов, создаются вторичные документы. Скажем в договоре в силу подобного "переноса" образовалась ошибка в реквизитах, как следствие: создали платежку с неверными реквизитами и отправили деньги на другой счет. И т.п.
Ваш Пример. Вынесение типового кода в библиотеку и последующие перенос в др. надсистему без учета ее контекста.
Аналоги за пределами программирования: один и тот же активный металл, соединившись с кислородом даст мел, а с галогеном - соль. Слово не равно "сумме букв", а текст "сумме слов".
Еще пример. Здесь на Форуме Георгий Соколов цитировал своего преподавателя по мат. лингвистике профессора Тузова: "В русском языке "разбить" можно: сквер, палатку, вазу и морду".
Любое "понятие", "вещество", "типовой код" и т.д. при смене контекста может изменить не только свой смысл, но и свою функцию, состояние, свойства и т.д.
Ваш Пример. Программист выносит код в библиотеку, учитывает контекст. Но, поскольку разных контекстов в большой программе много, они добавляют свою разную специфику. И поэтому в типовой поначалу код, надо вносить множество всякий раз отличных друг от друга изменений. А за всеми все равно не уследишь. ("Разбегающаяся специфика").
Аналоги за пределами программирования тоже очевидны: любая типовая деталь, выполняющая одну и ту же функцию, но в разных условиях, будет выходить из строя в разное время и по разному.
Уровень 3. Ошибки архитектуры (т.е., заложенные при проектировании) и/или неучет технологии
Например,
3.1. Просто нерациональность архитектуры
3.2. Неучет масштаба проекта при проектировании. Или на малом числе операций, записей в базе и т.д. все работает нормально, а на большом - нет.
3.3. Неучет "возрастания разнородности" многочисленных объектов, запросов, взаимодействий при увеличении проекта.
3.4. То же "в обратную сторону" (на малом проекте и мощной машине, на котором он создавался - все ОК), а при росте проекта память расходуется избыточно.
3.5. ..... и т.д. ....
3.N. Иное
Уровень 4. Ошибки, возникающие из-за нерешенности действительно серьезных, многофакторных, масштабных задач; задач, содержащих противоречия, с которыми еще не справились в целом по отрасли (то есть, те случаи, на которые ссылаются участники обсуждения, защищая тезис о невыполнимости миссии "писать без ошибок").
Скорее всего, говоря о 4-м уровне, мы, в ряде случаев, уже должны не использовать слово "ошибка", а должны использовать слово "задача".
----------------------------------------------------
Вероятно, можно исправить/изменить предложенную модель (скорее всего, это и надо сделать), а также привести и другие примеры ошибок каждого уровня. Именно, на предложенной схеме я НЕ настаиваю.
Более важны:
А. Само разделение всех разнообразных ошибок по разным "весовым" качественным уровням.
В. Учет того обстоятельства, что (предположительно) профилактические средства от ошибок на каждом уровни будут свои.
И еще. Поскольку я уже без малого 10 лет и автор (не софт-части), и соавтор, и руководитель, и инвестор ряда проектов, в том числе программных (в том числе, этого сайта и других), стараюсь для целей менеджмента документировать программные ошибки "по всему массиву работ". Кроме того, схожую информацию получаю от ряда своих Клиентов и партнеров.
Эта статистика за годы работы (подчеркну с разными проектами, и с разными программистами) свидетельствует: не менее 80% всех ошибок - это ошибки первого и второго уровней. Ошибки третьего уровня составляют не более 20%, а уж ошибки/задачи 4-го уровня - это вообще "штучный товар". (Даже за корректную формулировку подобных сверхзадач (не то, что за их решение) у нас можно получить премию).
И в таком контексте качественно меняется смысл разговора про выполнимость или невыполнимость миссии "писать без ошибок".
Аналогия за пределами программирования:
"В середине XIX века в Европе при родах от родильной лихорадки умирало не менее 20% рожениц. (А в иных клиниках эта цифра доходила до 50%). К сожалению, большинство врачей считало это вполне нормальным явлением. По их мнению, женщины погибали от «атмосферно-космической» эпидемии, вызываемой невидимыми «миазмами», борьба с которыми совершенно безнадежна. Разумеется, не было недостатка в разговорах о до конца непостижимой сложности организма и многофакторности, которую
умом не охватить и т.д., и т.п.".
Но однажды, не отрицая "сложности и многофакторности", венский врач И.Ф.Земмельвейс предложил всем врачам, осматривавшим беременных, принимавшим роды и делавшим гинекологические операции... мыть руки и не просто водой с мылом, но еще и дезинфицировать их хлорной водой.
В знак протеста "обиженные" врачи упекли Земмельвейса в сумасшедший дом.
Однако, в тех клиниках, где это стали делать смертность действительно упала (с 20-ти до 2-х %) и впоследствие этот метод стал общепринятым и, как мы знаем, не только в роддоме.
Еще раз позвольте поблагодарить Вас полезную информацию.
С Уважением,