Jakie cechy oprogramowania warto sprawdzić?

Jakie cechy oprogramowania warto sprawdzić?
Jeśli szukasz inspiracji, co jeszcze warto przetestować w oprogramowaniu, to publikacja "Charakterystyki jakości oprogramowania" od TheTestEye w tłumaczeniu Radka Smilgina przynosi wiele podpowiedzi. Tłumaczenie opublikowano w 2013 roku i do dziś się nie przeterminowało, ale lekko je uwspółcześniliśmy.

Poniższe charakterystyki oprogramowania możesz potraktować jako swoistą listę kontrolną wspierającą testowanie i weryfikację. Czasami podczas testów może zabraknąć CI pomysłów co jeszcze warto przetestować i tu z pomocą przychodzą publikacje takie, jak ta.

Nie wszystkie charakterystyki będą odpowiednie do Twojego oprogramowania, ale zauważycie, że przy niektórych z nich powiecie "O tym nie pomyślałam / pomyślałem".

Charakterystyki jakości oprogramowania

Przeczytaj poniższy tekst i zastanów się nad swoim produktem i jego cechami. Określ, jaki jest kontekst Twojej aplikacji, a następnie przekształć listę, by była zgodna z przedmiotem Twojej pracy. 

Zdolność.

Czy produkt ma wartościowe funkcje?

  • Kompletność: wszystkie ważne funkcje potrzebne użytkownikom końcowym są dostępne.          
  • Dokładność: dowolny wynik lub kalkulacja w produkcie są poprawne oraz prezentowane z użyciem precyzyjnych wartości.
  • Efektywność: produkt wykonuje swoje czynności wydajnie (nie robiąc przy tym rzeczy, których nie powinien robić).
  • Współpraca: różne funkcje współdziałają ze sobą w możliwie optymalny sposób.
  • Wielozadaniowość: produkt może wykonywać wiele zadań równolegle.
  • Agnostycyzm danych: produkt wspiera wszystkie możliwe formaty danych i radzi sobie z ich przekłamaniami. 
  • Rozwijalność: produkt umożliwia klientom lub osobom trzecim dodawanie nowych funkcji albo zmienianie zachowań produktu.

Niezawodność.

Czy możesz zaufać produktowi w wielu trudnych sytuacjach?

  • Stabilność: produkt nie powoduje awarii, nie ma nieobsługiwanych wyjątków, ani błędów wykonania skryptów.
  • Odporność: produkt obsługuje przewidziane i nieprzewidziane błędy we właściwy sposób. 
  • Obsługa stresowych sytuacji: jak system radzi sobie w przypadku przekraczania różnych limitów?
  • Odtwarzalność: istnieje możliwość odzyskania danych i dalszego korzystania z produktu po wystąpieniu awarii krytycznej.
  • Spójność danych: wszystkie typy danych pozostają niezmienne w całym produkcie.
  • Bezpieczeństwo: produkt nie spowoduje żadnych strat w zdrowiu, w ludziach lub w mieniu.
  • Odtworzenie po katastrofalnej awarii: co, jeśli stanie się coś bardzo, bardzo złego? 
  • Zaufanie: czy zachowanie produktu jest spójne, przewidywalne i godne zaufania?

Użyteczność.

Czy produkt jest łatwy w użyciu?

  • Zachęcenie: produkt zachęca do odkrywania jego możliwości.
  • Intuicyjność: czy jest łatwo zrozumieć i wyjaśnić, do czego służy ten produkt?
  • Minimalizm: nie ma zbędnych elementów w zawartości i w wyglądzie produktu.
  • Uczenie się: można szybko i łatwo nauczyć się obsługi produktu.
  • Zapamiętywanie: jeśli raz nauczyłeś się, jak coś zrobić, nie zapomnisz tego.
  • Odkrywanie: informacje i potencjał produktu mogą być odkryte poprzez eksplorację interfejsu użytkownika.
  • Operowanie: doświadczony użytkownik może wykonywać standardowe akcje bardzo szybko.
  • Interaktywność: produkt ma łatwe do zrozumienia stany oraz możliwe interakcje wewnątrz aplikacji (poprzez GUI i API).
  • Kontrola: użytkownik powinien mieć poczucie kontroli nad działaniem programu.
  • Klarowność: czy wszystko jest przekazane w sposób szczegółowy, zrozumiały i niewywołujący wątpliwości?
  • Błędy: komunikaty o błędach powinny być pomocne; trudno popełnić błąd, a po jego popełnieniu łatwo go naprawić.
  • Spójność: zachowanie oraz wygląd są takie same w całym produkcie.
  • Dopasowanie: domyślne ustawienia i zachowania mogą być elastycznie zmieniane.
  • Dostępność: produkt może być użyty przez możliwie największą grupę użytkowników i jest zgodny ze standardami dostępności.
  • Dokumentacja: dostępna jest Pomoc, która pomaga i pokrywa zakres funkcjonalności.

Charyzma.

Czy produkt ma "to coś"? 

  • Unikalność: produkt wyróżnia się na tle innych i ma coś, czego nie mają inne produkty.
  • Satysfakcja: jakie są Twoje wrażenia po skorzystaniu z tego produktu?
  • Profesjonalizm: czy produkt ma właściwy poziom profesjonalizmu i sprawia wrażenie odpowiedniego do realizacji celu?
  • Atrakcyjność: czy wszystkie aspekty produktu oddziałują na wzrok i inne zmysły?
  • Ciekawość: czy użytkownicy będą na tyle zainteresowani, by sprawdzić, co mogą osiągnąć, korzystając z produktu?
  • Zaciekawienie: czy użytkownik „połknął haczyk”, czy korzystał z produktu z przyjemnością, będąc w pełni zaangażowany?
  • Nowinki: czy produkt używa najnowszych i najlepszych technologii oraz idei?
  • Oczekiwania: produkt wyprzedza oczekiwania oraz zaspakaja potrzeby, których użytkownicy nawet nie byli świadomi. 
  • Perspektywa: czy produkt i informacje w nim zawarte są poprawnie skonstruowane pod kątem języka i stylu?
  • Kierunkowość: czy aplikacja robi dobre (pierwsze) wrażenie?
  • Historia: czy istnieją interesujące historie o produkcie, jego powstaniu, konstruowaniu i użytkowaniu?

Bezpieczeństwo.

Czy produkt jest zabezpieczony przed niepożądanym użyciem?

  • Autentykacja: produkt identyfikuje użytkownika.
  • Autoryzacja: obsługa tego, co użytkownik może zobaczyć i zrobić w produkcie. 
  • Prywatność: zdolność do nieujawniania chronionych danych nieautoryzowanym użytkownikom.
  • Luki bezpieczeństwa: w produkcie nie ma luk podatności socjotechnicznych. 
  • Tajność: produkt w żadnym wypadku nie ujawnia informacji o technologiach leżących u podstawy systemu.
  • Nienaruszalność: zdolność stawiania oporu próbom penetracji.  
  • Brak wirusów: produkt nie ma wirusów i nie jest identyfikowany jako wirus.
  • Odporność na piractwo: brak możliwości nielegalnego kopiowania i dystrybucji oprogramowania lub kodu.
  • Zgodność: przestrzeganie obowiązujących standardów. 

Wydajność.

Czy produkt jest wystarczająco szybki?

  • Zdolność: istnieją różne ograniczenia w produkcie dla różnych okoliczności (np. niska przepustowość)
  • Utylizacja zasobów: właściwe zarządzanie pamięcią, przestrzenią dyskową i innymi zasobami.
  • Reagowanie: szybkość wykonania (lub postrzegania wykonania) zadania.
  • Dostępność: system jest dostępny do użycia wtedy, kiedy powinien.
  • Przepustowość: zdolność produktu do przetwarzania wielu rzeczy.
  • Wytrzymałość: produkt może wytrzymać obciążenie przez długi czas?
  • Informacja zwrotna: czy informacja zwrotna wysyłana przez system w odpowiedzi na działanie użytkownika jest odpowiednia?
  • Skalowalność: jak dobrze produkt skaluje się dla wzrastającego i malejącego obciążenia?

IT-alność.

Czy produkt jest łatwy do zainstalowania, utrzymania i wspierania?

  • Wymagania systemowe: zdolność do uruchomienia produktu na wspieranych konfiguracjach i obsługa różnych środowisk lub braku komponentów.
  • Instalowalność: produkt może zostać zainstalowany na zdefiniowanej platformie oraz na wystarczającej przestrzeni.
  • Aktualizacje: łatwość zaktualizowania do nowszej wersji bez utraty konfiguracji i ustawień.
  • Dezinstalacja: czy wszystkie pliki (z wyjątkiem plików użytkownika lub plików systemowych) i inne zasoby zostają usunięte podczas dezinstalacji?
  • Konfiguracja: czy instalacja może być konfigurowana na różne sposoby i do różnych lokalizacji, co wspiera użytkowanie produktu przez użytkownika?
  • Dostarczenie: dział IT może dostarczyć produkt użytkownikom różnego typu oraz dla różnych środowisk.
  • Utrzymywanie: czy produkt i jego składowe mogą być łatwo utrzymywane i wspierane według potrzeb klienta?
  • Testowalność: jak dostarczony produkt może być efektywnie testowany przez klienta?

Kompatybilność.

Jak dobrze produkt współdziała z innym oprogramowaniem i środowiskami?

  • Kompatybilność sprzętowa: produkt może zostać użyty na odpowiednich konfiguracjach sprzętowych.
  • Kompatybilność względem systemu operacyjnego: produkt może zostać uruchomiony na wyspecyfikowanych wersjach systemu operacyjnego i zachowuje się w typowy sposób.
  • Kompatybilność aplikacyjna: produkt i jego dane współpracują z innymi aplikacjami, których klient może używać.
  • Kompatybilność konfiguracyjna: zdolność oprogramowania do rozpoznania konfiguracji środowiska.
  • Kompatybilność wsteczna: czy produkt robi wszystko, co potrafiła jego wcześniejsza wersja?
  • Kompatybilność przyszła: czy produkt będzie zdolny do użycia artefaktów oraz interfejsów przyszłych wersji?
  • Zrównoważony rozwój: wpływ na środowisko np. wydajność energetyczna, wyłączanie, tryb oszczędzania energii, praca zdalna.
  • Zgodność ze standardami: produkt jest zgody z odpowiednimi standardami, regulacjami, prawem lub etyką.

Wewnętrzne charakterystyki jakości oprogramowania

Poniższe charakterystyki nie są bezpośrednio odczuwane przez końcowego użytkownika, jednak mogą być równie ważne dla powodzenia produktu.

Wsparcie.

Czy użytkowanie i problemy klienta mogą być wspierane?

  • Identyfikacja: czy można łatwo zidentyfikować części produktu, ich wersje lub konkretne błędy?
  • Diagnostyka: czy znalezienie szczegółów sytuacji po stronie klienta jest możliwe? 
  • Rozwiązywalność problemów: czy można łatwo wskazać błędy (np. w logach) i uzyskać pomoc?
  • Debugowanie: czy w razie potrzeby można zaobserwować wewnętrzne stany oprogramowania?
  • Wszechstronność: możliwość użycia produktu na więcej sposobów niż wstępnie zaprojektowano.

Testowalność.

Czy można łatwo sprawdzić i przetestować produkt?

  • Śledzenie: produkt loguje akcje na właściwym poziomie i w użytecznym formacie.
  • Kontrolowalność: zdolność do niezależnego definiowania stanów, obiektów oraz zmiennych.
  • Obserwowalność: zdolność do obserwowania elementów, które powinny zostać poddane testom.
  • Monitorowanie: czy produkt podpowiada co się z nim dzieje?
  • Izolacja: zdolność do testowania pojedynczych części produktu. 
  • Stabilność: zmiany oprogramowania są kontrolowane i niezbyt częste.
  • Automatyzacja: czy w oprogramowaniu są publiczne lub ukryte interfejsy programistyczne, z których można skorzystać? 
  • Informacja: umożliwienie testerom nauczenia się tego, co trzeba...
  • Audyt: czy produkt i to, co produkt tworzy, może być walidowane?

Utrzymanie.

Czy produkt może zostać utrzymywany i rozszerzany niskim kosztem?

  • Elastyczność: zdolność do modyfikacji produktu na żądanie klienta.
  • Rozszerzalność: czy będzie łatwo dodawać w przyszłości nowe funkcje?
  • Prostota: kod nie jest bardziej skomplikowany, niż jest to konieczne; nie utrudnia projektowania, uruchomienia i oceny.
  • Czytelność: kod jest właściwie opisany, łatwy do odczytania i zrozumienia.
  • Przejrzystość: czy można łatwo zrozumieć strukturę bazową?
  • Modułowość: kod jest podzielony na dające się kontrolować elementy.
  • Refaktorowalność: czy testy jednostkowe są według Ciebie wystarczająco dobre?
  • Analiza: zdolność do znalezienia przyczyn defektów lub innej interesującej nas informacji.

Przenośność.

Czy przenoszenie oprogramowania do innych środowisk i języków jest możliwe?

  • Ponowne użycie: czy części produktu mogą być ponownie użyte w innym miejscu?
  • Adaptacja: czy można łatwo zmieniać produkt, by wspierać inne środowiska? 
  • Kompatybilność: czy produkt współgra ze standardowymi interfejsami lub oficjalnymi standardami?
  • Umiędzynarodowienie: czy można łatwo przetłumaczyć produkt?
  • Lokalizacja: czy części produktu można dopasować dla spełnienia potrzeb docelowych kultur lub państw?
  • Odporność interfejsu użytkownika: czy produkt będzie wyglądał tak samo dobrze po przetłumaczeniu?
Źródła:
http://thetesteye.com/posters/TheTestEye_SoftwareQualityCharacteristics.pdf
https://thetesteye.com/blog/2013/06/translations-of-quality-characteristics/

To powinno Cię zainteresować