8 research outputs found

    Selecting fault revealing mutants

    Get PDF
    Mutant selection refers to the problem of choosing, among a large number of mutants, the (few) ones that should be used by the testers. In view of this, we investigate the problem of selecting the fault revealing mutants, i.e., the mutants that are killable and lead to test cases that uncover unknown program faults. We formulate two variants of this problem: the fault revealing mutant selection and the fault revealing mutant prioritization. We argue and show that these problems can be tackled through a set of ‘static’ program features and propose a machine learning approach, named FaRM, that learns to select and rank killable and fault revealing mutants. Experimental results involving 1,692 real faults show the practical benefits of our approach in both examined problems. Our results show that FaRM achieves a good trade-off between application cost and effectiveness (measured in terms of faults revealed). We also show that FaRM outperforms all the existing mutant selection methods, i.e., the random mutant sampling, the selective mutation and defect prediction (mutating the code areas pointed by defect prediction). In particular, our results show that with respect to mutant selection, our approach reveals 23% to 34% more faults than any of the baseline methods, while, with respect to mutant prioritization, it achieves higher average percentage of revealed faults with a median difference between 4% and 9% (from the random mutant orderings)

    Selecting fault revealing mutants

    Get PDF
    Mutant selection refers to the problem of choosing, among a large number of mutants, the (few) ones that should be used by the testers. In view of this, we investigate the problem of selecting the fault revealing mutants, i.e., the mutants that are killable and lead to test cases that uncover unknown program faults. We formulate two variants of this problem: the fault revealing mutant selection and the fault revealing mutant prioritization. We argue and show that these problems can be tackled through a set of ‘static’ program features and propose a machine learning approach, named FaRM, that learns to select and rank killable and fault revealing mutants. Experimental results involving 1,692 real faults show the practical benefits of our approach in both examined problems. Our results show that FaRM achieves a good trade-off between application cost and effectiveness (measured in terms of faults revealed). We also show that FaRM outperforms all the existing mutant selection methods, i.e., the random mutant sampling, the selective mutation and defect prediction (mutating the code areas pointed by defect prediction). In particular, our results show that with respect to mutant selection, our approach reveals 23% to 34% more faults than any of the baseline methods, while, with respect to mutant prioritization, it achieves higher average percentage of revealed faults with a median difference between 4% and 9% (from the random mutant orderings)

    Decision Support System for Pull Requests Review Using Path-based Network Portrait Divergence and Visualization

    Get PDF
    Title from PDF of title page, viewed September 8, 2022Thesis advisor: Yugyung LeeVitaIncludes bibliographical references (pages 74-79)Thesis (M.S.)--Department of Computer Science Electrical Engineering. University of Missouri--Kansas City, 2022Pull requests are widely used in open-source and industrial environments to contribute and assess contributions. Unlike the typical code review process, pull requests provide a more lightweight approach for committing, reviewing, and managing code changes. Pull request code reviews also serve multiple objectives, including detecting problems in code, giving a venue to discuss code contributions, and supporting the easy integration of external contributions by project maintainers. The code changes and tests are written for a specific work item are contained in a pull request. Previous studies have reported that pull request review is crucial for software development and that reviewers do not spend more time on test files than on code files. At the same time, code reviewers are concerned that the tests that accompany the code modifications are adequate and cover all possible paths. The purpose of this research is to determine whether the test changes that go along with the code changes match the structural changes made in the Pull Request. The structural changes are determined using recent network comparison breakthroughs in prior work with GraphEvo. We also determine whether or not the visual representation and software metrics can support the software review process. We conducted a case study of 14 Java open-source projects, analyzing thousands of lines of code quality issues in 627 pull requests. We calculated the class level metrics, including network portrait divergence for each Pull request with and without change. In addition, for each pull request, we counted the number of existing test cases that failed due to the modification. Furthermore, correlations were investigated between class-level metrics, including network portrait divergence and tests that failed in pull requests.Introduction -- Related work -- Methodology -- Results and evaluations -- Conclusio

    State of Refactoring Adoption: Towards Better Understanding Developer Perception of Refactoring

    Get PDF
    Context: Refactoring is the art of improving the structural design of a software system without altering its external behavior. Today, refactoring has become a well-established and disciplined software engineering practice that has attracted a significant amount of research presuming that refactoring is primarily motivated by the need to improve system structures. However, recent studies have shown that developers may incorporate refactoring strategies in other development-related activities that go beyond improving the design especially with the emerging challenges in contemporary software engineering. Unfortunately, these studies are limited to developer interviews and a reduced set of projects. Objective: We aim at exploring how developers document their refactoring activities during the software life cycle. We call such activity Self-Affirmed Refactoring (SAR), which is an indication of the developer-related refactoring events in the commit messages. After that, we propose an approach to identify whether a commit describes developer-related refactoring events, to classify them according to the refactoring common quality improvement categories. To complement this goal, we aim to reveal insights into how reviewers develop a decision about accepting or rejecting a submitted refactoring request, what makes such review challenging, and how to the efficiency of refactoring code review. Method: Our empirically driven study follows a mixture of qualitative and quantitative methods. We text mine refactoring-related documentation, then we develop a refactoring taxonomy, and automatically classify a large set of commits containing refactoring activities, and identify, among the various quality models presented in the literature, the ones that are more in-line with the developer\u27s vision of quality optimization, when they explicitly mention that they are refactoring to improve them to obtain an enhanced understanding of the motivation behind refactoring. After that, we performed an industrial case study with professional developers at Xerox to study the motivations, documentation practices, challenges, verification, and implications of refactoring activities during code review. Result: We introduced SAR taxonomy on how developers document their refactoring strategies in commit messages and proposed a SAR model to automate the detection of refactoring. Our survey with code reviewers has revealed several difficulties related to understanding the refactoring intent and implications on the functional and non-functional aspects of the software. Conclusion: Our SAR taxonomy and model, can work in conjunction with refactoring detectors, to report any early inconsistency between refactoring types and their documentation and can serve as a solid background for various empirical investigations. In light of our findings of the industrial case study, we recommended a procedure to properly document refactoring activities, as part of our survey feedback

    Retention in Introductory Programming

    Get PDF
    The introductory programming course is one of the very first courses that computer science students encounter. The course is challenging not only because of the content, but also due to the challenges related to finding a place in a new community. Many have little knowledge of what to expect from university studies, some struggle to adjust their study behavior to match the expected pace, and a few simply cannot attend instruction due to e.g. family or work constraints. As a consequence, a considerable number of students end up failing the course, or pass the course with substandard knowledge. This leads to students failing to proceed in their studies at a desirable pace, to students who struggle with the subsequent courses, and to students who completely drop out from their studies. This thesis explores the issue of retention in introductory programming courses through multiple viewpoints. We first analyze how the teaching approaches reported in literature affect introductory programming course pass rates. Then, changes on the retention at the University of Helsinki are studied using two separate approaches. The first approach is the use of a contemporary variant of Cognitive Apprenticeship called the Extreme Apprenticeship method, and the second approach is the use of a massive open online course (MOOC) in programming for recruiting students before they enter their university studies. Furthermore, data from an automatic assessment system implemented for the purposes of this thesis is studied to determine how novices write their first lines of code, and what factors contribute to the feeling of difficulty in learning programming. On average, the teaching approaches described in the literature improve the course pass rates by one third. However, the literature tends to neglect the effect of intervention on the subsequent courses. In both studies at the University of Helsinki, retention improved considerably, and the students on average also fare better in subsequent courses. Finally, the data that has been gathered with the automatic assessment system provides an excellent starting point for future research.Ohjelmointi on nykyajan käsityöläistaito, jolle on akuutti tarve työelämässä. Tämän taidon opettelua harkitseva tietää harvoin, kuinka riippuvainen yhteiskuntamme on ohjelmoinnin tuotoksista eli ohjelmistoista. Ilman ohjelmointia esimerkiksi yhteydenpito, kaupankäynti, matkustaminen ja terveydenhuolto olisivat heikommalla tasolla. Puhelimet eivät toimisi, internettiä ei olisi, eikä lääketeollisuus pystyisi käsittelemään yhtä suuria datamassoja uusia parannuskeinoja etsiessä. Kukaan ei olisi kirjoittanut ohjelmaa, joka auttoi avaruuteen pääsemisessä. Väitöskirjassa tarkastellaan ohjelmoinnin opetusmenetelmiä ja niiden toimivuutta korkeakouluissa sekä esitellään kognitiiviseen oppipoikamalliin (Cognitive Apprenticeship) perustuva “ajatuskäsityöläisten” opetusmenetelmä tehostettu kisällioppiminen (Extreme Apprenticeship). Tehostetussa kisällioppimisessa oppimista edesauttava yksilöllinen ohjaus on mahdollista skaalata satoja opiskelijoita sisältäville kursseille. Väitöskirjatyössä ehdotetaan lisäksi kaikille avoimen verkkokurssin (MOOC) käyttöä yliopisto-opiskelijoiden valintaan sekä tarkastellaan tällaisen valintaväylän toimivuutta tietojenkäsittelytieteen alalla. Väitöskirja käsittelee myös ohjelmointitehtävien automaattista arviointia ja esittelee tähän tarkoitetun Test My Code -järjestelmän, jota voidaan käyttää askeleittaisten ohjeiden ja palautteen antamiseen aloitteleville ohjelmoijille sekä tiedon keräämiseen ohjelmointiprosessissa esiintyvistä ongelmista. Tällaista tietoa voidaan tutkia oppimisanalytiikan menetelmin. Väitöskirjassa tarkastellaan myös aloittelevien ohjelmoijien ensimmäisten ohjelmien kirjoittamisessa esiintyviä ongelmia sekä esitellään ohjelmointitehtävien vaikeuden ennustamiseen sopivia menetelmiä

    ICSEA 2022: the seventeenth international conference on software engineering advances

    Get PDF
    The Seventeenth International Conference on Software Engineering Advances (ICSEA 2022), held between October 16th and October 20th, 2022, continued a series of events covering a broad spectrum of software-related topics. The conference covered fundamentals on designing, implementing, testing, validating and maintaining various kinds of software. Several tracks were proposed to treat the topics from theory to practice, in terms of methodologies, design, implementation, testing, use cases, tools, and lessons learned. The conference topics covered classical and advanced methodologies, open source, agile software, as well as software deployment and software economics and education. Other advanced aspects are related to on-time practical aspects, such as run-time vulnerability checking, rejuvenation process, updates partial or temporary feature deprecation, software deployment and configuration, and on-line software updates. These aspects trigger implications related to patenting, licensing, engineering education, new ways for software adoption and improvement, and ultimately, to software knowledge management. There are many advanced applications requiring robust, safe, and secure software: disaster recovery applications, vehicular systems, biomedical-related software, biometrics related software, mission critical software, E-health related software, crisis-situation software. These applications require appropriate software engineering techniques, metrics and formalisms, such as, software reuse, appropriate software quality metrics, composition and integration, consistency checking, model checking, provers and reasoning. The nature of research in software varies slightly with the specific discipline researchers work in, yet there is much common ground and room for a sharing of best practice, frameworks, tools, languages and methodologies. Despite the number of experts we have available, little work is done at the meta level, that is examining how we go about our research, and how this process can be improved. There are questions related to the choice of programming language, IDEs and documentation styles and standard. Reuse can be of great benefit to research projects yet reuse of prior research projects introduces special problems that need to be mitigated. The research environment is a mix of creativity and systematic approach which leads to a creative tension that needs to be managed or at least monitored. Much of the coding in any university is undertaken by research students or young researchers. Issues of skills training, development and quality control can have significant effects on an entire department. In an industrial research setting, the environment is not quite that of industry as a whole, nor does it follow the pattern set by the university. The unique approaches and issues of industrial research may hold lessons for researchers in other domains. We take here the opportunity to warmly thank all the members of the ICSEA 2022 technical program committee, as well as all the reviewers. The creation of such a high-quality conference program would not have been possible without their involvement. We also kindly thank all the authors who dedicated much of their time and effort to contribute to ICSEA 2022. We truly believe that, thanks to all these efforts, the final conference program consisted of top-quality contributions. We also thank the members of the ICSEA 2022 organizing committee for their help in handling the logistics of this event. We hope that ICSEA 2022 was a successful international forum for the exchange of ideas and results between academia and industry and for the promotion of progress in software engineering advances
    corecore