Software Evolution Lab Projects for Undergraduate and Graduate Students
I'm looking for energetic people who love to design and build systems. I'm
interested in programming tools for understanding and visualizing the
(object-oriented) design and software architecture of large
systems so they can be evolved. I can often provide financial
support for graduate students or exceptionally qualified undergraduates.
There are several kinds of projects (examples are listed at the bottom of
this page):
- Building or enhancing software tools, including graphical
visualization tools
- Using software tools: system development or case studies
- Building on or enhancing
ActiveCampus
- Automating the CSE department: system development or enhancement
Many of these projects involve object-oriented design and
technology, program visualization, compiler technology or
software engineering. Projects are for both undergraduates (e.g., CSE
199) and graduates (e.g., CSE 293). Many of these projects could also
serve as the basis for a Master's thesis. If you are pursuing a
PhD, these projects are only a starting point. Come see me for additional
projects. As an example of a recent project that came from this page, see Walter Korman's Elbereth
project page.
For more in-depth information about these projects, you may wish to look at
my lab's research
page, which provides information about current research
projects and recent
papers. But most importantly, don't hesitate to
drop me e-mail or drop by and see me in APM 4210.
Beneficial Skills
Proficiency with Java, C/C++, Tcl/Tk, or Common Lisp
programming languages; proficiency with lex/flex, yacc/bison compiler tools.
Beneficial Background
Some background in one or more these areas is
useful:
- System Construction: Design and construction of large, complicated
software systems.
- Compilers: Classes such as CSE 131B or CSE
231.
- Software Engineering: Classes such as CSE 110, CSE210, and CSE 218.
Example Tools Projects
- Aspect Browser projects
- Integrate the Nebulous component into the JBuilder
or Forte IDE.
- Design a plug-in mechanism to ease adding new inference tools.
- Add new aspect inference tools to AB or enhance the existing ones,
e.g.,
- computing redundancies
- importing raw data
- Add an aspect agent to Nebulous or the Emacs editor.
- Add an "aspect metrics" feature.
- Integrate StarTool features (see below).
- Enhance the graphical
StarTool programming tools:
- Retarget to C++, FORTRAN, or Java using our simple
retargeting interface.
- Create a version that is not language-specific (e.g., like grep).
See the searching tools project below, as well.
- Add support for editing program source.
- Searching tools
- Design and implement a ``classifying grep'' that not only matches patterns
in your code but classifies/clusters them according to their similarity. See
here
for an example of what I'm talking about, but this tool has to parse.
- Design and implement a lightweight grep-like search tool that uses parsing
or token-level matching rather than character-level lexical analysis. See the
CAWK paper
for examples of similar tools, or here for
something really similar.
- Restructuring/Refactoring
- Figure out how to visualize design problems, perhaps using design patterns, in object-oriented
software.
- Graphically display relationships amongst yacc/bison grammar rules.
- Write a dead-code detector for Java.
- Fast, scalable data-flow analysis
- Redesign a network application or service so that it can tolerate
disconnected operation without significant loss of performance or
functionality.
Example Development and Case Study Projects
Example CSE Automation Projects
- Design and implement an application for completing a grant budget,
travel voucher, or purchase order.
- Write an application for aiding class scheduling and schedule publishing.