С самого начала стремительного развития программному обеспечению, в определенном смысле, «сильно повезло с программами», теми алгоритмами, которые веками вырабатывались, «отлаживались» и «тестировались» в естественных науках (в математике, физике, астрономии, инженерии, военном деле, бухгалтерии и статистике и др.) и которые оказывались почти готовыми «программами», ибо были ориентированы не на изобретательность, а лишь на усердие исполнителя.
Для оценки ПО требуется принимать во внимание следующие факторы:
· тип ПО;
· размер и сложность программ;
· назначение программ;
· степень жесткости требований к надежности и сопровождаемости;
· применявшаяся технология;
· условия и организация труда;
· моральные и материальные стимулы;
· стремление к рекламе;
человеческий фактор (условия труда, подготовленность специалистов, способности, методы администрирования и способы организации коллективов, социально-бытовые условия, разнообразные стимулы, способы создания творческой и морально
· здоровой обстановки в коллективе, готовность идти на контакты и взаимопомощь, информированность и т.д.)
При анализе количественных оценок ПО нельзя смешивать, по крайней мере, три типа программ:
1) частные инженерные и исследовательские программы, создаваемые одним программистом или небольшим коллективом для решения, как правило, конкретных четко поставленных задач. Требования к ресурсам обычно невелики. Программы имеют короткий жизненный цикл, слабо документируются и почти не сопровождаются. Неудачи некритичны;
2) сложные программные системы организационного типа для решения общесистемных задач или широкого круга задач, поставленных обычно менее четко и неформально. Их разработка требует больших трудозатрат, неудача рассматривается как «провал». При успешной реализации затраты на сопровождение таких систем начинают со временем превосходить затраты на разработку. Требуется, чтобы документация «отлаживалась», своевременно корректировалась и отражала актуальное состояние таких программных систем;
3) сложные и ответственные программы, работающие в масштабе реального времени. Требования к их надежности исключительно высоки. Ошибки в таких программах могут обойтись неизмеримо дороже, чем любые денежные затраты. Достаточно представить себе катастрофические масштабы последствий возможных ошибок в ПО систем типа СОИ (стратегическая оборонная инициатива США).
Всеобщая компьютеризация, кроме выгод, влечет серьезные отрицательные последствия в связи с неизбежным снижением среднего математического (а может быть, и интеллектуального) уровня программиста, и, следовательно, с повышением вероятности принятия ответственных и далеко идущих решений на основании поспешно предложенных алгоритмов, на основании неверно интерпретированных расчетов по неотлаженным программам для решения некорректно поставленных задач.