Common - Question 1 (Quality in development) Flashcards
(35 cards)
Co je kvalita ve vyvoji SW
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.
Co je SOLID
SOLID je seznam doporucenych principu pro kvalitnejsi kod. Principy jsou: Single responsibility principle, Open-Close, Liskov substitution principle, Interface Segregation, Dependency Inversion
Co znaci Single Responsibility Principle
Kazda trida/metoda by mela mit pouze jeden ucel (delat jednu vec).
Co znaci Open-Close principle
Trida ma byt otevrene k rozsirovani, ale uzavrena k modifikaci stavajici funkcionality.
Co znaci Liskov substitution principle
Jakkykoli podtrida muze nahradit sveho rodice - podtrida by nemela rozbit chovani nebo invariant
Co znaci Interface Segregation principle
Znaci mit radsi vice interfacu nez par, ktere pak maji vice funkci - souvisi se single responsibility.
Co znaci Dependency Inversion principle
Trida by mela zaviset na definici interfacu a ne na konkretni implementaci tridy.
Mereni SW
Snazime se merit vlastnosti SW abychom meli prehled, jestli je napr kod citelny, spolehlivy. Muzeme merit, kolik procest radku kodu je otestovano,
Technicky dluh
Podobne jako penezni. Snizime kvalitu SW na ukor rychlejsimu vyvoji
Co si pod kvalitou SW muze predstavit Uzivatel
Kvality, ktere muze pocitit vizualne/ uzivanim. Tedy: uzivatelska pouzitelnost (jak se vyzna v rozhrani), jestli sluzba jede bez vypadku, rychlost sluzby, presnost sluzeb
Co si pod kvalitou SW muze predstavit programator
Kvality, ktere citi pri psani sluzby. Tedy: komplexita kodu, testovatelnost, modularnost, pochopitelnost kodu.
Co si pod kvalitou SW muze predstavit manazer?
Kvality, ktere cili prevazne na dlouhodoby vyvoj sluzby. Tedy: skalovatelnost, znovupouzitelnost, schopnost adaptace na nove okolnosti (novy zakon treba vejde v platnost)
SW metriky
Lines of Code
Number of methods
Number of Classes
Number of packages
Code coverage
Statement coverage
Function coverage
Branch Coverage
Cyclomatic complexity
Metody pro zlepseni performance?
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
Metody pro zlepseni udrzitelnosti
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)
Metody pro zlepseni spolehlivosti
Monitorovat produkci - sbirat informace o behu a o chybach hlavne.
Tvorit system, ktery pocita s chybami
Test-ability code smells
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
SW Quality Management, o co se snazi
Snazi se pomoci vydefinovanych procesu zajistit vydefinovanou uroven kvality SW.
Jake jsou kategorie procesu SW Quality Managment
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)
K cemu je Clean Code?
Aby se programator lepe vyznal v kodu
Clean code, jake jsou zakladni principy?
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)
Priznaky ze se porusuje clean code (Bad code smells)
Circular dependency
Long parametr list
Long methods
Wrong abstraction levels (spatne dedeni trid)
Co je refactoring? Co je cilem? Kdy refaktorujem?
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.
Co je obsahem refactoringu?
Extrakce method/trid
inlining method/trid (mit separatni metodu nedava smysl)
Prejmenovani
Vytvareni konstant pro magicke cisla/stringy
Zjednoduseni podminek
Nahrazeni arraye/vectoru tridou