Skip to main content

Opdracht 1: Rekenmachine

Je zit op je opdracht in een nieuw project. Voor dit project moet een rekenmachine worden gebouwd. Dit moet je doen door gebruik te maken van Behaviour-Driven development BDD. Vanuit de business heb je de volgende vier requirements gekregen.

Requirements

  • Optellen: de rekenmachine moet twee of meer getallen bij elkaar op kunnen tellen, met ondersteuning voor decimalen en negatieve waarden.

  • Aftrekken: de rekenmachine moet het ene getal van het andere af kunnen trekken, inclusief decimalen en negatieve waarden.

  • Vermenigvuldiging: de rekenmachine moet twee of meer getallen met elkaar kunnen vermenigvuldigen, waarbij decimalen en negatieve waarden worden ondersteund.

  • Delen: de rekenmachine moet het ene getal door het andere kunnen delen, met ondersteuning voor decimalen en het omgaan met deling door nul-fouten.

IMPORTANT NOTE: Voordat we gaan beginnen, straks gaan we gebruiken maken van ChatGPT, controleer zelf het antwoordt dat wordt teruggegeven door ChatGPT! De gegeneerde code is namelijk niet altijd 100% correct, maar geeft je een zetje in de goede richting. Dit zorgt voor een kritische blik op wat je laat genereren.

1.1 Cucumber Feature file maken.

Een feature file beschrijft een scenario in begrijpelijke mensentaal. In die feature file wordt het gewenste gedrag beschreven welke stappen er genomen dienen te worden om tot een bepaald resultaat te komen.

Een voorbeeld van een feature file ziet er uit als volgt:

Scenario: Scenarionaam
Given I have one pizza
And Cut the pizza in 8 slices
When I eat 2 slices
Then The result is 6 slices left
  • Opdracht 1.1A: Genereer een Cucumber feature file met de gegeven requirements in ChatGPT.

  • Opdracht 1.1B: Als de feature file is gegenereerd, kan je de gegenereerde code kopiëren. Plak de code in een bestand in de hoofdfolder genaamd calculator.feature. Maak dit bestand eerst aan.

1.2 Maak een step file aan

Een step file is een bestand dat de implementatie van de stappen beschrijft die in een scenario zijn gedefinieerd.

De step file koppelt de stappen uit de Gherkin-scenario's aan de daadwerkelijke Python file voor de calculator in dit geval. De step file kan gezien worden als de koppeling tussen de uiteindelijke implementatie en de feature file met Gherkin.

Een step file in Python wordt geschreven als een Python file met behulp van Behave package. Dit bestand bevat methoden die zijn geannoteerd door specifieke Cucumber-annotaties, zoals @Given, @When, @Then, @And en @But.

  • Opdracht 1.2A: Maak een nieuwe folder aan in de hoofdfolder genaamd steps.

  • Opdracht 1.2B: Maak een nieuw bestand aan in de steps folder genaamd stepfile.py.

Aangezien ChatGPT de context van de chat gebruikt, is het niet nodig om opnieuw context mee te geven aan de vraag die je stelt aan ChatGPT.

Hint: Vraag aan ChatGPT of deze de step file wilt genereren in Python en plaats deze in de stepfile.py.

1.3 Calculator applicatie

Tot slot, om de cucumber testen te laten slagen is de python code nodig voor de calculator zelf. Dit kan je doen op dezelfde manier als bij opdracht 1.1 & 1.2.

  • Opdracht 1.3A: Verander de naam van main.py naar Calculator.py.

  • Opdracht 1.3B: Plak de gegeneerde code door ChatGPT in het Calculator.py bestand.

1.4 run test

  • Opdracht: Om te kijken of de testen nu slagen kan je in de terminal behave uitvoeren

Als alles in een keer goed gaat, heb je nu geen gefaalde testen. Echter bestaat er een mogelijkheid dat er toch iets fout gaat. Als dit zo is dan kan je proberen om de foutmelding in ChatGPT te geven samen met de methode waar het fout gaat. Dan kan ChatGPT dit in sommige gevallen oplossen.

Lukt het niet? Probeer er dan achter te komen wat er mis gaat en het zelf op te lossen of vraag iemand met een the/experts-shirt om hulp.

1.5 Uitbreiden

Herhaal bovenstaande stappen en voeg extra functionaliteit toe aan de calculator voor de volgende zes requirements. Let op, als je hier niet aan uit komt, ga vooral verder met opdracht 2.

  • Machtsverheffing: De rekenmachine moet een getal tot een gegeven macht kunnen verheffen, inclusief fractionele en negatieve exponenten.

  • Vierkantswortel: De rekenmachine moet de vierkantswortel van een gegeven getal kunnen berekenen, met de mogelijkheid voor zowel positieve als negatieve invoerwaarden.

  • Functie van een getal: De rekenmachine moet de functie van een niet-negatief geheel getal kunnen berekenen.

  • Logaritmes: De rekenmachine moet natuurlijke logaritmes (basis e) en gemeenschappelijke logaritmes (basis 10) van positieve getallen kunnen berekenen.

  • Trigonometrie: De rekenmachine moet de sinus, cosinus en tangens van hoeken kunnen berekenen, met ondersteuning voor zowel radialen als graden.