Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Обучение от Mail.Ru Group.
Онлайн-университет
для программистов с
гарантией трудоустройства.
Набор открыт!
2006 г.

Программное обеспечение открытого мира

Сергей Кузнецов

Обзор октябрьского 2006 г. номера журнала Computer (IEEE Computer Society, V. 39, No 10, Октябрь, 2006).

Авторская редакция.
Также обзор опубликован в журнале "Открытые системы"

Октябрьский номер журнала посвящен 60-летнему юбилею IEEE Computer Society. В качестве темы номера выбрана инженерия программного обеспечения. Теме посвящены все большие статьи номера. В качестве приглашенных редакторов выступают Дорис Карвер, Бэтон Роудж, Рон Хоулцман, Джим Эйлор и Майк Хинчи (Doris Carver, Computer's editor in chief, Louisiana State University, Baton Rouge, Ron Hoelzeman, co-chair of the IEEE Computer Society's 60th Anniversary Celebration, University of Pittsburgh, Jim Aylor, co-chair of the IEEE Computer Society's 60th Anniversary Celebration, University of Virginia, Mike Hinchey, a member of Computer's editorial board, NASA Goddard Space Flight Center in Greenbelt, Md.). Их вводная заметка называется «60-летний юбилей IEEE Computer Society» («The IEEE Computer Society's 60th Anniversary»).

В этом году отмечаются три юбилейные даты: 60-летие IEEE Computer Society, 40-летие журнала Computer и 30-летие старейшей действующей конференции по инженерии программного обеспечения Software Engineering Workshop. В честь юбилея Computer Society проводится много мероприятий: организуются новые технические конференции, выпускаются специализированные печатные и электронные издания и т.д. В число специальных мероприятий входит возобновление программы Golden Core, в рамках которой многолетним активным членам сообщества вручаются почетные знаки. При поддержке Computer Society в 2006 г. был проведен конкурс по истории компьютеров (IEEE Computer Society 60th Anniversary History Competition, СРС60). (В этом году в конкурсе победила российская команда из Московского государственного технологического университета им. К.Э. Циолковского (МАТИ), представшая Web-сайт «Русские счеты».)

Журнал Computer посвятил 60-летию Computer Society январский номер, содержащий обзор основных достижений в области компьютерной науки и анализу перспектив развития в ближайшие три-пять лет, а также данный выпуск. В журнале появилась новая колонка In Our Time, которую ведет главный редактор журнала IEEE Annals of the History of Computing Дэвид Алан Грайер (David Alan Grier).

Кульминацией празднования юбилея Computer Society является конференция Frontiers in Education, проходящая 27-31 октября в Сан-Диего. С основным докладом на этой конференции выступает член редколлегии журнала Computer Боб Колвелл (Bob Colwell). На этой же конференции состоится награждение победителей конкурса CHC60.

Ассоциация Computer Society образовалась в 1946 г. после появления вычислительной системы ENIAC, когда во многих организациях возникла потребность в информации об электронных вычислениях, а существующей информации было недостаточно. Возглавляемый Джоном фон Нейманом Комитет научно-исследовательского совета по высокоскоростным вычислительным устройствам (National Research Council Committee on High-Speed Computing Devices) основал специальное издание Mathematical Tables and Other Aids to Computation, предназначенное для публикации технических статей о компьютерах. Это привело к созданию двух отдельных комитетов, явившихся основой Computer Society: Комитета по крупным вычислительным устройствам Института инженеров по электротехнике (Large-Scale Computing Devices Committee of the American Institute of Electrical Engineers, AIEE, 1946) и Профессиональной группы по электронным компьютерам (Professional Group on Electronic Computers, PGEC), образованной Институтом инженеров по радиотехнике (Institute of Radio Engineers, IRE, 1948).

В 1963 г. AIEE и IRE объединились в Институт инженеров по электротехнике и электронике (Institute of Electrical and Electronics Engineers, IEEE). Группа PGEG была преобразована в Профессиональную техническую группу по электронным компьютерам (Professional Technical Group on Electronic Computers), а вскоре после этого была образована Компьютерная группа (Computer Group). Был создан административный комитет, включающий представителей обеих групп, а в 1964 г. они объединились, образовав основу Computer Society.

В июле 1966 г. Computer Group опубликовала первый номер журнала Computer Group News, выходящего 6 раз в год и публикующего новости, статьи, рецензии на компьютерные книги и т.д. Для поддержки издания собственного журнала в Computer Group было образовано оплачиваемое административное подразделение. Computer Group была первой группой в IEEE, у которой появились штатные оплачиваемые работники, и это способствовало дальнейшему росту и развитию ассоциации.

В 1971 г. Computer Group была переименована в IEEE Computer Society. В 1972 г. журнал Computer Group News был переименован в Computer, и с 1973 г. журнал издается ежемесячно. Появившись в виде 16-страничного издания, печатавшегося в гараже первого его редактора Джона Киркли (John Kirkley), с годами журнал Computer превратился в авторитетное рецензируемое издание, охватывающее всю тематику компьютерной науки и инженерии, технологии и приложений.

Члены редакционного совета журнала и его штатные сотрудники постоянно стремятся к обеспечению как высокого технического уровня журнала, так и его доступности широкому кругу читателей. Эта традиция продолжается в данном выпуске, посвященном 60-летию Computer Society. В этом выпуске собраны статьи лидеров сообщества инженерии программного обеспечения, которые выступали с основными докладами на конференции NASA/IEEE Software Engineering Workshop в 2006 г. (SEW-30)

В 2006 г. эта конференция отмечает 30-летний юбилей. По всей видимости, это наиболее долго существующая конференция сообщества программной инженерии. Первые 25 лет конференция проводилась исключительно NASA, но в последние пять лет ее поддерживает и IEEE, и эта поддержка сохранится в будущем (www.systemsandsoftwareweek.org).

В честь 30-летия конференции на SEW-30 с основными докладами были приглашены шесть специалистов, каждого из которых просили представить свой анализ основных достижений в области программной инженерии за прошедшие 30 лет или прогноз на следующие 30 лет, отразить существо имеющихся проблем и высказать свое мнение о возможных путях их решения. Статьи этих шести докладчиков (и их соавторов) представлены в юбилейном номере журнала Computer.

Первая статья называется «Кросс-плаформенная разработка: программное обеспечение, которого хватает надолго» («Cross-Platform Development: Software that Lasts») и представлена Джудит Бишоп и Найгелом Хорспулом (Judith Bishop, University of Pretoria, South Africa, Nigel Horspool, University of Victoria, Canada).

Греческому философу Гераклиту приписывается высказывание «Постоянно только изменение». Эту знаменитую фразу следовало бы высечь на стене храма программной инженерии, поскольку последователям этой дисциплины известно, что требования изменчивы, и наблюдаются их приливы и отливы. Основной практической задачей является создание систем, устойчивых к непредсказуемым изменениям требований.

Но для налаживания процесса управления требованиями требуется ответить на несколько трудных вопросов. Что происходит с программным обеспечением при смене аппаратных средств? Каким образом небольшая софтверная компания может разработать программное обеспечение для различных платформ, расширяя за счет этого свою клиентскую базу и повышая доходность? Как полагают авторы статьи, ответ на оба этих вопроса кроется в обеспечении высокого уровня платформенной независимости программного обеспечения и облегчении, тем самым, поддержки нескольких версий программных продуктов и их портирования на новые платформы.

Эта проблема инженерии программного обеспечения не относится к числу общеизвестных. Одним из наиболее точных определений программной инженерии является «коллективная разработка многоверсионного программного обеспечения». Распространенное представление об инженерии программного обеспечения фокусируется на первой части этого определения - управлении группами для производства крупного продукта. Большинство людей разделяет это представление, потому что они хотят видеть в программной инженерии дисциплину, связанную с компьютингом в целом, позволяющую перевести программные средства и методы с ремесленного уровня в состояние, которое обеспечит разработчикам возможность использовать их эффективным и воспроизводимым образом для успешного выполнения крупных проектов.

Но важным является и представление, основанное на второй части определения. В этом случае программная инженерия должна помогать выявлению определенных частей продукта, которые могут разрабатываться и массовым образом производиться без наличия зависимостей от языков программирования и среды использования.

Огромное продвижение на пути удовлетворения обеих частей определения обеспечила программная инженерия, основанная на использовании компонентов. Технология Web-сервисов, обеспечивающая способ предоставления новейших функциональных возможностей на основе Internet, теперь воспринимается как норма, а у основных поставщиков программного обеспечения входит в практику автоматическая рассылка обновлений на все машины, на которых используются соответствующие продукты. Специалисты в области программной инженерии должны, наконец, понять, что, по крайней мере, с точки зрения пользователей, программное обеспечение, поддерживающее все стороны жизни, от поддержки бизнеса до развлечений, от образования до исследований, должно быть всепроникающим, отвечающим текущим потребностям и надежным.

Видимо, наиболее важным фактором, на который теперь можно опираться, является возможность выбора платформ, становящихся все более совместимыми. Границы между программным и аппаратным обеспечением становятся размытыми, и при приобретении новой аппаратуры становится необязательно приобретать и устанавливать новое программное обеспечение. Но, к сожалению, ситуация мало изменяется для разработчиков и пользователей самодельного, настроенного или предназначенного для поддержки исследований программного обеспечения. Наличие упомянутого выбора (если у них он и имеется) только усложняет задачу. Хотя на сопровождение и модификацию, по прежнему, приходится более двух третей общей стоимости проекта, разработчики нетиражируемых приложений, как кажется, остаются равнодушными к решению этих проблем. Чаще всего после завершения проекта разработчики перестают быть связанными с полученным продуктом. После этого владельцы и пользователи программного обеспечения должны либо работать с внутренними частями программного обеспечения, либо привлекать новых разработчиков.

Авторы статьи не видят причин, по которым требуется подвергать разработчиков таким мучениям. Хотя использование промежуточного программного обеспечения основывается на рефлексии и контролируется за счет спецификаций на XML, можно придать компонентам крупной программной системы высокий уровень независимости от платформы и даже языка программирования. В результате можно получить долговечное программное обеспечение, для которого доступна простая миграция при смене платформы. Для небольших групп разработчиков работа, требуемая при смене платформы, становится необременительной и не требующей больших накладных расходов.

Предлагаемый в статье подход особенно выгоден для разработчиков графических пользовательских интерфейсов (graphical user interface, GUI), поскольку GUI являются повсеместно распространенной и важной частью большинства программных систем, и GUI хорошо представляются с использований кросс-платформенных инструментальных средств и библиотек. Подход проверялся при разработке приложения, одним из компонентов которого была библиотека GUI. В течение многих лет придание таким компонентам свойства платформенной независимости было проблемой. Авторы статьи надеются, что их решение способствует решению этой проблемы и сможет помочь решению проблем платформенной независимости с других областях, в частности, в области создания программного обеспечения для мобильных устройств.

Лючано Барези, Елизабетта Ди Нитто и Карло Гецци (Luciano Baresi, Elisabetta Di Nitto, Carlo Ghezzi, Politecnico di Milano) представили статью «Навстречу программному обеспечению открытого мира: проблемы и вызовы» («Toward Open-World Software: Issues and Challenges»).

В настоящее время разработчики справляются с изменениями среды путем выявления соответствующих требований к изменению программного обеспечения, модификации структуры и реализации программ, проверки того, что результирующий продукт удовлетворяет новым требования и, наконец, повторного внедрения приложения. Такой поход основывается на предположении, что внешний мир изменяется медленно, и программное обеспечение может оставаться стабильным в течение долгого периода времени. Также предполагается замкнутость внешнего мира в том смысле, что в требованиях, на основе которых специфицируется взаимодействие программной системы с внешним миром, могут быть зафиксированы все явления, представляющие интерес. Само программное обеспечение является замкнутым, поскольку состоит из частей, не изменяемых при выполнении программ.

Однако эти предположения о замкнутости мира оказываются недействительными в возрастающем числе случаев, в особенности, в повсеместных и всеобъемлющих компьютерных средах, в которых мир является по сути открытым. Подобные приложения существуют во многих областях от динамического управления цепочками поставок, динамической интеграции предприятий и виртуальных объединений на уровне предприятия до автомобильных приложений и систем домашней автоматизации на уровне встроенных систем. В открытом мире изменения среды происходят постоянно. Программное обеспечение должно динамически реагировать на изменения и подстраиваться к ним, даже если они являются непредвиденными.

Кроме того, мир является открытым для новых компонентов, которые могут потребоваться в динамике по причине изменений контекста, например, вследствие мобильности. В системах должна иметься возможность обнаружения таких компонентов и их динамического связывания с приложениями во время выполнения. У самого программного обеспечения должна иметься способность к самоорганизации. Другими словами, традиционное решение, используемое разработчиками программного обеспечения (тщательно выявить требования к изменениям; упорядочить их в соответствии с приоритетами; специфицировать требования; разработать, реализовать и оттестировать соответствующие изменения программ; повторно внедрить программное обеспечение), больше не работает.

Для установления природы этих новых проблем, прежде всего, требуется понять суть достижений, полученных в прошлом, и возможности их использования в новых целях. Действительно, по мере развития технологии программного обеспечения возрастает его гибкость. При использовании предположения о замкнутости мира в области инженерии программного обеспечения созданы методы борьбы с постоянными изменениями, позволяющие поддерживать качество приложений. Например, архитектуры программных систем эволюционировали от статических, монолитных и централизованных к динамическим, модульным и распределенным. Это изменение, произошедшее под влиянием и технических, и экономических воздействий, затронуло как уровень процесса (способ разработки программного обеспечения), так и уровень продукта (способ структуризации продукта). Однако для того, чтобы справиться с новыми вызовами открытого мира, требуется превзойти эти достижения. Авторы выдвигают следующую программу исследований.

Наличие формальных спецификаций программных компонентов сегодня является обязательным для компонентов, обеспечивающих сервисы, которые используются другими компонентами. Удалось достичь большого прогресса в области спецификаций интерфейсов, затрагивая их синтаксические и семантические аспекты. Но, хотя в области спецификаций компонентов традиционно упор делается на функциональные возможности, в контексте открытого мира должны специфицироваться и другие аспекты, включая протокол использования, транзакционные и нефункциональные свойства. Первые шаги в этом направлении сделаны в сообществе Semantic Web, где онтологии используются для описания формальной семантики сервисов. Однако в этом направлении требуются дальнейшие исследования. Требуется изучить, каким образом спецификации сервисов могут поддерживать классификацию и поиск сервисов. В частности, важным понятием для поддержки динамической реконфигурации является возможность замены одного сервиса другим.

Сервисы, обеспечиваемые поставщиками услуг, должны соответствовать их спецификациям. Автономная верификация сервисов, осуществляемая их производителями, не является достаточной. Требуется верификация сервисов во время их публикации и даже во время выполнения, поскольку они могут изменяться без предварительного уведомления. Верификация на фазе публикации может входить в состав протокола принятия к публикации, когда происходит сертификация сервиса. Верификация времени выполнения должна защитить пользователей от непредвиденных и недопустимых изменений. Для этого нового вида верификации требуется разработка новых методов.

В динамических и открытых системах становится необходимым мониторинг для обнаружения ситуаций, в которых могут потребоваться соответствующие реакции для обеспечения желаемого уровня общего качества. Мониторинг заключается на внесении в систему датчиков, сборе и анализе данных и в соответствующем реагировании на результаты анализа. В ходе анализа наблюдения сравниваются со спецификациями. Проблема здесь состоит в определении, выборке и настройке стратегий мониторинга, которые могут обладать разными степенями агрессивности.

В открытом мире участники, предоставляющие и потребляющие услуги, могут легко стать жертвами мошенничества. Такие ситуации могут распознаваться с помощью мониторинга с инициированием каких-либо восстановительных действий. Однако требуется возможность предотвращения ситуаций, которые могут причинить вред системе. В области сервис-ориентированных систем в рамках инициатив Web Services-Security, Web Services-Policy и Web Services-Trust определяются протоколы, позволяющие некоторым уполномоченным службам гарантировать достоверность других участников. При применении более «демократичного» подхода доверие основывается на репутации участников. Ни один из подходов не гарантирует устойчивость по отношению к атакам. Эти подходы необходимо дополнить методами верификации и мониторинга, но, по мнению авторов статьи, в большинстве случаев следует придерживаться предположения о честности большинства людей и поставляемых ими программных компонентов.

Для программирования открытых систем требуются новые возможности языков программирования. Проведение исследований требуется в связи с механизмами самонаблюдения для получения информации времени выполнения о динамически появляющихся сервисах и механизмами рефлексии для динамической адаптации клиентских приложений.

В открытом мире программное обеспечение должно обладать возможностью динамического развития. Хотя разработчики не могут предсказать все изменения, они должны определять границы, в пределах которых система может эволюционировать. Иначе система может быстро выйти из-под контроля. В результате мониторинга должно быть возможно управлять отклонениями от ожидаемого поведения и планировать реконфигурацию. Авторами статьи исследовался подход к поддержке самовосстанавливающихся Web-сервисов на основе потоков работ, которые могут обнаружить отклонение поведения сервисов от того, что ожидается, и воздействовать на них должным образом. Похожим образом, на некоторых автономных компьютерных платформах обеспечивается возможность определения правил, которым должен следовать каждый компонент для изменения системы в целом. Некоторые из этих правил могут строить по образу поведения существующих биологических систем. Исследовательское сообщество работает над самоуправляемым программным обеспечением, и в течение нескольких следующих лет можно ожидать появления значительных результатов.

Название следующей статьи: «Инженерия сервисов: связывание бизнеса и IT» («Service Engineering: Linking Business and IT»). Авторы статьи - Тициана Маргария и Бернхард Стеффен (Tiziana Margaria, Universität Potsdam, Germany, Bernhard Steffen, Universität Dortmund, Germany).

Бизнес-процессы все больше и больше становятся характерной интеллектуальной собственностью передовых предприятий. Кроме того, в соответствии с недавно принятыми правилами, требуется более прозрачное моделирование процессов, допускающее своевременный аудит и прослеживаемость бизнес-решений и операций. Эти тенденции в значительной степени стимулируют автоматизацию, стандартизацию, а часто и радикальную реорганизацию бизнес-процессов различных организаций.

Сервис-ориентированный подход, в котором делается упор на модульность, полностью изменяет способы моделирования, реализации и поддержки бизнес-процессов. Сервисы, связанные с конкретной предметной областью, виртуализуют сложные функции основных бизнес-приложений таким образом, что их можно слабо связывать для образования межорганизационных процессов. Этот уровень абстракции стимулирует применение «быстрых» методов и уменьшает традиционную зависимость от поставщиков.

Например, в классических средах выбор корпоративной системы планирования ресурсов влияет на выбор системы управления процессами, поскольку интероперабельность обычно гарантируется только внутри одной однородной системы. Однако виртуализация и слабое связывание за счет отделения процессов от поставщиков индивидуальных функций обеспечивает «бесшовное» кросс-платформенное, кросс-доменное и независимое от поставщиков управление процессами.

Для поддержки такого горизонтально-однородного управления процессами требуются новые инструментальные средства, гарантирующие вертикально-однородную реализацию моделируемых процессов. Основанные на всемирных стандартах протоколов и интерфейсов, эти средства должны обеспечивать спецификацию и поддержку интероперабельности используемых функций, делая, тем самым, возможной разработку процессов, которая действительно основана на моделях.

Статью «Первые шаги к решению проблемы верифицированного программного обеспечения» («First Steps in the Verified Software Grand Challenge») написал Джим Вудхок (Jim Woodcock, University of York).

В типичной гарантии на приобретаемый программный продукт говорится, что «программное обеспечение будет в течение 90 дней в основном работать в соответствии с сопроводительными материалами, хотя программы могут содержать ошибки, и установка может не завершаться успешным образом». Такая гарантия, по существу, ничего не гарантирует. Для других промышленных продуктов обычно гарантируется «пригодность к использованию по назначению», но к программным продуктам это не относится. Интересно, что, хотя на программное обеспечение не дается должная гарантия, она имеется у CD, на котором поступает дистрибутив программ. Если CD поступает к покупателю в испорченном виде, поставщик обязан бесплатно заменить его.

Технический директор General Motors Тони Скотт ежегодно тратит на компьютерную аппаратуру и программное обеспечение более трех миллиардов долларов. Он говорит, что его компания давно бы вышла из бизнеса, если бы продавала автомобили таким же образом, как мы продаем программное обеспечение. Скотт призывает поставщиков программных продуктов предоставлять гарантию, ограждающую потребителей от любых ошибок, которые могли бы нанести ущерб их компаниям. Таким образом, поставщик нес бы ответственность за поставку приложения, подверженного известной проблеме безопасности, которая впоследствии привела к отказу компьютеров потребителя или причинению вреда его продуктам. В настоящее время поставщик не отвечает за финансовые убытки потребителей. Скотт считает, что поставщик должен устранять ошибки в программном обеспечении и возмещать убытки потребителя.

Для производителей программных продуктов неприятным фактом является наличие ошибок в программах. Поставщики не могут гарантировать отсутствие ошибок в своем программном обеспечении, потому что они не могут в этом убедиться. Стоимость ошибок потрясающе велика. По данным американского Национального института стандартов и технологии (NIST) ошибки в программном обеспечении обходятся экономике США в 60 миллиардов долларов в год. Чтобы оценить убытки в мировом масштабе, можно умножить это число на три, и мы получим сумму, превышающую стоимость ежегодного валового национального продукта многих стран. Что следует делать при наличии этой ситуации? Можно ли ожидать появления программного обеспечения с гарантией пригодности к использованию по назначению? По мнению автора статьи, мы должны стремиться именно к этому.

Возрастающее число исследователей из академических и промышленных кругов полагает, что способ революционизирования производства программного обеспечения должен основываться на использовании формальных методов. Они считают, что теперь это стало возможным. В близком будущем исследователи будут применять формальные методы для обеспечения гарантий функциональности и эффективности всех видов программного обеспечения, и это станет наиболее дешевым способом достижения этой возможности.

При наличии уместных компьютерных инструментальных средств использование формальных методов станет широко распространенным, и это преобразует практику инженерии программного обеспечения. В международном компьютерном сообществе взято обязательство решить эту проблему в течение следующих 15-20 лет.

Статья «Что мы можем ожидать от верификации программ?» («What Can We Expect from Program Verification?») представлена Майклом Джексоном (Michael Jackson, Open University).

В качестве эпиграфа к статье использована цитата из «Посланий» Горация (I, 10, 24) «Гони природу в дверь, она войдет в окно» (Naturam expellas furca, tamen usque recurret).

В 2003 г. Тони Хоар предложил идею верифицирующего компилятора в качестве Большого Вызова компьютерному сообществу. На следующий год Джим Вудкок в своем расширенном предложении рекомендовал разработать, кроме верифицирующего компилятора, репозитория реальных примеров программ и документации, которые были верифицированы или были предназначены для верификации.

Понимание верификации как математического доказательства того, что программа удовлетворяет своим формальным спецификациям, исходит от работ Алана Тьюринга, опубликованных в середине прошлого века. Методы верификации должны включать как проверку соответствия заданной программы спецификациям, содержащимся в ее тексте или в отдельном документе, так и средство обеспечения корректного построения программы, систематическую и формальную процедуру разработки, гарантирующую корректность разработанной программы или облегчающую ее верификацию. Недавно опубликованный план исследовательских работ, относящихся к данному Большому Вызову, демонстрирует многообразие возможных методов верификации. Наличие этого многообразия привело к замене термина верифицирующий компилятор на более общий термин средства верификации программ.

С позиций предложенного Большого Вызова корректным программным продуктом является продукт, соответствующий формальной спецификации. Ключевые вопросы относятся к самому понятию спецификации и ее области действия. Эдсгер Дийкстра рассматривал спецификацию как логический экран, отделяющий вопрос корректности (correctness concern) (удовлетворяет ли программа своей формальной спецификации) от вопроса приятности (pleasantness concern) (является ли программа, удовлетворяющая спецификации, именно тем, что задумывалось). В более ранней формулировке имеется разделение между построением программы правильным образом и построением правильной программы.

Причина этого разделения очевидна. Компьютеры конструируются для образования среды выполнения программ, в которой корректные формальные рассуждения являются полностью достоверными. Однако во многих случаях разработчик должен использовать знания о предмете спецификации, поскольку требуемые рассуждения выходят за пределы чисто программистских вопросов. Если этот предмет является абстрактным и математическим (например, выпуклая оболочка множества точек в трехмерном пространстве), то требуемое знание включает соответствующие математические аксиомы и теоремы. Поэтому оно является не менее формальным, чем сама программа, и к нему самому применимы формальные рассуждения.

В отличие от этого, вопрос о том, производят ли разработчики правильную программу (действительно вычисляющую выпуклую оболочку или наименьший ограничивающий куб), подрывает формальность, поскольку вводятся неформальные понятия, лежащие вне мира математики. Неформальным элементом является даже выбор формата ввода множества точек, для которого нужно вычислить выпуклую оболочку. Появляются человеческие соображения, для которых отсутствует бесспорное корректное и доказуемое обоснование.

Поэтому кажется желательным ограничиться спецификациями, по отношению к которым программы должны верифицироваться. Спецификации должны основываться на абстрактном и формальном предмете, строго ограниченном компьютерным периметром.

В крупных программных системах формальными не являются ни проблема, ни ее предмет. Проблемный мир (естественная среда, в которой будет выполняться программа) включает множество физических явлений, включающих человеческое бытие и создаваемые людьми артефакты. Предметом проблемы являются не абстрактные аксиомы и теоремы, которые можно применить для понимания и формализации свойств среды, а также для формулировки и решения данной проблемы. Скорее, предметом проблемы является реальная окружающая среда во всем своем беспорядке.

Для поддержки возможности производства формально верифицированного корректного программного обеспечения требуется решение двух разных предварительных задач. Во-первых, разработчики должны формализовать требование к системе (воздействие, которое должно оказать на среду программное обеспечение) и соответствующие свойства среды. Кроме того, они должны применить формализованные требование и свойства среды для порождения формальной спецификации желательного компьютерного поведения на уровне его интерфейса со средой.

Удовлетворение результирующей формальной спецификации является критерием корректности программы. За получение спецификации должны отвечать инженеры. Эта задача относится только к среде и лежит вне граничного барьера. Задача внутри этого барьера относится только к программному обеспечению и формальной спецификации, и за нее должны отвечать специалисты из области компьютерной науки. Внутри барьера полностью формальная природа программирования и верификации программ остается неизменной.

Следующую статью написал Манфред Брой (Manfred Broy, Technische Universität München). Статья называется «'Большой Вызов' в информатике: инженерия преимущественно программных систем» («The 'Grand Challenge' in Informatics: Engineering Software-Intensive Systems»).

Информатика, являясь наукой об информации и обработке информации, включает много областей и охватывает принципы вычисления, хранения, передачи и визуализации информации, а также формализмы для описания процедур обработки информации. Подобно тому, как физика является наукой о физических явлениях и их математических основах, химия - наукой о материалах и веществах, биология - наукой о жизни, информация является существенной для понимания реальности, и информатика вносит фундаментальный вклад в постижение мира.

В информатике имеется и инженерный аспект, относящийся к созданию и функционированию систем обработки информации, вычисляющих, сохраняющих, передающих и визуализирующих информацию. Сегодня обработка информации играет существенную роль во всех видах технических и организационных процессов и в широком диапазоне продуктов. Для этих процессов и продуктов все более характерно включение программного обеспечения, существенно повышающего их функциональные возможности. Наличие программного обеспечения и возможности программирования глубоко влияет на их разработку и использование. Поэтому преимущественно программные системы представляют собой очень важную разновидность систем обработки информации.

Встраиваемые преимущественно программные системы являются частью технических устройств, и, следовательно, они встраиваются в физические или технические процессы. Некоторые современные встраиваемые системы обработки информации относятся к числу наиболее сложных технических конструкций. Промышленное производство таких систем является важным и с точки зрения инфраструктуры, и с точки зрения экономики.

Разработка и производство систем обработки информации основывается на использовании вспомогательных программных систем, таких как программные инструментальные средства и репозитории данных о продуктах. Поэтому ключевой дисциплиной для конструирования систем обработки информации является программная и системная инженерия. В частности, программная и системная инженерия затрагивает такие вопросы, как инженерия требований, архитектурное проектирование, реализация, средства и методы обеспечения надежности и долговременное сопровождение.

Все эти вопросы важны не только с экономических позиций, но также и в отношении к безопасности и надежности повседневной жизни. Важнейшие инфраструктуры человеческой деятельности в значительной степени зависят от возможности разработки и обеспечения функционирования безопасных и надежных преимущественно программных систем.

Сегодня построение преимущественно программной системы остается нерешенной проблемой. Во многих прикладных областях наблюдается типичная кривая обучения. В начале цикла обучения инженеры расценивают программное обеспечение как незначительный довесок ко всему остальному. По мере изучения прикладной области программное обеспечение постепенно становится центральной инженерной задачей. И тогда инженеры начинают разрабатывать собственные процессы и модели для решения проблем разработки программного обеспечения для конкретной прикладной области.

Не говоря уже о потребности изучения самой дисциплины разработки программного обеспечения, существенным шагом, который должна сделать индустрия систем с интенсивным использованием программного обеспечения, является переход от накопления опыта в ходе создания таких систем к подходу линий продуктов. Для применения такого подхода требуется эффективного разработка обширного семейства родственных систем, обладающих специализированными функциональными возможностями и обеспечивающих должный уровень безопасности и надежности.

Для решения проблем разработки сложных программных систем требуется несколько новых технических компетенций. В частности, требуется хорошее понимание моделирования систем и эффективное использование моделей в дисциплинированном инженерном процессе. Потребуется и теория моделирования систем с дискретными событиями, которая обогащает и дополняет классический математический подход к теории систем, основанный на дифференциальных и интегральных уравнениях.

Если основываться на подходе к систематической разработке сложных программных систем, то потребуется инженерная нотация; дисциплина системных архитектур, затрагивающая архитектуру и программного обеспечения, и аппаратуры; соответствующие языки реализации; поддерживающее все это инструментальное средство. Кроме того, нужна методология спецификации и верификации систем с интенсивным использованием программного обеспечения.

Разработка такого подхода представляет собой Большой Вызов, заслуживающий многочисленных исследований. При их выполнении нужно учитывать основы программной и системной инженерии, не забывая одновременно отслеживать конкретные потребности прикладных областей. По мнению автора, наиболее эффективными окажутся практические подходы, специфичные для конкретных прикладных областей, основанные, тем не менее, на общей теории и методологии моделирования, разработки и обеспечения функционирования программных систем.

Наконец, последнюю статью тематической подборки сентябрьского номера представил Дэвид Грайс (David Gries, Cornell University). Статья называется «Что мы не выучили по поводу обучающего программирования?» («What Have We Not Learned about Teaching Programming?»).

Когда в 1968 г. проводилась конференция NATO по инженерии программного обеспечения, практически в первый раз собрались вместе люди из академии и индустрии для обсуждения проблем проектирования и разработки программного обеспечения. Представители обоих лагерей публично признались в том, что не знают, как хорошо разрабатывать программное обеспечение. Отчетливыми симптомами кризиса программного обеспечения являлись частые нарушения сроков завершения работы, перерасход средств, наличие ошибок в программах и неспособность к обучению программированию.

Эта конференция и ее участники побудили к выполнению многочисленных исследований в конце 1960-х - начале 1970-х гг. Наиболее важный и плодотворный вклад в эти исследования внесли Эдсгер Дийкстра, Тони Хоар и Никлаус Вирт. К числу их достижений относятся аксиоматическая основа языков программирования; теория слабейших предусловий, которая привела к созданию методологии формальной разработки алгоритмов; пошаговая детализация; структурное программирование; достижения в области языков программирования: Pascal, охраняемые команды, взаимодействующие последовательные процессы.

Эти три исследователя оказали чрезвычайное влияние на разработку языков программирования, методологию программирования и выработку понятия корректности программ. Однако, как считает автор статьи, полученные результаты так и не удалось в должной мере использовать при обучении программированию. В процессе обучения не подчеркиваются достижения этих новаторов, оказавшие громадное воздействие на профессию разработчиков программного обеспечения.

По словам американского ученого-лингвиста Бенджамина Уорфа (Benjamin Whorf), они делали акцент на простоте и красоте и полагали, что язык должен способствовать четкости мышления. Эти принципы теперь редко упоминаются в контексте программирования. Мы продаем свои программистские души, когда начинаем обучение с педагогически вредных и интеллектуально ужасных языков C и C++.

Они подчеркивали значение методологии, говоря и принципах разработки программ, таких как пошаговая детализация. Сегодня в большинстве учебных материалов содержатся «тексты программ», а не «тексты о программировании»; в них мало что говорится о процессе программирования. Вместо этого приводятся тексты программ, и полагается, что студенты смогут писать свои программы по их подобию.

Они сосредотачивались на вопросах корректности и той мысли, что программа и ее доказательство должны разрабатываться совместно, и идеи доказательства должны главенствовать в этом процессе. В настоящее же время большая часть выпускников, специализирующихся в области компьютерных наук, не знают смысла слова инвариант, хотя инвариант цикла является базисным инструментом инженерии программного обеспечения, позволяющим понимать независимые части цикла (инициализацию, условие завершения, продвижение к завершению) без потребности анализа других частей.

Нужно внимательно посмотреть на то, как происходит обучение программированию. Целью образования должно быть не просто насыщение студентов фактами, а развитие их способности думать. Автор полагает, что можно учить студентов осмысленному процессу программирования более эффективно, чем это делается в настоящее время. Это не только повысит эффективность преподавателей, но сделает более эффективной всю программу обучения.

Новости мира IT:

Архив новостей

Последние комментарии:

Релиз ядра Linux 4.14  (6)
Пятница 17.11, 16:12
Apple запустила Pay Cash (2)
Четверг 09.11, 21:15
Loading

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 985 1945361
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2015 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...