Разработка инструментария для расчета трудоемкости и стоимости разработки программного продукта по методике CETIN
Обзор и анализ существующих методик управления проектами и оценки трудоемкости. Разработка алгоритма задания параметров и вычисления трудоемкости и стоимости программного продукта. Отладка и тестирование продукта. Разработка руководства пользователя.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 18.11.2017 |
Размер файла | 2,5 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
<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>
<tiles:insert definition="select" flush="false">
<tiles:put name="selectName" value="Критичность ИС"/>
<tiles:put name="selectHint" value="Определяется в зависимости от уровня целостности продукции, с учетом конкретной методологии оценки"/>
<tiles:put name="selectNumber" value="16"/>
<tiles:put name="selectOptions" type="page">
<option value="1.18">
человеческая жизнь
</option>
<option value="1.16">
национальная безопасность
</option>
<option value="1.13">
социальный хаос и паника
</option>
<option value="1">
организационная безопасность
</option>
</tiles:put>
</tiles:insert>
<html:hidden property="k17Text"/>
<html:hidden property="k17"/>
</tiles:put>
</tiles:insert>
<html:hidden property="k18Text"/>
<html:hidden property="k18"/>
<tiles:insert definition="step" flush="false">
<tiles:put name="stepNumber" value="5"/>
<tiles:put name="title" value="Результаты расчета трудоемкости"/>
<tiles:put name="onOpenFunction">
function() {
$("#trud").html((cetin.peopleMonth()).toFixed(2));
var res = cetin.time();
$("#term").html(((res.min + res.max) / 2).toFixed(2));
$("#minTerm").html(res.min.toFixed(2));
$("#newTerm").val(cetin.newTerm);
}
</tiles:put>
<tiles:put name="onCloseFunction">
function() {
cetin.newTerm = parseFloat($("#newTerm").val());
}
</tiles:put>
<tiles:put name="validators">
[
new Validator("newTerm", /^\d+(.\d+)?$/, "Необходимо ввести число")
]
</tiles:put>
<tiles:put name="data" type="page">
<p>
Трудоемкость: <span id="trud"></span> (человеко-месяцы)
</p>
<p>
Средний срок разработки: <span id="term"></span> (месяцы)
</p>
<p>
</p>
<p>
Вы можете уменьшить срок разработки до <span id="minTerm"></span> (месяцы)
</p>
<p>
Новый срок разработки (месяцы) <html:text property="newTerm" styleId="newTerm"/>
</p>
</tiles:put>
</tiles:insert>
<tiles:insert definition="step" flush="false">
<tiles:put name="stepNumber" value="6"/>
<tiles:put name="title" value="Результаты расчета скорректированной трудоемкости"/>
<tiles:put name="onOpenFunction">
function() {
cetin.recalcPeopleMonth();
$("#newtrud").html((cetin.newPeopleMonth).toFixed(2));
$("#newterm").html((cetin.newTerm).toFixed(2));
}
</tiles:put>
<tiles:put name="onCloseFunction">
function() {
}
</tiles:put>
<tiles:put name="validators">
[]
</tiles:put>
<tiles:put name="data" type="page">
<p>
Трудоемкость: <span id="newtrud"></span> (человеко-месяцы)
</p>
<p>
Срок разработки: <span id="newterm"></span> (месяцы)
</p>
</tiles:put>
</tiles:insert>
<tiles:insert definition="step" flush="false">
<tiles:put name="stepNumber" value="7"/>
<tiles:put name="title" value="Ввод данных для получения стоимости разработки"/>
<tiles:put name="onOpenFunction">
function() {
$("#zp0").val(cetin.cost.cost);
$("#psn").val(cetin.cost.psn);
$("#pnds").val(cetin.cost.pnds);
for (var i = 0; i < 3; i++) {
$("#inf" + i).val(cetin.cost.inflation[i]);
$("#god" + i).html(new Date().getFullYear() - 3 + i);
}
}
</tiles:put>
<tiles:put name="onCloseFunction">
function() {
cetin.cost.cost = parseFloat($("#zp0").val());
cetin.cost.psn = parseFloat($("#psn").val());
cetin.cost.pnds = parseFloat($("#pnds").val());
for (var i = 0; i < 3; i++) {
cetin.cost.inflation[i] = parseFloat($("#inf" + i).val());
}
}
</tiles:put>
<tiles:put name="validators">
[
new Validator("zp0", /^\d+(.\d+)?$/, "Необходимо ввести число"),
new Validator("psn", /^\d+(.\d+)?$/, "Необходимо ввести число"),
new Validator("pnds", /^\d+(.\d+)?$/, "Необходимо ввести число"),
new Validator("inf0", /^\d+(.\d+)?$/, "Необходимо ввести число"),
new Validator("inf1", /^\d+(.\d+)?$/, "Необходимо ввести число"),
new Validator("inf2", /^\d+(.\d+)?$/, "Необходимо ввести число")
]
</tiles:put>
<tiles:put name="data" type="page">
<p>
Для оценки стоимости разработки необхоимо указать заработную плату одного программиста (по статистике за прошедший год), а также инфляцию за три прошедших года.
</p>
<p>
Заработная плата разработчику: <html:text property="zp0" styleId="zp0"/>
</p>
<p>
Инфляция за <span id="god0"></span> год: <html:text property="inf0" styleId="inf0"/>
</p>
<p>
Инфляция за <span id="god1"></span> год: <html:text property="inf1" styleId="inf1"/>
</p>
<p>
Инфляция за <span id="god2"></span> год: <html:text property="inf2" styleId="inf2"/>
</p>
<p>
Процент социальных выплат: <html:text property="psn" styleId="psn"/>
</p>
<p>
Процент НДС: <html:text property="pnds" styleId="pnds"/>
</p>
</tiles:put>
</tiles:insert>
<tiles:insert definition="step" flush="false">
<tiles:put name="stepNumber" value="8"/>
<tiles:put name="title" value="Итоги"/>
<tiles:put name="onOpenFunction">
function() {
cetin.recalcPeopleMonth();
$("#newtrud1").html((cetin.newPeopleMonth).toFixed(2));
$("#newterm1").html((cetin.newTerm).toFixed(2));
$("#peoples").html(Math.round(cetin.newPeopleMonth / cetin.newTerm));
var c = cetin.calcCost();
$("#totalCost").html((c.sppo).toFixed(2));
$("#totalCostSopr").html((c.ssppo).toFixed(2));
}
</tiles:put>
<tiles:put name="onCloseFunction">
function() {
}
</tiles:put>
<tiles:put name="validators">
[]
</tiles:put>
<tiles:put name="isLastStep" value="true"/>
<tiles:put name="data" type="page">
<p>
Трудоемкость: <span id="newtrud1"></span> (человеко-месяцы)
</p>
<p>
Срок разработки: <span id="newterm1"></span> (месяцы)
</p>
<p>
Число разработчиков: <span id="peoples"></span> (человек)
</p>
<p>
Стоимость разработки: <span id="totalCost"></span> (рубли)
</p>
<p>
Стоимость сопровождения: <span id="totalCostSopr"></span> (рубли)
</p>
<p>Сохранить параметры: Название <html:text property="name" styleId="name"/></p>
<html:hidden property="id"/>
<html:hidden property="type" value="zakaz"/>
<html:hidden property="operation" value="save"/>
<html:submit property="savee" value="Сохранить" styleId="saveButton"/>
</tiles:put>
</tiles:insert>
</html:form>
</body>
</html>
Код приложения подрядчика
<%@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;
}
}
}
</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 = parseFloat($("#c" + (j + 1)).val());
var ce = parseFloat($("#e" + (j + 1)).val());
var ct = parseFloat($("#t" + (j + 1)).val());
var ci = parseFloat($("#i" + (j + 1)).val());
var cn = parseFloat($("#n" + (j + 1)).val());
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);
$("#s" + (j + 1)).text(cetin.sj[j].toFixed(5));
}
} catch(err) {}
}
</script>
<tiles:insert definition="step" flush="false">
<tiles:put name="stepNumber" value="2"/>
<tiles:put name="title" value="Базовая трудоемкость"/>
<tiles:put name="onOpenFunction">
function() {
var params = cetin.paramsEdited;
for (var i = 1; i <= 6; i++)
{
$("#c" + i).val(params.c[i - 1]);
$("#e" + i).val(params.e[i - 1]);
$("#t" + i).val(params.t[i - 1]);
$("#i" + i).val(params.i[i - 1]);
$("#n" + i).val(params.n[i - 1]);
$("#sc" + i).val(cetin.s[i - 1][0]);
$("#se" + i).val(cetin.s[i - 1][1]);
$("#st" + i).val(cetin.s[i - 1][2]);
$("#si" + i).val(cetin.s[i - 1][3]);
$("#sn" + i).val(cetin.s[i - 1][4]);
$("#s" + i).text(cetin.sj[i - 1].toFixed(5));
}
recalcSj();
}
</tiles:put>
<tiles:put name="onCloseFunction">
recalcSj
</tiles:put>
<tiles:put name="validators">
[
]
</tiles:put>
<tiles:put name="data" type="page">
<p class="legend">
Базовая трудоемкость Sj процесса разработки с номером j, где j - номер процесса разработки (значения от 1 до 6)
расчитывается по следующей формуле:
</p>
<table>
<tr>
<td>1/165*(</td>
<td>C</td><td>*</td><td>S<sub>j</sub>(C)</td><td>+</td>
<td>E</td><td>*</td><td>S<sub>j</sub>(E)</td><td>+</td>
<td>T</td><td>*</td><td>S<sub>j</sub>(T)</td><td>+</td>
<td>I</td><td>*</td><td>S<sub>j</sub>(I)</td><td>+</td>
<td>N</td><td>*</td><td>S<sub>j</sub>(N)</td>
<td>)=</td><td>S<sub>j</sub></td>
</tr>
<tr>
<td colspan="21" style="padding-top: 12px;">Норматив трудоемкости: Бизнес-моделирование</td>
</tr>
<tr>
<td>1/165*(</td>
<td><html:text property="c1" styleId="c1" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="sc1" styleId="sc1" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="e1" styleId="e1" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="se1" styleId="se1" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="t1" styleId="t1" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="st1" styleId="st1" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="i1" styleId="i1" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="si1" styleId="si1" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="n1" styleId="n1" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="sn1" styleId="sn1" onkeyup="recalcSj();"/></td>
<td>)=</td><td><span id="s1"></span></td>
</tr>
<tr>
<td colspan="21" style="padding-top: 12px;">Норматив трудоемкости: Управление требованиями</td>
</tr>
<tr>
<td>1/165*(</td>
<td><html:text property="c2" styleId="c2" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="sc2" styleId="sc2" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="e2" styleId="e2" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="se2" styleId="se2" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="t2" styleId="t2" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="st2" styleId="st2" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="i2" styleId="i2" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="si2" styleId="si2" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="n2" styleId="n2" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="sn2" styleId="sn2" onkeyup="recalcSj();"/></td>
<td>)=</td><td><span id="s2"></span></td>
</tr>
<tr>
<td colspan="21" style="padding-top: 12px;">Норматив трудоемкости: Проектирование</td>
</tr>
<tr>
<td>1/165*(</td>
<td><html:text property="c3" styleId="c3" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="sc3" styleId="sc3" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="e3" styleId="e3" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="se3" styleId="se3" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="t3" styleId="t3" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="st3" styleId="st3" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="i3" styleId="i3" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="si3" styleId="si3" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="n3" styleId="n3" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="sn3" styleId="sn3" onkeyup="recalcSj();"/></td>
<td>)=</td><td><span id="s3"></span></td>
</tr>
<tr>
<td colspan="21" style="padding-top: 12px;">Норматив трудоемкости: Реализация</td>
</tr>
<tr>
<td>1/165*(</td>
<td><html:text property="c4" styleId="c4" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="sc4" styleId="sc4" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="e4" styleId="e4" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="se4" styleId="se4" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="t4" styleId="t4" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="st4" styleId="st4" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="i4" styleId="i4" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="si4" styleId="si4" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="n4" styleId="n4" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="sn4" styleId="sn4" onkeyup="recalcSj();"/></td>
<td>)=</td><td><span id="s4"></span></td>
</tr>
<tr>
<td colspan="21" style="padding-top: 12px;">Норматив трудоемкости: Тестирование</td>
</tr>
<tr>
<td>1/165*(</td>
<td><html:text property="c5" styleId="c5" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="sc5" styleId="sc5" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="e5" styleId="e5" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="se5" styleId="se5" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="t5" styleId="t5" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="st5" styleId="st5" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="i5" styleId="i5" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="si5" styleId="si5" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="n5" styleId="n5" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="sn5" styleId="sn5" onkeyup="recalcSj();"/></td>
<td>)=</td><td><span id="s5"></span></td>
</tr>
<tr>
<td colspan="21" style="padding-top: 12px;">Норматив трудоемкости: Развертывание</td>
</tr>
<tr>
<td>1/165*(</td>
<td><html:text property="c6" styleId="c6" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="sc6" styleId="sc6" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="e6" styleId="e6" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="se6" styleId="se6" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="t6" styleId="t6" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="st6" styleId="st6" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="i6" styleId="i6" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="si6" styleId="si6" onkeyup="recalcSj();"/></td><td>+</td>
<td><html:text property="n6" styleId="n6" onkeyup="recalcSj();"/></td><td>*</td><td><html:text property="sn6" styleId="sn6" onkeyup="recalcSj();"/></td>
<td>)=</td><td><span id="s6"></span></td>
</tr>
</table>
<div class="legend">где, S<sub>j</sub>(C) — Норматив трудоемкости реализации одного варианта использования в процессе разработки (человеко-час);<br>
S<sub>j</sub>(E) — Норматив трудоемкости реализации одного типа объектов (человеко-час/тип объектов);<br>
S<sub>j</sub>(T) — Норматив трудоемкости реализации одного свойства типа объекта (человеко-час)/(свойство типа объектов);<br>
S<sub>j</sub>(I) — Норматив трудоемкости реализации одного взаимодействия между типами объектов (человеко-час/взаимодействие между типами объектов)<br>
S<sub>j</sub>(N) — Норматив трудоемкости реализации одного типа узла (человеко-час/узел);<br>
165 — количество человеко-часов в одном человеко-месяце.</div>
</tiles:put>
</tiles:insert>
<tiles:insert definition="step" flush="false">
<tiles:put name="stepNumber" value="3"/>
<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="4"/>
<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]);
setSelected("k10", cetin.k[9]);
}
</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");
cetin.k[9] = getSelectedValue("k10");
}
</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>
<tiles:insert definition="select" flush="false">
<tiles:put name="selectName" value="Исходный язык разработки ИС"/>
<tiles:put name="selectHint" value="Определяется в зависимости от типа исходного языка, используемого при разработке ИС"/>
<tiles:put name="selectNumber" value="10"/>
<tiles:put name="selectOptions" type="page">
<option value="1.08">
традиционный (Кобол, Фортран и т.д.)
</option>
<option value="1.09">
процедурный (Си или эквивалентный)
</option>
<option value="1.07">
функциональный (Лисп или эквивалентный)
</option>
<option value="1">
объектно-ориентированный (Си++ или эквивалентный)
</option>
</tiles:put>
</tiles:insert>
</tiles:put>
</tiles:insert>
<tiles:insert definition="step" flush="false">
<tiles:put name="stepNumber" value="5"/>
<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]);
setSelected("k17", cetin.k[16]);
}
</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");
cetin.k[16] = getSelectedValue("k17");
}
</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>
<tiles:insert definition="select" flush="false">
<tiles:put name="selectName" value="Критичность ИС"/>
<tiles:put name="selectHint" value="Определяется в зависимости от уровня целостности продукции, с учетом конкретной методологии оценки"/>
<tiles:put name="selectNumber" value="16"/>
<tiles:put name="selectOptions" type="page">
<option value="1.18">
человеческая жизнь
</option>
<option value="1.16">
национальная безопасность
</option>
<option value="1.13">
социальный хаос и паника
</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="17"/>
<tiles:put name="selectOptions" type="page">
<option value="0.99">
наличие в готовом виде (есть альтернативные продукты)</option>
<option value="1">
общедоступная (известная методика)</option>
<option value="1.11">
заказная (методика заказчика специфическая)</option>
<option value="1.09">
запатентованная (методика разработчика)</option>
</tiles:put>
</tiles:insert>
</tiles:put>
</tiles:insert>
<tiles:insert definition="step" flush="false">
<tiles:put name="stepNumber" value="6"/>
<tiles:put name="title" value="Факторы данных"/>
<tiles:put name="onOpenFunction">
function() {
setSelected("k18", cetin.k[17]);
}
</tiles:put>
<tiles:put name="onCloseFunction">
function() {
cetin.k[17] = getSelectedValue("k18");
}
</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="18"/>
<tiles:put name="selectOptions" type="page">
<option value="1">
реляционный
</option>
<option value="1">
индексируемый (иерархический)
</option>
<option value="1.08">
сетевой
</option>
<option value="1.09">
объектный
</option>
<option value="0.95">
форматированный файл
</option>
</tiles:put>
</tiles:insert>
</tiles:put>
</tiles:insert>
<tiles:insert definition="step" flush="false">
<tiles:put name="stepNumber" value="7"/>
<tiles:put name="title" value="Результаты расчета трудоемкости"/>
<tiles:put name="onOpenFunction">
function() {
$("#trud").html((cetin.peopleMonth()).toFixed(2));
var res = cetin.time();
$("#term").html(((res.min + res.max) / 2).toFixed(2));
$("#minTerm").html(res.min.toFixed(2));
$("#newTerm").val(cetin.newTerm);
}
</tiles:put>
<tiles:put name="onCloseFunction">
function() {
cetin.newTerm = parseFloat($("#newTerm").val());
}
</tiles:put>
<tiles:put name="validators">
[
new Validator("newTerm", /^\d+(.\d+)?$/, "Необходимо ввести число")
]
</tiles:put>
<tiles:put name="data" type="page">
<p>
Трудоемкость: <span id="trud"></span> (человеко-месяцы)
</p>
<p>
Средний срок разработки: <span id="term"></span> (месяцы)
</p>
<p>
</p>
<p>
Вы можете уменьшить срок разработки до <span id="minTerm"></span> (месяцы)
</p>
<p>
Новый срок разработки (месяцы) <html:text property="newTerm" styleId="newTerm"/>
</p>
</tiles:put>
</tiles:insert>
<tiles:insert definition="step" flush="false">
<tiles:put name="stepNumber" value="8"/>
<tiles:put name="title" value="Результаты расчета скорректированной трудоемкости"/>
<tiles:put name="onOpenFunction">
function() {
cetin.recalcPeopleMonth();
$("#newtrud").html((cetin.newPeopleMonth).toFixed(2));
$("#newterm").html((cetin.newTerm).toFixed(2));
}
</tiles:put>
<tiles:put name="onCloseFunction">
function() {
}
</tiles:put>
<tiles:put name="validators">
[]
</tiles:put>
<tiles:put name="data" type="page">
<p>
Трудоемкость: <span id="newtrud"></span> (человеко-месяцы)
</p>
<p>
Срок разработки: <span id="newterm"></span> (месяцы)
</p>
</tiles:put>
</tiles:insert>
<tiles:insert definition="step" flush="false">
<tiles:put name="stepNumber" value="9"/>
<tiles:put name="title" value="Ввод данных для получения стоимости разработки"/>
<tiles:put name="onOpenFunction">
function() {
$("#zp0").val(cetin.cost.cost);
$("#psn").val(cetin.cost.psn);
$("#pnds").val(cetin.cost.pnds);
for (var i = 0; i < 3; i++) {
$("#inf" + i).val(cetin.cost.inflation[i]);
$("#god" + i).html(new Date().getFullYear() - 3 + i);
}
}
</tiles:put>
<tiles:put name="onCloseFunction">
function() {
cetin.cost.cost = parseFloat($("#zp0").val());
cetin.cost.psn = parseFloat($("#psn").val());
cetin.cost.pnds = parseFloat($("#pnds").val());
for (var i = 0; i < 3; i++) {
cetin.cost.inflation[i] = parseFloat($("#inf" + i).val());
}
}
</tiles:put>
<tiles:put name="validators">
[
new Validator("zp0", /^\d+(.\d+)?$/, "Необходимо ввести число"),
new Validator("psn", /^\d+(.\d+)?$/, "Необходимо ввести число"),
new Validator("pnds", /^\d+(.\d+)?$/, "Необходимо ввести число"),
new Validator("inf0", /^\d+(.\d+)?$/, "Необходимо ввести число"),
new Validator("inf1", /^\d+(.\d+)?$/, "Необходимо ввести число"),
new Validator("inf2", /^\d+(.\d+)?$/, "Необходимо ввести число")
]
</tiles:put>
<tiles:put name="data" type="page">
<p>
Для оценки стоимости разработки необхоимо указать заработную плату одного программиста (по статистике за прошедший год), а также инфляцию за три прошедших года.
</p>
<p>
Заработная плата разработчику: <html:text property="zp0" styleId="zp0"/>
</p>
<p>
Инфляция за <span id="god0"></span> год: <html:text property="inf0" styleId="inf0"/>
</p>
<p>
Инфляция за <span id="god1"></span> год: <html:text property="inf1" styleId="inf1"/>
</p>
<p>
Инфляция за <span id="god2"></span> год: <html:text property="inf2" styleId="inf2"/>
</p>
<p>
Процент социальных выплат: <html:text property="psn" styleId="psn"/>
</p>
<p>
Процент НДС: <html:text property="pnds" styleId="pnds"/>
</p>
</tiles:put>
</tiles:insert>
<tiles:insert definition="step" flush="false">
<tiles:put name="stepNumber" value="10"/>
<tiles:put name="title" value="Итоги"/>
<tiles:put name="onOpenFunction">
function() {
cetin.recalcPeopleMonth();
$("#newtrud1").html((cetin.newPeopleMonth).toFixed(2));
$("#newterm1").html((cetin.newTerm).toFixed(2));
$("#peoples").html(Math.round(cetin.newPeopleMonth / cetin.newTerm));
var c = cetin.calcCost();
$("#totalCost").html((c.sppo).toFixed(2));
$("#totalCostSopr").html((c.ssppo).toFixed(2));
}
</tiles:put>
<tiles:put name="onCloseFunction">
function() {
}
</tiles:put>
<tiles:put name="validators">
[]
</tiles:put>
<tiles:put name="isLastStep" value="true"/>
<tiles:put name="data" type="page">
<p>
Трудоемкость: <span id="newtrud1"></span> (человеко-месяцы)
</p>
<p>
Срок разработки: <span id="newterm1"></span> (месяцы)
</p>
<p>
Число разработчиков: <span id="peoples"></span> (человек)
</p>
<p>
Стоимость разработки: <span id="totalCost"></span> (рубли)
</p>
<p>
Стоимость сопровождения: <span id="totalCostSopr"></span> (рубли)
</p>
<p>Сохранить параметры: Название <html:text property="name" styleId="name"/></p>
<html:hidden property="id"/>
<html:hidden property="type" value="admin"/>
<html:hidden property="operation" value="save"/>
<html:submit property="savee" value="Сохранить" styleId="saveButton"/>
</tiles:put>
</tiles:insert>
</html:form>
</body>
</html>
Приложение 5
Функции JavaScript
/**
* Методика оценки трудоемкости проекта CETIN.
*/
var Cetin = function() {
var self = this;
/**
* Список начальных параметров:
* -Количество вариантов использования (c)
* -Количество типов объектов (e)
* -Количество свойств типов объектов (t)
* -Количество взаимодействий между типами объектов (i)
* -Количество типов узлов (n)
*/
self.params = {c: 0, e: 0, t: 0, i: 0, n: 0};
/**
* Список начальных параметров отредактированный.
*/
self.paramsEdited =
{
c: [0, 0, 0, 0, 0, 0],
e: [0, 0, 0, 0, 0, 0],
t: [0, 0, 0, 0, 0, 0],
i: [0, 0, 0, 0, 0, 0],
n: [0, 0, 0, 0, 0, 0]
};
/**
* Нормативы трудоемкости по процессам в разрезе функциональных единиц
Подобные документы
Архитектура программного продукта и требования к платформе, обоснование выбора разработки. Закономерности и основные этапы алгоритмизации и программирования, а также отладка и тестирование продукта. Разработка и содержание руководства пользователя.
дипломная работа [2,3 M], добавлен 19.01.2017Анализ существующих решений для составления расписания репетитора. Разработка архитектуры программного продукта. Выбор инструментальных средств. Проектирование реляционной базы данных. Определение методики тестирования. Реализация интерфейса пользователя.
дипломная работа [411,7 K], добавлен 22.03.2018Обоснование выбора языка программирования. Анализ входных и выходных документов. Логическая структура базы данных. Разработка алгоритма работы программы. Написание программного кода. Тестирование программного продукта. Стоимость программного продукта.
дипломная работа [1008,9 K], добавлен 13.10.2013Создание программного продукта, представляющего моделирование на компьютере логнормального распределения, определение вероятностной оценки стоимости актива. Описание работы программного продукта. Работа с графиками, таблицами, математическими функциями.
курсовая работа [742,7 K], добавлен 08.01.2009Этапы разработки и отладки приложения "Помощь почтальону". Составление сопроводительной документации. Выбор средств и методов программирования. Анализ проектных данных. Особенности создания базы данных, СУБД. Тестирование созданного программного продукта.
контрольная работа [2,5 M], добавлен 17.12.2014Разработка программного продукта, предназначенного для поиска туров, транспорта, мест проживания и расчета стоимости тура, а так же для работ с клиентской базой туристической фирмы. Тестирование программного продукта в среде Borland Developer Studio 2006.
курсовая работа [2,5 M], добавлен 08.11.2012Анализ предметной области разрабатываемого программного продукта. Разработка интерфейса пользователя и структурной схемы игровой программы "Крестики-нолики". Отладка и тестирование. Проведение исследования компонентов программной среды Borland Delphi 6.0.
курсовая работа [660,4 K], добавлен 08.03.2015Основные требования к составу и параметрам технических средства. Верификация программного продукта. Расширение функционала программы и его реализация. Отладка и тестирование программного продукта. Тестирование программы в граничных и реальных условиях.
курсовая работа [1,3 M], добавлен 29.12.2014Особенности разработки автоматизированной справочной системы по основным элементам языка ассемблера, анализ среды Borland Delphi 7.0. Способы определения трудоемкости разработки программного продукта: этапы расчета сметной стоимости, планирование цены.
дипломная работа [3,2 M], добавлен 03.04.2013Особенности алгоритмов, критерии качества. Создание и применение программного продукта на языке Delphi. Тип операционной системы. Внутренняя структура программного продукта. Руководство пользователя и программиста, расчет себестоимости и цены программы.
дипломная работа [1,5 M], добавлен 12.06.2009