Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

TRPO

.pdf
Скачиваний:
13
Добавлен:
20.03.2016
Размер:
743.59 Кб
Скачать

1. Этапы разработки программного обеспечения

Как правило, выделяют шесть этапов (в скобках указано распределение затрат по этапам разработки):

-анализ требований, предъявляемых системе (10%);

-определение спецификаций (10%);

-проектирование (15%);

-кодирование (20%);

-тестирование:

1.автономное (25%);

2.комплексное (20%);

-эксплуатация и сопровождение;

Анализ требований, предъявленных системе.

На этом этапе формулируются целевое назначение и основные свойства разрабатываемой программной системы.

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

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

В общем случае на этом этапе внимание должно быть сосредоточено на интерфейсе между человеком и ЭВМ. Базовые требования для программных подсистем:

- время обработки(работы) программы; - стоимость обработки; - вероятность ошибки;

- реакция на непредсказуемые действия пользователя; Особое внимание следует уделять пространственно-временным ограничениям и средствам

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

Определение спецификаций.

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

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

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

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

Проектирование.

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

- реализуемые функции;

-размеры;

-время выполнения; И тд.

Схема проектирования программных систем:

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

Кодирование.

Это этап разработки программного обеспечения, посредством алгоритмических языков высокого уровня. По статистике 64% всех ошибок вносятся на этапе проектирования и 36% на этапе кодирования.

Тестирование.

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

Тестирование подразумевает три стадии:

-Автономное. Модуль проверяется с помощью данных, подготовленных программистом. При этом программная среда модуля имитируется с помощью программ управления тестированием, содержащих фиктивные программы, вместо реальных., с которыми имеется обращение из модуля. Такую процедуру называют программным тестированием, а программу тестирования - UUT.

-Комплексное. В процессе тестирования проводится совместная проверка групп программных компонентов. На данном этапе обнаруживаются ошибки, пропущенные на стадии автономного тестирования. Исправление этих ошибок может составлять до ¼ общих затрат.

-Системное. Завершающий этап проверки системы, то есть проверка системы в целом с помощью независимых тестов. Независимость тестов является главным требованием. Для случая когда сравниваются характеристики нескольких систем (имеется альтернативная разработка), такая процедура известна как сравнительное тестирование.

Критерии правильности выполнения программы:

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

2.Каждая ветвь программы должна быть опробована, и программа при этом должна выдавать правильный результат;

3.Каждый путь в программе должен быть испытан, с верным результатом;

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

Тесно связаны с тестированием понятия верификации и испытания.

Верификация – это процесс выполнения доказательств в том, что программа удовлетворяет своим спецификациям.

Испытание – процесс осуществляется посредством тестирования, с целью проверки, что система функционирует в соответствии с разработанными на нее спецификациями.

Эксплуатация и сопровождение.

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

2. Жизненный цикл программного обеспечения

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

Как правило, выделяют шесть этапов (в скобках указано распределение затрат по этапам разработки):

-анализ требований, предъявляемых системе (10%);

-определение спецификаций (10%);

-проектирование (15%);

-кодирование (20%);

-тестирование:

1.автономное (25%);

2.комплексное (20%);

-эксплуатация и сопровождение;

Внастоящее время известны и используются следующие модели жизненного цикла:

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

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

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

Рис 1. Каскадная модель ЖЦ ИС .

Рис 2. Поэтапная модель с промежуточным контролем.

Рис. 3. Спиральная модель.

На практике наибольшее распространение получили две основные модели жизненного

цикла:

-каскадная модель (характерна для периода 1970-1985 гг.);

-спиральная модель (характерна для периода после 1986.г.).

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

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

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

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

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

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

3. Тестирование: программное, системное, оценочное и сравнительное тестирование

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

Тестирование – это процесс исполнения программы с целью обнаружения ошибок. Тестирование подразумевает три стадии:

-Автономное. Модуль проверяется с помощью данных, подготовленных программистом. При этом программная среда модуля имитируется с помощью программ управления тестированием, содержащих фиктивные программы, вместо реальных., с которыми имеется обращение из модуля. Такую процедуру называют программным тестированием, а программу тестирования - UUT.

-Комплексное. В процессе тестирования проводится совместная проверка групп программных компонентов. На данном этапе обнаруживаются ошибки, пропущенные на стадии автономного тестирования. Исправление этих ошибок может составлять до ¼ общих затрат.

-Системное. Завершающий этап проверки системы, то есть проверка системы в целом с помощью независимых тестов. Независимость тестов является главным требованием. Для случая когда сравниваются характеристики нескольких систем (имеется альтернативная разработка), такая процедура известна как сравнительное тестирование.

4.Правильность и надежность программ

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

Критерии правильности выполнения программы:

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

6.Каждая ветвь программы должна быть опробована, и программа при этом должна выдавать правильный результат;

7.Каждый путь в программе должен быть испытан, с верным результатом;

8.Для каждой спецификации программы необходимо располагать набором тестовых

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

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

понимается тестирование системы (программы), с целью проверки того, что система (программа) функционирует в соответствии с разработанными на нее спецификациями.

Различают три вида отклонения от нормальной работы:

1.Сбой системы – это явление, связанное с нарушением системой установленных на нее спецификаций.

2.Выброс – это сбой, произошедший из-за обработки правильных данных правильными алгоритмами системы. Исправление выброса можно предусмотреть в программе, так что не каждый выброс может привести к сбою.

3.Ошибка – это алгоритмический дефект, который создает выброс.

5.Организация интерфейса между модулями, написанными разными программистами.

Успех разработки в сильной степени зависит от того, насколько руководитель следит за ходом разработки. Задержка проекта на год складывается из множества однодневных задержек. Обычно наибольшие трудности возникают при построении интерфейса между модулями, написанными различными программистами. Поскольку количество таких интерфейсов при N исполнителях соответствует N(N-1)/2 и возрастает пропорционально квадрату числа исполнителей, проблема становится довольно сложной при разработке проекта группой из 4 и более человек. Пример. Программист может написать в течение года программу, включающую 5000 строк, а проектируемая система должна содержать 50000 строк, и ее разработка должна быть завершена в течение двух лет. Для создания такой системы достаточно пяти программистов, но они должны взаимодействовать друг с другом, а это требует времени и в определенной степени снижает производительность труда, поскольку взаимное непонимание приводит к дополнительным затратам на тестирование (рис.3.1.).

Рис. 3.1. Для группы из 5 человек имеем 10 взаимосвязей Пусть каждый из путей взаимодействия обходится программисту в 250 строк/год. В этом

случае каждый программист может составить лишь 4000 строк/год, а в течение двух лет будет составлено лишь 40000 строк. Это означает, что для написания программы из 50000 строк нужно 8 программистов, каждый из которых пишет 3250 строк/год. Для управления их работой нужен руководитель. Таким образом, имеем (рис. 3.2.).

Рис 3.2. 8 исполнителей – 36 связей Однако простой подсчет строк кода не является достоверной оценкой эффективности труда

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

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

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

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

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

(рис. 3.3.).

Рис 3.3. Снижение количества взаимосвязей при использовании бригады главного программистаы

6. Методика оценки затрат. Методика инженерно-технической оценки затрат.

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

Базовая методика оценки затрат заключается в следующем:

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

Шаг 2. Собирается аналогичная информация, например данные о подобных системах. Шаг 3. Отбираются основные релевантные данные.

Шаг 4. Проводится предварительная оценка.

Шаг 4.1. Сравнение проектируемой системы с подобными уже разработанными системами. Шаг 4.2. Разбиение системы на части и сравнение каждой из этих частей с подобными ей

частями других систем.

Шаг 4.3. Планирование работ и оценка затрат на каждый месяц.

Шаг 4.4. Разработка соглашений, которые могут быть использованы при работе. Шаг 5. Проводится окончательная оценка системы.

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

Метод экспертных оценок.

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

Метод алгоритмического анализа.

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

Метод пошагового анализа.

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

Закон Паркинсона.

Каждый исполнитель вносит какой-то вклад в работу над системой и расходует определенное время. Все привлекаемые исполнители будут выполнять свою работу безотносительно к ее важности и необходимости. При подобном подходе структура системы зачастую определяется составом коллектива разработчиков.

Затраты на завершение разработки.

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

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

7. Оценка длительности разработки на основе распределения Рэлея.

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

Где E(t) – суммарные затраты к моменту времени t, К – общая стоимость системы;

А – характеристика максимальных затрат на единичном отрезке времени.

Такая зависимость, выраженная в дифференциальной форме, отображается кривой Рэлэя:

Где E(t) – плотность затрат или ежегодные затраты.

Поскольку 60% затрат производится на этапе сопровождения, нет ничего удивительного, что максимум кривой близок к моменту создания системы, то есть к тому моменту, когда традиционно считается, что работы завершены.

Пусть P(T > t) вероятность того, что в интервале [0, t] событие не произошло. Тогда в соответствии с законом Пуассона:

Поскольку P(T <=(меньше равно) t ) + P(T>t) = 1, вероятность того, что событие произошло в интервале [0,t], можно представить в следующем виде:

Частота событий, или скорость решения задач, выражается как производная функции распределения:

Допустим, что если событие произошло, p есть вероятность решения задачи. Тогда получим следующие соотношения:

Положим, что вероятность р является функцией времени. В этом случае имеем:

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

При этом получим,

Вводя обозначение а = (аλ)/2 и умножая последнюю формулу на общую стоимость системы К, получим приведенную выше формулу для суммарных затрат E(t) к моменту времени t. Таким образом, для ежегодных затрат имеем:

Это уравнение содержит две переменные величины – t и [K – E(t)]. По мере приближения работ к завершению (с возрастанием t) скорость решения задач f(t) увеличивается. Дату завершения работ определяют по достижению максимума расходов.

8. Язык определения задач и анализатор определения задач (PSL/PSA).

PSL (Problem Statement Language) – язык предназначенный для отображения функциональных требований и требований к ресурсам, содержит набор объявлений, позволяющий определить.

PSA (Problem Statement Analyzer) – анализатор представляющий процессор, с помощью которого осуществляется испытание предложений на PSL. Анализатор генерирует базу данных, отображающую системные требования, и осуществляет проверку последовательности и анализ полноты данных. Он также содержит ряд выходных документов, содержащих сведения о выборке данных, а также об ошибках, объектах, имеющихся в базе данных, взаимосвязи между ними.

Операторы языка PSL:

Process <имя> - определяется как новый процесс;

Description <текст> - представляет описание функции, реализуемой процессом, средствами английского языка;

Subparts are <имя> - процесс <имя> связан с текущим процессом и расположен ниже его на дереве иерархии;

Part of <имя> - процесс <имя> вызывает текущий процесс; Derive <файл> - файл является выходным для текущего процесса; Using <файл > - файл является входным для текущего процесса;

Procedure <текст> - представляет описание на языке PDL алгоритма, реализуемого процессом.

PDL – язык проектирования программ, имеет внешний синтаксис, построенный на основных типах операторов (if-then-else, sequence, и др.), и предназначенный для соединения отдельных компонент в программы, а так же имеется и внутренний синтаксис, выражающийся предложениями на естественном языке, которые раскрываются последовательно, пока алгоритм не окажется описанным компонентами внешнего синтаксиса.

Характеристики PSL/PSA:

1.позволяет пользователю получить формализованное представление проблемы;

2.осуществляет документирование системных требований в единообразной форме;

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

9.Система структурного проектирования SADT.

SADT (Structured Analysis and Design Technique) – представляет собой ручную графическую систему, предназначенную для проектирования больших программных комплексов. Графический язык системы – это иерархический структурированный набор диаграмм, причем каждый блок диаграммы раскрывается более детально с помощью другой диаграммы.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]