2. Course Project
Programming Project 2022/23

2.4. Requirements

Although you are free to choose what to do, your project should satisfy all the requirements listed in this section.

Programming techniques

Your project must use at least 10 of the programming techniques listed below.

  1. Interfaces
  2. Abstract classes
  3. Generics methods
  4. Generic classes
  5. Varargs
  6. Collections
  7. Custom exceptions
  8. Try-catch blocks
  9. Method overriding
  10. Method overloading
  11. Lambda expressions
  12. Streams
  13. Optionals
  14. File I/O
  15. Serialization (to JSON, XML, CSV)
  16. Deserialization (from JSON, XML, CSV)
  17. HTTP
  18. Regular expressions
  19. Multithreading
  20. Thread signaling
  21. Resource sharing (between threads)
  22. Asynchronous programming
  23. Design patterns (each pattern counts as one technique)
  24. Test hooks (e.g. @beforeAll, @beforeEach)
  25. Logging
  26. Casting
  27. Graphical user interface (e.g. JavaFX)

Artificial usage of techniques just to meet the quota will not be accepted.

Create a .gitignore file

You should add and configure a .gitignore file on the root of your git repository so that it indicates to git the files that should not be tracked.

This means that we expect your repository to be completely clean and contain only the relevant files.

We do not want to see in your repository any

  • IDE files,
  • jars,
  • compiled classes,
  • logs,
  • run-time files, or
  • OS-generated files (e.g. .DS_Store).

Write a good README.md file

Create a README.md on the root of your git repository, containing the following.

  • Your group members.
  • A description of your project.
  • Clear instructions for building and running your project.
  • A user's guide for your project with clear instructions.
  • A brief description of how you implemented your project. This should include information on
    • which third-party libraries you used, if any, and
    • which programming techniques of the course you used.
  • A description of your experience in this project. This should include information on
    • how you organized yourselves to work on the project,
    • how you used Git, and
    • the challenges that each group member faced (at least one per member).

Add any additional information to your README.md you think is relevant.

If you are not sure what should go in your README.md, check out this and this website.

Remember that README.md files are written using Markdown.

Set up Maven

Set up Maven for your project in a way that it can be compiled, tested, packaged, and executed using Maven commands.

Use Maven's standard directory layout.

Make sure your build is OS independent. Test it at least on Windows and Linux!

If you do not configure Maven on you project, it will not be graded.

Write unit tests

You must use JUnit 5 as your testing framework.

Your tests should be executed by invoking the command

$ mvn test

Your test suite will be evaluated regarding the following items.

  • coverage: how much of my code is tested?
  • correctness: are my tests useful?
  • understandability: can people understand the expected behavior of my methods via my tests?

Each group member should write tests for her own methods. Other group members may (and should) review the others.

Write documentation using Javadoc

Document your code using javadoc.

Configure the Apache Maven Javadoc Plugin for your project so that the documentation can be generated with the command

$ mvn javadoc:javadoc

Your documentation will be evaluated regarding

  • utility: how useful is the documentation to a developer that is trying to understand or use my code?
  • understandability: can people understand the classes and methods that I documented without looking at their implementation?

Each group member should document her own code. Group members should review the documentation of each other.

Project presentation

Record a 5-minute video presenting your project, in which you

  • explain your idea,
  • demonstrate your project, and
  • highlight interesting aspects of your project.

Add a link to the recording in your README.md file.