Основы программной инженерии

Понятие производства программного обеспечения и принципы его разработки. Основные направления интенсивного развития технологий программирования и способы повышения их эффективности. Стандарты программной инженерии. Кодекс этики программной инженерии.

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 11.10.2013
Размер файла 33,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

1. Программная инженерия как наука

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

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

50-е годы 20 века. Мощность компьютеров первого поколения была невелика, а программирование для них велось, в основном, в машинном коде. Решались, главным образом, научно-технические задачи (счет по формулам). Задание на программирование содержало, как правило, достаточно точную постановку задачи. Этап проектирования практически отсутствовал, почти сразу приступали к составлению программы по заданию, при этом часто задание несколько раз изменялось, что сильно увеличивало время процесса разработки. Минимальная документация оформлялась уже после того, как программа начинала работать. Тем не менее, именно этот период считается временем зарождения концепции модульного программирования, ориентированной на преодоление трудностей программирования в машинном коде. Тогда же появились первые языки программирования высокого уровня.

В 60-е годы можно было наблюдать бурное развитие и широкое использование языков программирования высокого уровня (Алгол 60, Фортран, Кобол и др.), которые, казалось бы, должны были решить все проблемы, возникающие в процессе разработки больших программ. Однако эти надежды не оправдались. В результате повышения мощности компьютеров и накопления опыта программирования на языках высокого уровня быстро росла сложность решаемых задач. Стало понято, что качество программ и эффективность процесса разработки зависит не только от выбранного языка программирования, но и от того, как мы программируем. Это было уже началом серьезных размышлений над методологией и технологией программирования. Кроме того, при создании больших программных систем все шире стала использоваться коллективная разработка, которая поставила ряд серьезных технологических проблем.

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

обоснование и широкое внедрение нисходящей разработки и структурного программирования,

развитие абстрактных типов данных и модульного программирования,

исследование проблем обеспечения надежности и мобильности программных средств (ПС),

создание методики управления коллективной разработкой ПС,

появление инструментальных систем поддержки программирования (программных инструментов).

80-е годы характеризуются широким внедрением персональных компьютеров во все сферы человеческой деятельности и тем самым расширением контингента пользователей программных средств. Это привело к бурному развитию пользовательских интерфейсов и созданию четкой концепции качества ПО. Развиваются методы и языки спецификации ПС. Начинается бурный процесс стандартизации технологических процессов и, прежде всего, документации, создаваемой в этих процессах. Выходит на передовые позиции объектный подход к разработке программ. Создаются различные инструментальные среды разработки и сопровождения ПС. Развивается концепция компьютерных сетей.

90-е годы 20 века знаменательны широким охватом всего человеческого общества международной компьютерной сетью, персональные компьютеры стали подключаться к ней как терминалы. Это поставило ряд проблем (как технологического, так и юридического и этического характера) регулирования доступа к информации. Остро встала проблема защиты компьютерной информации и передаваемых по сети сообщений. Стали бурно развиваться технологии, основанные на применении CASE-средств для разработки ПО (CASE-технологии), и связанные с ними формальные методы спецификации программ. Начался решающий этап полной информатизации и компьютеризации общества

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

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

Однако уже с 70-х годов 20-го века все увереннее заговорили о кризисе разработки ПО. К середине 90-х годов проблема обострилась настолько, что в США было предпринято несколько попыток анализа состояния индустрии ПО. Эти исследования привели к одному и тому же выводу: процент успешных проектов по созданию программного обеспечения чрезвычайно низок. Выводы заключались в следующем:

· Разработка ПО по-прежнему остается непредсказуемой. Очень незначительное число проектов (порядка 20-25%) по созданию программного обеспечения оказываются успешными и укладываются в первоначальные бюджетные и временные рамки.

· Управление определяет успех или неудачу программных проектов в большей степени, чем технологические преимущества.

· Количество переделанного или «выброшенного на свалку» ПО показывает незрелость процесса его разработки.

· и т.д.

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

Понимая, что компьютер - это знамение будущего и самый бурно развивающийся бизнес в современном мире, две фирмы решили вступить в конкурентную борьбу на этом поприще. Фирма А - одна из крупных американских корпораций, уже занимающих лидирующее положение в электронике. Она располагает сотнями миллионов долларов для того, чтобы вложить их в исследование рынка, привлечение лучших технических специалистов и сбытовиков, в строительство новейших, хорошо оборудованных заводов. Фирма Б - это всего лишь два человека, бросивших когда-то колледж. Весь их опыт в электронике фактически сводится к продаже «голубых карточек» - устройств для незаконных бесплатных междугородних разговоров. Перед началом разработки своей машины они и гроша не затрачивают на исследования. Весь их начальный венчурный капитал составляет 1300 долларов, полученных от продажи микроавтобуса «Фольксваген» и карманного калькулятора. Их штаб-квартира (и вообще их единственное помещение) располагается в спальне одного их партнеров, а сборочный «конвейер» - в гараже. Кто окажется успешнее - фирма А или фирма Б? Очевидный ответ: фирма А.

Фирмой А в данной ситуации оказалась «Radio Corporation of America» (RCA). Ее компьютеры никому не известны, потому что в 1976 году, потеряв более 300 млн. долларов, она свернула свое компьютерное производство. Фирма Б - это «Apple Computer Products», которая в 1982 году, всего лишь через 6-ть лет после начала деятельности, установила рекорд, войдя в список 500 самых преуспевающих фирм, публикуемый журналом «Форчун».

По этому поводу Фредерик Брукс в середине 70-х годов писал: «Время от времени в газетах можно прочесть о том, как два программиста в переоборудованном гараже написали очень важную программу, превосходящую лучшие образцы, созданные большими коллективами. И каждый программист готов поверить в эти басни, поскольку знает, что может написать любую программу с гораздо большей скоростью, чем 1000 операторов в год, составляющие официальную производительность промышленных групп.

Но почему же тогда все производственные коллективы программистов не заменить одержимыми дуэтами из гаражей? Для этого нужно посмотреть, что именно там производится».

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

При пересечении вертикальной границы, программа становится компонентом программного комплекса. Это набор взаимодействующих программ, согласованных по функциям и по формату так, что их объединение представляет собой единое средство для решения больших задач. Чтобы стать частью программного комплекса, программа должна быть написана так, чтобы каждый вход и выход по синтаксису и семантике соответствовал точно определенным сопряжениям (интерфейсам). Кроме того, программа должна быть спроектирована таким образом, чтобы использовать заранее оговоренный бюджет ресурсов: объем памяти, устройства ввода/вывода, процессорное время. И, наконец, программа должна быть отлажена во всех возможных сочетаниях с другими компонентами комплекса. Эта отладка должна быть очень большой по объему, ведь число вариантов растет экспоненциально. Она требует больших затрат времени, ибо появляются очень тонкие ошибки из-за непредвиденных взаимодействий отлаживаемых частей. Компонент программного комплекса стоит, по крайней мере, в три раза больше, чем отдельная программа с той же функцией. Ее стоимость может быть выше, если система имеет много компонентов.

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

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

Во-первых, программирование существенным образом отличается от сферы материального производства. Его основу составляет творчество, а его результатом являются продукты мыслительной деятельности - артефакты. Разработку ПО иногда называют изобретением по требованию. Как писал Ф.Брукс: «Программист подобно поэту, работает почти непосредственно с чистой мыслью. Он строит свои замки в воздухе и из воздуха, творя силой воображения. Однако эта податливость «материала» таит свои проблемы. Во-первых, необходима безошибочная точность действий: одна ошибка и чудо не состоялось!»

Самым лучшим качеством ПО является его гибкость: запрограммировать можно практически все что угодно. Худшим качеством ПО также является его гибкость. Это самое «практически все что угодно» сильно затрудняет планирование, мониторинг и управление разработкой ПО.

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

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

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

Ну и, наконец, последняя горесть - продукт, на который было положено столько труда, оказывается устаревшим в момент своего завершения (или даже раньше). Коллеги и конкуренты уже работают над новыми идеями.

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

Таким образом, при разработке программного обеспечения следует учитывать, что:

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

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

· технологии и средства проектирования и разработки ПО развиваются очень быстрыми темпами. Это оказывает существенное влияние на производительность, стоимость, качество и риски при производстве конечного продукта;

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

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

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

В толковом словаре понятие «инженерия» определяется как «инженерное дело, творческая техническая деятельность». Исходя из этого, программную инженерию можно рассматривать как инженерную деятельность в программировании.

Программная инженерия (Software Engineering) является отраслью компьютерной науки (Computer science) и изучает вопросы построения компьютерных программ, обобщает опыт программирования в виде комплекса общих знаний и правил регламентации инженерной деятельности разработчиков программного обеспечения.

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

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

Действительно, в реализации больших программных проектов помимо программистов, участвуют:

· менеджеры, которые планируют и управляют проектом, отслеживают сроки и затраты;

· технологи, которые определяют инженерные методы и стандарты, регламентирующие и регулирующие процесс разработки программных средств и систем;

· тестировщики, которые проверяют правильность выполнения процессов, сбор данных при тестировании и оценку качества компонентов и системы в целом;

· разработчики документации всех видов (инструкций, руководств, справочных систем, материалов для обучения пользователей и пр.).

· и др.

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

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

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

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

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

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

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

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

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

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

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

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

· основные концепции управления проектами;

· жизненный цикл программного обеспечения;

· планирование и мониторинг проекта;

· оценивание программного обеспечения;

· анализ рисков;

· управление качеством;

· формирование команды проекта.

2. Стандарты программной инженерии

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

Среди всего многообразия стандартов принято выделять следующие основные типы.

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

В IT сфере известны стандарты, разработанные такими фирмами как Microsoft, Intel, IBM.

Отраслевые стандарты действуют в пределах организаций некоторой отрасли (министерства). Например, СНИП - строительные нормы и правила. Разрабатываются с учетом требований мирового опыта и специфики отрасли. Являются, как правило, обязательными для отрасли. Подлежат сертификации.

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

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

Существует определенное количество организаций, специализирующихся на разработке и сопровождении стандартов. Наиболее представительной и влиятельной из них является международная организация по стандартизации ISO (The International Standards Organization), которая работает в сотрудничестве с международной электротехнической комиссией IEC (The International Electrotechnical Commission). Они разрабатывают стандарты практически во всех областях деятельности, в том числе и в сфере информационных технологий. Все утвержденные ими совместно стандарты имеют идентификатор, который состоит из префикса ISO/IEC, серийного номера стандарта и даты выпуска, например: ISO/IEC 12207: 1995 - 08-11.

Большинство национальных комитетов по стандартизации признает стандарты ISO и входит в ее состав. В случае принятия решения о введении стандартов ISO/IEC на территории какого-либо государства национальные органы стандартизации, как правило, проводят их адаптацию к национальным условиям и особенностям применения (учет национальных алфавитов, метрических систем измерения, валютных знаков и т.п.).

Еще одним источником стандартов являются профессиональные объединения, в частности для программной инженерии - это IEEE Computer Society. На данный момент времени существует свыше 300 стандартов IEEE для программной инженерии, значительная часть которых принимается во внимание широким кругом разработчиков программных систем. Практика показывает, что большинство стандартов программной инженерии исторически появляются как стандарты IEEE, а со временем, после испытания опытом использования, вносятся в стандарты ISO/IEC.

Большой вклад в разработку стандартов в области программной инженерии вносят также такие организации как:

ACM - Association for Computing Machinery - Ассоциация по вычислительной технике. Всемирная научная и образовательная организация в области вычислительной техники, занимающаяся также и разработкой образовательных стандартов.

SEI - Software Engineering Institute - Институт Программной Инженерии, который занимается исследованиями в области программной инженерии с упором на разработку методов оценки и повышения качества ПО. SEI разрабатывает стандарты в области оценки качества программного обеспечения и зрелости организаций, ведущих разработку ПО.

В области проектного менеджмента и повышения квалификации специалистов по управлению проектами признанным лидером является PMI - Project Management Institute - Международный Институт Проектного Менеджмента (Управления Проектами).

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

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

Примером таких стандартов могут служить проектные решения консорциума Object Management Group (OMG) по управлению транзакциями, которые затем были утверждены комитетом ISO, язык UML фирмы Rational Rose, ставший стандартом моделирования артефактов программной инженерии, язык JAVA, активно использующийся в создании ПО, и др.

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

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

Объектами стандартизации в программной инженерии являются:

· процессы разработки ПО;

· продукты разработки;

· ресурсы, которые используют процессы для создания программного продукта.

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

При написании стандартов в программной инженерии отдельные группы разработчиков также создают:

· терминологию,

· общие рекомендации,

· принципы действий,

· стандартизированные элементы,

· рекомендации для прикладных применений,

· рекомендации относительно инструментов и методов разработки,

· планы управления качеством,

· планы валидации и верификации,

· и др.

Так как знания разработчиков программного обеспечения отличаются большим разнообразием, являются несогласованными и разнородными, ориентированными на разные предметные области, мировая компьютерная общественность пришла к необходимости систематизировать знания в области программной инженерии, создав ядро профессиональных знаний SWEBOK (Software Engineering Body of Knowledge). Для этого был создан международный комитет при американском объединении компьютерных специалистов ACM и институте инженеров по электронике и электротехнике IEEE Computer Society, в который вошли специалисты мирового уровня в области информатики и разработки ПО. Ядро SWEBOK включает сумму знаний, распределенных по следующим 10 специализированным областям программной инженерии:

1. Software Requirements - требования к ПО.

2. Software Design - проектирование ПО.

3. Software Construction - конструирование ПО.

4. Software Testing - тестирование ПО.

5. Software Maintenance - сопровождение ПО.

6. Software Configuration Management - управление конфигурацией.

7. Software Engineering Management - управление IT проектом.

8. Software Engineering Process - процесс программной инженерии.

9. Software Engineering Tools and Methods - методы и инструменты.

10. Software Quality - качество ПО.

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

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

Для менеджера программного проекта также будет полезно ознакомиться со стандартом PMI PMBOK. PMBOK - аббревиатура от Project Management Body of Knowledge - Свод знаний по управлению проектами. PMBOK представляет собой стандарт, развиваемый PMI. Последняя версия стандарта вышла в 2004 году. Она содержит описания состава знаний по следующим 9 разделам управления проектами:

1. Управление интеграцией - Project Integration Management.

2. Управление содержанием - Project Scope Management.

3. Управление временем - Project Time Management.

4. Управление затратами - Project Cost Management.

5. Управление рисками - Project Risk Management.

6. Управление персоналом - Project Personnel Management.

7. Управление коммуникациями - Project Communication Management.

8. Управление закупками - Project Procurement Management.

9. Управление качеством - Project Quality Management.

Основной целью руководства PMBOK является выделение лучших практик (best practices) в области проектного менеджмента, которые могут быть применимы к большинству проектов. Термин «лучшая практика» означает, что правильное применение этих навыков, инструментов и методов способно повысить вероятность успеха для широкого диапазона различных проектов. Однако это не значит, что описываемые знания должны одинаковым образом применяться во всех проектах. Возможность и целесообразность их использования в каждом конкретном случае определяется командой управления проектом.

3. Кодекс этики программной инженерии

Разработчики программного обеспечения, как и специалисты других профессий, работают в определенном правовом и социальном окружении, находятся под действием, международных, национальных и местных законов. В своей деятельности они прежде всего должны руководствоваться общепринятыми морально-этическими принципами. Однако помимо этого для них определены еще и специфические профессиональные нормы поведения, которые зафиксированы в кодексе этики и профессиональной практики программной инженерии (IEEE-CS/ACM Software Engineering Code of Ethics and Professional Practices), разработанном такими профессиональными объединениями как ACM, IEEE и CS - British Computer Society - Британское компьютерное общество.

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

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

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

Восемь принципов кодекса касаются соответственно:

1. согласования профессиональной деятельности с интересами общества;

2. взаимоотношений между клиентом, работодателем и исполнителем разработки;

3. достижения соответствия качества продукта лучшим профессиональным стандартам;

4. честности и независимости при профессиональных оценках;

5. соблюдения этических норм в менеджменте и в сопровождении разработок;

6. поддержки становления профессии в соответствии с кодексом этики;

7. соблюдения этических норм во взаимоотношениях с коллегами;

8. усовершенствования специальности.

Каждый из приведенных принципов имеет детальные пояснения относительно различных аспектов его соблюдения.

Кодекс этики: 8 принципов

Программные инженеры будут действовать соответственно общественным интересам.

– Программные инженеры будут действовать в интересах клиентов и работодателя, соответственно общественным интересам.

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

– Программные инженеры будут добиваться честности и независимости в своих профессиональных суждениях.

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

– Программные инженеры будут улучшать целостность и репутацию своей профессии соответственно с интересами общества.

– Программные инженеры будут честными по отношению к своим коллегам и будут всячески их поддерживать.

Программные инженеры в течение всей своей жизни будут учиться практике своей профессии и будут продвигать этический подход к практике своей профессии.

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

Литература

1. Иванова Г.С. Технология программирования.- М.: из-во МГТУ им. Н.Э. Баумана, 2002.

2. Вендров А.М. Проектирование программного обеспечения экономических информационных систем. - М.: Финансы и статистика, 2000.

3. Липаев В.В. Программная инженерия: методологические основы. - М.: ТЕИС, 2006.

4. Костров А.В. Основы информационного менеджмента. - М.: Финансы и статистика, 2008.

5. Орлов С.А. Технологии разработки программного обеспечения. - СПб.: Питер, 2002.

6. Фредерик Брукс. Мифический человеко-месяц или как создаются программные системы. Пер. с англ. - СПб.: Символ, 2009.

7. Уокер Ройс. Управление проектами по созданию программного обеспечения. Пер. с англ. - М.: Лори, 2007.

Размещено на Allbest.ru

...

Подобные документы

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

    презентация [870,6 K], добавлен 12.11.2014

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

    реферат [2,2 M], добавлен 25.12.2017

  • Цели и задачи программной инженерии. Понятие программного обеспечения. Шесть принципов эффективного использования программного обеспечения. Виды программного обеспечения: общесистемное, сетевое и прикладное. Принципы построения программного обеспечения.

    курсовая работа [30,4 K], добавлен 29.06.2010

  • История развития программирования от 50-х годов ХХ века до сегодняшних дней. Характеристика понятия и основных задач программной инженерии как отрасли компьютерной науки. Ядро профессиональных знаний SWEBOK. Свод знаний по управлению проектами PMI PMBOK.

    презентация [86,8 K], добавлен 14.08.2013

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

    презентация [3,2 M], добавлен 19.09.2016

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

    дипломная работа [1,4 M], добавлен 02.03.2010

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

    курсовая работа [32,3 K], добавлен 20.10.2009

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

    курсовая работа [31,2 K], добавлен 02.08.2015

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

    дипломная работа [882,3 K], добавлен 18.01.2014

  • Понятие программной надёжности объекта. Основные проблемы исследования надёжности программного обеспечения. Аппаратурные отказы. Среднее время безотказной работы. Математические модели. Уравнение для определения значения начального числа ошибок.

    презентация [492,2 K], добавлен 08.11.2013

  • Общее понятие, виды энергоресурсов и методы их измерения. Системы и программы для учета потребления энергоресурсов. Выбор среды разработки и требования, предъявляемые программной системе. Краткий обзор среды Lazarus. Проектирование программной системы.

    дипломная работа [3,6 M], добавлен 11.09.2014

  • Разработка приложения "Калькулятор" для подсчитывания количества символов или букв в арабском тексте. Проектирование программной системы, определение функциональных требований к приложению. Алгоритм разработки модульной структуры мобильного приложения.

    презентация [853,9 K], добавлен 08.04.2019

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

    курсовая работа [5,2 M], добавлен 30.06.2014

  • Основные функции автоматизированной системы "Решатель математических формул". Требования к техническим средствам, информационной и программной совместимости. Стратегии конструирования программного обеспечения. Проектирование, разработка программного кода.

    курсовая работа [600,0 K], добавлен 25.02.2012

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

    курсовая работа [381,6 K], добавлен 13.08.2013

  • Основание и назначение программного кода для работы распределительной станции FESTO, требования к информационной и программной совместимости. Параметры технических средств, язык программирования AWL. Расчет затрат и экономической эффективности проекта.

    дипломная работа [2,4 M], добавлен 11.03.2012

  • Программные средства для работы с моделями. Разработка проекта информационной системы катка. Определение стратегического и тактического направления проекта. Визуальная часть программного обеспечения. Основные этапы программной реализации проекта.

    курсовая работа [2,3 M], добавлен 26.10.2012

  • Разработка программного обеспечения. Подтверждение соответствия программного продукта государственным стандартам в области информационных технологий. Оформление Сертификата соответствия. Оценка, проводимая экспертами. Экспертиза программной документации.

    контрольная работа [24,5 K], добавлен 06.11.2013

  • Запросы клиента по области возможных запросов к серверу. Программа для прогнозирования поведения надежности программного обеспечения на основе метода Монте-Карло. Влияние количества программ-клиентов на поведение программной системы клиент-сервера.

    контрольная работа [705,3 K], добавлен 03.12.2010

  • Особенности документирования программных средств, стадии разработки продуктов. Классификация обеспечивающего пакета документов. Сущность и основные недостатки Единой системы программной документации. Классификация стандартов, Гост 19.102-77 ЕСПД.

    презентация [64,8 K], добавлен 22.03.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.