Программная инженерия

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис
Инженер в тайваньском офисе Mozilla

Програ́ммная инжене́рия (англ. software engineering) — приложение систематического, дисциплинированного, измеримого подхода к разработке, функционированию и сопровождению программного обеспечения, а также исследованию этих подходов; то есть, приложение дисциплины инженерии к программному обеспечению (ISO/IEC/IEEE 24765:2017)[1].

Основные сведения

Термин «программная инженерия» появился впервые в 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-х, породило децентрализованный стиль разработки ПО.

Профессия

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

Работа

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

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

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

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

Сертификация

Институт программной инженерии предлагает сертификацию по конкретным специальностям, таким как: безопасность, оптимизация процессов, а также архитектура программного обеспечения. 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[англ.] также разработала юридически признанную профессиональную сертификацию, названную «Information Systems Professional» (ISP). В Онтарио, Канада, Программные инженеры, которые заканчивают канадский Engineering Accreditation Board (CEAB), успешно сдавшие Professional Practice Examination (PPE) и, имеющие по крайней мере 48 месяцев опыта работы программным инженером, имеют право получить лицензию через PEO(«Профессиональные инженеры Онтарио») и могут стать Профессиональными инженерами (P.Eng).

Образование

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

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

Сравнение с другими дисциплинами

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

Примечания

  1. ISO/IEC/IEEE 24765:2017 Systems and software engineering — Vocabulary. Дата обращения: 20 апреля 2019. Архивировано 20 апреля 2019 года.
  2. Young, Michal; Faulk, Stuart. 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. — doi:10.1145/1882362.1882451.. — «The essential distinction between software and other engineered artifacts has always been the absence of fabrication cost. In conventional engineering of physical artifacts, the cost of materials and fabrication has dominated the cost of design and placed a check on the complexity of artifacts that can be designed. When one bottleneck is removed, others appear, and software engineering has therefore faced the essential challenges of complexity and the cost of design to an extent that conventional engineering has not. Software engineering has focused on issues in managing complexity, from process to modular design to cost-effective verification, because that is the primary leverage point when the costs of materials and fabrication are nil .».

Литература

  • Соммервилл И.. Инженерия программного обеспечения. — Издательство Вильямс, 2002. — 624 с. ISBN 5-8459-0330-0
  • Рекомендации по преподаванию программной инженерии и информатики в университетах / Пер. с англ. Н. И. Бойко, М. Е. Зверинцева и др. — Интернет-университет Информационных технологий, 2007—472 с. ISBN 978-5-9556-0105-9
  • ГОСТ Р ИСО/МЭК 12207-2010 Информационная технология. Системная и программная инженерия. Процессы жизненного цикла программных средств.
  • Батоврин В. К. Толковый словарь по системной и программной инженерии. — М.: ДМК Пресс. — 2012. — 280 с. ISBN 978-5-94074-818-2
  • Брукс Ф. Мифический человеко-месяц, или Как создаются программные системы = The mythical Man-Month: Essays on Software Engineering. — Символ-Плюс, 2010. — 304 с. — (Профессионально). — 1500 экз. — ISBN 5-93286-005-7.
  • Йордан Э. Путь камикадзе. Как разработчику программного обеспечения выжить в безнадёжном проекте. — М.: Лори, 2012. — 290 с. ISBN 978-5-85582-227-3
  • Мацяшек Л. А., Лионг Б. Л. Практическая программная инженерия на основе учебного примера / пер. с англ. А. М. Епанешникова, В. А. Епанешникова. — Издательство Бином Лаборатория знаний, 2012. — 956 с. ISBN 978-5-94774-488-0

Ссылки