Разработка инструментария для расчета трудоемкости и стоимости разработки программного продукта по методике 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>

&nbsp;

</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) &mdash; Норматив трудоемкости реализации одного варианта использования в процессе разработки (человеко-час);<br>

S<sub>j</sub>(E) &mdash; Норматив трудоемкости реализации одного типа объектов (человеко-час/тип объектов);<br>

S<sub>j</sub>(T) &mdash; Норматив трудоемкости реализации одного свойства типа объекта (человеко-час)/(свойство типа объектов);<br>

S<sub>j</sub>(I) &mdash; Норматив трудоемкости реализации одного взаимодействия между типами объектов (человеко-час/взаимодействие между типами объектов)<br>

S<sub>j</sub>(N) &mdash; Норматив трудоемкости реализации одного типа узла (человеко-час/узел);<br>

165 &mdash; количество человеко-часов в одном человеко-месяце.</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>

&nbsp;

</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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.