Что такое инженерное программирование

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

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

Содержание

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

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

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

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

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

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

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

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

История

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

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

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

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

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

Профессия

Работа

В 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). Программные инженеры имеют право на членство в Институте Инженерии и Технологии и могут соответственно получить статус дипломированного инженера. В Канаде, Организация en:Canadian Information Processing Society также разработала юридически признанную профессиональную сертификацию, названную «Information Systems Professional» (ISP). [23] В Онтарио, Канада, Программные инженеры, которые заканчивают канадский 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 программ для сертификатов в Соединенных Штатах.

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

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

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

Поддисциплины

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

Родственные дисциплины

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

Инженерия систем

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

Внешние ссылки

См. также

Литература

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

Примечания

Полезное

Смотреть что такое «Инженерия программного обеспечения» в других словарях:

Разработка программного обеспечения — Когда Грейс Хоппер работала с компьютером Гарвард Марк II в Гарвардском университете, её коллеги обнаружили эту моль, застрявшую в реле и таким образом помешавшую работе устройства, после чего она отметила, что они «отлаживали»(debug) систему.… … Википедия

Производитель программного обеспечения — Разработка программного обеспечения (англ. software engineering, software development) это род деятельности (профессия) и процесс, направленный на создание и поддержание работоспособности, качества и надежности программного обеспечения, используя … Википедия

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

Разработчик программного обеспечения — (от англ. software developer) человек или организация, задействованный в разработке ПО не только с точки зрения дизайна и кодинга, но также выходя за рамки программирования или управления проектами, включая некоторые аспекты управления… … Википедия

Сопровождение программного обеспечения — Разработка программного обеспечения Процесс разработки ПО Шаги процесса Анализ • Проектирование • Программирование • Докумен … Википедия

Архитектура программного обеспечения — (англ. software architecture) это структура программы или вычислительной системы, которая включает программные компоненты, видимые снаружи свойства этих компонентов, а также отношения между ними. Этот термин также относится к… … Википедия

Тестирование программного обеспечения — Разработка программного обеспечения Процесс разработки ПО Шаги процесса Анализ • Проектирование • Программирование • Докумен … Википедия

Качество программного обеспечения — Разработка программного обеспечения Процесс разработки ПО Шаги процесса Анализ • Проектирование • Программирование • Докумен … Википедия

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

Проектирование программного обеспечения — Разработка программного обеспечения Процесс разработки ПО Шаги процесса Анализ • Проектирование • Программирование • … Википедия

Источник

Программная инженерия: как создают ПО?

Как научиться создавать идеальное ПО?

Информатик Сергей Зыков рекомендует, что читать о программной инженерии

Институт программной инженерии, являющийся, по сути дела, колыбелью программной инженерии, был создан сразу после исторической конференции НАТО 1968 года, когда было принято решение, что эта дисциплина необходима. Он разрабатывает стандарты программной инженерии не только для США, но и для всего мира. Поэтому книга Software Architecture in Practice является глобальным ответом на самые важные вопросы о том, как с систематической точки зрения следует разрабатывать программные комплексы.

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

Архитектура программного обеспечения

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

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

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

Критерии качества на ранней стадии развития ПО

Доцент Университета Иннополис Мохамад Кассаб о новых подходах к разработке программного обеспечения

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

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

Компиляторы для языков программирования

Профессор Университета Иннополис Евгений Зуев о «святом Граале» компьютерных наук

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

История, связанная с языками программирования и компиляторами, насчитывает уже больше шестидесяти лет. Несмотря на это, трудно сказать, что это направление в Computer Science является застывшим. С появлением новых задач, которые решают компьютеры, появляется потребность в создании новых языков программирования и, соответственно, в разработке компиляторов этих языков. Задача разработки компилятора представляет собой одновременно научную и инженерную задачу. И хотя структура многих компиляторов очень похожа, предпринимавшиеся еще 40 лет назад попытки создания универсального языка и, соответственно, универсального компилятора закончились неудачей по довольно простой причине: проблем, которые решает программное обеспечение, очень много, они различны различны по своей природе.

Интеграция компиляторов в среды программирования

Профессор Университета Иннополис Евгений Зуев о современных подходах к созданию компиляторов

Продвинутая архитектура компиляторов, состоящая из нескольких компонент, взаимодействующих друг с другом и способных взаимодействовать с другими элементами интегрированных сред, требует нового инженерного подхода при их разработке. В начале 2000-х годов в лаборатории факультета ВМК МГУ мы начали работать над новой архитектурой компилятора для языка C++. Этот компилятор задумывался как совокупность компонентов, доступ к которым мог бы быть организован независимо друг от друга. Компилятор не представлял собой единую монолитную программу, это была именно совокупность компонент, и эти компоненты были спроектированы таким образом, чтобы обеспечить легкое включение в интегрированную среду.

Разработчики, которые занимаются созданием интегрированных сред и компиляторов, сталкиваются с большим числом проблем. И чисто инженерные проблемы здесь составляют только часть. Дело в том, что наряду с очень динамичным развитием информатики достаточно большое количество решений в настоящее время остаются теми же, которые были приняты 20–30 лет назад. Очень многие программисты до сих пор используют обычные командные компиляторы, которые были созданы в то время. Эти компиляторы, будучи спроектированными по-старому, очень трудно интегрировать в современную среду, потому что они разрабатывались как большие, монолитные программы.

Моделирование интеграции веб-сервисов

Профессор Университета Иннополис Мануэль Маццара о пи-исчислениях и перспективах микросервисов

Пи-исчисление — это модель параллельных вычислений, у которой существуют десятки аналогов и постоянно появляются новые, но пальма первенства по-прежнему принадлежит ей. Создатель этой модели — всемирно известный ученый Робин Милнер, лауреат премии Тьюринга. Выбирая тему докторской диссертации, я решил изучать теорию параллелизма и, в частности, ее применение в веб-сервисах. В результате нашей работы с профессором Козимо Ланеве в Болонском университете мы спроецировали язык BPEL на модель пи-исчислений. Для каждого акта извлечения информации конструкция из одного языка должна быть переписана в аналогичную конструкцию другого языка. Более того, нужно доказать, что для внешнего наблюдателя результат такого перевода будет постоянным. То есть поведение первой программы должно быть внешне точно таким же, как поведение второй программы; обе они могут работать одновременно, выполняя абсолютно одинаковые задания, что означает единство алгоритмов их работы и исполняемых функций.

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

«“Интернет вещей” может повлиять на будущее программного обеспечения»

Интервью с профессором Университета Иннополис Алешем Живковичем об этапах разработки программ, проблемах IT-индустрии и трендах в области создания ПО

— Что входит в процесс разработки программного обеспечения? Какие у этого процесса стадии и какие специалисты в него обычно вовлечены?

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

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

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

— Как наука повлияла на методы создания программного обеспечения?

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

Источник

Понравилась статья? Поделиться с друзьями:

Не пропустите наши новые статьи:

  • Что такое инженерия программного обеспечения
  • Что такое инженер программист
  • Что такое индиго программа
  • Что такое индивидуальная программа реабилитации
  • что такое индивидуальная программа реабилитации инвалида

  • Операционные системы и программное обеспечение
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии