Common - Question 1 (Quality in development) Flashcards

1
Q

Co je kvalita ve vyvoji SW

A

Kombinace metod za ucelem dosazenim vydefinovane urovne kvality. Tyto metody jsou treba testovani, detekce chyb, definice pozadavku atp. Kvalita SW dost zavisi na uhlu pohledu - Uzivatel bude mit jiny pozadavky na kvalitu oprodi vyvojari. Obvykle se hleda nejlepsi kompromis mezi jednotlivymy uhly. Nektere kvality jdou proti sobe - (napr rychlost/bezpecnost). Nejcasteji kvalitu a jeji vlastnosti urci zakaznik.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Co je SOLID

A

SOLID je seznam doporucenych principu pro kvalitnejsi kod. Principy jsou: Single responsibility principle, Open-Close, Liskov substitution principle, Interface Segregation, Dependency Inversion

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Co znaci Single Responsibility Principle

A

Kazda trida/metoda by mela mit pouze jeden ucel (delat jednu vec).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Co znaci Open-Close principle

A

Trida ma byt otevrene k rozsirovani, ale uzavrena k modifikaci stavajici funkcionality.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Co znaci Liskov substitution principle

A

Jakkykoli podtrida muze nahradit sveho rodice - podtrida by nemela rozbit chovani nebo invariant

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Co znaci Interface Segregation principle

A

Znaci mit radsi vice interfacu nez par, ktere pak maji vice funkci - souvisi se single responsibility.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Co znaci Dependency Inversion principle

A

Trida by mela zaviset na definici interfacu a ne na konkretni implementaci tridy.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Mereni SW

A

Snazime se merit vlastnosti SW abychom meli prehled, jestli je napr kod citelny, spolehlivy. Muzeme merit, kolik procest radku kodu je otestovano,

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Technicky dluh

A

Podobne jako penezni. Snizime kvalitu SW na ukor rychlejsimu vyvoji

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Co si pod kvalitou SW muze predstavit Uzivatel

A

Kvality, ktere muze pocitit vizualne/ uzivanim. Tedy: uzivatelska pouzitelnost (jak se vyzna v rozhrani), jestli sluzba jede bez vypadku, rychlost sluzby, presnost sluzeb

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Co si pod kvalitou SW muze predstavit programator

A

Kvality, ktere citi pri psani sluzby. Tedy: komplexita kodu, testovatelnost, modularnost, pochopitelnost kodu.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Co si pod kvalitou SW muze predstavit manazer?

A

Kvality, ktere cili prevazne na dlouhodoby vyvoj sluzby. Tedy: skalovatelnost, znovupouzitelnost, schopnost adaptace na nove okolnosti (novy zakon treba vejde v platnost)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

SW metriky

A

Lines of Code
Number of methods
Number of Classes
Number of packages
Code coverage
Statement coverage
Function coverage
Branch Coverage
Cyclomatic complexity

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Metody pro zlepseni performance?

A

Profiling procesu - zkoumani complexity a bottlenecku vypoctu
paralelni zpracovani - (nutne pohlidat kriticke sekce - muze naopak i ublizit)
kontrolovane vyuziti vice zdroju - vyuzit cachovani, load balancer a repliky

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Metody pro zlepseni udrzitelnosti

A

Psat cisty kod (Solid, DRY, KISS)
Byt pripraven na zmeny (lide se vyvyji a pozadavky s nemi, zakony se meni/vytvari)
vhodny vyber knihoven (vybirat aktivni knihovny, aby se nestalo, ze za pul roku uz ji nikdo nebude spravovat a bude nutny prepis)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Metody pro zlepseni spolehlivosti

A

Monitorovat produkci - sbirat informace o behu a o chybach hlavne.
Tvorit system, ktery pocita s chybami

17
Q

Test-ability code smells

A

Globalni promene
Dependency injection
Hardcodovany vytvareni trid pres new (od toho jsou factory) - jde o to, kdyz pak potrebujem rozsirit tridu o metody pro testy

18
Q

SW Quality Management, o co se snazi

A

Snazi se pomoci vydefinovanych procesu zajistit vydefinovanou uroven kvality SW.

19
Q

Jake jsou kategorie procesu SW Quality Managment

A

SQP - Software Quality planning (risk analysis, cost benefit analysis, naplanovani ukolu, vydefinovani quality management scope)
SQA - Software Quality Assurance (monitorovani vyvoje aby vedli k vydefinovane kvalite)
SQC - Software Quality Control (monitorovani procesu a produktu, jestli splnuje aplikovane standardy/kvality)
SPI - Software process improvement (zlepseni efektivity procesu, aby pripadne zlepsili kvalitu SW)

20
Q

K cemu je Clean Code?

A

Aby se programator lepe vyznal v kodu

21
Q

Clean code, jake jsou zakladni principy?

A

Dodrzovani vydefinovanych konvenci pro projekt - tyka se pojmenovanani trid/metod/promenych.
Pokud projekt nema vydefinovane konvence, snazime se ridit zazitymi obecnymi konvencemi (konkretni pro jazyk, nebo obecne)
Cisty kod by mel dodrzovat SOLID principy a DRY (Don’t Repeat Yourself - zadny copy paste)
GRASP - General Responsibility Assigment SW principles - tipy pro obecne rozrazeni tridy na ruzne kategorie (je to podobne i single responsibility principle). Muzem mit tridy, ktere pouze drzi data, tridy pro vytvareni trid (factories), tridy pro transformaci dat, tridy pro abstrakci programu (facade)

22
Q

Priznaky ze se porusuje clean code (Bad code smells)

A

Circular dependency
Long parametr list
Long methods
Wrong abstraction levels (spatne dedeni trid)

23
Q

Co je refactoring? Co je cilem? Kdy refaktorujem?

A

Cilem refactoringu je snaha o zlepseni kodu v zavislosti na vydefinovanych kvalitach. Kod se casto refaktoruje, kdyz je potreba opravit chybu, zmenit/pridat feature ve sluzbe (refactoring probiha pred/po), narazime na spatne citelny kod. Refactor samotny by nemel rozbit nebo zmenit chovani sluzby.

24
Q

Co je obsahem refactoringu?

A

Extrakce method/trid
inlining method/trid (mit separatni metodu nedava smysl)
Prejmenovani
Vytvareni konstant pro magicke cisla/stringy
Zjednoduseni podminek
Nahrazeni arraye/vectoru tridou

25
Q

Co je Code Coverage?

A

% pokryti radku, ktere jsou hitnute behem testu (100% Code Coverage != bug free => div(x, y) => ret x/y, test div(6, 3) == 100% Code Coverage ale bug by byl div(6, 0))

26
Q

Co je Cyclomatic Complexity

A

a measurement to determine the stability and level of confidence in a program. It measures the number of linearly-independent paths through a program module.

Pocita se jako graf (N - vrcholy, E - hrany)
Cyclomatic Complexity = |E| - |N| + P (P = number of entry and exit locations)

27
Q

Uznavane Rozsahy Cyclomatic Complexity?

A

1 - 4 - low
5 - 7 - medium
8 - 10 - high
11+ - very high

28
Q

Maintainability index, co to je? Vyhody/Nevyhody

A

Index, ktery se snazi vyjadrit obtiznost udrzby kodu. Vyhoda je, ze diky tomu mame alespon naky prehled, nevyhoda je, ze hodne zavisi na delce kodu (LOC se pouziva v HV, CC - tedy tri promene v rovnici ktere zavisi na LOC)

29
Q

Maintability index rovnice

A

orig:
MI=171 - 5.2ln(HV) - 0.23CC - 16.2*ln(LOC)

LOC = Lines of code
CC = Cyclomatic Complexity
HV=Halstead volume (pocet unikatnich operatoru a promenych v koldu v pomeru delky kodu)

HV= ProgramLength*log_2(ProgramVocabulary)

Microsoft upravil formuli, aby sedela do rozsahu 1-100 (upravil: MAX(0, MI * 100/171) )

30
Q

Uznavane rozsahy Maintability index

A

Hodnoty jsou v rozsahu (-inf, 171)

Cim nizsi hodnota, tim hur citelny.

> = 85 - vysoce udrzovatelne
65-85 - relativne dobre udrzovatelne
<=65 - spatne udrzovatelne

31
Q

Testovani - popis

A

Testovani je process, pri kterem se system/kod/komponenta evaluuje, jestli splnuje vydefinovane pozadavky.

Pouziva se oracle, ktery se snazi urcit, jestli vysledek pro dany vstup je spravny (tedy chovani funkce je pravdepodobne spravne)

Testovat se muze kod (viz urovne testovani kodu), ale i system (stress test, load test, endurace)

32
Q

TDD - popis

A

Test Driven Development je technika zalozena na psani testu pri vyvoji. Doporucene (dle uncle boba) zacit s testem, dokud nefailne a pak pridat kod, dokud test neprojde. Az projde, zacit zase psat test, dokud nefailne a tak dokola.

33
Q

Urovne testovani kodu

A

Unit tests - testuje jednotlive prvky kodu (metoda/funkce/trida), White box testing
Integration tests - oproti unit testum testuje komponenty dohromady (unit testy nemusi odhalit dobrou spolupraci komponent - jedna metoda muze ocekavat centimetry, druha ale metry), White box a Black box
Acceptance test - Replikuje chovani uzivatele (klika jako uzivatel), pro test web sluzeb je SeleniumHQ, Blackbox
System testing - testuje cely system/SW, Blackbox

34
Q

Metody programovani zalozene na testovani

A

BDD - Behavior-driven development
TDD - Test-driver development

Maji vyhodu, ze pri refaktoru by testy meli overit, ze nebyla rozbita funkcnost. Na druhou stranu pri zmene featury se musi krom kodu zmenit i vsechny testy.

35
Q

Testovani systemu/vykonu

A

Load testing - simulace pouzivani - Simuluje se pouzivani X uzivatelu, Jak rychle se nacte/pouziva atp.

Stress testing - hleda se maximalni vykon appky (kolik treba max uzivatelu muze byt pripojenych)

Soak/Endurance testing - testuje se na delsim obdobi (similuje se nejlepe realne chovani na ocekavanem/vydefinovany trafiku - jaky byl ocekavan)

Profiling nasledne muze odhalit bottleneck a zajistit stabilitu/robustnost/efektivnejsi praci se zdroji.