6 ECTS credits
180 u studietijd

Aanbieding 2 met studiegidsnummer 1020372BNR voor alle studenten in het 1e semester met een verdiepend bachelor niveau.

Semester
1e semester
Inschrijving onder examencontract
Niet mogelijk
Beoordelingsvoet
Beoordeling (0 tot 20)
2e zittijd mogelijk
Ja
Inschrijvingsvereisten
Studenten Computerwetenschappen die dit opleidingsonderdeel opnemen, moeten geslaagd zijn voor "Objectgericht programmeren".
Onderwijstaal
Nederlands
Faculteit
Faculteit Wetenschappen en Bio-ingenieurswetensch.
Verantwoordelijke vakgroep
Computerwetenschappen
Onderwijsteam
Coen De Roover (titularis)
Onderdelen en contacturen
0 contacturen Exam
26 contacturen Lecture
75 contacturen Practical exercises
135 contacturen Self study
Inhoud
Beknopte beschrijving
 
Software engineering wordt omschreven als de studie en de toepassing van een systematische, gedisciplineerde, en kwantificeerbare aanpak voor het ontwikkelen, exploiteren, en onderhouden van grote softwareproducten. We bestuderen de fundamenten van deze ingenieursdiscipline tijdens de hoorcolleges, en vergaren expertise in het toepassen van de fundamenten tijdens de werkcolleges. De verworven kennis en vaardigheden worden getoetst via een theorie-examen enerzijds en een in groepsverband te vervolledigen uitbreiding aan een bestaand softwaresysteem anderzijds. Als objectgerichte programmeertaal wordt Scala gehanteerd. 
 
We starten onze verkenning met de typische fases in het software engineering proces, vertrekkende van het initiële verzamelen van vereisten van de klant gaande tot het onderhouden van de software na oplevering. We bespreken de voordelen en de nadelen van traditionele en hedendaagse procesmodellen die voorgesteld zijn om elke fase te organiseren en te plannen. De rest van de cursus bespreekt de fases van ontwerpen, implementeren, en testen in detail. Doorheen de cursus benadrukken we het belang van empirisch onderzoek om koppige mythes over wat wel en wat niet werkt in software engineering te ontkrachten of the bevestigen. 
 
De ontwerpfase wordt eerst behandeld. We gebruiken contracten voor de specificatie van invarianten, pre-condities en post-condities waaraan de interface tussen objectgerichte deelontwerpen moet voldoen. Vervolgens bestuderen we de principes waaraan objectgerichte ontwerpen van hoge kwaliteit voldoen. Deze principes illustreren we aan de hand van de zogenaamde "design patterns". Dit zijn patronen van bewezen oplossingen voor vaak voorkomende ontwerp-problemen. 
 
Vervolgens richten we onze aandacht op de verschillende artefacten die door een ontwikkelingsteam geproduceerd worden. Veranderingen aan deze artefacten moeten gecoördineerd worden tussen ontwikkelaars die hen mogelijk concurrent kunnen bewerken. Daarom bestuderen we de in gedistribueerd versiebeheer gangbare branching en merging strategieën. Vervolgens behandelen we het opzetten van pipelines voor continuous integration en continuous delivery die via doorgedreven automatisatie en monitoring leiden tot meer betrouwbare releases en kortere release cycles. 
 
Testen is de laatste fase van het software engineering proces die we bestuderen. We bespreken technieken die systematisch het gedrag van een product vergelijken met een orakel. We bestuderen hoe individuele eenheden in isolatie getest kunnen worden aan de hand van mocking, en hoe testen automatisch gegenereerd kunnen worden vanuit specificaties. Ten slotte gaan we na welke metrieken ontwikkeld zijn om de kwaliteit van een gegeven test suite te beoordelen. Deze gaan van metrieken die meten hoe veel van de applicatie onder test door de test suite uitgevoerd wordt, maar ook metrieken die meten of de test suite wel waarschuwt over defecten die met opzet gezaaid zijn in het systeem onder test.
 
 
Inhoudstafel
 
1. Software Engineering Process
  • Writing Programs versus Engineering Software
  • Process Models: Historical, Plan-driven (RUP), Agile (Scrum)  
  • Empirical Research in Software Engineering Practices
2. Object-Oriented Software Design 
  • Design-by-Contract: Contract Specification (Class Invariants, Method Pre-conditions and Post-conditions), Enforcement, Inheritance
  • Object-Oriented Design Principles: Single-Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion
  • Design Patterns: Strategy, State, Decorator, Proxy, Template Method, Factory Method, Composite, Observer, Visitor, Abstract Factory 
3. Professional Software Construction
  • Configuration Management: Version Control Repositories, Branching and Merging Strategies, Artefact Repositories
  • Release Management: Pipelines for Continuous Integration, Continuous Delivery, Continuous Experimentation 
  • Quality Control: Manual and Tool-supported Code Inspection, Code Smells and Refactoring
4. Software Testing
  • Unit and Integration Tests: Oracles, Test Stubs and Mocks, Property-based Testing  
  • Functional Tests: Test Selection, Test Automation, Test Maintenance
  • Test Adequacy Metrics: Coverage (Block, Branch, Edge, Loop, Path, Definition-Use Pairs) and Fault-Seeding Metrics

5. Assessing Implementations

  • Defining Metrics: Measurement Framework, Goal-Question-Metric Approach 
  • Basic Design Metrics: Size and Complexity Metrics, Coupling and Cohesion Metrics, Object-Oriented Metrics
  • Applying Metrics: Overview Pyramid, Design Smells, Polymetric Views 

 

Studiemateriaal
Handboek (Aanbevolen) : Essentials of Software Engineering, Frank Tsui, Orlando Karam, Barbara Bernal, 4de, Jones & Bartlett Learning, 9781284106008, 2016
Digitaal cursusmateriaal (Aanbevolen) : Slides van de hoorcolleges, Canvas
Handboek (Aanbevolen) : Design Patterns, Elements of Reusable Object-Oriented Software, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, 1ste, Addison-Wesley Professional, 9780201633610, 1994
Handboek (Aanbevolen) : Continuous Delivery, Reliable Software Releases through Build, Test, and Deployment Automation, Jez Humble, David Farley, 1ste, Addison-Wesley Professional, 9780321601919, 2010
Bijkomende info

Geen

Leerresultaten

Algemene competenties

De doelstellingen van dit opleidingsonderdeel zijn:  
  • Studenten verwerven fundamentele kennis over gedisciplineerde en kwantificeerbare aanpakken voor het ontwikkelen, uitbaten en langdurig onderhouden van grootschalige software in groepsverband. 
  • Studenten worden vaardig in het toepassen van instrumenten om zulke software te ontwikkelen, om de voortgang van de gebruikte ontwikkelingsaanpak op te volgen, en om de kwaliteit van de resulterende software objectief te meten. 
  • Studenten ontwikkelen de attitudes vereist om opdrachten in groepsverband op professionele wijze, en naar industriële normen, uit te voeren. 
 
De hieraan gekoppelde leerresultaten zijn: 
 
m.b.t. het herinneren en begrijpen van kennis:
  • De student kan de in de lessen aangehaalde ontwikkelingsaanpakken opsommen, beschrijven, en motiveren.   
  • De student kan voor de ontwikkelingsaanpakken de verantwoordelijkheden van elke professionele rol binnen een ontwikkelingsteam opsommen.
  • De student kan aan de hand van codevoorbeelden voor elk ontwerppatroon, concrete situaties illustreren waarin het gebruik van dit patroon gepast is. 
  • De student kan de verschillende instrumenten benodigd voor de industriële praktijken van “continuous integration” en “continuous delivery” opsommen, beschrijven, en motiveren. 
  • De student kan de rol van de verschillende vormen van software testen binnen een ontwikkelingsaanpak beschrijven
  • De student kan de definities reproduceren van de behandelde proces-metrieken en test-metrieken om respectievelijk de voortgang van het ontwikkelingsproces en de kracht van de bijhorende testen objectief te meten. 
m.b.t. het toepassen van kennis:
  • De student kan zelfstandig gebruik maken van de in de werkcolleges aangehaalde instrumenten die het ontwikkelen van software in groepsverband ondersteunen. 
m.b.t. analyseren:
  • De student is in staat om in toekomstige instrumenten voor het ontwikkelen van software variaties op en combinaties van bestaande te herkennen. 
  • De student kan de verschillende soorten van risico’s die zich stellen bij het ontwikkelen van grootschalige software herkennen en aangeven met welke aanpakken, technieken en instrumenten er het best mee omgegaan kan worden.
m.b.t evalueren: 
  • De student kan door derden ontwikkelde software begrijpen en hierin de toegepaste ontwerppatronen herkennen en aanpassen.
  • De student kan de kwaliteit van een gegeven ontwerp en van een gegeven ontwikkelingsproces evalueren, binnen een concrete context. 
  • De student kan concrete instrumenten voor het berekenen van proces-metrieken en test-metrieken inzetten doorheen het ontwikkelingsproces en waar nodig tijdig bijsturen. 
m.b.t. creëren:
  • De student kan zowel schriftelijk als mondeling rapporteren over een ontwikkelingsproject, en de daarbij gemaakte technische en beleidskeuzes motiveren. 
  • De student is in staat om volgens het “agile” ontwikkelingsprocesmodel in groepsverband mee te werken aan een uitbreiding van een grootschalig softwaresysteem naar wensen van een klant.
 

Beoordelingsinformatie

De beoordeling bestaat uit volgende opdrachtcategorieën:
Examen Mondeling bepaalt 50% van het eindcijfer

Examen Praktijk bepaalt 50% van het eindcijfer

Binnen de categorie Examen Mondeling dient men volgende opdrachten af te werken:

  • Mondeling theorie-examen met een wegingsfactor 100 en aldus 50% van het totale eindcijfer.

    Toelichting: Mondeling examen met schriftelijke voorbereiding over de theorie (50%).

Binnen de categorie Examen Praktijk dient men volgende opdrachten af te werken:

  • Groepsproject met een wegingsfactor 100 en aldus 50% van het totale eindcijfer.

    Toelichting: Project waarin een bestaand softwaresysteem in groepsverband uitgebreid moet worden met een aantal door de klant gevraagde functionaliteiten (50%). Ontwerp, implementatie, en testen moet geschieden volgens een agile software engineering proces. Het individuele cijfer op dit groepswerk wordt bepaald door: a) de mate waarin de ontwikkelingsaanpak gedisciplineerd verliep, b) de kwaliteit van de opgeleverde software, c) de kwaliteit van de gebruikte testen, d) een schriftelijk rapport waarin de voorgaande punten aangesneden worden, en e) een mondelinge verdediging van de individuele bijdrage aan het project.

Aanvullende info mbt evaluatie

Studenten dienen minimaal 7/20 te halen voor zowel het mondeling examen als voor het project. Anders geldt de laagste score voor deze onderdelen als eindresultaat.

Voor de tweede zittijd worden nieuwe groepen samengesteld. De groepsopdracht is eveneens verschillend. 
 
 
 
Toegestane onvoldoende
Kijk in het aanvullend OER van je faculteit na of een toegestane onvoldoende mogelijk is voor dit opleidingsonderdeel.

Academische context

Deze aanbieding maakt deel uit van de volgende studieplannen:
Bachelor in de computerwetenschappen: Standaard traject