Осознав себя как молодую, но весьма перспективную для компьютерной отрасли и общества в целом профессию, программная инженерия (software engineering) начала движение к описанию собственного свода знаний. В ходе этого процесса стало ясно, что сами по себе знания по программной инженерии уже накоплены во множестве томов специализированной литературы. Поэтому усилия были сосредоточены на создании руководства к извлечению необходимых сведений из первоисточников, своего рода путеводителя, который формализует структуру профессиональной области и дает ссылки на материалы, описывающие содержание всех элементов этой структуры. В феврале 2004 года была завершена работа над Руководством к своду знаний по программной инженерии (The Guide to the Software Engineering Body of Knowledge, SWEBOK).
История проекта
В предисловии к редакции SWEBOK 2004 года дается краткий экскурс в историю становления программной инженерии как области профессиональной деятельности [1]. Термин software (программное обеспечение) ввел в 1958 году всемирно известный статистик Джон Тьюкей (John Tukey). Термин software engineering (программная инженерия) впервые появился в названии конференции НАТО, состоявшейся в Германии в 1968 году. Ведущая организация в области компьютерных наук, IEEE Computer Society, в 1972-м опубликовала первый сборник Transactions on Software Engineering, а четыре года спустя основала комитет по разработке стандартов программной инженерии. Первым таким стандартом стал IEEE Std 730, определяющий критерии качества программного обеспечения, вслед за ним последовали стандарты IEEE по различным областям программной инженерии, включая управление конфигурациями, тестирование, определение требований, проектирование, верификацию и оценку (валидацию). В 1986 году с выпуском стандарта IEEE Std 1002 (Taxonomy of Software Engineering Standards) была предпринята первая попытка обобщить содержание дисциплины программной инженерии. С 1990-го по 1995 год велась работа над международным стандартом, который должен был дать единое представление о процессах разработки программного обеспечения. Выпущенный в результате стандарт ISO/IEC 12207 (Standard for Software Life Cycle Processes) во многом послужил отправной точкой для описания свода знаний по программной инженерии в SWEBOK.
В 1993 году IEEE Computer Society объединила свои усилия по формализации дисциплины программной инженерии с другой известной организацией — Association for Computing Machinery (ACM). Был создан совместный комитет Software Engineering Coordinating Committee (SWECC), миссия которого определялась как «создание совокупности критериев и норм программной инженерии как профессиональной деятельности, на базе которых можно будет принимать решения в ходе индустриальной разработки, проводить профессиональную сертификацию и формировать учебные программы». В рамках SWECC были организованы три рабочие группы по разработке, соответственно, свода необходимых знаний и рекомендуемых практических навыков для специалистов в программной инженерии, кода этики и профессиональных стандартов, учебных планов для разных ступеней университетского образования и повышения квалификации в области программной инженерии. SWEBOK является результатом работы по первому из этих трех направлений.
Проект по созданию SWEBOK был инициирован в 1998 году и проходил в три этапа, названия которых — Strawman («соломенный человек»), Stoneman («каменный человек») и Ironman («железный человек»), — образно характеризуют стадии зрелости разрабатываемого документа. На первом этапе был создан прототип, демонстрирующий возможные принципы организации SWEBOK. По завершении этапа Stoneman в 2001 году была опубликована пробная версия Руководства к своду знаний по программной инженерии. При ее создании были учтены около 9 тыс. замечаний, предложенных более чем 500 заинтересованными лицами из 42 стран. Редакция SWEBOK 2004 года является результатом последнего этапа Ironman и отражает дополнительные комментарии и замечания, предложенные сообществом в ходе знакомства с пробной версией.
Организаторы проекта следовали двум основным принципам его реализации: прозрачность и достижение консенсуса. Под прозрачностью подразумевалось непрерывное отображение хода проекта и результатов его этапов в определенных документах, так чтобы все заинтересованные стороны могли получать информацию о текущем статусе проекта и ключевых решениях по его продвижению. Достижение консенсуса — важнейший фактор в формировании руководства к своду знаний в определенной профессиональной области. Только при участии представителей различных направлений профессионального сообщества и достижении между ними согласия относительно содержания SWEBOK можно говорить о его значимости и легитимности. В то же время консенсус в отношении подобного документа является индикатором того, что программная инженерия действительно является признанной дисциплиной и широко распространенной профессией.
По утверждению авторов финальной редакции SWEBOK, активное участие в анализе и доработке документа сотен специалистов и различных организаций свидетельствует о реальном достижении такого консенсуса. Ряд наиболее значимых для сообщества разработчиков организаций вошли в консультативный орган Industrial Advisory Board (IAB), который осуществляет финансовую поддержку проекта. Среди его членов — представители индустрии, в том числе Boeing, Rational Software, SAP Labs и другие компании, исследовательские агентства National Institute of Standards and Tecnology (NIST) и Национальный совет по исследованиям Канады, Канадский совет профессиональных инженеров и IEEE Computer Society (с 2000 года ACM прекратила свое участие в проекте). Благодаря спонсорству IAB все результаты проекта публикуются в свободном доступе. Важно и то, что реализация проекта SWEBOK шла в постоянном контакте с другими инициативами, имеющими ключевое значение для становления программной инженерии как признанной профессии, такими как совместная разработка IEEE Computer Society и ACM учебного плана Computing Curricula Software Engineering (CCSE) и формирование единых стандартов программной и системной инженерии в комитетах по стандартизации ISO/IEC JTC1/SC1 и IEEE Software Engineering Standards Committee.
Содержание SWEBOK
Введение понятия программной инженерии призвано расставить, наконец, все точки над i в извечном споре, что есть разработка — искусство, ремесло или наука. В отличие от ремесла или свободного творчества инженерный подход к разработке позволяет поставить ее на рельсы строгих принципов и правил, которые обеспечат, в конечном итоге, достижение качественного результата и удовлетворения потребностей заказчика программного продукта. IEEE Computer Society определяет программную инженерию как «применение систематизированного, дисциплинированного и оцениваемого по количественным параметрам подхода к разработке, функционированию и сопровождению программного обеспечения, то есть применение инженерного подхода к созданию ПО».
Известно несколько обязательных компонентов профессии инженера, среди них:
- начальное профессиональное образование в соответствии с учебным планом, признанным и утвержденным профессиональным сообществом посредством аккредитации;
- регистрация пригодности к практической деятельности путем добровольной сертификации или обязательного лицензирования;
- повышение квалификации по специальным программам и непрерывное профессиональное образование;
- поддержка со стороны профессионального сообщества;
- следование определенным нормам поведения, которые часто закреплены в так называемом "коде этики" профессии.
Разработка Руководства к своду знаний по программной инженерии позволяет реализовать первые три из перечисленных компонентов для профессии инженера-программиста. SWEBOK аккумулирует в себе представление сообщества о том, что должен знать и какими навыками владеть специалист по программной инженерии. Достижение консенсуса в этом отношении и четкое описание содержания профессии в соответствующем документе создают базу для формирования экзаменационных программ для лицензирования специалистов, задания критериев аккредитации этих программ, разработки учебных планов непрерывного образования. Целевой аудиторией SWEBOK являются:
- государственные организации и коммерческие компании, которым необходимо согласованное представление о том, что есть программная инженерия, для определения требований к образовательным программам и тренингам, классификации служебных обязанностей, разработки политики оценки эффективности труда сотрудников и спецификации задач по разработке программного обеспечения;
- менеджеры программных проектов и чиновники, ответственные за определение общей политики в отношении профессионального лицензирования и принципов реализации професиональной деятельности;
- профессиональные сообщества и учебные организации, определяющие правила сертификации, политику аккредитации университетских программ и руководства по практической деятельности;
- студенты, выбравшие программную инженерию в качестве будущей профессии, и преподаватели, вовлеченные в процессы создания учебных планов и конкретных курсов.
Признавая тот факт, что реальное содержание дисциплины программной инженерии уже описано в многочисленных томах специальной литературы, опубликованной за последние три десятилетия, создатели SWEBOK предложили профессиональному сообществу не сам свод знаний, а руководство к нему, в котором вводятся общепринятые понятия программной инженерии и предоставляются ссылки на книги и статьи, раскрывающие содержание этих понятий.
Создание SWEBOK преследовало следующие основные цели.
- Продвигать в мире единое представление о программной инженерии. Достижению этого должен способствовать принцип консенсуса в реализации проекта.
- Четко определить место и границы программной инженерии по отношению к смежным дисциплинам.
- Охарактеризовать содержание дисциплины программной инженерии.
- Предоставить тематический доступ к своду знаний по программной инженерии.
- Создать базу для разработки учебных планов и материалов для лицензирования и индивидуальной сертификации.
Для того чтобы задать границы программной инженерии как сферы профессиональной деятельности, SWEBOK вводит десять областей знаний (Knowledge Area, KA) программной инженерии. Каждой области знаний соответствует одна глава Руководства, иерархическая организация которой позволяет реализовать третью цель SWEBOK — дать представление о содержании программной инженерии. Область знаний определяет ключевые концепции и проводит их декомпозицию на отдельные темы и подтемы. Выбранная декомпозиция соответствует тому, как представляются различные направления программной инженерии в индустрии и в литературе и стандартах. Для каждой области знаний приводится список ссылок на соответствующие публикации, главы книг и другие открытые источники авторитетной информации на английском языке и дается матрица соответствия между темами и ссылками на литературу. Таким образом реализуется принцип тематического доступа к своду знаний по программной инженерии.
Отдельная глава посвящена описанию смежных по отношению к программной инженерии дисциплин, к которым отнесены математика, компьютерные науки, менеджмент, управление проектами, управление качеством, компьютерная инженерия, системная инженерия и эргономика программного обеспечения. В SWEBOK дается определение этих дисциплин и приводятся составляющие их области знаний, на которые могут ссылаться описания областей знаний программной инженерии, если для их освоения рекомендуются знания по данным смежным дисциплинам. Так, глава SWEBOK, посвященная управлению в программной инженерии, ссылается на Руководство к своду знаний по управлению проектами (PMI PMBOK), на котором в значительной степени основано описание процесса управления программным проектом.
Одним из важнейших вопросов, которые необходимо было решить в ходе реализации проекта SWEBOK, был вопрос о глубине охвата знаний по программной инженерии в создаваемом Руководстве. В итоге было решено представить в SWEBOK так называемые «общепринятые» (generally accepted) знания, определение которых заимствовано из аналогичного документа для управления проектами. PMBOK определяет общепринятые знания как «знания, которые применимы в большинстве проектов, и достигнутый в отношении их широкий консенсус в профессиональном сообществе доказывает их значимость и эффективность». В программной инженерии общепринятые знания — это получившие широкое распространение в индустрии знания и навыки, применение которых не является обязательным во всех возможных случаях, но владение которыми необходимо для любого квалифицированного разработчика. Отсюда еще одно определение общепринятых знаний в SWEBOK, которое отражает практику подготовки инженеров-программистов в Соединенных Штатах, но может быть полезным и для всего мирового сообщества разработчиков: «Общепринятые знания — это те знания, которые должны быть включены в учебные материалы по подготовке к лицензионному экзамену для разработчиков, имеющих степень бакалавра и четыре года практической работы».
Общепринятые знания противопоставляются в SWEBOK «исследовательским» (advanced and research) знаниям, то есть инновационным направлениям в программной инженерии, которые используются отдельными компаниями-разработчиками, и концепциям, которые пока находятся на стадии разработки и тестирования в исследовательских организациях, а также «специализированным» (specialized) знаниям, которые используются для создания только определенных типов программного обеспечения. Задавая глубину описания предметной области, SWEBOK тем самым решает задачу формирования базы для создания учебных планов и сертификационных материалов.
Содержание SWEBOK демонстрирует отличие предмета программной инженерии от компьютерных наук в целом. В Руководстве к своду знаний делается акцент на практические аспекты создания артефактов, необходимых для достижения конечной цели разработки программного продукта. Как традиционные формы инженерной практики базируются на законах физики, но требуют множества других практических знаний и навыков, так программная инженерия использует определенные теоретические посылы computer science, но для решения вполне конкретных практических задач с учетом множества ограничений.
Инженерный подход к описанию дисциплины проявляется и в том, что SWEBOK никак не затрагивает конкретных аспектов информационных технологий, очень важных для дисциплины программной инженерии, таких, например, как языки программирования, реляционные базы данных или сетевые технологии. SWEBOK предлагает руководство к своду знаний, которыми специалист должен владеть вне зависимости от перемен в конкретных технологиях, происходящих в последнее время, как известно, очень быстро. Например, программа может быть написана на Фортране или объектно-ориентированном C++. Методы конфигурирования экземпляров программы для этих языков будут разными, но принципы и цели конфигурационного управления — одной из областей программной инженерии — останутся неизменными. Предполагается, что обладая багажом знаний, определенным в SWEBOK, разработчик сможет выбрать технологическое решение, наилучшим образом соответствующее его задаче.
Таким образом, SWEBOK не претендует на исчерпывающее представление всех знаний, которыми может обладать специалист, работающий в этой области. Документ призван описать необходимую, но, очевидно, недостаточную совокупность таких знаний, оставляя простор для дополнения этого обязательного багажа информацией по конкретным технологиям, методикам и компонентам связанных с программной инженерией предметных областей. При этом для SWEBOK важно не только ссылаться на общепризнанные источники, которые дают массу полезной в практике разработчиков информации, но и находиться в тесной взаимосвязи с нормативной литературой в данной области, которая предписывает, что разработчику следует делать в определенной ситуации. Объем такой нормативной информации относительно невелик по отношению к общим объемам первоисточников, приведенных в SWEBOK, и она сосредоточена главным образом в стандартах и связанных с ними документах. Поэтому для проекта SWEBOK ключевое значение имеет постоянный контакт с организациями по стандартизации в области программной инженерии.
Области знаний
SWEBOK вводит десять областей общедоступных знаний по программной инженерии. Первые пять областей представлены в последовательности, соответствующей традиционному жизненному циклу программного обеспечения в «водопадной» (waterfall) модели разработки. Это, однако, не означает, как подчеркивают авторы документа, что SWEBOK пропагандирует эту устаревшую модель, равно как и любую другую методику разработки. Остальные пять областей знаний перечисляются в алфавитном порядке. Каждая область знаний описывается с помощью подобластей (subarea), которые, в свою очередь, разбиваются на несколько тем (topic) и подтем (subtopic). Помимо ссылок на материалы, раскрывающих содержание различных подобластей и тем, в каждой главе приводятся рекомендации по дополнительной литературе и список стандартов, имеющих отношение к данной области знаний.
Требования к программному обеспечению (Software Requirements). Требование определяется как свойство, которое должно быть реализовано в программном продукте, для того чтобы решить некую проблему реального мира. В этой области знаний вводятся основные типы требований, описывается значение измеряемых количественно требований и разница между системными требованиями и требованиями к программному обеспечению. Подобласть, посвященная процессу определения требований, описывает связи между различными этапами этого процесса, которые, в свою очередь, определяются в других подобластях, и показывает связь этого процесса с другими процессами программной инженерии. Первым этапом в понимании проблемы, которую должен решить программный продукт, является выявление требований. Соответствующая подобласть знаний описывает, какие могут существовать источники требований и как требования могут собираться разработчиком. Следующий этап процесса — анализ требований, который позволяет выявлять и разрешать конфликты между требованиями и обнаруживать границы применимости программного продукта. На этапе спецификации требований создается документ, который может систематически пересматриваться, оцениваться и утверждаться. Подобласть, описывающая утверждение требований, задает процесс проверки такого документа для разрешения любых проблем еще до того, как под реализацию каждого требования будут выделены определенные ресурсы. Последняя подобласть посвящена рассмотрению ряда тем, которые должны учитываться в практике определения требований, среди которых итеративность данного процесса, управление изменениями, отслеживание требований и способы измерения требований.
Проектирование программного обеспечения (Software Design). Согласно определению IEEE, проект (design) — это одновременно и «процесс определения архитектуры, компонентов, интерфейсов и других характеристик системы или ее компонента», и «результат этого процесса». Проектирование трансформирует требования в формализованные описания, которые показывают путь решения поставленной перед разработчиками проблемы. Проект описывает декомпозицию системы на компоненты и интерфейсы между ними, обеспечивая нужный уровень детализации для каждого из компонентов. Подобласти данной области знаний определяют основные концепции программного проекта и описывают ключевые проблемы проектирования. Подобласть, посвященная структуре и архитектуре программного обеспечения, рассматривает архитектурные стили, шаблоны проектирования, программные семейства, объектно-ориентированную базовую архитектуру (framework) и т.д. В данной области знаний затрагиваются также вопросы анализа качества программного проекта, обсуждаются нотации для документирования проектов различных уровней детализации и описываются общие стратегии и специальные методы проектирования, включая функционально-ориентированные, объектно-ориентированные, компонентные методы, проектирование на основе структур данных и т.д.
Конструирование программного обеспечения (Software Construction). Под конструированием программного обеспечения понимаются все этапы процесса создания работающего программного продукта, включая кодирование, верификацию, модульное тестирование, интеграционное тестирование и отладку. В этой области знаний определяются базовые принципы, следование которым оказывает решающее влияние на эффективность конструирования, а именно минимизация сложности, предсказуемые изменения и конструирование с возможностью верификации, а также обсуждаются стандарты конструирования. Подобласти описывают проблемы управления конструированием и некоторые практические соображения, включая языки конструирования, вопросы кодирования, повторного использования, качества конструирования, проблемы интеграции и т.д.
Тестирование программного обеспечения (Software Testing). Включает в себя динамическую проверку поведения готовой программы на соответствие ожидаемому поведению с помощью набора тестовых примеров. В данной области знаний вводится базовая терминология, рассматриваются ключевые проблемы тестирования и связь тестирования с другими процессами разработки. Подобласть по уровням тестов описывает традиционные этапы тестирования больших программных систем (тестирование отдельных модулей, интеграционное тестирование и тестирование системы в целом), а также различные цели тестирования. Подобласть, посвященная методам тестирования, вводит несколько групп методов, включая тестирование на основе интуиции и опыта тестировщика, тестирование на базе спецификаций, на базе кодов и т.д. Также здесь рассматриваются вопросы выбора и комбинации подходящих методов. Отдельная подобласть вводит две группы метрик тестирования: для оценки программ в процессе тестирования и для оценки выполняемых тестов. В последней подобласти рассматриваются практические аспекты и основные операции процесса тестирования.
Сопровождение программного обеспечения (Software Maintenance). Этот этап жизненного цикла программного обеспечения призван решать проблемы, связанные с возникновением различных аномальных ситуаций, изменением операционной среды и появлением новых пользовательских требований в ходе эксплуатации программного продукта. В данной области знаний описываются базовые концепции сопровождения — терминология, необходимость сопровождения, обоснование затрат на сопровождение, эволюция программного продукта как часть программной инженерии, категории сопровождения и т.д. Сопровождение программного обеспечения связано с рядом уникальных технических проблем и проблем управления, которым посвящена отдельная подобласть, где также рассматривается ключевой вопрос оценки стоимости сопровождения. Кроме того, в данной главе описываются основные операции и методы сопровождения программного обеспечения, такие как понимание программы (program comprehension), реинжиниринг и реверсивный инжиниринг.
Управление конфигурацией программного обеспечения (Software Configuration Management). SCM — важнейшая дисциплина, задачей которой является идентификация конфигурации программного продукта в различные моменты времени с целью систематического контроля за изменениями в конфигурации и обеспечения ее целостности на протяжении жизненного цикла программного обеспечения. В качестве базы для организации и описания тем данной области знаний взяты основные действия, выполняемые в процессе управления конфигурациями: управление самим процессом SCM; идентификация, контроль, учет статуса и аудит конфигурации программного продукта; управление и выпуск релизов программ.
Управление в программной инженерии (Software Engineering Management). Определяется как применение основных операций управления — планирования, кординации, измерения, мониторинга, контроля и отчетности — к разработке и сопровождению программного обеспечения с целью сделать эти процессы систематичными, дисциплинированными и измеряемыми. Управление в программной инженерии может рассматриваться на трех уровнях — организационном, уровне управления проектом и уровне планирования и контроля программы измерений. В данной области знаний подробно рассматриваются два последних уровня. Вводятся основные этапы управления проектом создания программного продукта, такие как инициация и определение содержания проекта, планирование, исполнение, обзор и оценка, завершение проекта. Отдельная подобласть посвящена вопросам измерений в программной инженерии. Объединение тем управления проектом и измеримости проекта разработки программного обеспечения в одной области знаний вполне логично. Между ними существует тесная взаимосвязь — управление без качественных и количественных измерений чревато потерей надлежащей тщательности в реализации проекта, а измерения без управления — бесцельностью. Различные аспекты измерений вводятся во многих областях знаний SWEBOK, но в данной главе подобласть, посвященная проблемам измеримости, описывает построение общей программы измерений, рассматривая, в частности, темы планирования, выполнения и оценки измерений.
Процесс программной инженерии (Software Engineering Process). В этой области знаний рассматриваются вопросы определения, реализации, оценки, измерения, управления, изменения и совершенствования процессов жизненного цикла программного обеспечения как таковых. Подобласть, посвященная реализации и изменению процесса, описывает инфраструктуру процесса, цикл управления процессом и модели реализации процесса. Определение процесса подразумевает описание моделей и процессов жизненного цикла, задание нотаций для определения процесса, а также рассмотрение вопросов адаптации процесса и его автоматизированной поддержки. Подобласть оценки процесса вводит модели и методы оценки (assessment). Последняя подобласть рассматривает возможности измерений для процесса и программного продукта.
Инструменты и методы программной инженерии (Software Engineering Tools and Methods). Эта область знаний включает, соответственно, две подобласти. Первая описывает программные инструменты для поддержки задач каждой из остальных областей знаний SWEBOK, а также некоторые общие проблемы использования инструментария, например, вопросы интеграции. Вторая подобласть посвящена различным методам разработки. Методы задают определенную структуру процессов разработки и сопровождения программного обеспечения, позволяя сделать их более систематичными и, как следствие, более эффективными. Как правило, методы включают в себя нотацию и словарь терминов, процедуры для выполнения определенных задач и руководства по проверке процесса и продукта. Методы могут быть применимы как ко всему жизненному циклу программного обеспечения, так и к отдельным его этапам. В SWEBOK описываются несколько категорий методов, включая эвристические методы на основе неформальных подходов, формальные методы на основе математических подходов и методы прототипирования.
Качество программного обеспечения (Software Quality). Выпуск качественного продукта — ключ к достижению удовлетворенности заказчика и конечная цель разработки. Данная область знаний описывает различные факторы, влияющие на качество программного обеспечения и охватывающие все процессы жизненного цикла. Качество — понятие, которое должно так или иначе учитываться практически во всех областях программной инженерии, поэтому в данной главе можно встретить ссылки на многие другие области знаний SWEBOK. Первая подобласть описывает основы качества программного обеспечения, такие как культура и этика программной инженерии, затраты на обеспечение качества, модели и характеристики качества и способы совершенствования качества программного продукта. Процессы управления качеством программного обеспечения включают обеспечение качества — четко спланированный, систематический подход к организации всех действий, позволяющий гарантировать, что продукт будет соответствовать заданным техническим спецификациям; верификацию и валидацию для объективной оценки продукта и процессов на протяжении всего жизненного цикла; обзор и аудит. Отдельная подобласть посвящена практическим вопросам качества, таким как требования к качеству программного обеспечения, характеристики дефектов, методы управления качеством и измерения качества.
Ложка дегтя
Одной из главных целей проекта SWEBOK было воплотить в себе общее представление компьютерной индустрии о том, что есть программная инженерия как область профессиональной деятельности. Стоит отметить, что, несмотря на достижение определенного консенсуса, у документа оказалось немало оппонентов и серьезных критиков. Один из инициаторов проекта, ассоциация ACM, в 2000 году прервала свое участие в разработке SWEBOK. Это решение было аргументировано, прежде всего, тем, что свод знаний по программной инженерии в том виде, в каком он вырисовывался на тот момент в SWEBOK, не отвечал цели, которую в ACM считали первостепенной — создать теоретическую базу для обеспечения качества программного обеспечения, предназначенного для широкого использования [2]. В ACM сочли, в частности, что выбор областей общепринятых знаний на основе анализа содержания соответствующих изданий и университетских учебных планов (как это было сделано на первом этапе проекта SWEBOK) может быть достаточно далек от реальной практики, что в SWEBOK совсем не уделяется внимания разделению ролей в процессах разработки, а также знаниям, необходимым в специальных областях программной инженерии.
Среди резких критиков SWEBOK* оказались такие известные в мире разработки личности, как Гради Буч, Кем Канер, Мартин Фаулер. Отказ ACM от участия в проекте и отрицательные отзывы Буча, одного из создателей UML, профессор программной инженерии Технологического института Флориды, специалист по проблемам тестирования и применимости программного обеспечения Кем Канер считает признаком того, что о реальном консенсусе относительно свода знаний в таком виде не может быть и речи. Канер считает также, что ссылка на общепринятые знания и навыки в SWEBOK часто оставляет за бортом гораздо более эффективные, но попавшие в категорию инновационных методы, например, в области тестирования или анализа требований. По мнению Мартина Фаулера, известного специалиста по программной архитектуре и одного из авторов Manifesto for agile software development, создатели SWEBOK слишком сконцентрированы на плановой разработке, не уделяют должного внимания «скорым» методам, и вследствие этого игнорируют роль людей и взаимоотношений между ними в процессе разработки и следуют «водопадному» подходу, продемонстрировавшему свою неэффективность. Фаулер вообще приходит к довольно неутешительному выводу: индустрия разработки еще не созрела для создания собственного единого свода знаний, поскольку существует слишком много разных школ, и профессиональное сообщество пока находится в процессе познания самого себя.
Впрочем, и создатели SWEBOK признают ограничения процесса формирования руководства к своду знаний. В редакции 2004 года отмечается, что программная инженерия подвержена постоянным влияниям новых технологий и методов, и потому выбор областей общепринятых знаний неизбежно будет эволюционировать. Могут измениться и границы между разными областями знаний и между программной инженерией и связанными дисциплинами. Объемы и выбор ссылочной литературы в SWEBOK также не может рассматриваться как нечто неизменное, хотя это и был вполне обоснованный на данный момент времени выбор — широко доступные, актуальные, легко читаемые публикации на английском языке. Последнее обстоятельство, правда, признается как определенное ограничение SWEBOK — важные материалы на других языках оказались за рамками проекта.
Все это означает, что работа над SWEBOK продолжается. Выпуск следующей редакции запланирован на 2008 год. Число активных участников проекта расширяется. Ряд крупных корпораций начали использовать Руководство для организации внутренних тренингов. Несколько организаций, играющих важную роль в развитии профессионального сообщества, обратили пристальное внимание на SWEBOK, координируют с ним свою работу и участвуют в его совершенствовании. Среди них — группа IEEE Computer Society по разработке профессиональной сертификации Certified Software Development Professional (CSDP), разработчики программы дистанционного обучения по программной инженерии Computer Society Distance Learning, комитет IEEE Computer Society по стандартам программной инженерии Software Engineering Standards Committee (SESC) и международная организация по стандартам в области системной и программной инженерии ISO/IEC JTC1/SC7.
Литература
- Guide to the Software Engineering Body of Knowledge, 2004 Version.
- An Assessment of Software Engineering Body of Knowledge Efforts. A Report to the ACM Council, May 2000.
SWEBOK на русском
Пробная версия SWEBOK была переведена на японский язык. В редакции 2004 года выражается надежда, что финальная версия также будет переведена на японский и, кроме того, на китайский и, возможно, другие языки. Есть ли среди них русский? Первую попытку изложить Руководство к своду знаний по программной инженерии на русском языке предпринял Сергей Орлик, менеджер по бизнес-решениям российского представительства компании Borland и известный специалист по программной инженерии и распределенным компьютерным архитектурам. Автор позиционирует свою работу как «общедоступный перевод с замечаниями и комментариями». Первоначально этот перевод SWEBOK с авторскими дополнениями планировался как часть книги по программной инженерии, которая, однако, постепенно трансформируется в более глобальный труд, посвященный ИТ-менеджменту и его краеугольным камням - разработке (системная и программная инженерия и модель CMMI), операционной деятельности (на основе ITIL/ITSM) и стратегическому и оперативному управлению ИТ (на базе COBIT). Сроки выхода книги в свет пока не называются, но с главами, включающими изложение SWEBOK, уже можно познакомиться на персональном блоге Орлика либо на сайте GitHub. Орлик подчеркивает, что данная работа является персональной профессиональной инициативой и не ассоциирована с какой-либо компанией или организацией.
Переводом SWEBOK на русский занимается также директор департамента стратегических технологий российского представительства компании Microsoft Владимир Павлов, участвующий, помимо этого, в проекте по переводу образовательного стандарта по программной инженерии Computing Curricula Software Engineering. На данный момент сделан черновой перевод SWEBOK, но понадобится еще немало времени на его окончательное редактирование. Завершить эту работу Павлов надеется в начале будущего года, после чего планируется выпустить печатную версию перевода и опубликовать его в Сети.
* На этапе анализа пробной версии