Szoftvertechnológia 9. fejezet. Implementáció és verziókövetés. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Hasonló dokumentumok
Térinformatikai és távérzékelési alkalmazások fejlesztése. A szoftverfejlesztés technikai támogatása

Térinformatikai és távérzékelési alkalmazások fejlesztése. Szoftverek minőségbiztosítása. Szoftverek minőségbiztosítása Verifikáció és validáció

Térinformatikai és távérzékelési alkalmazások fejlesztése. Szoftverek minőségbiztosítása

Szoftver technológia. Verziókövető rendszerek. Cserép Máté ELTE Informatikai Kar 2019.

Iványi László ARM programozás. Szabó Béla 1. Óra Verziókövetés

A FEJLESZTÉS KIHÍVÁSAI

Programozási technológia 2.

Név: Neptun kód: Pontszám:

A fordítónak mindenhez lehet

Eseményvezérelt alkalmazások fejlesztése I 11. előadás. Szoftverek tesztelése

Source control systems. Horváth Ernő, Dr. Pozna Claudiu Radu

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Szoftver technológia. Projektmenedzsment eszközök. Cserép Máté ELTE Informatikai Kar 2019.

Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

Verziókövető rendszerek használata a szoftverfejlesztésben

Konfigurációmenedzsment

OOP és UML Áttekintés

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

Tortoise SVN használata. Képes útmutató

Bazaar ismertető. Timár András

Alkalmazások Fejlesztése J A V A K Ó D O L Á S I K O N V E N C I Ó K P R O G R A M T E R V E Z É S I J Ó T A N Á C S O K

Termék életciklus és a verziókezelés

Code review és continous integration toolok BME-MIT

Bevezetés a programozásba

Szoftvertechnológia 12. előadás. Szoftverfejlesztési módszerek és modellek. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Közösség, projektek, IDE

Regionális forduló november 19.

Regionális forduló november 19.

Programozási technológia II 7. előadás. Verifikáció és validáció Giachetta Roberto

Bevezetés. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Szendrei Rudolf. Bevezetés. Szoftvertechnológia

Címkék és ágak kezelése i. Címkék és ágak kezelése

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Java I. A Java programozási nyelv

Verifikáció és validáció Általános bevezető

Mi is a git? Csapatban dolgozni Git pro eszközök. Git bevezető. Szabó Adrienn Adatbányászat és Webes Keresés Kutatócsoport

Programzás I gyakorlat

A DevOps-kultúra eszközei

Toolok a programozás féléves feladatokhoz

Objektum Vezérelt Szoftverek Analízise

Visual Studio 2012 és MSDN. Csomagok és licencelés

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

Szoftvertechnológia 10. előadás. Verifikáció és validáció. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

JAVA webes alkalmazások

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Angolul: Extreme Programming, röviden: XP Agilis módszertan. Más módszertanok bevált technikáinak extrém módú (nagyon jó) használata

Gyakorlati vizsgatevékenység B

Programozási nyelvek JAVA EA+GY 1. gyakolat

A KÓDOLÁS TECHNIKAI ELVEI

Bevezetés a Programozásba II 4. előadás. Adattípusok hordozhatósága

Gyakorlati vizsgatevékenység A

Programozási Technológia előadás bevezetés. Előadó: Lengyel Zsolt

ISA szimulátor objektum-orientált modell (C++)

Git verziókövető rendszer alkalmazása a projektek nyomon követésére

Bevezetés a Programozásba II 5. előadás. Objektumorientált programozás és tervezés

A NetBeans IDE Ubuntu Linux operációs rendszeren

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

A TANTÁRGY ADATLAPJA

Komponensek együttműködése web-alkalmazás környezetben. Jónás Richárd Debreceni Egyetem T-Soft Mérnökiroda KFT

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Linux kiszolgáló felügyelet: SUSE Manager

Models are not right or wrong; they are more or less useful.

Miskolci Egyetem Alkalmazott Informatikai Intézeti Tanszék A minőségbiztosítás informatikája. Készítette: Urbán Norbert

Szoftvertechnolo gia gyakorlat

OPENCV TELEPÍTÉSE SZÁMÍTÓGÉPES LÁTÁS ÉS KÉPFELDOLGOZÁS. Tanács Attila Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

A dokumentáció felépítése

Programozás I. 1. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Szoftverminőségbiztosítás

Programozási nyelvek II. JAVA

Intervenciós röntgen berendezés teljesítményszabályozójának automatizált tesztelése

ELTE, Informatikai Kar december 12.

Automatizált Java Build. ApacheAnt használatával

Javadoc. Dokumentációs megjegyzés (2) Dokumentációs megjegyzés (1) Dokumentációs megjegyzés felépítése

Szoftver újrafelhasználás

Dr. Mileff Péter SZOFTVERFEJLESZTÉS VERZIÓKÖVETÉS, VERZIÓKÖVETŐ RENDSZEREK. Miskolci Egyetem Általános Informatikai Tanszék

Microsoft SQL Server telepítése

Szakdolgozati, TDK témajavaslatok

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Függvények. Dr. Bécsi Tamás 6. Előadás

Széchenyi István Egyetem

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Git verziókövető rendszer alkalmazása

Programrendszerek tanúsítása szoftverminőség mérése

Bevezetés az informatikába

A szoftver-folyamat. Szoftver életciklus modellek. Szoftver-technológia I. Irodalom

A TESZTELÉS ALAPJAI MIÉRT SZÜKSÉGES A TESZTELÉS? MI A TESZTELÉS? ÁLTALÁNOS TESZTELÉSI ALAPELVEK

A fejlesztéshez használható eszközök

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Szakdolgozat. Csernai Csaba

Bevezetés, a C++ osztályok. Pere László

Új technológiák az Ubuntuban. Új fejlesztések Amik egy éven belül jelenhetnek meg az Ubuntuban

extreme Programming programozástechnika

C#, OOP. Osztályok tervezése C#-ban

Unit Teszt. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Unit Teszt / 22

és az instanceof operátor

QBE Édes Otthon lakásbiztosítás tarifáló webservice. Fejlesztői dokumentáció 1.0.2

Szoftver-mérés. Szoftver metrikák. Szoftver mérés

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Interfészek. PPT 2007/2008 tavasz.

Új kompakt X20 vezérlő integrált I/O pontokkal

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Szoftvertechnológia 9. fejezet Implementáció és verziókövetés Giachetta Roberto A jegyzet az ELTE Informatikai Karának 2016. évi jegyzetpályázatának támogatásával készült

Any fool can write code that a computer can understand. Good programmers write code that humans can understand. (Martin Fowler)

Implementáció Az implementáció a programkód elkészítése a rendszertervnek megfelelően adott programozási nyelven az adatok megfelelő ábrázolása, reprezentálása a funkciókat megvalósító algoritmusok alkalmazása korábban már bevált elemek (algoritmusok, programszerkezetek) újhasznosítása a minőségi mutatóknak megfelelő optimalizálások (teljesítményjavítások) végrehajtása Az implementációt verifikáció zárja, amelyben ellenőrizzük, hogy a szoftver teljesíti-e a tervben megszabott funkciókat ELTE IK, Szoftvertechnológia 9:3

Újrahasznosítás Az implementáció általában nagyban támaszkodik újrahasznosításra garantálja, hogy jó, hibamentes megoldások kerüljenek alkalmazásra csökkenti az implementáció (és a tesztelés) idejét és költségeit az újrahasznosítás elvégezhető objektum, csomag, vagy komponens szinten A fejlesztő nem csupán az általa korábban fejlesztett elemeket használhatja újra, de más fejlesztő által megvalósított elemeket pl. nyílt forráskódú programcsomagok általában előre fordított formában állnak rendelkezésre ELTE IK, Szoftvertechnológia 9:4

Az integrált fejlesztőkörnyezet Az implementációhoz megfelelő integrált fejlesztőkörnyezet (IDE) szükséges (pl. Eclipse, Visual Studio, Xcode, NetBeans) a teljes szoftver életciklust támogatja, integrálja a verziókövetést és a tesztelést a fejlesztést kód-kiemeléssel (syntax highlight), kódkiegészítésekkel (code-snippet, intelligent code completion), illetve kód-újratervezési eszközökkel támogatja megkönnyíti külső programcsomagok integrációját (package manager) a tesztelést nyomkövetéssel (debugging), egységtesztek (unit test), illetve teljesítményteszteléssel támogatja ELTE IK, Szoftvertechnológia 9:5

Csapatban történő implementáció A szoftverek általában csapatban készülnek az implementáció egy egységes kódolási stílus mentén történik, egységes eszköztárral minden fejlesztő csak a saját programkódján dolgozik a verziókövető rendszerben általában külön fejlesztési ágban tevékenykedik amennyiben más kódjában hibát talál, hibajelzést tesz az általa biztosított interfészeket csak egyeztetés után módosítja dokumentálja (kommentezi), illetve teszteli a saját kódját (elkészíti a megfelelő egységteszteket) ELTE IK, Szoftvertechnológia 9:6

Kódolási stílus A kódolási stílus (coding style) egy szabályhalmaz, amely a forráskód megjelenésére (pl. elnevezés, indentálás, szóközök elhelyezése, ) ad iránymutatást a kódolási stílus követése javítja a kód értelmezhetőségét, a későbbi karbantartást, és lehetővé teszi a fejlesztők közötti kommunikáció zökkenőmentességét a jó programozási stílus általában szubjektív, nem túl szigorú, de alapvető elemeket definiál a kódolási stílus lehet nyelvi szinten, vállalati szinten, vagy szoftverszinten rögzített a fejlesztőkörnyezetek általában lehetőséget adnak a forrás automatikus formázására ELTE IK, Szoftvertechnológia 9:7

Kódolási stílus Pl.: class Point { // camel case (upper, Pascal case) private: int xcoordinate; // camel case (lower) int ycoordinate; double DistanceTo(Point other) const // camel case (upper) { return } // K&R }; ELTE IK, Szoftvertechnológia 9:8

Kódolási stílus Pl.: class Point { private: int x_coordinate; // snake case int y_coordinate; double Distance_To(Point other) const { // Oxford case return } // 1TBS }; ELTE IK, Szoftvertechnológia 9:9

Kódolási stílus Pl.: class Point { private: int m_nxcoord; // hungarian notation int m_nycoord; double distanceto(point pother) const // camel case (lower) { return } // GNU }; ELTE IK, Szoftvertechnológia 9:10

Kódolási stílus Általános érvényű javaslatok: kódrészletek megfelelő elválasztása (szóköz, sortörés, behúzás, függőleges igazítás) beszédes és konzisztens elnevezések használata (kevesebb kommentezést igényelnek) beégetett tartalmi elemek (számok, szövegek) megnehezítik a karbantartást (hard coding), ezért célszerű a kerülése, kiemelése fejlécbe, vagy konfigurációs fájlba (soft coding) A kódolási konvenció rákényszeríthető a programozóra kódolási stílus ellenőrző eszköz segítségével pl. C++Test, StyleCop ELTE IK, Szoftvertechnológia 9:11

Kommentezés A kódot a stílusnak megfelelő kommenttel kell ellátni alapvető fontosságú az interfész kommentezése (osztályok, függvények, paraméterek) a megvalósítás kommentezése összetett funkcionalitás esetén hasznos, de megfelelő kódolási stílus esetén nem szükséges tartalmazhat speciális jelöléseket (pl. TODO, FIXME) a túl kevés, vagy túl sok komment is ártalmas lehet A kommentek felhasználhatóak dokumentáció előállítására is (pl. Doxygen, Javadoc), amennyiben azokat megfelelő séma szerint hozzuk létre ELTE IK, Szoftvertechnológia 9:12

Kommentezés Pl.: // a type representing a 2D point class Point { // computes the Euclidean distance to another // point double DistanceTo(Point other) const { return sqrt(pow( ) + pow( )); } }; ELTE IK, Szoftvertechnológia 9:13

Kommentezés Pl.: // Name: Point // // Purpose: This type represents a point in a 2D // coordinate system. // Remarks: Is based on double coordinates. // // License: LGPL v2. // // Author: Roberto Giachetta // Date: 27/11/2014 // Contact: groberto@inf.elte.hu class Point { ELTE IK, Szoftvertechnológia 9:14

Kommentezés Pl.: // Name: distance // Purpose: This method computes the Euclidean // distance to another Point instance. // Remarks: This a query method. // Parameters: other : another point // Return value: The distance to the other. double distance(point other) const { // uses sqrt and pow functions from math.h // formula: return sqrt(pow( ) + pow( )); } ELTE IK, Szoftvertechnológia 9:15

Kódolási stílus Általában nyílt és zárt programkódokra más szabályok vonatkoznak nyílt forráskód esetén törekedni kell, hogy a kód minél gyorsabban értelmezhető legyen bárki számára követni kell a programozási nyelv tördelési és elnevezési konvencióit a kód megfelelő mennyiségű megjegyzéssel kell ellátni zárt forráskód esetén a cél a fejlesztőcsapat minél nagyobb rálátása a kódra törekedni kell, hogy minél nagyobb kódmennyiség legyen egyszerre áttekinthető (kevesebb helyköz és komment) ELTE IK, Szoftvertechnológia 9:16

Statikus kódelemezés A statikus kódelemzés (static code analysis) lehetővé teszi, hogy a forráskódot még a fordítás előtt előfeldolgozzuk, és a lehetséges hibákat és problémákat előre feltérképezzük a fejlesztőkörnyezet beépített kódelemzővel rendelkezhet, amely megadott szabályhalmaz alapján a lehetséges hibaeseteket felfedi a statikus kódelemzés egy része kimondottan a kódolási konvenciók (pl. elnevezések, tagolás, dokumentáltság) ellenőrzését biztosítja a kódra számíthatók metrikák (code metric), amelyek megadják karbantarthatóságának, összetettségének mértékét (pl. cyclomatic complexity, class coupling) ELTE IK, Szoftvertechnológia 9:17

Kód-újratervezés A kód-újratervező (refactoring) eszközök célja, hogy a kód szerkezetét mindig konzisztens módon, a viselkedés befolyásolása nélkül tudjuk módosítani a teljes újratervezést kisebb lépések (micro-refactorings) sorozatával érjük el pl. átnevezések, ismétlődő kódok kiemelése, típuscsere, interfész, vagy ősosztály kiemelése, tervezési minta bevezetése a kód nem funkcionális követelményeinek javítására szolgál, általában a karbantarthatóság, illetve a bővíthetőség növelése a cél alkalmas bizonyos rejtett hibák, vagy sebezhetőségek felfedésére ELTE IK, Szoftvertechnológia 9:18

Verziókövető rendszerek A verziókövető rendszerek (revision control system) célja a forráskód változásának követése, és a korábbi állapotok megőrzése ezáltal könnyen áttekinthető, ki milyen módosításokat hajtott végre a forráson, amelyek szükségszerűen visszavonhatóak egy közös tárolóban (repository) tartják kódokat, amit a fejlesztők lemásolnak egy helyi munkakönyvtárba (working copy), és ebben dolgoznak a módosításokat visszatöltik a központi tárolóba (commit) a munkakönyvtárakat az első létrehozás (checkout) után folyamatosan frissíteni kell (update) pl. Subversion (SVN), Git, Team Foundation Server (TFS) ELTE IK, Szoftvertechnológia 9:19

Verziókövető rendszerek tároló (repository) verzió: 132 verzió: 133 frissítés (update) feltöltés (commit) letöltött másolat módosítás módosított másolat lokális másolat (working copy) ELTE IK, Szoftvertechnológia 9:20

Verziókövető rendszerek A rendszerek biztosítják: az összes eddig változat (revision) eltárolását és lekérdezését, benne a legfrissebb változattal (head) az egyes változatok közötti különbségek nyilvántartását (akár karakterek szintjén) változtatások visszavonását, korábbi változatra visszatérést a fő fejlesztési vonal (baseline, master, vagy trunk) mellett további fejlesztési vonal elágazását (fork), párhuzamos követését, valamint az ágak összeillesztését (merge) a módosítások közötti konfliktusok kezelését (resolve) ELTE IK, Szoftvertechnológia 9:21

Verziókövető rendszerek mellékág (branch) A:139 A:140 A:141 elágazás (fork) összeillesztés (merge) 138 139 140 142 fő fejlesztés (trunk) B:140 B:142 ELTE IK, Szoftvertechnológia 9:22

Elosztott verziókövető rendszerek A központosított verziókelezők mellett elterjedtek az elosztott (distributed) rendszerek nagyobb szabadságot adnak a tárolók kezelésében, a szinkronizálási lehetőségekben egy főtároló (origin) csak egy kiindulási pont, tetszőleges másolatot készíthetünk (clone) belőle a módosítások csak a lokális másolatot befolyásolják, külön kell feltöltenünk azokat valamely távoli tárolóra (push), vagy jelölhetjük őket feltöltésre (pull request) az egyes tárolók állapotait szinkronizálhatjuk (pull, fetch) pl. Git, Bazaar, Mercurial ELTE IK, Szoftvertechnológia 9:23

Elosztott verziókövető rendszerek távoli tároló (origin) másolás (clone) tároló másolás (clone) szinkronizálás (push) másolás (clone) helyi tároló módosítás (commit) szinkronizálás (pull) helyi tároló ELTE IK, Szoftvertechnológia 9:24