Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Кодекс'
Відповідь: Згідно з Податковим кодексом України до місцевих податків належить: податок на нерухоме майно, відмінне від земельної ділянки та єдиний по...полностью>>
'Доклад'
об осуществлении регионального государственного контроля (надзора) за государственной дисциплиной регулируемых цен (тарифов, расценок, ставок и т.п.)...полностью>>
'Семинар'
Голосов Г. Идеологическое развитие партий и поля межпартийной конкуренции на думских выборах 1995 г. Мировая экономика и междунар. отношения. М., 1 ...полностью>>
'Документ'
В Российской Федерации, накоплены огромные количества радиоактивных отходов (РАО), обращение с которыми происходит в зависимости от их категории: отх...полностью>>

Методические указания по курсовому проектированию для студентов направления 071900 Составители: А. Е. Докторов

Главная > Методические указания
Сохрани ссылку в одной из сетей:

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РФ

УЛЬЯНОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

РАЗРАБОТКА И ДОКУМЕНТИРОВАНИЕ ПРОГРАММ

МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПО КУРСОВОМУ ПРОЕКТИРОВАНИЮ

ДЛЯ СТУДЕНТОВ НАПРАВЛЕНИЯ 071900

Составители: А.Е.Докторов,

Е.А.Докторова

Ульяновск 2000

УДК 681.3.08 (076)

ББК 32.973-01 я 7

Р 17

Рецензент доцент кафедры «Высшая математика», канд. техн. наук В.В. Селиванов

Одобрено секцией методических пособий научно-методического совета университета

Разработка и документирование программ: Методические указания по

Р 17 курсовому проектированию для студентов направления 071900 / Сост.: А.Е. Докторов, Е.А. Докторова. – Ульяновск: УлГТУ, 2000. – 38 с.

Составлены в соответствии с учебным планом направления 091700. Преследуют цель ориентировать студентов на содержание и порядок выполнения курсовой работы по программированию. Даются основные принципы и технология структурного программирования. Излагаются необходимые сведения по составу программной документации и требования к ней, соответствующие государственным стандартам ЕСПД. Работа подготовлена на кафедре ИВК.

УДК 681.3.08 (076)

ББК 32.973-01 я 7

© Оформление УлГТУ, 2000

© А.Е. Докторов,

Е.А. Докторова, 2000

Содержание

Содержание 3

ВВЕДЕНИЕ 3

1. ЦЕЛЬ КУРСОВОЙ РАБОТЫ 4

2. СУЩНОСТЬ СТРУКТУРНОГО ПРОГРАММИРОВАНИЯ 5

2.1. Проектирование «сверху вниз» 5

2.2. Модульное программирование 6

2.3. Структурное кодирование 8

2.4. Технология структурного программирования 8

3. ДОКУМЕНТИРОВАНИЕ И СТАДИИ РАЗРАБОТКИ ПРОГРАММЫ 10

3.1. Общие сведения о ЕСПД 13

3.2. Содержание программных документов 15

3.2.1. Техническое задание 15

3.2.2. Текст программы 16

3.2.3. Описание программы 16

3.2.4 Программа и методика испытаний 17

3.2.5. Описание применения 18

3.3. Стадии разработки программы 18

4. ПРИМЕР РАЗРАБОТКИ ПРОГРАММЫ 19

4.1. Постановка задачи 19

4.2. Предварительный анализ задачи 20

4.3. Проектирование программы 21

5. ОФОРМЛЕНИЕ ПОЯСНИТЕЛЬНОЙ ЗАПИСКИ 37

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

ВВЕДЕНИЕ

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

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

1. ЦЕЛЬ КУРСОВОЙ РАБОТЫ

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

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

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

2. СУЩНОСТЬ СТРУКТУРНОГО ПРОГРАММИРОВАНИЯ

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

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

Структурное программирование включает три главные составляю­щие:

1. Проектирование «сверху вниз».

2. Модульное программирование.

  1. Структурное кодирование.

2.1. Проектирование «сверху вниз»

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

Сначала необходимо уяснить постановку задачи и четко ее из­ложить. Приступая к проектированию, нужно на естественном языке описать то, что надлежит сделать. До этого момента к программиро­ванию приступать нельзя, поскольку такая попытка заведомо будет обречена на провал. Считается, что правильная постановка задачи  это 90% ее решения.

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

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

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

Неизбежным этапом разработки является тестирование. В про­цессе описания каждого модуля должны быть описаны и его тестовые данные. Логическая проверка фрагментов программы уменьшает объем тестирования конечной программы. При использовании структурного программирования правильность программы обеспечивается уже самим методом программирования. Проектирование должно быть завершено до начала программирования.

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

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

2.2. Модульное программирование

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

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

При проектировании задачи «сверху вниз» она разбивается на подзадачи, каждой из которых соответствует модуль. При этом необ­ходимо добиться, чтобы:

1) программный модуль не содержал ошибок и не зависел от контекста, в котором он будет использоваться;

2) из модулей можно было формировать большие программы без каких-либо предварительных знаний о внутренней работе модуля.

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

Примерное наилучшее ограничение в размере модуля  не более 60 строк (допустимы исключения). Такая длина удобна для восприя­тия на странице или на дисплее.

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

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

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

Разбиение на модули должно происходить на стадии проектиро­вания «сверху вниз». Для каждого модуля должны быть определены:

а) алгоритм решения задачи;

б) область допустимых входных значений;

в) область возможных выходных значений;

г) возможные побочные эффекты.

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

 каждый сегмент программы должен иметь один вход в начале и один выход в конце (если другие сегменты вызываются внутри како­го-либо сегмента, то в них входят через начало, выходят через ко­нец и возвращаются обратно в вызывающий сегмент);

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

 каждый сегмент должен иметь как можно меньше ветвей вычисле­ний (чем меньше размер модуля, тем меньше ветвей, которые надо тестировать); четкость программы в целом в большой степени зависит от четкости структуры каждого модуля.

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

2.3. Структурное кодирование

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

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

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

1) последовательности операторов;

2) выбора одного из двух операторов (IF THEN ELSE);

  1. повторения оператора, пока выполняется некоторое условие.

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

2.4. Технология структурного программирования

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

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

Рекомендуемый вариант оформления функциональной спецификации может содержать разделы:

1) имя-заголовок (идентификатор модуля со списком формальных параметров);

2) назначение модуля;

3) неформальное описание (краткое изложение выполняемых функций);

4) ссылки (перечни вызывающих и вызываемых модулей);

5) алгоритм (с использованием псевдокодов или схем алгорит­мов);

6) данные (описание формальных параметров, глобальных и ло­кальных переменных с указанием структуры, типов и атрибутов раз­мерности).

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

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

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

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

3. ДОКУМЕНТИРОВАНИЕ И СТАДИИ РАЗРАБОТКИ ПРОГРАММЫ

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

При разработке программной докумен­тации нужно придерживаться государственных стандартов, объединен­ных в Единую систему программной документации (ЕСПД).

Согласно ГОСТ 19.10177 «Виды программ и программных доку­ментов» программы делятся на компоненты и комплексы. Компонент  это программа, рассматриваемая как единое целое, выполняющая за­конченную функцию и применяемая самостоятельно или в составе комплекса. Комплекс  это программа, состоящая из двух или более компонентов и (или) комплексов, выполняющих взаимосвязанные функ­ции, и применяемая самостоятельно или в составе другого комплекса.

Указанный стандарт определяет в качестве программных документы, содержащие сведения, необходимые для разработки, изготовления, сопровождения и эксплуатации программы. Все документы делятся на две группы: программные (таблица1) и эксплуатационные (таблица 2).

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

Таблица 2

Вид документа

Содержание документа

Ведомость эксплуатационных документов

Перечень эксплуатационных документов на программу

Формуляр

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

Описание применения

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

Руководство системного программиста

Сведения для проверки, обеспечения функционирования и настройки программы на условия конкретного применения

Руководство программиста

Сведения для эксплуатации программы

Руководство оператора

Сведения для обеспечения процедуры общения оператора с вычислительной системой в процессе выполнения программы

Описание языка

Описание синтаксиса и семантики языка

Руководство по техническому обслуживанию

Сведения для применения тестовых и диагностических программ при обслуживании технических средств

Строгой регламентации перечня документов для каждой программы ГОСТ 19.101—77 не устанавливает, так как сложность программы и условия ее эксплуатации могут варьиро­ваться в таких широких пределах, что невозможно точно указать, какая именно документация должна быть разработана в каждом конкретном случае. По этой причине ГОСТ 19.10177 допускает объединение отдельных видов эксплуатационных документов (за исключением ведомости эксплуатационных документов и форму­ляра).



Скачать документ

Похожие документы:

  1. Я. А. Ваграменко Редакционный совет (1)

    Научно-методический журнал
    Зобов Б.И.(зам. главного редактора, Москва),Жаворонков В.Д. (Екатеринбург),Круглов Ю.Г. (Москва), Нижников А.И. (Москва),Подчиненов И.Е. (Екатеринбург)

Другие похожие документы..