СТАТЬЯ |
25.05.01
|
Кони Бюрер,
специалист в области разработки ПО,
компания Rational Software
Проектирование – внутренний характер разработки ПО
Проблемы разработки программного обеспечения? Есть простое пояснение!
Тот факт, что разработка ПО изначально является проектированием, помогает объяснить некоторые зачастую трудные для понимания вопросы. Ниже приведено несколько примеров.
Вопрос. Почему намного труднее создать структуру подробного перечня работ для создания программного обеспечения, чем для строительства небоскреба?
Ответ. Создание ПО является эквивалентом проектирования (т.е., создания чертежей) небоскреба, а не его строительства. Проектирование изначально труднее поддается планированию, чем строительство – это в равной степени справедливо как для небоскребов, так и для ПО, – поскольку объем и сложность конечного продукта определяются только в процессе проектирования.
Вопрос. Почему два программных модуля могут создаваться параллельно, тогда как этажи здания должны строиться последовательно?
Ответ. Эквивалентом создания программного модуля является проектирование этажа здания, а не его строительство. Два архитектора вполне могут параллельно проектировать два этажа здания, пока они соблюдают определенные граничные условия, – как и два программиста могут параллельно создавать два модуля. С другой стороны, компилятор, который в действительности "строит" программный продукт, должен компилировать модули в правильной последовательности, подобно последовательному строительству этажей здания.
Вопрос. Почему масштабирование разработки ПО не влечет за собой соответствующего роста экономической эффективности?
Ответ. Наблюдаемое отсутствие экономической эффективности при масштабировании разработки ПО является следствием проектной природы самой разработки. Известно, что в других отраслях рост экономической эффективности относится только к производственным процессам, но не к задачам проектирования. Причина проста – при проектировании приходится иметь дело не только с каждым из элементов проекта, но также и со всеми взаимосвязями между ними. При росте числа элементов проекта число взаимосвязей между ними нелинейно возрастает. Это справедливо даже при широком повторном использовании компонентов и применении коммерческих готовых продуктов. Таким образом, разработка программного обеспечения, являясь чистым проектированием, никогда не сможет повысить экономическую эффективность за счет масштабирования.
Вопрос. Возможно ли повысить экономическую эффективность при масштабировании производства ПО?
Ответ. Нет, потому что программные продукты производятся компилятором, компоновщиком и другими инструментами операционной системы с совершенно незначительными затратами. Поэтому в продажной цене программного продукта заложены затраты только на его проектирование и практически отсутствуют производственные затраты. В других отраслях при росте количества выпущенных копий продукта существенно снижается именно производственная себестоимость каждой копии. Это не относится к программным продуктам.
Вопрос. Почему так низок уровень повторного использования программного обеспечения?
Ответ. В большинстве отраслей повторное использование существующих элементов проекта несет в себе двойную выгоду. Оно ускоряет проектирование системы и снижает стоимость производства. Например, популярность электронных компонентов объясняется их дешевизной – результатом массового производства. Использование готовых электронных компонентов, таким образом, снижает традиционно высокую стоимость производства электронных систем. К сожалению, это не относится к программному обеспечению, поскольку оно уже производится с совершенно незначительными затратами. В этом случае интегрирование готовых компонентов не дает сэкономить на производстве; наоборот, это может повлечь за собой оплату лицензий.
Как же могло так случиться? Почему идеология проб и ошибок так глубоко проникла в программирование? Почему мы до сих пор не исследовали фундаментальные законы программирования и не открыли его основные принципы?
Для ответа на эти вопросы необходимо понять, что разработка программного обеспечения изначально является проектированием и не имеет признаков строительства или производства. Возможно, это утверждение трудно принять, но оно может быть легко обосновано. Мы хорошо понимаем, что такое проектирование, где оно заканчивается и где начинается строительство или производство. Рассмотрим два следующих аргумента:
Программисты не строят программное обеспечение – они его проектируют. Конечный результат проектирования – код на языке высокого уровня – является чертежом программного обеспечения. А компилятор и компоновщик механически строят программный продукт – двоичный исполняемый файл – по этому спроектированному коду. Проект архитектуры программной системы наиболее близко соответствует картонным моделям или эскизам проекта, используемым в некоторых инженерных дисциплинах.
Чтобы понять, почему программисты до сих пор не увидели и не нашли основных принципов, представим себе мир, в котором создание небоскреба не требует ничего, кроме подробного чертежа. Имея чертеж, архитектор мог бы одним нажатием кнопки построить небоскреб – мгновенно и практически без затрат. Затем архитектор мог бы проверить небоскреб и сравнить его с техническими требованиями. Если бы он разрушился или не смог пройти проверку, архитектор мог бы его снести и убрать обломки – мгновенно и опять же без затрат. Стал бы этот архитектор тратить много времени на формальную проверку согласованности проекта с физическими законами? Или хотя бы пытаться исследовать и понять эти законы? Вряд ли. Он, вероятно, смог бы получить результаты быстрее путем многократного строительства, проверки и сноса небоскреба, каждый раз внося исправления в чертеж. В мире, где строительство и разрушение бесплатны, выбирается метод проб и ошибок, а фундаментальные исследования остаются для простаков.
Программное обеспечение разрабатывается именно в таком мире. Программист создает чертеж в виде программы на языке высокого уровня. Затем он позволяет компилятору и компоновщику в мгновение ока и почти без затрат построить программный продукт. Создание чертежа требует значительных усилий, но строительство с помощью компилятора и компоновщика практически бесплатно. Программисту вообще не надо беспокоиться о сносе и уборке обломков – по крайней мере до тех пор, пока ему достаточно дискового пространства. Неудивительно, что идеология проб и ошибок так глубоко укоренилась в процессе разработки программного обеспечения, а сообщество программистов не удосужилось исследовать основные принципы разработки ПО.
Метод проб и ошибок завел нас достаточно далеко. Но рост сложности современных программных систем подводит нас к жесткому пределу. За пределами определенного уровня сложности создание качественных архитектур методом проб и ошибок становится невозможным.
Предложение: основные принципы разработки программного обеспечения
Без основных принципов разработка ПО навсегда останется ремеслом, а кризис ПО (прерванные проекты, перерасход бюджета, задержки, низкое качество результатов) станет постоянным. Попытаемся же найти некоторые основные принципы – но где? Физические законы не применимы к программному обеспечению. Означает ли это, что основные принципы разработки ПО не существуют? Или же мы просто недостаточно внимательно их искали?
Рассмотрим, как существование основного принципа – например, закона гравитации – влияет на архитектуру системы. С абстрактной точки зрения основной принцип делает не что иное, как вводит не подлежащие обсуждению требования, которые должен учитывать архитектор. Я буду называть эти требования аксиоматическими. Например, для строительства простым аксиоматическим требованием может быть следующее: "Здание должно выдерживать силу гравитации". Отличие аксиоматических требований состоит в том, что они относятся к каждой системе, которая когда-либо была или будет построена. Аксиоматические требования являются, в сущности, настолько очевидными и общими, что они, как правило, подразумеваются. Но из аксиоматических требований установившиеся инженерные дисциплины выводят систему архитектурных правил, которым должны соответствовать все заслуживающие внимания проекты. Проекты, нарушающие эти правила, очевидно не согласуются с основными принципами и, возможно, являются ошибочными.
Если найти основные принципы разработки ПО слишком сложно, то сформулировать некоторые аксиоматические требования, применимые к каждой программной системе, достаточно легко. Я бы хотел предложить следующий список:
Звучит глупо, не так ли? Но, поверьте, очень немного программных систем обладают архитектурой, которая очевидно удовлетворяет вышеприведенным аксиоматическим требованиям. Многие программные системы могут неявно соответствовать этим требованиям, но это не очевидно!*
Вышеприведенные аксиоматические требования, по-видимому, должны в некоторой степени относиться и к аппаратной среде программной системы. Поэтому я бы постулировал фундаментальный основной принцип разработки ПО в следующем виде: "Программное обеспечение работает и взаимодействует с аппаратным обеспечением, скорость которого конечна."
То, что аппаратная среда должна играть доминирующую роль в архитектуре программного обеспечения, совсем не удивляет. Многие подходы проектирования ПО склонны игнорировать аппаратную среду в логическом, структурном и динамическом ракурсах архитектуры. Аппаратное обеспечение часто воспринимается лишь как проблема развертывания, оказывающая незначительное влияние на структуру и поведение архитектуры. Однако я уверен, что аппаратная среда должна быть основным определяющим фактором для архитектурного проекта программной системы.
Следующий шаг: определение универсальной модели проектирования
В моей следующей статье для журнала The Rational Edge, планируемой на январский выпуск, я собираюсь обратить внимание на правила проектирования, связанные с основными принципами и их аксиоматическими требованиями. Эти правила представляют весьма полезную универсальную модель проектирования при разработке ПО. Универсальная модель проектирования является первым шагом к преобразованию разработки ПО в предсказуемую и повторяемую инженерную деятельность. Не забудьте заглянуть сюда снова!
За дополнительной информацией обращайтесь в Interface Ltd.
Отправить ссылку на страницу по e-mail
Обсудить на форуме Rational
Interface Ltd. Отправить E-Mail http://www.interface.ru |
|
Ваши замечания и предложения отправляйте
автору По техническим вопросам обращайтесь к вебмастеру Документ опубликован: 25.05.01 |