Skip to content

27.07.2011

«Программная инженерия» — что же это?

Буквально вчера нашел в интернет журнал «Программная инженерия», а так как хочется знать как можно больше о своей возможно будущей специальности скачал 1 номер (http://novtex.ru/pi.html - официальный сайт редакции), в котором нашел достаточно интересную статью, часть из которой находится ниже:

«Более 20 лет использование терминов Computer Science и Software Engineering было полностью делом индивидуального вкуса. Например, когда в 1996 г. создавалась новая кафедра в СПбГУ, которой я руковожу до сих пор, она по-русски называлась «Кафедра системного программирования», а по английски – «Software Engineering Chair». Уже тогда я хотел подчеркнуть существенно большую практическую направленность новой кафедры по отношению к «Кафедре математического обеспечения ЭВМ», первым выпускником которой я был. Кстати, именно в момент создания новой кафедры старая была переименована в «Кафедру информатики» (Computer Science).
С информатикой, т.е. с теоретическим программированием, вроде бы все было ясно. Уже в 1991 г. была опубликована первая международная программа обучения этой науке [4], в 2001 г. эта программа была пересмотрена [5]. По крайней мере, все основные определения были зафиксированы, сегодня смешно трактовать информатику не так, как ее определяет международный стандарт.
С программной инженерией все было сложнее. Многие ее направления, особенно связанные с планированием, бюджетированием и управлением воспринимались «в штыки» университетским математическим сообществом. Приходилось буквально прятать эти предметы в спецкурсы с более общими названиями, примерно так же, как это делали генетики ЛГУ за 50 лет до этого. Инженерия не может изучаться в классическом университете! Ей место в технических вузах!
Я прятался за термином «технология программирования» [6], даже как то раз поплакался Д. Кнуту. Его горячая поддержка мне сильно помогла.В 2004 г. была, наконец, опубликована международная программа обучения программной инженерии [7], в которой, так же как и в программе по информатике, были даны соответствующие определения:
—* установление и использование правильных инженерных принципов (методов) для экономичного получения надежного и работающего на реальных машинах программного обеспечения [8];
*— программная инженерия является такой формой инженерии, которая применяет принципы информатики и математики для получения рентабельных решений в области программного
обеспечения;
*— применение систематического, дисциплинированного, поддающегося количественному определению подхода к разработке, эксплуатации и сопровождению программного обеспечения [9].
Эти определения можно трактовать в чуть более упрощенном виде: программная инженерия –
это наука, которая изучает вопросы создания, сопровождения и внедрения программного обеспе
чения с заданным качеством, в заданные сроки и в рамках заранее определенного бюджета.

Международные образовательные стандарты

Кажется, основные международные организации IEEE и ACM, имеющие отношение к компьютерам и программированию, всерьез взялись за стандартизацию. В 2005 г. был опубликован стандарт Computing [10], включающий в себя:
— — Computer Engineering (Разработка компьютеров);
— — Computer Science (Информатика);
— — Information Systems (Информационные системы);
— — Information Technology (Информационные технологии);
— — Software Engineering (Программная инженерия).
В этом стандрате достаточно точно и ясно описано, что следует понимать под каждой из пяти перечисленных наук.
Понятно, что «Разработка компьютеров» (стандарт опубликован в 2004 г.) ориентированна тех, кто придумывает и создает новые компьютеры для самых разных применений. В наш век FPGA, VHDL и Verilog этой работой все больше занимаются математики, хотя роль инженеров по прежнему велика.
Пожалуй, стандарт по информатике наиболее полный и проработанный. В каком то смысле он является базовым, поскольку на него ссылаются и используют другие стандарты. В 2008 г. он был
пересмотрен, но, на мой взгляд, изменения не так существенны, как в 2001 г. по сравнению с
1991 г.
Стандарт «Информационные системы» (опубликован в 2002 г., пересмотрен в 2010 г.) чем то
похож на то, что в советские времена мы называли АСУ (автоматические системы управления).
Стандарт «Информационные технологии» (опубликован в 2006 г., пересмотрен в 2008 г.) для
меня лично оказался самым загадочным, по крайней мере, под этим термином я понимал не
что другое. Это стандарт для тех, кто строит компьютерные сети, используя маршрутизаторы,
прокси серверы, firewalls и т.д. В России таких специалистов называют системными админист
раторами, а большие организации – системными интеграторами.
Поскольку программная инженерия является основной для данной статьи, разберем стандарт,
опубликованный в 2004 г., подробнее. В стандарте Software Engineering Curricula 2004 [11] рассказана история создания этого документа, основные принципы и цели обучения. Я настоятельно рекомендую своим студентам полистать стандарт, но вовсе не с целью узнать программы отдельных
курсов, это, скорее, нужно преподавателям. На мой взгляд, самая интересная часть стандарта –
это короткие эссе, в которых объясняется, что общего и разного между программной инженери
ей и традиционной инженерией, между программной инженерией и информатикой, между информатикой и математикой. Что то я не помню в российских образовательных стандартах упоминаний о важности участия в профессиональных сообществах, соблюдения профессиональной этики, умения работать в коллективах,не создавая конфликтов, и т.д. Именно благодаря участию в переводе текста стандарта на русский язык я познакомился с классификацией Блума (знание, понимание, применение), узнал о такой полезной вещи, популярной на Западе, но, к сожалению, не у нас, как SWEBOK [12] – что должен знать и уметь программный инженер через 4 года после окончания вуза.
Итак, программная инженерия включает в себя следующие области знаний:
—* основы компьютинга (основы информатики, технологии и средства разработки, формальные методы);
—* основы математики и инженерии (в том числе инженерная экономика ПО);
—* профессиональная практика (работа в команде, навыки коммуникации, этика);
*— основы моделирования (анализ, работа с требованиями, спецификации);
*— проектирование ПО (концепции и стратегии проектирования, проектирование человеко-машинного интерфейса, средства поддержки проектирования);
* верификация и аттестация ПО (основы, рецензия кода, тестирование, оценка пользователь
ского интерфейса, анализ проблем);
*— эволюция ПО (на мой взгляд, совершенно справедливо в стандарте говорится об эволюции,
а не о сопровождении ПО);
*— процессы разработки ПО;
—* качество ПО (стандарты качества ПО, процессы обеспечения качества ПО, процесса, продукта);
*— управление программными проектами (концепции менеджмента, планирование и отслеживание выполнения проектов, управление персоналом, управление конфигурацией ПО).
Каждая из перечисленных 10 областей подробно расписана, снабжена примерной оценкой
временных затрат, приведены программы соответствующих курсов, часто в нескольких вариан
тах.

СПИСОК ЛИТЕРАТУРЫ

1. Китов А.И., Криницкий Н.А. Электронные цифровые машины и программирование. Изд. второе. М.:
Физматгиз, 1961.
2. Терехов А.Н. Как я общался с А.П. Ершовым в формальной и неформальной обстановке // Сб. тр.
конф. Перспективы систем информатики. Новосибирск, 2010.
3. Naur P., Randell B. (Eds.). Software Engineering // Proc. of Report on a Conference Sponsored by the NATO Science Committee (7–11 October 1968). Brussels. Scientific Affairs Division. NATO. 1969.
4. Computing Curricula 1991. New York: ACM Press,1991.
5. Computing Curricula 2001. Computer Science, 2001.
6. Терехов А.Н. Технология программирования. М.:ИНТУИТ:БИНОМ, 2007.
7. Software Engineering 2004: Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering.
8. Bauer F.L. Software Engineering // Information Processing. N 71. 1972.
9. IEEE STD 610.12–1990. IEEE Standard Glossary of Software Engineering Terminology // IEEE Computer Society. 1990.
10. http://www.acm.org/education/education/curric_vols/CC2005 March06Final.pdf.
11. Рекомендации по преподаванию программной инженерии и информатики в университетах. М.:
ИНТУИТ, 2007.
12. Software Engineering Coordinating Committee. Guide to the Software Engineering Body of Knowledge. IEEE Computer Society, 2001.
13. Терехов А.Н., Терехов А.А. Computing Curricula: Software Engineering и российское образование // Открытые системы. 2006. № 8.
14. Terekhov A., Terekhova K. The Economics of Hiring and Staff Retention for an IT Company in Russia // Proc. of 4th International Conference SEAFOOD. 2010.
15. Гагарский Р.К. Программа подготовки специалистов в IT компании // Системное программирова
ние. Вып. 3. Сб. статей. СПб: Изд. СПбГУ, 2008.»

журнал «Программная инженерия» № 1, 2010, часть статьи А.Н.Терехова «Что такое программная инженерия»

 

Comments are closed.