Чтобы определить, сколько денег, людей и времени нам нужно, нам нужно знать размер проекта (KLOC). Техника функциональных точек дает нам надежный инструмент для оценки размера проекта лучше, чем «аналогия» и «пользовательский опыт». Присаживайтесь🪑 мы готовы к запуску🚀.
🔗: Подробнее о метрике строк кода вы можете прочитать в моей предыдущей статье
Расчет FunctionalPoints состоит из нескольких шагов:
- Рассчитать UFPC
- Рассчитать TDI
- Рассчитать ВАФ
- Рассчитать AFPC
- Рассчитать количество строк
- Рассчитать DFP
- Рассчитать EFP
- Рассчитать AFP
1. Рассчитать UFPC
UFPC — нескорректированное количество функциональных баллов. Чтобы вычислить его, нам сначала нужно разобраться с его компонентами:
- Внутренние логические файлы (ILF) — управляют информацией или логически связанными данными, которые представлены в системе.
- Файлы внешнего интерфейса(EIF) — данные, на которые ссылается система, но которые присутствуют в другой системе.
- Внешние входные данные (EI) — данные, поступающие извне нашей системы.
- Внешние выходные данные (EO) — данные, которые выходят из системы после генерации.
- Внешний запрос(EQ) — комбинация ввода-вывода и вывода данных, приводящая к извлечению данных.
Каждая функциональная единица имеет весовые коэффициенты в зависимости от уровня сложности.
Затем,
UFPC= EI_count*EI_coefficient + EO_count*EO_coefficient + EQ_count*EQ_coefficient + ILF_count*ILF_coefficient + EIF_count*EIF_коэффициент
или просто скажем, что UFPC – это сумма функциональных единиц, умноженная на соответствующий коэффициент.
☝: Если у вас есть функциональный блок разной сложности, вы можете заменить общий термин на подробный. Например, если у нас есть EI с низкой и высокой сложностью, мы можем заменить EI_count*EI_coefficient
в формуле на EI_low_count*EI_low_coefficient + EI_high_count*EI_high_coefficient
2. Расчет TDI
TDI — общая степень влияния
Чтобы рассчитать TDI, нам нужно оценить влияние GSC (общие характеристики системы):
- Передача данных
- Распределенная обработка данных
- Производительность
- Интенсивно используемая конфигурация
- Скорость транзакции
- Ввод данных онлайн
- Эффективность конечного пользователя
- Он-лайн обновление
- Комплексная обработка
- Возможность повторного использования
- Простота установки
- Простота эксплуатации
- Несколько сайтов
- Способствовать изменениям
Для каждого из GSC может быть указан рейтинг от 0 до 5, который представляет
- 0 — отсутствует или не влияет
- 1 — случайное влияние
- 2 — умеренное влияние
- 3 — среднее влияние
- 4 — значительное влияние
- 5 — Сильное влияние во всем
TDI – это сумма всех рейтингов GSC
3. ВАФ
VAF — поправочный коэффициент стоимости
VAF= (TDI* 0,01) + 0,65
4. АФПК
AFPC — скорректированное количество функциональных баллов
AFPC= UFPC * VAF
5. Подсчитайте количество строк
SLOC — исходные строки кода
SLOC= AFPC* LM
6. Рассчитайте DFP
DFP — функциональная точка разработки
DFP= (UFPC + CFP) * VAF
CFP — функциональная точка преобразования. Дополнительный функционал необходим для установки программного обеспечения, например, миграции базы данных.
7. Рассчитайте ЭФП
EFP — функциональная точка улучшения
EFP =(ADD + CHGA + CFP) * VAFA + DEL * VAFB
ДОБАВИТЬ – нескорректированное количество функциональных точек этих функций,
которые были добавлены в рамках проекта улучшения.
CHGA — это нескорректированное количество функциональных точек этих функций,
которые были изменены (отображает функции после модификации).
CFP — количество функциональных баллов, добавленных в результате
преобразования
DEL — нескорректированное количество функциональных точек тех функций, которые
были удалены в ходе проекта улучшения.
☝️: важно учитывать абсолютное значение DEL, а не отрицательное значение.
VAFA — значение выравнивающего фактора программы после завершения
проекта (см. главу VAF)
VAFB — значение коэффициента выравнивания, рассчитанное до начала
проекта
На практике часто используется VAFA= VAFB= VAF, поэтому формула будет выглядеть так:
EFP =(ДОБАВИТЬ+ CHGA+ CFP+ DEL) * ВАФ
8. Рассчитайте АФП
AFP — расчет функциональных точек программы
AFP= (UFPB+ ADD+ CHGA— CHGB + DEL)*ВАФА
УФПБ — нескорректированное количество функциональных баллов до
улучшения
Пример из жизни
В качестве примера я выбрал один из бэкенд-микросервисов сайта антиплагиат (сейчас находится в стадии разработки). Основная цель приложения — проверка произведений на сходство с произведениями, присутствующими в системе.
Для описания одного из внутренних микросервисов я буду использовать диаграмму компонентов.
1. Рассчитать UFPC
- EI = 5
- EO = 4
- EQ = 3
- ИЛФ = 7
- ЭИФ = 5
Код этого приложения относится к низкой сложности, поэтому мы будем использовать низкий весовой коэффициент.
UFPC= 3*EI+ 4*EO+ 3*EQ+ 7*ILF +5*EIF= 3*5 + 4*1 + 3*1 + 7*7 + 5*5 = 15 + 4 + 3 + 49 + 25 = 96
2. Рассчитайте TDI
- Передача данных = 5 (данные о продуктах передаются по нескольким протоколам (Kafka, firebase, S3, HTTP))
- Распределенная обработка данных = 0 (Продукт не выполняет распределенные вычисления)
- Производительность= 2 (требования к производительности не строгие)
- Интенсивно используемая конфигурация = 0 (без ограничения аппаратных ресурсов)
- Коэффициент транзакций = 0 (не так много транзакций без учета пика)
- Ввод данных в режиме онлайн = 5 (более 30 % транзакций являются интерактивными)
- Эффективность конечного пользователя = 0 (без особых требований)
- Онлайн-обновление = 2 (Изменения не частые. Нет строгих требований к восстановлению)
- Сложная обработка = 3 (требования безопасности и параллелизма присутствуют. Математическая сложность отсутствует).
- Повторное использование = 0 (Не требуется. Это не библиотека)
- Простота установки = 1 (мы будем использовать контейнер Docker)
- Простота операций = 0 (не обязательно)
- Несколько сайтов = 3 (Система не распространяется, но дает возможность установки на разное оборудование и ОС).
- Содействовать изменению = 0 (не обязательно)
TDI = 21
3. Рассчитать ВАФ
VAF= (TDI* 0,01) + 0,65 = 0,86
4. Рассчитать AFPC
AFPC= UFPC * VAF = 96 * 0,86 = 82,56
5. Подсчитайте количество строк
Мы будем использовать LM для JavaSciprt — 58
SLOC= AFPC* LM=82,56 * 58 = 4 788,48.
В реальном проекте (языки программирования «go») SLOC равен 3152.
Шаги 6,7 и 8
Мы не просчитываем модификацию проекта, поэтому последние шаги пропускаются.
✅Плюсы и ❌Минусы функциональных точек
✅Плюсы
По сравнению со всеми другими методами определения размера проекта, FPA представляет собой комплексный подход к вычислению сложности и размера проекта.
❌Крест
- не учитывает этапы процесса, рабочий процесс или бизнес-правила
- не может учитывать нефункциональные требования и изменения конфигурации
Не забывайте хлопать 👏 и подписываться📧, чтобы не пропустить ни одной новости.