Файл: Технол_разраб_прогр_обесп_Гагарина_Кокарева.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 20.11.2019

Просмотров: 13447

Скачиваний: 411

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

которые система позволит выполнять пользователям. Иногда сюда добавляются сведения о том, чего система делать не должна [37, 61].

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

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

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

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

Функциональная спецификация состоит из трех частей:

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

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

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


3.1.2. Эксплуатационные требования

Эксплуатационные требования определяют характеристики разрабатываемого программного обеспечения, проявляемые в процессе его использования. К таким характеристикам относят [1]:

  • правильность — функционирование в соответствии с техническим заданием. Это требование является обязательным для всякого программного продукта, но поскольку никакое тестирование не дает гарантии 100%-ной правильности, речь может идти об определенной вероятности наличия ошибок. Вероятность сбоя системы управления космическими полетами должна быть близка к нулю;

  • универсальность — обеспечение правильной работы при любых допустимых данных и защиты от неправильных данных. Так же как в предыдущем случае, доказать универсальность программы невозможно, поэтому имеет смысл говорить о степени ее универсальности;

  • надежность (помехозащищенность) — обеспечение полной повторяемости результатов, т. е. обеспечение их правильности при наличии различного рода сбоев. Источниками помех могут являться технические и программные средства, а также люди, работающие с этими средствами. В настоящее время существует достаточное количество способов избежать потерь информации при сбоях. Например, прием «создания контрольных точек», при котором сохраняются промежуточные результаты, что позволяет после сбоя программы продолжить работу с данными, записанными в последней контрольной точке. Возможно также уменьшить количество ошибок, используя дублирование систем или ввод избыточной информации;

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

  • точность результатов — обеспечение погрешности результатов не выше заданной. Величина погрешности зависит от точности исходных данных, степени адекватности используемой модели, точности выбранного метода и погрешности выполнения операций в компьютере. Жесткие требования к точности предъявляют системы навигации (например, система стыковки космических аппаратов) и системы управления технологическими процессами;

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

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

  • аппаратная совместимость — возможность совместного функционирования с некоторым оборудованием. Это требование формулируют в виде минимально возможной конфигурации оборудования, на котором будет работать данное программное обеспечение. Если предполагается использование нестандартного оборудования, то для него должны быть описаны интерфейсы;

  • эффективность — использование минимально возможного количества ресурсов технических средств (например, времени микропроцессора, объема оперативной памяти, объема внешней памяти, количества внешних устройств и др.). Эффективность оценивается по каждому ресурсу отдельно,


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

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

  • повторная входимость — возможность повторного выполнения без перезагрузки с диска. Данное требование обычно предъявляется к программному обеспечению, резидентно загруженному в оперативную память (например, драйверы);

  • реентерабельность — возможность «параллельного» использования несколькими процессами. Чтобы удовлетворить этому требованию, необходимо создавать копию данных, изменяемых программой, для каждого процесса.

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



3.2. Выбор архитектуры программного обеспечения


В технологии программирования нет четкого определения архитектуры ПО. Приведем некоторые из встречающихся в литературе.

Архитектурой программного обеспечения называют совокупность базовых концепций (принципов) его построения [1].

Архитектура ПС — это его строение, как оно видно (или должно быть видно) извне его, т. е. представление ПС как системы, состоящей из некоторой совокупности взаимодействующих подсистем [37].

Архитектура программы или компьютерной системы — это

структура или структуры системы, которые включают элементы

программы, видимые извне свойства этих элементов и связи между ними [50].

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

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

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

С точки зрения количества пользователей, работающих с одной копией ПО, различают:

  • однопользовательскую архитектуру;

  • многопользовательскую (сетевую) архитектуру.

Кроме того, в рамках однопользовательской архитектуры различают [1]:

  • программы. Программа (program, routine) — упорядоченная последовательность формализованных инструкций для решения задачи с помощью компьютера. Это самый простой вид архитектуры, который обычно используется при решении небольших задач;

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

  • программные комплексы. Программные комплексы представляют собой совокупность программ, совместно обеспе-


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

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

Многопользовательскую архитектуру реализуют системы, построенные по принципу «клиент — сервер».


3.3. Структура и формат данных. Статические, полустатические и динамические структуры


На этапе определения спецификаций для разработки качественного программного обеспечения необходимо определить структуру и формат используемых в программах данных [41].

Структура данных — это множество элементов данных и связей между ними.

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

3.3.1. Классификация структур данных


С понятием структуры данных тесно связано понятие типа данных.

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

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

Между отдельными элементами структур могут наличествовать или отсутствовать явно заданные связи. В зависимости от этого следует различать: несвязные структуры (векторы, массивы, строки, стеки, очереди) и связные структуры (связные списки).

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

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

Линейные структуры, в свою очередь, делятся на структуры с последовательным распределением (векторы, строки, массивы, стеки, очереди) и структуры с произвольным связным распределением (односвязные, двусвязные списки) по характеру распределения элементов в памяти.

Указание типа данных четко определяет:

  • размер памяти, отведенной под данную структуру и способ ее размещения в памяти;

  • значения, допустимые для данного типа данных;

  • операции, которые возможно над этими данными выполнять.


Структуры данных

Простые базовые

Статические

Полустатические

Динамические

Файловые (файлы)


Числовые

Символьные

Логические

Перечисление

Интервал

Указатели

Вектор

Массивы

Множества

Записи

Таблицы

Стеки Очереди Деки Строки

Линейные связанные списки

Разветвленные связанные списки Графы Деревья


Последовательные Прямого доступа Комбинированного доступа Организованные разделами

Рис. 3.1. Классификация структур данных


3-3-2- Простые структуры данных


Простые структуры данных служат основой для построения более сложных структур. Их называют также примитивными или базовыми структурами (типами данных). К ним относятся: числовые, битовые, логические, символьные, перечисляемые, интервальные, указатели. Структура простых типов данных для языка Pascal приведена на рис. 3.2 (в других языках программирования набор и размеры простых типов могут отличаться от приведенного на рисунке). Размер каждого типа данных указан на рисунке в байтах через запятую от названия типа.

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

На рис. 3.3—3.5 приведены примеры форматов числовых типов данных.

На рис. 3.4 S обозначает знаковый разряд числа (если S=0, то число положительное, если S= 1 — число отрицательное).

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

Простые типы

1

Логический boolean 1 байт

Битовые

Символ ьнй char 1 байт

Числовые

Перечисляемый

Интервальный [..], 1(2) байта

Указатель pointer 4 байта


byte, 1

г

word, 2

Целые

Вещественные


byte, shortint, 1

single, 4

word, integer,2

real, 6

longint, 4

double, 8

comp, 8

extended, 10

Рис. 3.2. Структура простых типов PASCAL

Младший байт

Старший байт


0 7 0 15

а б

Рис. 3.3. Формат машинного представления беззнаковых чисел: а — тип byte; б — тип word

I..ЕЮ

8 7 0 15

ПІП I

7 0 7 0 15

б

3...d

8 23 16 31 24

в

Рис. 3.4. Формат машинного представления чисел со знаком: а — shortint; б — integer; в — longint



Знак числа

Порядок

Знак порядка

Мантисса



Знак числа Характеристика Мантисса


Рис. 3.5. Формат представления вещественных чисел: а — с порядком; б — с характеристикой

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


3,33. Статические структуры данных


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


Векторы

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

С физической точки зрения элементы вектора размещаются в памяти в подряд расположенных ячейках памяти (рис. 3.6). Под элемент вектора выделяется количество байт памяти, определяемое базовым типом элемента этого вектора. Тогда размер памяти, отводимой для размещения вектора, будет определяться следующим соотношением: Б= к* 5І2еоГ(тип), где к — количество элементов (длина) вектора, а БігеоДтип) — размер памяти, необходимой для хранения одного элемента вектора.



@Имя

+0

+5ігео^тип)


+{к - л)*5ігео^тип)


Имя [л]

Имя [п + 1]


Имя [к-Ц

Имя [к]

Рис. 3.6. Представление вектора в памяти: @Имя — адрес вектора или адрес первого элемента вектора


Двумерные массивы

Двумерный массив (матрица) —■ это вектор, каждый элемент которого вектор. Поэтому то, что справедливо для вектора, справедливо и для матрицы (аналогично для я-мерных массивов).

Множества

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

Множество в памяти (рис. 3.7) хранится как массив битов, в котором каждый бит указывает, является ли элемент принадлежащим объявленному множеству или нет. Таким образом, максимальное число элементов множества 256, а данные типа множество могут занимать не более 32 байт.