Чтобы определить, сколько денег, людей и времени нам нужно, нам нужно знать размер проекта (KLOC). Техника функциональных точек дает нам надежный инструмент для оценки размера проекта лучше, чем «аналогия» и «пользовательский опыт». Присаживайтесь🪑 мы готовы к запуску🚀.

🔗: Подробнее о метрике строк кода вы можете прочитать в моей предыдущей статье

Расчет FunctionalPoints состоит из нескольких шагов:

  1. Рассчитать UFPC
  2. Рассчитать TDI
  3. Рассчитать ВАФ
  4. Рассчитать AFPC
  5. Рассчитать количество строк
  6. Рассчитать DFP
  7. Рассчитать EFP
  8. Рассчитать 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 (общие характеристики системы):

  1. Передача данных
  2. Распределенная обработка данных
  3. Производительность
  4. Интенсивно используемая конфигурация
  5. Скорость транзакции
  6. Ввод данных онлайн
  7. Эффективность конечного пользователя
  8. Он-лайн обновление
  9. Комплексная обработка
  10. Возможность повторного использования
  11. Простота установки
  12. Простота эксплуатации
  13. Несколько сайтов
  14. Способствовать изменениям

Для каждого из 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+ CHGACHGB + 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

  1. Передача данных = 5 (данные о продуктах передаются по нескольким протоколам (Kafka, firebase, S3, HTTP))
  2. Распределенная обработка данных = 0 (Продукт не выполняет распределенные вычисления)
  3. Производительность= 2 (требования к производительности не строгие)
  4. Интенсивно используемая конфигурация = 0 (без ограничения аппаратных ресурсов)
  5. Коэффициент транзакций = 0 (не так много транзакций без учета пика)
  6. Ввод данных в режиме онлайн = 5 (более 30 % транзакций являются интерактивными)
  7. Эффективность конечного пользователя = 0 (без особых требований)
  8. Онлайн-обновление = 2 (Изменения не частые. Нет строгих требований к восстановлению)
  9. Сложная обработка = 3 (требования безопасности и параллелизма присутствуют. Математическая сложность отсутствует).
  10. Повторное использование = 0 (Не требуется. Это не библиотека)
  11. Простота установки = 1 (мы будем использовать контейнер Docker)
  12. Простота операций = 0 (не обязательно)
  13. Несколько сайтов = 3 (Система не распространяется, но дает возможность установки на разное оборудование и ОС).
  14. Содействовать изменению = 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 представляет собой комплексный подход к вычислению сложности и размера проекта.

❌Крест

  • не учитывает этапы процесса, рабочий процесс или бизнес-правила
  • не может учитывать нефункциональные требования и изменения конфигурации

Не забывайте хлопать 👏 и подписываться📧, чтобы не пропустить ни одной новости.