53
UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO Elmedin Dedić OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI PROGRAMOV Diplomsko delo Maribor, september 2017

OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

UNIVERZA V MARIBORU

FAKULTETA ZA ELEKTROTEHNIKO,

RAČUNALNIŠTVO IN INFORMATIKO

Elmedin Dedić

OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI PROGRAMOV

Diplomsko delo

Maribor, september 2017

Page 2: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI

PROGRAMOV

Diplomsko delo

Študent: Elmedin Dedić

Študijski program: visokošolski študijski program

Informatika in tehnologije komuniciranja

Smer: Tehnologije multimedijskega komuniciranja

Mentor: doc. dr. Matej Šprogar, univ. dipl. inž. rač. in inf.

Lektorica: Lucija Hrženjak, prof. slov. in biol.

Page 3: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …
Page 4: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

i

ZAHVALA

Zahvaljujem se mentorju doc. dr. Mateju

Šprograrju za vse nasvete in usmeritve pri

nastajanju diplomskega dela. Prav tako gre

zahvala tudi mojim najbližjim za potrpežljivost

in spodbudo v času študija.

Page 5: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

ii

Ogrodje za merjenje in primerjavo učinkovitosti programov

Ključne besede: kakovost programske opreme, učinkovitost programske opreme, metrike,

merjenje učinkovitosti

UDK: 004.4'2/'6(043.2)

Povzetek

V diplomskem delu se opisuje pojem kakovosti programske opreme in pogled nanjo z

različnih zornih kotov. Zajeto je področje učinkovitosti programske opreme in metrik za

merjenje učinkovitosti programske opreme. Pri praktičnem delu je bila na podlagi

pridobljenega znanja iz programskega jezika C# in razvojnega okolja Visual Studio 2015

izdelana spletna aplikacija, ogrodje za merjenje in primerjavo učinkovitosti programov, ki

uporabniku omogoča merjenje časa izvajanja, števila vrstic kode in zasedenosti pomnilnika

programov, zapisanih v programskem jeziku C#, C++ ali Java. Aplikacija je bila načrtovana

in izdelana po izbranem modelu za razvoj programske opreme.

Page 6: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

iii

Framework for programe efficiency measurement and comparison

Key words: software quality, software efficiency, metrics, efficiency measurement

UDK: 004.4'2/'6(043.2)

Abstract

This thesis deals with software quality from several perspectives, including efficiency and

software efficiency metrics. The practical part, which was based on our knowledge of the

C# programming language and the Visual Studio 2015 environment, involved the

development of a web application for measuring and comparing software efficiency, which

enables the user to measure the execution time, count lines of code, and assess memory

space in programs written in C#, C++ or Java programming languages. The application was

designed in line with a selected model for software development.

Page 7: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

iv

KAZALO

1 UVOD .................................................................................................................... 1

1.1 Cilji ................................................................................................................................................. 1

2 PROGRAMSKI JEZIKI ............................................................................................... 2

2.1 KAJ JE PROGRAMSKI JEZIK .............................................................................................................. 2

3 ZGODOVINA PROGRAMSKIH JEZIKOV .................................................................... 4

3.1 GENERACIJE PROGRAMSKIH JEZIKOV ............................................................................................. 6

3.1.1 STROJNI JEZIKI .................................................................................................................................. 6

3.1.2 ZBIRNI JEZIKI..................................................................................................................................... 7

3.1.3 VIŠJENIVOJSKI JEZIKI ........................................................................................................................ 8

3.1.4 JEZIKI ČETRTE GENERACIJE ............................................................................................................... 9

3.1.5 JEZIKI PETE GENERACIJE ................................................................................................................... 9

4 KAKOVOST PROGRAMSKE OPREME ..................................................................... 10

4.1 DEFINICIJA KAKOVOSTI ................................................................................................................ 10

4.2 KAKOVOST Z VIDIKA UPORABNIKA, RAZVIJALCA IN UPRAVLJAVCA PROGRAMSKE REŠITVE ......... 11

4.3 ISO/IEC 25010 .............................................................................................................................. 12

4.4 METRIKE ....................................................................................................................................... 14

4.4.1 NOTRANJE IN ZUNANJE METRIKE .................................................................................................. 14

4.5 METRIKE PROGRAMSKE OPREME ................................................................................................. 14

5 UČINKOVITOST PROGRAMSKE OPREME ............................................................... 16

5.1 DEFINICIJA UČINKOVITOSTI .......................................................................................................... 16

5.2 UČINKOVITOST PROGRAMSKE KODE ............................................................................................ 16

5.3 NOTRANJE IN ZUNANJE METRIKE UČINKOVITOSTI ....................................................................... 17

Page 8: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

v

5.3.1 METRIKE ŠTEVILA VRSTIC KODE ..................................................................................................... 18

5.3.2 METRIKE ČASOVNEGA OBNAŠANJA ............................................................................................... 18

5.4 ZAHTEVNOST ALGORITMOV ......................................................................................................... 19

6 PREVAJANJE PROGRAMSKIH JEZIKOV .................................................................. 21

6.1 PREVAJALNIK................................................................................................................................ 21

6.1.1 PREVAJALNIK JAVA ......................................................................................................................... 22

6.1.2 PREVAJALNIK C++ ........................................................................................................................... 23

6.1.3 PREVAJALNIK C# ............................................................................................................................. 24

7 SPLETNA APLIKACIJA ZA MERJENJE UČINKOVITOSTI PROGRAMOV ....................... 25

7.1 ANALIZA ....................................................................................................................................... 25

7.2 NAČRTOVANJE ............................................................................................................................. 26

7.3 IMPLEMENTACIJA ......................................................................................................................... 28

7.3.1 ASP .NET MVC ................................................................................................................................ 28

DELO S PODATKI .................................................................................................................... 30

7.3.2 NALAGANJE DATOTEK .................................................................................................................... 31

7.3.3 USTVARI NALOGO .......................................................................................................................... 32

7.3.4 ODDAJ REŠITEV .............................................................................................................................. 33

PREVAJANJE IN PREVERJANJE REŠITEV ................................................................................. 34

MERJENJE ČASA IZVAJANJA, VRSTIC KODE IN ZASEDENOSTI POMNILNIKA .......................... 35

7.3.5 IZPIS MERITEV V TABELO IN REZULTATI MERITEV ......................................................................... 36

7.4 TESTIRANJE .................................................................................................................................. 37

7.4.1 PREVERJANJE PRAVILNOSTI PRENESENEGA ALGORITMA .............................................................. 37

7.5 VZDRŽEVANJE .............................................................................................................................. 38

8 SKLEP .................................................................................................................. 39

9 VIRI IN LITERATURA ............................................................................................. 40

Page 9: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

vi

KAZALO SLIK

SLIKA 2.1: PRIMER, KAJ V PRAKSI POMENITA SINTAKSA IN SEMANTIKA ............................................................................... 3

SLIKA 3.1: PRVI ELEKTRONSKI RAČUNALNIK ENIAC ....................................................................................................... 4

SLIKA 3.2: VON NEUMANNOVA ARHITEKTURA RAČUNALNIKA .......................................................................................... 5

SLIKA 3.3: HARVARDSKA ARHITEKTURA RAČUNALNIKA ................................................................................................... 5

SLIKA 3.4: PRIMER VIDEZA KODE STROJNEGA JEZIKA ...................................................................................................... 6

SLIKA 3.5: PRIMER KODE ZBIRNEGA JEZIKA .................................................................................................................. 7

SLIKA 3.6: PREDSTAVNIKI TRETJE GENERACIJE PROGRAMSKIH JEZIKOV ............................................................................... 8

SLIKA 3.7: PRIMERJAVA MED JEZIKOM TRETJE GENERACIJE IN JEZIKOM ČETRTE GENERACIJE ................................................... 9

SLIKA 4.1: FAKTORJI, KI VPLIVAJO NA USPEH OZIROMA NEUSPEH PROJEKTA ...................................................................... 10

SLIKA 4.2: RAZDELITEV STANDARDOV ISO/IEC 25000 ............................................................................................... 12

SLIKA 5.1: RAZVRSTITEV ZAHTEVNOSTI ALGORITMOV................................................................................................... 19

SLIKA 5.2: PRIKAZ VPLIVA ŠTEVILA OPERACIJ IN ŠTEVILA ELEMENTOV NA ČAS IZVAJANJA PRI RAZLIČNIH ALGORITEMSKIH

ODVISNOSTIH .............................................................................................................................................. 20

SLIKA 6.1: VLOGA PREVAJALNIKA ............................................................................................................................ 21

SLIKA 6.2: IZVAJANJE CILJNEGA PROGRAMA ............................................................................................................... 21

SLIKA 6.3: DELOVANJE TOLMAČA ............................................................................................................................ 22

SLIKA 6.4: POSTOPEK USTVARJANJA PROGRAMA V PROGRAMSKEM JEZIKU JAVA ............................................................... 22

SLIKA 6.5: MOŽNOST PRENOSLJIVOSTI APLIKACIJ, NAPISANIH V JAVI, NA RAZLIČNE OPERACIJSKE SISTEME ............................... 23

SLIKA 6.6: PRIMER ZAPISA UKAZA V UKAZNO VRSTICO .................................................................................................. 24

SLIKA 7.1: PRVO OKNO SPLETNE APLIKACIJE ............................................................................................................... 26

SLIKA 7.2: OKNO ZA DODAJANJE NOVE NALOGE ......................................................................................................... 27

SLIKA 7.3: DEFINIRANI MODELI NAŠE SPLETNE APLIKACIJE ............................................................................................. 30

SLIKA 7.4: DEFINIRANI POGLEDI .............................................................................................................................. 30

SLIKA 7.5: DEFINIRANI KRMILNIKI ............................................................................................................................ 30

SLIKA 7.6: FORMA ZA DODAJANJE NOVE NALOGE ........................................................................................................ 32

SLIKA 7.7: PODROBNOSTI NALOGE ........................................................................................................................... 33

SLIKA 7.8: POTEK PREVAJANJA IN PREVERJANJA ODDANIH REŠITEV ................................................................................. 35

SLIKA 7.9: TABELA Z OPRAVLJENIMI MERITVAMI ......................................................................................................... 36

Page 10: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

vii

KAZALO TABEL

TABELA 6-1: PRIMER PREVAJANJA PROGRAMA V UKAZNI VRSTICI ................................................................................... 24

TABELA 7-1: PRIMER VPISANIH PODATKOV V DATOTEKO .CSV ........................................................................................ 36

TABELA 7-2: TESTIRANJE PRAVILNOSTI PRENESENE DATOTEKE ALGORITMA ....................................................................... 37

Page 11: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

viii

SEZNAM KRATIC

ENIAC – Electronic Numerical Integrator and Calculator, elektronski numerični integrator

in računalo

CPU – Central Processing Unit, centralna procesna enota

CMM – Capability Maturity Model, zmožnostno zrelostni model

JVM – Java Virtual Machine, javin virtualni stroj

API – Application Programming Interface, aplikacijski programski vmesnik

CLOC – Count Lines of Code, štetje števila vrstic kode

ASP.NET – Active Server Pages for .NET

MVC – Model View Controller, vzorec Model Pogled Krmilnik

ADO.NET – ActiveX Data Objects for .NET

LOC – Lines Of Code, število vrstic kode

Page 12: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

1

1 UVOD

Vse od prejšnjega stoletja do danes smo priča velikemu vzponu rabe računalniških

tehnologij. Tempo življenja je vse hitrejši, kar se občuti tudi na področju ustvarjanja in rabe

računalniških programov. Ustvarjalci in uporabniki računalniških programov stremijo k čim

manjšim časovnim izgubam pri njihovem delovanju. Za ustvarjanje računalniških

programov imamo na voljo veliko programskih jezikov in izbrati najprimernejšega, je

zahtevna naloga. Pomemben vidik pri izbiri programskega jezika je tudi njegova

učinkovitost, zato smo v obliki spletne aplikacije izdelali ogrodje za merjenje in primerjavo

učinkovitosti programov, zapisanih v različnih programskih jezikih, in meritve predstavili v

diplomskem delu.

Razvoj računalniških programov in spremljajočih tehnologij sta obsežni področji, zato se

bomo v tem diplomskem delu omejili na tri programske jezike, C#, Java in C++, ter zgolj na

predstavitev rezultatov meritev. Predstavili bomo, kaj so programski jeziki, in njihov

zgodovinski razvoj. Posvetili se bomo kakovosti in učinkovitosti programske opreme ter

programske kode.

S pomočjo pridobljenega znanja smo v obliki spletne aplikacije izdelali ogrodje za merjenje

in primerjavo učinkovitosti programov in njegovo izdelavo ustrezno dokumentirali. Izdelali

smo ga v programskem jeziku C# v razvojnem okolju Microsoft Visual Studio 2015.

Uporabniku omogoča merjenje časa izvajanja, števila vrstic kode in zasedenosti delovnega

pomnilnika programov, zapisanih v enem izmed omenjenih programskih jezikov. Na koncu

smo predstavili način uporabe naše aplikacije.

1.1 Cilji

Cilji diplomskega dela so:

• predstaviti, kaj so programski jeziki;

• predstaviti zgodovino programskih jezikov in njihov razvoj;

• predstaviti pomen kakovosti programske opreme;

• predstaviti učinkovitost programske opreme;

• predstaviti metrike programske opreme;

• izdelati spletno aplikacijo za merjenje in primerjavo učinkovitosti programov;

• predstaviti način delovanja aplikacije.

Page 13: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

2

2 PROGRAMSKI JEZIKI

2.1 KAJ JE PROGRAMSKI JEZIK

Ko govorimo o programskem jeziku, govorimo o formalnem jeziku, ki služi za opisovanje

algoritmov, ki se izvajajo v računalniku. Način opisovanja mora biti razumljiv programerju,

ki program napiše, bere, popravlja in dopolnjuje. V osnovi programer stremi k učinkovitemu

pisanju programov s čim manj napakami, zato mora razumeti programsko kodo, da lahko

napake odkrije in jih popravi. Opisovanje mora biti razumljivo stroju oziroma računalniku,

ki program izvaja. Izvajanje mora biti enolično določeno oziroma programski jezik ne sme

biti dvoumen.

Z vidika človeka bi bilo idealno, če bi bil programski jezik kar naravni jezik. Človek bi

računalniku posredoval opis naloge v naravnem jeziku, nejasnosti in dvoumnosti pa bi

računalnik razreševal v dialogu z uporabnikom. Naravni jezik je kompleksen in dvoumen,

zato dialog z računalnikom v tem jeziku zaenkrat še ni mogoč. Na drugi strani pa bi za

računalnik bilo idealno, če bi človek opisoval naloge v strojnem jeziku, ki ga računalnik

neposredno razume, zato v tem primeru programov ne bi bilo treba prevajati. [13]

Ker je strojni jezik zapleten, nepregleden, njegovo pisanje pa počasno, je posledično tudi

težje odkriti in popraviti napake, ki se pojavijo, zato programiranje v strojnem jeziku ni

primerno. Zaradi naštetih težav, ki se pojavijo pri programiranju v strojnem jeziku, so v ta

namen razviti višjenivojski programski jeziki, ki so bližje naravnemu kot strojnemu jeziku.

[28]

Page 14: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

3

Vsak programski jezik ima nekaj osnovnih gradnikov, ki opisujejo podatke, procese ali

pretvorbe. Tako pri programskem jeziku ponavadi ločimo pravila za sestavljanje stavkov (t.

i. sintaktična pravila ali sintaksa) in pravila, ki vsakemu stavku enolično določijo pomen (t.

i. semantična pravila ali semantika).

Sintaksa programskega jezika opisuje predpisane kombinacije ukazov in stavkov, ki tvorijo

pravilno zapisan program. Pomen posameznih gradnikov (simbolov, ukazov, stavkov) je

določen s semantiko programskega jezika. Kadar pa program ni napisan v skladu s

sintaktičnimi pravili programskega jezika, prevajalnik odkrije napake v programu in

programerja o njih ustrezno obvesti.

Semantika programskega jezika določa pomen posameznih stavkov, ukazov, ločil

programskega jezika. Do določene mere je semantika določena s sintakso programskega

jezika, vendar se v primerih, ko je program sintaktično pravilen, a semantično nepravilen,

programi vedejo nepredvidljivo. [2]

Slika 2.1 nam na primeru barv semaforja prikazuje pomen sintakse in semantike. Sintaksa

je v tem primeru zelena je spodaj , rumena v sredini, rdeča na vrhu, v semantičnem pomenu

pa je zelena pojdi in rdeča je ustavi.

Slika 2.1: Primer, kaj v praksi pomenita sintaksa in semantika

Page 15: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

4

3 ZGODOVINA PROGRAMSKIH JEZIKOV

V prvi polovici dvajsetega stoletja smo bili priča razvoju prvih računalniških sistemov

(računalnikov). Najstarejši računalniki so bili mehanični in elektromehanični. Njihovo

programiranje je bilo mogoče zgolj s fizičnim posegom neposredno v računalnik, in sicer

tako, da so zobnike in električna stikala povezali v ustrezne nastavitve, ki so reševale

določen problem. Programiranje na tak način se je z majhnimi spremembami ohranilo tudi

pri nasledniku mehaničnega računalnika, to je pri elektronskem računalniku. Prvi

uveljavljeni elektronski računalnik je bil ENIAC (slika 3.1), ki se je uporabljal za samodejno

reševanje zahtevnih matematičnih problemov. Možno ga je bilo tudi na novo programirati.

[4]

Slika 3.1: Prvi elektronski računalnik ENIAC

(Vir: https://en.wikipedia.org/wiki/ENIAC, 15. 8. 2016

Page 16: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

5

V poznih štiridesetih letih 20. stoletja se je pojavila iniciativa za odkrivanje novih pristopov.

John Von Neumann1 je leta 1945 predstavil delo, v katerem je opisal princip delovanja

modernega računalnika (slika 3.2). Kot izhodišče je zapisal, da mora računalnik vsebovati

enoten pomnilnik za pomnjenje tako ukazov kot podatkov in centralno procesno enoto

(CPE), ločeno od pomnilnika. [27]

Von Neumannova arhitektura vsebuje ozko grlo, ki se kaže v vodilu med CPE in

pomnilnikom ter ima majhno prepustnost podatkov, zato je delovanje računalnika

počasnejše. Problem ozkega grla lahko rešimo s pomočjo predpomnjenja med CPE in

pomnilnikom. Poleg Von Neumannove arhitekture poznamo tudi harvardsko arhitekturo

računalnika (slika 3.3), ki ima ločeni vodili za podatke in ukaze, s čimer omogoča istočasen

prenos ukazov in podatkov. Posledično predvideva tudi ločen pomnilnik za podatke in

ukaze. Slabost harvardske arhitekture je v tem, da ne omogoča možnosti zapisovanja v

pomnilnik ukazov. To pomeni, da so računalniki s Von Neumannovo arhitekturo kljub

počasnejšemu delovanju fleksibilnejši od harvardske arhitekture. [29]

1 John von Neumann je bil madžarsko-ameriški matematik.

Slika 3.2: Von Neumannova

arhitektura računalnika

Slika 3.3: Harvardska arhitektura

računalnika

Page 17: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

6

3.1 GENERACIJE PROGRAMSKIH JEZIKOV

Skozi čas so se programski jeziki razvijali zelo hitro in razvoj se do danes še ni ustavil.

Programske jezike lahko razdelimo na pet generacij:

1. strojni jeziki,

2. zbirni jeziki,

3. višjenivojski jeziki,

4. jeziki četrte generacije,

5. jeziki pete generacije.

3.1.1 STROJNI JEZIKI

Strojni jezik (slika 3.4) je predstavnik prve generacije programskih jezikov. Gre za jezik, ki za

programiranje uporablja numerične ukaze v obliki ničel in enic. Programiranje in odkrivanje

napak v programskem jeziku sta težavna in počasna. [13]

Slika 3.4: Primer videza kode strojnega jezika

(Vir: https://en.wikipedia.org/wiki/Machine_code, 25. 8. 2016)

Page 18: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

7

3.1.2 ZBIRNI JEZIKI

Drugo generacijo programskih jezikov predstavlja zbirni jezik (slika 3.5). Temelji na strojni

kodi, ki je prilagojena tako, da jo človek bolje razume. Za razliko od strojnega jezika, pri

katerem so ukazi v obliki ničel in enic, se v zbirnem jeziku uporabljajo imena, sestavljena iz

črk, ki si jih je lažje zapomniti in razlagati. Programi, pisani v zbirnem jeziku, so odvisni od

strojne opreme in niso prenosljivi. [4]

Slika 3.5: Primer kode zbirnega jezika

(Vir: http://www.hexblog.com/?p=17, 25. 8. 2016)

Page 19: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

8

3.1.3 VIŠJENIVOJSKI JEZIKI

Zaradi razvoja strojne opreme se je pojavila potreba po hitrem razvoju kompleksnejše

programske opreme. Posledično je nastala tretja generacija programskih jezikov (slika 3.6)

ali t. i. višjenivojski programski jeziki, ki so bili neodvisni od strojne opreme. [9] Začetnika

tretje generacije sta bila programski jezik Fortran in programski jezik Cobol. Fortran je bil

namenjen za reševanje matematičnih problemov, cobol pa za poslovne aplikacije. Kot

zanimivost lahko navedemo, da sta oba jezika še danes v uporabi. [4]

Slika 3.6: Predstavniki tretje generacije programskih jezikov

(Vir:http://techolook.blogspot.si/2013/01/third-generation-computer-languages.html, 25. 8. 2016)

Page 20: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

9

3.1.4 JEZIKI ČETRTE GENERACIJE

Jeziki četrte generacije so nastali, ker jeziki tretje generacije niso več zadostovali za izdelavo

aplikacij, ki so imele specializiran problem (slika 3.7). Jeziki četrte generacije so generalno

nepostopkovni, izdelani so za obdelovanje velike količine podatkov. Namenjeni so za delo

s podatkovnimi bazami. [4]

3.1.5 JEZIKI PETE GENERACIJE

Peta generacija programskih jezikov je skupina jezikov, ki so se razvijali v osemdesetih letih

dvajsetega stoletja in katerih prihodnost je negotova. Osnovna značilnost teh jezikov je, da

mora programer vnesti omejitve programu, na podlagi katerih ta išče rešitev, namesto da

program sam reši problem. [4]

Slika 3.7: Primerjava med jezikom tretje generacije in jezikom četrte generacije

(Vir:http://techolook.blogspot.si/2013/02/fourth-generation-computer-languages.html, 25. 8. 2016)

Page 21: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

10

4 KAKOVOST PROGRAMSKE OPREME

4.1 DEFINICIJA KAKOVOSTI

Obstaja veliko različnih definicij kakovosti. Na kakovost lahko gledamo z različnih zornih

kotov. Za naše področje velja definicija kakovosti po standardu ISO/IEC 25010, ki se

natančneje nanaša na programsko opremo in definira kakovost kot stopnjo, do katere

izdelek izpolnjuje določene zahteve različnih interesnih skupin (funkcionalnost,

učinkovitost, kompatibilnost, uporabnost, zanesljivost, varnost, vzdrževalnost,

prenosljivost). [12]

Kakovost, čas in stroški so trije glavni faktorji (slika 4.1), ki določajo uspeh ali neuspeh

projekta, pri čemer je kakovost edini faktor, na katerega menedžment nima neposrednega

vpliva. [20]

Slika 4.1: Faktorji, ki vplivajo na uspeh oziroma neuspeh projekta

Page 22: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

11

4.2 KAKOVOST Z VIDIKA UPORABNIKA, RAZVIJALCA IN UPRAVLJAVCA

PROGRAMSKE REŠITVE

Eden od ciljev razvoja in izdelave programskih rešitev je, da so izdelane kakovostno. Na

kakovost gledamo z različnih zornih kotov:

• kakovost pri uporabi,

• zunanja kakovost,

• lastnosti notranje kakovosti,

• kakovost procesa.

Prvi in najbolj pogost vidik kakovosti je kakovost pri uporabi, kar pomeni izkušnjo končnega

uporabnika programske rešitve. Splošno gledano ta pogled odraža obseg, v katerem lahko

uporabnik doseže cilje v posebnem okolju. Ko proučujemo kakovost v uporabi, smo

pozorni, kako se uporabnik odzove na programsko rešitev.

Zunanja kakovost je vidik, s pomočjo katerega lahko določimo kakovost programske

rešitve, tako da jo poženemo, ponavadi v testnem okolju. Pri lastnostih notranje kakovosti

so to lastnosti, ki jih lahko določimo s pregledom in ne izvajanjem programske opreme.

Vidik s strani upravljavca programske rešitve se nanaša na kakovost procesa razvoja

programske rešitve. Veliko podjetij, ki se ukvarjajo z razvojem programskih rešitev,

uporablja ogrodja, kot sta CMM ali ISO 90012. Omenjeni ogrodji sta namenjeni dobri

dokumentaciji, ponovljivosti, opredeljenosti, upravljanju in optimizaciji procesa gradnje

programske rešitve. [20]

2 Standard, zgrajen na načelih vodenja kakovosti.

Page 23: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

12

4.3 ISO/IEC 25010

Cilj serije standardov ISO/IEC 25000 (slika 4.2) je ustvariti ogrodje za ocenjevanje kakovosti

programske opreme. Ti standardi temeljijo na predhodnem standardu ISO/IEC 9126.

Standard ISO/IEC 25010 opredeljuje model kakovosti, ki ocenjuje kakovost programske

rešitve. Model določa, katere značilnosti kakovosti bodo zajete pri ocenjevanju kakovosti

programske opreme. Kakovost programske rešitve je stopnja, do katere izdelek izpolnjuje

vnaprej določene zahteve. Te zahteve so definirane z značilnostmi in njihovimi

podkategorijami, s pomočjo katerih lahko določimo končno oceno kakovosti programske

rešitve. [11]

Slika 4.2: Razdelitev standardov ISO/IEC 25000

Page 24: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

13

Spodnja slika (slika 4.3) nam prikazuje model kakovosti, ki s pomočjo osmih značilnosti in

njihovih podkategorij opredeljuje kakovost programske rešitve. Te značilnosti so [12]:

• funkcionalnost,

• učinkovitost,

• kompatibilnost,

• uporabnost,

• zanesljivost,

• varnost,

• vzdrževalnost,

• prenosljivost.

Slika 4.3: Značilnosti za ocenjevanje kakovosti programske rešitve

Page 25: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

14

4.4 METRIKE

Po standardu ISO/IEC/IEEE 24765 pravimo metrikam količinske meritve stopnje do katere

sistem, komponenta ali proces poseduje določeno lastnost. [10]

4.4.1 NOTRANJE IN ZUNANJE METRIKE

Notranje metrike se lahko uporabljajo za neizvedljivo programsko opremo skozi razvojne

faze, kot so zbiranje zahtev, oblikovanje, predlog zahtev, programske kode. Notranje

metrike omogočajo uporabniku izmeriti kakovost z vmesnimi meritvami in tako predvideti

kakovost končnega produkta oziroma programske opreme. To omogoča uporabniku, da si

zastavi vprašanja glede kakovosti in nanje najde ustrezen odgovor v zgodnji fazi

življenjskega cikla razvoja programske opreme.

Zunanje metrike se lahko uporabljajo za merjenje kakovosti programske opreme z meritvijo

obnašanja sistema, katerega del je. Zunanje metrike se uporabljajo za merjenje znotraj faz

testiranja, delovanja in opazovanja izvedljive programske opreme ali sistema. Meritve so

izvedene med izvajanjem programske opreme v okolju sistema, ki je predvideno za njeno

delovanje. [7][9]

4.5 METRIKE PROGRAMSKE OPREME

V poglavju 4.1 smo pisali o kakovosti programske opreme, zato smo se pri metrikah

dotaknili tudi metrik, ki zadevajo programsko opremo. Metrike programske opreme lahko

razdelimo na tri kategorije: metrike produkta, procesa in projekta. Metrike produkta

opisujejo lastnosti produkta, kot na primer velikost, kompleksnost, oblikovnost in stopnjo

kakovosti produkta. Metrike procesa nam pomagajo pri izboljšanju razvoja in vzdrževanja

produkta, kot je na primer učinkovito odstranjevanje napak med razvojem produkta.

Metrike projekta pa opisujejo lastnosti in izvedbo projekta, na primer število razvijalcev

Page 26: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

15

programske opreme, stroške, urnik in produktivnost, ki zadeva razvoj programske opreme.

Nekatere metrike lahko spadajo v več kategorij hkrati.

Metrike kakovosti programske opreme so podskupina metrik programske opreme. V

osnovi so metrike kakovosti programske opreme bolj povezane z metrikami procesa in

produkta kot pa z metrikami projekta. Moramo omeniti, da tudi parametri projekta, kot so

število razvijalcev in njihova raven usposobljenosti, razpored projekta in velikost

organizacijske strukture prav tako vplivajo na kakovost produkta.

Metrike kakovosti programske opreme je mogoče dodatno razdeliti na metrike kakovosti

končnega izdelka in metrike kakovosti procesa. Pri ustvarjanju programske opreme je

bistvenega pomena raziskati odnose med metrikami procesa, projektnimi lastnostmi in

kakovostjo končnega produkta ter na podlagi ugotovitev izboljšati kakovost procesa in

produkta. [19]

Page 27: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

16

5 UČINKOVITOST PROGRAMSKE OPREME

5.1 DEFINICIJA UČINKOVITOSTI

Učinkovitost označuje stopnjo porabe sredstev za ustvarjanje popolnih rezultatov.

Učinkovitost se nanaša na uporabo vseh sredstev, vključno z osebnim časom in energijo za

produciranje poljubnega rezultata. Je merljiv koncept, ki ga določa razmerje med

uporabnimi rezultati in vloženimi sredstvi. Učinkovitost pomeni doseči želen rezultat, pri

čemer je zapravljanje sredstev, kot so fizični materiali, energija in čas, minimalno. [6]

5.2 UČINKOVITOST PROGRAMSKE KODE

Ko govorimo o učinkoviti programski kodi, moramo imeti v mislih, da gre za širok pojem, ki

opisuje zanesljivost, hitrost in metodologijo programiranja, s pomočjo katerih razvijamo

programsko kodo za končni produkt. To so ključni dejavniki, ki vplivajo na zmogljivost

programske kode in sam program. Cilj učinkovite kode je torej čim bolj zmanjšati porabo

virov in s tem ohraniti minimalno tveganje za poslovno ali delovno okolje. Učinkovita

programska koda lahko pripomore k izboljšanju kakovosti programske opreme.

Priporočilo pri razvoju programske opreme je zagotavljanje visoke učinkovitosti

programske kode. Učinkovita programska koda mora biti sposobna obvladovati

kompleksnejše algoritme. [23]

Učinkovitost programskega jezika ali kode zajema dva pomembna elementa: čas in

pomnilnik. Primarna in komplementarna koncepta omogočata računanje. V primeru, da bi

odvzeli nekaj pomnilnika, bi to pomenilo daljše izvajanje nekega programa, kar pomeni, da

se ta dva elementa med seboj dopolnjujeta. [20]

Page 28: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

17

5.3 NOTRANJE IN ZUNANJE METRIKE UČINKOVITOSTI

Uporabljajo se za predvidevanje učinkovitosti programske opreme med testiranjem ali

kodiranjem. Za merjenje učinkovitosti moramo najprej definirati konfiguracijo strojne in

programske opreme referenčnega okolja, ki mora biti definirano v konfiguraciji programske

opreme. [9]

• METRIKE ČASOVNEGA OBNAŠANJA prikazujejo niz lastnosti za predvidevanje

časovnega obnašanja sistema, vključno s programsko opremo izdelka med

testiranjem in delovanjem.

• METRIKE PORABE VIROV prikazujejo niz lastnosti za predvidevanje porabe virov

strojne opreme računalniškega sistema, vključno s programsko opremo izdelka

med testiranjem in izvajanjem.

Primere metrik lahko najdemo v ISO/IEC 9126-3. Nekateri primeri metrik so: časovna

odzivnost (angl. Response time), časovna prepustnost (angl. Throughput time), poraba

pomnilnika (angl. Memory utilization), poraba vhodnih in izhodnih virov (angl. I/O

Utilization) itd. [9]

Pri notranjih metrikah učinkovitosti smo govorili o ocenjevanju oziroma predvidevanju

časovnega obnašanja in porabe virov. Zunanje metrike pa dejansko merijo naštete lastnosti

med izvajanjem. Merijo se tudi povprečne vrednosti, maksimalne vrednosti in omejitve

določenih lastnosti. Primere metrik lahko najdemo v ISO/IEC 9126-2. Nekateri primeri

metrik so: povprečen odzivni čas (angl. Mean time to response), Najslabši odzivni čas (angl.

Worst case response time), maksimalna poraba pomnilnika (angl. Maximum memory

utilisation) itd.[8]

Učinkovitost zunanjih metrik se razlikuje od notranjih po tem, da zunanje metrike

opravljajo meritve med samim izvajanjem programske opreme, medtem ko notranje

metrike napovedujejo določene zunanje metrike. Pri zunanjih metrikah se pojavljajo

Page 29: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

18

metrike, ki merijo povprečne vrednosti, in metrike za merjenje najslabših možnih scenarijev

za omenjene notranje metrike, ki jih najdemo v ISO/IEC 9126-3.

5.3.1 METRIKE ŠTEVILA VRSTIC KODE

Velikost je ena izmed najpomembnejših lastnosti programske opreme, ki ni le ključni faktor

pri določanju stroškov in časa za izdelavo programske opreme, ampak je tudi osnovna

enota za pridobivanje drugih metrik, ki zadevajo status projekta in meritve kakovosti

programske opreme.

Število vrstic (angl. Lines of Code) je ena izmed najbolj uporabljanih metrik velikosti.

Uporablja se za štetje fizičnih in logičnih vrstic kode. Fizične vrstice kode definiramo kot

vrstice, ki ne vsebujejo praznih vrstic in komentarjev. Fizične vrstice kode lahko štejemo

neodvisno od programskega jezika, saj se ne upošteva sintaktičnih in drugih razlik med

ostalimi programskimi jeziki. Logičnim vrsticam kode pa pravimo stavki, ki se končajo s

podpičjem. Štetje logičnih vrstic se izvaja neodvisno od formata stavkov, ki se štejejo. To

pomeni, da je lahko več logičnih stavkov v eni vrstici ali pa je en logični stavek sestavljen iz

več vrstic kode. [14]

5.3.2 METRIKE ČASOVNEGA OBNAŠANJA

Ko govorimo o časovni odzivnosti, govorimo o času, ki ga strežnik potrebuje za obdelavo

zahteve – na primer spletne strani. Torej odzivni čas bi bil čas, ki ga sistem potrebuje, da

prikaže rezultat zahteve na spletno stran. Metrike časovne odzivnosti so pomembne z

vidika končnega uporabnika programske opreme ali spletne aplikacije. [17]

Page 30: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

19

5.4 ZAHTEVNOST ALGORITMOV

Zahtevnost algoritmov je še eden izmed bolj pomembnih dejavnikov, ki vplivajo na

izboljšanje časovnih zmogljivosti programskih rešitev. V programih, ki imajo delovna

opravila vezana na procesorski čas, so osnovni algoritmi daleč najpomembnejši elementi za

izboljšanje njihovega časa izvajanja.

Računalniški strokovnjaki so oblikovali tako imenovano O-notacijo za razvrščanje izvajalnih

časov različnih algoritmov. Takšna notacija izraža izvajalni čas algoritma brez navajanja

vpliva manj pomembnih osnovnih ukazov.

Tako za algoritme, ki lahko sprocesirajo n elementov v O(n) času, vemo, da je izvajalni čas

algoritma linearno sorazmeren s številom elementov algoritma. Torej pri O(n) bi dvojno

število elementov podvojilo čas izvajanja, pri O(1) ne bi vplivalo nanj, pri O(n2) pa bi čas

izvajanja povečalo za faktor 4 (22 = 4). Zahtevnost algoritmov razvrščamo od boljšega do

slabšega (slika 5.1). [22]

Slika 5.1: Razvrstitev zahtevnosti algoritmov

Page 31: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

20

Iz grafa na sliki (slika 5.2) je razvidno, kako število operacij in število elementov vplivata na

čas izvajanja različnih algoritemskih odvisnosti. Na primer, če imamo algoritem s časovno

zahtevnostjo O(n2) in pri tem 105 elementov, imamo posledično 1010 operacij in čas

izvajanja 2,8 ure.

Slika 5.2: Prikaz vpliva števila operacij in števila elementov na čas izvajanja pri različnih algoritemskih odvisnostih

(Prirejeno po: Spinellis, D. Code Quality: The Open Source Perspective, Addison Wesley Professional, 2006, str. 190)

Page 32: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

21

6 PREVAJANJE PROGRAMSKIH JEZIKOV

6.1 PREVAJALNIK

Prevajalnik (angl. compiler) je program, ki lahko prebere program, napisan v enem jeziku

(ponavadi v izvorni kodi), in ga prevede v ekvivalenten program, napisan v drugem, tako

imenovanem ciljnem jeziku (slika 6.1). Prevajalnik ima pomembno vlogo pri zaznavanju

napak v izvornem programu, ki jih odkrije med procesom prevajanja. [1]

V primeru, da je ciljni program izvedljivi program v strojnem jeziku, ga lahko izvede

uporabnik, ki lahko vnese vhode in dobi izhode (slika 6.2). [1]

Slika 6.1: Vloga prevajalnika

Slika 6.2: Izvajanje ciljnega programa

Page 33: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

22

Pri prevajanju programskih jezikov oziroma programov pogosto zasledimo tudi izraz

tolmač.

Tolmač (angl. interpreter) je še en pogost jezikovni procesor. Namesto da ciljni program

prevede v celoti, ga interpretira oziroma tolmači (slika 6.3). Sproti ga prevaja in izvaja ukaz

za ukazom glede na vhode uporabnika. [1]

6.1.1 PREVAJALNIK JAVA

Programski jezik Java je visokonivojski jezik, ki je objektno orientiran, prenosljiv, dinamičen,

varen in robusten. V programskem jeziku Java je vsa izvorna koda najprej napisana v

navadni tekstovni datoteki s končnico .java. Ustvarjena izvorna datoteka ali datoteka z

izvorno kodo je s pomočjo javinega prevajalnika prevedena v datoteko s končnico .class. Te

datoteke ne vsebujejo kode, ki je razumljiva procesorju, ampak so prevedene v vmesno

kodo, ki jo razume strojni jezik JVM. Nato s pomočjo Java tolmača poženemo datoteko

.class in program izvedemo (slika 6.4). [16]

Slika 6.3: Delovanje tolmača

Slika 6.4: Postopek ustvarjanja programa v programskem jeziku Java

(Vir: http://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html#FOOT, 8. 9. 2016)

Page 34: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

23

Ker je JVM dostopen na velikem številu različnih operacijskih sistemov (Windows, Solaris,

Linux, Mac OS), lahko datoteke .class nemoteno poganjamo na različnih operacijskih

sistemih (slika 6.5). [16]

6.1.2 PREVAJALNIK C++

C++ je splošnonamenski računalniški programski jezik. C++ se ne interpretira ali prevede v

vmesni jezik, kot se na primer java. Zaradi tega za isto opravilo porabi manj časa, posledično

tudi manj energije, kar je prednost predvsem za naprave, ki potrebujejo baterijsko

napajanje. [30]

Za razvoj programov v programskem jeziku C++ ne potrebujemo ničesar drugega, kot nek

tekstovni urejevalnik za pisanje programske kode in prevajalnik, ki to kodo prevede in

poveže v izvršilni program. [18]

Programski jezik C++ uporablja prevajalnik, ki prevede izvorno kodo v izvršilno (npr. gcc).

Izvorno kodo lahko prevedemo znotraj razvojnega okolja s klikom na ustrezno funkcijo ali

pa se lahko lotimo ročnega prevajanja v ukazni vrstici (tabela 6.1). [18]

Slika 6.5: Možnost prenosljivosti aplikacij, napisanih v javi, na različne operacijske sisteme

(Vir: http://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html#FOOT, 8. 9. 2016)

Page 35: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

24

Tabela 6-1: Primer prevajanja programa v ukazni vrstici

Ukaz, ki ga napišemo v ukazno vrstico: g++ -o program program.cpp

6.1.3 PREVAJALNIK C#

Programski jezik C# je razvilo podjetje Microsoft v okviru razvoja ogrodja .NET. Je objektno

orientiran programski jezik in izvira pretežno iz jezikov C++, Visual Basic in Java. Zaradi

točne specifikacije programskega in vmesnega jezika se lahko program, napisan v C#,

neposredno prevede in izvede v drugih okoljih, ne da bi bilo treba za prenosljivost program

spreminjati. Zaradi omenjenih lastnosti je eden izmed priljubljenejših programskih jezikov.

[31]

Podobno kot pri programskem jeziku C++ tudi za razvoj programov v programskem jeziku

v C# ne potrebujemo ničesar drugega kot nek tekstovni urejevalnik in prevajalnik.

programski jezik C# nam omogoča pisanje namiznih aplikacij za sistem Windows in za

aplikacije, ki se uporabljajo na spletu, zato omogoča razvoj aplikacij s pomočjo razvojnega

okolja Visual Studio. Prevajanje izvorne kode v izvršilno omogoča prevajalnik »csc«, ki je del

Microsoftovega ogrodja .NET Framework. Prevajanje lahko izvedemo s pomočjo razvojnega

okolja Visual Studio, v katerem prevedemo napisan program ali s pomočjo prevajanja iz

komandne vrstice (slika 6.6). [31]

Slika 6.6: Primer zapisa ukaza v ukazno vrstico

Page 36: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

25

7 SPLETNA APLIKACIJA ZA MERJENJE UČINKOVITOSTI PROGRAMOV

Po obravnavanih zgornjih poglavjih in pridobljenem ustreznem znanju smo se odločili

izdelati spletno aplikacijo za merjenje programov. Aplikacija bo uporabnikom omogočala

uvoz algoritmov in merjenje njihove učinkovitosti. Področje programskih jezikov in

programov je zelo široko, zato smo se omejili na tri programske jezike, in sicer C#, C++ in

Java.

Skozi vsa leta študija smo se pri več predmetih srečevali z najrazličnejšimi modeli razvoja

programskih rešitev, s pomočjo katerih skozi faze načrtovanja razvijemo programsko

opremo. Odločili smo se za kaskadni model (angl. Waterfall), ki smo ga v času študija

uporabljali v večini primerov načrtovanja programskih rešitev. Kaskadni model vsebuje pet

zaporednih faz: analizo, načrtovanje, implementacijo, testiranje in vzdrževanje. Sam naziv

modela izhaja iz načina, kako so v njem razvojne faze med seboj povezane. Povezane so

tako, da prehod v naslednjo razvojno fazo ni mogoč, če prejšnja faza ni končana. Izhod iz

prejšnje faze je tako vhod v naslednjo fazo načrtovanja. [26]

7.1 ANALIZA

V fazi analize najpogosteje analiziramo problem, ki ga želimo rešiti. Določimo predvidene

omejitve in zahteve problema. [26] Preden smo začeli s kakršno koli analizo, smo določili

programski jezik in razvojno okolje, v katerem smo razvijali spletno aplikacijo. Odločili smo

se za programski jezik C# in razvojno okolje Visual Studio 2015.

Osnovni cilj je spletna aplikacija, ki bo služila kot ogrodje za merjenje in primerjavo

učinkovitosti programov. Omogočala bo dodajanje novih nalog, za katere bodo uporabniki

napisali svojo kodo in opravili meritve svojega programa. Svoje rešitve bodo lahko napisali

v programskem jeziku C#, Java ali pa C++. Aplikacija bo preverila, ali uvoženi program

Page 37: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

26

ustreza nalogi, in izvedla merjenje časa izvajanja, števila vrstic kode in zasedenosti

pomnilnika programa. Tako bodo uporabniki lahko med seboj primerjali rešitve in ugotovili,

kateri program je učinkoviteje napisan. Rezultati meritev se bodo nato izpisali v tabelo

rezultatov vseh že opravljenih meritev.

Specifičnih sistemskih omejitev spletna aplikacija nima, saj deluje na vsakem standardnem

računalniku, ki vsebuje spletni brskalnik. Pojavi se le tehnična zahteva, saj za pravilno

delovanje aplikacije potrebujemo internetno povezavo.

7.2 NAČRTOVANJE

V fazi načrtovanja določimo, kako bomo izpolnili zahteve, zapisane v predhodni fazi analize.

Določimo tudi vse funkcionalnosti programske rešitve in način, kako bomo zadevo

implementirali. [26]

Tako kot pri vseh ostali stvareh, ki jih želimo bodisi tržiti ali katerih uporabo želimo povečati,

je tudi pri razvoju programskih rešitev pomembno določiti grafični izgled aplikacije (slika

7.1).

Slika 7.1: Prvo okno spletne aplikacije

Page 38: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

27

Stremeli smo k izdelavi preprostega in kar se da preglednega grafičnega vmesnika. Naša

aplikacija je spletna, zato smo se trudili zbrati čim več informacij na prvi strani in s tem

uporabniku olajšati delo z njo. Tako smo na prvo stran želeli dodati seznam nalog, da lahko

uporabnik že na samem začetku ugotovi, za kakšno spletno aplikacijo gre. Prav tako smo

na prvo stran dodali gumb za dodajanje nove naloge in s tem zmanjšali število nepotrebnih

korakov.

Ob izbiri gumba za dodajanje nove naloge smo želeli, da nas aplikacija preusmeri na novo

stran, na kateri je treba izpolniti vnosna polja, da je je korak dodajanja izveden uspešno.

Eden izmed pogojev za uspešno dodano nalogo je prenos datotek, ki smo ga želeli

omogočiti s pomočjo orodja za nalaganje datotek, ki je že v sklopu razvijalnega okolja .NET.

(slika 7.2).

Naša spletna aplikacija podpira tri programske jezike. Zato je bilo treba s pomočjo

predhodno pridobljenega teoretičnega znanja in že obstoječih rešitev na spletu izdelati

ustrezno prevajanje in poganjanje vsakega programskega jezika posebej.

Slika 7.2: Okno za dodajanje nove naloge

Page 39: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

28

Meritve so v naši aplikaciji tudi ena izmed glavnih funkcionalnosti. Odločili smo se uporabiti

že obstoječe rešitve, zato smo za merjenje časa izvajanja uporabili kar funkcijo štoparice

(angl. stopwatch), ki jo že v osnovi omogoča razvojno okolje .NET. Razvojno okolje omogoča

tudi merjenje delovnega pomnilnika, ki ga za izvajanje porabi program. Za štetje vrstic kode

pa smo se odločili uporabiti brezplačni program CLOC3, ki omogoča štetje vrstic kode.

Implementirali smo preprečevanje napak, ki uporabniku nudi boljšo uporabniško izkušnjo.

Vemo, da uporabniki velikokrat napačno vnesejo podatke ali pa vnesejo podatke, ki

prekoračijo omejitve, ki smo jih predvideli. Posledično sta uporabniška izkušnja in

zanimanje uporabnika za aplikacijo slabša. Pri vnosu podatkov v vnosna polja smo želeli

implementirati preverjanje, ali je vnosno polje prazno. Pri delu z datotekami lahko pride

tudi do izbire napačne datoteke. Ker aplikacija omogoča merjenje treh programskih jezikov,

smo omejili datoteke oziroma končnice datotek, ki jih uporabnik lahko prenese na strežnik.

Najpomembnejše preverjanje pa je bilo preverjanje ustreznosti algoritma, ki ga uporabnik

prenese na strežnik in ga želi izmeriti.

7.3 IMPLEMENTACIJA

V skladu s fazo načrtovanja smo najprej izdelali grafični uporabniški vmesnik, s pomočjo

katerega uporabnik komunicira z aplikacijo. V nadaljevanju bomo opisali glavne

funkcionalnosti sistema, tehnologije in pristope, ki smo jih uporabili, ter način, na katerega

so bile implementirane.

7.3.1 ASP .NET MVC

Spletno aplikacijo smo želeli implementirati kakovostno in kot dobro osnovo za morebitne

nadgradnje. Želeli smo ustvariti ločen uporabniški vmesnik, poslovno logiko in trajno stanje

podatkov, zato smo se odločili uporabiti ogrodje ASP .NET MVC. Ogrodje je bilo razvito kot

3 Program je dostopen na http://cloc.sourceforge.net/, datum dostopa: 25. 9. 2016.

Page 40: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

29

alternativa za spletne aplikacije ASP .NET. ASP .NET MVC je arhitekturno ogrodje, ki

aplikacijo deli na tri glavne komponente: model, pogled in krmilnik (Model – View –

Controller). [15]

Model je zadolžen za upravljanje s podatki spletne aplikacije, ki jo gradimo. Primer je

modul, ki je v interakciji s podatkovno bazo, kar pomeni, da pridobiva ali obdeluje podatke.

Pogled prikazuje model v nekem določenem kontekstu. Pogled ni nič drugega kot koda

HTML, ki jo strežnik vrne odjemalcu.

Krmilnik je jedrna komponenta, ki obdeluje vhodne podatke, deluje na modelu, prikaže

pogled in se odloči, kaj storiti naprej (preusmeri zahtevo ipd.). [24]

Tako smo definirali model (slika 7.3):

• naloga skrbi za upravljanje s podatki, ki so vezani na naloge, ki jih uporabnik lahko

ustvari;

• FileDetail je model, ki je zadolžen za datoteke, ki jih uporabniki prenašajo na

strežnik in se hranijo v podatkovni bazi;

• admin skrbi za podatke, ki so vezani na prijavo administratorja v sistem;

• TableMeritev so podatki, vezani za tabelo meritev, ki se prikaže ob uspešno

izvedeni meritvi programa;

• NalogaContext : skrbi za inicializacijo in komunikacijo z bazo;

• Services je model, v katerem se nahajajo funkcije, ki smo jih potrebovali za

implementacijo spletne aplikacije in so po zgledu dobre prakse ločene.

Uporabili smo krmilnike Home, Login in Naloga, prepoznamo jih po besedi controller (slika

7.4). Vsak krmilnik vsebuje določene akcije, s katerimi operiramo s podatki, delujemo na

modelu in prikazujemo pogled, tako da so pogledi enako poimenovani kot krmilniki. V

Page 41: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

30

našem primeru so pogledi (silka 7.5) prav tako poimenovani kot krmilniki Home, Login in

Naloga.

Ogrodje ASP .NET MVC smo izbrali zato, ker smo videli, da vzorec MVC omogoča večjo

preglednost, ločevanje uporabniškega vmesnika, poslovne logike in trajnega stanja

podatkov, s čimer se tudi poveča varnost aplikacije in omogočena je manjšo izgubo časa za

nadgradnjo aplikacije in naknadno vpeljevanje novih ljudi v razvoj same spletne aplikacije.

DELO S PODATKI

Spletna aplikacija je v osnovni zasnovana tako, da obdeluje podatke in jih nato na strani

odjemalca tudi prikaže. Zato smo za delo s podatki ubrali pristop Entity Framework Code

First.

Entity Framework je objektno-relacijsko preslikavno ogrodje za ADO .NET, ki avtomatizira

relacijsko podatkovno bazo za določeno aplikacijo. To pomeni, da razvijalcem omogoča

avtomatsko dostopanje in shranjevanje podatkov v podatkovno bazo. [5]

Slika 7.3: Definirani modeli naše spletne aplikacije

Slika 7.5: Definirani krmilniki

Slika 7.4: Definirani pogledi

Page 42: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

31

Pristop Code First: entity framework podpira tri različne pristope k razvoju podatkovne

baze, Code First, Model First in Database First. Mi smo izbrali pristop Code First oziroma

koda prej, kar pomeni, da smo najprej v kodi zapisali razrede in znotraj teh definirali

lastnosti ter nato s pomočjo entity frameworka izdelali podatkovno bazo. [5]

Pristop vsebuje veliko prednosti, saj smo se tako izognili monotonemu programiranju

oziroma vzpostavitvi podatkovne baze. Pristop Code First ni primeren za aplikacije, ki

operirajo z veliko podatki, in pri spreminjanju podatkov znotraj tabel v podatkovni bazi, kjer

je treba opraviti spremembe tudi znotraj razredov entitet v programski kodi in pognati ukaz

za posodobitev celotne podatkovne baze s pomočjo konzole. [3]

7.3.2 NALAGANJE DATOTEK

Da bi uporabniku omogočili čim hitrejše in čim lažje nalaganje datotek z njegovimi algoritmi,

smo uporabili že obstoječi gradnik FileUpload znotraj razvojnega okolja ASP .NET.

Uporabniku omogoča ob nekaj klikih izbrati eno ali več datotek. Izbrane datoteke nato

prenesemo na strežnik.

Razmišljali smo tudi o tem, da se lahko zgodi vnos datotek z neustrezno končnico, zato smo

omogočili zgolj datoteke s končnicami .c, .cc, .cpp, .cs in .java. Prav tako smo tudi za primer,

da uporabnik ne bi izbral nobene datoteke, ustvarili opozorilni izpis kot opozorilo, da ni

izbrana nobena datoteka, s čimer bi preprečili nedelovanje aplikacije.

Na začetku smo razmišljali zgolj o vnosnem polju, v katerega bi uporabnik zgolj prilepil svojo

kodo. Vendar smo na koncu prišli do zaključka, da bi bil ta način nefunkcionalen, ker lahko

uporabnikov algoritem obsega večje število datotek. Tako smo se izognili omejitvi in

izboljšali uporabniško izkušnjo.

Page 43: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

32

7.3.3 USTVARI NALOGO

Aplikacija omogoča, da katerikoli uporabnik, ki ima interes, objavi novo nalogo oziroma

problem. Osnovna ideja je, da je naša spletna aplikacija dostopna širši množici in da lahko

vsak ustvari novo nalogo ter tako prispeva k širjenju baze različnih nalog. Dodajanje naloge

smo implementirali s pomočjo forme (slika 7.6), v kateri mora uporabnik določiti ime naloge

in podati natančna navodila ter prenesti datoteko, v kateri so zapisani vhodni podatki, s

katerimi bo naloga operirala. Priložiti mora tudi pričakovani rezultat, ki ga mora naloga

vrniti.

Uporabnik mora za uspešno izvedeno dodajanje izpolniti vsa vnosna polja in izbrati

datoteke za prenos, sicer korak ni uspešno izveden in naloga ni dodana na seznam nalog.

Če pa uporabniki uspešno vnesejo podatke, ki so neprimerni, lahko administrator aplikacije

neustrezno nalogo umakne s seznama.

Slika 7.6: Forma za dodajanje nove naloge

Page 44: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

33

7.3.4 ODDAJ REŠITEV

Ena izmed najbolj pomembnih funkcionalnosti naše spletne aplikacije je možnost oddaje

rešitve (slika 7.7). Nahaja se na strani s podrobnostmi o nalogi, kjer lahko zasledimo

podrobna navodila. V naslednjih podpoglavjih bomo po vrsti podrobneje opisali, kako se

oddane rešitve prevedejo, poženejo in izmerijo.

Slika 7.7: Podrobnosti naloge

Page 45: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

34

PREVAJANJE IN PREVERJANJE REŠITEV

Nad rešitvami, ki so bile oddane, se v ozadju izvede prevajanje in preverjanje. Datoteke se

prevajajo s pomočjo določenih prevajalnikov glede na programski jezik. Prevajajo in

poganjajo se v sklopu zunanjega procesa, ki ga poganjajo vnaprej zapisane skripte (batch

skripte). Skripte se v aplikaciji poganjajo s pomočjo procesov in simulirajo zagon programa

s pomočjo ukaznega terminala oziroma konzole. Za rešitev prevajanja in poganjanja s

pomočjo skript smo se odločili zato, ker je neposredno izvajanje ukazov iz aplikacije

povzročalo težave pri pravicah dostopa do datotek v operacijskem sistemu Windows.

Pravilnost oddanih rešitev je zelo pomembna, zato smo poskrbeli za njihovo ustrezno

preverjanje in s tem zagotovili točnost opravljenih meritev. Pomembnost preverjanja se

kaže v tem, da onemogoči objavo programov, ki ne delajo. V izogib takšnim uporabnikom

smo uvedli tudi to, da morajo uporabniki, ki ustvarjajo nalogo, podati tip in nabor vhodnih

podatkov, prav tako pa morajo podati pričakovane izhode.

Vhodni podatki in pričakovani izhodni podatki so za druge uporabnike nevidni, avtorji nalog

pa morajo v navodilu točno opisati, s kakšnimi tipi morajo pravilne rešitve operirati in v

kakšnem formatu morajo rešitve podati rezultate. Naša spletna aplikacija nato prevede in

požene rešitev, nad rešitvijo izvede meritve in primerja pričakovane rezultate oddane

rešitve s pričakovanimi rezultati, ki jih je določil avtor naloge. Če se podatki ujemajo, se

rezultati meritev dodajo v tabelo meritev, v nasprotnem primeru pa spletna aplikacija

uporabnika opozori, da oddana rešitev ni pravilna (slika 7.8).

Page 46: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

35

MERJENJE ČASA IZVAJANJA, VRSTIC KODE IN ZASEDENOSTI

POMNILNIKA

Sočasno s prevajanjem in preverjanjem smo izvedli tudi meritve algoritma, ki ga je

uporabnik prenesel na strežnik. Merjenje časa izvajanja smo opravili s pomočjo že

obstoječe metode znotraj razvojnega okolja Visual Studio 2015, Stopwatch. Omogoča nam

preprosto merjenje časa izvajanja znotraj programske kode z lastnostmi Stopwatch.Start()

in Stopwatch.Stop(). Razvojno okolje je omogočalo z že vgrajenimi metodami tudi merjenje

delovnega pomnilnika. Meritve so opravljene na trenutnem procesu s pomočjo

runProcess.WorkingSet64, ki vrne vrednost v bajtih, mi pa smo vrednost nato pretvorili v

kilobajte.

Slika 7.8: Potek prevajanja in preverjanja oddanih rešitev

Page 47: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

36

Meritve vrstic kode smo implementirali s pomočjo programa CLOC. Program smo pognali

na enak način kot posamezne prevajalnike za posamezni programski jezik, in sicer s

pomočjo zunanjega procesa in simuliranjem ukazov znotraj ukaznega terminala. Ponovno

smo uporabili vnaprej zapisane skripte, v katere smo združili vse ukaze, in se izognili

težavam glede pravic dostopa do datotek znotraj operacijskega sistema Windows. Program

CLOC omogoča izpis meritev v datoteko .csv. V njej najdemo podatke o tem, nad kolikšnim

številom datotek smo izvedli meritev, za kateri programski jezik gre, koliko je praznih vrstic,

koliko je komentarjev in koliko je vrstic s programsko kodo (tabela 7.1).

Tabela 7-1: Primer vpisanih podatkov v datoteko .csv

Files Language Blank Comment Code

1 C# 14 3 94

7.3.5 IZPIS MERITEV V TABELO IN REZULTATI MERITEV

Vse meritve smo združili v tabelo vseh meritev (slika 7.9) in tako omogočili, da ima

uporabnik zbrane vse že opravljene meritve na enem mestu. Uporabnikom smo omogočili,

da lahko ob vsaki opravljeni meritvi prenesejo programsko kodo vsake oddane rešitve in

tako dobijo vpogled, kako so drugi uporabniki napisali svojo kodo.

Slika 7.9: Tabela z opravljenimi meritvami

Page 48: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

37

7.4 TESTIRANJE

Faza testiranja je namenjena odkrivanju in popravljanju napak, ki smo jih povzročili med

pisanjem programa. Preverjamo tudi, ali se aplikacija odziva, kot smo načrtovali. Testiranje

smo izvedli od manj zahtevnih funkcionalnosti do bolj zahtevnih. Tako smo na začetku

opravili testiranja, kot so prazni vnosi v vnosno polje za ime, izbiro datotek z neustrezno

končnico, pritisk na kontrolni gumb za prenos datotek v primeru, ko ni izbrana nobena

datoteka. Vsa testiranja so pokazala, da ni bilo prisotnih nobenih pomanjkljivosti in

odstopanj od zastavljenih načrtov.

7.4.1 PREVERJANJE PRAVILNOSTI PRENESENEGA ALGORITMA

Ugotovitve v zvezi s testiranjem preverjanja pravilnosti prenesenega algoritma smo

predstavili s pomočjo testne tabele (tabela 7.2).

Tabela 7-2: Testiranje pravilnosti prenesene datoteke algoritma

Tip testa Komentar Test

Prenesen pravilen in delujoč

program

Rezultat meritev se uspešno vnese v tabelo

vseh meritev.

Uspel

Prenesen delujoč program,

vendar je rezultat nepravilen

Statusna vrstica nas opozori, da pričakovani

rezultat ni pravilen. Meritve se ne vpišejo v

tabelo vseh meritev.

Uspel

Pomanjkljivo napisana koda v

datoteki programa

Statusna vrstica nas opozori, da prenesena

datoteka ni pravilno napisana in ni bila

izvedena. Meritve se ne vpišejo v tabelo vseh

meritev.

Uspel

Delujoč program, ki se ne

zaključi

Statusna vrstica nas opozori, da se program

po določenem času ni zaključil. Meritve se ne

vpišejo v tabelo vseh meritev.

Uspel

Page 49: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

38

Kadar se pojavi napaka znotraj datoteke z algoritmom, ki jo uporabnik prenese na strežnik,

aplikacija ne preneha z delovanjem, temveč uporabnika o napakah ustrezno opozori. Na

podlagi zgoraj opravljenih testov menimo, da aplikacija deluje nemoteno.

7.5 VZDRŽEVANJE

Faza vzdrževanja nastopi potem, ko so vse predhodne faze uspešno zaključene. V fazi

vzdrževanja vzdržujemo končen produkt tako, da odkrivamo in odpravljamo napake, lahko

tudi spreminjamo sam sistem zaradi spremembe strojne opreme ali zaradi zahtev

uporabnikov. [25]

Naš končni produkt ne potrebuje specifičnega vzdrževanja, ker v osnovi zadovoljuje vse

potrebe, ki so bile zapisane v fazi analize.

Page 50: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

39

8 SKLEP

V diplomskem delu smo opisali kakovost in učinkovitost programske opreme ter metrike za

merjenje kakovosti programske opreme. Seznanili smo se z definicijo kakovosti, z vidiki

kakovosti in modelom kakovosti ISO/IEC 25010. Tako kot ljudje so si tudi programerji med

seboj različni po svojem načinu programiranja. Nekdo lahko reši problem z večjim ali

manjšim številom vrstic kode, zato smo želeli izdelati ogrodje, s katerim bi lahko

programerji v obliki programske kode izmerili, kako učinkovita je njihova rešitev, in

rezultate meritev njihovih rešitev predstavili ostalim uporabnikom.

Pri iskanju literature smo imeli več dela, a smo na koncu našli ustrezno literaturo in izluščili

področja, ki so se navezovala na našo tematiko. Nekaj težav se je pojavilo pri prevajanju

programskih jezikov C++ in Java znotraj programskega jezika C# in s pomočjo razvojnega

okolja Visual Studio 2015, saj nismo mogli dobiti pravic za dostop do datotek operacijskega

sistema Windows, v katerih so se nahajali prevajalniki. Težavo smo odpravili z zapisovanjem

ukazov za dostop do datotek s pomočjo vnaprej zapisanih skript (batch skripte).

S pridobljenim znanjem iz teoretičnega dela smo nato načrtovali in izdelali spletno

aplikacijo za merjenje učinkovitosti programov. Spletna aplikacija omogoča prenos v

izvornih datotekah za programske jezike C#, C++ in Java na strežnik. Aplikacija nato prevede

in izvede posamezen program in opravi meritve (čas izvajanja, število vrstic kode in

zasedenost delovnega pomnilnika) ter rezultate meritev predstavi. Za vsako opravljeno

meritev programa je možno tudi dostopati do izvorne kode, ki jo je uporabnik podal kot

rešitev.

Za v prihodnje razmišljamo o podprtosti meritev za večje število programskih jezikov in za

grafični prikaz statistike meritev.

Page 51: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

40

9 VIRI IN LITERATURA

[1] Aho, A. V., Lam, M. S., Sethi, R., Ullman, J. D. Chapter 1, Compilers: Principles,

Techniques and Tools (Second Edition). Boston: Addison Wesley, 2007, str 1-4.

Dostopno na:

https://github.com/chenruiao/ares/blob/master/books/Compilers%20Principles%20T

echniques%20and%20Tools%20(2nd%20Edition)%20.pdf [8.9.2016].

[2] Alterzuim. Sintaksa in semantika. Dostopno na:

http://www.alterzuim.si/11prog/40prog.html [12.8.2016]

[3] Code First Approach. Dostopno na: http://www.c-sharpcorner.com/blogs/entity-

framework-code-first-vs-database-first-approach [28.6.2017]

[4] Časlav Pavlović, Istorijski razvoj programskih jezika. Dostopno na:

https://raf.edu.rs/citaliste/programiranje/3673-istorijski-razvoj-programskih-jezika

[15.8.2016].

[5] Entity Framework Tutorial. Dostopno na:

http://www.entityframeworktutorial.net/code-first-with-entity-framework.aspx

[5.1.2017]

[6] Investopedia. Efficiency. Dostopno na:

http://www.investopedia.com/terms/e/efficiency.asp#ixzz4I3cW51a5 [23.8.2016]

[7] ISO/IEC 9126-1. Software engineering: Product quality – Part 1: Quality model, 2000.

Dostopno na https://www.cse.unsw.edu.au/~cs3710/PMmaterials/Resources/9126-

1%20Standard.pdf [15.6.2017]

[8] ISO/IEC 9126-2. Software engineering: Product quality – Part 2: External metrics,

2002. Dostopno na: https://www.cse.unsw.edu.au/~cs3710/PMmaterials/Resources/9126-

2%20Standard.doc [15.6.2017]

[9] ISO/IEC 9126-3. Software engineering: Product quality – Part 3: Internal metrics, 2002.

Dostopno na: https://www.cse.unsw.edu.au/~cs3710/PMmaterials/Resources/9126-

3%20Standard.doc [15.6.2017]

[10] ISO/IEC/IEEE 24765. Systems and software engineering – Vocabulary, 2010. Dostopno

na: http://liris.cnrs.fr/pierre-

edouard.portier/teaching_2014_2015/sq/his/IEEE24765.pdf [28.8.2017]

[11] ISO 25000. Standard ISO 25000. Dostopno na:

http://iso25000.com/index.php/en/iso-25000-standards [23.8.2016].

[12] ISO/IEC 25010. Standard ISO/IEC 25010. Dostopno na:

http://iso25000.com/index.php/en/iso-25000-standards/iso-25010 [23.8.2016]

Page 52: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

41

[13] Kokonenko, I., Šikonja Robnik, M., Bosnić, Z. Programiranje in algoritmi. Ljubljana: FE

in FRI, 2008.

[14] Lines of Code. Dostopno na: http://csse.usc.edu/TECHRPTS/2007/usc-csse-2007-

737/usc-csse-2007-737.pdf [27.6.2017]

[15] Msdn Microsoft. ASP.NET MVC Overview. Dostopno na:

https://msdn.microsoft.com/en-us/library/dd381412(v=vs.108).aspx [3.1.2017]

[16] Oracle. About the Java Technology. Dostopno na:

http://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html#FOOT

[8.9.2016].

[17] Response Time. Dostopno na: https://www.dynatrace.com/blog/week-9-how-to-

measure-application-performance/ [28.6.2017]

[18] Slotech. Programski jezik C++. Dostopno na: from https://slo-

tech.com/clanki/04009/ [8.9.2016].

[19] Software Quality Metrics Overview. Dostopno na:

http://www.informit.com/articles/article.aspx?p=30306 [13.6.2017]

[20] Spinellis, D. Code Quality: The Open Source Perspective. Boston: Addison Wesley,

2006, str. 2-7. Dostopno na: from http://www.e-

reading.club/bookreader.php/141539/Spinellis_-_Code_quality_-

_the_OpenSource_perspective.pdf [25.8.2016]

[21] Spinellis, D. Code Quality: The Open Source Perspective. Boston: Addison Wesley,

2006, str. 205-282. Dostopno na: from http://www.e-

reading.club/bookreader.php/141539/Spinellis_-_Code_quality_-

_the_OpenSource_perspective.pdf [25.8.2016].

[22] Spinellis, D. Code Quality: The Open Source Perspective. Boston: Addison Wesley,

2006, str. 151-204. Dostopno na: from http://www.e-

reading.club/bookreader.php/141539/Spinellis_-_Code_quality_-

_the_OpenSource_perspective.pdf [25.8.2016].

[23] Techopedia. Code Efficiency. Dostopno na:

https://www.techopedia.com/definition/27151/code-efficiency [22.8.2016]

[24] The MVC pattern in theory and practice. Dostopno na:

http://warp.povusers.org/programming/mvc.html [3.1.2017]

[25] Tomašević, V. Održavanje sistema. V: Razvoj aplikativnog softvera. Beograd:

Univerzitet Singidunum, 2012, str. 180. Dostopno na:

www.singipedia.com/attachment.php?attachmentid=2854&d=1340107760

[12.10.2016].

Page 53: OGRODJE ZA MERJENJE IN PRIMERJAVO UČINKOVITOSTI …

42

[26] Tomašević, V. Razvoj aplikativnog softvera. Beograd: Univerzitet Singidunum, 2012,

str. 15-19. Dostopno na:

www.singipedia.com/attachment.php?attachmentid=2854&d=1340107760

[12.10.2016].

[27] Wiki Fakultete za matematiko in fiziko UL. Von Neummanov model. Dostopno na:

http://wiki.fmf.uni-lj.si/wiki/Von_Neumannov_model [15.8.2016].

[28] Wiki Fakultete za matematiko in fiziko UL. Strojni jezik Dostopno na:

http://wiki.fmf.uni-lj.si/wiki/Strojni_jezik [12.8.2016].

[29] Wiki Fakultete za računalništvo in informatiko Ljubljana. Dostopno na:

http://colos1.fri.uni-

lj.si/ERI/RACUNALNISTVO/ZGRADBA_RACUNALNIKA/von_neuman.html [28.2.2017]

[30] Wikipedija prosta enciklopedija. C++. Dostopno na:

https://sl.wikipedia.org/wiki/C%2B%2B [8.9.2016].

[31] Wikipedija prosta enciklopedija. Programski jezik C sharp. Dostopno na:

https://sl.wikipedia.org/wiki/Programski_jezik_C_sharp#CITEREFRasheed2006

[11.9.2016]