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 signiﬁcant role that preprocessor directives play. It is partially because of these preprocessor directives that code maintenance has become extremely difﬁcult.
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
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 https://ieeexplore.ieee.org/ xpl/mostRecentIssue.jsp ?punumber=9175
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.
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.
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
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.