Инженерия программного обеспечения

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Новый Airbus A-380 использует довольно много ПО, чтобы создать современную кабину в самолете. Метод инженерии программного обеспечения позволил создать программное обеспечение самолёта, описываемое миллионами строк исходного кода.

Инженерия программного обеспечения (англ. Software Engineering) — приложение систематического, дисциплинного, измеримого подхода к развитию, оперированию и обслуживанию программного обеспечения, а также исследованию этих подходов; то есть, приложение дисциплины инженерии к программному обеспечению.

Программная инженерия[править | править исходный текст]

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

Дисциплина программной инженерии[2] включается в круг вопросов компьютинга[неизвестный термин] (англ. computing) и может рассматриваться как инженерная область, имеющая более тесные связи со своей базовой дисциплиной — компьютерными науками, — чем другие инженерные области. Среди других инженерных дисциплин она качественно выделяется нематериальностью программного обеспечения и дискретной природой его функционирования. Основываясь на математике и компьютинге, программная инженерия занимается разработкой систематических моделей и надежных методов производства высококачественного программного обеспечения, и данный подход распространяется на все уровни — от теории и принципов до реальной практики создания программного обеспечения, которая лучше всего заметна сторонним наблюдателям.

Термин "разработка программного обеспечения" является более общим и часто используемым, по сравнению с термином "программная инженерия" и не обязательно включает в себя парадигмы инженерии. Однако вряд ли можно сказать, что использование этого метода оказало сколько-нибудь ощутимый вклад в развитие реальной разработки ПО на протяжении уже более чем 40 лет.

Основные сведения[править | править исходный текст]

Термин «инженерия программного обеспечения» появился впервые в 1968 году на Конференции НАТО «Инженерия программного обеспечения» и предназначался, чтобы спровоцировать поиск решений для происходившего в то время «кризиса программного обеспечения». С тех пор, это переросло в профессию инженера по программному обеспечению (англ. Software engineer) и область исследований, посвящённых созданию программного обеспечения, более качественного, доступного, лучше поддерживаемого, и быстрее разрабатываемого.

Так как область все ещё относительно молода по сравнению со своими сестринскими областями инженерии, есть все ещё большая работа и дебаты вокруг того, что представляет собой «инженерия программного обеспечения», и удовлетворяет ли оно понятию инженерии. Этот спор развивается естественным образом, начавшись с попыток рассматривать создание программного обеспечения только как программирование. Разработка программного обеспечения — термин, иногда предпочитаемый практиками в промышленности, которые рассматривают разработку программного обеспечения как несравнимо более мощную и конструкционноёмкую[неизвестный термин] методологию в сравнении с процессом написания кода программистом.

Все же, несмотря на юность профессии, будущее области радужно, поскольку, Money Magazine и Salary.com оценили профессию разработчика программного обеспечения как лучшую работу в Америке в 2006 году.

Разработка программного обеспечения связана с дисциплинами информатики, управления проектами, и инженерии систем.

История[править | править исходный текст]

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

Первые языки программирования стали появляться в 1950-х годах, и это был ещё один важный шаг в абстракции. Основные языки, такие как Фортран, Алгол и Кобол были выпущены в конце 1950-х для решения научных, алгоритмических и бизнес-задач соответственно. Дейкстра написал свою известную статью, «Go To Statement Considered Harmful» в 1968 году, а Дэвид Парнас ввёл ключевое понятие модульности и скрытия информации в 1972 году, чтобы помочь программистам справляться со все более и более сложными программными системами. Системное программное обеспечение для управления аппаратным, названное «операционная система» было представлено компанией Unix в 1969 году. В 1967 году язык Симула ввел понятие объектно-ориентированной парадигмы программирования.

Эти достижения в области программного обеспечения были встречены большим прорывом компьютерной технике. В середине 1970-х годов был представлен микрокомпьютер, что позволило любителям получить собственный компьютер и писать свои программы для него. Это, в свою очередь привело к появлению персональных компьютеров (ПК) и Microsoft Windows. Также в середине 1980-х появляются такие понятия как жизненный цикл программного обеспечения в качестве некоторого консенсуса для централизованной разработки программного обеспечения. Конец 1970-х и начало 1980-х годов ознаменовались появлением нескольких новых симула-подобных объектно-ориентированных языков программирования, в том числе Smalltalk, Objective-C и C++.

Открытое программное обеспечение, появившееся в начале 1990-х утвердило децентрализованный стиль разработки ПО. Затем мировая паутина и стремительная популяризация интернета в середине 1990-х изменили программную инженерию ещё раз. Распределенные системы получили широкое распространение, как способ устройства систем, а также язык Java с его собственной виртуальной машиной, сделали ещё один шаг в абстракции. Сотрудничество программистов позволило появиться на свет документу, названному Agile Manifesto, который поддерживал облегчение процессов, что способствовало написанию более дешевых и регулярно обновляемых программ.

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

Профессия[править | править исходный текст]

Правовые требования к лицензированию и сертификации профессиональных программных инженеров отличаются во всем мире. В Великобритании, Британское общество вычислительной техники (англ. British Computer Society) выдаёт лицензии инженерам программного обеспечения и члены общества могут также стать «сертифицированными инженерами» (C.Eng), а в некоторых районах Канады, например, Альберта, Онтарио и Квебек, инженеры по программному обеспечению могут также быть «профессиональными инженерами» (P. Eng) или, далее, «магистрами информационных систем» (ISP), однако, нет никаких правовых требований для данных специализаций.

Работа[править | править исходный текст]

В 2004 году американское Бюро статистики труда, насчитало 760 840 инженеров по программному обеспечению, работающих в США. В тот же период времени было около 1,4 млн практиков, занятых в США в других смешанных инженерных специальностях. Благодаря относительной новизне, как формальная область изучения, программная инженерия часто преподается как часть учебной программы компьютерных наук, и многие программные инженеры имеют неплохие познания в информатике.

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

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

Большинство программных инженеров и программистов работает 40 часов в неделю, а около 15 процентов программных инженеров и 11 процентов программистов работали более 50 часов в неделю в 2008 году. Травмы в этих профессиях встречаются редко. Однако, как и в других профессиях, где надо проводить много времени перед компьютером, люди этих специальностей более подвержены к усталости глаз, болям в спине, а также болезням рук и запястий, таких как синдром запястного канала.

Сертификация[править | править исходный текст]

Институт инженерии программного обеспечения (англ. Software Engineering Institute) предлагает сертификацию по конкретным специальностям, таким как: безопасность, оптимизация процессов, а также архитектура программного обеспечения. Apple, IBM, Microsoft и другие компании финансируют[уточнить] собственные экзамены для сертификации. Многие IT-программы сертификации ориентированы на конкретные технологии, и управляется поставщиками этих технологий. Эти программы сертификации разработаны с учётом места, на которое будут наниматься люди, использующие эти технологии.

Расширение сертификации «Общие навыки разработки программного обеспечения» доступны через различные профессиональные сообщества. В 2006 году IEEE сертифицировала более 575 специалистов в области программного обеспечения, как «Certified Software Development Professional»(CSDP). В 2008 году они добавили сертификат начального уровня известный как «Certified Software Development Associate» (CSDA). У ACM была профессиональная программа сертификации в начале 1980-х, которая была прекращена из-за отсутствия интереса. В ACM также рассматривали возможность сертификации профессиональных программных инженеров в конце 1990-х годов, но в итоге решили, что такая сертификация не подходит для профессиональной производственной практики разработки программного обеспечения.

Британское общество вычислительной техники разработало юридически признанную профессиональную сертификацию, называемую «Chartered IT Professional» (CITP), и доступную только для полных членов (MBCS). Программные инженеры имеют право на членство в Институте инженерии и технологии (англ. Institution of Engineering and Technology) и могут соответственно получить статус дипломированного инженера. В Канаде, организация Canadian Information Processing Society[en] также разработала юридически признанную профессиональную сертификацию, названную «Information Systems Professional» (ISP). В Онтарио, Канада, Программные инженеры, которые заканчивают канадский Engineering Accreditation Board (CEAB), успешно сдавшие Professional Practice Examination (PPE) и, имеющие по крайней мере 48 месяцев опыта работы программным инженером, имеют право получить лицензию через PEO(«Профессиональные инженеры Онтарио») и могут стать Профессиональными инженерами (P.Eng).

Влияние глобализации[править | править исходный текст]

Первоначальное развитие аутсорсинга, а также относительно низкая стоимость человеческих ресурсов в развивающихся странах третьего мира привело к взрыву мыльного пузыря .com 1990-х годов. Это оказало негативное воздействие на многие аспекты профессии программного инженера. Например, некоторые студенты в развитых странах не хотели получать образование, связанное с программной инженерией из-за страха оффшорного аутсорсинга (импорт программных продуктов или услуг из других стран) и вытеснения иностранными рабочими. Хотя судя по статистике в настоящее время ничего не угрожает программной инженерии как таковой. Однако профессии, связанные с программированием кажется, действительно, были затронуты. Тем не менее, способность ловко использовать зарубежные рабочие ресурсы, улучшило общую работоспособность многих организаций. Когда североамериканцы будут уходить с работы, азиаты только прибывать на неё. Когда азиаты будут уходить с работы, европейцы будут на неё приезжать. Это обеспечивает непрерывную возможность иметь людей, следящих за критически важными бизнес-процессами 24 часа в сутки, без выплаты компенсации за сверхурочную работу и не лишая людей сна.

Образование[править | править исходный текст]

Знания в области программирования являются необходимым условием для того, чтобы стать программным инженером. В 2004 году IEEE Computer Society выпустил SWEBOK, который был опубликован в качестве стандарта ISO / IEC 19759:2004, описывающего объём знаний, который по их мнению, должен получить дипломированный программный инженер с четырёхлетним опытом. Многие люди входят в эту профессии, получив высшее образование или отучившись в профессионально-техническом училище. Стандартный учебный план для международной степени бакалавра программной инженерии был определен CCSE[en], и обновлен в 2004 году. Ряд университетов имеют программы обучения программных инженеров. С 2010 года насчитывалось 244 очных программы, 70 интернет-курсов, 230 программ для специалистов, 41 программ для ученых в этой области, а также 69 программ для сертификатов в Соединенных Штатах.

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

Сравнение с другими дисциплинами[править | править исходный текст]

Основные различия между программной инженерией и другими инженерными дисциплинами, по мнению некоторых исследователей, в различном уровне затрат на производство.[3]

Поддисциплины[править | править исходный текст]

Программная инженерия может быть разделена на десять поддисциплин. К ним относятся:

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

Родственные дисциплины[править | править исходный текст]

Программная инженерия является разделом информатики и связана с менеджментом. Она также считается частью общей системной инженерии.

Системная инженерия[править | править исходный текст]

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

Ссылки[править | править исходный текст]

Литература[править | править исходный текст]

  • Иан Соммервилл. Инженерия программного обеспечения, 2002.
  • Орлов С.А. Технологии разработки программного обеспечения: Разработка сложных программных систем Изд. 3-е, 2004.
  • Эрик Дж. Брауде. Технология разработки программного обеспечения, 2004.
  • Липаев, В.В. Программная инженерия. Методологические основы [Текст] : Учеб. / В. В. Липаев ; Гос. ун-т — Высшая школа экономики. — М. : ТЕИС, 2006. — 608 с. — 1000 экз. —

ISBN 5-7598-0424-3, УДК 004.41(075.8), ББК 32.973.26-018я73, Липаев, Высшая школа экономики, ТЕИС, 2006, pdf, экономика, программирование.

Примечания[править | править исходный текст]

  1. Curricula Recommendations Software Engineering SE 2004: Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering
  2. Computing Curricula A Volume of the Computing Curricula Series SE2004
  3. Sharing What We Know About Software Engineering // Proceedings of the FSE/SDP workshop on Future of software engineering research (FoSER '10). — ACM, 2010. — P. 439–442. — ISBN 978-1-4503-0427-6