University Projects


Masters of Mathematics Thesis: Giving Meaning to Macros

In 2004 I completed my Masters of Mathematics in Computer Science. This is my thesis:

With the prevalence of legacy C/C++ code, issues of readability and maintainability have become increasingly important. When we consider the problem of refactoring or migrating C/C++ code, we see the significant role that preprocessor directives play. It is partially because of these preprocessor directives that code maintenance has become extremely difficult.

This thesis describes a method of fact extraction and code manipulation to create a set of transformations which will remove preprocessor directives from the original source, converting them into regular C/C++code with as few changes as possible, while maintaining readability in the code. In addition, some of the subtle issues that may arise when migrating preprocessor directives are explored. After discussing the general architecture of the test implementation, an examination of some metrics gathered by running it on two software systems is given.

A copy of my thesis can be found here: GivingMeaningToMacros-GSO-ElecSub.pdf


IWPC 2004 Conference Paper: Giving Meaning to Macros

In preparation of my Masters thesis I presented a paper at the 12th International Workshop on Program Comprehension in Bari, Italy.

A copy of this paper can be found here: GivingMeaningToMacros-MennieClarke.pdf.

An index to the conference proceedings is located at xpl/mostRecentIssue.jsp ?punumber=9175


EMACS 21.2 Architecture Paper

A friend and I wrote a paper in graduate school on the conceptual and concrete architectures of Emacs 21.2 and how they compared. Sadly it seems the electronic form of the concrete architecture paper has been lost.

High level architecture for Emacs: High-Level-Architecture.pdf
Conceptual architecture for Emacs: EMACS-Conceptual-Architecture.pdf


EMOS Real Time OS

This is an implementation of a real-time operating system written from scratch for 486/Pentium systems. It might not be the nicest of code (though it isn't too bad), but we did end up with a fully multitasking and multithreading microkernel with very flexible IPC. The design will be very similar to ancient versions of QNX as both OSes grew out of the same university course.

We wrote this using a fairly old version of GCC, so I suspect it'll take a bit of reworking to get it to compile.

The code for the final state of this project can be found here: RTOS-A4.tga
A short paper describing some of the internals and details of the OS is here:


OAM Software Requirements Specification

This is a requirements specification document for a small phone system. I wrote this with two friends for requirements engineering course that was part of our software engineering specialization in university.

There is over 200 pages of UML specification in the document, fully flushing out the requirements for the system.

The document can be found here: FinalSRS.pdf


OAM Architecture and Design Documents

In addition for the SRS we wrote, we also wrote architecture and design specification documents and then implemented the system. The documents detail the architecture graphically, as well as various programmatic interfaces. We also specify schemas for the external protocols used and detail the database design. There is also a cost estimate of the hypothetical code complexity, development costs, and maintenence costs.

The architecture document is here: OAMArchitectureDocument.pdf
The design document is here: OAMDesignDocument.pdf