Рассмотрим более подробно те понятия, которые помогут нам определиться с антикризисными методологиями разработки программных систем для корпораций. Понятие корпорация программной системы мы уже в основном рассмотрели. Напомню, что корпорация — это распределенная территориально, часто глобально, производственно-бытовая структура с общими бизнес-целями. Зачастую корпорации при разработке программных систем в нашем контексте — это не только производственно-бытовые структуры, но и структуры типа министерства, типа ВУЗов, которые имеют, тем не менее, общие бизнес-задачи и развитую филиальную сеть. Программная инженерия помогает нам решить вопросы создания корпоративных систем в оговоренные сроки и с должным качеством. Рассмотрим несколько определений программной инженерии тех самых классиков Соммервилля, Шаха и Липаева, которые упоминаются в литературе. И кризис — это дисбаланс ресурсов и ограничений. Посмотрим на слайд, на котором представлены три определения программной инженерии, и, я надеюсь, придем к тому, что задачи, которые решает программная инженерия, — это по сути дела многофакторная оптимизация. Итак, я зачитаю. Стивен Шах: "Программная инженерия — дисциплина, цель которой — производство систем, не содержащих ошибок, отвечающих требованиям заказчика, срокам и бюджету". Здесь в явном виде перечислены понятия требования, т. е. функционал и те атрибуты качества — надежность, расширяемость, масштабируемость, эргономика и так далее — которые изначально заложены заказчиком в техническое задание и согласованы с разработчиками. А также сроки и стоимость. Т. е. по сути дела наш проектный треугольник и атрибуты качества. Другое определение отечественного классика Липаева: "Программная инженерия — это комплекс задач, методов, средств и технологий создания, проектирования и реализации сложных, расширяемых, тиражируемых, высококачественных программных систем, возможно, содержащих базы данных". Здесь речь идет в дополнении к предыдущему определению о высокой сложности. Как мы уже говорили, сложность бывает управленческая и технологическая. Корпоративные системы отличаются более высокой управленческой сложностью. И в этой связи могут возникать кризисные явления. А в целом опять-таки речь идет о целом ряде параметров и отдельно следует отметить то, что программная инженерия представляет собой триаду моделей, методов и средств. И кроме того определенные технологические аспекты. Еще одно определенеие Иан Соммервилл: "Программная инженерия — это дисциплина, охватывающая все аспекты создания программного обеспечения от начальной стадии разработки требований до использования". Т. е. речь идет о всем жизненном цикле, от первоначальной концепции или идеи, когда программный продукт предстает в довольно абстрактном виде, и точки зрения разработчика и заказчика в достаточной мере не согласованы, возможно, до той стадии, когда продукт передается в промышленную эксплуатацию вместе с документацией. Т. е. на самом деле продукт представляет собой нечто вполне конкретное, реализованное и описанное в терминах существующих стандартов. В результате можно прийти к тому, что программная инженерия — это комплекс мер по оптимизации жизненного цикла. Т. е. на самом деле приемы и методы, по сути дела методологии, которые дают нам возможность разрабатывать продуктивным образом тиражируемым способом программные системы должного качества в оговоренные сроки и те самые системы, которые реализуют заявленные заказчиком функции, т. е. его бизнес-задачи.