The objective of this project is to illustrate some aspects of software engineering through the development of a large application. The main points are: compliance with requirements, software design, validation and verification techniques, quality process. The software, which is to be developed in Java, is a compiler for a subset of an advanced language. This theme has been chosen firstly because the requirements can be understood quickly, and secondly because it allows a deeper understanding of the underlying concepts of programming languages.
The project starts with a 15 hours period dedicated to the study of the requirements (definition of the language, static and dynamic semantics, target machine), to the presentation of technical aspects and expected documentation and process. Follow-up tutorials take place on various aspects: software architecture, testing techniques, code delivery. These sessions allow the students to be helped on technical aspects as well as planning and organization.
At the end of the project we were able to present a working compiler that could take objects oriented objects in entry and provide the x86 Assembly code corresponding. For the ARM option it was much more limited and could only compile non-object code, but we think that with one more week we could have finish completely the implementation of this option. The tests represented half of this project and we were satisfied with our test coverage and so were our teachers.
This project allowed me to develop the following skills :