Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ВОРОНЕЖСКАЯ ГОСУДАРСТВЕННАЯ ТЕХНОЛОГИЧЕСКАЯ АКАДЕМИЯ
КАФЕДРА МАТЕМАТИЧЕСКОГО МОДЕЛИРОВАНИЯ
ИНФОРМАЦИОННЫХ И ТЕХНОЛОГИЧЕСКИХ СИСТЕМ

Специфицирование требований
Методические указания к практическим занятиям по курсу
"Проектирование информационных систем»
Для студентов бакалавриата, обучающихся по
направлению 080800 –
" Прикладная информатика",
дневной формы обучения
Воронеж 2010
УДК 681.3
Специфицирование требований [Текст] : метод. указания к практическим занятиям по курсу "Проектирование информационных систем" / Воронеж. гос. технол. акад.; сост. , Воронеж, 201. 20 с.
Методические указания разработаны в соответствии с требованиями ООП подготовки инженеров по направлению 230200 – «Информационные системы» специальности 230201 – «Информационные системы и технологии» в рамках цикла СД. Приведены необходимые практические сведения для создания и использования модулей при программировании на языке Pascal, а также задания для практических занятий и контрольные вопросы.
Ил. 3. Библиогр.: 2 назв.
Составитель доцент
Научный редактор д. т.н., профессор Г. В. АБРАМОВ
Рецензент д. т.н., профессор ВГЛТА В. Е. МЕЖОВ
Печатается по решению
редакционно-издательского совета
Воронежской государственной технологической академии
Ó ,2010
Ó Воронежская
государственная
технологическая
академия, 2005
Оригинал-макет данного издания является собственностью Воронежской государственной технологической академии, его репродуцирование (воспроизведение) любым способом без согласия академии запрещено.
Цель работы – ознакомление принципами выявления и документирования требований к разрабатываемой информационной системе (ИС), приобретение практических навыков создания спецификации требований.
1. Разработка требований
Первым шагом на пути решения любой проблемы является осознание основных причин ее возникновения. На базе понимания этого формируются требования к разрабатываемому проекту. Понятие требование к программному обеспечению (ПО) можно определить как: Некое свойство программного обеспечения, необходимое пользователю для решения проблемы при достижении поставленной цели.

Рис. 1 Процесс разработки требований
На рис. 1 показаны этапы формирования, документирования и проверки требований. Остановимся на этапах формирования и специфицирования требований.
Процесс формирования и анализа требований достаточно сложен по ряду причин:
· Пользователи и разработчики, как правило, принадлежат к различным мирам, говорят на разных языках и имеют различный опыт, мотивацию и цели.
· Пользователи часто не знают конкретно, чего они хотят от ПО, за исключением наиболее общих положений; им трудно сформулировать, что они ожидают от системы; они могут предъявлять нереальные требования, так как не подозревают, какова стоимость их реализации.
· Разные люди имеют различные предпочтения и могут выражать их разными способами, что затрудняет их понимание.
· Как экономическая, так и бизнес-обстановка, в которой происходит формирование требований, неизбежно изменяется. Следовательно, изменяются как сами требования, так и их приоритет.
Процесс выявления требований обычно состоит из следующих шагов:
1. определение всех категорий потенциальных пользователей.
2. выяснение требования каждой категории пользователей. При этом используются разнообразные методики, например:
метод, основанный на множестве опорных точек зрения,
метод построение сценариев (описание прецедентов)
методы прототипирования.
3. Анализ собранных требований, выявление общих и противоречивых требований. Редактирование требований в соответствии с результатами анализа.
2. Документирование системных требований
Документ, содержащий требования, также называемый спецификацией системных требований, — это официальное предписание для разработчиков программной системы, Он содержит пользовательские требования и детализированное описание системных требований. В некоторых случаях пользовательские и системные требования могут не различаться, выступая совместно в виде однородного описания системы. В других случаях пользовательские требования приводятся во введении документа-спецификации. Если общее количество требований велико, детализированные системные требования могут быть представлены в виде отдельного документа.
Системную спецификацию читает множество разных людей, начиная от высшего руководства компании - заказчика системы и заканчивая рядовым разработчиком системы.
Хенингер сформулировал шесть условий, которым должна соответствовать спецификация программной системы.
Описывать только внешнее поведение системы.
Указывать ограничения, накладываемые на процесс реализации системы.
Предусматривать возможность внесения изменений в спецификацию.
Служить справочным средством в процессе сопровождения системы.
Отображать весь жизненный цикл системы.
Предусматривать реакцию системы и группы сопровождения на непредвиденные (нештатные) ситуации.
Если все, что было написано в главной программе, полностью входит в скомпилированный файл программы, то из модуля в скомпилированную программу попадают только те части, которые необходимы данной программе. Поэтому модуль выступает как библиотека, которую можно употреблять во многих программах, и каждая из них берет только то, что ей требуется.
Возможность написания модулей позволяет пользователю:
1) создавать библиотеки подпрограмм и данных,
2) пользоваться возможностями стандартных модулей,
3) практически неограниченно увеличивать кодовую (содержащую коды команд) часть программы;
4) упростить тестирование программы и обнаружение ошибок;
5) упростить процесс повышения эффективности программ, так критичные модули могут многократно переделываться независимо от других.
Но, пожалуй, важнее всего, что модульные программы значительно легче понимать, а модули могут использоваться как строительные блоки других программах.
Все модули можно разбить на две группы:
1) стандартные модули, заранее созданные разработчиками языка Тигbо Раsсаl 7.0; эти модули поставляются в скомпилированном виде, и их без каких-либо доработок можно использовать в программах;
2) модули разработчика, которые создает сам программист; он должен написать модуль, скомпилировать его, отладить и только после этого использовать в своей программе; естественно, что в такие модули программист при необходимости может вносить изменения.
3. Структура модулей
Модуль состоит из следующих частей:
· заголовок модуля;
· интерфейс модуля;
· исполнительная часть модуля;
· секция инициализации.
Все разделы модуля, за исключением секции инициализации, являются обязательными. Обязательна также указанная последовательность разделов, что очевидно на синтаксической диаграмме (см. рис.1)


Рис. 2 Синтаксическая диаграмма структуры модуля
3.1. Заголовок модуля
Заголовок модуля состоит из ключевого слова Unit и идентификатора. Идентификатор модуля должен быть уникальным. Пример заголовка:
Unit MyMod;
Модуль должен быть помещен в файл, имя которого совпадает с именем модуля, а его расширение должно быть. РАS.
3.2 Интерфейс модуля
Через интерфейс осуществляется взаимодействие основной программы с модулем (модуля с модулем). В интерфейсе указываются константы, типы, переменные, процедуры и функции, которые могут быть использованы основной программой (модулем) при вызове этого модуля.
Интерфейс начинается словом interface и может содержать следующие разделы:
предложение uses (используемые модули);
раздел объявления констант;
раздел объявления типов;
раздел объявления переменных;
раздел объявления процедур и функций: только их полные заголовки!!
Завершается интерфейсная часть началом исполнительной части.
Предложение uses интерфейсной части модуля точно такое же, как у главной программы, а модули, перечисленные здесь, могут использоваться во всех частях модуля, а не только в интерфейсной части.
Если один модуль обращается к интерфейсной части другого, который в своей интерфейсной части обращается к третьему модулю и т. д., наконец, последний модуль использует первый модуль (так называемое циклическое использование модулей), то такая ситуация недопустима из-за того, что компилятор в этом случае не сможет установить необходимые связи.
Все разделы интерфейсной части, кроме раздела объявления используемых модулей, могут идти в любой последовательности; можно создавать несколько однотипных разделов.
В разделе объявления процедур и функций указываются лишь заголовки подпрограмм (за исключением тех подпрограмм, которые используют директиву in1inе, которая здесь допустима). Сами подпрограммы приводятся в исполнительной части модуля.
Например:
Interface
Const n=10;
Type t_m = array [1..n] of integer;
Procedure Zap_mas (var A: t_m; r:byte);
Function Sum (D : t_m): longint;
Все заявленные в этой части идентификаторы части - тип данных t_m, константа n, и имена процедуры и функции Zap_mas и Sum - доступны для использования как в самой интерфейсной так и в остальных частях модуля. Они также могут использоваться во всех других модулях и в головной программе, если имя этого модуля содержится в предложение uses этих модулей.
3.3 Исполнительная часть модуля
Исполнительная часть включает все подпрограммы модуля. Она может также включать локальные метки, константы, типы и переменные, недоступные для других программных единиц (естественно, и для интерфейса самого модуля). Начинается исполнительная часть ключевым словом imp1еmеntаtion, а завершается либо началом секции инициализации, если она есть, либо словом еnd. (с точкой).
Исполнительная часть - "внутренняя кухня" модуля, где протекают процессы, о которых не надо "знать" другим программным единицам. Она может содержать следующие разделы:
· предложение uses (используемые модули);
· раздел объявления меток;
· раздел объявления констант;
· раздел объявления типов;
· раздел объявления переменных;
· раздел процедур и функций
В предложении uses исполнительной части перечисляются модули, параметры которых могут употребляться в модуле всюду за исключением интерфейсной части (чаще всего так и бывает).
В исполнительной части допускается циклическое применение модулей, поэтому по мере возможности именно здесь следует объявлять модули.
Если какой-то модуль объявлен в интерфейсной части, то в исполнительной части его объявлять не следует. В предложение uses исполнительной части такое же, как и в интерфейсной части.
Все разделы исполнительной части, кроме предложения uses, могут идти в любой последовательности; можно создавать несколько, однотипных разделов.
При описании процедур и функций в исполнительной части допустимо записывать их сокращенные заголовки, как в случае директивы forward. Если же здесь записываются полные заголовки, они должны быть полностью идентичны заголовкам в интерфейсной части.
Например:
Interface
Const n=10;
Type t_m = array [1..n] of integer;
Procedure Zap_mas (var A: t_m; r:byte);
Function Sum (D : t_m): longint;
imp1еmеntаtion
uses Crt;
Procedure Zap_mas;
Var
. . .
begin
. . .
end;
Function Sum;
Var
. . .
begin
. . .
end;
В примере показано, что собственно процедуры / функции определяются в интерфейсной части. При этом их заголовок должен либо полностью повторять заявленный в интерфейсной части, либо, как в примере, содержать только имя процедуры / функции.
3.4 Секция инициализации
В некоторых случаях перед обращением к модулю следует провести его инициализацию (например, установить связи с теми или иными файлами с мощью процедуры Аssign, инициализировать какие-то переменные и т. д.). Необходимые действия можно выполнить в секции инициализации модуля. Эта секция начинается словом begin после которого идут операторы, а затем помещается слово end. (с точкой), например:
begin
Аssigп (f,’a. dat’)
end.
Следует иметь в виду, что операторы секции инициализации выполняются единственный раз в момент запуска программы.
Если инициализация модуля не нужна, то в секции помещается лишь слово епd. (с точкой).
4. Создание модуля
Создание модуля ничем не отличается от процесса создания программы. Текст модуля надо набрать в окне редактора текста и сохранить в файле с расширением . PAS.
Внимание!! Имя файла, содержащего модуль, однозначно определено именем самого модуля, заданным в заголовке модуля, т. е. имя файла с модулем, заголовок которого:
Unit Proba;
должно быть PROBA. PAS.
5. Компиляция модуля
Компилируется модуль точно так же, как и обычная программа, т. е. выбором из меню Соmрile команды Соmрile.
Система сама определяет структуру компилируемого файла и создает соответственно. TPU-файл (при обнаружении unit) или. ЕХЕ-файл (при отсутствии unit). TPU - сокращение от Turbo Раsсal Unit. В первом случае формируется библиотечный модуль, во втором — готовый к выполнению файл в машинных кодах.
Внимание!! Надо установить директиву Destination = Disk
Откомпилированный модуль будет помещен в каталог, предназначенный для выполняемых программ. Имя этого каталога указано в поле EXE&TPU диалогового окна Directores, которое появляется при выборе команды Directores из меню Оptions. Процедура настройки среды Turbo Раsсal будет описана подробно в след. разделе.
6. Контрольный пример
Последовательность действий такова.
1. Загрузить среду Turbo Раsсal Для правильной компиляции и выполнения программ, содержащих модули, надо правильно настроить среду, а именно, указать каталоги, в которых находятся файлы с модулями и основной программой, а также каталоги с внешними стандартными модулями среды Turbo Раsсal и т. д. Задание необходимых каталогов и режимов работы системы Турбо Паскаль осуществляется с помощью меню пункта Options. В данной лабораторной работе в этом меню будет использоваться только подпункт Directories (задание каталогов), в котором находится следующая последовательность строк:
ЕХЕ&TPU Directory | каталог, куда происходит запись объектных файлов модулей программы и загрузочного файла программы: |
Include Directories | каталоги с файлами, подключаемыми к программе с помощью директивы {$I-} |
Unit Directories | каталоги с объектными файлами модулей, созданных пользователем, и объектными файлами внешних стандартных модулей системы Турбо Паскаль; из этих каталогов берутся файлы, необходимые для компоновки загрузочного файла программы; |
Object Directories | каталоги с объектными файлами используемых в программе функций (процедур), написанных на языке Ассемблера. |
Переход от одной строки к другой осуществляется при нажатии Tab. Для правильной компиляции многомодульной программы надо выбрать в меню команду Options / Directories произвести следующую настройку:
EХЕ & TPU Directory: D:\TP-WORK
Include directories: не указываются
Unit directories: дополнить список каталогом D:\TP-WORK
Object directories: не указывается
Завершив настройку каталогов нажать клавишу <OK>.
2. Набрать в открывшемся окне текст модуля:
unit modd;
interface
uses crt;
type mm=array [1..10] of integer;
function sm1(g:mm):real;
implementation
function sm1;
var i:integer;
begin
for i:=1 to 10 do
begin
g[i]:=random(20);
write(g[i]:4);
end;
writeln;
end;
begin
randomize
end.
Сохранить текст на диске в файле MODD. PAS. Для этого выбрать команду File/ Save as и в появившемся окне задать имя MODD <Enter>.
При этом будет создан файл MODD. PAS.
3. При помощи команды Соmрile/ Соmрile откомпилировать файл. Если текст был набран без ошибок, будет создан файл MODD. TPU. В случае наличия ошибок надо их исправить и повторить команду компиляции.
4. Открыть новое окно File/ New. Набрать текст головной программы:
program proba;
uses modd;
var
x, y:mm;
begin
writeln;
sm1(x);
sm1(y);
end.
Как видим, тип mm массивов x и y определяется не в головной программе, а в интерфейсной части модуля modd.
5. Сохранить головную программу в файле. Для этого выбрать команду File/ Save as и в появившемся окне задать любое имя, например PRIMER. <Enter>. При этом будет создан файл PRIMER. PAS.
6. Задать команду компиляции и запуска на прогон нажав клавиши <Cnrl> + <F9>, или, что тоже самое, Run / Run.
Если в тексте нет ошибок, на экране будет распечатано 2 строки целых цифр.
Если были допущены ошибки, то надо их исправить и повторить команду запуска программы.
7. Модули и принцип сокрытия информации
Традиционные правила сферы действия глобальных и локальных переменных для модулей не работают. Языковая конструкция «модуль» была специально разработана, чтобы исключить влияние глобальных переменных, объявленных в главной программе, на внутренние описания модуля.
Поэтому, если все-таки возникает необходимость ввести какие-либо доступные для всех описания (то есть глобальные описания), то для модулей это можно сделать только одним способом. А именно, создать специальный модуль для глобальных объявлений и включить его в списки предложения uses всех модулей и главной программы. Например:
Unit Global; { Модуль глобальных описаний}
Interface
Const Len =100;
Type T_mas = array [1 .. Len] of integer;
Implementation
End.
Объявленные здесь идентификаторы Len и T_mas могут исполнять роль глобальных величин для всех модулей, где в предложении uses стоит имя модуля Global.
8. Задания
Составить программу обработки целочисленных массивов W, D и A каждый из которых содержит n элементов:
Вычислить:
1. Ввести массив W(30). Найти сумму его элементов.
2. Ввести массив W(30). Найти сумму его отрицательных элементов.
3. Ввести массив W(30). Найти максимальный элемент.
4. Ввести массив W(30). Найти максимальный элемент среди нечетных элементов.
5. Ввести массив W(30). Найти индексы его минимального и максимального элементов.
6. Ввести массив W(30). Найти минимальный положительный элемент.
7. Ввести массив W(30). Сделать симметричный относительно середины обмен элементов, например, 1-й поменять местами с последним, 2-й - с предпоследним и т. д.
8. Ввести массив W(30). Все его отрицательные элементы перенести в массив А, все его положительные элементы перенести в массив D, и посчитать количество нулевых элементов.
9. Из массива W(30) перенести все четные элементы в массив A.
10. В массиве W(30). Найти его минимальный и максимальный элементы и поменять их местами.
11. Напечатать все элементы массива W(30), значения которых равны их индексам.
12. Напечатать все элементы массива W(30), которые встречаются в массиве A(30).
13. Напечатать все элементы массива W(30), которые встречаются в массиве A(30) не менее 2-х раз.
14. Найти количество элементов, общих для 3-х массивов W(30), A(30) и В(30).
15.Найти произведение всех отрицательных элементов массива W(30) и заменить им минимальный элемент массива.
16. Найти среднее арифметическое четных элементов массива W(30).
17. Найти скалярное произведение 2-х массивов A(30) и W(30)
18. Осуществить циклический сдвиг массива вправо на N элементов, N запросить и ввести в самой процедуре сдвига
19.Осуществить циклический сдвиг массива влево на N элементов, N запросить и ввести в самой процедуре сдвига
20. Сдвинуть массив вправо на N элементов, N запросить и ввести в самой процедуре сдвига. Освобождаемые в процессе сдвига элементы заполнить нулями
21.Сдвинуть массив влево на N элементов, N запросить и ввести в самой процедуре сдвига. Освобождаемые в процессе сдвига элементы заполнить нулями
22. Заполнить случайными числами массивы A(30) и W(30). Ввести с терминала n. Сформировать массив D таким образом, чтобы
D[i]=A[i]+ W[i], где i=1.. n и D[i]=0, где i=n..30.
23. Заполнить массив таким образом, чтобы каждый элемент массива был равен очередному простому числу (простыми называются числа, не имеющие целочисленных делителей).
24.Заполнить массив таким образом, чтобы каждый элемент массива был равен очередному числу, у которого сумма всех делителей – четная.
25.Заполнить массив таким образом, чтобы каждый элемент массива был равен очередному трёхзначному числу, у которого сумма цифр – четная. Например, для числа 100 сумма цифр: 1+0+0=1, для числа 101: 1+0+1=2, для числа 102: 1+0+2= 3.
26.Заполнить массив с терминала. Распечатать его. Проверить, является ли массив симметричным относительно своей середины. Т. е. последний элемент должен быть равен первому, предпоследний – второму и т. д.
27.Найти средне арифметическое положительных элементов массива
28.Найти средне арифметическое нечётных элементов массива
29. Найти максимальные элементы двух поменять их местами, т. е. максимальный элемент 1-го массива поместить во второй массив вместо его максимального элемента. И наоборот.
30.Распечатать массив таким образом, чтобы чётные его элементы печатались красным цветом, нечётные – зелёным, а нули – белым.
Пояснения к заданию
Рассматриваемые задания логически делится на три основные части:
1) ввод исходных данных и вывод полученных результатов;
2) поэлементные операции с одним массивом (сумма, произведение, нахождение максимального элемента и т. д.);
3) операции более, чем с 1-м массивом (перенос элементов из одного массива в другой, поиск скалярного произведения массивов и т. п.)
С учетом такого разбиения программа должна содержать следующие модули:
· модуль Global с описанием типа одномерного массива.
· модуль VvoViv, содержащий процедуры ввода и вывода одномерного массива;
· модуль Massl, содержащий процедуры поэлементных операций с одним массивом;
· модуль Mass2 содержащий операции более, чем с одним массивом.
Составить программу для своего варианта задания. Задание состоит из двух задач, представленных в разделе 8, номера которых определяет преподаватель. Перед выполнением задания выполнить его декомпозицию, разбив его на части, определив при этом состав каждой из частей, а также каким образом будет реализована в программе каждая из частей (в виде основной программы или в виде модуля).
Обратить внимание, что некоторые задачи имеет смысл представить в виде нескольких простых процедур / функций.
Советы по реализации модулей
Главная программа. В разделе Uses главной программы содержится список подключаемых модулей (Global, VvoViv, Massl, Mass2), созданных пользователем, и модуля Сrt. При составлении программы задать цвет экрана и несколько окон для ввода исходных данных и вывода результатов; цвет экрана, окон и символов выбрать произвольно.
Модуль глобальных имён (Global). Модуль содержит в интерфейсной части описание константы n и описание глобального типа - одномерного массива на целых чисел. Исполнительная часть и раздел инициализации отсутствуют.
Модуль ввода/вывода (VvoViv) элементов массива. В интерфейсной части модуля указан подключаемый модуль глобальных имен Global и заголовки процедур модуля. В исполнительной части содержится описание процедур. Раздел инициализации отсутствует.
Модуль поэлементных операций (Massl) с одним массивом. В разделе взаимодействия указаны подключаемые модули глобальных имен Global и ввода/вывода VvoViv, а также заголовки процедур модуля. В исполнительном разделе модуля содержатся описания процедур. Раздел инициализации отсутствует.
Модуль операций (Mass2) с несколькими массивами. В разделе взаимодействия указаны подключаемые модули: Global, VvoViv и Massl, а также заголовки процедур модуля. В исполнительном разделе модуля содержатся описания процедур. Раздел инициализации отсутствует.
9. Контрольные вопросы
1. В чем состоит основной принцип модульного программирования?
2. Чем обеспечивается принцип сокрытия информации?
3. В каком разделе программы указывается подключение модулей?
4. Какова структура модуля?
5. Каков заголовок модуля?
6. Какие разделы модуля могут отсутствовать, если в них нет необходимости?
7. Как, используя модули, создать области глобальных переменных, доступные в одних и недоступные в других модулях?
8. В чем состоит отличие сферы действия переменных в модуле и процедуре головной программы?
9. Каков порядок трансляции многомодульной программы?
10. Как задать каталог, куда будет помещён откомпилированный модуль?
11. Что содержит раздел интерфейса?
12. Что содержит исполняемый раздел?
13. Что содержит раздел инициализации?
14. В чем разница между разделом интерфейса и исполняемым разделом?
15. Когда выполняется раздел инициализации?
16. Может ли модуль не содержать раздел инициализации?
17. Как запустить на выполнение многомодульную программу?
18. Какие настройки надо установить в среде TURBO-PASCAL 7.0 для прогона программы, содержащей пользовательские модули?
19. Какие ограничения накладываются на имя файла, содержащего пользовательский модуль?
20. Какие требования к заданию в интерфейсе модуля заголовков процедур и функций?
21. В чем отличие процедур, не заявленных в интерфейсе модуля, от тех процедур, которые в интерфейсе описаны?
22. Каким ключевым словом начинается модуль?
23. Каков порядок трансляции программы, содержащей пользовательские модули?
24. Если файл пользовательского модуля создан без ошибок, то как называется файл, в который он будет оттранслирован?
25. Какие стандартные модули TURBO-PASCAL вы знаете?
10. Библиографический список
1. Учитесь программировать. Тurbo Pascal / :– М.: Издательский отдел “Вильямс”.2001. – 448 с.: ил.
2. , Программирование в среде Turbo-Pascal 7.0./ , - М.- “Диалог МИФИ”, 2003. – 288 с
3. , Tupbo-Pascal в задачах и примерах / : – СПб.: БХВ – Санкт - Петербург, 2000. – 256 с.: ил.
4. , Программирование в среде Turbo-Pascal 7.0. /, А – К.: ВЕК+, М.: Бином Универсал 1998. – 496 с.
Учебное издание
Специфицирование требований
Методические указания к практическим занятиям по курсу
"Проектирование ИС"
Для студентов бакалавриата направления 080800 -
"Прикладная математика"
дневной формы обучения
Составитель МЕДВЕДКОВА Ирина Евгеньевна,
Корректура составителей
Подписано в печать. .2010. -
Формат 60´84 1/16 Бумага офсетная. Гарнитура Таймс. Ризография.
Усл. печ. л. 0,9. Уч.-изд. л. 0,7. Тираж 100 экз. Заказ С -
Воронежская государственная технологическая академия
Участок оперативной полиграфии ВГТА
Адрес академии и участка оперативной полиграфии:
394000 Воронеж, пр. Революции, 193


