В мире программного обеспечения неудачные проекты встречаются чаще, чем успешные. Один из способов добиться того, чтобы проекты были успешными, - воспользоваться уже накопленным опытом. Однако сказать это намного проще, чем сделать. Как реализовать возможность многократного использования знаний в программных проектах? Как выбрать средства для обмена знаниями между ними?
За последние несколько десятилетий программная инженерия превратилась в дисциплину со множеством направлений: тестирование, программирование, проектирование, архитектура, поддержка, измерения и эволюция. Появляются все новые публикации и конференции, однако о них быстро забывают, а программная инженерия продолжает самостийно развиваться вне традиций — в какой-то мере это и ремесло, и искусство, и логика.
В большинстве случаев программирование — сложный, слабо определенный процесс, требующий от разработчиков творческого подхода. Различные agile-технологии позволяют организовать процесс постепенного приближения к цели проекта путем проведения циклов испытаний с корректировкой последующих, основанных на анализе результатов предыдущих. Scrum — одна из первых методологий циклического наращивания функциональности и корректировки хода проекта на основе анализа обратной связи от пользователей. Методология Scrum устанавливает правила управления процессом разработки и позволяет использовать уже существующие практики кодирования, корректируя требования или внося тактические изменения. Использование этой методологии дает возможность выявлять и устранять отклонения от желаемого результата на более ранних этапах разработки программного продукта.
Производители коммерческого программного обеспечения, такие, как Microsoft, IBM, и Oracle, вынуждены держать большие портфели программных продуктов, включающие операционные системы, межплатформенное, прикладное и встроенное ПО. Многие предприятия (банки, университеты, больницы) также создают свои собственные приложения и управляют ими. Руководство всех этих организаций сталкивается с важной проблемой: как одновременно управлять инвестициями, доходами, качеством и соответствовать ожиданиям клиентов в условиях пухлых портфелей программных продуктов?
Исследования показали, что в проектах с высокой степенью неопределенности участие всех заинтересованных лиц повышает качество разработки требований. Развитие средств коммуникации и процессов принятия решений следует осуществлять с учетом этих различий.
Как небольшой группе воспользоваться методами разработки программного обеспечения, характерными для крупных компаний? Малые группы определенно нуждаются в таких методах, но часто лишены богатства инфраструктуры и эффектов масштаба, присущих большим организациям. В малом коллективе обычно нет ни отдельной группы контроля качества, ни специального парка компьютеров для тестирования, а зачастую даже своего системного администратора. Основательное введение в эти проблемы содержится в отчете Института программной инженерии [1], посвященном совершенствованию рабочих процессов в малочисленных коллективах.
Программисты предпочитают избавиться от излишне сложных и устаревших методик и стремятся использовать подходы, позволяющие упростить и ускорить разработку. Как следствие, многие из них все чаще отдают предпочтение динамическим языкам программирования, таким как JavaScript, Perl, Python и Ruby. Эксперты по программному обеспечению так и не пришли к единому определению динамического языка, однако, по существу, такой язык позволяет создавать программы, способные менять свой код и логические структуры во время исполнения, добавляя при этом различные типы, имена модулей, классы и функции. Зачастую эти языки являются интерпретируемыми и, как правило, проверяют типы во время исполнения.
Сегодня много говорится о качестве программного обеспечения и информационных систем, проводятся исследования, демонстрирующие зависимость качества и эффективности автоматизируемых бизнес-процессов. Качество программного обеспечения из абстрактного и неосязаемого понятия преобразуется в комплексную метрику оценки программного решения, проекта его внедрения, процесса создания и уровня использования информационных систем в целом. От чего же зависит качество программ и как можно на него влиять?
В последнее время сообществом Open Source публикуются серьезные исследования, посвященные качеству программ. Анализ этих работ подсказывает, как добиться высокого качества открытого программного обеспечения, опираясь на эмпирические данные, а не на исторически сложившиеся, но, как правило, необоснованные суждения.
Процесс управления требованиями традиционно считается одним из ключевых при создании автоматизированных систем. Наибольшие риски проектов связаны с высокой изменчивостью требований и ошибками в их определении. Методика, основанная на международных и отечественных стандартах в области управления жизненным циклом автоматизированных систем, направлена на снижение таких рисков. Проблемы при выполнении проектов создания автоматизированных систем могут возникать из-за неформального сбора информации, предполагаемой функциональности, ошибочных или несогласованных нефункциональных требований к системе, а также нерегламентированной процедуры их изменения.
Большинство вычислительных систем построено по схеме «команда - контроль исполнения»: один метод вызывает другой и дает ему инструкции по выполнению каких-либо действий или получению нужной информации. В реальном мире часто бывает по-другому.
Во всем мире университеты разрабатывают для своих студентов курсы по программной инженерии, которые дополняют существующие программы по информатике и компьютерной инженерии. Чтобы сформулировать принципы составления эффективного учебного плана, IEEE Computer Society и ACM разработали в рамках более масштабного проекта Computing Curriculum набор рекомендаций Software Engineering 2004 (SE2004). SE2004 — один из нескольких документов, совместно подготовленных IEEE и ACM для вычислительных дисциплин, к которым помимо программной инженерии также относятся информатика, компьютерная инженерия, информационные системы и информационные технологии.
Согласно закону Мура, сложность компьютерных микросхем удваивается каждые 18 месяцев, а сложность программного обеспечения растет еще быстрее. Это побуждает разработчиков компьютерных систем к поиску технологий, способных самостоятельно адаптироваться к изменению окружающей среды. Одна из таких технологий, адаптивная декомпозиция ресурсов, представляющая собой расширение операционной системы реального времени на уровне ядра, позволяет создавать безопасные группы из нескольких приложений и потоков, максимально эффективно используя ресурсы процессора. Как правило, множество подсистем, процессов и потоков, составляющих современную встраиваемую систему, разрабатываются параллельно друг другу.
Исследователи в области программной инженерии объединяются для создания технологии верификации, которая заметно увеличит производительность и надежность разработки, интеграции и обслуживания программного обеспечения. «Мы гарантируем, что наше программное обеспечение в течение 90 дней со дня получения будет выполнять свои основные функции в соответствии с сопроводительными материалами, несмотря на возможные ошибки в программах и процедуре установки» — так выглядит типичная гарантия на программные продукты, которая совершенно бесполезна.
Один из стереотипов, бытующих в среде российских и зарубежных разработчиков программного обеспечения, - отношение к проектной документации как к второстепенному атрибуту, замедляющему и бюрократизирующему работу. Вместе с тем многие стандарты
По прогнозам, в 2010 году средняя емкость жесткого диска на ПК составит 1,7 Гбайт, а к 2020-му она возрастет до 85 Тбайт, что позволит записать 22 млн. песен, или 86 млн. цифровых фотографий, или 21,5 тыс. фильмов.
Предлагаемая концептуальная платформа позволяет анализировать проблемы интероперабельности Web-сервисов. Она обеспечивает контекст для изучения существующих стандартов и спецификаций, а также выявления новых возможностей автоматизации. Web-сервисы становятся предпочтительной технологией реализации сервис-ориентированных архитектур (Service-Oriented Architecture, SOA). Они упрощают взаимодействие и, следовательно, интеграцию приложений.
Решения на базе сервис-ориентированной архитектуры позволяют использовать преимущества распространенных сервисов и обеспечивают взаимодействие бизнес-процессов разных организаций. Однако приложения на основе Web-сервисов могут охватывать несколько компьютеров, операционных систем, языков и предприятий
Развитие распределенных сервис-ориентированных архитектур порождает новые проблемы — идентификации субъектов информационного обмена и стандартизации этого процесса. По мере развития компьютерных сетей они становятся реальной информационно-инфраструктурной основой бизнеса. Конвергенция бизнеса с сетевыми
Быстрый рост рынка заказной разработки программного обеспечения дает шанс отечественным компаниям занять на нем достойное место. Однако для этого России требуется достаточное число разработчиков, способных выпускать качественные продукты. Один