====== Ocena wydajności systemu ======

===== Wydajność systemu - miary i zależności =====
**Wydajność system komputerowego __możemy wyrazić__ za pomocą następujących miar:**
  * Średni czas realizacji. Średni czas, jaki żądanie obsługi spędza w systemie, uwzględniając czas czekania na obsługę i czas obsługi.
  * Przepustowość. Średnia liczba żądań obsłużonych przez system w jednostce czasu.
  * Wykorzystanie. Iloraz czasu zajętości stanowiska obsługi do czasu jego obserwacji.
  * Średnia długość kolejki. Średnia liczba żądań na stanowisku obsługi, uwzględniając zadania obsługiwane i oczekujące.

**Wydajność systemu komputerowego __zależy od__ następujących parametrów:**
  * Intensywność napływu żądań każdego typu.
  * Otoczenia wykonawczego(sprzęt, oprogramowanie i obciążenie zewnętrzne).
  * Zapotrzebowania na poszczególne typy zasobów dla każdego typu żądań.
  * Algorytmów szeregowania określających, które z oczekujących żądań otrzyma wymagany zasób jako następne.

===== Rodzaje oceny wydajności i poziomy abstrakcji =====
W ramach cyklu życia oprogramowania istotną rolę odgrywa ocena wydajności. Wymagania względem oprogramowania często również zawierają wymagania wydajnościowe (np. systemy czasu rzeczywistego). Ocena wydajności zależy od przyjętego punktu widzenia. Kryteriami użytkownika mogą być np. minimalny czas reakcji systemu lub minimalny czas transmisji przez sieć. Właściciel systemu często oczekuje minimalizacji kosztów przy spełnieniu nałożonych wymagań.

**Można wyróżnić następujące __rodzaje oceny__ wydajności:**
  * Ocena antycypacyjna
    - Ocena obronna. Celem jest udowodnienie, że system spełnia wymagania.
    - Ocena zakresu. Celem jest wyznaczenie granic wydajnościowych systemu.
    - Ocena ewolucyjna. Dąży do rozpoznania skutecznych sposobów zarządzania systemem w przypadku zmiany składowych systemu lub jego otoczenia.
  * Ocena dla optymalizacji wydajności (maksymalizacja przepustowości, minimalizacja średniego czasu reakcji, minimalizacja wymaganej pamięci).

**Ocena wydajności może być przeprowadzana na następujących __poziomach abstrakcji__:**
  * Konfiguracji sprzętu (miary: czas cyklu pamięci, czas dostępu do dysku, czas wykonania instrukcji, szybkość transmisji).
  * Programu (miary: średni czas wykonania programu, średni czas przejścia między dwoma zadanymi punktami programu).
  * Systemu komputerowego (miary: średni czas dostępu do bazy danych, średni czas transmisji między parą węzłów sieci).

===== Inżynieria wydajności =====
**Istnieją dwa podejścia do wydajności systemów programowych:**
  * Tradycyjna ocena wydajności.
  * Inżynieria wydajności oprogramowania.

Myślą przewodnią **podejścia tradycyjnego** jest przeświadczenie, że poprawność oprogramowania jest najistotniejsza, a analiza wydajności jest przesuwana w ramach cyklu życia do fazy testowania. W przypadku wykrycia trudności wydajnościowych, dodawane są dodatkowe komponenty sprzętowe lub wykonywane jest strojenie oprogramowania.
**Inżynieria wydajności** oprogramowania wymagania wydajnościowe uwzględnia we wszystkich fazach cyklu życia oprogramowania. Alternatywne rozwiązania projektowe oceniane są pod kątem spełnienia kryteriów wydajnościowych.

**Inżynieria wydajności oprogramowania charakteryzuje się następującymi cechami:**
  * Wykorzystanie i uzupełnienie istniejących metod oceny wydajności (modele wydajnościowe programów sekwencyjnych i równoległych, sieci Petriego (czyli metoda formalna umożliwiająca modelowanie analizy i zachowań systemu)).
  * Umożliwia modelowanie na odpowiednim poziomie abstrakcji.
  * Pozwala na wykonanie oceny w krótkim czasie.
  * Przydatna podczas wszystkich faz cyklu życia oprogramowania. 
  * Stosowana do różnych rodzajów oprogramowania.

W celu przeprowadzenia ilościowej oceny wydajności niezbędne są modele działania oprogramowania. Modele te powinny zawierać: charakterystykę obciążenia systemu, struktury sterowania oprogramowania, współzawodniczenie o zasoby, przetwarzania współbieżne.

Podczas danej fazy cyklu życia oprogramowania realizatorzy tworzą koncepcję produktu tej fazy. Następnie zebrane zostają dane wyrażające obciążenie, użytkowanie zasobów i związane z tym miary wydajnościowe. Jeśli oceny wykażą, że koncepcja produktu spełnia wymagania wydajnościowe, można przejść do fazy następnej. W przeciwnym przypadku należy dokonać oceny propozycji alternatywnych. Znaczącym elementem jest weryfikacja i walidacja modeli działania oprogramowania.

W celu zbudowania oprogramowania spełniającego wymagania wydajnościowe, należy weryfikować jego projekt w ramach wszystkich faz cyklu życia oprogramowania:
  * Analiza wymagań (zastosowania tworzonego oprogramowania, przewidywane scenariusze pracy, spełnienie wymagań funkcjonalnych z akceptowalną wydajnością).
  * Projekt wstępny (elementy oprogramowania mające krytyczny wpływ na wydajność, konfiguracja systemu komputerowego).
  * Projekt szczegółowy (czy nastąpiły modyfikacje wcześniejszej prognozy).
  * Kodowanie i testowanie (relacje pomiędzy wydajnością alternatywnych implementacji, nieprzewidziane problemy, zapotrzebowanie zasobów).

{{:4.jpg|:4.jpg}}