Разработка подсистемы прогнозирования трудоемкости и стоимости создания программного продукта по методике CETIN
Архитектура программного продукта и требования к платформе, обоснование выбора разработки. Закономерности и основные этапы алгоритмизации и программирования, а также отладка и тестирование продукта. Разработка и содержание руководства пользователя.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 19.01.2017 |
Размер файла | 2,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
<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]
};
/**
* Нормативы трудоемкости по процессам в разрезе функциональных единиц
*/
self.s = [
/* c e t i n */
[32.12, 28.33, 0.000, 14.15, 0.000], // Бизнес-моделирование
[58.03, 28.04, 0.000, 20.32, 0.000], // Управление требованиями
[45.42, 61.75, 31.35, 37.52, 24.02], // Проектирование
[31.57, 81.51, 50.72, 36.11, 0.000], // Реализация
[88.96, 0.000, 0.000, 0.000, 0.000], // Тестирование
[8.690, 0.000, 0.000, 0.000, 23.74] // Развертывание
];
/**
* Трудоемкость по процессам в разрезе функциональных единиц
*/
self.sj = [
0, // Бизнес-моделирование
0, // Управление требованиями
0, // Проектирование
0, // Реализация
0, // Тестирование
0 // Развертывание
];
/**
* Формула для определения поправочного коэффициента.
* В данной таблице представлены индексы коэффициентов, которые необходимо перемножить.
*/
self.kp = [
[11, 16, 17], // Бизнес-моделирование
[1, 2, 4, 5, 6, 7, 8, 9, 16, 17, 18], // Управление требованиями
[1, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18], // Проектирование
[1, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18], // Реализация
[1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18], // Тестирование
[1, 2, 11, 16, 18] // Развертывание
];
/**
* Срок разработки в трудоемкость.
*/
self.terms = [
[5, 30], // 1 месяц
[10, 80], // 2 месяца
[17, 140], // 3 месяца
[26, 210], // 4 месяца
[37, 280], // 5 месяцев
[50, 340], // 6 месяцев
[65, 400], // 7 месяцев
[80, 450], // 8 месяцев
[100, 500], // 9 месяцев
[120, 550], // 10 месяцев
Подобные документы
Обзор и анализ существующих методик управления проектами и оценки трудоемкости. Разработка алгоритма задания параметров и вычисления трудоемкости и стоимости программного продукта. Отладка и тестирование продукта. Разработка руководства пользователя.
дипломная работа [2,5 M], добавлен 18.11.2017Этапы разработки и отладки приложения "Помощь почтальону". Составление сопроводительной документации. Выбор средств и методов программирования. Анализ проектных данных. Особенности создания базы данных, СУБД. Тестирование созданного программного продукта.
контрольная работа [2,5 M], добавлен 17.12.2014Основные требования к составу и параметрам технических средства. Верификация программного продукта. Расширение функционала программы и его реализация. Отладка и тестирование программного продукта. Тестирование программы в граничных и реальных условиях.
курсовая работа [1,3 M], добавлен 29.12.2014Обоснование выбора языка программирования. Анализ входных и выходных документов. Логическая структура базы данных. Разработка алгоритма работы программы. Написание программного кода. Тестирование программного продукта. Стоимость программного продукта.
дипломная работа [1008,9 K], добавлен 13.10.2013Технологии разработки программного обеспечения. Процедура постановки задачи, определения требований. Последовательность действий логической, разветвленной и циклической структуры. Терминология программирования. Этапы создания программного продукта.
презентация [793,8 K], добавлен 15.11.2010Обзор существующих решений и обоснование выбора языка программирования. Разработка структурной схемы, интерфейса программного продукта. Технические требования к оборудованию, тест программного продукта, руководство системного программиста и оператора.
дипломная работа [2,0 M], добавлен 10.07.2012Выбор инструментария программирования, технология создания электронного учебника. Установка программного продукта, инструкция пользователя по сопровождению. Набор тестов и тестирование, протокол ошибок. Расчёт цены и себестоимости программного продукта.
курсовая работа [1,9 M], добавлен 09.12.2010Анализ предметной области разрабатываемого программного продукта. Разработка интерфейса пользователя и структурной схемы игровой программы "Крестики-нолики". Отладка и тестирование. Проведение исследования компонентов программной среды Borland Delphi 6.0.
курсовая работа [660,4 K], добавлен 08.03.2015Характеристика программного продукта и стадий разработки. Расчет затрат на разработку и договорной цены, эксплуатационных расходов, связанных с использованием нового программного продукта. Оценка конкурентоспособности. Изучение, оценка рыночного спроса.
курсовая работа [139,0 K], добавлен 22.09.2008Особенности алгоритмов, критерии качества. Создание и применение программного продукта на языке Delphi. Тип операционной системы. Внутренняя структура программного продукта. Руководство пользователя и программиста, расчет себестоимости и цены программы.
дипломная работа [1,5 M], добавлен 12.06.2009