<<
>>

Функциональные пункты

Одной из альтернатив метрики LOC являются функциональные пункты. Это синтетическая метрика размера программы, которая может применяться для оценки размера проекта на его ранних стадиях (Albrecht 1979).

Функциональные пункты проще вычислять по спецификациям требований, чем строки кода; кроме того, они формируют основу для вычисления размера в строках кода. Существует много разных методов для вычисления функциональных пунктов. Стандарт подсчета функциональных пунктов поддерживается группой International Function Point Users Group (IFPUG) и размещается на веб-сайте по адресу www.ifpug.org.

Размер программы в функциональных пунктах базируется на количестве и сложности следующих элементов.

Внешние входные элементы — экраны, формы, диалоговые окна или управляющие сигналы, при помощи которых пользователь или внешняя программа добавляет, удаляет и изменяет данные программы. К этой категории относятся все входные элементы, обладающие уникальным форматом или уникальной логикой обработки.

Внешние выходные элементы — экраны, отчеты, диаграммы или управляющие сигналы, генерируемые программой для пользователя или внешних программ. К этой категории относятся все выходные элементы, отличающиеся по формату или логике обработки от других типов вывода.

Внешние запросы — комбинации входных/выходных элементов, в которых входному элементу ставится в соответствие простая выходная форма. Термин происходит из мира баз данных и относится к прямому поиску данных (обычно по уникальному ключу). В современных графических и веб-приложениях граница между запросами и выходными элементами размыта, но в общем случае запросы производят выборку данных непосредственно из базы и ограничиваются минимальным форматированием, а выходные элементы поддерживают обработку, комбинирование и обобщение сложных данных с широкими возможностями форматирования.

Внутренние логические файлы — основные логические группы пользовательских или управляющих данных, находящиеся под полным контролем программы.

Логический файл представляет собой один неструктурированный файл или одну таблицу в реляционной базе данных.

Внешние интерфейсные файлы — файлы, находящиеся под контролем других программ, с которыми взаимодействует измеряемая программа. К этой категории относятся все основные группы логических или управляющих данных, принимаемых или передаваемых программой.

В табл. 8.1 показано, как счетчики входных элементов, выходных элементов и т. д. преобразуются в нескорректированные функциональные пункты. Количество входных элементов низкой сложности умножается на 3, количество выходных элементов низкой сложности — на 4 и т. д. Сумма полученных чисел дает метрику проекта в нескорректированных функциональных пунктах.

Таблица 18.1. Множители для вычисления нескорректированных функциональных пунктов

Характеристика программы

Функциональные пункты

Низкая сложность

Средняя сложность

Высокая сложность

Внешние входные элементы

х 3

х 4

х 6

Внешние выходные элементы

х 4

х 5

х 7

Внешние запросы

хЗ

х 4

х 6

Внутренние логические файлы

х 4

х 10

X 15

Внешние интерфейсные файлы

х 5

х 7

X 10

После суммы нескорректированных функциональных пунктов вычисляется коэффициент влияния; он основывается на влиянии, оказываемом на программу 14 факторами. Среди примеров таких факторов можно назвать передачу данных, оперативный ввод данных, сложность обработки и простоту установки.

Коэффициент влияния лежит в диапазоне от 0,65 до 1,35. После умножения нескорректированной суммы на коэффициент влияния вы получаете скорректированную величину в функциональных пунктах.

Если вы читали мои предшествующие комментарии о «субъективных регуляторах», вероятно, вы уже догадываетесь, что я думаю о коэффициенте влияния и его 14 регуляторах. Два исследования показали, что нескорректированные функциональные пункты в большей степени коррелируются с итоговым размером, чем скорректированные (Kemerer 1987, Gaffney and Werling 1991). Некоторые эксперты также рекомендуют исключить оценки «низкой сложности» и «высокой сложности» и классифицировать все счетные показатели как «средние» — тем самым исключается еще один источник субъективизма (Jones 1997). Стандарт ISO/IEC 20926:2003 базируется на нескорректированных функциональных пунктах.

В табл. 18.2 показан пример составления итоговой метрики в скорректированных функциональных пунктах. Конкретные значения входных и выходных элементов, запросов, внутренних логических и внешних интерфейсных файлов представлены исключительно для наглядности.

В показанном примере размер проекта оценивается в 284 функциональных пункта. Полученное значение можно напрямую преобразовать в оценку объема работы (см. главу 19) или сначала преобразовать в оценку в строках кода, а от нее перейти к оценке объема работы.

Характеристика программы

Функциональные пункты

Низкая сложность

Средняя сложность

Высокая сложность

Внешние входные элементы

6 х 3 = 18

2x4 = 8

3 х 6 = 18

Внешние выходные элементы

7 х 4 = 28

7 х 5 = 35

0x7 = 0

Внешние запросы

0x3 = 0

2x4 = 8

4 х 6 = 24

Внутренние логические файлы

0x4 = 0

о

гм

II

о

тН

X

гм

3 х 15 = 45

Внешние интерфейсные файлы

N)

X

СП

II

>-*

О

0x7 = 0

7 х 10 = 70

Нескорректированная сумма в функциональных пунктах

284

Коэффициент влияния

1,0

Скорректированная сумма в функциональных пунктах

284

Терминология метода функциональных пунктов заметно ориентирована на базы данных, но группа IFPUG неуклонно обновляет правила подсчета функциональных пунктов, и эта методика хорошо работает для всех типов программного обеспечения. Исследования показали, что сертифицированные специалисты по оценке функциональных пунктов обычно выдают показатели, отличающиеся не более чем на 10 %, так что подсчет функциональных пунктов открывает реальную возможность сокращения неопределенности, связанной с объемом проекта, в конусе неопределенности на ранней стадии проекта (Stutzke 2005).

СОВЕТ № 81

Воспользуйтесь методом функциональных пунктов, чтобы получить относительно точную оценку размера на ранней стадии проекта.

Преобразование функциональных пунктов в строки кода

Если потребуется перейти от функциональных пунктов к строкам кода, в табл. 18.3 перечислены коэффициенты преобразования для некоторых распространенных языков программирования.

Скажем, если ваша программа на 285 функциональных пунктов будет реализована на Java, из таблицы берется диапазон от 40 до 80 LOC на функциональный пункт; умножив его на 284 функциональных пункта, мы получаем оценку размера от 11 360 до 22 720 LOC, с ожидаемым значением 55 х 284 = 15675 LOC. Чтобы не создавать ложного впечатления точности, эти числа можно упростить до диапазона 11 000-23 000 LOC с ожидаемым значением 16 000 LOC.

Коэффициенты, представленные в таблице, используют широкие диапазоны — обычно верхняя граница отличается от нижней в 2-3 раза. Как и во многих других оценках, если вам удастся собрать исторические данные о соответствии между функциональными пунктами и строками кода в вашей организации, это повысит точность оценок и, вероятно, сузит диапазоны оценок по сравнению со среднеотраслевыми данными.

Таблица 18.3. Количество команд на функциональный пункт в разных языках программирование

Язык

Команд на функциональный пункт

Минимум

(-1 стандартное

отклонение)

Номинал (наиболее вероятное значение)

Максимум

(+1 стандартное

отклонение)

Ada 83

45

80

125

Ada 95

30

50

70

С

60

128

170

C#

40

55

80

C++

40

55

140

Cobol

65

107

150

Fortran 90

45

80

125

Fortran 95

30

71

100

Java

40

55

80

Макроассемблер

/>130

213 ’

300

Perl

10

20

30

Языки второго поколения (Fortran 77, Cobol, Pascal и т. д.)

65

107

160

Smalltalk

10

20

40

SQL

7

13

15

Языки третьего поколения (Fortran 90, Ada 83 и т. д.)

45

80

125

Microsoft Visual Basic

15

32

41

Источник: Адаптировано по данным «Estimating Software Costsр (Jones 1998), «Software Cost Estimation with Cocomo //» (Boehm 2000) и «Estimating Intensive Systems» (Stutzke 2005).

Описание вычисления функциональных пунктов, приведенное в этом разделе, дает лишь весьма поверхностное представление об этой сложной методике. Хотя эксперты в области вычисления функциональных пунктов могут выдавать результаты, отличающиеся в пределах 10 %, результаты вычислений неопытных оценщиков различаются от 20 до 25 % (Kemerer and Porter 1992, Stutzke 2005). За дополнительной информацией об этом методе обращайтесь к разделу «Дополнительные ресурсы» в конце этой главы.

<< | >>
Источник: Макконнелл С.. Сколько стоит программный проект. 2007

Еще по теме Функциональные пункты: