Project

The SDiC (Software Development in Context) research project is developed in the Knowledge and Intelligent Systems laboratory of the Cognitive and Media Systems group of Centre for Informatics and Systems of the University of Coimbra. The main objective of the project is the development of context-based information retrieval algorithms for software development.

In software development, the context of a developer can be viewed as a rich and complex network of elements across different dimensions that are not limited to the work developed on an IDE. Due to the difficulty on approaching such challenge, there is not a unique notion of what it really covers and how it can be truly exploited. With the increasing dimension of software development projects, software development projects have grown in complexity and size, as well as in the number of concepts and technologies involved. During their work, software developers need to cope with a large amount of contextual information that is typically not captured and processed in order to enrich their work environment.

The purpose of this project is to explore the use of context to improve information retrieval in software development, through the various dimensions that exist in the work environment of the developer and from different perspectives.

Dimensions

The dimensions that comprise the work environment of a software developer can be represented in a layered model comprising a personal, a project, an organization and a community layer.

Personal

The personal dimension represents the work a developer has at hands at any point in time, which can be defined as a set of tasks. In order to accomplish these tasks, the developer has to deal with various kinds of resources at the same time, such as source code files, specification documents, bug reports, etc. These resources are typically dispersed through different places and systems, although being connected by a set of explicit and implicit relations that exist between them.

Project

The project dimension focuses on the the project, or projects, in which the developer is somehow involved. A software development project is an aggregation of a team, a set of resources and a combination of explicit and implicit knowledge that keeps the project running. The team is responsible for accomplishing tasks, which end up consuming and producing resources. The relations that exist between people and resources are the glue that makes everything work.

Organization

The organization dimension takes into account the organization context to which the developer belongs. Similarly to a project, an organization is made up of people, resources and their relations, but in a much more complex network. While in a project the people and resources are necessarily connected due to the requisites of their work, in a software development organization these projects easily become separate islands. The knowledge and competences developed in each project may be of interest in other projects and valuable synergies can be created when this information is available.

Community

The community dimension takes into account the community knowledge within the domain, or domains, in which the developer works. This layer goes beyond the project and organization levels and includes a set of knowledge sources that stand out of these spheres. Nowadays, developers use the Internet to search information and to keep informed of the advances in the technologies they work with. These actions are based on services and communities, such as source code repositories, forums, news websites, mailing lists, blogs, etc.

Perspectives

The context of the developer can be applied to improve information retrieval in different perspectives, namely search, recommendation and browsing.

Search

The increasing volume of information developers need to cope during their work demands for intelligent, yet simple, search mechanisms. The search process can be improved by using contextual information to order the search results taking into account their relevance to the developer, avoiding the need to use complex queries or advanced search interfaces.

Recommendation

The recommendation goes a step beyond search, avoiding the need of a query and leaving to the system the responsibility to understand what is relevant for the developer. The context of the developer is essential when it comes to identify the needs of the developer, allowing the system to pro-actively provide relevant information to the developer without the need of an explicit query.

Browsing

The browsing of information has an important role in software development, where information is highly related, either explicitly or implicitly, but the overload of information makes this task nearly impossible. The context of the developer can be used to distinguish what is relevant from what can be filtered, when browsing the information available to the developer.