The Programming Systems Laboratory (PSL) is seeking graduate and advanced undergraduate students majoring in computer science or strongly related fields to participate in research projects for academic credit. The time commitment is approximately 12 hours per week throughout the semester for a 3-point project. However, projects are graded based on results rather than effort, so prospective project students must have strong time management and organizational skills. Most work will be conducted in the Programming Systems Lab, located in 6LE1 CEPSR; some work can be conducted remotely.

- Social Software Engineering: We have developed a tool called genSpace (http://psl.cs.columbia.edu/genspace/) that enables collaboration and knowledge sharing via social networking metaphors. This tool is currently integrated with the geWorkbench platform for integrated genomics and computational biology, and is designed with a component-based, plug-in architecture. There are many different projects available, which are described below.

1. Further investigation is required to understand the software engineering implications of retrofitting social networking capabilities onto standalone applications, e.g., caching, fault tolerance, privacy, etc. We are seeking a project student to analyze and implement such features with an eye towards good software engineering practices. Applicants must have experience with Eclipse, Java, and Network Programming. They should also have experience with Build Automation (ANT).

2. We are looking for project students to work on and enhance an MVC web application, which provides features such as rating and writing comments for geWorkbench components. Applicants must have experience with PHP, Symfony, and Network Programming.

3.We are seeking project students to add social networking capabilities to genSpace. An example is the notion of friends and groups (people can add a friend, create groups, etc.). Applicants must have experience with Java Swing, Eclipse, and Network Programming. They should have a background in UI Design. They should also have experience with Build Automation (ANT).

For all these projects, it is recommended that applicants have completed a software engineering course and/or have worked in a professional software development environment. All applicants should also have experience with Version Control (CVS/SVN). For more information, contact Swapneel Sheth, swapneel@cs.columbia.edu.

- COMmunity-driven Parallelization Advisor for Sequential Software: COMPASS brings together aspects of social networking and applies them to the field of parallel programming. It explores an innovative methodology whereby the collective knowledge and expertise of programmers is aggregated and utilized to optimize programs. In Fall 2008, a module of COMPASS was developed which involved extracting hot-spots (frequently executed code) in a given program. We are looking for project students to port this functionality to IDEs such as Eclipse and Visual Studio C++ by building a plug-in/extension. Students must have previous programming experience in either one of the following languages: Java or .Net Framework languages such as C++, C# and VB. It is recommended that applicants should have completed a software engineering course and/or have worked in a professional software development environment. Applicants should also have experience with version control (CVS/SVN) and the LINUX environment. Contact Nipun Arora: nipun@cs.columbia.edu.

- Peer to Peer Fault Detection and Diagnosis: CloudView is a project that enables detection and diagnosis of network faults using a peer to peer architecture. For example, if I cannot access a website and another peer in the same subnet cannot access it as well, the problem may be with the ISP. The entire process is automated and the group of peers run a set of analysis tests; depending on the results on these tests, we can diagnose the problem. We are seeking project students to extend this into other domains, which may include: chat, email, web browsing, games. Applicants must have a good background in computer networks, experience with network programming in Java, and must be extremely organized and detail-oriented. Applicants should also have experience with Eclipse and Version Control (CVS/SVN). For more information, contact Swapneel Sheth, swapneel@cs.columbia.edu.

- Metamorphic Testing: Many applications do not have “test oracles” to indicate whether they are producing the correct output for arbitrary input. We are investigating the testing of such applications, using a technique in which test input is transformed in such a manner that it should be possible to predict the effect on the output; if the change to the output is not as predicted, then a defect must exist. This is known as “metamorphic testing”. We seek project students to investigate such research questions as: Can the “metamorphic properties” of a function or program be detected via code analysis? For what application domains is the approach most suitable? How can the approach be applied to non-deterministic applications? Qualified candidates should be extremely organized and have excellent communication skills; strong knowledge of C, Java, and UNIX is also required. For more information, contact Chris Murphy, cmurphy@cs.columbia.edu.

- In Vivo Testing: It is difficult to test highly configurable, multi-platform applications because there are simply too many combinations of configuration options and runtime environments to fully test prior to deploying the software. We have developed a technique called In Vivo Testing in which software continually tests itself as it executes in the field, with minimal runtime overhead. We seek project students to investigate such research questions as: Can the technique be made more efficient by only running tests in application states it hasn’t seen before? Can the overhead be reduced by offloading test processes to other machines? What sorts of defects are most likely to be detected with such an approach? How can the tests be “sandboxed” so that they do not affect external entities like databases? Qualified candidates should be extremely proficient in C and UNIX, and should have received a grade of A- or better in 4118 Operating Systems (or equivalent). For more information, contact Chris Murphy, cmurphy@cs.columbia.edu.

- GuanYin: A Thousand Hands with a Thousand Eyes for Distributed Software Checking: Software reliability affects virtually everyone. Thorough software checking is crucial to improve software reliability, but the checking coverage of most existing techniques is severely hampered by where they are applied: a software product is typically checked only at the site where it is developed, thus the number of different states checked is throttled by those sites' resources (e.g., machines, testers/users, software/hardware configurations). To address this fundamental problem, we will investigate mechanisms that will enable software vendors to continue checking for bugs after a product is deployed, thus checking a drastically more diverse set of states. Our research contributions will include the investigation, development, and deployment of: (1) a wide-area autonomic software checking infrastructure to support continuous checking of deployed software in a transparent, efficient, and scalable manner; (2) a simple yet general and powerful checking interface to facilitate creation of new checking techniques and combination of existing techniques into more powerful means to find subtle bugs that are often not found during conventional pre-deployment testing; (3) lightweight isolation, checkpoint, migration, and deterministic replay mechanisms that enable replication of application processes as checking launch points, isolation of replicas from users, migration of replicas across hosts, and replay of identified bugs without need for the original execution environment; and (4) distributed computing mechanisms for efficiently and scalably leveraging geographically dispersed idle resources to determine where and when replicas should be executed to improve the speed and coverage of software checking, thereby converting available hardware cycles into improved software reliability. We are seeking students with strong knowledge in Operating Systems, C/C++/Python programming, and software testing. Interested students can contact Leon Wu via email: leon@cs.columbia.edu with CV.

- Testing Framework for Concurrency Bugs: The increasingly broad use of multi-core hardware and clustering infrastructure leads to more parallel programs such as high-performance computing and high-frequency trading systems being developed and deployed. The concurrency bugs, including race condition, atomicity-violation, order-violation, incorrect data parallelism, locality violation and safety violation, in the parallel programs are becoming more and more prominent and critical. The existing testing frameworks mostly aim to test non-parallel programs and do not address the new phenomenon of the concurrency bugs. We are researching and developing a novel testing framework for concurrency bugs. The prototype implementation will leverage the recent technologies for concurrency programming, such as open-source Apache Hadoop and Google MapReduce. We are seeking students with strong knowledge in Operating Systems, C/C++/Java programming, multi-threaded programming, and software testing. Interested students can contact Leon Wu via email: leon@cs.columbia.edu with CV.
 

 Last updated October 07, 2009.
Copyright © 2009.