Министерство науки и высшего образования РФ ФГАОУ ВПО Национальный исследовательский технологический университет «МИСИС» Институт Информационных технологий и компьютерных наук (ИТКН) Кафедра Инфокоммуникационных технологий (ИКТ) Отчет по лабораторной работе №1 по дисциплине «Технологии Разработки ПО» на тему «Расчет показателей масштабности» Выполнил студенты группы БИСТ-20-1 Лысенко О.А. Проверил: Карпишук А.В Москва, 2022 Цель работы: освоение методики определения масштабов программных средств и получение практических навыков в оценке производительности и качества работы программиста. Теория: В оценке сроков и стоимости разработки программного проекта выделяют два основных этапа: оценивание размера программы и, опираясь на полученные данные, оценивание трудозатрат и стоимости. При этом трудоемкость разработки в рамках одного класса решаемых задач практически линейно зависит от масштаба проекта. Организации, сферой деятельности которых является разработка программ, имеют собственные наработки и стандарты в методике определения трудоемкости, опирающиеся на опыт выполнения предыдущих проектов и позволяющие оптимально распределить ресурсы. Важными параметрами в учете ресурсов являются производительность и качество работы отдельных программистов или групп разработчиков, для оценки которых необходим расчет численных показателей (метрик) программного кода. К размерно-ориентированным метрикам относится метрика строки кода (source lines of code, SLOC) – совокупное количество строк кода в модулях программы. Различают физические (physical) и логические (logical) строки кода. Физической строке соответствует одна строка листинга программы, логической строке соответствует, как правило, один оператор языка программирования. Поскольку один и тот же программный код, даже в рамках 5 одного языка, может быть описан разным количеством физических строк, для оценки трудоемкости используют логические строки кода. При подсчете показателя SLOC в программах на языках C/C++, С# считаются: 1. Операторы ветвления: if, else if, else, ?, try, catch, switch. 2. Операторы цикла: for, while, do..while. Инициализация, условие и инкремент в заголовке цикла for, фигурные скобки {}, ограничивающие тело цикла, а также закрывающий оператор цикла разделитель точка с запятой не считаются. 3. Операторы перехода: return, break, goto, exit, continue, throw. Метки, используемые совместно с оператором goto, не считаются. 4. Прочие операторы, оканчивающиеся точкой с запятой. 5. Разделитель блоков: {}. Пара фигурных скобок считаются как один разделитель. Фигурные скобки, оканчивающиеся разделителем точка с запятой, не считаются. Фигурные скобки, используемые в операторах ветвления и цикла, также не считаются. 6. Директивы препроцессора. Для того чтобы оценить масштаб проекта, модули которого написаны на разных языках программирования, необходимо выбрать универсальную единицу измерения и привести к ней объемы этих модулей. Такой единицей может выступать число машинных команд в объектном коде после трансляции. Коэффициенты перевода зависят от компилятора, среды разработки и стиля программирования, и должны определяться для каждого разработчика или группы разработчиков на основании опыта предыдущих проектов. Выполнение работы: 1) Анализ Задача: Вывести на экран консоли количество чисел, кратных 2 и 3 в массиве Функциональные требования к программе: программа должна осуществить суммирование количества чисел, кратных 2 и 3, в заданном пользователем массиве. Форматом выходных данных было принято строковое представление целого числа. Время выполнения этапа – 3 минут. 2) Проектирование Замечена ошибка не указания размера массива в анализе. Сделаем массив произвольного размера, задаваемый пользователем. Были заданы переменные, задан массив и описан алгоритм суммирования количества положительных элементов массива Время выполнения этапа – 6 минут. 3) Кодирование На этапе кодирования, при первичной отладке было выявлена одна ошибка в коде. Время выполнения этапа – 10 минут. 4) Тестирование После компиляции программы было осуществлено ее тестирование, в ходе которого не обнаружилось ошибок. Время выполнения этапа – 1 минута. Таким образом, сводная таблица выполнения этапов разработки принимает вид: Этап Время, ч Выявлено анализа 0 ошибок этапа проектирования кодирования х х Анализ 0,05 Проектирование 0,1 1 0 х Кодирование 0,16 0 1 1 Тестирование 0,016 0 0 0 5) Расчет метрик: Листинг программы : using System; namespace A1 { class Program { static void { int[] b int c = int d = Main(string[] args) = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; 0; 0; foreach (int a in b) { if (b % 3 == 0) { c++; } if (b % 2 == 0) { d++; } } Console.WriteLine($"Количество чисел кратных 3: {c}"); Console.WriteLine($"Количество чисел кратных 2: {d}"); } } } Определим согласно правилам подсчета значение SLOC, занося промежуточные значения в таблицу: Таблица 1.4 Оператор Количество if 2 foreach 1 ; 7 {} 6 Значит, SLOC = 16. Для расчета метрик Холстеда выделим уникальные операторы и операнды и приведем их общее количество. № оператор кол-во № операнд кол-во 1 int 4 1 b 4 2 ; 8 2 c 3 3 = 3 3 0 5 4 () 6 4 d 3 5 , 10 5 Console 2 6 in 1 6 "Количество чисел кратных 3: " 1 7 [] 2 7 "Количество чисел кратных 2: " 1 9 foreach 1 8 10 1 10 % 2 9 9 1 11 ++ 2 10 8 1 12 {} 2 11 7 1 13 WriteLine 2 12 6 1 14 == 2 13 5 1 14 3 2 15 2 2 16 1 1 17 4 1 Значит, ƞ1 = 14, N1 = 45, ƞ2 = 17, N2 = 31. ƞ = 14 + 17 = 31 N = 45 + 31 = 76 N = 14 ∙ log14 + 17 ∙ log17 = 36,96 V = 76 ∙ log 31 = 113,34 D = 14/2 + 31/17= 8,82 Е= 113,34 · 8,82 = 999,65 T = 999,65/ 64800 = 0,015 ч B = 113,34 / 3000 = 0,03 TК = 15 / 60 = 0,25 ч BК = 4 PP = 16 / 0,25 = 64 строк/ч DDE DDE DDE Для расчета удельной стоимости кода определим величину финансовых затрат исходя из стоимости одного часа работы программиста (условно, 1000 руб.): СК = TК · 1000 = 250 руб. Тогда удельная стоимость равна: Суд = СК / SLOC = 250 / 16 = 15,625 руб. / строку Вывод: Благодаря данной лабораторной работе я освоила методики определения масштабов программных средств и получение практических навыков в оценке производительности и качества работы программиста.