5A. Tétel: Programozási technológiák
Verziókezelés, verziókezelő rendszerek.
A verziókezelés lényege az lenne, hogy a fájlok jelenlegi állapota helyett/mellett (ami a háttértáron vagy felhőben ott van) tároljuk az egyes fájlokban történő változásokat is. Ezzel gyakorlatilag elő tudjuk állitani egy tetszőleges fájl adott változatossal korábbi verzióját, úgy, hogy ezeket a módosításokat eltűntetjük a fájlból, az esetleges törléseket pedig visszavonjuk. A verziókezelést a verziókezelő rendszerek szokták megvalósítani, mint a Git, Subversion. Ezek a rendszerek tartják nyilván a változásokat, az egyes verziókat, illetve képesek visszaállítani a fájlokat egy korábbi verzióra. Ezek a tulajdonságok tehát előny nyújtanak akkor, ha dolgozunk egy projekten, és szeretnénk verziókat követni, könnyen váltani köztük. Azonban nem ez a fő oka a rendszerek elterjedésének. A verziókezelő rendszerek megkönnyítik a csapatmunkát is, mivel van egy központi másolat a szoftver kódjáról.
Szoftvertesztelési alapfogalmak (tesztszintek, teszttípusok, teszttervezési módszerek).
Tesztszintek
Négy tesztszintet különböztetünk meg.
Első az egység teszt, ez a rendszer legkisebb önállóan működő egységeit teszteli.
Második az integrációs teszt mely a programegységeket, modulokat, azok egymással és a környezettel történő együttműködését teszteli.
A harmadik a rendszerteszt, lehetőség szerint nem alkalmazunk emuláló technikákat, a rendszert olyan vagy ahhoz hasonló környezetben teszteljük, ahogy majd éles környezetben is működni fog.
Negyedik az átvételi teszt, a megrendelő, ügyfél végzi, hogy az elkészült rendszer valóban megfelel-e a specifikáltaknak.
Teszttípusok
Teszttervezési módszerek
Specifikáció alapú technikák.
Ezek a módszerek a teszteseteket közvetlenül a rendszer specifikációjából vezetik le. Black-box technikáknak is nevezzük ezeket, mert az egyes szoftver modulok belső szerkezetének ismerete nélkül, az egyes modulok által teljesítendő funkcionalitások alapján tervezhetjük meg a teszteseteket.
Modell alapú technika:
Valójában az előző csoportba tartozik, csak formalizáltabb technika. Közvetlenül az UML modellből vezeti le a teszteseteket, és formalizált teszt specifikációt alkalmaz. Erre használható az UML kiterjesztése.
Struktúra alapú technikák
Ezek a módszerek a kód ismeretében határozzák meg a teszteseteket. White-box technikáknak is nevezzük.
Gyakorlat alapú technikák
A tesztelőknek a munkájuk során megszerzett tapasztalatira épülő, a szakmai intuíciókat is értékesítő technikák
Objektum orientált tervezési alapelvek (GoF, SOLID).
GoF
A GoF-nak 2 alpelve van.
- Interfészre programozzunk, ne pedig implementációra!
- Használjunk objektum-összetételt öröklődés helyett, ha lehet!
SOLID
A SOLID 5 alapelvből épül fel:
- Az egyszeres felelősség elve azt mondja ki, hogy minden osztálynak egyetlen felelősséget kell lefednie, de azt teljes egészében.
- A nyitva zárt elve, mely azt mondja, hogy a program forráskódja legyen nyitott a bővítésre, de zárt a módosításra.
- A Liskov-féle helyettesíthetőségi alapelv, mely azt írja elő, hogy a leszármazott osztályok példányainak úgy kell viselkedniük, mint az ősosztály példányainak.
- Az interfészek szétválasztásának elve, mely azt mondja ki, hogy egy sok szolgáltatást nyújtó osztály fölé el kell helyezni interfészeket, hogy minden kliens, amely használja az osztály szolgáltatásait, csak azokat a metódusokat lássa, amelyeket ténylegesen használ.
- A függőséginverzió elve és azt mondja ki, hogy a magas szintű komponensek ne függjenek alacsony szintű implementációs részleteket kidolgozó osztályoktól.
Függőség-befecskendezés.
A függőséget felhasználó objektum szolgáltatást nyújt, az injekció pedig ennek a függőségnek az átadása a kliens részére. A szolgáltatás a kliens állapotának része. A minta alapkövetelménye a szolgáltatás kliensnek való átadása ahelyett, hogy a szolgáltató objektumot a kliens hozná létre. A szolgáltató osztály szempontjából ez azt jelenti, hogy a kliens nem hívhat rajta konstruktort vagy statikus metódust. Paramétereit más osztályoktól kapja, azok állítják be. A függőséget előállítja valaki más, például a kontextus vagy a konténer problémája lesz. A minta célja, hogy annyira leválassza a szolgáltató objektumot a kliensről, hogy ha kicserélik, akkor ne kelljen módosítani a klienst.
Architekturális minták (MVC).
A Model-View-Controller szoftvertervezésben használatos programtervezési minta. Gyakori egy alkalmazás több rétegre való felbontása: megjelenítés, tartománylogika és adatelérés. Az MVC-ben a megjelenítés tovább bomlik nézetre és vezérlőre. Az MVC sokkal inkább meghatározza egy alkalmazás szerkezetét, mint az egy programtervezési mintára jellemző.
Tervezési minták.
A tervezési minták olyan visszatérő megoldásokra adnak megoldást melyekkel nap mint nap lehet találkozni az alkalmazás fejlesztések során. 3 kategóriába soroljuk őket. Első a létrehozási minták: Ezek a minták objektumok létrehozására valók. Második a szerkezeti minták: lényege az osztályokból és objektumokból nagyobb szerkezetek létrehozása. Harmadik a viselkedési minták, ezek elsősorban algoritmusokkal, illetve az osztályok és objektumok közötti kommunikációval, a felelősségi körök kijelölésével foglalkoznak.
Szabad és nem szabad szoftverek.
Szabad szoftverek
A szabad szoftver az olyan szoftver, amelyet a felhasználó:
- tetszőleges céllal, tetszőleges kívánalmak szerint futtathat
- működését tanulmányozhatja és igény szerint módosíthatja
- szabadon másolhatja és terjesztheti, segítve ezzel a környezetében élőket
- a módosított programot tovább terjesztheti, lehetővé téve ezzel, hogy az egyedi változtatás hasznát egy nagyobb közösség is élvezze. Fontos megjegyezni, hogy a szabad szoftver kifejezés nem jelenti kötelezően a szoftver ingyenességét is.
Nem szabad szoftverek
A nem szabad szoftver olyan szoftver, amelyet nem lehet szabadon módosítani és továbbadni.
Szoftverlicencek, szabad és nyílt forrású licencek fajtái.
Szoftverlicenc
Szoftverek használatának és terjesztésének módját szabályozó jogi eszköz. – Nem szabad szoftverek esetén a végfelhasználói licencszerződés kifejezést használják.
Szabad és nyílt forrású licencek fajtái
Számos szabad és nyílt forrású szoftverlicenc létezik. A szabad és nyílt licencek egy részhalmazát alkotják a megengedő licencek. Csupán minimális mértékben korlátozzák a hatályuk alatt terjesztett szoftverek felhasználását és terjesztését. Használják rájuk a nem copyleft kifejezést is. A Copyleft egy, a szerzői joggal éppen ellentétes célú jogi megoldást jelent, melyet szabad és nyílt forrású szoftverlicencekben használnak. Alkalmazásával „elidegeníthetetlen köztulajdon” hozható létre. Garantálja, hogy egy alkotásból származtatott valamennyi alkotás szabad marad. A copyleft jogi formulát használó szoftverlicencek. Tipikusan programkönyvtáraknál használnak gyenge copyleft licenceket. Lehetővé teszik a könyvtár hozzászerkesztését más (akár nem szabad) licenc hatálya alá eső programokhoz úgy, hogy az eredményre nem vonatkozik a copyleft. A GNU GPL-en alapuló, kifejezetten olyan szoftverekhez tervezett erős copyleft licenc, melyeket gyakran használnak hálózati kiszolgálókon.