Project Student Advertisements

 

Active Projects »

Managing Sensitive Data on Mobile Devices

Supporting privacy requirements on mobile devices

 

Overcoming the Intuition Wall: Automatic Graphical Analysis of Programs to Discover and Program New Computer Architectures

A joint project encompassing computer architecture, machine learning and software engineering

 

An Open Software Framework for the Emulation and Verification of Drosophila Brain Models on Multiple GPUs

Software frameworks and tools to emulate fly brains

 

Software Testing for Non-Testable Programs

Automating metamorphic testing techniques at runtime

 

In Vivo Testing

Executing tests in the deployment environment, using the state of the running application

 

Societal Computing

Exploring the impact of computational tradeoffs on societal concerns such as Privacy, Green Computing, Sustainability, and Cultural Differences

 

ARIS

Automated Online Evaluation for Improving Cyber-Physical System Reliability

 

genSpace

Enabling collaboration support for users of the geWorkbench computational biology tool

 
 

The Programming Systems Laboratory (PSL) is seeking graduate and advanced undergraduate students for individual and team research and development projects, possibly some user studies. Preference is for students interested in participating for multiple consecutive semesters, potentially including summer(s).  Prerequisites (except as otherwise specified for particular projects): COMS W3157 or equivalent programming experience in Java or C/C++. Recommended co-requisites: any one or more of COMS W4111: Introduction to Databases, COMS W4156: Advanced Software Engineering, COMS W4444: Programming & Problem Solving are desirable, but not necessary. Non-majors are very welcome, particularly students with background in the life sciences, social sciences or statistics. Time commitment approximately 12 hours per week 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. Initial projects are only for academic credit, but a particularly spectacular project could lead to a GRA or paid part-time position for a later semester (and/or summer).

Topics of current interest include but are not limited to:

  • tradeoffs between privacy preservation, regulatory localization, green computing and other societal issues
  • better approaches to maintaining the reliability of complex software systems
  • novel techniques for finding and fixing security vulnerabilities
  • building and operating reliable software for the smart grid, green buildings, and other cyber-physical systems

Contact Jonathan Bell (jbell@cs.columbia.edu) to be matched to an ongoing or suggested project, or to help define your own.

Current projects:

Privacy User Studies – As privacy is becoming an increasingly important concern for, both, end-users and software developers, we are planning to conduct a few user studies to find answers to some of the following questions: 1) For end-users (as opposed to software developers), does privacy matter? What aspects of privacy are more important? 2) Can we improve the usability and understandability of Privacy Settings on, e.g., social networking websites like Facebook and Twitter? 3) What kind of tradeoffs among Privacy, Green Computing, Laws, etc. are users most concerned about? 4) What kinds of tools would users prefer to inform tell them that their privacy settings have been breached in social websites? We’re looking for project students to conduct/design such user studies. Applicants should have a background in user studies, possibly from a previous class such as COMS 4170 User Interface Design, and a general interest in privacy. Contact: Swapneel Sheth, swapneel@cs.columbia.edu.

Software Reliability of Deployed Systems – We are seeking to develop new approaches to detecting defects in fielded systems that are not possible to fully test and debug in the lab – which includes virtually every complex software system.   One promising approach is for an application to automatically test itself while it is running in the deployment environment.  This kind of testing can done at the system level, e.g., to detect  configuration errors peculiar to the installation, or at the internal unit (function or class) level, which can detect a much wider range of problems by running crafted test cases in the varied application states reached during customer operation.  We call the latter in vivo testing  (‘in vivo’ refers to inside the living organism – the software system – in the field as opposed to ‘in vitro’ in the glass, i.e., the development lab).  We have previously developed a proof-of-concept implementation of an in vivo framework that required source code modification to insert test case instrumentation. We now plan to implement a more robust, higher performance framework using dynamic binary instrumentation, and apply the approach more generally, including to security concerns (see below) and concurrent systems.  We also need to develop a more concrete approach to devising the in vivo test cases. Applicants should be proficient in software engineering and systems programming. Contact: Jon Bell, jbell@cs.columbia.edu.

Testing Nontestable Programs - We are investigating how to detect bugs in so-called non-testable programs, where there is no test oracle to determine whether or not a given output is correct for an arbitrary input.  This problem is common in machine learning, data mining, information retrieval, simulation, optimization and scientific computing applications.  Our current approach is based on ‘metamorphic testing’, a general technique for creating follow-up test cases based on existing ones, particularly those that have not revealed any failure, in order to try to uncover flaws. Instead of being an approach for test case selection, it is a methodology of reusing input test data to create additional test cases whose outputs can be predicted. In metamorphic testing, if input x produces an output f(x), the function’s metamorphic properties can then be used to guide the creation of a transformation function t, which can then be applied to the input to produce t(x); this transformation then allows us to predict the output f(t(x)), based on the (already known) value of f(x). If the output is not as expected, then a defect must exist. Of course, this can only show the existence of defects and cannot demonstrate their absence, since the correct output cannot be known in advance (and even if the outputs are as expected, both could be incorrect), but metamorphic testing provides a powerful technique to reveal defects in otherwise nontestable programs by use of a built-in pseudo-oracle.  We have applied this approach to a wide range of nontestable programs and indeed found many conventional bugs, such as off-by-one errors.  We  now plan to extend this technique to address application and system state, both in-memory and the file system, in combination with in vivo testing above.  Applicants should be proficient in software engineering and systems programming. Contact: Jon Bell, jbell@cs.columbia.edu.

An Open Software Framework for the Emulation and Verification of Drosophila Brain Models on Multiple GPUs - We are working with Prof. Aurel Lazar’s Bionet Lab in the Electrical Engineering department to design, implement and experimentally evaluate an open parallel programming framework called the Neurokernel that will enable the isolated and integrated emulation of fly brain model neural circuits and their connectivity patterns (e.g., sensory and locomotion systems)  and other parts of the fly’s nervous system on clusters of GPUs, and support the in vivo functional identification of neural circuits.  (Note this is NOT the same meaning of “in vivo” as our Software Reliability of Deployed Systems project.) No background in biology or neuroscience is required.  Details are posted here.  Contact: Lev Givon, lev@columbia.edu.