Concepts in Software Engineering


A Research Area of the Computer Science Department
Rensselaer Polytechnic Institute
Updated: February 4, 2004


The goal of research in this area is to provide a solid foundation for development and deployment of software for systems with stringent requirements for security, safety, functional correctness, and efficiency. Principal focuses are generic programming methodology and program analysis techniques. Generic programming is largely an activity of "lifting" of specific computer code to a more widely useful level, while maintaining high standards of efficiency and other required properties. This process is aided by conceptual classification of software components according to rigorously specified requirements. Results include the C++ Standard Template Library (STL), which is based on joint research with colleagues in industry; new generic sorting and searching algorithms; and new algorithm concept taxonomies. In the program analysis area, new techniques are being developed for different software tasks, including testing, understanding, and verification of object-oriented software. Results include new analyses that have been applied to testing of polymorphism in Java applications, and to testing of recovery code in highly reliable Web service applications. Future directions include greater integration of generic programming and program analysis methodology, with increased emphasis on proof-based approaches. The long range goal is to meet new challenges that arise from distributed software components, embedded system software updates, Web services, and other software for modern, pervasive computing.

There are two intended meanings of the word "Concepts" in our research area's name: the common one, and the more specific, technical sense of "concept" as a set of abstractions, such as abstract data types or algorithms, whose membership is defined by a list of requirements. In this technical sense, concepts are the main abstraction and organization mechanism in generic programming. The key operation on concepts is refinement: incrementally adding requirements to a concept description, thereby reducing the number of abstractions it contains but at the same time enabling more efficient algorithms or more refined analysis to be applied to the abstractions that remain. Repeated refinement with different choices of additional requirements results in a concept taxonomy or hierarchy, such as the one for STL Container Concepts documented in the Web pages of SGI's STL Programmer's Guide; see for example the STL Algorithms on Forward Containers diagram, which depicts a small part of the overall STL concept taxonomy and the way that additional requirements on the concepts enable additional (efficient) generic algorithms.


For an index and listing of most of the CISE group's publications, please visit our Publication Server. Some publications have not yet been included; see also our individual Web pages.

Current Projects

Current Group Members

Former Group Members