Разработка подсистемы прогнозирования трудоемкости и стоимости создания программного продукта по методике CETIN
Архитектура программного продукта и требования к платформе, обоснование выбора разработки. Закономерности и основные этапы алгоритмизации и программирования, а также отладка и тестирование продукта. Разработка и содержание руководства пользователя.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 19.01.2017 |
Размер файла | 2,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Если все же возникает потребность передачи информации по каналам связи, выходящим за пределы предприятия, необходимо использовать защищенные каналы связи, в том числе защищенные волоконно-оптические линии связи или предназначенные для этого криптографические средства защиты информации, согласно пункту 5.3.5 СТР-К. [9]
4. Отладка и тестирование продукта
Под тестированием понимают процесс выполнения программ с целью обнаружения факта наличия ошибок. Отладка - процесс локализации и устранения ошибок.
Тестирование начинается с разработки множества тестов и их исполнения на основе одной из выбранных методик.
Будем использовать функциональное тестирование: такие тесты фактически имитируют использование программы. Проверяется поведение системы при определенных входных данных, реакция системы на которые известна. После сравнения результатов с эталонными начинается либо диагностика проблемы (в случае расхождения результатов), либо оценка достаточности полноты тестирования.
Тестирование проводится для приложения подрядчика, так как ввод данных в обоих приложениях аналогичен.
Исходные данные и результаты тестирования сведены в таблицу 2. Графа оценка определяет соответствие результатов ожидаемым («+» - соответствуют, «-» - нет).
Функциональные возможности разработанной программы следующие: внесение, изменение, удаление входных данных пользователем, выбор необходимых характеристик, выполнение расчета трудоемкости разработки, срока разработки, числа разработчиков, стоимости разработки и стоимости сопровождения. Анализируя выполняемые программой функции и требования к её функциональности, можно сделать вывод о соответствии программы перечню функций.
Как видно из таблицы 3 попытки ввода некорректных значений не привели к сбою работы системы. В целом спроектированная система соответствует предъявленным требованиям, что говорит о качественном программном продукте.
Таблица 3. Тестирование программы
Исходные данные |
Результат |
Оценка |
|
Запуск программы |
Открытие программы в браузере. Пункты: Инициализация. |
+ |
|
Ввод количества вариантов использования, количества типов объектов, количества свойств объектов, количества взаимодействий между типами объектов, количества типов узлов (числовое значение) |
Переход на следующий шаг с помощью кнопки «ДАЛЕЕ» |
+ |
|
Нажатие на кнопку «ДАЛЕЕ» при некорректном вводе количества вариантов использования, количества типов объектов, количества свойств объектов, количества взаимодействий между типами объектов, количества типов узлов |
Сообщение «Некорректный ввод данных» |
+ |
|
Ввод нового срока разработки на шаге «6. Результаты расчета трудоемкости» (числовое значение) |
Переход на следующий шаг с помощью кнопки «ДАЛЕЕ», или, при необходимости, на предыдущий шаг с помощью кнопки «НАЗАД» |
+ |
|
Нажатие на кнопку «ДАЛЕЕ» при некорректном вводе нового срока разработки |
Сообщение «Некорректный ввод данных» |
+ |
|
Нажатие на кнопку «НАЗАД» при некорректном вводе нового срока разработки |
Сообщение «Некорректный ввод данных» |
+ |
|
Ввод заработной платы разработчика, инфляции за 3 предыдущих года, процента социальных выплат и процента НДС на шаге «8. Ввод данных для получения стоимости разработки» (числовое значение) |
Переход на следующий шаг с помощью кнопки «ДАЛЕЕ», или, при необходимости, на предыдущий шаг с помощью кнопки «НАЗАД» |
+ |
|
Нажатие на кнопку «ДАЛЕЕ» при некорректном вводе заработной платы разработчика, инфляции за 3 предыдущих года, процента социальных выплат и процента НДС |
Сообщение «Некорректный ввод данных» |
+ |
|
Нажатие на кнопку «НАЗАД» при некорректном вводе заработной платы разработчика, инфляции за 3 предыдущих года, процента социальных выплат и процента НДС |
Сообщение «Некорректный ввод данных» |
+ |
|
Шаг «9. Итоги» |
На форме Результаты подсчета выведены все требующиеся результаты: трудоемкость, сроки разработки, число разработчиков, стоимость разработки, стоимость сопровождения. |
+ |
4.1 Подготовка данных контрольного примера
Для контрольного примера возьмем такой набор исходных данных:
количество вариантов использования - C = 12;
количество типов объектов - E = 26;
количество свойств типов объектов - Т = 134;
количество взаимодействий между типами объектов - I = 102;
количество типов узлов - N = 4.
Характеристики:
Режим эксплуатации ИС: обработка данных в режиме разделения времени;
Масштаб ИС: средние ИС (от 11 до 100 пользователей с длительным ЖЦ с
возможностью роста до крупных систем);
Стабильность ИС: дискретное внесение изменений;
Защита от несанкционированного доступа: средняя;
Защита программ и данных (на уровне операционной системы, на уровне сетевого программного обеспечения, на уровне СУБД): средняя;
Контрольный след операций: не имеется;
Отказоустойчивость: средняя;
Восстанавливаемость: средняя;
Длительность обработки (время отклика): умеренная;
Исходный язык разработки: объектно-ориентированный (С++ или эквивалентный);
Класс пользователя: специалист(эксперт);
Требования к центральному обрабатывающему устройству (процессору): средняя;
Требования к оперативной (основной) памяти: большая;
Требования к внешней памяти: большая;
Требования к локальной вычислительной сети: высокие требования;
Критичность ИС: организационная безопасность;
Готовность: общедоступная (известная методика);
Представление данных: индексируемый (иерархический).
Заработная плата разработчика: 60 000 руб.;
Инфляция за 2012 год: 6,58;
Инфляция за 2013 год: 6,45;
Инфляция за 2014 год: 11,36;
Процент социальных выплат = 22%;
Процент НДС = 13%.
Срок разработки уменьшать не будем.
В ходе расчетов определяем базовые трудоемкости основных процессов:
Бизнес моделирование: S1 = 15,55;
Управление требованиями: S2 = 21,2;
Проектирование: S3 = 62,27;
Реализация: S4 = 78,65;
Тестирование: S5 = 6,47;
Развертывание: S6 = 1,21;
На основе выбранных характеристик считаем поправочные коэффициенты:
КП1=КП2=КП3=КП4=КП5=КП6=1;
Трудоемкость разработки: S=185, 35 (человеко-месяцев)
На основе таблицы П2.3 приложения 3 находим минимальный и максимальный сроки разработки, рассчитываем средний срок разработки: 8,5 месяцев.
Средняя стоимость 1 человека-месяца разработчика: Сср = 228996,2 руб.;
Стоимость работ на создание ППО ИС: СППО = 185.35*228996 =42444451.23 руб.;
Стоимость сопровождения ППО ИС: CCППО = 6366667,685 руб.
4.2 Анализ результатов расчёта и выводы
Произведем расчет с помощью приложения, введя те же исходные данные.
Пройдя все шаги, получим результат, который показан на рисунке 4.1.
Рисунок 4.1. Результат контрольного примера
Сравнив результаты ручного решения по методике и программного с помощью нашего приложения, можно сделать вывод, что данные очень близки, незначительные различия получились за счет округления при ручном решении. Поэтому программа успешно прошла тест, расчеты с её помощью верны.
5. Разработка руководства пользователя
Система обладает интуитивно понятным web-интерфейсом, поэтому пользователю нужно лишь освоиться на начальном этапе работы.
Инструкция по использованию:
Запустите файл zakaz.html в любом браузере.
На первом шаге Вам необходимо ввести функциональные единицы измерения C, E, T, I, N.
Дальнейшие действия направлены на уточнение характеристик ИС. Переходя по шагам, необходимо в выпадающих списках выбрать те варианты, которые Вы считаете адекватными.
На пятом шаге будет показан предполагаемый срок разработки. Если Вы желаете его уменьшить, то можно ввести новый срок. Но стоит учесть, что в таком случае увеличится трудоёмкость разработки и, соответственно, затраты на разработку. На следующем шаге Вы увидите скорректированный срок разработки.
Следующим шагом нужно ввести значения заработной платы разработчика в Вашем регионе, уровень инфляции за последние три года. Процент социальных выплат и НДС.
В итоге будет показан срок разработки, стоимость разработки и сопровождения программного продукта.
Если Вы хотите изменить какие-либо характеристики или значения, то есть возможность вернуться на тот шаг, где они выбираются, и выбрать новое значение.
Для закрытия программы можно закрыть вкладку или весь браузер полностью.
В ходе проектирования было решено разработать расширенное руководство пользователя, которое будет содержать информацию о методике, методах определения значений функциональных единиц измерений в случае отсутствия UML-диаграмм модели разрабатываемой информационной системы, демонстрационный пример расчета, помощь в ситуации, когда в браузере не работает JavaScript.
Для разработки руководства пользователя я решила использовать программу HTML Help Workshop.
Технология HTML Help Workshop является стандартной справочной системой для платформы Windows. Авторы могут использовать HTML Help Workshop для создания справочных файлов в своих программах или для создания содержимого веб-сайта. В качестве информационной системы технология HTML Help Workshop пригодна для широкого диапазона приложений, включая большие руководства, интерактивные книги и электронные газеты, которые также удобны, как и справочные системы программного обеспечения.
Возможности HTML Help Workshop имеют некоторые преимущества перед стандартным гипертекстом - это способность снабжения справочной системы комбинированной таблицей содержания и перечнем указателей, а также использование ключевых слов для дополнительной гиперссылочной производительности. Компилятор HTML Help, являющийся частью HTML Help Workshop, делает возможным сжатие гипертекста, графики и других файлов в сравнительно небольшой компилированный справочный файл (.chm), который может затем распространяться с программным обеспечением или загружаться из сети.
HTML Help Workshop состоит из неавтономной программы просмотра справки (Help Viewer), связанных с ней справочных компонентов и авторских систем по разработке справки от корпорации Microsoft. Программа просмотра справки использует лежащие в ее основе компоненты Microsoft Internet Explorer для отображения справочного содержимого. Программа просмотра поддерживает гипертекст, ActiveX, Java, языки скриптов (JScript и Microsoft Visual Basic Scripting Edition), а также сетевые форматы изображений (файлы.jpeg.gif и.png).
Структура CHM-документа
Простейший CHM-документ состоит из обычных гипертекстовых страниц, объединенных впоследствии в сжатый (откомпилированный) сборочный файл. После создания подобного документа для того, чтобы преобразовать его в полнофункциональный справочный файл, можно добавить к нему ряд навигационных панелей, облегчающих поиск информации в проекте.
Например, закладка TOC «Содержание» (Table of Contents, таблица содержания), куда можно вывести ссылки на гипертекстовые страницы, помещенные в документ, образовав иерархическую структуру с разворачивающимися и сворачивающимися сегментами.
Индексная закладка «Указатель», позволяет по ключевому слову найти требуемую страницу или совокупность страниц.
Закладка «Поиск» производит поиск введенного слова в тексте и просматривает страницы, содержащие это.
Достоинства HTML Help Workshop
При создании страниц проекта можно использовать весь механизм языка разметки гипертекста, добавлять скрипты JavaScript и VBScript или каскадные таблицы стилей CSS.
Возможность быстро открыть любую страницу справочного документа, выбрав из меню «Параметры» команду «Перейти по адресу…».
Возможность просмотреть любую страницу в исходном гипертекстовом коде.
Недостатки HTML Help Workshop
Возможность смотреть CHM-файлы присутствует только в операционных системах семейства Windows, где установлен Internet Explorer не ниже 4-й версии. [10]
На рисунках 5.1 - 5.2 приведены примеры интерфейса справки.
Рисунок. 5.1. Интерфейс руководства пользователя
Рисунок 5.2. Интерфейс руководства пользователя
Заключение
В ходе выпускной квалификационной работы был разработан инструментарий для расчета трудоёмкости и стоимости разработки программного продукта по методике CETIN.
В процессе выполнения данной работы был проведен следующий комплекс работ:
- проведен аналитический обзор различных методик, позволяющих произвести расчет трудоёмкости и стоимости разработки программного продукта и выбрана методика, которая позволяет произвести такой расчет на ранних этапах;
- проведен аналитический обзор различных технологий, позволяющих реализовать данную программу, показавший, что в настоящее время в данной области уже существует достаточно широкий спектр соответствующих методов и технологий разработки, что в свою очередь позволяет разработать необходимый продукт;
- разработан алгоритм программы, определены интерфейсы и все программно реализовано;
- проведено функциональное тестирование системы;
- разработано руководство пользователя системы;
Результатом выполнения выпускной квалификационной работы стала программа, отвечающая всем заданным требованиям. На данном этапе программа не позволяет в полном объёме собирать статистику по осуществленным проектам, но планируется ее расширение и создание базы данных со статистическими данными по осуществленным и предстоящим
Таким образом, разработанная программа является готовым и работоспособным продуктом.
Список использованных источников
Группа компаний SRG. [Электронный ресурс]: статья - Режим доступа: http://srgroup.ru/about/experts-say-srg/how-to-plan-the-implementation-of-it-projects/
КСИ Фактор. Проектирование и разработка ПО. [Электронный ресурс]: статья - Режим доступа: http://www.factor.kz/publ/detail.php? ID=28
Портал выбора технологий и поставщиков. [Электронный ресурс]: статья - Режим доступа: http://www.tadviser.ru/index.php/Статья: Методика_CETIN:_оценка_стоимости_разработки_информационных_систем
Портал «Корпоративный менеджмент». [Электронный ресурс]: статья - Режим доступа: http://www.cfin.ru/management/practice/supremum2002/15.shtml
Кафедра экономической кибернетики ДВНЗ УАБС НБУ. [Электронный ресурс]: статья - Режим доступа: http://study2.uabs.edu.ua/sites/PMI/Labs/Методики / Функциональные % 20 точки / Функциональные % 20 точки.pdf
Об утверждении нормативов затрат на создание, развитие и сопровождение информационных систем: Приказ и.о. Министра транспорта и коммуникаций Республики Казахстан от 25 октября 2012 года №722. Зарегистрирован в Министерстве юстиции Республики Казахстан 12 ноября 2012 года №8075
JavaScript. Подробное руководство. - Пер. с англ/. Флэнаган Д. - СПб: Символ_Плюс, 2008. - 992 с., ил.
AJAX: программирование для Интернета / Е.С. Бенкен, Г.А. Самков. - СПб.: БХВ-Петербург, 2009. - 464 с.
Приложение 1
(Справочное)
Метод определения значений функциональных единиц измерений в случае отсутствия UML-диаграмм модели разрабатываемой информационной системы.
Оценка количества вариантов использования информационной системы.
Целью данного шага является оценка окружения информационной системы (выявление актеров) и определение количества вариантов использования. Каждый из актеров отождествляется с чем-то или с кем-то, взаимодействующим с системой.
Множество актеров обычно обнаруживается в результате анализа требований или в ходе обсуждения проблемы с заинтересованными лицами и экспертами в предметной области.
Помощь в выявлении актеров окажут ответы на вопросы, приведенные в следующей таблице, которую рекомендуется заполнить.
Таблица П1.1. Рекомендуемые вопросы для выявления актеров
Вопросы |
Ответы |
|
Кто именно заинтересован в выполнении определенного требования? |
||
В каком подразделении организации должна использоваться система? |
||
Кто получит преимущества от внедрения системы в эксплуатацию? |
||
Кто будет поставлять системе те или иные данные, обращаться к ним и нести ответственность за их обновление и удаление? |
||
Кому предстоит выполнять обязанности администратора системы? |
||
Будет ли система использоваться совместно с какими-либо существующими унаследованными системами? |
В результате ответов на вопросы таблицы можно выделить основных актеров.
Процедура выявления актеров системы носит итеративный характер - первый вариант списка редко бывает окончательным. Новые актеры могут появляться в любой фазе разработки ИС. Чем полнее и правильнее определен перечень актеров, тем точнее можно оценить трудоемкость разработки.
Далее производится выявление вариантов использования информационной системы актерами. Основная задача модели Вариантов использования - представлять собой единое средство, позволяющее заказчику, конечному пользователю и разработчику совместно обсуждать функциональность и поведение системы. Каждый актер использует информационную систему для получения конкретных результатов, для удовлетворения своих потребностей. Для каждого актера составляется перечень вариантов использования системы.
Помощь в выявлении вариантов использования (функциональных возможностей ИС) окажут ответы на вопросы, приведенные в следующей таблице, которую рекомендуется заполнить.
Таблица П1.2. Рекомендуемые вопросы для выявления вариантов использования
Вопросы |
Ответы |
|
Какие задачи решает каждый актер? |
||
Способен ли тот или иной актер создавать, сохранять, изменять, удалять или считывать фрагменты данных в контексте системы? |
||
Какие варианты использования гарантируют выполнение указанных выше функций обработки данных? |
||
Какие варианты использования связаны с поддержкой и администрированием системы? |
||
Какие специфические функциональные требования предъявляет каждый актер к информационной системе? |
В результате определяется перечень вариантов использования информационной системы для каждого актера, который оформляется в виде таблицы 3.
Таблица П1.3. Перечень актеров и вариантов использования
№ |
Наименование актера |
Наименование варианта использования |
|
1 |
Актер 1 |
Вариант использования 1 |
|
Вариант использования 2 |
|||
2 |
Актер 2 |
Вариант использования 2 |
|
Вариант использования 4 |
|||
3 |
Актер 3 |
Вариант использования 1 |
|
Вариант использования 3 |
Один вариант использования может быть использован несколькими актерами, поэтому необходимо составить перечень различных (не одинаковых) вариантов использования на основании записей таблицы 4, который заносится в таблицу 4.
Таблица П1.4. Перечень вариантов использования
№ |
Наименование варианта использования |
|
1. |
Вариант использования 1 |
|
2. |
Вариант использования 2 |
|
3. |
Вариант использования 3 |
|
4. |
Вариант использования 4 |
На основании записей вышеприведенной таблицы можно оценить значение следующей функциональной единицы измерения:
- Количество вариантов использования (С) - количество записей таблицы 4.
Оценка количества типов объектов предметной области
На данном шаге выявляются все типы объектов предметной области (бизнес объекты), участвующие в вариантах использования. При выполнении каждого варианта использования информационная система оперирует объектами предметной области и реализует поведение этих объектов при достижении результатов варианта использования. Таблицу 3 при этом можно дополнить новым столбцом (последний столбец следующей таблицы 5):
Таблица П1.5. Перечень типов объектов предметной области
№ |
Актер |
Вариант использования |
Типы объектов предметной области |
|
1. |
Актер 1 |
Вариант использования 1 |
||
1.1. |
Тип объекта 1 |
|||
1.2. |
Тип объекта 2 |
|||
1.3. |
Тип объекта 3 |
|||
1.4 |
Вариант использования 2 |
|||
1.5 |
Тип объекта 4 |
|||
1.6 |
Тип объекта 5 |
|||
1.7 |
Тип объекта 2 |
|||
2. |
Актер 2 |
Вариант использования 2 |
||
2.1. |
Тип объекта 4 |
|||
2.2. |
Тип объекта 5 |
|||
2.3. |
Тип объекта 2 |
|||
2.4 |
Вариант использования 4 |
|||
2.5 |
Тип объекта 2 |
|||
2.6 |
Тип объекта 5 |
|||
3. |
Актер 3 |
Вариант использования 1 |
||
3.1. |
Тип объекта 1 |
|||
3.2. |
Тип объекта 2 |
|||
3.3. |
Тип объекта 3 |
|||
3.4 |
Вариант использования 3 |
|||
3.5 |
Тип объекта 1 |
|||
3.6 |
Тип объекта 4 |
|||
3.7 |
Тип объекта 6 |
После заполнения таблицы необходимо выявить различные (неодинаковые) типы объектов предметной области. На основании записей вышеприведенной таблицы можно оценить значение следующей функциональной единицы измерения:
- Количество типов объектов (E) - количество различных (неодинаковых) типов объектов, полученных из столбца «типы объектов предметной области»
Оценка количества свойств типов объектов
Для оценки размера функциональной единицы «Количество свойств типов объектов» достаточно посчитать количество свойств классов на диаграммах классов. Если диаграмма классов не построена, тогда оценщик определяет для каждого типа объекта количество его свойств и заносить результат в следующую таблицу 6.
Таблица П1.6. Количество свойств типов объектов
№ |
Актеры |
Варианты использования |
Типы объектов предметной области |
Количество свойств (атрибутов), которые не являются ссылкой |
|
На основании записей таблицы можно сделать оценку следующей функциональной единицы измерения:
- Количество свойств типов объектов (T) - сумма значений столбца «Атрибуты, которые не являются ссылкой», для различных (не одинаковых) типов объектов.
Оценка количества взаимодействий между типами объектов
Оценка количества взаимодействий между типами объектов осуществляется на основе подсчета количества взаимодействий (связей) между классами на диаграмме коммуникаций, либо с помощью заполнения следующей бинарной таблицы 7.
Таблица П1.7. Взаимодействия между типами объектов
Тип (1) |
Тип (2) |
Тип (3) |
… |
Тип (n-1) |
Тип (n) |
||
Тип (1) |
1 |
0 |
1 |
… |
1 |
0 |
|
Тип (2) |
0 |
… |
1 |
1 |
|||
Тип (3) |
1 |
1 |
0 |
… |
1 |
1 |
|
… |
0 |
0 |
1 |
… |
1 |
0 |
|
Тип (n-1) |
0 |
1 |
0 |
… |
0 |
0 |
|
Тип (n) |
0 |
1 |
1 |
… |
0 |
0 |
Каждая ячейка таблицы равна либо 0, либо 1. Если тип объектов строки взаимодействует с типом объектов столбца таблицы, то в ячейку на пересечении соответствующей строки и столбца записывается значение 1, в противном случае - 0.
На основании записей в таблице 7 производится оценка следующей функциональной единицы измерения:
- Количество взаимодействий между типами объектов (I) - сумма значений всех ячеек таблицы 7.
Оценка количества типов узлов
Оценка количества типов узлов определяется на основании диаграммы развертывания информационной системы. Количество типов узлов подсчитывается как общее число типов узлов на диаграмме развертывания.
Если UML-диаграмма развертывания не построена, то количество типов узлов можно оценить по количеству типов процессоров и устройств, используемых при функционировании информационной системы. Примерами процессоров и устройств могут служить рабочие станции, серверы, брандмауэры, принтеры, сканеры и другие.
Оценка функциональной единицы измерения производится следующим образом:
- Количество типов узлов (N) - количество типов процессоров и устройств, используемых при функционировании системы.
Определение функционального размера
После выполнения всех шагов оценки функциональных единиц измерения заполняется следующая таблица 8.
Таблица П1.8. Функциональный размер
количество вариантов использования |
количество типов объектов |
количество свойств типов объектов |
количество взаимодействий между типами объектов |
количество узлов |
||
SIZE |
С |
E |
T |
I |
N |
Приложение 2
(Справочное)
Таблица П2.1. Нормативы трудоемкости по процессам в разрезе функциональных единиц
№ |
Наименование процесса |
Функциональная единица измерения |
|||||
вариант использования |
тип объекта |
свойства типа объект |
свойства взаимоотношения между объектами |
тип узла |
|||
Трудоемкость, чел. час |
|||||||
1 |
Бизнес моделирование |
32,12 |
28,33 |
0,00 |
14,15 |
0,00 |
|
2 |
Управление требованиями |
58,03 |
28,04 |
0,00 |
20,32 |
0,00 |
|
3 |
Проектирование |
45,42 |
61,75 |
31,35 |
37,52 |
24,02 |
|
4 |
Реализация |
31,57 |
81,51 |
50,72 |
36,11 |
0,00 |
|
5 |
Тестирование |
88,96 |
0,00 |
0,00 |
0,00 |
0,00 |
|
6 |
Развертывание |
8,69 |
0,00 |
0,00 |
0,00 |
23,74 |
Таблица П2.2. Частные поправочные коэффициенты трудоемкости разработки и сопровождения прикладного программного обеспечения
Группа частных поправочных коэффициентов |
Фактор и обозначение частного поправочного коэффициента |
Описание фактора частного поправочного коэффициента |
Значение |
|
Внутренние факторы |
Режим эксплуатации ИС К1 |
Определяется в зависимости от конкретных технологий или типов обработки, принятых в системе программного обеспечения. Принимает следующие значения: |
||
обработка данных в режиме разделения времени |
1 |
|||
параллельная обработка данных |
1,04 |
|||
обработка данных в режиме реального времени |
1,05 |
|||
совмещенная обработка данных |
1,07 |
|||
Масштаб ИС К2 |
Масштаб может быть определен количеством одновременно работающих пользователей. Принимает следующие значения: |
|||
малые ИС (до 10 пользователей с непродолжительным ЖЦ) |
0,95 |
|||
средние ИС (от 11 до 100 пользователей с длительным ЖЦ с возможностью роста до крупных систем) |
1 |
|||
крупные ИС (от 101 до 1000 пользователей с длительным ЖЦ и миграцией унаследованных систем) |
1,05 |
|||
сверхбольшие (свыше 1000 пользователей) |
1,08 |
|||
Стабильность ИС К3 |
Определяется в зависимости от ее внутренних эволюционных аспектов или стабильности в процессе сопровождения. Принимает следующие значения: |
|||
постоянное внесение изменений |
1,1 |
|||
дискретное внесение изменений |
1 |
|||
маловероятное внесение изменений |
0,95 |
|||
Защита от несанкционированного доступа К4 |
Предотвращение или существенное затруднение несанкционированного доступа. Принимает следующие значения: |
|||
Сильная |
1,05 |
|||
Средняя |
1 |
|||
Слабая |
0,98 |
|||
Защита программ и данных (на уровне операционной системы, на уровне сетевого программного обеспечения, на уровне СУБД) К5 |
Сильная |
1,03 |
||
Средняя |
1 |
|||
Слабая |
0,97 |
|||
Контрольный след операций К6 |
Возможность фиксации несанкционированных изменений в системе: |
|||
не имеется |
1 |
Таблица П2.3. Зависимость срока разработки от трудоемкости
№ |
Срок разработки ППО |
Трудоемкость (человеко-месяц) |
|
1. |
1 месяц |
5 - 30 |
|
2. |
2 месяца |
10 - 80 |
|
3. |
3 месяца |
17 - 140 |
|
4. |
4 месяца |
26 - 210 |
|
5. |
5 месяцев |
37 - 280 |
|
6. |
6 месяцев |
50 - 340 |
|
7. |
7 месяцев |
65 - 400 |
|
8. |
8 месяцев |
80 - 450 |
|
9. |
9 месяцев |
100 - 500 |
|
10. |
10 месяцев |
120 - 550 |
|
11. |
11 месяцев |
140 - 610 |
|
12. |
12 месяцев |
160 - 670 |
|
13. |
13 месяцев |
180 - 720 |
|
14. |
14 месяцев |
200 - 770 |
|
15. |
15 месяцев |
230 - 820 |
|
16. |
16 месяцев |
260 - 870 |
|
17. |
17 месяцев |
290 - 930 |
|
18. |
18 месяцев |
330 - 990 |
|
19. |
19 месяцев |
370 - 1040 |
|
20. |
20 месяцев |
420 - 1090 |
|
21. |
21 месяц |
470 - 1150 |
|
22. |
22 месяца |
530 - 1200 |
|
23. |
23 месяца |
600 - 1250 |
|
24. |
24 месяца |
670 - 1300 |
|
25. |
25 месяцев |
750 - 1350 |
|
26. |
26 месяцев |
830 - 1400 |
|
27. |
27 месяцев |
900 - 1450 |
|
28. |
28 месяцев |
970 - 1500 |
|
29. |
29 месяцев |
1150-1550 |
|
30. |
30 месяцев |
1230-1600 |
|
31. |
31 месяц |
1310-1660 |
|
32. |
32 месяца |
1390-1720 |
|
33. |
33 месяца |
1470-1780 |
|
34. |
34 месяца |
1520-1840 |
|
35. |
35 месяцев |
1570-1900 |
|
36. |
36 месяцев |
1620-1960 |
|
37. |
37 месяцев |
1680-2020 |
|
38. |
За каждый последующий месяц |
Добавляется 40 чел.-мес. |
Таблица П2.4. Значения нормативных коэффициентов расхода разработчика.
№ |
Наименование показателя |
Обозначение |
Норматив |
|
1 |
Накладные расходы (аренда, командировочные, канцелярские товары, отпускные и др.) |
ПНР |
71,5% |
|
2 |
Расходы периода (расходы на административный управленческий персонал и маркетинг) |
ПРП |
48% |
|
3 |
Рентабельность |
ПР |
25% |
|
4 |
Коэффициент эластичности трудоемкости |
L |
0,75 |
|
5 |
Коэффициент трудоемкости сопровождения ППО |
N |
15% |
Приложение 3
(Обязательное)
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Приложение 4
Код приложения заказчика
<%@page import= «ru.cetin. CetinForm»%>
<%@page contentType= «text/html» pageEncoding= «UTF-8»%>
<%@ taglib uri= «http://struts.apache.org/tags-html» prefix= «html»%>
<%@ taglib uri= «http://struts.apache.org/tags-tiles» prefix= «tiles»%>
<html>
<head>
<title>CETIN</title>
<meta charset= «UTF-8»>
<meta name= «viewport» content= «width=device-width»>
<script type= «text/javascript» src= «js/libs/jquery/jquery.js»></script>
<script type= «text/javascript» src= «js/cetin.js»></script>
<link href= «css/style.css» type= «text/css» rel= «stylesheet»>
</head>
<body id= «body»>
<html:form method= «POST» action=»/cetin»>
<h1>Методика оценки трудоемкости программного продукта CETIN</h1>
<script type= «text/javascript»>
var cetin = new Cetin();
var stepManager = new StepManager («body», «stepManager»);
<% CetinForm form = (CetinForm) pageContext.getAttribute («Cetin», PageContext.REQUEST_SCOPE);%>
cetin.params.c = <% out.write (Integer.toString (form.getCase()));%>;
cetin.params.e = <% out.write (Integer.toString (form.getEntity()));%>;
cetin.params.t = <% out.write (Integer.toString (form.getTool()));%>;
cetin.params.i = <% out.write (Integer.toString (form.getInteraction()));%>;
cetin.params.n = <% out.write (Integer.toString (form.getNode()));%>;
cetin.paramsEdited.c = [
<% out.write (Double.toString (form.getC1 ()));%>,
<% out.write (Double.toString (form.getC2 ()));%>,
<% out.write (Double.toString (form.getC3 ()));%>,
<% out.write (Double.toString (form.getC4 ()));%>,
<% out.write (Double.toString (form.getC5 ()));%>,
<% out.write (Double.toString (form.getC6 ()));%>
];
cetin.paramsEdited.e = [
<% out.write (Double.toString (form.getE1 ()));%>,
<% out.write (Double.toString (form.getE2 ()));%>,
<% out.write (Double.toString (form.getE3 ()));%>,
<% out.write (Double.toString (form.getE4 ()));%>,
<% out.write (Double.toString (form.getE5 ()));%>,
<% out.write (Double.toString (form.getE6 ()));%>
];
cetin.paramsEdited.t = [
<% out.write (Double.toString (form.getT1 ()));%>,
<% out.write (Double.toString (form.getT2 ()));%>,
<% out.write (Double.toString (form.getT3 ()));%>,
<% out.write (Double.toString (form.getT4 ()));%>,
<% out.write (Double.toString (form.getT5 ()));%>,
<% out.write (Double.toString (form.getT6 ()));%>
];
cetin.paramsEdited.i = [
<% out.write (Double.toString (form.getI1 ()));%>,
<% out.write (Double.toString (form.getI2 ()));%>,
<% out.write (Double.toString (form.getI3 ()));%>,
<% out.write (Double.toString (form.getI4 ()));%>,
<% out.write (Double.toString (form.getI5 ()));%>,
<% out.write (Double.toString (form.getI6 ()));%>
];
cetin.paramsEdited.n = [
<% out.write (Double.toString (form.getN1 ()));%>,
<% out.write (Double.toString (form.getN2 ()));%>,
<% out.write (Double.toString (form.getN3 ()));%>,
<% out.write (Double.toString (form.getN4 ()));%>,
<% out.write (Double.toString (form.getN5 ()));%>,
<% out.write (Double.toString (form.getN6 ()));%>
];
cetin.s[0] = [
<% out.write (Double.toString (form.getSc1 ()));%>,
<% out.write (Double.toString (form.getSe1 ()));%>,
<% out.write (Double.toString (form.getSt1 ()));%>,
<% out.write (Double.toString (form.getSi1 ()));%>,
<% out.write (Double.toString (form.getSn1 ()));%>
];
cetin.s[1] = [
<% out.write (Double.toString (form.getSc2 ()));%>,
<% out.write (Double.toString (form.getSe2 ()));%>,
<% out.write (Double.toString (form.getSt2 ()));%>,
<% out.write (Double.toString (form.getSi2 ()));%>,
<% out.write (Double.toString (form.getSn2 ()));%>
];
cetin.s[2] = [
<% out.write (Double.toString (form.getSc3 ()));%>,
<% out.write (Double.toString (form.getSe3 ()));%>,
<% out.write (Double.toString (form.getSt3 ()));%>,
<% out.write (Double.toString (form.getSi3 ()));%>,
<% out.write (Double.toString (form.getSn3 ()));%>
];
cetin.s[3] = [
<% out.write (Double.toString (form.getSc4 ()));%>,
<% out.write (Double.toString (form.getSe4 ()));%>,
<% out.write (Double.toString (form.getSt4 ()));%>,
<% out.write (Double.toString (form.getSi4 ()));%>,
<% out.write (Double.toString (form.getSn4 ()));%>
];
cetin.s[4] = [
<% out.write (Double.toString (form.getSc5 ()));%>,
<% out.write (Double.toString (form.getSe5 ()));%>,
<% out.write (Double.toString (form.getSt5 ()));%>,
<% out.write (Double.toString (form.getSi5 ()));%>,
<% out.write (Double.toString (form.getSn5 ()));%>
];
cetin.s[5] = [
<% out.write (Double.toString (form.getSc6 ()));%>,
<% out.write (Double.toString (form.getSe6 ()));%>,
<% out.write (Double.toString (form.getSt6 ()));%>,
<% out.write (Double.toString (form.getSi6 ()));%>,
<% out.write (Double.toString (form.getSn6 ()));%>
];
cetin.k = [
<% out.write (Double.toString (form.getK1Text()));%>,
<% out.write (Double.toString (form.getK2Text()));%>,
<% out.write (Double.toString (form.getK3Text()));%>,
<% out.write (Double.toString (form.getK4Text()));%>,
<% out.write (Double.toString (form.getK5Text()));%>,
<% out.write (Double.toString (form.getK6Text()));%>,
<% out.write (Double.toString (form.getK7Text()));%>,
<% out.write (Double.toString (form.getK8Text()));%>,
<% out.write (Double.toString (form.getK9Text()));%>,
<% out.write (Double.toString (form.getK10Text()));%>,
<% out.write (Double.toString (form.getK11Text()));%>,
<% out.write (Double.toString (form.getK12Text()));%>,
<% out.write (Double.toString (form.getK13Text()));%>,
<% out.write (Double.toString (form.getK14Text()));%>,
<% out.write (Double.toString (form.getK15Text()));%>,
<% out.write (Double.toString (form.getK16Text()));%>,
<% out.write (Double.toString (form.getK17Text()));%>,
<% out.write (Double.toString (form.getK18Text()));%>
];
cetin.cost.cost = <% out.write (Double.toString (form.getZp0 ()));%>;
cetin.cost.psn = <% out.write (Double.toString (form.getPsn()));%>;
cetin.cost.pnds = <% out.write (Double.toString (form.getPnds()));%>;
cetin.cost.inflation[0] = <% out.write (Double.toString (form.getInf0 ()));%>;
cetin.cost.inflation[1] = <% out.write (Double.toString (form.getInf1 ()));%>;
cetin.cost.inflation[2] = <% out.write (Double.toString (form.getInf2 ()));%>;
var cachedParams = {c:0, e:0, t:0, i:0, n:0};
</script>
<tiles:insert definition= «step» flush= «false»>
<tiles:put name= «stepNumber» value= «1»/>
<tiles:put name= «isFirstStep» value= «true»/>
<tiles:put name= «title» value= «Инициализация»/>
<tiles:put name= «onOpenFunction»>
function() {
var params = cetin.params;
$(«#case»).val (params.c);
$(«#entity»).val (params.e);
$(«#tool»).val (params.t);
$(«#interaction»).val (params.i);
$(«#node»).val (params.n);
cachedParams.c = params.c;
cachedParams.e = params.e;
cachedParams.t = params.t;
cachedParams.i = params.i;
cachedParams.n = params.n;
}
</tiles:put>
<tiles:put name= «onCloseFunction»>
function() {
cetin.params.c = parseInt($(«#case»).val());
cetin.params.e = parseInt($(«#entity»).val());
cetin.params.t = parseInt($(«#tool»).val());
cetin.params.i = parseInt($(«#interaction»).val());
cetin.params.n = parseInt($(«#node»).val());
var calc = 0;
var changed = (cachedParams.c!== cetin.params.c) ||
(cachedParams.e!== cetin.params.e) ||
(cachedParams.t!== cetin.params.t) ||
(cachedParams.i!== cetin.params.i) ||
(cachedParams.n!== cetin.params.n);
for (var j = 0; j < 6; j++) {
var p = cetin.params;
if (changed)
{
cetin.paramsEdited.c[j] = p.c;
cetin.paramsEdited.e[j] = p.e;
cetin.paramsEdited.t[j] = p.t;
cetin.paramsEdited.i[j] = p.i;
cetin.paramsEdited.n[j] = p.n;
var sji = cetin.s[j];
var sj = 1.0 / 165 * (p.c * sji[0] + p.e * sji[1] + p.t * sji[2] + p.i * sji[3] + p.n * sji[4]);
cetin.sj[j] = sj;
}
}
recalcSj();
}
</tiles:put>
<tiles:put name= «validators»>
[
new Validator («case», /^\d+$/, «Необходимо ввести число»),
new Validator («entity», /^\d+$/, «Необходимо ввести число»),
new Validator («tool», /^\d+$/, «Необходимо ввести число»),
new Validator («interaction», /^\d+$/, «Необходимо ввести число»),
new Validator («node», /^\d+$/, «Необходимо ввести число»)
]
</tiles:put>
<tiles:put name= «data» type= «page»>
<p>
Для начала оценки необходимо составить диаграмму вариантов использования, диаграмму классов, диаграмму коммуникаций и диаграмму развертывания.
</p>
<p>
По полученным данным диаграмм необходимо заполнить следующие поля:
</p>
<p>
Количество вариантов использования (case):
<html:text property= «case» styleId= «case» size= «8»/>
</p>
<p>
Количество типов объектов (entity):
<html:text property= «entity» styleId= «entity» size= «8»/>
</p>
<p>
Количество свойств типов объектов (tool):
<html:text property= «tool» styleId= «tool» size= «8»/>
</p>
<p>
Количество взаимодействий между типами объектов (interaction):
<html:text property= «interaction» styleId= «interaction» size= «8»/>
</p>
<p>
Количество типов узлов (node):
<html:text property= «node» styleId= «node» size= «8»/>
</p>
</tiles:put>
</tiles:insert>
<script type= «text/javascript»>
function recalcSj() {
try {
for (var j = 0; j < 6; j++) {
var cc = cetin.params.c;
var ce = cetin.params.e;
var ct = cetin.params.t;
var ci = cetin.params.i;
var cn = cetin.params.n;
var scc = parseFloat($(«#sc» + (j + 1)).val());
var sce = parseFloat($(«#se» + (j + 1)).val());
var sct = parseFloat($(«#st» + (j + 1)).val());
var sci = parseFloat($(«#si» + (j + 1)).val());
var scn = parseFloat($(«#sn» + (j + 1)).val());
cetin.paramsEdited.c[j] = cc;
cetin.paramsEdited.e[j] = ce;
cetin.paramsEdited.t[j] = ct;
cetin.paramsEdited.i[j] = ci;
cetin.paramsEdited.n[j] = cn;
cetin.s[j] [0] = scc;
cetin.s[j] [1] = sce;
cetin.s[j] [2] = sct;
cetin.s[j] [3] = sci;
cetin.s[j] [4] = scn;
cetin.sj[j] = 1.0 / 165 * (cc * scc + ce * sce + ct * sct + ci * sci + cn * scn);
}
} catch(err) {}
}
</script>
<html:hidden property= «c1» styleId= «c1»/><html:hidden property= «sc1» styleId= «sc1»/>
<html:hidden property= «e1» styleId= «e1»/><html:hidden property= «se1» styleId= «se1»/>
<html:hidden property= «t1» styleId= «t1»/><html:hidden property= «st1» styleId= «st1»/>
<html:hidden property= «i1» styleId= «i1»/><html:hidden property= «si1» styleId= «si1»/>
<html:hidden property= «n1» styleId= «n1»/><html:hidden property= «sn1» styleId= «sn1»/>
<html:hidden property= «c2» styleId= «c2»/><html:hidden property= «sc2» styleId= «sc2»/>
<html:hidden property= «e2» styleId= «e2»/><html:hidden property= «se2» styleId= «se2»/>
<html:hidden property= «t2» styleId= «t2»/><html:hidden property= «st2» styleId= «st2»/>
<html:hidden property= «i2» styleId= «i2»/><html:hidden property= «si2» styleId= «si2»/>
<html:hidden property= «n2» styleId= «n2»/><html:hidden property= «sn2» styleId= «sn2»/>
<html:hidden property= «c3» styleId= «c3»/><html:hidden property= «sc3» styleId= «sc3»/>
<html:hidden property= «e3» styleId= «e3»/><html:hidden property= «se3» styleId= «se3»/>
<html:hidden property= «t3» styleId= «t3»/><html:hidden property= «st3» styleId= «st3»/>
<html:hidden property= «i3» styleId= «i3»/><html:hidden property= «si3» styleId= «si3»/>
<html:hidden property= «n3» styleId= «n3»/><html:hidden property= «sn3» styleId= «sn3»/>
<html:hidden property= «c4» styleId= «c4»/><html:hidden property= «sc4» styleId= «sc4»/>
<html:hidden property= «e4» styleId= «e4»/><html:hidden property= «se4» styleId= «se4»/>
<html:hidden property= «t4» styleId= «t4»/><html:hidden property= «st4» styleId= «st4»/>
<html:hidden property= «i4» styleId= «i4»/><html:hidden property= «si4» styleId= «si4»/>
<html:hidden property= «n4» styleId= «n4»/><html:hidden property= «sn4» styleId= «sn4»/>
<html:hidden property= «c5» styleId= «c5»/><html:hidden property= «sc5» styleId= «sc5»/>
<html:hidden property= «e5» styleId= «e5»/><html:hidden property= «se5» styleId= «se5»/>
<html:hidden property= «t5» styleId= «t5»/><html:hidden property= «st5» styleId= «st5»/>
<html:hidden property= «i5» styleId= «i5»/><html:hidden property= «si5» styleId= «si5»/>
<html:hidden property= «n5» styleId= «n5»/><html:hidden property= «sn5» styleId= «sn5»/>
<html:hidden property= «c6» styleId= «c6»/><html:hidden property= «sc6» styleId= «sc6»/>
<html:hidden property= «e6» styleId= «e6»/><html:hidden property= «se6» styleId= «se6»/>
<html:hidden property= «t6» styleId= «t6»/><html:hidden property= «st6» styleId= «st6»/>
<html:hidden property= «i6» styleId= «i6»/><html:hidden property= «si6» styleId= «si6»/>
<html:hidden property= «n6» styleId= «n6»/><html:hidden property= «sn6» styleId= «sn6»/>
<tiles:insert definition= «step» flush= «false»>
<tiles:put name= «stepNumber» value= «2»/>
<tiles:put name= «title» value= «Внутренние факторы 1»/>
<tiles:put name= «onOpenFunction»>
function() {
setSelected («k1», cetin.k[0]);
setSelected («k2», cetin.k[1]);
setSelected («k3», cetin.k[2]);
setSelected («k4», cetin.k[3]);
setSelected («k5», cetin.k[4]);
}
</tiles:put>
<tiles:put name= «onCloseFunction»>
function() {
cetin.k[0] = getSelectedValue («k1»);
cetin.k[1] = getSelectedValue («k2»);
cetin.k[2] = getSelectedValue («k3»);
cetin.k[3] = getSelectedValue («k4»);
cetin.k[4] = getSelectedValue («k5»);
}
</tiles:put>
<tiles:put name= «validators»>
[]
</tiles:put>
<tiles:put name= «data» type= «page»>
<tiles:insert definition= «select» flush= «false»>
<tiles:put name= «selectName» value= «Режим эксплуатации ИС»/>
<tiles:put name= «selectHint» value= «Определяется в зависимости от конкретных технологий или типов обработки, принятых в системе программного обеспечения»/>
<tiles:put name= «selectNumber» value= «1»/>
<tiles:put name= «selectOptions» type= «page»>
<option value= «1»>
обработка данных в режиме разделения времени
</option>
<option value= «1.04»>
параллельная обработка данных
</option>
<option value= «1.05»>
обработка данных в режиме реального времени
</option>
<option value= «1.07»>
совмещенная обработка данных
</option>
</tiles:put>
</tiles:insert>
<tiles:insert definition= «select» flush= «false»>
<tiles:put name= «selectName» value= «Масштаб ИС»/>
<tiles:put name= «selectHint» value= «Масштаб может быть определен количеством одновременно работающих пользователей»/>
<tiles:put name= «selectNumber» value= «2»/>
<tiles:put name= «selectOptions» type= «page»>
<option value= «0.95»>
малые ИС (до 10 пользователей с непродолжительным ЖЦ)
</option>
<option value= «1»>
средние ИС (от 11 до 100 пользователей с длительным ЖЦ с возможностью роста до крупных систем)
</option>
<option value= «1.05»>
крупные ИС (от 101 до 1000 пользователей с длительным ЖЦ и миграцией унаследованных систем
</option>
<option value= «1.08»>
сверхбольшие (свыше 1000 пользователей)
</option>
</tiles:put>
</tiles:insert>
<tiles:insert definition= «select» flush= «false»>
<tiles:put name= «selectName» value= «Стабильность ИС»/>
<tiles:put name= «selectHint» value= «Определяется в зависимости от ее внутренних эволюционных аспектов или стабильности в процессе сопровождения»/>
<tiles:put name= «selectNumber» value= «3»/>
<tiles:put name= «selectOptions» type= «page»>
<option value= «1.1»>
постоянное внесение изменений
</option>
<option value= «1»>
дискретное внесение изменений
</option>
<option value= «0.95»>
маловероятное внесение изменений
</option>
</tiles:put>
</tiles:insert>
<tiles:insert definition= «select» flush= «false»>
<tiles:put name= «selectName» value= «Защита от несанкционированного доступа»/>
<tiles:put name= «selectHint» value= «Предотвращение или существенное затруднение несанкционированного доступа»/>
<tiles:put name= «selectNumber» value= «4»/>
<tiles:put name= «selectOptions» type= «page»>
<option value= «1.05»>
сильная
</option>
<option value= «1»>
средняя
</option>
<option value= «0.98»>
слабая
</option>
</tiles:put>
</tiles:insert>
<tiles:insert definition= «select» flush= «false»>
<tiles:put name= «selectName» value= «Защита программ и данных»/>
<tiles:put name= «selectHint» value= «на уровне операционной системы, на уровне сетевого программного обеспечения, на уровне СУБД»/>
<tiles:put name= «selectNumber» value= «5»/>
<tiles:put name= «selectOptions» type= «page»>
<option value= «1.03»>
сильная
</option>
<option value= «1»>
средняя
</option>
<option value= «0.97»>
слабая
</option>
</tiles:put>
</tiles:insert>
</tiles:put>
</tiles:insert>
<tiles:insert definition= «step» flush= «false»>
<tiles:put name= «stepNumber» value= «3»/>
<tiles:put name= «title» value= «Внутренние факторы 2»/>
<tiles:put name= «onOpenFunction»>
function() {
setSelected («k6», cetin.k[5]);
setSelected («k7», cetin.k[6]);
setSelected («k8», cetin.k[7]);
setSelected («k9», cetin.k[8]);
}
</tiles:put>
<tiles:put name= «onCloseFunction»>
function() {
cetin.k[5] = getSelectedValue («k6»);
cetin.k[6] = getSelectedValue («k7»);
cetin.k[7] = getSelectedValue («k8»);
cetin.k[8] = getSelectedValue («k9»);
}
</tiles:put>
<tiles:put name= «validators»>
[]
</tiles:put>
<tiles:put name= «data» type= «page»>
<tiles:insert definition= «select» flush= «false»>
<tiles:put name= «selectName» value= «Контрольный след операций»/>
<tiles:put name= «selectHint» value= «Возможность фиксации несанкционированных изменений в системе»/>
<tiles:put name= «selectNumber» value= «6»/>
<tiles:put name= «selectOptions» type= «page»>
<option value= «1»>
не имеется
</option>
<option value= «1.08»>
выборочное отслеживание
</option>
<option value= «1.13»>
полное отслеживание
</option>
</tiles:put>
</tiles:insert>
<tiles:insert definition= «select» flush= «false»>
<tiles:put name= «selectName» value= «Отказоустойчивость»/>
<tiles:put name= «selectHint» value= «Свойство системы непрерывно сохранять работоспособное состояние в течении некоторого времени»/>
<tiles:put name= «selectNumber» value= «7»/>
<tiles:put name= «selectOptions» type= «page»>
<option value= «1.15»>
Высокая
</option>
<option value= «1»>
Средняя
</option>
<option value= «0.92»>
Низкая
</option>
</tiles:put>
</tiles:insert>
<tiles:insert definition= «select» flush= «false»>
<tiles:put name= «selectName» value= «Восстанавливаемость»/>
<tiles:put name= «selectHint» value= «Среднее время восстановления работоспособности после отказа»/>
<tiles:put name= «selectNumber» value= «8»/>
<tiles:put name= «selectOptions» type= «page»>
<option value= «1.12»>
Высокая
</option>
<option value= «1»>
Средняя
</option>
<option value= «0.98»>
Низкая
</option>
</tiles:put>
</tiles:insert>
<tiles:insert definition= «select» flush= «false»>
<tiles:put name= «selectName» value= «Длительность обработки (время отклика)»/>
<tiles:put name= «selectHint» value= «Быстрота реакции системы на входные воздействия»/>
<tiles:put name= «selectNumber» value= «9»/>
<tiles:put name= «selectOptions» type= «page»>
<option value= «1.21»>
быстрая</option>
<option value= «1»>
умеренная</option>
<option value= «0.92»>
медленная</option>
</tiles:put>
</tiles:insert>
<html:hidden property= «k10Text»/>
<html:hidden property= «k10»/>
</tiles:put>
</tiles:insert>
<tiles:insert definition= «step» flush= «false»>
<tiles:put name= «stepNumber» value= «4»/>
<tiles:put name= «title» value= «Факторы среды»/>
<tiles:put name= «onOpenFunction»>
function() {
setSelected («k11», cetin.k[10]);
setSelected («k12», cetin.k[11]);
setSelected («k13», cetin.k[12]);
setSelected («k14», cetin.k[13]);
setSelected («k15», cetin.k[14]);
setSelected («k16», cetin.k[15]);
}
</tiles:put>
<tiles:put name= «onCloseFunction»>
function() {
cetin.k[10] = getSelectedValue («k11»);
cetin.k[11] = getSelectedValue («k12»);
cetin.k[12] = getSelectedValue («k13»);
cetin.k[13] = getSelectedValue («k14»);
cetin.k[14] = getSelectedValue («k15»);
cetin.k[15] = getSelectedValue («k16»);
}
</tiles:put>
<tiles:put name= «validators»>
[]
</tiles:put>
<tiles:put name= «data» type= «page»>
<tiles:insert definition= «select» flush= «false»>
<tiles:put name= «selectName» value= «Класс пользователя»/>
<tiles:put name= «selectHint» value= «Определяется в зависимости от уровня мастерства или характеристик определенного класса пользователей. Пользователем может быть система, являющаяся внешней по отношении к рассматриваемой системе»/>
<tiles:put name= «selectNumber» value= «11»/>
<tiles:put name= «selectOptions» type= «page»>
<option value= «1.12»>
начинающий
</option>
<option value= «1.07»>
средний
</option>
<option value= «1»>
специалист (эксперт)
</option>
<option value= «1.14»>
случайный
</option>
<option value= «1.06»>
другая ИС (ПО)
</option>
<option value= «1.09»>
технические средства
</option>
</tiles:put>
</tiles:insert>
<tiles:insert definition= «select» flush= «false»>
<tiles:put name= «selectName» value= «Требования к центральному обрабатывающему устройству (процессору)»/>
<tiles:put name= «selectHint» value= «Определяются требованиями к тактовой частоте процессора (скорости процессора)»/>
<tiles:put name= «selectNumber» value= «12»/>
<tiles:put name= «selectOptions» type= «page»>
<option value= «0.99»>
высокая
</option>
<option value= «1»>
средняя
</option>
</tiles:put>
</tiles:insert>
<tiles:insert definition= «select» flush= «false»>
<tiles:put name= «selectName» value= «Требования к оперативной (основной) памяти»/>
<tiles:put name= «selectHint» value= «ИС должна быть идентифицирована по требованиям, предъявляемым к оперативной памяти (объем, быстродействие)»/>
<tiles:put name= «selectNumber» value= «13»/>
<tiles:put name= «selectOptions» type= «page»>
<option value= «1»>
большая
</option>
<option value= «1.04»>
малая
</option>
</tiles:put>
</tiles:insert>
<tiles:insert definition= «select» flush= «false»>
<tiles:put name= «selectName» value= «Требования к внешней памяти»/>
<tiles:put name= «selectHint» value= «ИС должна быть идентифицирована по требованиям, предъявляемым к оперативной памяти (объем, быстродействие)»/>
<tiles:put name= «selectNumber» value= «14»/>
<tiles:put name= «selectOptions» type= «page»>
<option value= «1»>
большая
</option>
<option value= «1.01»>
малая
</option>
</tiles:put>
</tiles:insert>
<tiles:insert definition= «select» flush= «false»>
<tiles:put name= «selectName» value= «Требования к локальной вычислительной сети»/>
<tiles:put name= «selectHint» value= «ИС должна быть идентифицирована по требованиям, предъявляемым к ЛВС (пропускная способность, зашита информации в сети)»/>
<tiles:put name= «selectNumber» value= «15»/>
<tiles:put name= «selectOptions» type= «page»>
<option value= «1»>
высокие требования
</option>
<option value= «1.02»>
средние требования
</option>
</tiles:put>
</tiles:insert>
Подобные документы
Обзор и анализ существующих методик управления проектами и оценки трудоемкости. Разработка алгоритма задания параметров и вычисления трудоемкости и стоимости программного продукта. Отладка и тестирование продукта. Разработка руководства пользователя.
дипломная работа [2,5 M], добавлен 18.11.2017Этапы разработки и отладки приложения "Помощь почтальону". Составление сопроводительной документации. Выбор средств и методов программирования. Анализ проектных данных. Особенности создания базы данных, СУБД. Тестирование созданного программного продукта.
контрольная работа [2,5 M], добавлен 17.12.2014Основные требования к составу и параметрам технических средства. Верификация программного продукта. Расширение функционала программы и его реализация. Отладка и тестирование программного продукта. Тестирование программы в граничных и реальных условиях.
курсовая работа [1,3 M], добавлен 29.12.2014Обоснование выбора языка программирования. Анализ входных и выходных документов. Логическая структура базы данных. Разработка алгоритма работы программы. Написание программного кода. Тестирование программного продукта. Стоимость программного продукта.
дипломная работа [1008,9 K], добавлен 13.10.2013Технологии разработки программного обеспечения. Процедура постановки задачи, определения требований. Последовательность действий логической, разветвленной и циклической структуры. Терминология программирования. Этапы создания программного продукта.
презентация [793,8 K], добавлен 15.11.2010Обзор существующих решений и обоснование выбора языка программирования. Разработка структурной схемы, интерфейса программного продукта. Технические требования к оборудованию, тест программного продукта, руководство системного программиста и оператора.
дипломная работа [2,0 M], добавлен 10.07.2012Выбор инструментария программирования, технология создания электронного учебника. Установка программного продукта, инструкция пользователя по сопровождению. Набор тестов и тестирование, протокол ошибок. Расчёт цены и себестоимости программного продукта.
курсовая работа [1,9 M], добавлен 09.12.2010Анализ предметной области разрабатываемого программного продукта. Разработка интерфейса пользователя и структурной схемы игровой программы "Крестики-нолики". Отладка и тестирование. Проведение исследования компонентов программной среды Borland Delphi 6.0.
курсовая работа [660,4 K], добавлен 08.03.2015Характеристика программного продукта и стадий разработки. Расчет затрат на разработку и договорной цены, эксплуатационных расходов, связанных с использованием нового программного продукта. Оценка конкурентоспособности. Изучение, оценка рыночного спроса.
курсовая работа [139,0 K], добавлен 22.09.2008Особенности алгоритмов, критерии качества. Создание и применение программного продукта на языке Delphi. Тип операционной системы. Внутренняя структура программного продукта. Руководство пользователя и программиста, расчет себестоимости и цены программы.
дипломная работа [1,5 M], добавлен 12.06.2009