Міністерство освіти і науки України Національний авіаційний університет Факультет кібербезпеки комп’ютерної та програмної інженерії Кафедра інженерії програмного забезпечення Звіт про виконання лабораторної роботи №2.1 з дисципліни: «Економіка програмного забезпечення» на тему: «ОЦІНКА ВАРТОСТІ РОЗРОБКИ ПРОГРАМНОЇ СИСТЕМИ ЗА МОДЕЛЛЮ COCOMO» Роботу виконав студент групи ПІ-421Б Падєрін В.О. Роботу перевірив викладач Литвінська Г.П. Київ – 2020 ЗмістВиконання завдання 2 Результати виконання 5 Висновки 8 Виконання завданняТема роботи: Оцінка вартості розробки програмної системи (ПС) за моделлю COCOMO. Мета роботи: Розрахунок вартості ПС за моделлю COCOMO, в залежності від рівней моделі, складності системи. Завдання. 1.Розрахувати за базовим рівнем моделі COCOMO трудовитрати (PM) і визначити час розробки (TM). Визначити середню чисельність (SS) і рівень продуктивності (Р), якщо: Варіант 10. розмір проекту, який розробляється, оцінюється в 7,5 KLOC. 2.Визначити режим складності системи за проміжним рівнем моделі COCOMO, якщо розмір проекту за першим завданням, а інші показники беруться відповідно до варіанту: Варіант 10. а) значення множників (драйверів) витрат CPLX, STOR, DOCU, РСАР змінюються до дуже високих, всі інші значення номінальні. б) значення множників (драйверів) витрат: RELY – низький, DATA – дуже низький, CPLX – низький; TIME – дуже низький, STOR – високий, VIRT (PVOL) – дуже високий, TURN (STIME) – високий; ACAP (ASAP) – високий, AEXP – дуже низький, PCAP (PERS) – дуже низький, VEXP (PEXP) – високий, LEXP (LTEX) –високий; MODP (FCIL), TOOL, SCED – високий. Спочатку необхідно підставити всі дані у формули і розрахувати середню чисельність і рівень продуктивності: COCOMO (ConstructiveCostModel) – це конструктивна модель вартості, розроблена на початку 80-х років БарріБоемом [1] для оцінки трудомісткості розробки програмних продуктів. Модель складається з ієрархії трьох послідовно деталізованих та уточнюючих рівнів (режимів). На кожному рівні всі проекти розбиваються на три групи за рівнем складності: розповсюджений або органічний тип (organicprojects); напівнезалежний або напіврозподілений тип (semidetachedprojects); вбудований тип (embeddedprojects). , , , , Ai = 2.4 Bi = 1.05 Ci = 2.5 Di = 0.38 PM = 2.4 * (7.5)1.05 = 19.91 TM = 2.5 * (19.91)0.38 = 7.79 SS = 19.91/ 7.79=2.56 P = 7.5 / 19.91 = 0.38 Потім визначаємо режим складності системи за проміжним рівнем моделі СОСОМО 1)Характеристики продукту (ProductАttributes): - RELY – Необхідна надійність ПЗ (RequiredSoftwareReliability); - DATA – Розмір БД додатку (SizeofApplicationDatabase); - CPLX – Складність продукту (ComplexityoftheProduct); 2)Характеристики апаратного забезпечення (HardwareАttributes): - TIME – Обмеження швидкодії при виконанні програми (RunTimePerformanceConstraints); - STOR – Обмеження пам’яті (MemoryConstraints); - VIRT (PVOL) – Нестійкість оточення віртуальної машини (VolatilityoftheVirtualMachineEnvironment); - TURN (STIME) – Необхідний час відновлення (RequiredTurnaboutTime); 3)Характеристики персоналу (PersonnelАttributes): - ACAP (ASAP) – Аналітичні здібності (AnalystCapability); - AEXP – Досвід розробки (ApplicationsExperience); - PCAP (PERS) – Здібності до розробки ПЗ (SoftwareEngineerCapability); - VEXP (PEXP) – Досвід використання віртуальних машин (VirtualMachineExperience); - LEXP (LTEX) – Досвід розробки на мовах програмування (ProgrammingLanguageExperience); 4)Характеристики проекту (Project Аttributes): - MODP (FCIL) – Застосування методів розробки ПЗ (ApplicationofSoftwareEngineeringMethods); - TOOL – Використання інструментарію розробки ПО (UseofSoftwareTools); - SCED – Вимоги дотримання графіка розробки (RequiredDevelopment Schedule). А) EAF = 1.30 * 1.21 * 1.23 * 0.7 = 1.35 PM = 1.35 * 3.2 * (7.5)1.05 = 126.85 Б) EAF = 0.75 * 0.7 * 1.06 * 1.07 * 0.86 * 1.29 * 1.42 * 0.9 * 0.95 * 0.91 * 0.91 * 1.04 = 0.69 PM = 0.69 * 3.2 * (7.5)1.05 = 64.84 3. Написати COCOMO калькулятор для розрахунку трудоємності, терміну розробки програмного продукту на основі базового рівня вартості COCOMO із зручним користувацьким інтерфейсом Результати виконання1.Результати: TM = 2.5 * (19.91)0.38 = 7.79 SS = 19.91/ 7.79=2.56 2.Результати: PM = 0.69 * 3.2 * (7.5)1.05 = 64.84 3. Калькулятор: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WindowsFormsApp1 { public class BasicLevelModel { //Таблиця коефіцієнтів private readonly static double[][] modelTable = new double[3][]; static BasicLevelModel() { modelTable[0] = new[] { 2.4, 1.05, 2.5, 0.38 }; modelTable[1] = new[] { 3.0, 1.12, 2.5, 0.35 }; modelTable[2] = new[] { 3.6, 1.20, 2.5, 0.32 }; } public static double GetLaborIntensity(double codeSize, ProjectType? type) { return Math.Round(modelTable[(int)type][0] * Math.Pow(codeSize, modelTable[(int)type][1]), 2); } public static double GetTimeToDevelop(double codeSize, ProjectType? type) { return Math.Round(modelTable[(int)type][2] * Math.Pow(GetLaborIntensity(codeSize, type), modelTable[(int)type][3]), 2); } public static double GetPersonsToDevelop(double codeSize, ProjectType? type) { return Math.Round(GetLaborIntensity(codeSize, type) / GetTimeToDevelop(codeSize, type), 2); } public static double GetProductivity(double codeSize, ProjectType? type) { return Math.Round(codeSize / GetLaborIntensity(codeSize, type), 2); } } public enum ProjectType { Organic = 0, Semi_detached = 1, Embedded = 2 } } using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { ProjectType? projectType; public Form1() { InitializeComponent(); } private void EmbeddedRadioButton_CheckedChanged(object sender, EventArgs e) { projectType = ProjectType.Embedded; } private void SemiDetachedRadioButton_CheckedChanged(object sender, EventArgs e) { projectType = ProjectType.Semi_detached; } private void OrganicRadioButton_CheckedChanged(object sender, EventArgs e) { projectType = ProjectType.Organic; } private void Calculate_Click(object sender, EventArgs e) { if (!IsFormValid(out double lineCount)) { MessageBox.Show("Невірно введені дані"); return; } develop_time_label.Text = $"{BasicLevelModel.GetTimeToDevelop(lineCount, projectType)} люд./міс."; labor_intensity_label.Text = BasicLevelModel.GetLaborIntensity(lineCount, projectType).ToString(); average_number_label.Text = BasicLevelModel.GetPersonsToDevelop(lineCount, projectType).ToString(); productivity_label.Text = BasicLevelModel.GetProductivity(lineCount, projectType).ToString(); } private bool IsFormValid(out double lineCount) { lineCount = 0; return !IsProjectTypeChecked() && IsKiloLineOfCodeValid(out lineCount); } private bool IsKiloLineOfCodeValid(out double result) { return double.TryParse(LinesOfCode.Text, out result); } private bool IsProjectTypeChecked() { return projectType == null; } } } ВисновкиУ даній лабораторній роботі я дізнався що таке модель СОСОМО, де і навіщо вона використовується і застосував знання про неї на практиці. Мною було розраховано середню чисельність і рівень продуктивності за даним розміром проекту, а також визначено режим складності системи за проміжним рівнем моделі. |