Wymagania niefunkcjonalne (NFR, non-functional requirements) to cechy niefunkcjonalne systemu IT, takie jak wydajność, bezpieczeństwo, odporność na awarie, skalowalność, łatwość utrzymania. Odegrają one kluczową rolę w projektowaniu architektury, często określając rozwiązania techniczne i infrastrukturę nie mniej niż wymagania funkcjonalne.
Na przykład: jeśli system biznesowy wymaga wysokiej dostępności (uptime > 99,99%), architekt musi wdrożyć mechanizmy automatycznego przełączania (failover), replikacji danych, równoważenia obciążenia. W przeciwnym razie wartość biznesowa może być utracona.
Przykład: jak NFR wpływa na architekturę (w Python, FastAPI):
from fastapi import FastAPI from starlette.middleware.cors import CORSMiddleware app = FastAPI() app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Takie podejście jest niezbędne, jeśli wśród NFR znajduje się wymaganie dotyczące wsparcia integracji z zewnętrznymi frontendami
Kluczowe cechy:
Czy można dodać NFR na późniejszych etapach rozwoju bez konsekwencji?
Nie, krytyczne NFR należy uwzględnić od samego początku, w przeciwnym razie konieczna będzie radykalna przebudowa architektury.
Czy odpowiedzialność za realizację NFR spoczywa tylko na architekcie?
Nieprawda. To obszar odpowiedzialności całego zespołu projektowego — od analityków po devopsów.
Czy skalowalność i bezpieczeństwo można uznać wyłącznie za zadania infrastruktury?
Nie. Skalowalność i bezpieczeństwo to zarówno zadania architektoniczne, jak i infrastrukturalne (np. podział danych według użytkowników jest realizowany na poziomie usług).