Assignment Brief


This assignment is designed to be a continual software development project using Test Driven Design / Development techniques to produce a substantial software artefact.

Sample project ideas can be found here and should be the same project used for the CGI Techniques assignment.

The ASE part of the assignment will be the design, development, documentation and testing of the software system using a “Test Driven Development” (TDD) approach. A full outline of the assessment points for this unit is outlined below.

Code should be submitted via GitHub classroom, the link for your assignment repository can be found here. You will be given full instructions on how to setup and use GitHub in one of the early Lab Sessions. You must also submit a file on Brightspace with the URL for your actual repository.

You are expected to add weekly work to this repository showing the development progress which will form part of the formative assessment for this unit. Feedback on code and design will be given as part of the code review process.


Whilst the choice of graphics API is up to the student, it is suggested that the NGL library and OpenGL / Qt is used as the basis for most projects. These are the API’s used in the teaching and tutorials supplied.

You may also choose an alternative (such as Vulkan, Metal, DirectX etc) however support may be limited for these.

You may use other libraries but this must be justified in the design of the project (for example GLM or Eigen are fine to use but don’t waste time writing your own Matrix library when there are plenty to use that are already fully tested).

You may also choose to use an alternative programming language or a suite of languages, for example, Python exporting to Renderman rib for rendering would be acceptable, however real-time visualisation with OpenGL for the system would be a bonus. As this project is specifically aimed at software engineering there must be a large portion of the project designed and developed by the user hence the use of Game Engines such as Unreal or Unity is discouraged and out of the scope of this project. Design

You are required to submit a document with the initial design of your system using appropriate data structures and classes and initial Unit Tests. This should be part of the GitHub file and written in Markdown. The design should be based upon the algorithmic elements of the project outlined within the CGI Techniques report on the area of interest / current research into the field you are developing for. This document should be separate from the CGI Tech report but may reference it.

A simple proof of concept should also be submitted (via the GitHub page), this may be just the initial tests of any classes required in the development of your project, or a simple application to show objects moving etc.

Ongoing Implementation

The implementation of the system based on the initial research and design. As software design is an iterative process it is expected that the actual program will have evolved from the initial report and this process should be reflected on in the final project report. Marks will be awarded for good use of software engineering / programming and documentation of the code with respect to and algorithms and techniques used.

Marking Scheme

  • Submitting code and design for review 15 marks
  • Use and understanding of Animation Software Engineering techniques including build with CMake - 30 marks
  • Use of TDD and Unit tests - 15 marks
  • Use and understanding of Graphics API (e.g. OpenGL) - 15 marks
  • Project specific (i.e. GUI, using the GPU, shaders, novel algorithms etc)- 15 marks
  • Following NCCA Coding standards and use of GitHub 10 marks


The following rubric gives and outline of the areas we will consider when grading the work.


Unable to adequately write or debug C++ code or design own classes. Submitted an incomplete or non-functional application. No Unit tests. Used a lab tutorial or other resource to complete the assignment without modifying it. No engagement with the assignment via the github classroom.


Demonstrates rudimentary skill in OO design and C++ programming, and with help can create a small aspect of the program that is at least partially functional. No relevant Unit tests or testing plan. Uses a lab tutorial or other resource to complete the assignment with small modifications to the code and simple class structure. Minimal engagement with the assignment via the GitHub classroom.


Can demonstrate a good understanding of modern C++ practices and OO design. Use of appropriate 3rd party libraries for core algorithms. Most of the code is written by the student or extended from the lab demos. A good coverage of Unit tests for the classes. The code is well structured and documented, little or no extra graphics programming has been done relying on the basic primitives shown in the demos. Shows good engagement with the assignment via the GitHub classroom.


Mastery of OO design and implementation applying appropriate design to the problem domain, Use of advanced modern C++ features such as templates, lambdas, smart pointers and the STL. Use of appropriate 3rd party libraries and tools, or the development of own libraries. The code is well structured and documented, extensive extra graphics programming with custom shaders and graphics techniques, a fully work system or tool. Close to full test coverage. Extensive use of the GitHub classroom for managing the project, with a clear commit history and use of branches and pull requests.|


You must acknowledge your source every time you refer to others’ work, using the Harvard System (Author Date Method). Failure to do so amounts to plagiarism which is against university regulations. Please refer to for the University’s guide to citation in the Harvard style. For more information please read the code citation guide here

In addition to this any 3rd party code used in the program must be suitably referenced. It is assumed you will use the NCCA Graphics Library code or examples from the lectures, so these need not be referenced. However, your assignment must be suitably different from any examples given out in the class.

When you submit your assessed work, you do so on the understanding that it is your original work. The use of Generative Artificial Intelligence (GAI) may be permitted, please refer to the Academic Skills Hub ( for guidance for appropriate use of GAI and referencing see for explicit examples of using copilot-x in coding.

Intended Learning Outcomes

  1. demonstrate an ability to write complex programs using a high-level programming language and a computer graphics application programming interfaces (API).
  2. apply Test Driven Development to the design and implementation of a major software artifact informed by industry best practice.
  3. display proficiency in applying modern software engineering techniques to computer generated image production.


You should submit using Brightspace and GitHub :

  • Documentation of how to operate the submitted program (git
  • Source Code via GitHub (instructions will be given in class)
  • A Video of the program in Operation (via Brightspace)
  • A Text document with a link to your GitHub repository (via Brightspace)


Tuesday 23rd January 2024 12pm Feedback will be returned W/B 12th February 2024

Please note that this is the final time you can submit – not the time to submit! Your feedback and mark for this assignment will be provided no more than three weeks after your submission. If you fail your assignment or need further clarification on your feedback please make an appointment to see your tutor.