Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Разработка сложных программных систем

, ,
, Синицын С. В. «НИЯУ «МИФИ»

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

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

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

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

НЕ нашли? Не то? Что вы ищете?

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

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

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

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

В различных отраслях выработаны свои оригинальные подходы к построению процессов разработки критичного программного обеспечения, выраженные в виде документов. Например, DO-178B[1] в области гражданской авиации или ГОСТ Р–51904[2] для разработки встроенных программных систем. Данные документы отражают и требования к процессу разработки программного обеспечения, и требованию к составу и качеству проектной документации, и ограничения на проектные решения.

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

Таким образом, разработка критичного программного обеспечения обладает некоторой особенностью, а также к разработчикам систем предъявляются некоторые специфические требования. В данной работе предлагается обзор опыта кафедры Кибернетики «НИЯУ «МИФИ»» опыт подготовки специалистов в данной области. В работе предлагается подход к технологической подготовке специалиста ориентированного на разработку качественного критичного программного обеспечения. Представлен адаптированный взгляд на процесс разработки критичных программных систем, который отражает основные требования отраслевых стандартов. В докладе описывается организация процесса преподавания на кафедре цикла учебных курсов посвященных технологии программирования.

Принципы технологической подготовки

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

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

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

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

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

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

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

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

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

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

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

Наш взгляд

Предлагается обсудить сложившийся на кафедре «Кибернетика» НИЯУ «МИФИ» процесс подготовки специалистов которые ориентированны на разработку качественного и надежного программного обеспечения. В технологической подготовке мы видим обобщающую компоненту приемов, подходов и методов к решению задач, встающих в процессе разработки программного обеспечения.

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

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

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

Таблица 1. Изучение жизненного цикла программы семестрам

Семестры

Элементы жизненного цикла

Сопровождение

Тестирование

Отладка

Кодирование

Функциональная

декомпозиция

Проведение

системного анализа

Общее описание

задачи

1

2

3

4

5

6

7

8

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

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

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

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

Последующие курсы, такие как “Искусственный интеллект”, “Базы данных”, “Сетевые системы” и другие, кроме своего прямого назначения, позволяют студентам увидеть общность технологического подхода к решению различных задач.

Учебный план регулярно обновляется, на весеннем семестре 2008/09 учебного года был впервые прочитан новый курс, посвященный современным средствам программирования, освещающий современные подходы к проектированию систем, основанных на архитектуре клиент-сервер и технологии web-программирования.

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

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

1.  Литература

Software Consideration in Airborne System and Equipment Certification RTCA DO-178B December 1, 1992.

ГОСТ Р–51904 – ПРОГРАМНОЕ ОБЕСПЕЧЕНИЕ ВСТРОЕННЫХ СИСТЕМ. Общие требования к разработке и документации.