Documente Academic
Documente Profesional
Documente Cultură
Cerintele functionale si nefunctionale reprezinta ansamblul functiilor principale sau nu pe care orice
program trebuie sa le indeplineasca, in acelasi mod serveste la constientizarea clientului asupra
functionalitatilor pe care programul le va indeplini. Aceste funcții sunt denumite aici în sistemul de
poziționare web (SEO)
Cerințe funcționale
Îmbunătățiți poziționarea față de companiile concurente
Efectuați actualizarea site-ului web
Generați cuvinte cheie pentru site-ul web
Generați adrese URL posibile
Analizați conținutul tehnic al paginii web (prezența etichetelor și JavaScript sau flash)
Calculați rata de respingere pentru a determina popularitatea site-ului
Calculați numărul de cuvinte cheie pe pagină
Cerințe nefuncționale
Sistemul trebuie să aibă o interfață ușor de utilizat (Interfață)
Cunoașteți obiectivele companiei
Menține site-ul web (software)
Analizați timpul de încărcare a paginilor principale (performanță)
Utilizați o bază de date care deține informațiile introduse (software)
CERINȚE FUNCȚIONALE
Nume Bază de date
Tip Cerinţă
Prioritate înalt
Descriere De fiecare dată când se creează un cont nou cu datele
fiecărui utilizator, acesta trebuie să fie stocat în baza de date
(fie în unitatea de stocare a PC-ului, fie în server)
Intrare Datele introduse de utilizator
Proces Salvați datele utilizatorului
Plecări Registrul de date
Tabelul 1: Cerințe funcționale - Baza de date
CERINȚE NEFUNCȚIONALE
Nume operabilitate
Tip Cerinţă
Prioritate înalt
Descriere Managerul de conținut trebuie să fie ușor de utilizat pentru
utilizatorii care nu au cunoștințe în dezvoltarea paginilor web
Intrare idee de site
Proces Proiectarea si configurarea paginii web de catre utilizator
Plecări Pagina web încheiată de utilizator
Tabelul 7: Cerințe nefuncționale - Operabilitate
Cerințele funcționale sunt declarații ale serviciilor pe care sistemul le va furniza, în modul în care va
reacționa la anumite intrări. Când vorbim despre intrări, nu vorbim neapărat doar despre intrările
utilizatorilor. Pot fi interacțiuni cu alte sisteme, răspunsuri automate, procese predefinite. În unele
cazuri, cerințele funcționale ale sistemelor precizează, de asemenea, în mod explicit ceea ce sistemul
nu trebuie să facă. Este important să rețineți acest lucru: un RF poate fi și o declarație negativă.
Atâta timp cât rezultatul comportamentului său este un răspuns funcțional la utilizator sau la alt
sistem, acesta este corect. Și în plus, nu este doar corect, dar este necesar să îl definim. Și asta ne
duce la următorul punct.
Multe dintre problemele din ingineria software (vorbind despre procesul de dezvoltare în sine) încep
cu specificații inexacte ale cerințelor. Este firesc ca un analist de afaceri (sau oricine definește și
documentează cerințele de sistem) să ia unele ipoteze drept cunoștințe universale sau să ia un
comportament de la sine înțeles. Dar amintiți-vă, este și firesc ca un dezvoltator de sistem să
interpreteze o cerință ambiguă în cel mai simplu mod posibil, pentru a simplifica implementarea
acesteia. Un exemplu clar al acestor probleme poate fi găsit în funcțiile comune legate de Experiența
utilizatorului:
Povestea utilizatorului: Ca utilizator, vreau ca aplicația să fie ușor de utilizat, astfel încât să nu
fiu nevoit să petrec mult timp învățând cum să o folosesc.
Ce înseamnă să fii „ușor de utilizat”?
Ușor pentru cine?
Cum a fost măsurat?
Cum îl urmărești?
Cum este testat? Pe ce criterii?
Acesta nu este ceva împotriva dezvoltatorilor, ci mai degrabă împotriva comportamentului uman.
Dacă presupui ceva, alții pot presupune ceva diferit și e în regulă. Dar analistul este responsabil
pentru documentare, așa că ar trebui să fie același analist care încearcă să se asigure că nu există
lacune în înțelegere sau pete gri. Acesta este și motivul pentru care sesiunile de Pre-Planificare și
Prezentarea poveștii sunt foarte importante pentru a vă asigura că întreaga echipă este pe aceeași
pagină în ceea ce privește cerințele, obiectivul dvs. de afaceri și cum să le implementați. Revenind la
exemplul anterior, am putea împărți cerințele în mai multe altele noi, care sunt mai ușor de înțeles,
dezvoltat, testat, urmărit și livrat. Una dintre ele ar putea fi:
Povestea utilizatorului: Ca utilizator, vreau să fie afișat un tutorial la prima conectare, astfel
încât să pot vedea pentru ce este folosită fiecare opțiune de ecran de pornire.
Știi ce să arăți, un tutorial.
Știți deja ce să verificați, ceea ce explică fiecare opțiune de pe ecranul de start.
Știți când trebuie afișat, la prima conectare a utilizatorului (puteți explica mai târziu dacă
tutorialul poate fi sărit, afișat alteori, accesat dintr-o secțiune din meniu etc.)
Revenind la FR, în principiu, specificarea cerințelor funcționale ale unui sistem trebuie să fie
completă și consecventă. Complet înseamnă că toate serviciile solicitate de utilizator și/sau alt
sistem sunt definite. Consecvența înseamnă că cerințele nu au o definiție contradictorie.
cerințe nefuncționale
Acestea sunt cerințe care nu se referă direct la funcțiile specifice furnizate de sistem (caracteristicile
utilizatorului), ci la proprietățile sistemului: performanță, securitate, disponibilitate. Cu cuvinte mai
simple, ei nu vorbesc despre „ce” face sistemul, ci despre „cum” o face. Alternativ, ele definesc
constrângerile sistemului, cum ar fi capacitatea dispozitivelor de intrare/ieșire și reprezentarea
datelor utilizate în interfața sistemului.
Cerințele nefuncționale provin din nevoia utilizatorului, din cauza restricțiilor bugetare, politicilor
organizaționale, nevoii de interoperabilitate cu alte sisteme software sau hardware sau factori
externi precum reglementările de securitate, politicile de confidențialitate, printre altele.
Uneori, în practică, specificarea cantitativă a acestor tipuri de cerințe este dificilă. Nu este
întotdeauna posibil ca clienții să-și transpună obiectivele în cerințe cantitative. Pentru unele dintre
ele, cum ar fi întreținerea, este posibil să nu fie posibilă utilizarea vreunei valori; costul verificării
obiective a cerinţelor cantitative nefuncţionale poate fi foarte mare. Și de aceea este, de asemenea,
foarte important să fii foarte atent atunci când le documentezi. Un analist poate folosi sprijinul
echipei de dezvoltare și al echipei de testare pentru a defini criterii măsurabile pentru a ști când o
cerință poate fi marcată cu succes ca „Efectuat”.
Așa cum vorbim despre cerințe funcționale, generalizarea nu este niciodată bună, dar în acest caz
este și mai importantă. Deoarece? Deoarece rezultatul dezvoltării cerințelor nefuncționale poate să
nu fie explicit pentru utilizatorul final.
Exemplu prost de RNF: sistemul trebuie să fie sigur.
Cât de sigur este „sigur”?
In ce situatii?
Există un standard de urmat?
În ce secțiuni?
Ce ar trebui să se întâmple dacă sistemul nu poate funcționa la fel de repede cum este necesar?
În aceste cazuri, implementarea unei cerințe nefuncționale prost definite poate fi problematică,
costisitoare și consumatoare de timp. Tot pentru că de cele mai multe ori, un RNF nu este ceva la
care echipa lucrează izolat într-o perioadă fixă de timp. RNF poate fi abordat pe tot parcursul
proiectului (și chiar înainte de începerea sau după livrare, în faza de întreținere). Din nou, exemplul
de mai sus ar putea fi împărțit în mai multe cerințe care sunt mai ușor de urmărit și implementat.
Exemplu RNF bun: Toate comunicațiile externe dintre serverele de date, aplicația și clientul de
sistem trebuie să fie criptate folosind algoritmul RSA.
Știți ce fel de comunicații trebuie criptate.
Știți ce algoritm să utilizați și să validați.
În orice caz, atât RF-urile cât și RNF-urile trebuie să fie întotdeauna documentate, chiar dacă este
dificil de stabilit relația dintre ele în artefacte. Acest lucru va ajuta echipa să reducă discuțiile dus-
întors, să economisească timp și, mai ales, probleme inutile cu clientul.
Cerințele funcționale ale unui sistem sunt cele care descriu orice activitate pe care trebuie să o
desfășoare, cu alte cuvinte, comportamentul sau funcția particulară a unui sistem sau software
atunci când sunt îndeplinite anumite condiții.
De obicei, acestea ar trebui să includă funcții efectuate de anumite ecrane, descrieri ale fluxurilor
de lucru care urmează să fie efectuate de sistem și alte cerințe de afaceri, de conformitate, de
securitate sau alte cerințe.
În acest articol, vă prezentăm exemple de cerințe funcționale, legate de funcțiile business, date
care trebuie introduse pe ecranele sistemului (interfață grafică), cele legate de controlul accesului
sau emiterea de rapoarte solicitate de entitățile de reglementare, printre altele.
Ca și alte tipuri de cerințe software, cum ar fi cerințele nefuncționale , cerințele funcționale pot fi
clasificate în funcție de scopul lor, cum ar fi cerințele de afaceri, cerințele care provin din aspecte
de reglementare și securitate, printre altele.
Cerințele funcționale trebuie scrise în așa fel încât cititorul să poată înțelege funcționarea
sistemului fără a avea cunoștințe tehnice speciale despre funcționarea acestuia.
Important este să definiți o modalitate standard de exprimare a cerințelor și să fie consecventă cu
aceasta în toate documentele.
La fel, cerințele funcționale nu trebuie neapărat definite sub formă de narațiuni scrise, ci pot fi
folosite și diagrame sau fluxuri de proces, care sunt incluse în specificația funcțională a software-
ului sau a sistemului de dezvoltat.
Pentru a identifica și documenta cerințele funcționale ale software-ului, sunt urmați doi pași, în
primul rând, sunt aplicate tehnici de colectare a cerințelor , cum ar fi observarea, interviurile,
observația, printre altele.
După sondaj, se aplică tehnici de analiză a cerințelor pentru a revizui informațiile obținute în
sondaj și a pregăti specificația funcțională, unele dintre aceste tehnici sunt descompunerea
funcțională, modelarea proceselor, cazurile de utilizare și altele.
Referințe
Prezentăm partea a treia a seriei privind cerințele nefuncționale, cu câteva exemple care pot servi
drept ghid în definirea acestora.
Cerințele nefuncționale reprezintă caracteristici generale și restricții ale aplicației sau sistemului
care se dezvoltă.
Ele prezintă de obicei dificultăți în definirea lor, dat fiind că conformitatea sau neconformitatea lor
ar putea face obiectul unei interpretări libere, pentru care este recomandabil să se însoțească
definiția lor cu criterii de acceptare care pot fi măsurate.
Printre exemplele de cerințe nefuncționale prezentate, le avem pe cele care se referă la atribute
precum eficiența, securitatea, fiabilitatea și capacitatea de utilizare a sistemului. De asemenea,
prezentăm exemple de cerințe organizaționale și externe nefuncționale.
Care sunt cerințele nefuncționale și cum sunt ele clasificate?
Dacă căutați mai multe informații despre conceptul de cerințe nefuncționale, vă recomandăm prima
parte a acestei serii Cerințe non-funcționale: de ce sunt importante
La un al doilea nivel, cerințele de produs pot fi clasificate în cerințe de utilizare, eficiență, fiabilitate
și securitate. La rândul lor, cerințele organizaționale pot fi clasificate în cerințe de mediu,
organizaționale și de dezvoltare. De asemenea, cerințele externe pot fi clasificate în cerințe de
reglementare, etice și legislative.
Când sunt efectuate fazele de colectare și analiză a cerințelor, cerințele nefuncționale pot fi
înregistrate într-un document de cerințe software. Aici împărtășim un șablon:
După cum arătăm în articolul despre clasificarea cerințelor nefuncționale , la un prim nivel
acestea pot fi clasificate în cerințe de produs, organizaționale și externe.
La un al doilea nivel, cerințele de produs pot fi clasificate în cerințe de utilizare, eficiență, fiabilitate
și securitate. La rândul lor, cerințele organizaționale pot fi clasificate în cerințe de mediu,
organizaționale și de dezvoltare. De asemenea, cerințele externe pot fi clasificate în cerințe de
reglementare, etice și legislative.
Mai jos vă prezentăm exemple de cerințe nefuncționale, clasificate pe aceste zone diferite.
Eficienţă
Securitate industrială
utilizabilitate
Timpul de învățare al sistemului de către un utilizator ar trebui să fie mai mic de 4 ore.
Rata erorilor comise de utilizator trebuie să fie mai mică de 1% din totalul tranzacțiilor
executate în sistem.
Sistemul trebuie să aibă manuale de utilizare structurate corespunzător.
Sistemul trebuie să furnizeze mesaje de eroare informative și destinate utilizatorului final.
Sistemul trebuie să aibă un modul de ajutor online.
Aplicația web trebuie să aibă un design „Responsive” pentru a garanta o vizualizare
adecvată pe mai multe computere personale, tablete și smartphone-uri.
Sistemul trebuie să aibă interfețe grafice bine formate.
fiabilitatea
Sistemul trebuie să fie disponibil 99,99% din timpul când un utilizator încearcă să îl
acceseze.
Timpul de pornire sau repornire a sistemului nu poate fi mai mare de 5 minute.
Rata timpului de defecțiune a sistemului nu poate fi mai mare de 0,5% din timpul total de
funcționare.
Durata medie a defecțiunilor nu poate fi mai mare de 15 minute.
Probabilitatea de defectare a sistemului nu poate fi mai mare de 0,05.
Procedura de dezvoltare software care trebuie utilizată trebuie să fie definită în mod explicit
(în manualele de procedură) și trebuie să respecte standardele ISO 9000.
Metodologia de dezvoltare software va fi Behaviour Driven Development (BDD) susținută
de Cucumber .
Sistemul trebuie dezvoltat folosind instrumentele CASE XYZ.
Procesul de dezvoltare va fi gestionat prin intermediul unui anumit instrument web pentru
a gestiona procesul de dezvoltare software .
Trebuie specificat un plan de recuperare în caz de dezastru pentru ca sistemul de dezvoltat.
La fiecare două săptămâni ar trebui elaborate rapoarte de management care să arate efortul
investit în fiecare dintre componentele noului sistem.
Testarea software-ului va fi gestionată cu un instrument de management al testării
software .
Testele software vor fi executate folosind Selenium și Ruby ca instrument și limbaj de
scripting pentru automatizarea testării software.
Sisteme de date medicale: Noul sistem și procedurile sale de întreținere a datelor trebuie să
respecte legile și reglementările privind protecția datelor medicale.
Noul sistem va adera la regulile licențelor publice generale (GNU), adică va fi gratuit, open
source în care oricine poate schimba software-ul, fără brevete și fără garanții.
Paginile web care urmează să fie dezvoltate trebuie să respecte legea privind egalitatea de
tratament pentru persoanele cu dizabilități.
Sistemul nu va dezvălui operatorilor săi alte date personale ale clienților, altele decât
numele și numerele de referință.
Cerințele nefuncționale sunt de obicei exprimate într-un mod general și fără a se referi la vreun
modul, tranzacție sau caracteristică a sistemului, altfel ar deveni cerințe funcționale .
De exemplu:
Este recomandabil să însoțiți definițiile cerințelor nefuncționale cu criterii de acceptare care pot fi
măsurate.
Cerințele nefuncționale pot duce la rândul lor la cerințe funcționale, luând ca exemplu cele de mai
sus:
Cu toate acestea, nu toate cerințele nefuncționale pot fi derivate în cerințe funcționale, așa că este
foarte important să se definească criteriile de acceptare.
Caracteristicile nefuncționale ale unui sistem sau aplicație sunt adesea cuantificate pe scări
diferite, cum ar fi timpii de răspuns la testele de performanță.
ISTQB afirmă că omiterea testelor nefuncționale poate duce la probleme de calitate potențial
catastrofale după producție, cu toate acestea, aceste tipuri de teste sunt costisitoare, astfel încât
riscurile ar trebui evaluate înainte de angajarea resurselor proiectului.
Iată o listă nelimitată de 10 tipuri de teste nefuncționale pe care le puteți include în planul dvs. de
testare a software-ului .
1. - Teste de sarcină
Testele de încărcare ajută la identificarea capacității operaționale maxime a unei aplicații, precum
și la identificarea blocajelor și a cauzelor posibilei degradări a performanței.
Când sarcina de testare crește peste parametrii așteptați, aceste teste sunt cunoscute ca teste de
stres.
2. - Teste de stres
Sunt teste de sarcină care se efectuează cu solicitări mai mari decât capacitatea operațională,
frecvent până la atingerea punctului de rupere.
Acest tip de testare software este utilizat pentru a determina stabilitatea unui sistem sau a unei
aplicații, cu accent pe disponibilitate și tratarea erorilor atunci când se confruntă cu supraîncărcare.
În ceea ce privește testele de încărcare, sunt necesare instrumente care simulează cererea,
SoapUI este unul dintre aceste instrumente care permite simularea solicitărilor pentru serverele de
aplicații web.
Cu testele de stres puteți identifica punctele de rupere, limitele pentru utilizarea în siguranță a
aplicației, confirmați specificațiile de proiectare, identificați modalitățile în care sistemul eșuează,
printre alte aspecte.
3. - Teste de volum
De exemplu, dacă doriți să vedeți comportamentul unei aplicații cu o anumită dimensiune a bazei
de date, extindeți dimensiunea bazei de date la acei parametri și apoi efectuați interogări, procese
sau funcționalități ale aplicației, măsurându-i performanța.
Subiectul de testare nu se limitează la baze de date, poate fi folosit și de exemplu pentru a măsura
performanța unei interfețe atunci când fișierul de interfață (un fișier text, xml etc.) depășește o
anumită dimensiune.
Obiectivul este de a vedea dacă, având în vedere anumite volume de date, aplicația funcționează
normal, care sunt limitele maxime de volume de date pentru operare și de a identifica condițiile de
defecțiune.
4. - Teste de configurare
Mai degrabă decât testarea performanței unei aplicații din perspectiva încărcării, testele de
configurare sunt folosite pentru a valida ce efecte au anumite modificări de configurare asupra
performanței.
Un exemplu tipic al acestei situații este experimentarea cu diferite metode de echilibrare a sarcinii
și observarea răspunsului aplicației la niveluri similare de suprasarcină.
Un alt exemplu este verificarea dacă sistemul este capabil să funcționeze corect în diferite versiuni
sau configurații ale mediilor hardware și software, cum ar fi diverse browsere de internet, versiuni
de browser, printre altele.
5. - Teste de utilizare
Ușurință de învățare: cât de ușor este pentru utilizatori să îndeplinească funcțiile de bază prima
dată când folosesc aplicația.
Eficiență: cât de repede își pot îndeplini sarcinile utilizatorii cu experiență.
Memorare: Cât de ușor este să memorezi utilizarea aplicației, adică atunci când un
utilizator trece mult timp fără să folosească aplicația, își poate aminti suficient pentru a o utiliza
eficient data viitoare sau trebuie să înceapă să învețe din nou.
Erori: câte erori de proiectare face utilizatorul, cât de grave sunt acestea și cât de ușor este
să vă recuperați.
Satisfacție: cât de mult îi place (sau nu îi place) utilizatorului să folosească sistemul.
6. - Teste de securitate
Constă în testarea atributelor sau caracteristicilor de securitate ale sistemului, dacă este un sistem
securizat sau nu, dacă poate fi încălcat, dacă există control acces prin conturi de utilizator, dacă
aceste accesări pot fi încălcate.
Testele de securitate servesc, de asemenea, pentru a valida dacă echipa de dezvoltare software a
respectat practicile de securitate recomandate în programarea sa .
7. - Teste de rezistenta
Testarea de anduranță implică supunerea unui sistem sau aplicație la o anumită sarcină pentru o
perioadă de timp, pentru a determina modul în care funcționează după o utilizare prelungită.
Un sistem informatic se poate comporta normal în primele ore, cu toate acestea, după un timp,
probleme precum scurgerile de memorie cauzează adesea defecțiuni.
8. - Teste de scalabilitate
Testele de scalabilitate constau în verificarea capacității unei aplicații de a scala oricare dintre
caracteristicile sale nefuncționale, cum ar fi încărcarea pe care o suportă, numărul de tranzacții,
volumele de date, printre altele.
Pentru ca rezultatele să fie de încredere, mediile de testare și setările acestora trebuie menținute
constante.
9. - Teste de recuperare
Testarea de recuperare este efectuată pentru a verifica cât de repede și cât de bine se
recuperează o aplicație după ce se confruntă cu o defecțiune hardware sau software.
Prin urmare, efectuarea testelor de recuperare necesită forțarea eșecului și apoi verificarea dacă
recuperarea are loc corect.
De exemplu, atunci când o aplicație funcționează, deconectați cablul de rețea sau, într-o aplicație
mobilă, întrerupeți conexiunea cu rețeaua Wi-Fi sau cu operatorul, apoi restabiliți conexiunea.
Ele constau practic în evaluarea cât de ușor este să întreținem un sistem sau o aplicație. Aceasta
înseamnă cât de ușor este să analizați, să schimbați și să testați aceste modificări.
Pentru realizarea acestui test trebuie evaluat modul în care este implementată aplicația, urmând
bune practici de inginerie software. Adică, sunt respectate modelele recomandate de inginerie
software și că nu sunt introduse din greșeală anti-modele, adică nu sunt făcute erori comune de
programare .
Somerville împarte cerințele nefuncționale în trei tipuri mari: cerințe de produs, cerințe
organizaționale și cerințe externe.
De obicei se referă la limite sau restricții ale comportamentului sistemului, motiv pentru care
stabilește limite și restricții asupra a ceea ce pot face designerii (arhitecții software) și inginerii
software.
Unele dintre aceste cerințe pot fi ușor de cuantificat, cum ar fi performanța și fiabilitatea, dar altele
sunt mai dificile, cum ar fi capacitatea de utilizare și adaptabilitatea.
Un instrument util pentru a verifica eficiența unui sistem este SoapUI, care permite teste de
încărcare sau de stres pe servicii web. Aici împărtășim articole pe acest subiect:
Luarea în considerare a cerințelor produsului este vitală pentru a realiza integrarea continuă a
aplicațiilor și dezvoltarea unor schimbări rapide, dar durabile în timp.
Această nouă paradigmă este necesară pentru a implementa noi tehnologii informaționale și
aplicații software, cum ar fi mobilitatea, Internetul obiectelor, analiza avansată a datelor (Big
Data), evoluția sistemelor către cloud și tehnologia informației scalabilă.
Cerințe organizaționale nefuncționale
Acestea sunt derivate din politicile și procedurile organizației, cum ar fi standardele de proces sau
cerințele de implementare.
Unul dintre aspectele care sunt documentate ca cerințe funcționale organizaționale sunt mediul,
în special procedurile de întreținere și administrare a mediului de dezvoltare software .
Acestea derivă din mediul organizațional (nu mediul tehnic) în care este dezvoltat sistemul și se
pot face atât pe produs (software-ul dezvoltat), cât și pe procesul de dezvoltare software.
Aceste tipuri de cerințe includ limitări de natură economică, interacțiune sau necesitate ca sistemul
să interoperați cu alte sisteme, cerințe de reglementare în domeniul sănătății, siguranței industriale
sau protecției datelor, cerințe legale privind licențele, reglementările sau certificările necesare de
produs în funcție de industria în care lucrează, printre altele.
Specificarea cerințelor nefuncționale într-un mod incomplet sau inexact poate duce la eșecul
proiectului dumneavoastră de inginerie software.
De fapt, negestionarea cerințelor nefuncționale este una dintre greșelile clasice de management
al dezvoltării software definite de Steve McConnell .
A fi capabil să clasifice corect fiecare cerință nefuncțională identificată este foarte important pentru
a garanta acest proces.
https://www.youtube.com/user/codigofacilito
https://www.youtube.com/channel/UC4CEqh4d3-6RcyyJxhFCMGg
https://marvelapp.com/ .