# Czym jest punkt funkcyjny COSMIC i czym różni się od szacowania godzin?

Mesterséges Intelligencia Központ Kft., firma programistyczna z Budapesztu, mierzy rozmiar oprogramowania w punktach funkcyjnych COSMIC: rozmiar jest wtedy cechą oprogramowania, a nie odczuciem szacującego, dlatego można go sprawdzić, zmierzyć ponownie i porównać za jego pomocą dwie oferty.

> **W skrócie:** COSMIC (ISO/IEC 19761) mierzy rozmiar funkcjonalny oprogramowania: każde przemieszczenie danych (wejście, wyjście, odczyt, zapis) jest warte 1 punkt funkcyjny COSMIC (CFP). Szacunek w godzinach mówi, ile pracy spodziewa się szacujący, a zmierzony rozmiar mówi, jak duże jest zadanie. Dlatego można go sprawdzić, zmierzyć ponownie i porównać za jego pomocą dwie oferty, a nakład pracy można wyprowadzić z rozmiaru i z produktywności ustalonej na podstawie doświadczenia.

## Czym jest pomiar rozmiaru funkcjonalnego?

Rozmiar oprogramowania można wyrażać na wiele sposobów: w wierszach kodu, w godzinach, w punktach. Pomiar rozmiaru funkcjonalnego (ang. functional size measurement, FSM) mierzy, co oprogramowanie ma robić z punktu widzenia użytkowników, a nie to, jak zostanie zrealizowane. Jego podstawowe pojęcia określa norma [ISO/IEC 14143-1:2007](https://www.iso.org/standard/38931.html); według opisu normy celem jest właśnie to, aby pomiar skupiał się na funkcjach wymaganych przez użytkownika zamiast na sposobie realizacji.

Podstawą pomiaru jest zakres funkcjonalnych wymagań użytkownika (ang. functional user requirements, FUR): ta część wymagań użytkownika, która opisuje, jakie zadania i usługi ma wykonywać oprogramowanie. Wydajność, bezpieczeństwo czy wybrana technologia do niej nie należą; piszemy o nich niżej, przy ograniczeniach.

Istnieje kilka znormalizowanych metod pomiaru rozmiaru funkcjonalnego. Najbardziej znane to COSMIC ([ISO/IEC 19761:2011](https://www.iso.org/standard/54849.html)) i metoda IFPUG ([ISO/IEC 20926:2009](https://www.iso.org/standard/51717.html)); ISO znormalizowała również inne metody (NESMA, FiSMA, Mk II). Wszystkie wychodzą od wymagań, ale stosują inne reguły i inne jednostki, dlatego liczb zmierzonych różnymi metodami nie można bezpośrednio porównywać.

## Czym jest COSMIC?

COSMIC to skrót od Common Software Measurement International Consortium: organizacji non-profit, która rozwija metodę i organizuje certyfikację osób wykonujących pomiary. Metoda powstała pod koniec lat dziewięćdziesiątych jako rozwinięcie wcześniejszych metod punktów funkcyjnych, w 2003 r. stała się normą ISO, a obecnie obowiązującym wydaniem jest ISO/IEC 19761:2011. Szczegółowy opis metody, [COSMIC Measurement Manual](https://cosmic-sizing.org/measurement-manual/) w wersji 5.0, można pobrać bezpłatnie; jego pierwsza część została wydana w 2021 r., a druga w 2024 r.

Zgodnie z normą metoda nadaje się do pomiaru oprogramowania aplikacyjnego (na przykład systemów biznesowych), oprogramowania czasu rzeczywistego oraz ich połączeń. Można nią więc zmierzyć zarówno system ERP, CRM czy sklep internetowy, jak i oprogramowanie sterujące.

## Pojęcia modelu COSMIC

COSMIC opisuje oprogramowanie prostym modelem: oprogramowanie wymienia dane ze swoimi użytkownikami funkcjonalnymi przez swoją granicę, a wewnątrz granicy odczytuje dane z pamięci trwałej i zapisuje je w niej.

| Pojęcie | Co oznacza | Przykład |
|---|---|---|
| Użytkownik funkcjonalny | ktoś lub coś, co wysyła dane do oprogramowania albo oczekuje od niego danych: człowiek, inne oprogramowanie lub urządzenie | referent, system do fakturowania |
| Granica | umowna płaszczyzna między mierzonym oprogramowaniem a jego użytkownikami funkcjonalnymi | interfejs webowy i interfejs udostępniony innym systemom |
| Zdarzenie wyzwalające | zdarzenie, w reakcji na które użytkownik funkcjonalny uruchamia proces | zgłasza się nowy klient |
| Proces funkcjonalny | elementarna, samodzielnie wykonywalna jednostka wymagań, spójny ciąg przemieszczeń danych | „rejestracja nowego klienta” |
| Grupa danych | zbiór atrybutów danych dotyczących jednej rzeczy, o której oprogramowanie musi przetwarzać dane | Klient: nazwa, adres, numer podatkowy, e-mail |
| Przemieszczenie danych | przemieszczenie jednej grupy danych; istnieją cztery jego rodzaje | zob. niżej |

Cztery rodzaje przemieszczeń danych:

- **Entry (wejście):** grupa danych trafia od użytkownika funkcjonalnego przez granicę do procesu.
- **Exit (wyjście):** grupa danych wychodzi z procesu przez granicę do użytkownika funkcjonalnego.
- **Read (odczyt):** proces odczytuje grupę danych z pamięci trwałej.
- **Write (zapis):** proces zapisuje grupę danych w pamięci trwałej; usunięcie także liczy się jako zapis.

Kilka reguł pomiaru, które decydują o wyniku liczenia:

- Każde przemieszczenie danych to 1 CFP. Rozmiar procesu funkcjonalnego jest sumą jego przemieszczeń danych, a rozmiar oprogramowania jest sumą rozmiarów jego procesów.
- Każdy proces funkcjonalny składa się z co najmniej dwóch przemieszczeń danych: wyzwalającego wejścia oraz co najmniej jednego wyjścia lub zapisu.
- W obrębie jednego procesu dany rodzaj przemieszczenia tej samej grupy danych liczy się tylko raz, niezależnie od liczby pól.
- Wszystkie komunikaty o błędach i potwierdzenia w procesie liczą się łącznie jako jedno wyjście.
- Rozmiar zależy od rodzajów, a nie od liczby wystąpień: to, czy dziennie rejestruje się dziesięciu, czy dziesięć tysięcy klientów, nie zmienia rozmiaru.
- Przetwarzania danych (obliczeń, walidacji) metoda nie mierzy osobno: jest ono częścią danego przemieszczenia danych.

Wynik jest wyrażony na skali ilorazowej, co oznacza, że rozmiary można sumować i porównywać: dwie części po 40 CFP dają razem 80 CFP, a sumy częściowe można pokazać także w podziale na grupy funkcji.

## Przykład krok po kroku: „rejestracja nowego klienta”

Weźmy proste wymaganie: „Referent wprowadza dane nowego klienta (nazwa, adres, numer podatkowy, e-mail). System sprawdza, czy klient nie jest już zarejestrowany, zapisuje dane i informuje o powodzeniu lub o błędzie.” Kroki pomiaru:

1. **Użytkownikiem funkcjonalnym** jest referent, a **zdarzeniem wyzwalającym** jest zgłoszenie się nowego klienta.
2. **Grupą danych** jest Klient; cztery atrybuty dotyczą tej samej rzeczy, więc tworzą jedną grupę.
3. **Przemieszczenia danych** identyfikujemy na podstawie zdań wymagania i liczymy każde z nich.

| Krok | Przemieszczenie danych | Grupa danych | Rozmiar |
|---|---|---|---|
| Referent wysyła formularz | Entry (wejście) | Klient | 1 CFP |
| System sprawdza, czy klient już istnieje | Read (odczyt) | Klient | 1 CFP |
| System zapisuje nowego klienta | Write (zapis) | Klient | 1 CFP |
| Informacja o powodzeniu lub dowolnym błędzie | Exit (wyjście) | komunikat o błędzie i potwierdzenie | 1 CFP |
| Razem | cztery przemieszczenia danych | jedna grupa danych | 4 CFP |

Tak samo zbudowany jest przykład „rejestracja nowego pracownika” z przewodnika opublikowanego na stronie COSMIC. Zmiany wymagania widać w rozmiarze w następujący sposób:

- Jeśli system musi przekazać nowego klienta także do systemu do fakturowania, jest to kolejne wyjście, do innego użytkownika funkcjonalnego: 5 CFP.
- Jeśli kod pocztowy trzeba sprawdzić w tabeli miejscowości, jest to kolejny odczyt, ponieważ dotyczy innej grupy danych: kolejny 1 CFP.
- Jeśli formularz zamiast czterech pól wymaga dwunastu pól o kliencie, rozmiar się nie zmienia, ponieważ grupa danych pozostaje ta sama.
- Jeśli trzeba zmodyfikować istniejący proces, rozmiar zmiany jest sumą dodanych, zmodyfikowanych i usuniętych przemieszczeń danych.

Przykład pokazuje też, dlaczego pomiar można sprawdzić: za każdym CFP stoją nazwane wymaganie, grupa danych i reguła. Jeśli ktoś go kwestionuje, można dokładnie wskazać, o który wiersz chodzi.

## Pomiar wcześnie, doprecyzowanie później

Pomiar COSMIC zaczyna się od ustalenia celu i zakresu pomiaru: co mierzymy, co do niego należy i do czego wykorzystamy wynik. Dokładny pomiar wymaga wymagań na tyle szczegółowych, aby można było zidentyfikować procesy funkcjonalne i ich przemieszczenia danych. Na początku projektu często ich jeszcze nie ma; na taki przypadek COSMIC publikuje metody przybliżone do wczesnego szacowania rozmiaru, a po opracowaniu wymagań może nastąpić dokładny pomiar.

Wytyczne metody ostrzegają też, że wiele wymagań, które początkowo wydają się niefunkcjonalne (na przykład czas odpowiedzi albo łatwość obsługi), w trakcie projektu przekształca się w funkcje oprogramowania, przez co rozmiar pozornie rośnie. Nie jest to błąd pomiaru, lecz znak, że wymaganie stało się dokładniejsze. W praktyce warto więc spisywać specyfikację pozycja po pozycji, mierzyć zmiany ponownie tą samą metodą i wykazywać rozmiar zmiany osobno. Dzięki temu wzrost zakresu nie następuje po cichu, lecz jest widoczny w liczbach.

## Porównanie: godziny, story pointy, IFPUG, COSMIC

| Kryterium | Szacunek w godzinach | Story pointy | Punkty funkcyjne IFPUG | Punkty funkcyjne COSMIC |
|---|---|---|---|---|
| Co wyraża | pracę, której spodziewa się szacujący | względny szacunek zespołu; nie zawsze jest jasne, czy rozmiaru, nakładu pracy, czy czasu | rozmiar funkcjonalny | rozmiar funkcjonalny |
| Czy jest znormalizowany | nie | nie | tak, ISO/IEC 20926:2009 | tak, ISO/IEC 19761:2011 |
| Od czego zależy | od doświadczenia, ostrożności i zespołu szacującego | od danego zespołu; w każdym zespole oznacza co innego | od wymagań | od wymagań |
| Czy można go sprawdzić z zewnątrz | tylko na podstawie wyjaśnień szacującego | poza zespołem praktycznie nie | tak, według publicznych reguł | tak, według publicznych i bezpłatnie dostępnych reguł |
| Jednostka | godzina | własny punkt zespołu | punkt funkcyjny IFPUG | CFP, 1 CFP = 1 przemieszczenie danych |
| Do czego najlepiej się nadaje | do planowania krótkich, dobrze znanych zadań | do planowania sprintów przez sam zespół | do pomiaru rozmiaru, porównań | do pomiaru rozmiaru, porównań, jako podstawa oferty i harmonogramu |

Szacunek w godzinach nie jest złym narzędziem, po prostu mierzy coś innego: oczekiwaną pracę, która poza rozmiarem zadania zależy również od wiedzy, narzędzi i ostrożności zespołu. Story pointy przydają się do planowania wewnątrz zespołu, ale według przewodnika opublikowanego na stronie COSMIC są subiektywne, a ich znaczenie różni się w zależności od zespołu. Zarówno IFPUG, jak i COSMIC dają znormalizowany rozmiar funkcjonalny, ale według odmiennych reguł, dlatego liczb z tych dwóch metod nie można stosować zamiennie.

## Dlaczego zmierzony rozmiar jest bardziej wiarygodną podstawą?

Odpowiadając dokładnie na pytanie z tytułu: COSMIC nie szacuje dokładniej godzin, lecz mierzy wielkość zadania, a dzięki temu szacunek nakładu pracy staje się bardziej wiarygodny. Powody:

- **Mierzy wymaganie, a nie realizację.** Rozmiar funkcjonalny wynika wyłącznie z wymagań, dlatego nie zależy od technologii, procesu ani od tego, kto tworzy oprogramowanie.
- **Można go zmierzyć ponownie według publicznych reguł.** Reguły są publiczne, a wynik pomiaru trzeba udokumentować, więc inna osoba wykonująca pomiar może go sprawdzić na podstawie tej samej specyfikacji.
- **Rozmiar i produktywność są rozdzielone.** Szacunek nakładu pracy wynika z rozmiaru i produktywności ustalonej na podstawie doświadczenia (nakład pracy = rozmiar / produktywność). Dzięki temu widać, który czynnik się zmienia i dlaczego.
- **Pomiar poprawia wymagania.** Według przewodnika COSMIC wczesny pomiar pomaga wykryć niejednoznaczne, sprzeczne lub brakujące wymagania.
- **Jest porównywalny.** Dwie oferty dla tej samej specyfikacji otrzymują ten sam rozmiar, dlatego ceny odnoszą się do tego samego zakresu.

Przewodnik COSMIC powołuje się na kilka badań, w których rozmiar mierzony w CFP był ściślej powiązany z rzeczywistym nakładem pracy niż szacunki wyrażone w story pointach. Ten sam przewodnik ostrzega też, że nakład pracy oszacowany na podstawie rozmiaru jest wiarygodny wtedy, gdy proces wytwarzania jest wystarczająco powtarzalny, a nakład pracy zależy przede wszystkim od rozmiaru. Zmierzony rozmiar jest więc lepszym punktem wyjścia, ale do dobrego szacunku trzeba znać także produktywność.

## Czego COSMIC nie mierzy?

Rozmiar COSMIC mierzy funkcje, a opis metody mówi to otwarcie. Czego nie wyraża:

- **Złożonych algorytmów.** Zgodnie z normą metoda nie została zaprojektowana do pomiaru oprogramowania charakteryzującego się złożonymi algorytmami matematycznymi lub szczególnymi zbiorami reguł (na przykład systemów ekspertowych, symulacji, oprogramowania samouczącego się, prognozowania pogody).
- **Przetwarzania sygnałów ciągłych.** Przetwarzanie dźwięku i obrazu, a także na przykład takie elementy gier komputerowych również wykraczają poza zakres normy.
- **Rzeczywistych wymagań niefunkcjonalnych.** Ograniczenia technologiczne, wydajnościowe i projektowe należy zgodnie z metodą udokumentować, ale nie mierzy się ich w CFP.
- **Pracy twórczej.** Według przewodnika COSMIC zadania czysto twórcze, na przykład tworzenie dzieł artystycznych, nie są przedmiotem metody; dlatego rozmiar nie wyraża pracy nad grafiką i indywidualnym projektem wizualnym.
- **Wdrożenia gotowego pakietu.** Jeśli wymagania w dużej mierze pokrywa konfiguracja gotowego produktu, nakład pracy warto oszacować w sposób właściwy dla danego pakietu.

Dlatego dobra oferta obok zmierzonego rozmiaru wykazuje osobno to, czego rozmiar nie wyraża: integracje, wymagania niefunkcjonalne, niestandardowy interfejs i grafikę, wiele platform, migrację danych, złożone obliczenia i działanie w czasie rzeczywistym. W naszych ofertach te pozycje są przedstawione właśnie w ten sposób. Więcej na ten temat na stronie [Wycena](https://www.mestersegesintelligenciakozpont.hu/pl/wycena).

## Jak wykorzystujemy go we własnej pracy?

Rozmiar funkcjonalny realizacji mierzymy w punktach funkcyjnych COSMIC. Do pomiaru zbudowaliśmy własny proces pracy wspomagany sztuczną inteligencją, a wynik sprawdza człowiek w rundzie weryfikacji. Kroki:

1. **Specyfikacja pozycja po pozycji:** dzielimy realizację na grupy funkcji i każdą opisujemy według tego samego szablonu: cel, aktorzy, dane, funkcje, funkcje AI oraz to, co nie wchodzi w zakres (zob. [Jak pracujemy](https://www.mestersegesintelligenciakozpont.hu/pl/jak-pracujemy)).
2. **Kilka niezależnych zliczeń:** każdą grupę funkcji kilka modeli językowych liczy kilkakrotnie; rozrzut wyników zliczeń pokazuje niepewność.
3. **Runda uzgadniająca:** zapewnia, że każdy proces funkcjonalny liczy się dokładnie raz, nawet jeśli występuje w kilku opisach.
4. **Weryfikacja:** przeglądamy pomiar, wyjaśniamy niepewne punkty, a w razie potrzeby ręcznie korygujemy automatyczne scalenia.
5. **Utrwalenie:** gotowy pomiar można zapisać jako niezmienną wersję, która staje się podstawą umowy.

Przy rozbudowie istniejącego systemu istniejącą część opisujemy osobno, dzięki czemu do rozmiaru wlicza się tylko nowa część. Pomiar sygnalizuje też to, czego rozmiar funkcjonalny nie wyraża.

## Jak z rozmiaru powstają oferta i harmonogram?

Cena oferty wynika ze zmierzonego rozmiaru, uzupełnionego o pozycje, których rozmiar nie wyraża. Ponieważ rozmiar widzimy także w podziale na grupy funkcji, opieramy na nim również harmonogram: kolejność etapów, zawartość prezentacji i terminy. Jeśli w trakcie prac pojawi się nowe wymaganie, mierzymy je w ten sam sposób i widać, o ile zmienia się zakres oraz co to oznacza dla ceny i harmonogramu. Dlatego konkretną cenę i termin podajemy dopiero po pomiarze, a nie na podstawie pierwszej rozmowy.

## Porównanie dwóch ofert na podstawie rozmiaru

Jeśli proszą Państwo o ofertę kilku wykonawców, rozmiar pomaga ocenić, czy dotyczą one tego samego zadania. Warto postępować tak:

1. **Ta sama specyfikacja:** każdy oferent otrzymuje ten sam opis pozycja po pozycji.
2. **Rozmiar i lista procesów:** proszę zapytać, dla jakiego rozmiaru i których procesów funkcjonalnych podano cenę.
3. **Przyczyny różnic:** jeśli dwie oferty się różnią, proszę sprawdzić, czy różnią się rozmiarem, pozycjami, których rozmiar nie wyraża, czy ceną jednostkową.
4. **Pozycje osobne:** proszę zapytać, co jest wykazane w osobnych wierszach (integracja, migracja danych, eksploatacja) i czego cena nie obejmuje.
5. **Obsługa zmian:** proszę zapytać, jak mierzone i wyceniane są zmiany wprowadzane w trakcie prac.

Jeśli oferent nie mierzy rozmiaru funkcjonalnego, jego ofertę i tak można porównać, o ile wycenił tę samą listę procesów, spisaną pozycja po pozycji. O pozostałych kryteriach wyboru wykonawcy piszemy w artykule [Jak wybrać firmę programistyczną?](https://www.mestersegesintelligenciakozpont.hu/pl/baza-wiedzy/jak-wybrac-firme-programistyczna), a w ocenie, czy w ogóle potrzebne jest rozwiązanie na zamówienie, pomaga artykuł [Oprogramowanie na zamówienie czy gotowe rozwiązanie?](https://www.mestersegesintelligenciakozpont.hu/pl/baza-wiedzy/oprogramowanie-na-zamowienie-czy-gotowe-rozwiazanie).

## Częste pytania

### Czym jest punkt funkcyjny COSMIC?

Punkt funkcyjny COSMIC (CFP) jest jednostką rozmiaru funkcjonalnego oprogramowania zgodnie z normą ISO/IEC 19761. Jeden CFP to jedno przemieszczenie danych: wejście, wyjście, odczyt lub zapis grupy danych w procesie funkcjonalnym. Rozmiar oprogramowania jest sumą przemieszczeń danych jego procesów.

### Czym różni się od szacunku w godzinach?

Szacunek w godzinach określa oczekiwaną pracę i zależy od szacującego oraz od zespołu. COSMIC mierzy rozmiar zadania na podstawie wymagań, według publicznych reguł, dlatego ktoś inny może dojść do tego samego wyniku na podstawie tej samej specyfikacji. Godziny można następnie wyprowadzić z rozmiaru i z produktywności ustalonej na podstawie doświadczenia.

### Czego COSMIC nie mierzy?

Zgodnie z normą metoda nie została opracowana do pomiaru złożonych algorytmów matematycznych ani przetwarzania sygnałów ciągłych (dźwięku, obrazu), a rzeczywistych wymagań niefunkcjonalnych, na przykład ograniczeń wydajnościowych lub technologicznych, również nie wyraża w CFP. Dobra oferta wykazuje je jako osobne pozycje.

### Kto wykonuje pomiar i czy można go sprawdzić?

Pomiar wykonuje osoba znająca metodę; u nas liczy proces pracy wspomagany AI, a wynik weryfikuje człowiek. Reguły są publiczne, a pomiar jest udokumentowany dla każdego procesu, dlatego inny specjalista znający metodę może go sprawdzić na podstawie tej samej specyfikacji.

### Jak z rozmiaru powstaje oferta?

Cena wynika ze zmierzonego rozmiaru, uzupełnionego o to, czego rozmiar nie wyraża: integracje, wymagania niefunkcjonalne, indywidualną grafikę, wiele platform, migrację danych. Harmonogram opiera się na rozmiarze w podziale na grupy funkcji, a zmiany mierzymy w ten sam sposób. Szczegóły można znaleźć na stronie [Wycena](https://www.mestersegesintelligenciakozpont.hu/pl/wycena).

## Jak możemy pomóc?

Jeśli planują Państwo [oprogramowanie na zamówienie](https://www.mestersegesintelligenciakozpont.hu/pl/uslugi/oprogramowanie-na-zamowienie), wspólnie spiszemy specyfikację pozycja po pozycji, zmierzymy jej rozmiar w punktach funkcyjnych COSMIC i na tej podstawie przygotujemy ofertę oraz harmonogram. Na życzenie zawieramy umowę o zachowaniu poufności (NDA), a po przekazaniu zapewniamy również eksploatację i utrzymanie. Kwestie kodu źródłowego i praw do korzystania reguluje umowa. Pierwsza konsultacja jest bezpłatna: prosimy do nas napisać, korzystając z danych kontaktowych podanych na stronie [Kontakt](https://www.mestersegesintelligenciakozpont.hu/pl/kontakt).

## Źródła

- [COSMIC Measurement Manual v5.0, Part 1: Principles, Definitions and Rules (PDF)](https://cosmic-sizing.org/wp-content/uploads/2020/06/Part-1-MM-Principles-Definitions-Rules-v5.0-Aug-2021.pdf)
- [COSMIC Measurement Manual v5.0, Part 2: Guidelines (PDF)](https://cosmic-sizing.org/wp-content/uploads/2024/09/Part-2-MM-Guidelines-v5.0-Sep-2024.pdf)
- [COSMIC: A Guide to Software Size Measurement (PDF)](https://cosmic-sizing.org/wp-content/uploads/2020/08/Measuring-software-size-v1.0-August-2020-1.pdf)
- [COSMIC Measurement Manual: pliki do pobrania](https://cosmic-sizing.org/measurement-manual/)
- [ISO: ISO/IEC 19761:2011, COSMIC: a functional size measurement method](https://www.iso.org/standard/54849.html)
- [ISO: ISO/IEC 14143-1:2007, Functional size measurement, Part 1: Definition of concepts](https://www.iso.org/standard/38931.html)
- [ISO: ISO/IEC 20926:2009, IFPUG functional size measurement method](https://www.iso.org/standard/51717.html)
