Slo(v)níček

Agile 
Agile je způsob myšlení a přístupu k práci, který upřednosťnuje pružnost a rychlou reakci na měnící se prostředí, před zdlouhavými procesy, přípravami na vše a fixními plány s odhady budoucnosti. Ve vývoji softwaru se o agile mluví od vzniku agilního manifestu, který definuje základní stavební kameny pro agilní kulturu. [Manifest] [wiki]
Akceptační test 
Akceptační test je označení pro manuální nebo automatický test, který ověřuje správnost celkové funkcionality systému vůči jeho specifikaci. Svou koncepcí je velmi podobný systémovému testu, avšak akceptační test je prováděn zpravidla na straně zadavatele, který tak kontroluje, že systém splňuje jeho požadavky. [wiki]
Algoritmus 
Algoritmem při programování je myšlen teoretický popis po sobě jdoucích kroků, které vedou k vyřešení určité úlohy. K popisu algoritmu se dá použít vývojový diagram nebo i obyčejná tužka a papír. Typickým akademickým zástupcem počítačového algoritmu je např. třídící algoritmus BubbleSort. [wiki] [BubbleSort]
AMQP 
AMQP (Advanced Message Queuing Protocol) je otevřený standard protokolu pro messaging. Pro posílání těchto zpráv se používá SW nazývaný broker, jako např. RabbitMQ. V PHP tento protokol implementuje např. knihovna php-amqplib. [wiki]
Apache 
Apache je zřejmě nejpopulárnější webserver, který běží téměř na každém hostingu. Tento webserver lze považovat za alternativu k Nginx. [Apache homepage]
Autoloader 
Takto se označuje skript, který umožňuje automatické načítání tříd. Nemusím tak ručně vkládat odkazy na soubory s definicí tříd které v kódu používám (náhrada za include či require). To ušetří čas, zjednoduší údržbu aplikace a pohodlněji se programuje. Autoloader můžete vytvářet sami, využít generovaný Composerem nebo obojí. [PHP Autoloading Classes] [PSR-4 Autoloader]
Black-box testing 
Black-box testing je metoda testování, při které autor testu nezná vnitřní strukturu softwaru a snaží se otestovat správnost jeho fungování na základě dodané specifikace. Takový test může být vytvářen někým, kdo nemá podrobnou znalost systému, hrozí ale, že se nepodaří odstanit chyby způsobené vnitřní strukturou systému. Typicky jsou tímto stylem tvořeny akceptační testy. Opakem je white-box testing. [wiki]
Code review 
Code review je formou statického testování, při kterém se reviduje zdrojový kód. Typicky je kód autora revidován jeho spolupracovníky s cílem odhalit zjevné chyby, poskytnout autorovi feedback a zvýšit celkovou kvalitu softwaru. V praxi je důležité, aby revidované změny v kódu nebyly příliš rozsáhlé a nepřehledné a aby šly snadno dohledat - ideálně pomocí některého z VCS. [wiki]
Composer 
Composer je správce závislostí pro PHP. Umožňuje snadno instalovat různé knihovny v požadovaných verzích a jejich aktualizaci. Také vytváří autoloader (nejen) nainstalovaných knihoven. [Composer homepage]
Cookies 
Cookies jsou kousky dat uložené u klienta (v prohlížeči) přenášená při každém HTTP požadavku. Cookies umožňují stavovost komunikace, což zahrnuje přihlašování, personalizaci, cílení reklam, nákupní košík, atd. [wiki]
Continuous Integration 
Zkracuje se jako CI, česky doslova Průběžná integrace, začlenění. Jedná se o oblast extrémního programování s cílem být schopen doručovat software téměř neustále, často několikrát denně. CI servery se pak starají o sestavení aplikace, statickou analýzu kódu, spuštění testů, kontrolu coding standards a mohou obstarávat i deployment. [wiki]
CRUD 
Jedná se o návrh který využívá 4 základní operace s daty:
  • Create pro vytvoření záznamu
  • Read pro přečtení záznamu
  • Update pro aktualizaci záznamu a konečně
  • Delete pro smazání záznamu
DAO 
DAO je zkratka pro návrhový vzor Data Access Object. Ten poskytuje rozhraní pro základní CRUD operace nad daty v aplikaci. Tím zapouzdřuje implementaci těchto operací, která je zpravidla závislá na konkrétní technologii pro ukládání dat (např. SQL databáze), a přínáší abstrakci nad použitou technologií pro vyšší vrstvy aplikace. [wiki]
Databáze 
Data aplikace je často potřeba někam ukládat. K tomu nám nejlépe poslouží databáze. Nejpoužívanější databáze pro PHP jsou MySQL a PostgreSQL. Tyto databáze jsou relační [wiki]. Existují také tzv. NoSQL databáze [wiki], jejichž zástupcem je např. Redis.
Deployment 
Zjednodušeně zpřístupnění software k používání. U webových projektů se zpravidla jedná o nahrání aplikace na server nebo její aktualizace (zanesení změn do kódu, databáze apod.). Deployment bývá součástí Continuous Integration. [wiki]
Datový typ 
Datový typ je v podstatě rozdělení - celé číslo, float, string, objekt, atd. Datový typ má definovány operace - u celých čísel je to například sčítání, odečítání, celočíselné dělení. Reálná čísla kupříkladu nelze celočíselně dělit a přestože lze stringy sčítat, určitě nepůjde podělit jeden string druhým. Stejně tak lze na třídy pohlížet jako na datové typy - s objekty jedné třídy lze dělat stejné operace (volat stejné metody). [wiki]
DRY 
Don't repeat yourself. Každý kousek logiky, dat, znalosti, musí mít v systému pouze jednu jednoznačnou reprezentaci. [Andy a Dave]
DI 
Vkládání závislostí (anglicky Dependency Injection - DI) je v objektově orientovaném programování technika pro vkládání závislostí mezi jednotlivými komponentami programu tak, aby jedna komponenta mohla používat druhou. Podstatou Dependency Injection je odebrat třídám zodpovědnost za získávání objektů, které potřebují ke své činnosti (tzv. služeb) a místo toho jim služby předávat při vytváření. [wiki] [Příklad použití]
DI kontejner 
DI kontejner nebo také systémový kontejner je v podstatě tovární třída pro služby aplikace. DI kontejner za nás také řeší závislosti služeb mezi sebou.
Dynamické testování 
Dynamické testování je technika, při které se ověřuje správnost chování kódu pomocí jeho spuštění. Zpravidla jsou předem nastaveny vstupní parametry a kontrolují se výstupní hodnoty, nebo vnitřní stav systému. Opakem je statické testování. [wiki]
E2E testování 
End-to-end test (nebo také E2E test) má za úkol otestovat správnost procesu v systému od jeho začátku až do jeho konce. Tím se ověří celková integrita systému a jeho dat. Typickým příkladem může být průchod e-shopem, od příhlášení přes přidání produktů do košíku až po dokončení objednávky. [wiki]
Extrémní programování 
Zkracuje se jako **XP (Extreme Programming)**. Je to jedna z metod agilního vývoje. Zahrnuje způsoby práce jako párové programování, vývoj řízený testy, vydávání aplikace po malých změnách, čistý kód, zapojení zákazníka do vývoje a další. [wiki]
Factory 
Vytváření objektů často vyžaduje komplexní procesy nevhodné pro umístění do třídy vyžadující danou instanci. Vytvoření objektu může vést k významné duplikaci kódu nebo může vyžadovat informace, které nejsou dostupné v aktuálním kontextu. Úkolem návrhového vzoru factory je starat se o vytváření objektů a řešit tyto problémy návrhu. [wiki]
Framework 
Framework (aplikační rámec) je softwarová struktura, která slouží jako podpora při programování a vývoji jiných softwarových projektů. Cílem frameworku je převzetí typických problémů dané oblasti, čímž se usnadní vývoj tak, aby se návrháři a vývojáři mohli soustředit pouze na své zadání. Jinými slovy Vám framework zefektivní Vaší práci. [wiki]
Funkcionální test 
Funkcionální test má za úkol ověřit správnost konkrétní funkčnosti v systému, která byla popsána ve specifikaci. Tím se liší od systémového testu. [wiki]
GD/Imagick 
PHP rozšíření pro práci s obrázky (generování, úpravy, konverze mezi formáty). [gd] [imagick]
GraphQL 
Facebookem vytvořené GraphQL je zajímavou alternativou k REST API. Programátor se zde API zeptá přesně na to, co v danou chvíli potřebuje. To vše v jednom dotazu, který může vypadat třeba takto:
{
  user {
    id
    name
    friends {
      name
    }
  }
}
[GraphQL homepage]
Instance 
Instance třídy je konkrétní datový objekt v paměti odvozený z definice třídy, který existuje od jeho vytvoření po ukončení běhu skriptu. Nová instance se vytváří použitím klíčového slova new. [wiki]
$some_instance = new \SplStack;
Integrační test 
Integrační test je typ testu, který ověřuje vzájemnou součinnost jednotlvých komponent systému. Následuje zpravidla po jednotkovém testování, ale na rozdíl od něj spojuje komponenty do skupin a testuje, zda fungují jako celek. [wiki]
KISS 
Keep it simple, stupid. Jednoduchost by měla být naším cílem, protože pouze jednoduché lze pochopit a udržovat. [wiki]
Knihovna 
Kód (často třetí strany) využívaný uvnitř aplikace pro různorodé úkony. Knihovnou může být např. kód poskytující rozhraní pro sestavení PDF dokumentu, funkce pro práci s databází, souborovým systémem, zpracování obrázků apod. Jedna knihovna se zpravidla úzce specializuje na jednu konkrétní oblast. Ve světě PHP se mohou spravovat skrze Composer (ty psané v PHP) nebo se instalovat přímo jako rozšíření PHP (psané v C).
Konstruktor 
Konstruktor (v PHP __construct()) je speciální metodou třídy, která se volá vždy při vytváření nové instance. Opakem konstruktoru je destruktor (__destruct()). Ten se volá ve chvíli, kdy na objekt neexistuje žádná reference nebo při ukončování běhu PHP skriptu. [wiki] [doc]
Messaging 
Messaging umožňuje aplikacím se propojovat a škálovat pomocí odesílání asynchronních zpráv. Aplikace se pomocí něj mohou spojit jedna s druhou jako komponenty větší aplikace. Jako prostředník mezi odesláním a příjmem těchto zpráv slouží tzv. broker, např. RabbitMQ.
Microservice 
Architektura mikroslužeb je rozdělení jedné velké aplikace do vzájemně komunikujících jednoúčelových služeb. Každou mikroslužbu je možné nezávisle udržovat a nasazovat. Mikroslužby musí ale vzájemně komunikovat, komunikaci je nezbytné dokumentovat a udržovat. Aplikace jako celek funguje pouze pokud fungují a komunikují všechny mikroslužby. [Fowler]
Monolit 
Monolitem rozumíme obvykle velký nerozdělitelný systém. Monolit funguje sám o sobě bez návaznosti na jiné systémy, s čímž souvisí jeho vysoká komplexita. Monolit není obvykle jednoduché pochopit jako celek a může obsahovat velké množství skrytých závislostí. [wiki] [Fowler]
MVC 
MVC je návrhový vzor, který odděluje aplikační logiku od zbytku uživatelského rozhraní, rozdělením aplikace do tří navzájem spolupracujících částí:
  • Controller - zpracovává uživatelské příkazy a manipuluje s modelem
  • Model - modelem aplikace je myšlena veškerá aplikační logika včetně persistence dat do databáze
  • View - view představuje uživatelské rozhraní (v PHP frameworcích je tato vrstva reprezentováná šablonovacím systémem)
Většina moderních frameworků pro vývoj webových aplikací se pyšní přívlastkem MVC. [wiki]
MySQL 
MySQL je zřejmě nejrozšířenější relační databáze v open source světě. Práce s ní je velmi jednoduchá a intuitivní. Pro dotazování používá jazyk SQL. [wiki] [MySQL homepage]
Namespace 
Namespace (jmenný prostor) slouží k organizaci tříd/funkcí do logických celků (balíčků) a zabraňuje kolizím v pojmenování. Pro práci s namespace se v PHP od verze 5.3 používají klíčová slova namespace a use. [doc] [wiki]
Návrhový vzor 
Návrhový vzor (anglicky design pattern) v softwarovém inženýrství představuje obecné řešení problému, které se využívá při návrhu počítačových programů. Návrhový vzor není knihovnou nebo částí zdrojového kódu, která by se dala přímo vložit do našeho programu. Jedná se o popis řešení problému nebo šablonu, která může být použita v různých situacích. [wiki]
Nginx 
Stejně tak jako Apache, tak i Nginx je jedna z možností při výběru webserveru. Pokročilejší uživatelé většinou volí právě Nginx. [Nginx homepage]
Objekt 
Objekt je zjednodušená preprezentace něčeho s čím potřebujeme pracovat. Objekt zapouzdřuje svá data chováním, tím je chrání a umožňuje se sebou pracovat pouze voláním veřejných metod. Obecné chování objektu popisuje rozhraní a konkrétní předpis vytvoření a chování objektu popisuje třída. [wiki]
PHP 
PHP je rekurzivní zkratka pro "PHP: Hypertext Preprocessor" kde PHP je zkratka pro "PHP: Hypertext Preprocessor" kde PHP je zkratka pro "PHP: Hypertext Preprocessor"[wiki]
PostgreSQL 
PostgreSQL nebo také Postgres je kvalitní relační databáze, která implementuje většinu standardu SQL92. Je proto vyhledávanou alternativou k MySQL, obzvláště u zkušenějších vývojářů. [wiki] [PostgreSQL homepage]
Proměnná 
Proměnná je v programování označení pro identifikátor (symbolické jméno), které uchovává určitou informaci při běhu programu. Tato informace může být reference na instanci třídy, resource, pole, primitivní datový typ jako např. řetězec, číslo. V PHP jsou proměnné vždy prefixovány znakem $. [wiki]
$test = 5; // promenna s nazvem $test
PSR 
PHP Standards Recommendations neboli doporučení určitých standardů ve světě PHP. Vydává a spravuje je skupina PHP-FIG (PHP Framework Interop Group). Každý takový standard se označuje PSR-# (kde křížek znamená číslo). Tyto standardy určují například:
  • Coding Standard pro sjednocení, jak různí programátoři zapisují kód [PSR-1], [PSR-2]
  • Autoloading Standard pro automatické načítání tříd [PSR-4]
  • HTTP message interface pro abstrakci práce s HTTP požadavky [PSR-7]
[PHP-FIG official]
RabbitMQ 
RabbitMQ je open source implementací tzv. messaging brokeru - zprostředkovatele pro messaging. Poskytuje aplikacím společnou platformu pro posílání a příjem zpráv a zprávám bezpečné místo k životu, dokud nejsou přijmuty a zpracovány.
Redis 
Redis je open source NoSQL key-value databáze. Údaje v databázi jsou uloženy jako unikátní klíč a jeho hodnota. Primárně jsou data uloženy v paměti, proto je Redis velmi rychlý. [Redis homepage]
Refaktoring 
Refaktoring je proces provádění změn v aplikaci, které nemají vliv na její funkčnost z pohledu uživatele. Může se jednat o přepisování nevyhovujícího kódu nebo vylepšování stávajícího. Hlavním cílem refaktoringu je udělat aplikaci hezčí, jednodušší, lépe udržovatelnou. [wiki]
Regresní testování 
Regrese ve světě softwaru představuje jev, kdy dříve funkční část systému přestane po jeho úpravě fungovat. Regresní testování má za úkol předejít těmto chybám pomocí automatizovaného testování po každé úpravě a pomocí dobře navržených testovacích scénářů, které pokrývají stávající funkcionalitu systému. [wiki]
Regulární výrazy 
Regulární výrazy jsou vzory umožňující vyhledávání a nahrazování textu.
@[A-Za-z][A-Za-z0-9_]{0,14}
Tento regulár nalezne uživatelské jméno na Twitteru - musí začínat zavináčem, následuje písmenko (velké nebo malé) a pak 0-14 znaků zahrnující písmena, čísla a podtržítko. [wiki]
Rekurze 
Rekurze v programování představuje opakované vnořené volání stejné funkce do sama sebe. Obvykle má v sobě rekurzivní funkce uvedenu podmínku, kdy se má vnořování zastavit, aby nedošlo k nekonečné smyčce.
function factorial(int $x) {
  if ($x < 0) return 'invalid argument';
  if ($x === 0) return 1; // zastavovací podmínka

  return factorial($x - 1) * $x; // volání sama sebe
}

echo factorial(5); // 120
[wiki]
Rozhraní 
Rozhraní je společná hranice mezi částmi systému. Jako rozhraní si můžeme představit jack konektor pro výstup - víme jak vypadá, víme, že slouží pro vysílání zvukového signálu. Ale už nevíme, co přesně se za ním skrývá - jestli reproduktor nebo sluchátka.
V objektově orientovaném programování používáme rozhraní pro popis objektů, konkrétní implementaci řeší třída. [wiki]
Service 
Service, neboli služba je obyčejná třída, jako třeba instance databázové třídy Connection. Jen v souvislosti s DI kontejnerem jí říkáme služba.
Singleton 
Singleton je návrhový vzor, který umožňuje vytvořit pouze jednu instaci třídy např. přes statickou metodu getInstance(). Klasické vytvoření instance je znemožněno označením konstruktoru jako private. Použit lze na globální objekty jako např. logger, mailer apod. V dnešní době je považován za anti-pattern, protože jde proti principům testovatelnosti a dependency injection. [wiki]
Statické testování 
Statické testování je technika, při které je kontrolován zdrojový kód aplikace, ale není spouštěn. Typickými zástupci jsou code review a analýza kódu pomocí nástroje jako např. PHPStan. Cílem je odhalit potenciální chyby dříve, než dojde ke spuštění aplikace. [wiki]
SOLID 
SOLID zahrnuje pět základních principů objektově orientovaného programování
  • SRP - třída má pouze jednu zodpovědnost, jeden důvod ke změně
  • OCP - třídy jsou otevřené ke změnám, ale uzavřené k úpravám
  • LSP - objekty jsou v systému nahraditelné svýmy podtypy
  • ISP - více specifických rozhraní je lepších, než jedno obecné
  • DIP - třída je závislá na abstrakci, ne na konkrétním typu
[wiki]
Systémový test 
Systémový test ověřuje správnost fungování systému vůči požadavkům, které jsou na ně kladené. Ideálně je tento test prováděn v prostředí, které je co nejvíce podobné produkčnímu. Je velmi podobný akceptačnímu testu, ale narozdíl od něj probíhá na straně dodavatele, který ověřuje, zda může systém předat zákazníkovi k používání. [wiki]
Test coverage 
Test coverage (nebo také Code coverage) je metrika, která měří pokrytí kódu systému testy, tedy jaké procento kódu systému je během testování spuštěno. Většina testovacích nástrojů umí za pomocí rozšíření Xdebug vygenerovat report Test coverage. Obecně platí, že čím větší je pokrytí, tím je větší šance odhalit chybu v systému. Zároveň je potřeba mít na paměti, že 100% pokrytí neznamená bezchybný systém. [wiki]
TDD 
Test Driven Development (TDD) je jednou z technik extrémního programování, při které nejprve vznikají jednotkové testy a až pak vzniká samotný funkční kód aplikace. Tato technika je vhodná zejména pro kritickou funkcionalitu systému, která lze snadno testovat. Tento proces má tři základní fáze:
  1. Programátor přidá test pokrývající novou funkcionalitu - tento test neprochází, protože funkcionalita zatím není implementována
  2. Programátor implementuje funkcionalitu pouze do té míry, aby prošly testy
  3. Programátor zrefaktoruje implementaci, je-li potřeba, a dále pokračuje prvním krokem
[wiki]
Třída 
Třída je předpis pro tvorbu objektů. S třídou samotnou nemůžu moc pracovat, jak taky pracovat s návodem na výrobu hrnku? Když si ale vytvořím objekt podle daného předpisu (vytvořím instanci třídy), tak to už je jiná - daný konkrétní hrnek můžu naplnit, vypít, rozbít. To s třídou udělat nemůžu, třída je pouze předpis. [wiki]
UI 
UI (User Interface) neboli uživatelské rozhraní, označuje způsob, jakým mohou lidé ovlivňovat chování strojů, zařízení nebo počítačových programů. U webových aplikací tvoří uživatelské rozhraní odezva webového serveru s HTML kódem (včetně stylů, skriptů, obrázků …), který uživateli interpretuje webový prohližeč. [wiki]
Unit test 
Unit test je součástí automatického testování a označuje test funkčnosti nejmenší logické části programu. Unit testy se často provádí na úrovni jednotlivých tříd či funkcí nezávisle na okolí (databázi, prohlížeči apod.). Unit test kontroluje, že se pro dané vstupy funkce chová dle očekávání. Pro simulování okolního kontextu se používají pomocné objekty (mock objects). [wiki]
UX 
UX (User Experience) označuje tématiku, která se zabývá uživatelským prožitkem při použivání uživatelského rozhrání. UI je zkoumáno z pohledu ergonomie, jednoduchosti, použitelnosti, intuitivnosti a celkového dojmu na uživatele. [wiki]
V-Model 
V-Model popisuje proces vývoje softwaru s důrazem na vztah jednotlivých kroků implementace a jejího testování. Podle tohoto modelu je vývoj rozdělen na dvě fáze. Nejprve (směr dolů) probíhá analýza, poté návrh a nakonec implementace. V druhé fázi (směr nahorů) probíhá nejprve testování implementace, tedy jednotkové a integrační testy, poté validace a verifikace a nakonec nasazení a údržba. Problém V-Modelu spočívá v ceně za odhalení defektu v softwaru. Ačkoliv je tento model schopný zachytit chybu v implementaci ihned po jejím dokončení, chyba v analýze nebo návrhu je odhalena až po implementaci a tím cena za její opravu exponenciálně stoupá. Odpověď na tento problém přináší tzv. W-Model, který popisuje souběžné procesy implementace a testování, kde jsou analýza a návrh testovány pomocí revizí. [wiki]
Vendor 
Vendor je anglické slovo pro dodavatele služeb nebo zboží. V PHP se s tímto označením lze setkat u správce závislostí Composer. Název každého balíčku je prefixovaný názvem vendora (dodavatele). Např. symfony/symfony-demo je balíček symfony-demo od vendora symfony. Názvem vendor je pojmenován i adresář, do kterého instaluje Composer veškeré závislosti (kód třetích stran). [getcomposer.org]
VCS 
VCS je zkratka pro verzovací systém (Version Control System). VCS umožňuje programátorům verzovat své zdrojové kódy a také je pohodlně sdílet s ostatními lidmi v týmu. Díky verzování se lze snadno vracet k předchozím verzím a jednoduše se dá dohledat, kdo v týmu napsal který řádek kódu. VCS taky umožňuje řešit přípdné kolize (kdy jeden soubor najednou změní několik programátorů). Nejčastěji používané VCS je v součanosti Git. [wiki]
Webhosting 
Webhosting je služba, kterou si lze pronajmout "místo na internetu", pro provoz webových stránek. Na internetu působí řada poskytovatelů webhostingu, kteří poskytují celou škálu služeb, od jednoduchého sdíleného hostingu, přes vlastní virtuální servery až po cloudové služby.
Webserver 
Ke spuštění webové stránky je zapotřebí server, který přijme požadavek od návštěvníka a po zpracování je pošle zpět k uživateli. K tomu dobře poslouží třeba Apache nebo Nginx.
White-box testing 
White-box testing je metoda testování, která vychází z vnitřní struktury softwaru a podle toho se snaží otestovat jeho správnou funkčnost. Dokáže tak odhalit chyby způsobené strukturou, které by jinak zůstaly skryté. Při změně struktury je ale nákladnější údržba takových testů. Typickým zástupcem je unit test. Opakem je black-box testing. [wiki]