Course Notes
Computer Engineering

Research Code

Research Statement: Questions of interest to the DOPL research group.

What:

Here we provide links to some of our research code along with brief explanations of why you might be interested. The code bears our copyright notice which we ask you to keep intact. All other rights are granted for both academic and commercial use.

We provide no libraries or executables. All the linked archives contain source code and, for Windows, have Visual Studio solutions and projects. Soon, we will provide NetBeans projects for the Linux code, and will provide instructions for building both Windows and Linux code from IDEs and from the command line.

Why?:

The code you find here we believe is well written - simple, fast, robust, and contains self documentation. Although all the code was written by us, we make no claims for novelty. It is provided so that reviewers and readers of our papers can reproduce our results. We hope as well that the code may be useful in other contexts.

Disclaimer:

Please note that all this code base has been developed by a very small group as part of our research and is evolving. While all of the code has been tested we can make no warrantees of correctness nor can we accept liability for its use in any capacity.

  1. Platform Components

    One of our goals is to develop a set of core software packages, written in C++, which we call the Platform Components. The intent is to write these packages for both Windows and Linux. Each package provides a set of classes and global functions which have the same interfaces on both platforms although the internal code differs as they use platform APIs for much of their functionality.

    Since the interfaces are identical on both platforms all other code can be common, provided that the Platform Components have enough functionality. This is an ongoing effort. It is too early to know how effective this scheme will be, but results so far are encouraging.

    On Windows the code is written using Visual Studio (now using VS2015). You will find zip files that contain Visual Studio solutions and projects along with the source code. Linux code is written using gcc/g++ (now v4.9) on netbeans. You will find zip files that do not now contain the netbeans projects. Eventually we plan to switch to one of the Linux archives and include netbeans projects along with the sources.

    FileSystem provides classes File, FileInfo, Path, and Directory.

    These packages will arrive sooner or perhaps later:

    ThreadsAndLocks has classes Thread, Lock, GLock, and Sout
    BlockingQueue has a single BlockingQ class
    Sockets package has classes Sockets, Comm, Message, SenderApp, and ReceiverApp

  2. Analysis Components

    Our research group is interested in providing support for the management and development of large software system projects. By large we mean projects that may develop millions of lines of code in thousands of packages. It is very difficult to understand systems of this scope by means of its code alone.

    A rich diagramming standard - the Universal Modeling Language (UML) - has been developed by others to provide abstract views that help deal with large systems. But in order to effectively build abstract models for large systems we need analysis tools that are capable of processing a very large number of packages to extract important type and packaging data and visualization tools to render that data into actionable information.

    Our analysis focuses on building tools to develop models for static dependency, scope placement, and program animation. The tools are evolving to provide computer aids for restructuring and visualization. As some of this code becomes available soon you will find links to code folders where you can download code archives. We will also link to some of the code we are using as targets of our analysis.

    DirectedGraph provides classes Graph, GraphIO, and GraphAlgorithms, Graph Design
    Parser provides classes Parser, IRule, IAction, Tokenizer, and SemiExpression, Parser Design

    Multi-threaded package dependency graph analysis application
    Package scope placement tree analysis application
    Software restructuring application based on "program slicing"
    Multi-Process call graph animation application

Much of the not yet arrived code has prototype implementations used in graduate classes in EECS for several years. Very little of that has been ported to Linux, the analysis code may not be. As code packages mature to the point that they can be used by mortals who are not the code developers they will appear here.