Мир уже привык к техногенным катастрофам, причем все чаще среди их причин называются сегодня сбои компьютерных систем. Потеря в 1996 году космической станции Ariane V стала одной из первых катастроф, которая хотя и не повлекла за собой жертв, но заставила человечество задуматься над тем, что программные ошибки становятся головной болью уже не только ИТ-сообщества, а всех жителей Земли. Как следствие, сегодня стал чрезвычайно актуален поиск путей повышения качества программного обеспечения.
Среди составляющих решения проблемы минимизации ошибок ИТ-гуру, выступающие на страницах данного выпуска журнала, посвященного технологиям программирования, называют, в частности, верифицирующий компилятор и надежные программные компоненты. Сами по себе эти идеи не новы, однако часто оказывается, что допущенная программная ошибка носит чисто технический характер и коренится в некорректной практике работы. Роковую роль играет, например, отсутствие точных спецификаций и игнорирование практикующими программистами известных еще с 50-х годов формальных методов. Например, в духе языка Eiffel или Ада, явным образом установленные для компонента ограничения на входные и выходные параметры могут изначально предотвратить появление ошибок, способных привести к беспрецедентным материальным потерям или даже к смерти людей, как это случилось несколько лет назад с пациентами, проходившими обследование на одной из рентгеновских установок.
С другой стороны, кредит доверия портит отношения — применение имеющего длительную историю и зарекомендовавшего себя с положительной стороны компонента еще не гарантирует надежности программы. Повторно используемые модули могли изначально разрабатываться для другого контекста, а их спецификации могут не дать исчерпывающего отчета обо всех вариантах поведения. Возможно, выход заключается в изменении самой технологии разработки и применении совершенных методов тестирования. Однако не стоит забывать, что тестирование может лишь продемонстрировать наличие ошибок, но не дать гарантии их отсутствия, а инструменты, даже автоматические, не в состоянии помочь, если их используют неправильно.
Традиционные интегрированные среды разработки предоставляют сегодня отличные средства редактирования, компиляции, проектирования интерфейсов и отладки, однако за их пределами остаются вопросы комплексного управления жизненным циклом приложений, что, впрочем, вполне соответствует традиционной методологии последовательной разработки программ. Проект создания ПО предполагает цикличность и ему больше подходят итеративные методики, подразумевающие постоянное взаимодействие между разными функциональными группами в команде проекта и конечными пользователями, а также тесную взаимосвязь между разными этапами жизненного цикла приложения. Однако осознание этого не получает, к сожалению, надлежащего воплощения в виде менеджмента, способного координировать выполнение проекта на должном уровне. Разработка программно-аппаратных систем — инженерный процесс, требующий продуманной и поставленной технологии и опирающийся на исполнителей высокой квалификации. Между тем, сегодня на массовом рынке программных продуктов стандарты качества сознательно занижены и используются подходы, не позволяющие создавать надежных программ. Наблюдается повсеместное снижение образовательного ценза для программистов, а в результате разработчики больше увлекаются накаткой патчей, проявляя полное незнание методов, давно предложенных выдающимися специалистами в области технологий программирования.
Водопадная модель, модель итеративной и инкрементальной разработки, agile-методы — все это прекрасно, однако по-прежнему только в США обращается на 60 млрд. долл. ненадежного ПО — потребители вынуждены покупать заведомо бракованный товар. Известный афоризм: «Каждая сложная проблема имеет решение — простое, изящное и неправильное» лишний раз подтверждает мысль о том, что в программной инженерии до определенного момента могут доминировать упрощенные идеи и технологии, однако сегодня пришло время, когда взаимоотношения между программным обеспечением и обществом должны регламентироваться интегрально. Обществу давно пора задуматься над качеством ПО, а для этого необходима консолидация усилий всех заинтересованных сторон: государства, разработчиков ПО и научных организаций — каждый из этих субъектов в отдельности не сможет решить этой проблемы. Правительства проблем обычно не решают — они их финансируют, ученые все больше удаляются от запросов промышленности, которая, в свою очередь, озабочена решением сиюминутных коммерческих задач, постоянно балансируя между выгодой и надежностью, ориентируясь на мишени, а не на цели. Между тем порядок в обществе во все большей степени определяется состоянием дел в индустрии ПО.