|
|
|
содержание .. 1 2 3 4 ..
Введение в программную инженерию (лекция)
Что такое программная инженерия? Необходимо разобраться в понятиях программа, программный продукт (ПП), программная система (ПС), программное обеспечение (ПО). Программа, это последовательность команд процессора, реализующая алгоритм решения некоторой задачи. Законченная программа может эффективно использоваться ее автором в системе, в которой была разработана. Программный продукт - это программа, которую любой потенциальный пользователь может запускать на различных платформах, тестировать, исправлять и развивать. При создании программы и программного продукта акценты ставятся на различных этапах разработки. Для создания программы от программиста требуется фактически только знание языка и навык программирования. Программист может сам строить и изменять график работ, может не уделять внимания разработке понятного интерфейса и тщательному документированию программы, так как предполагает, что с программой будет работать либо он сам, либо пользователь из соседнего отдела его фирмы. Кроме того, программист обычно пишет программу под конкретную платформу, на которой она и разрабатывается. При создании ПП на первый план выходят совершенно другие критерии разработки: · должен быть разработан тщательный план, включающий график работ и ряд специальных документов. В противном случае, программа никогда не приобретет характерную для продукта законченностью. · ПП должен разрабатываться с учетом того, что он может быть использован на совершенно разных платформах. · ПП должен иметь развитый интерфейс. · ПП должна быть подвергнута тщательному тестированию - процессу прогона так называемых контрольных примеров – заранее подготовленных данных с известным результатом. · должно быть организовано внедрение и сопровождение ПП. Иногда требуется организации «горячей линии», чтобы пользователь мог дозвониться разработчику и оперативно получить ответы на свои вопросы. · ПП должен быть тщательно документирован, · в ходе эксплуатации может возникнуть потребность в модификации ПП, и если сам ход работ не документирован, сделать это практически невозможно. Очевидно, что все эти работы не может выполнять один- два человека. Создается ПП промышленным способом, коллективом профессионалов-инженеров и затем продается пользователю. Разрабатываются ПП в рамках программных проектов. Проект (project) – временное предприятие, предназначенное для создания уникальных продуктов, услуг или результатов. Следовательно, программный проект - это временное предприятие, предназначенное для создания уникальных ПП. Временный характер проекта подчеркивает, что у любого проекта есть определенное начало и завершение проекта. Завершение наступает, когда достигнуты цели проекта или признано, что цели проекта не могут быть достигнуты или исчезла необходимость в проекте. Отметим, что время жизни конечного программного продукта может существенно превышать время жизни программного проекта. В состав программного проекта входят как люди (заинтересованные стороны - обычно разработчики и заказчики), так и необходимые материальные ресурсы. ПП стоит, по крайней мере, втрое дороже чем, чем программа с теми же функциями. Программная система (программный комплекс) - это набор взаимодействующих программ, согласованных по функциям и форматам и составляющих полное средство для решения больших задач. Чтобы стать частью ПС синтаксис и семантика ввода и вывода программы должна удовлетворять точно определенным интерфейсам. Программа должна быть протестирована на только отдельно, но и вместе с другими компонентами ПС во всех сочетаниях. Причем с большой долей вероятности при совместном тестировании выявляются ошибки взаимодействия уже отлаженных компонентов. Компонент ПС стоит, по крайней мере, втрое дороже, чем автономная программа с теми же функциями. Следовательно, разработка компонента ПС, рассматриваемой как продукт, будет стоить, по крайней мере, в девять раз дороже, чем разработка аналогичной по функциям программы. В дальнейшем будем использовать термины ПС, ПО в смысле «ПС, рассматриваемая как продукт». Дадим еще одно определение ПО. Государственный стандарт 19781-90 и международный стандарт ISO/IEC 2382/1-93 определяет программное обеспечение (ПО) как совокупность программ, файлов конфигурации, необходимых для установки данных программ и документации, которая описывает организацию данного ПО и порядок работы пользователя с ПО. Большинство современных ПС объективно очень сложны. Эта сложность обуславливается многими причинами, главной из которых является логическая сложность решаемых ими задач. Пока вычислительных установок было мало, и их возможности были ограничены, компьютеры применяли в очень узких областях науки и техники, причем, в первую очередь, там, где решаемые задачи были хорошо детерминированы и требовали значительных вычислений. В наше время, когда созданы мощные компьютерные сети, появилась возможность переложить на них решение сложных ресурсоемких задач, о компьютеризации которых раньше никто и не думал. Сейчас в процесс компьютеризации вовлекаются совершенно новые предметные области, а для уже освоенных областей усложняются уже сложившиеся постановки задач. Дополнительными факторами, увеличивающими сложность разработки программных систем, являются: • сложность формального определения требований к программным системам; • отсутствие удовлетворительных средств описания поведения дискретных систем с большим числом состояний при недетерминированной последовательности входных воздействий; • коллективная разработка; • необходимость увеличения степени повторяемости кода. • изменение потребностей пользователей и рост требований к качеству ПО. Сложность определения требований к ПС. Сложность определения требований к программным системам обусловливается двумя причинами. Во-первых, при определении требований необходимо учесть большое количество различных факторов. Во-вторых, разработчики программных систем не являются специалистами в автоматизируемых предметных областях, а специалисты в предметной области, как правило, не могут сформулировать проблему в нужном ракурсе. Отсутствие удовлетворительных средств формального описания поведения дискретных систем. В процессе создания ПС используют языки сравнительно низкого уровня. Это приводит к ранней детализации операций в процессе создания программного обеспечения и увеличивает объем описаний разрабатываемых продуктов, который, как правило, превышает сотни тысяч операторов языка программирования. Средств же, позволяющих детально описывать поведение сложных дискретных систем на более высоком уровне, чем универсальный язык программирования, не существует. Коллективная разработка. Из-за больших объемов проектов разработка программного обеспечения ведется коллективом специалистов. Работая в коллективе, отдельные специалисты должны взаимодействовать друг с другом, обеспечивая целостность проекта, что при отсутствии удовлетворительных средств описания поведения сложных систем, упоминавшемся выше, достаточно сложно. Причем, чем больше коллектив разработчиков, тем сложнее организовать процесс работы. Необходимость увеличения степени повторяемости кодов. На сложность разрабатываемого программного продукта влияет и то, что для увеличения производительности труда компании стремятся к созданию библиотек компонентов, которые можно было бы использовать в дальнейших разработках. Однако в этом случае компоненты приходится делать более универсальными, что в конечном итоге увеличивает сложность разработки. Изменение потребностей пользователей и рост требований к качеству ПО. Расширение сферы применения программных систем и рост квалификации пользователей определяет и рост требований пользователя к качеству ПО.
На сегодняшний день в сфере производства ПО актуальными являются следующие проблемы: - аппаратная сложность опережает наше умение строить ПО, использующее потенциальные возможности аппаратуры; - наше умение строить новые программы отстает от требований к новым программам; - нашим возможностям эксплуатировать существующие программы угрожает их низкое качество.
Рис1. Статистика успешности программных проектов.
Успешным можно считать проект, который завершился созданием ПО, признанного заказчиком качественным, в поставленные сроки и с запланированным бюджетом. Таким образом, основными критериям успешности проекта является: Качество, Время, Бюджет. Существует стандарт (ГОСТ Р ИСО/MЭК 9126-93), оправляющий критерии качества программы, которые будет рассмотрены в одной из тем нашего курса. На данном этапе дадим следующие определение качественной программы. Качественная программа – это программа, выполняющая заранее объявленные действия известным способом и не выполняющая никаких необъявленных действий. Также можно предложить интуитивно понятую оценку успешности проекта по взаимодействую разработчика и заказчика, которую в своих лекциях используют сотрудники компании «Epam Systems».
Ключом к решению перечисленных выше проблем и созданию успешных программных проектов является грамотная организация процесса создания ПО, реализация технологических принципов промышленного конструирования программных систем (ПС), которые и изучаются в курсе «Программная инженерия» (Software Engineering – инженерия программного обеспечения). Заметим, что первоначально данный термин было принято переводить как «Технология разработки ПО». Термин программная инженерия впервые был использован в 1968 году в качестве темы конференции, посвященной вопросам максимальной загрузки самых мощных компьютеров. И там же было дано определение этого термина. Программная инженерия - система инженерных принципов для создания экономичного ПО, которое надежно и эффективно работает в реальных компьютерах. Или другими словами, программная инженерия - совокупность методов, средств и процессов для создания экономичного ПО, которое надежно и эффективно работает в реальных компьютерах. Действующий международный стандарт ISO/IEC 2382/1-93 определяет программную инженерию следующим образом: Программная инженерия – систематическое применение научных и технологических знаний, метод и практического опыта к проектированию, реализации, тестированию и документированию программного обеспечения в целях оптимизации его производства, поддержи и качества. Уточним понятия, входящие в определение программной инженерии: методы, средства процессы. Методы[1] программной инженерии обеспечивают решение широкого спектра задач при разработки ПО, например: - анализ требований к ПО, - планирование и оценка разработки ПО; - проектирование структуры программ и данных, интерфейсов; - кодирование программных компонентов и интерфейсов; - тестирование, - сопровождение. Иными словами, методы программной инженерии обеспечивают решение задач, предусмотренных всеми шагами жизненного цикла ПО. Жизненный цикл ПО (software life cycle) - одно из основных понятий программной инженерии. Жизненный цикл ПО это период времени с момента принятия решения о необходимости создания ПО до момента его полного изъятия из эксплуатации. Средства программной инженерии (утилиты) обеспечивают автоматизированную поддержу методов. В целях совместного применения утилиты могут объединяться в системы автоматизированного конструирования ПО. Такие системы принято называть CASE-системами (Computer Aided Software Engineering). Процессы программной инженерии определяют - порядок применения методов и утилит; - формирование отчетов, форм по соответствующим требованиям; - контроль, который помогает обеспечить качество и координировать изменения; - формирование «вех», по которым руководители оценивают прогресс. Существует классификация процессов программной инженерии, которая будет рассмотрена в одной из тем нашего курса. Реальные процессы достаточно сложны, поэтому в теории программной инженерии предлагаются модели – упрощенные и формализованные описания процессов создания ПО. Применение этих моделей гарантирует систематичный, упорядоченный подход к промышленной разработке и сопровождению ПО. Однако, следует помнить, что любая модель является лишь абстрактным представлением реальной последовательности разработки ПО и имеет свои достоинства и недостатки.
Программная инженерия – молодая научная дисциплина, которая начала развиваться в 70-е годы. Этапы развития программной инженерии будут рассмотрены в одной из тем нашего курса. Не следует путать программную инженерию с методологией программирования. Хотя в обоих случаях изучаются методы, но в технологии программирования методы рассматриваются "сверху" - с точки зрения организации технологических процессов, а в методологии программирования методы рассматриваются "снизу" - с точки зрения основ их построения (в работе Г. Буча методология программирования определяется как совокупность механизмов, применяемых в процессе разработки программного обеспечения и объединенных одним общим философским подходом).
Контрольные вопросы по теме1. Определите термин «программная система» 2. Определите термин «программный продукт» 3. Определите термин «программное обеспечение» 4. Определите термин «программный проекта» 5. На какие этапы разработки ставится акцент при разработке программы, программного продукта, программной системы? 6. Приведите сравнительную характеристику затрат на программу и аналогичные по функциям программных продукт, компонент программной системы и компонент программного обеспечение. 7. Чем может закончится программный проект? 8. Какой программный проект можно считать успешным? (Критерии успешности программного проекта) 9. Какой процент проектов, согласно мировой статистики, являются успешными? 10. Чем обусловлена сложность разработки современного программного обеспечения? 11. Назовите актуальные проблемы в сфере производства ПО. 12. Что такое программная инженерия? 13. Какие методы относят к методам программной инженерии? 14. Что обеспечивают средства программной инженерии? 15. Что такое Case-система? 16. Что определяют процессы программной инженерии? 17. Что такое модели программной инженерии?
Основная литература1. Орлов С.А., Циклькер Б.Я. Технология разработки программного обеспечения: Учебник для вузов - СПб.:Питер, 2012. – 608 с. 2. Стандартизация и разработка программных систем: учеб. пособие/ В.Н. Гусятников, А.И.Безруков. – М.: Финансы и статистика; ИНФРА-М, 2010. – 288 с. 3. Брукс Ф. Мифический человеко-месяц или как создаются программные системы. - СПб.: Символ-Плюс, 2010. – 304 с. 4. Фаулер М. и Скотт К. UML. Основы. Краткое руководство по унифицированному языку моделирования. М: Символ-Плюс, 2004. – 192 с. 5. Иванова Г.С. Технология программирования. М.: Изд-во МГТУ им. Н.Э. Баумана, 2002. 6. <juuc E/? <juuc V/ UML b Rational Rose/ - V/^ KJHB? 2008/ – 600 c/
[1] Ме́тод (от др.-греч. μέθοδος — путь исследования или познания) — систематизированная совокупность шагов, действий, которые необходимо предпринять, чтобы решить определённую задачу или достичь определённой цели.
содержание .. 1 2 3 4 ..
|
|
|