5 ECTS credits
150 u studietijd

Aanbieding 1 met studiegidsnummer 3019948BNW voor werkstudenten 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
Inschrijven voor deze aanbieding is enkel mogelijk voor studenten die als werkstudent geregistreerd staan of die geregistreerd staan met een toelating om de specifieke lessen voor werkstudenten te volgen. Gewone studenten kunnen niet inschrijven voor de lessen behorend bij deze aanbieding, zij kunnen enkel lessen volgen van aanbiedingen waarvan het studiegidsnummer eindigt op een R. Bij vragen of problemen, neem contact op met het Studenten Administratie Centrum via SAC@vub.ac.be.
Onderwijstaal
Nederlands
Faculteit
Faculteit Wetenschappen en Bio-ingenieurswetensch.
Verantwoordelijke vakgroep
Computerwetenschappen
Onderwijsteam
Coen De Roover (titularis)
Onderdelen en contacturen
26 contacturen Hoorcollege
26 contacturen Werkcolleges, practica en oefeningen
125 contacturen Zelfstudie en externe werkvormen
Inhoud

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.
 
Inhoud
 

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 
Bijkomende info

  

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 examen over theorie met een wegingsfactor 50 en aldus 50% van het totale eindcijfer.

    Toelichting: Mondeling examen met schriftelijke voorbereiding over de theorie.

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

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

    Toelichting: Project waarin een bestaand softwaresysteem in groepsverband uitgebreid moet worden met een aantal functionaliteiten die door de klant gevraagd worden. 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.

    Voor de tweede zittijd worden nieuwe groepen samengesteld. De groepsopdracht is eveneens verschillend.

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.
 
Afwezigheid voor een van bovenstaande examenonderdelen impliceert afwezigheid voor het volledige examen. 
 

 

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 ingenieurswetenschappen: elektronica en informatietechnologie Profiel profiel computerwetenschappen
Voorbereidingsprogramma Master of Science in de ingenieurswetenschappen: computerwetenschappen: Traject C (Ind Ing, 61 ECTS)
Voorbereidingsprogramma Master of Science in de ingenieurswetenschappen: computerwetenschappen: Traject A (76 ECTS)
Voorbereidingsprogramma Master of Science in de ingenieurswetenschappen: computerwetenschappen: Traject B (65 ECTS)
Voorbereidingsprogramma Master of Science in de toegepaste informatica: Traject C (Ind Ing, 58 ECTS)
Voorbereidingsprogramma Master of Science in de toegepaste informatica: Traject A (58 ECTS)
Voorbereidingsprogramma Master of Science in de toegepaste informatica: Traject B (52 ECTS)