48 research outputs found

    Inference of development activities from interaction with uninstrumented applications

    Get PDF
    Studying developers’ behavior in software development tasks is crucial for designing effective techniques and tools to support developers’ daily work. In modern software development, developers frequently use different applications including IDEs, Web Browsers, documentation software (such as Office Word, Excel, and PDF applications), and other tools to complete their tasks. This creates significant challenges in collecting and analyzing developers’ behavior data. Researchers usually instrument the software tools to log developers’ behavior for further studies. This is feasible for studies on development activities using specific software tools. However, instrumenting all software tools commonly used in real work settings is difficult and requires significant human effort. Furthermore, the collected behavior data consist of low-level and fine-grained event sequences, which must be abstracted into high-level development activities for further analysis. This abstraction is often performed manually or based on simple heuristics. In this paper, we propose an approach to address the above two challenges in collecting and analyzing developers’ behavior data. First, we use our ActivitySpace framework to improve the generalizability of the data collection. ActivitySpace uses operating-system level instrumentation to track developer interactions with a wide range of applications in real work settings. Secondly, we use a machine learning approach to reduce the human effort to abstract low-level behavior data. Specifically, considering the sequential nature of the interaction data, we propose a Condition Random Field (CRF) based approach to segment and label the developers’ low-level actions into a set of basic, yet meaningful development activities. To validate the generalizability of the proposed data collection approach, we deploy the ActivitySpace framework in an industry partner’s company and collect the real working data from ten professional developers’ one-week work in three actual software projects. The experiment with the collected data confirms that with initial human-labeled training data, the CRF model can be trained to infer development activities from low-level actions with reasonable accuracy within and across developers and software projects. This suggests that the machine learning approach is promising in reducing the human efforts required for behavior data analysis.This work was partially supported by NSFC Program (No. 61602403 and 61572426)

    Tinnitus

    No full text
    This article is based on a review of the literature and the experience of some experts. Its goal is to present an overview of the physiopathology of tinnitus and perspectives of treatment based on recent publications. Tinnitus is a problem of society, affecting about 10% of the population. The causes of tinnitus are extremely diverse. Objective tinnitus is generally pulsatile and from arterial or venous origin; subjective tinnitus can be generated at any level of the auditory pathways. Approach to tinnitus includes qualification through anamnesis and specialized questionnaires, and thorough audiological characterization. Sometimes, imaging is indicated as it can reveal the cause of the tinnitus in case of a vascular abnormality or a retro-cochlear tumour. Among the various medications prescribed for tinnitus, only anti-depressants proved to be efficient when secondary depression is present. Hearing aids are useful for hearing impaired patients but the efficiency of tinnitus maskers is not proved. Tinnitus Retraining Therapy is very promising but results must be confirmed by future studies. Studies about neurostimulation are in progress. In the future, better understanding of the physiopathology of tinnitus will lead to new treatments.SCOPUS: re.jinfo:eu-repo/semantics/publishe

    Detecting and Ranking API Usage Pattern in Large Source Code Repository: A LFM Based Approach

    No full text
    Part 1: MAKE TopologyInternational audienceCode examples are key resources for helping programmers to learn correct Application Programming Interface (API) usages efficiently. However, most framework and library APIs fail in providing sufficient and adequate code examples in corresponding official documentations. Thus, it takes great programmers’ efforts to browse and extract API usage examples from websites. To reduce such effort, this paper proposes a graph-based pattern-oriented mining approach, LFM-OUPD (Local fitness measure for detecting overlapping usage patterns) for API usage facility, that recommends proper API code examples from data analytics. API method queries are accepted from programmers and corresponding code files are collected from related API dataset. The detailed structural links among API method elements in conceptual source codes are captured and generate a code graph structure. Lancichinetti et al. proposed an overlapping community detecting algorithm (Local fitness measure, LFM), based on the local optimization of a fitness function. In LFM-OUPD, a mining algorithm based on LFM is presented to explore the division of method sequences in the directed source code element graph and detect candidates of different API usage patterns. Then a ranking approach is applied to obtain appropriate API usage pattern and code example candidates. A case study on Google Guava is conducted to evaluate the effectiveness of this approach

    What should developers be aware of?:an empirical study on the directives of API documentation

    Get PDF
    Application Programming Interfaces (API) are exposed to developers in order to reuse software libraries. API directives are natural-language statements in API documentation that make developers aware of constraints and guidelines related to the usage of an API. This paper presents the design and the results of an empirical study on the directives of API documentation of object-oriented libraries. Its main contribution is to propose and extensively discuss a taxonomy of 23 kinds of API directives
    corecore