Just had my dissertation demonstration, where I have to show off the code I have spent the last two weeks writing.
It went better than I expected - the code is in pretty good shape, and I have just about met all of my basic deliverables.
This screenshot (82KB) shows the main window (titled `ice' for `Integrated Comprehension Environment' with a project open. The project is described by the file listed on the left-hand pane as 'annotations.xml' which will include an element <root>; describing the root of the project being worked with. That root is the root of the file-heirarchy on the left.
The right-hand pane shows the file currently selected in the left-hand pane. Lines 1 and 6 are highlighted because they have annotations associated with them in the project file. The drop-down box above shows that the tool is in `Browse' mode. Clicking on an annotated line would bring up the browser you see in the bottom-left.
The mode could have been set to `Remove' which would remove the annotation you click on, or `Author'. In author mode, clicking on a line brings up a dialog where you select a file to associate with that line. Clicking on an already-highlighted line pops up the editor (bottom-right).
The tool thus relies on external programs to view and edit annotations. I am using HTML as the annotation format (although the tool makes no restriction on such a thing). The dialog at the bottom-centre shows the currently selected editor and viewer for annotations.
When I have written the code to save the project and create a new, blank project, the basic is finished.
My intermediate deliverable is to monitor the files in the project and work out if they have changed since the file was last considered. Then, annotations which are associated with a file which has changed, will be marked for verification as their contents might be out-of-date.
This is pretty straightforward, and also a bit unreliable. The advanced is the real meat of the project. The tool will perform a semi-parse of the code being studied, and annotations will be associated with identifiers rather than lines. Then, a technique to be determined1 will work out whether or not the value of the identifier will have been effected by change in the source code.
- Considering program slicing or some kind of AST work, hashing `regions' of code and their dependencies.