Перейти на главную страницу
Мирошниченко Е.А. Технология программирования: Учебное пособие. — Томск: Изд. ТПУ, 1999. — 80 с.
В учебном пособии рассматриваются основные понятия, используемые в области разработки программного обеспечения: системный анализ; общие и конкретные подходы к проектированию; методы программирования, отладки и тестирования ПО; характеристики и содержание основных программных и эксплуатационных документов; вопросы планирования и проведения приемо-сдаточных испытаний и методы оценки качества программного обеспечения.
Учебное пособие подготовлено на кафедре вычислительной техники ТПУ и предназначено для студентов специальности 220100 "Электронные вычислительные машины, системы, комплексы и сети" Центра дистанционного образования ТПУ. Также пособие рекомендуется для студентов всех специальностей, связанных с созданием математического и программного обеспечения вычислительных систем.
Печатается по постановлению Редакционно-издательского Совета Томского политехнического университета.
Рецензенты:
Поддубная Т.Н., к.п.н., доцент кафедры прикладной информатики факультета информатики Томского государственного университета.
Ушаков А.В., к.ф.-м..н., зав. кафедрой прикладной математики Томского государственного архитекгурно-строительного университета.
Темплан 1999
Томский политехнический университет, 1999
Программное обеспечение (ПО) вычислительных систем (ВС) становится все более значительным, сложным и опасным и его все труднее разрабатывать. ПО все время упрощается, уменьшается в размерах, все легче поддается управлению и его все легче разрабатывать. Эти два взаимоисключающие утверждения верны, поскольку развитие ПО идет одновременно по разным направлениям.
С одной стороны, возрастают требования к ПО, связанные с усовершенствованием и усложнением операционных систем, аппаратных средств и интерфейса пользователя и с необходимостью внедрения современных информационных технологий, в первую очередь, сетевых. Внутреннее устройство программ в связи с этим все более усложняется и возрастают требования к их надежности.
С другой стороны, накапливается и обобщается опыт разработки ПО, появляются все более гибкие и мощные методы и средства, поддерживающие все этапы разработки ПО, развивается визуальное программирование и совершенствуются языки программирования. Совершенствование аппаратных средств ускоряет процессы компиляции, а также позволяет зачастую не беспокоится об эффективности создаваемых программ.
Все происходящие в области развития вычислительной техники процессы оставляют неизменным одно: требование к высокой профессиональности программистов-разработчиков. Смещаются лишь акценты. Если на заре вычислительной техники программист-эксперт должен был во всех тонкостях разбираться в устройстве вычислительной установки, владеть системой команд процессора и изобретать “трюки”, позволяющие экономить память и время, то современный специалист должен владеть методами и средствами грамотной организации своей работы, уметь работать в коллективе и должен программировать не столько “эффективно”, сколько “надежно”.
Данное учебное пособие предназначено для студентов всех специальностей, связанных с созданием математического и программного обеспечения ВС. В нем с системных позиций излагаются современные взгляды на разработку ПО как промышленной продукции, включая проблемы оценки качества программного продукта. Изложение материала в пособии в основном ведется на основе Единой системы программной документации (ЕСПД) — комплекса государственных стандартов (ГОСТов), устанавливающих взаимоувязанные правила разработки, оформления и обращения программ и программной документации. Эти стандарты продолжают действовать, вследствие чего необходимо знать и уметь применять их положения. С другой стороны, интеграция России в мировое сообщество и широкое внедрение зарубежного ПО привело к “размыванию” использования отечественных стандартов и нередкому использованию “де-факто” зарубежных подходов. С учетом всех этих факторов, в данном пособии используются как принятая в мире терминология, так и терминология ЕСПД.
Раздел 1 является вводным. В нем рассматриваются основные понятия, используемые в области разработки ПО. Разделы 2—7 посвящены отдельным этапам разработки ПО. Раздел 8 содержит описание основных понятий и подходов в области оценки качества ПО.
1. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ КАК ПРОМЫШЛЕННАЯ ПРОДУКЦИЯ
1.1. Общие положения
Принято выделять семь видов обеспечения ВС [11]:
Определим такие основные понятия, как программа, программный комплекс, программная система, программный продукт и программное обеспечение.
Под программой будем понимать:
1) совокупность кода и данных, пригодных для исполнения процессорам (исполняемая программа);
Прошедший испытания программный комплекс, полностью готовый для продажи (поставки) и снабженный всей необходимой документацией, называется программным продуктам (изделием) или программным средством.
Будем условно делить программные продукты на небольшие, средние и крупные. Объем исходного текста небольших программ составляет несколько сот операторов языка высокого уровня, средних — до десятков тысяч и крупных — до миллиона.
Во многих случаях программы создаются в единственном экземпляре для решения частных исследовательских задач, для ускорения вычислений, моделирования процессов и т.д. Такие программы не имеют массового применения и доступны только тем, кто их разработал. Они являются объектами научно-технического творчества и только в исключительных случаях становятся промышленными изделиями.
Совершенно иным классом программ являются полновесные программные средства, которые в настоящее время принято квалифицировать как продукцию производственно-технического назначения. В этом качестве программные продукты являются непосредственной производительной силой и не отличаются от любой другой промышленной продукции [5].
Создание хорошего программного продукта является весьма трудоемкой задачей, решение которой, как правило, не под силу одному человеку. Программисты-одиночки (“хакеры”) могут обладать гениальным даром к быстрой алгоритмизации и кодированию нетривиальных задач, созданию новых методов и идей программирования, приобретая при этом значительную известность. Однако не в их силах в одиночку решать весь комплекс проблем разработки средних и крупных программных продуктов за приемлемые сроки.
Таким образом, в настоящее время сколько-нибудь значимые продукты создаются коллективами программистов. В таких коллективах в программисте-разработчике ценятся такие качества, как грамотность, дисциплинированность, надежность и коммуникабельность. Под грамотностью понимается знание и понимание передовых методов и средств разработки ПО, их назначения и особенностей, а также умение применять эти знания на практике.
Программисту следует трезво оценивать свои возможности и руководствоваться известной фразой “гении встречаются крайне редко, и нет основания полагать, что в среде программистов их число выше среднего” [1].
Сказанное позволяет сделать вывод о том, что подход к разработке программного продукта качественно не отличается от подхода к разработке любого промышленного продукта. Во всех случаях требуется полноценное планирование и продуманная кадровая политика.
К сожалению, руководители и сами разработчики часто не осознают этого факта, вследствие чего или разработка не доводится до выпуска продукта, или с неоправданно большими усилиями выпускается “сырая”, ненадежная программа, срок жизни которой очень мал. Эта ситуация получила в мире название “кризис разработки ПО”.
1.2. Характеристики программного обеспечения
Качество ПО играет важную роль, поскольку большинство программных продуктов разрабатываются в расчете на долговременное успешное применение. Каждая программа должна в той или иной мере отвечать ряду требований, без соблюдения которых польза от нее будет стремиться к нулю. Наиболее часто требования выражаются в виде предписания наличия у программ определенных свойств (характеристик).
Наиболее важные свойства разрабатываемого ПО необходимо предусматривать и учитывать заранее, начиная с самых ранних этапов разработки. В то же время, полная оценка наличия тех или иных свойств может быть выполнена только постфактум, т.е. по завершении разработки. При этом возникает проблема, связанная с тем, что если степень наличия необходимого свойства будет оценена как неудовлетворительная, то возможно повторение цикла разработки со всеми сопутствующими затратами.
Для снижения риска возникновения такой ситуации необходимо запланировать регулярное проведение частичных оценок необходимых свойств с соответствующими коррективами процесса разработки.
Наиболее часто оценивают такие свойства ПО как:
Пригодность к развитию (сопровождаемость) кажется не слишком актуальным свойством по сравнению с другими, однако практика показывает, что в жизненном цикле ПО именно это требование становится важнейшим. Развиваемое ПО в силу именно этого свойства может приобрести или улучшить любое другое свое качество, то есть стать правильнее, эффективнее, надежнее и тд.
Накопленный к сегодняшнему дню в программировании опыт позволяет сделать вывод о том, что любые затраты (временные, финансовые, организационные и т.д.) на то, чтобы грамотно построить ПО, сделать его развиваемым, многократно окупаются в дальнейшем.
Свойства программ и методы их оценки подробно рассмотрены в разделе 8, посвященном оценке качества ПО.
Жизненный цикл программного продукта состоит из трех крупных фаз (рис. 1.1):
1) разработка;
2) использование (эксплуатация);
3) сопровождение и продолжающаяся разработка.
Рис. 1.1. Фазы жизненного цикла программного продукта
В фазе разработки программный продукт разрабатывается и выпускается.
В фазе эксплуатации созданный продукт используется на практике конкретными потребителями.
В фазе сопровождения и продолжающейся разработки продукт модифицируется и развивается.
Фаза использования, в идеале, должна начинаться сразу после выпуска программного продукта, однако часто работоспособная версия по договоренности с заказчиком поставляется ему до завершения полного цикла разработки. Возможна и обратная ситуация, при которой использование может начаться гораздо позже окончания разработки.
Сопровождение и продолжающуюся разработку традиционно объединяют в общую фазу, поскольку фактически и то и другое - процесс модификации исходного продукта, продолжающийся после его официального выпуска. Существуют и отличия.
Продолжающаяся разработка - это плановое мероприятие, цель которого - выпуск последующей версии продукта. Основой продолжающейся разработки является желание самих разработчиков.
Основой процесса сопровождения является, как правило, юридическая договоренность между разработчиками и пользователями (заказчиками), в которой может быть оговорен также срок, в течение которого принимаются
претензии. Модификации при сопровождении обычно инициируются пользователями, обнаруживающими ошибки и недостатки продукта.
Традиционно считается, что самая трудная фаза — первая, поэтому на нее приходится тратить больше всего времени и средств. Однако в больших программах стоимость сопровождения и продолжающейся разработки часто превышает половину суммарных затрат за всю “жизнь” программы.
Фазу разработки обычно разделяют на следующие логические этапы [15, 11]:
1) системный анализ;
2) проектирование;
3) программирование (кодирование);
4) отладка и тестирование;
5) документирование;
6) выпуск.
В ЕСПД описываются следующие формальные этапы работ:
1) техническое задание;
2) эскизный проект",
3) технический проект;
4) рабочий проект;
5) внедрение.
Рассмотрим краткую характеристику логических этапов с указанием того, какие формальные этапы разработки им соответствуют в ЕСПД.
На этапе системного анализа происходит анализ необходимости самого программного продукта, выявляются наиболее общие требование к нему. В терминах ЕСПД это этап технического задания. Результатом системного анализа является выработка спецификации требований на программный продукт, содержащая указанные требования в формальном виде. ЕСПД называет такую спецификацию техническим заданием (ТЗ).
Спецификация (ТЗ), полученная на этапе системного анализа, является исходным пунктом в этапе проектирования. При проектировании общие требования к программному продукту пошагово и итерационно преобразуются в подробный проект, в деталях описывающий будущую структуру программной системы, форматы данных, алгоритмы, интерфейс и т.д. ЕСПД описывает проектирование в этапах эскизного проекта и технического проекта.
Этап кодирования при наличии достаточно детального проекта (каковым является технический проект) является рутинным. Фактически, кодирование — это в некоторой степени механический процесс реализации спроектированных алгоритмов на конкретном языке программирования с использованием конкретного инструментария. Результатом кодирования являются собственно программы как в исходном тексте, так и в бинарном виде, пригодном к исполнению.
Этап отладки и тестирования предназначен для выявления и устранения ошибок в программах. Тестирование есть процесс выявления ошибок и установления соответствия созданного продукта его спецификации. Отладка есть процесс локализации и устранения ошибок. Результатом данного этапа являются отлаженные (насколько возможно) программы, для которых тестированием установлено (опять же, насколько возможно) соответствие спецификации.
На этапе документирования к созданной программной системе подготавливается пакет документации, разносторонне описывающей будущий продукт как с внешней, так и с внутренней стороны. Каждый документ подготавливается для конкретного типа читателей: конечных пользователей, системных администраторов, программистов и тд. Сами файлы продукта размещаются на носителях информации (дискетах, компакт-дисках и т.д.) и снабжаются программой установки.
На этапе выпуска продукт проходит испытания по утвержденной методике, после чего поставляется, внедряется или продается.
Этапам кодирования, отладки и тестирования и документирования в ЕСПД соответствует этап рабочего проекта. Выпуск соответствует этапу внедрения.
Рис. 1.2. Итеративность процесса разработки ПО
Рассмотрев поэтапный процесс разработки, мы должны понимать, что реально он никогда не бывает таким простым и понятным. Даже на этапе выпуска может быть выявлена существенная ошибка, из-за которой выпуск может быть отложен. Для устранения некоторых ошибок необходимо вносить глобальные изменения в разработку на уровне проекта. Обычно это происходит вследствие некачественно проведенного анализа и проектирования.
Таким образом, процесс разработки является существенно итеративным (рис. 1.2). Только простейшие задачи проходят все шаги без итераций. Для больших проектов проектирование не кончается никогда. К сожалению, причины этого кроются в человеческом сознании, что характерно показано на рис. 1.3, заимствованном из [8].
Рис. 1.3. Ироническое изображение процесса разработки ПО
Довольно часто схему, изображенную на рис. 12, называют последовательностью разработки ПО. Это ошибка, поскольку предложенное деление фазы разработки на этапы является, разумеется, условным.
Трудно иногда провести четкую границу между этапом системного анализа и этапом проектирования, вследствие чего эти этапы иногда объединяют в один.
Далее, программирование часто начинается до окончательного завершения проектирования. Более того, существуют подходы к проектированию “снизу-вверх”, при которых создание программ в процессе проектирования предусматривается самой технологией.
Отладка и тестирование начинаются практически одновременно с программированием, они, по сути, нерасторжимы.
Создание документации также может начинаться до завершения тестирования и даже программирования.
По сути, все логические этапы перекрываются и, самое главное, не могут не перекрываться, особенно в случае коллективной разработки. Различные разработчики и даже группы разработчиков занимаются проектированием, кодированием и документированием одновременно. Рис. 1.4 в большей мере соответствует ситуации, которая возникает при разработке крупного программного продукта [15].
Следует особо отметить, что любой процесс разработки, начавшись, практически никогда не “сходит на нет”, то есть выпуск продукта обычно прерывает его в некоторой точке. Причина здесь, скорее, философская: идеал, к сожалению, недостижим.
Рос. 1.4. Распределение ресурсов при разработке ПО:
Рассмотрим две крайности — полное отсутствие формализованного жизненного цикла разработки и очень жесткие, строго соблюдаемые правила разработки. В первом случае мы имеем анархию; тяжким трудом (преимущественно нескольких своих членов) команда разработчиков в конце концов может родить что-то стоящее, но состояние проекта всегда будет неизмеримо и непредсказуемо. Следует ожидать, что команда отработает весьма неэффективно, а, может быть, и вообще не создаст ничего пригодного для передачи заказчику. Это — пример проекта “в свободном падении”. Во втором случае мы имеем диктатуру, в которой инициативы наказуемы, экспериментирование, которое могло бы привнести больше элегантности в архитектуру, не поощряется, и действительные требования заказчика никогда корректно не доходят до разработчиков нижнего уровня, скрытых за настоящей бумажной стеной, воздвигнутой бюрократией.
Известные удачные проекты не следовали ни анархическому, ни драконовскому жизненному циклу. Удачная объектно-ориентированная архитектура создается в итеративно развивающемся процессе. Проектирование является итеративным, повторяющимся, в том смысле, что уже созданная архитектура вновь и вновь подвергается анализу и проектированию. При этом в каждом цикле анализ - проектирование-эволюция стратегические и тактические решения развиваются, приближаясь к требованиям конечного пользователя (часто даже не высказанным), оставаясь при этом простыми, надежными и открытыми для дальнейшего изменения.
1.4. Вопросы для самоконтроля
1.Что понимается под терминами “программа”, “программный комплекс”, “программная система”, “программный продукт”, “программное средство”, “программное обеспечение”?
2. Отличается ли принципиально разработка ПО от разработки любой другой промышленной продукции?
3. Что понимается под грамотностью разработчика ПО?
4. Какие характеристики ПО являются наиболее важными?
5. Из каких фаз состоит жизненный цикл программного продукта?
6. Из каких логических этапов состоит разработка ПО?
7. Какие формальные этапы разработка ПО определяет ЕСПД? Какова их связь с логическими этапами?
8. В чем причина итеративности процесса разработки ПО?
9. Как обычно распределяются ресурсы по основным задачам разработки ПО во времени?
Целью системного анализа в наиболее общем виде является описание и исследование систем. Под системой будем понимать совокупность элементов (компонентов) системы и связей (отношений) между ними [14]. Система характеризуется структурой и поведением.
Структуру системы наиболее часто представляют с помощью понятия графа. Под графом G будем понимать пару G = (V, D), где V — множество вершин графа, графически изображаемых точками или окружностями; D — множество дуг графа, графически изображаемых стрелками, соединяющими вершины (рис. 2.1). При этом вершины, как правило, соответствуют элементам системы, а дуги — отношениям между элементами.
При рассмотрении конкретной структуры системы следует понимать, что каждый ее элемент может также являться системой со своими элементами и отношениями. Таким образом, любую систему можно рассматривать на любом уровне детализации, вплоть до атомов.
Применительно к разработке ПО системный анализ представляет собой анализ существующей структуры отношений в рамках конкретной предметной области, выявление роли и места будущей программной системы, ее основных функций и свойств. В этой связи системный анализ также можно назвать внешним проектированием.
Роль системного анализа часто недооценивают. Между тем, неверная постановка задачи или выбор требований к программе, выполненные на этом этапе, могут обесценить всю последующую работу. Чем сложнее создается программа, тем больше возрастает роль системного анализа по отношению к другим этапам разработки.
Проблемы, которые мы пытаемся решить с помощью программного обеспечения, часто неизбежно содержат сложные элементы, а к соответствующим программам предъявляется множество различных, порой взаимоисключающих требований. Рассмотрим необходимые характеристики электронной системы многомоторного самолета,,сотовой телефонной коммутаторной системы и робота. Достаточно трудно понять, даже в общих чертах, как работает каждая такая система. Теперь прибавьте к этому дополнительные требования (часто не формулируемые явно), такие как удобство, производительность, стоимость, выживаемость и надежность! Сложность задачи порождает сложность программного продукта.
Эта внешняя сложность обычно возникает из-за “нестыковки” между пользователями системы и ее разработчиками: пользователи с трудом могут объяснить в форме, понятной разработчикам, что на самом деле нужно сделать. Бывают случаи, когда пользователь лишь смутно представляет, что ему нужно от будущей программной системы. Это в основном происходит не из-за ошибок с той или иной стороны; просто каждая из групп специализируется в своей области, и ей недостает знаний партнера. У пользователей и разработчиков разные взгляды на сущность проблемы, и они делают различные выводы о возможных путях ее решения. На самом деле, даже если пользователь точно знает, что ему нужно, мы с трудом можем однозначно зафиксировать все его требования. Обычно они отражены на многих страницах текста, “разбавленных” немногими рисунками. Такие документы трудно поддаются пониманию, они открыты для различных интерпретаций и часто содержат элементы, относящиеся скорее к дизайну, чем к необходимым требованиям разработки.
Дополнительные сложности возникают в результате изменений требований к программной системе уже в процессе разработки. В основном требования корректируются из-за того, что само осуществление программного проекта часто изменяет проблему. Рассмотрение первых результатов — схем, прототипов, — и использование системы после того, как она разработана и установлена, заставляют пользователей лучше понять и отчетливей сформулировать то, что им действительно нужно. В то же время этот процесс повышает квалификацию разработчиков в предметной области и позволяет им задавать более осмысленные вопросы, которые проясняют темные места в проектируемой системе.
Этап системного анализа состоит из следующих стадий:
1) обоснование необходимости разработки программы;
2) научно-исследовательские работы (НИР);
3) разработка и утверждение технического задания.
Наиболее полно формализована последняя стадия, тогда как первые две во многом отдаются на волю исполнителей. В то же время, на стадии разработки спецификации на программу (технического задания) фактически только обобщаются и утверждаются результаты, полученные на первых стадиях. • Рассмотрим стадии системного анализа подробней.
Мирошниченко Е. А. Технология программирования: Учебное пособие. — Томск: Изд. Тпу, 1999. — 80 с
10 10 2014
8 стр.
К 46 Гигиена труда и профилактика профессиональных заболеваний в отдельных отраслях промышленности: Учеб пособие. М.: Изд-во рудн, 1999. 95 с
11 09 2014
7 стр.
Методика конструирования парика: Учебное пособие по дисциплине Технология постижерных работ для студентов специальности 100108 Парикмахерское искусство. – Абакан: фгоу спо хкптэс,
24 09 2014
1 стр.
Учебное пособие предназначено для студентов специальности 271400 «Технология продуктов детского и функционального питания» всех форм обучения
25 09 2014
8 стр.
Зыкина Т. А. Черноудова М. Г. Трудовое право: Учебное пособие для студентов юридического института. – Архангельск: Изд-во Северного (Арктического) федерального университета 2011. –
14 10 2014
11 стр.
Учебное пособие / С. А. Суркина. – Саратов: Изд-во «Саратовский источник», 2011
13 10 2014
8 стр.
История Земли и жизни на ней: Экспериментальное учебное пособие для старших классов. – М.: Мирос, 1999 – с.: ил
15 09 2014
22 стр.
В технологию энергонасыщенных материалов: учебное пособие / Д. И. Дементьева, И. С. Кононов, Р. Г. Мамашев, В. А. Ха-ритонов; Алт гос техн ун-т, бти. Бийск: Изд-во Алт гос техн у
14 10 2014
20 стр.