En sammanställning av komplexitetsmått.
|
|
- Pernilla Axelsson
- för 9 år sedan
- Visningar:
Transkript
1 En sammanställning av komplexitetsmått. D08 Lunds Tekniska Högskola Arvid Lindell 28 Februari 2012 Abstrakt Denna artikel diskuterar kodkomplexitetsmått i allmänhet. Några av de vanligaste kodkomplexitetsmåtten förklaras och det tidigare litteratur konstaterat angående dem sammanställs. Några av måtten testkörs mot 10 upplagor av ett studentprojekt gjort av andra årets datateknikstudenter vid LTH och en bedömning av måttens relevans görs.
2 Innehåll 1 Introduktion 3 2 Bakgrund 3 3 Några olika mått McCabes cyklomatiska komplexitet Halsteads Nästlingsdjup CKMetrics Diverse Test mot projektkod Resultat Slutsats Cyklomatisk komplexitet Nestningsdjup Rader kod Måttens korrekthet Studentprojekten Andras undersökningar Slutord 8 2
3 1 Introduktion Det har sedan länge funnits ett intresse av att mäta hur komplext ett givet datorprogram är, och därav har det också utvecklats ett flertal olika mått med detta syfte.[1] Egenskaper hos datorprogram så som komplexitet, förståbarhet, utbyggnadsbarhet är ofta subjektiva och svåra att kvantifiera. Komplexitetsmått är ett försök att göra sådana egenskaper mätbara eller åtminstone hitta mätvärden som korrelerar med dem. Syftet med denna artikel är att sammanfatta funktion och resonemang bakom några vanliga sådana mått. Många andra [2][3][1] har tidigare också gjort jämförelser mått emellan Man har försökt utvärdera deras relevans, med varierande resultat. Denna artikel skrivs som en del av kursen Coaching av programvaruteam vid Lunds tekniska högskola som också innefattar studentprojekt gjorda av yngre studenter. Dessa projekt är vad som använts för att testa olika måtts beteende och likhet. Förhoppningen är också att kunna identifiera vad som leder till dåliga resultat för olika mått. Två av de första mer avancerade och mest välkända måtten är Halsteads[7] komplexitetsmått och McCabes cyklomatiska komplexitet[4]. Dessa och några andra kommer att beskrivas i sektion 3. I sektion 2 ges en bakgrund för komplexitetsmått i allmänhet. I sektion 4 testas olika mått på studentprojektens kod med syfte att bedöma måttens rimlighet. Sektion 5 innehåller viss diskussion angående måttens relevans och rimlighet, delvis baserat på resultat av testandet i sektion 4 och delvis på andras undersökningar. 2 Bakgrund Att mäta ett programs komplexitet vill man göra av flera anledningar. Ett programs komplexitet är avgörande för dess kostnad dels under produktion men framför allt under en efterliggande underhållsfas och vid eventuell påbyggnad vid senare tillfälle. [5] Vidare ger en del av existerande mått redan i under designen av ett system viss hjälp att försöka förutsäga hur svårt systemet sedan kommer vara att implementera.[5] Det första och mest grundläggande måttet på komplexitet är rader kod (lines of code, LOC), ett ganska primitivt och simpelt mått. En uppenbar svaghet med detta mått är att det till stor del beror på programspråk och dessutom säger mer om storlek än komplexitet, även om en viss korrelation däremellan finns. Nuförtiden används mer komplicerade mått som tar mer av kodens struktur i hänsyn, och det finns speciella mått för objekt-orienterad programmering. Så vilka egenskaper bör då ett komplexitetsmått ha? Jo, följande[1]: De bör vara robusta på så sätt att små förändringar i ett program ej drastiskt förändrar mätvärdet. Om ett mätvärde minskar på grund av förändring i ett program bör man också kunna visa att programmet faktiskt blivit bättre och tydligare. Ett bra mått bör kunna identifiera källan till komplexiteten. Om en viss del av ett program är betydligt komplexare än resten ska måttet kunna visa detta så att problemet enklare kan åtgärdas. 3
4 Någon slags standardvärde bör finnas, som talar om vilka intervall som är rimliga och vilka som är för mycket. Utan detta kan ett program ej bedömas utan att jämföra det med andra. I [6] definierar Weyuker några mer generella egenskaper som mått bör ha. Hon presenterar dem i en slags stigande ordning av viktighet. De första egenskaperna är nödvändiga för att ett mått alls skall vara meningsfull och de senare är mer detaljerade. Exempelvis är den första egenskap hon presenterar: ( P )( Q)( P Q ) (1) P och Q är här program, eller stycken programkod. Egenskapen säger att det bör finnas program P och Q som ej har samma mätvärde. Uppenbarligen är ett mått som ger samma värde till alla program inte meningsfull. Weyuker fortsätter med att konstatera att ett mått bör bero på implementationen och inte på problemet som löses. Två program som beräknar samma sak har alltså ej nödvändigtvis samma mätvärde. Hon anser också att en sammanslagning av två kodstycken bör ha ett högre mätvärde är de enskilda kodstyckenas värden, enligt följande egenskap: ( P )( Q)( P P ; Q ) & ( Q P ; Q ) (2) Hon noterar att Halsteads ansträngnings-mått E ej har denna egenskap (Se 3.2). I sin slutsats konstaterar Weyuker att det i huvudsak finns två olika sätt att konstruera ett mått. Antingen ser man komplexiteten hos ett stort program som summan av komplexiteten för delarna, eller så undersöker man hur de olika delarna interagerar med varandra. 3 Några olika mått 3.1 McCabes cyklomatiska komplexitet McCabes cyklomatiska komplexitet utgår från ett programs kontrollflödesgraf och mäter hur många olika vägval exekveringen kan göra. En kontrollflödesgraf är en riktad graf och består av noder motsvarande olika sammanhängande stycken kod, och kanter motsvarande exekveringsvägar emellan dessa. Exempelvis kan programkoden i figur 1 översättas till grafen i figur 2. do { if (y) { A; } else { B; } } while (x); Figur 1: Simpelt kodexempel 4
5 Figur 2: Kontrollflödesgrafen för koden i figur 1 Den cyklomatiska komplexiteten V i en sådan graf G med n noder och e kanter definieras sedan som: V (G) = e n + 2 (3) Koden i figur 1 har då alltså komplexiteten 3. Ju lägre värde desto enklare kod, McCabe själv gör bedömningen att 10 är en lämplig övre gräns.[4] Värdet kan också räknas ut genom att helt enkelt räkna antalet if- loop- och liknande uttryck som finns i koden och addera 1. Helt rak kod ger följaktligen värdet 1 En modifikation av originaldefinitionen som många väljer att använda är att se switch-caseliknande strukturer som ett enda val. 3.2 Halsteads Halsteads mått är i själva verket ett par stycken olika; volym, svårighet och ansträngning.[7][1] Beräkningarna använder följande parametrar: n 1 antalet unika operatorer. n 2 antalet unika operander. N 1 det totala antalet operatorer. N 2 det totala antalet operander. Med hjälp av dessa definieras sedan ett programs volym V som: och svårighet D som: V = (N 1 + N 2 ) log 2 (n 1 + n 2 ) (4) D = (n 1 N 2 ) (2 n 2 ) Ansträngningen E för att implementera ett sådant program uppskattas sedan till: (5) E = D V (6) 5
6 Som nämdes i sektion 2 har måttet en svaghet i att en utökning av ett program teoretiskt kan minska mätvärdet E. Om man tänker sig en utökning som ökar antalet unika operander mycket men som bara använder dem en gång var så kan värdet på n 2 tänkas dubblas, medan N 2 endast ökar marginellt jämfört med dess gamla värde. På så sätt minskar värdet D vilket i vissa fall också leder till att hela E minskar. 3.3 Nästlingsdjup Piwowarski föreslår i [8] att komplexitetsmått även bör ta hänsyn till hur djupt nästlade uttryck i programmet är. En loop inuti en annan anses mer komplext än två loopar som följer efter varandra. McCabes cyklomatiska komplexitet tar ej hänsyn till detta utan dessa båda fall får samma värde. Piwowarski föreslår därför en utökning av måttet så att även tar hänsyn till hur denna struktur ser ut. N = V (G) + i P (i) (7) Där V (G) är den cyklomatiska komplexitet med switch-casesatser räknade som ett val, och där P (i) är nästlingsdjupet för ett uttryck i i programmet. 3.4 CKMetrics Chidamber och Kemerer beskriver i [9] en uppsättning mått specifikt utvecklade för objektorienterad programmering, som diskuterats vidare av andra [10][3]. De mått de kom fram till behövdes var följande: Metoder per klass. Arvsträds-djup. Exempelvis i javas fall hur många arvs-steg från Object. Antal barn, alltså klasser som ärver från en viss klass. Sammankoppling mellan klasser. C & K definierar sammankoppling som att en klass använder objekt av, eller kallar metoder på, en annan klass. En klass svar, vilket är mängden av alla metoder som kan tänkas kallas vidare när någon metod på klassen i sig kallas. 3.5 Diverse Några andra vanliga enklare mått: Antal parametrar till funktioner. Rader kod. Antal metoder per klass. Rader kod per metod / funktion. Dessa är ganska självklara och lätta att mäta och för alla gäller att ett mindre värde representerar ett mindre komplext program. 6
7 4 Test mot projektkod 4.1 Resultat För enkelhetens skull har vi valt ut ett fåtal mått att beräkna på de studentprojekt som finns att tillgå, specifikt nestningsdjup, cyklomatisk komplexitet per metod, och rader kod. Det finns 10 stycken olika projekt som ska ha ungefär samma funktionalitet och bör vara rimligt jämförbara. Måtten är framtagna med hjälp av en plugin till utvecklingsmiljön Eclipse som heter just Metrics. 1 TeamNr Nestningsdjup Cyklomatisk kompl. Rader kod 1 1,34 (max: 5) 1,57 (max: 10) ,59 (max: 5) 1,91 (max: 16) ,34 (max: 6) 1,61 (max: 9) ,44 (max: 5) 1,59 (max: 11) ,33(max: 4) 1,63(max: 10) ,21(max: 5) 1,41(max: 13) ,51(max: 4) 2,00(max: 14) ,49(max: 7) 1,68(max: 14) ,36(max: 4) 1,68(max: 14) ,36(max: 5) 1,62(max: 9) 1577 Figur 3: Mätvärden från studentprojekten Cyklomatisk komplexitet har som tidigare nämnt ett rekomenderat maxvärde på 10. Värt att nämna är att alla projekten har en sak gemensamt angående deras cyklomatiska komplexitet. De har alla en enda eller maximalt två olika metoder som har drastiskt mycket högre komplexitet än alla andra i programmet. Projekt 2 exempelvis har sitt maxvärde 16, men alla andra metoder utom denna har 7 eller mindre. Övriga projekt har liknande situationer. Ytterligare något att nämna är att i 6 av 10 projekt var den metod med högst cyklomatisk komplexitet också den metod med flest rader kod. 4.2 Slutsats Cyklomatisk komplexitet Efter att ha undersökt koden närmre handlar nästan alla fall av förhöjd komplexitet om någon typ av stränghantering. Projektet handlar om att samla in tid-data i textformat om förare i ett motorcykel-race och sammanställa denna som ett resultat, även detta i textformat. Det får därför anses förståeligt om än ej optimalt att det ser ut som det gör. En potentiell lösning hade varit att refaktorisera koden och införa några stycken mindre hjälpmetoder som då ansvarar för olika mindre moment av parsningen. Detta visar också att det viktigaste att titta på när det gäller måttet cyklomatisk komplexitet är maxvärdena och till mindre grad medelvärdena. Medelvärdena varierar från 1,41 till 2,00 medan maxvärdena spänner över intervallet 9 till 16. Tio små studentprojekt är förvisso inget stort sampel men det är vad som här fanns att tillgå och visar måttens möjligheter. 1 Finns att hämta på 7
8 4.2.2 Nestningsdjup Måttet nestningsdjup är inte fullt så spännande i detta resultat, dels varierar det mindre och dels är det färre ställen där det rekomenderade maxvärdet 5 överstigs. En majoritet av projekten har ej sin djupaste nestning i samma metod som deras högsta cyklomatisak komplexitet uppmätts så man kan konstatera att de två ej nödvändigtvis följs åt Rader kod Måttet rader kod togs med i hopp om att se ett samband mellan programmens storlek och deras övriga komplexitetsmått. Någon sådan går ej att finna i denna undersöknings data. Däremot, som nämnt i 4.1 så finns ett samband på metodnivå. 5 Måttens korrekthet 5.1 Studentprojekten För att undersöka hur bra komplexitetsmåtten fungerar ombads alla studenter involverade i projekten att identifiera de tre metoder i sitt eget projekt som de tyckte var minst överskådliga och rörigast. Tanken är att se hur bra måttens bedömning stämmer överens med den verkliga svårighetsgraden av att förstå koden. Tyvärr, på grund av bristfällig svarsfrekvens bland de tillfrågade så finns det inte så mycket data. Baserat på de svar som inkommit och viss diskution med enskilda studenter så anser vi dock att måtten fungerar dugligt. De metoder som komplexitetsmåtten identifierar som onödigt komplexa bedömes också vara det av människor. Det finns dock fler metoder som de tillfrågade anser komplexa som måtten ej lyckas identifiera. 5.2 Andras undersökningar Gordon utför i [11] en uppsättning experiment med Halsteads mått E av ansträngning. Han underesöker hur måttet påverkas av att ett program följer erkända best-practices såsom att undvika goto, ej ha för djupa loop-nästningar etc. Hans resultat visar att i majoriteten av fall så blir måttet bättre samtidigt som programkoden också blir lättare att förstå. Han hittar ett fåtal undantag men överlag fungerar måttet väl. 6 Slutord Behovet att objektivt mäta kod-kvalitet och komplexitet är en effekt av att programmering är komplicerat i sig. Med de mått som presenterats här kan man åtminstone någorlunda bedöma komplexitet, och framför allt identifiera källorna till denna. Måtten är på inga sätt felfria och det finns situationer där man bör ta dem med en nypa salt. Även om låga komplexitetsmått inte är en garanti för ett välorganiserat program så är höga värden ett tecken på att man bör undersöka källan till dessa närmre. Det är framför allt i att identifiera brister som måtten kommer till sin rätt. Baserat på den undersökning som gjorts 8
9 här ser man att måtten ej hittar alla brister i ett program, men de saker som identifieras som brister är i allmänhet det. Olika mått har olika strategier och fokus, och för en komplett bild bör man kombinera flera olika varianter. Acknowledgements Tack till Johan Wennersten för genomläsning och hjälp med formatering. 9
10 Referenser [1] J. P. Kearney, R. L. Sedlmeyer, W. B. Thompson, M. A. Gray, and M. A. Adler, Software complexity measurement, Commun. ACM, vol. 29, pp , November [2] S. Henry, D. Kafura, and K. Harris, On the relationships among three software metrics, SIGMETRICS Perform. Eval. Rev., vol. 10, pp , January [3] R. Subramanyam and M. Krishnan, Empirical analysis of ck metrics for object-oriented design complexity: implications for software defects, IEEE Transactions on Software Engineering, vol. 29, pp , april [4] T. McCabe, A complexity measure, IEEE Transactions on Software Engineering, vol. SE-2, pp , dec [5] M. Rafighi and N. Modiri, Framework of software complexity methodology, in Networked Computing and Advanced Information Management (NCM), th International Conference on, pp , june [6] E. Weyuker, Evaluating software complexity measures, IEEE Transactions on Software Engineering, vol. 14, pp , sep [7] M. H. Halstead, Elements of Software Science (Operating and programming systems series). New York, NY, USA: Elsevier Science Inc., [8] P. Piwowarski, A nesting level complexity measure, SIGPLAN Not., vol. 17, pp , September [9] S. Chidamber and C. Kemerer, A metrics suite for object oriented design, IEEE Transactions on Software Engineering, vol. 20, pp , jun [10] V. Basili, L. Briand, and W. Melo, A validation of object-oriented design metrics as quality indicators, IEEE Transactions on Software Engineering, vol. 22, pp , oct [11] R. Gordon, Measuring improvements in program clarity, IEEE Transactions on Software Engineering, vol. SE-5, pp , march
Kodkomplexitet i agil utveckling. Axel Nilsson Svegard, Patrick Fogwall EDA270 - Djupstudie 2 mars 2010
Kodkomplexitet i agil utveckling Axel Nilsson Svegard, Patrick Fogwall EDA270 - Djupstudie 2 mars 2010 Sammanfattning Denna studie avser att undersöka hur uppmätning av kodkomplexitet kan användas för
UTMANINGSBASERAT LÄRANDE I FÖRSTA PROGRAMMERINGSKURSEN
Fokus: Studenters lärande 2015, 26-27 nov, Malmö UTMANINGSBASERAT LÄRANDE I FÖRSTA PROGRAMMERINGSKURSEN Jeanette Eriksson, Olle Lindeberg BAKGRUND Programmering är en nyckelkompetens inom datavetenskap.
Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1
Algoritmer Lars Larsson VT 2007 Lars Larsson Algoritmer 1 1 2 3 4 5 Lars Larsson Algoritmer 2 Ni som går denna kurs är framtidens projektledare inom mjukvaruutveckling. Som ledare måste ni göra svåra beslut
Objektorienterad programmering, allmänt
Objektorienterad programmering, allmänt Sven-Olof Nyström Uppsala Universitet 17 juni 2005 1 Vilka egenskaper vill vi att program ska ha? Förslag (en partiell lista): De ska... gå snabbt att skriva vara
Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?
Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt Sven-Olof Nyström Uppsala Universitet 17 mars 2005 1. Korrekthet 2. Robusthet 3. Utökbarhet 4. Återanvändbarhet 5. Kompatibilitet
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator,
OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15-13:15
OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B03 170331 kl. 08:15-13:15 Ansvarig Lärare: Donald F. Ross Hjälpmedel: Inga. Algoritmerna finns i de respektive uppgifterna eller i bilagarna. *** OBS ***
Tentamen ID1004 Objektorienterad programmering October 29, 2013
Tentamen för ID1004 Objektorienterad programmering (vilande kurs), 29 oktober 2013, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner.
Objektorienterad analys och design
Objektorienterad analys och design Objektorienterad analys och design 1 Dagens föreläsning Första delen, innan rasten: Motivation och bakgrund Analys Funktioner Andra delen, efter rasten: Objektorienterade
PROGRAMMERING. Ämnets syfte. Kurser i ämnet
PROGRAMMERING Ämnet programmering behandlar hur mjukvaror skapas, anpassas och utvecklas samt programmeringens roll i informationstekniska sammanhang som datorsimulering och praktisk datoriserad problemlösning.
Spekulativ exekvering i CPU pipelining
Spekulativ exekvering i CPU pipelining Max Faxälv Datum: 2018-12-05 1 Abstrakt Speculative execution is an optimisation technique used by modern-day CPU's to guess which path a computer code will take,
Mälardalens högskola
Teknisk rapportskrivning - en kortfattad handledning (Version 1.2) Mälardalens högskola Institutionen för datateknik (IDt) Thomas Larsson 10 september 1998 Västerås Sammanfattning En mycket viktig del
OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1
Institutionen för Data- och informationsteknik JSk TENTAMEN OBJEKTORIENTERAD PROGRAMVARUUTVECKLING Övningstentamen 1 OBS! Det kan finnas kurser med samma eller liknande namn på olika utbildningslinjer.
Tentamen på kursen DA7351, Programmering 1. 051102, kl 08.15-12.15. Malmö högskola Teknik och samhälle. DA7351, Programmering 1 1 051102
Tentamen på kursen DA7351, Programmering 1 051102, kl 08.15-12.15 Tillåtna hjälpmedel: Valfri bok om Java. Vid bedömning av lösningarna tas hänsyn till om dessa uppfyller de krav på programkvalitet (strukturering,
Optimala koder. Övre gräns för optimala koder. Gränser. Övre gräns för optimala koder, forts.
Datakompression fö 3 p.3 Datakompression fö 3 p.4 Optimala koder Övre gräns för optimala koder En prefixkod kallas optimal om det inte existerar någon annan kod (för samma alfabet och sannolikhetsfördelning)
Tillämpad Programmering (ID1218) :00-13:00
ID1218 Johan Montelius Tillämpad Programmering (ID1218) 2014-03-13 09:00-13:00 Förnamn: Efternamn: Regler Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten.
Optimala koder. Det existerar förstås flera koder som har samma kodordsmedellängd. Enklaste fallet är att bara byta 0:or mot 1:or.
Datakompression fö 3 p.1 Optimala koder En prefixkod kallas optimal om det inte existerar någon annan kod (för samma alfabet och sannolikhetsfördelning) som har lägre kodordsmedellängd. Det existerar förstås
Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon
Introduktion till programmering med hjälp av Lego Mindstorm
Kungliga Tekniska Högskolan Introduktion till programmering med hjälp av Lego Mindstorm Laborationsrapport gällande programmering inom NXC Simon Jansson 31 08 2014 simonjan@kth.se Introduktionskurs i datateknik
Föreläsningsanteckningar F6
Föreläsningsanteckningar F6 Martin Andersson & Patrik Falkman Kortaste vägen mellan en nod och alla andra noder Detta problem innebär att givet en graf G = (E,V) hitta den kortaste vägen över E från en
Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur
Objekt-orienterad utveckling Saker man vill uppnå: Objektorienterad analys och design Sven-Olof Nyström Uppsala Universitet 16 mars 2005 en systematisk metod för att gå från problembeskrivning till färdigt
Objektorienterad programmering
Objektorienterad programmering Emil Ahlqvist (c10eat@cs.umu.se) Didrik Püschel (dv11dpl@cs.umu.se) Johan Hammarström (c08jhm@cs.umu.se) Hannes Frimmel Moström (c10hml@cs.umu.se) 1 1. Introduktion 1.1 Objektorienterad
Kodkomplexitet - Hur mäts det? Sara Nilsson D05, Lunds Tekniska Högskola 1 mars 2011
Kodkomplexitet - Hur mäts det? Sara Nilsson D05, Lunds Tekniska Högskola dt05sn2@student.lth.se 1 mars 2011 Sammanfattning Den här rapporten är tänkt för studenter med programmeringsvana och åtminstone
Tentamen i Objektorienterad modellering och design Helsingborg
Lunds Tekniska Högskola Datavetenskap Emelie Engström Tentamen EDAF25 2016 10-26, 08:00 13:00 Tentamen i Objektorienterad modellering och design Helsingborg Tentamen består av en teoridel om totalt 5 poäng
Föreläsning 5: Dynamisk programmering
Föreläsning 5: Dynamisk programmering Vi betraktar en typ av problem vi tidigare sett: Indata: En uppsättning intervall [s i,f i ] med vikt w i. Mål: Att hitta en uppsättning icke överlappande intervall
Statistik över heltal
Övningsuppgift Statistik över heltal Steg 2 Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande
Kursplanering Objektorienterad programmering
Kursplanering Objektorienterad programmering Fakta Ämne Programmering Poäng 40 Yh-poäng Kurskod YSYS-OOP Klass Systemutvecklare.NET 2 Syfte och koppling till yrkesrollen Syftet är att få en stabil grund
Beräkning med ord. -hur en dator hanterar perception. Linköpings universitet Artificiell intelligens 2 2010-10-03 Erik Claesson 880816-1692
Beräkning med ord -hur en dator hanterar perception 2010-10-03 Erik Claesson 880816-1692 Innehåll Inledning... 3 Syfte... 3 Kan datorer hantera perception?... 4 Naturligt språk... 4 Fuzzy Granulation...
Inledande programmering med C# (1DV402) Introduktion till C#
Introduktion till C# Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så här: Allt innehåll i
F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander
F5 Selektion och iteration ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Boolska uttryck Boolska uttryck använder sig av jämförelseoperatorer < > = ==!= Resultatets datatyp är boolean
Kodanalys med mjukvarumetriker
AKADEMIN FÖR TEKNIK OCH MILJÖ Avdelningen för industriell utveckling, IT och samhällsbyggnad Kodanalys med mjukvarumetriker En fältstudie hos Monitor ERP System AB Pontus Sund 2017 Examensarbete, Grundnivå
Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p
Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället
Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer
Föreläsning 5: Giriga algoritmer Kruskals och Prims algoritmer Spännande träd: Om G är en sammanhängande graf så är ett spännande träd ett träd som innehåller alla noder i V (G). Viantarattviharkantvikterw(e)
SKOLFS. beslutade den XXX 2017.
1 (11) Föreskrifter om ändring i Skolverkets föreskrifter (SKOLFS 2010:247) om ämnesplan för ämnet programmering i gymnasieskolan, inom kommunal vuxenutbildning på gymnasial nivå och inom vidareutbildning
Kopiering av objekt i Java
1 (6) Kopiering av objekt i Java Först När du läser detta papper bör du samtidigt studera dokumentationen för klasserna Object, Cloneable (java.lang) och ArrayList (java.util). Mycket blir klarare genom
Föreläsning 2 Datastrukturer (DAT037)
Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-02 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Tidskomplexitet
Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design Alex Gerdes, 2016 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon tripoly =
public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }
Rekursion 25 7 Rekursion Tema: Rekursiva algoritmer. Litteratur: Avsnitt 5.1 5.5 (7.1 7.5 i gamla upplagan) samt i bilderna från föreläsning 6. U 59. Man kan definiera potensfunktionen x n (n heltal 0)
Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper
Tentamen Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer
OBJEKTORIENTERAD PROGRAMVARUUTVECKLING
Institutionen för Data- och informationsteknik TENTAMEN OBJEKTORIENTERAD PROGRAMVARUUTVECKLING OBS! Det kan finnas kurser med samma eller liknande namn på olika utbildningslinjer. Denna tentamen gäller
Beräkningsvetenskap introduktion. Beräkningsvetenskap I
Beräkningsvetenskap introduktion Beräkningsvetenskap I Kursens mål För godkänt betyg ska studenten kunna redogöra för de nyckelbegreppen som ingår i kursen* utföra enklare analys av beräkningsproblem och
IT OCH PROGRAMMERING I SKOLAN. Jan Erik Moström Peter Vinnervik
IT OCH PROGRAMMERING I SKOLAN Jan Erik Moström Peter Vinnervik VILKA ÄR VI OCH VAD KOMMER VI ATT PRATA OM? Jan Erik Moström - undervisar på institutionen för datavetenskap Peter Vinnervik - doktorand vid
Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt
Föreläsning 2 Programmeringsteknik och C DD1316 Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C Python introduktion Utskrift Inläsning Variabler Datatyp Aritmetiska operatorer Omvandling
F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander
F9 - Polymorfism ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Polymorfism - flerformighet Vi vet vad metoden heter (signaturen) Men vi vet inte vid anropet exakt vilken metod som faktiskt
Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14.
Tentamen 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14.00, sal D31 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel
Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo
Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till
Mer källkod. Styrstrukturer Val Slingor Operatorer Källkodsexempel med minne. Erik Forslin. Rum 1445, plan 4 på Nada
Mer källkod Styrstrukturer Val Slingor Operatorer Källkodsexempel med minne Erik Forslin efo@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 1 Styrstrukturer i Java En styrstruktur är något som påverkar
Laboration: Grunderna i MATLAB
Laboration: Grunderna i MATLAB 25 augusti 2005 Grunderna i MATLAB Vad är MATLAB? MATLAB är ett interaktivt program för vetenskapliga beräkningar. Som användare ger du enkla kommandon och MATLAB levererar
Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer
Föreläsning 5: Giriga algoritmer Kruskals och Prims algoritmer Spännande träd: Om G är en sammanhängande graf så är ett spännande träd ett träd som innehåller alla noder i V (G). Viantarattviharkantvikterw(e)
Säkerhetslagrets andel av beställningspunkten som funktion av ledtid
Säkerhetslagrets andel av beställningspunkten som funktion av ledtid Stig-Arne Mattsson Sammanfattning I den här studien har en analys gjorts av säkerhetslagrets andel av beställningspunkten som funktion
Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4
Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 014-015 Denna lektion ska vi studera rekursion. Lektion 4 Principen om induktion Principen om induktion är ett vanligt sätt att bevisa
Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.
Objektorienterad programmering E Telefonboken, än en gång Föreläsning 5 Wrapper classes Exempel, histogram. Inldening om undantag. Mer om klassen Påminnelse Vår senaste version bestod av två klasser, bägge
Beräkningsvetenskap introduktion. Beräkningsvetenskap I
Beräkningsvetenskap introduktion Beräkningsvetenskap I Kursens mål För godkänt betyg ska studenten kunna redogöra för de grundläggande begreppen algoritm, numerisk metod, diskretisering maskinepsilon,
Föreläsning 1: Intro till kursen och programmering
Föreläsning 1: Intro till kursen och programmering Kursens hemsida http:www.it.uu.se/edu/course/homepage/prog1/vt11 Studentportalen http://www.studentportalen.uu.se Lärare: Tom Smedsaas, Tom.Smedsaas@it.uu.se
Dagens föreläsning (F15)
Dagens föreläsning (F15) Problemlösning med datorer Carl-Mikael Zetterling bellman@kth.se KP2+EKM http://www.ict.kth.se/courses/2b1116/ 1 Innehåll Programmering i Matlab kap 5 EKM Mer om labben bla Deluppgift
Programmering B med Visual C++ 2008
Programmering B med Visual C++ 2008 Innehållsförteckning 1 Repetition och lite nytt...5 I detta kapitel... 5 Programexekvering... 5 Loop... 5 Källkod... 6 Verktyg... 6 Säkerhetskopiera... 6 Öppna, kompilera,
Skapa en generell informationsmodell?
Sven-Håkan Olsson Konsult, arkitekt och utvecklare Oberoende konsult och teknikentreprenör Skapa en generell informationsmodell? Sven-Håkan Olsson måndag 11 aug 14 TEKNIK En generell, kanonisk informationsmodell
Objektorienterad programmering Föreläsning 2
Objektorienterad programmering Föreläsning 2 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Inläsning av data via dialogrutor Repetitioner (While-satsen och For-satsen) Nästlade
TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15
TENTAMEN I PROGRAMSPRÅK -- DVG C01 140605 kl. 08:15-13:15 Ansvarig Lärare: Donald F. Ross Hjälpmedel: Bilaga A: BNF-definition Betygsgräns: Kurs: Max 60p, Med beröm godkänd 50p, Icke utan beröm godkänd
TDDD92 Artificiell intelligens -- projekt
jonas.kvarnstrom@liu.se 2018 TDDD92 Artificiell intelligens -- projekt Individuella uppgifter UPG2: Individuell skriftlig rapport 2 Vad? Läsa och förstå vetenskaplig litteratur Varför? Framtiden: Inte
Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?
Introduktion till objektorientering Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? TDDD78, TDDE30, jonas.kvarnstrom@liu.se 729A85 jonas.kvarnstrom@liu.se
Imperativ programmering. Föreläsning 2
Imperativ programmering 1DL126 3p Föreläsning 2 Imperativ programmering Kännetecken för imperativa språk: Programmet består av en serie instruktioner. Olika språk har olika uppsättningar av instruktioner.
Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)
Objektorienterad programmering Föreläsning 8 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda (halvdag) Objektorienterad programutveckling Algoritmer Algoritmkonstruktionerna Relationer
Objektorienterad programmering, analys och design med Java, 5p 2D4135, vt 2004. Kursprogram
Objektorienterad programmering, analys och design med Java, 5p 2D4135, vt 2004 Kursprogram Kursens mål är att ge dig kunskaper om begreppen och principerna inom objektorienterad programmering och design
DAT043 Objektorienterad Programmering
DAT043 Objektorienterad Programmering Detta är en exempeltenta som innehåller gamla tentauppgifter av ungefär liknande slag som ni kan förvänta er se på ordinarie tenta i Del 1 respektive Del 2. Dock är
Anujan Balasingam IDA14 NAND flashminnen
Anujan Balasingam IDA14 NAND flashminnen Hur kan prestandan och kapaciteten förbättras? Kursansvarig: Erik Larsson Datorarkitektur med operativsystem 7,5 hp 04-12-2015 Innehållsförteckning 1. Inledning...
Personal. Objektorienterad programmeringsmetodik 5DV133. Kursmål. Kursens uppläggning. Lärare. Handledare och gruppövningar.
Personal Objektorienterad programmeringsmetodik 5DV133 Java VT-16 1 Lärare Anders Broberg, anders.broberg@cs.umu.se Handledare och gruppövningar Niklas Fries Adam Dalhgren Jonathan Westin Erik Moström
Programmering = modellering
Programmering = modellering Ett datorprogram är en modell av en verklig eller tänkt värld. Ofta är det komplexa system som skall modelleras I objektorienterad programmering består denna värld av ett antal
Inlämning 3 IKOT 2011. Gruppmedlemmar. Marcus Anemo Simon Hall Kristoffer Johnsen Abedin Karalic Lian Hong Zheng. Handledare.
IKOT 2011 Gruppmedlemmar Marcus Anemo Simon Hall Kristoffer Johnsen Abedin Karalic Lian Hong Zheng Handledare Göran Brännare 2 Innehållsförteckning 1 Voice of the Customer... 3 1.1 Bakgrund... 3 1.2 Resultat
F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander
F6 Objektorienterad design ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se långa ord AKTIVITETER I PROGRAMVARUUTVECKLING Iterativ utveckling Kravspecifikation Design Implementation Testning
Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.
Tentamen 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.00, sal E33 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel
Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering...
Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering... 4 Bussen (projektförslag)... 5 Bakgrund... 5 Klassen Buss
Objektorienterad analys och design
Objektorienterad analys och design Sven-Olof Nyström Uppsala Universitet 16 mars 2005 1 Objekt-orienterad analys och design: Litteratur Skansholm: Kapitel 4 Se även 1. http://www.uml.org/ 2. http://www-306.ibm.com/software/rational/uml/
Föreläsning 4: Giriga algoritmer. Giriga algoritmer
Föreläsning 4: Giriga algoritmer Giriga algoritmer Denna typ av algoritmer arbetar efter följande princip: Gör i varje situation det som är lokalt optimalt, d.v.s. bäst för stunden. Några exempel vi redan
Tentamen Datastrukturer (DAT036)
Tentamen Datastrukturer (DAT036) Det här är inte originaltesen. Uppgift 6 var felaktigt formulerad, och har rättats till. Datum och tid för tentamen: 2011-12-16, 8:30 12:30. Ansvarig: Nils Anders Danielsson.
Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering
Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk
Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg niklas.broberg@chalmers.
Programmering Seminarier i datavetenskap, datorteknik och informationsteknik Niklas Broberg niklas.broberg@chalmers.se 2015-09-24 Hur många från Datavetenskap? Datateknik? Informationsteknik? Översikt
MMA132: Laboration 2 Matriser i MATLAB
MMA132: Laboration 2 Matriser i MATLAB Introduktion I den här labben skall vi lära oss hur man använder matriser och vektorer i MATLAB. Det är rekommerad att du ser till att ha laborationshandledningen
Introduktion. Byggstenar TDBA63 2005-11-22
Introduktion UML står för Unified Modeling Language. Det är tänkt att fungera som hjälpmedel vid modellering av alla tänkbara typer av utvecklingsarbeten, inte bara inom dataomdrådet. Det största värdet
Inledande programmering med C# (1DV402) Introduktion till programmering
Introduktion till programmering Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så här: Allt
Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner
Introduktion till programmering D0009E Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner
Tentamen i Introduktion till programmering
Tentamen i Introduktion till programmering Kurskod: Skrivtid: D0009E 09:00-13:00 (4 timmar) Totalt antal uppgifter: 7 Totalt antal poäng: 38 Tentamensdatum: 2014-05-17 Jourhavande lärare: Tillåtna hjälpmedel:
TENTAMEN I DATAVETENSKAP
Umeå Universitet Datavetenskap Marie Nordström Thomas Johansson Jürgen Börstler 030124 TENTAMEN I DATAVETENSKAP PROGRAMMERINGSMETODIK OCH PROGRAMMERING I JAVA, 5P. (TDBA63) Datum : 030124 Tid : 9-15 Hjälpmedel
UML 1(5) Introduktion till Unified Modeling Language. 1 Bakgrund och historik
UML 1(5) Introduktion till Unified Modeling Language 1 Bakgrund och historik UML är ett objektorienterat modellspråk för att specificera och visualisera system. Det är framtaget i första hand för IT-orienterade
Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor
Abstrakta datatyper 1 Primitiva vektorer Vektorer kan skapas av primitiva datatyper, objektreferenser eller andra vektorer. Vektorer indexeras liksom i C från 0. För att referera en vektor används hakparenteser.
Precis som var fallet med förra artikeln, Geogebra för de yngre i Nämnaren
Publicerad med tillstånd av Nämnaren Thomas Lingefjärd Geogebra i gymnasieskolan En tilltalande egenskap med Geogebra är att programmet kan användas tvärs över stora delar av utbildningssystemets matematikkurser.
TDDI16 Datastrukturer och algoritmer. Algoritmanalys
TDDI16 Datastrukturer och algoritmer Algoritmanalys 2017-08-28 2 Översikt Skäl för att analysera algoritmer Olika fall att tänka på Medelfall Bästa Värsta Metoder för analys 2017-08-28 3 Skäl till att
Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock
Inledning Vad är ett datorprogram, egentligen? Olika språk Problemlösning och algoritmer 1 (14) Varför använda en dator? Genom att variera de program som styr datorn kan den användas för olika uppgifter.
Tentamen, EDA501/EDAA20 Programmering M MD W BK L
LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen, EDA501/EDAA20 Programmering M MD W BK L 2017 05 31, 8.00 13.00 Anvisningar: Preliminärt ger uppgifterna 9 + 12 + 10 + 9 = 40 poäng.
LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p
UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det
Föreläsning 1: Intro till kursen och programmering
Föreläsning 1: Intro till kursen och programmering λ Kursens hemsida http:www.it.uu.se/edu/course/homepage/prog1/mafykht11/ λ Studentportalen http://www.studentportalen.uu.se UNIX-konton (systemansvariga
Ingenjörsinriktad yrkesträning
Ingenjörsinriktad yrkesträning Olivia Eldh V07 2010-08-27 Lunds Tekniska Högskola Väg och vattenbyggnad Sweco Structures Sweco är ett internationellt konsultföretag med samlad kunskap inom teknik, miljö
Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson
1 2 - Block, räckvidd Dagens föreläsning Programmering i Lisp - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning - Felhantering (kap 17) icke-normala återhopp catch
Antennförstärkare för UHF-bandet
Antennförstärkare för UHF-bandet Radioprojekt 2004 Elektrovetenskap, LTH Mats Rosborn Henrik Kinzel 27 Februari Referat Den här rapporten beskriver arbetet med konstruktion och utvärdering av en fungerande
Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg
Programmering Seminarier i datavetenskap, datorteknik och informationsteknik Niklas Broberg niklas.broberg@chalmers.se 2017-09-21 Hur många från Datavetenskap? Datateknik? Informationsteknik? Översikt
Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic
Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic Inledning Starta Microsoft Visual Studio 2005. Välj create Project Välj VB + Vindows Application och välj ett nytt
Distribuerade affärssystem
Distribuerade affärssystem Kursens mål Bygga upp, strukturera och programmera distribuerade system med en flerskiktsarkitektur Beskriva och förklara teorier och uttryck som används inom affärskritiska
Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion
Introduktion till programmering Föreläsning 4: Villkor och rekursion 1 1 Några inbyggda funktioner (med resultat!) Konverterar mellan de grundläggande typerna: >>> int("32") 32 >>> int(3.999) 3 >>> float(32)
HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN)
Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061) HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN) Dagens agenda Admin Tentatid och plats Tillåtet på tentan EDAF10 Föreläsning inför XL-projektet