TL;DR: Four in-depth examples explain the basic functionality of PsyToolkit and explain the electronic hardware setup such that they can even be used with other software packages.
Abstract: PsyToolkit is a set of software tools for programming psychological experiments on Linux computers. Given that PsyToolkit is freely available under the Gnu Public License, open source, and designed such that it can easily be modified and extended for individual needs, it is suitable not only for technically oriented Linux users, but also for students, researchers on small budgets, and universities in developing countries. The software includes a high-level scripting language, a library for the programming language C, and a questionnaire presenter. The software easily integrates with other open source tools, such as the statistical software package R. PsyToolkit is designed to work with external hardware (including IoLab and Cedrus response keyboards and two common digital input/output boards) and to support millisecond timing precision. Four in-depth examples explain the basic functionality of PsyToolkit. Example 1 demonstrates a stimulus—response compatibility experiment. Example 2 demonstrates a novel mouse-controlled visual search experiment. Example 3 shows how to control light emitting diodes using PsyToolkit, and Example 4 shows how to build a light-detection sensor. The last two examples explain the electronic hardware setup such that they can even be used with other software packages.
TL;DR: The Basics of Software Engineering Experimentation demonstrates to software engineers how Experimental Design and Analysis can be used to validate their beliefs and ideas.
Abstract: Basics of Software Engineering Experimentation is a practical guide to experimentation in a field which has long been underpinned by suppositions, assumptions, speculations and beliefs It demonstrates to software engineers how Experimental Design and Analysis can be used to validate their beliefs and ideas The book does not assume its readers have an in-depth knowledge of mathematics, specifying the conceptual essence of the techniques to use in the design and analysis of experiments and keeping the mathematical calculations clear and simple Basics of Software Engineering Experimentation is practically oriented and is specially written for software engineers, all the examples being based on real and fictitious software engineering experiments
TL;DR: This reference resource covers various topics related to the development of software, the environments in which software operates, and how humans interact with these environments.
Abstract: Software engineering requires specialized knowledge of a broad spectrum of topics, including the construction of software; the platforms, applications and environments in which the software operates; as well as an understanding of the people who build and use the software.
This reference resource covers various topics related to the development of software, the environments in which software operates, and how humans interact with these environments. … Articles in this set offer an overview of broad topics, including economics, human-centered computing, and the IEEE Computer Society.
TL;DR: The authors provide an overview of recommendation systems for software engineering: what they are, what they can do for developers, and what they might do in the future.
Abstract: Software development can be challenging because of the large information spaces that developers must navigate. Without assistance, developers can become bogged down and spend a disproportionate amount of their time seeking information at the expense of other value-producing tasks. Recommendation systems for software engineering (RSSEs) are software tools that can assist developers with a wide range of activities, from reusing code to writing effective bug reports. The authors provide an overview of recommendation systems for software engineering: what they are, what they can do for developers, and what they might do in the future.
TL;DR: These recommendation provide a good starting point for identifying and resolving software problems early in life cycle—when they're s relatively easy to handle.
Abstract: Definitions of the terms "verification" and "validation," and an explanation of their context in the software life-cycle; A description of the basic sequence of functions performed during software requirements and design VV An evaluation of the relative cost and effectiveness of the major software requirements and design VV An example V&V checklist for software system reliability and availability.
TL;DR: The waterfall model is considered before the other models because it has had a profound effect on software development, and has additionally influenced many SDLC models prevalent today.
Abstract: This history column article provides a tour of the main software development life cycle (SDLC) models. (A lifecycle covers all the stages of software from its inception with requirements definition through to fielding and maintenance.) System development lifecycle models have drawn heavily on software and so the two terms can be used interchangeably in terms of SDLC, especially since software development in this respect encompasses software systems development. Because the merits of selecting and using an SDLC vary according to the environment in which software is developed as well as its application, I discuss three broad categories for consideration when analyzing the relative merits of SDLC models. I consider the waterfall model before the other models because it has had a profound effect on software development, and has additionally influenced many SDLC models prevalent today. Thereafter, I consider some of the mainstream models and finish with a discussion of what the future could hold for SDLC models.
TL;DR: An automated technique that combines traceability with a machine learning technique known as topic modeling is proposed that automatically records traceability links during the software development process and learns a probabilistic topic model over artifacts.
Abstract: Software traceability is a fundamentally important task in software engineering. The need for automated traceability increases as projects become more complex and as the number of artifacts increases. We propose an automated technique that combines traceability with a machine learning technique known as topic modeling. Our approach automatically records traceability links during the software development process and learns a probabilistic topic model over artifacts. The learned model allows for the semantic categorization of artifacts and the topical visualization of the software system. To test our approach, we have implemented several tools: an artifact search tool combining keyword-based search and topic modeling, a recording tool that performs prospective traceability, and a visualization tool that allows one to navigate the software architecture and view semantic topics associated with relevant artifacts and architectural components. We apply our approach to several data sets and discuss how topic modeling enhances software traceability, and vice versa.
TL;DR: The main objective of this research is to represent different models of software development and make a comparison between them to show the features and defects of each model.
Abstract: This research deals with a vital and important issue in computer world. It is concerned with the software management processes that examine the area of software development through the development models, which are known as software development life cycle. It represents five of the development models namely, waterfall, Iteration, V-shaped, spiral and Extreme programming. These models have advantages and disadvantages as well. Therefore, the main objective of this research is to represent different models of software development and make a comparison between them to show the features and defects of each model.
TL;DR: Five approaches to software development are presented, organized from integration-centric to composition-oriented and the areas of applicability are described.
TL;DR: This tutorial will present the reader with a step-by-step guide to the application of SBSE techniques to Software Engineering, and assumes neither previous knowledge nor experience with Search Based Optimisation.
Abstract: The aim of Search Based Software Engineering (SBSE) research is to move software engineering problems from human-based search to machine-based search, using a variety of techniques from the metaheuristic search, operations research and evolutionary computation paradigms. The idea is to exploit humans' creativity and machines' tenacity and reliability, rather than requiring humans to perform the more tedious, error prone and thereby costly aspects of the engineering process. SBSE can also provide insights and decision support. This tutorial will present the reader with a step-by-step guide to the application of SBSE techniques to Software Engineering. It assumes neither previous knowledge nor experience with Search Based Optimisation. The intention is that the tutorial will cover sufficient material to allow the reader to become productive in successfully applying search based optimisation to a chosen Software Engineering problem of interest.
TL;DR: This work proposes an automated approach to search the design space for good solutions by applying a multi-criteria genetic algorithm to software architectures modelled with the Palladio Component Model and can be extended to other quantitative quality criteria of software architectures.
Abstract: Quantitative prediction of quality properties (i.e. extra-functional properties such as performance, reliability, and cost) of software architectures during design supports a systematic software engineering approach. Designing architectures that exhibit a good trade-off between multiple quality criteria is hard, because even after a functional design has been created, many remaining degrees of freedom in the software architecture span a large, discontinuous design space. In current practice, software architects try to find solutions manually, which is time-consuming, can be error-prone and can lead to suboptimal designs. We propose an automated approach to search the design space for good solutions. Starting with a given initial architectural model, the approach iteratively modifies and evaluates architectural models. Our approach applies a multi-criteria genetic algorithm to software architectures modelled with the Palladio Component Model. It supports quantitative performance, reliability, and cost prediction and can be extended to other quantitative quality criteria of software architectures. We validate the applicability of our approach by applying it to an architecture model of a component-based business information system and analyse its quality criteria trade-offs by automatically investigating more than 1200 alternative design candidates.
TL;DR: This paper introduces an agent-oriented software process for engineering complex systems called ASPECS, based on a holonic organisational metamodel and provides a step-by-step guide from requirements to code allowing the modelling of a system at different levels of details using a set of refinement methods.
Abstract: Holonic multiagent systems (HMAS) offer a promising software engineering approach for developing complex open software systems. However the process of building Multi-Agent Systems (MAS) and HMAS is mostly different from the process of building more traditional software systems as it introduces new design and development challenges. This paper introduces an agent-oriented software process for engineering complex systems called ASPECS. ASPECS is based on a holonic organisational metamodel and provides a step-by-step guide from requirements to code allowing the modelling of a system at different levels of details using a set of refinement methods. This paper details the entire ASPECS development process and provides a set of methodological guidelines for each process activity. A complete case study is also used to illustrate the design process and the associated notations. ASPECS uses UML as a modelling language. Because of the specific needs of agents and holonic organisational design, the UML semantics and notation are used as reference points, but they have been extended by introducing new specific profiles.
TL;DR: To the authors' knowledge, Cloud9 is the first symbolic execution engine that scales to large clusters of machines, thus enabling thorough automated testing of real software in conveniently short amounts of time.
Abstract: Cloud9 aims to reduce the resource-intensive and laborintensive nature of high-quality software testing. First, Cloud9 parallelizes symbolic execution (an effective, but still poorly scalable test automation technique) to large shared-nothing clusters. To our knowledge, Cloud9 is the first symbolic execution engine that scales to large clusters of machines, thus enabling thorough automated testing of real software in conveniently short amounts of time. Preliminary results indicate one to two orders of magnitude speedup over a state-of-the-art symbolic execution engine. Second, Cloud9 is an on-demand software testing service: it runs on compute clouds, like Amazon EC2, and scales its use of resources over a wide dynamic range, proportionally with the testing task at hand.
TL;DR: This paper considers whether exposing hardware fault information to software and allowing software to control fault recovery simplifies hardware design and helps technology scaling, and describes Relax, an architectural framework for software recovery of hardware faults.
Abstract: As technology scales ever further, device unreliability is creating excessive complexity for hardware to maintain the illusion of perfect operation. In this paper, we consider whether exposing hardware fault information to software and allowing software to control fault recovery simplifies hardware design and helps technology scaling. The combination of emerging applications and emerging many-core architectures makes software recovery a viable alternative to hardware-based fault recovery. Emerging applications tend to have few I/O and memory side-effects, which limits the amount of information that needs checkpointing, and they allow discarding individual sub-computations with small qualitative impact. Software recovery can harness these properties in ways that hardware recovery cannot. We describe Relax, an architectural framework for software recovery of hardware faults. Relax includes three core components: (1) an ISA extension that allows software to mark regions of code for software recovery, (2) a hardware organization that simplifies reliability considerations and provides energy efficiency with hardware recovery support removed, and (3) software support for compilers and programmers to utilize the Relax ISA. Applying Relax to counter the effects of process variation, our results show a 20% energy efficiency improvement for PARSEC applications with only minimal source code changes and simpler hardware.
TL;DR: It is found that existing conversation-based generators can produce better results than random generators and that a generator trained specifically on bug reports can perform statistically better than existing conversationThe generation of summaries for bug reports is considered.
Abstract: Many software artifacts are created, maintained and evolved as part of a software development project. As software developers work on a project, they interact with existing project artifacts, performing such activities as reading previously filed bug reports in search of duplicate reports. These activities often require a developer to peruse a substantial amount of text. In this paper, we investigate whether it is possible to summarize software artifacts automatically and effectively so that developers could consult smaller summaries instead of entire artifacts. To provide focus to our investigation, we consider the generation of summaries for bug reports. We found that existing conversation-based generators can produce better results than random generators and that a generator trained specifically on bug reports can perform statistically better than existing conversation-based generators. We demonstrate that humans also find these generated summaries reasonable indicating that summaries might be used effectively for many tasks.
TL;DR: The basics of the most popular meta-heuristic algorithms are presented as background to the search-based viewpoint, and the choices regarding critical decisions, when used in meta- heuristic search algorithms, are emphasized and discussed in detail.
TL;DR: This chapter discusses Knowledge Management in Software Engineering, e-R&D: Effectively Managing and Using R&D Knowledge, and Knowledge Infrastructure for Project Management.
Abstract: 1 Why Is It Important to Manage Knowledge?.- 1 Managing Software Engineers and Their Knowledge.- 2 An Investigation into Software Development Process Knowledge.- 3 Usage of Intranet Tools for Knowledge Management in a Medium-Sized Software Consulting Company.- 2 Supporting Structures for Managing Software Engineering Knowledge.- 4 Knowledge Management for Software Organizations.- 5 A Dynamic Model of Software Engineering Knowledge Creation.- 6 Evaluating an Approach to Sharing Software Engineering Knowledge to Facilitate Learning.- 7 Eliciting and Maintaining Knowledge for Requirements Evolution.- 8 Emergent Knowledge in Web Development.- 3 Application of Knowledge Management in Software Engineering.- 9 Case-Based Reasoning and Software Engineering.- 10 A Process for Identifying Relevant Information for a Repository: A Case Study for Testing Techniques.- 11 A Knowledge Management Framework to Support Software Inspection Planning.- 12 Lessons Learned in Software Quality Assurance.- 13 Making Software Engineering Competence Development Sustained through Systematic Experience Management.- 4 Practical Guidelines for Managing Software Engineering Knowledge.- 14 Practical Guidelines for Learning-Based Software Product Development.- 15 In-Project Learning by Goal-oriented Measurement.- 16 e-R&D: Effectively Managing and Using R&D Knowledge.- 17 Knowledge Infrastructure for Project Management.
TL;DR: This paper will discuss the contents of the following quality models: McCall’s quality model, Boehm's quality model , Dromey'squality model, FURPS quality model and ISO 9126 quality model; and find the key differences between them.
Abstract: The quality of the software is critical and essential in different types of organizations. In some types of software, poor quality of the software product in sensitive systems (such as: real-time systems, control systems, etc.) may lead to loss of human life, permanent injury, mission failure, or financial loss. In software engineering literature, there are a number of quality models in which they contain a number of quality characteristics (or factors, as called in some models). These quality characteristics could be used to reflect the quality of the software product from the view of that characteristic. Selecting which one of the quality models to use is a real challenge. In this paper, we will discuss the contents of the following quality models: McCall’s quality model, Boehm’s quality model, Dromey's quality model, FURPS quality model and ISO 9126 quality model. In addition, we will focus on a comparison between these quality models, and find the key differences between them. [Journal of American Science 2010; 6(3):166-175]. (ISSN: 1545-1003).
TL;DR: A systematic literature review of software architecture change characteristics was presented and the results were used to create the Software Architecture Change Characterization Scheme (SACCS), which is to identify the characteristics of a software change that will have an impact on the high-level software architecture.
Abstract: With today's ever increasing demands on software, software developers must produce software that can be changed without the risk of degrading the software architecture. One way to address software changes is to characterize their causes and effects. A software change characterization mechanism allows developers to characterize the effects of a change using different criteria, e.g. the cause of the change, the type of change that needs to be made, and the part of the system where the change must take place. This information then can be used to illustrate the potential impact of the change. This paper presents a systematic literature review of software architecture change characteristics. The results of this systematic review were used to create the Software Architecture Change Characterization Scheme (SACCS). This report addresses key areas involved in making changes to software architecture. SACCS's purpose is to identify the characteristics of a software change that will have an impact on the high-level software architecture.
TL;DR: This book looks at the classical metrology concepts from science and engineering using them as criteria to propose an approach to analyze the design of current software measures and then design new software measures.
Abstract: Most of the software measures currently proposed to the industry bring few real benefits to either software managers or developers. This book looks at the classical metrology concepts from science and engineering, using them as criteria to propose an approach to analyze the design of current software measures and then design new software measures (illustrated with the design of a software measure that has been adopted as an ISO measurement standard). The book includes several case studies analyzing strengths and weaknesses of some of the software measures most often quoted. It is meant for software quality specialists and process improvement analysts and managers.
TL;DR: It is argued that the reality of today's software systems requires us to consider uncertainty as a first-class concern in the design, implementation, and deployment of those systems.
Abstract: In this paper, we argue that the reality of today's software systems requires us to consider uncertainty as a first-class concern in the design, implementation, and deployment of those systems. We further argue that this induces a paradigm shift, and a number of research challenges that must be addressed.
TL;DR: Based on the study, the applicability of test automation is still limited and its adaptation to testing contains practical difficulties in usability, and the limitations and difficulties are analyzed.
Abstract: The objective of this industry study is to shed light on the current situation and improvement needs in software test automation. To this end, 55 industry specialists from 31 organizational units were interviewed. In parallel with the survey, a qualitative study was conducted in 12 selected software development organizations. The results indicated that the software testing processes usually follow systematic methods to a large degree, and have only little immediate or critical requirements for resources. Based on the results, the testing processes have approximately three fourths of the resources they need, and have access to a limited, but usually sufficient, group of testing tools. As for the test automation, the situation is not as straightforward: based on our study, the applicability of test automation is still limited and its adaptation to testing contains practical difficulties in usability. In this study, we analyze and discuss these limitations and difficulties.
TL;DR: The Small Project Observatory is presented, a prototype tool which aims to support the analysis of software ecosystems through interactive visualization and exploration and distill lessons learned during the tool-building experience.
TL;DR: In this paper, a compatibility service can determine the compatibility of different software programs provided by different vendors in a cloud and which of the identified software programs are compatible, based on a record of the compatible software programs and provide identification, tracking, and mapping services based on the record.
Abstract: A compatibility service can determine the compatibility of different software programs provide by different vendors in a cloud. The compatibility service can identify the software programs provided by different vendors in the cloud and which of the identified software programs are compatible. The compatibility service can generate and store a record of the compatible software programs and provide identification, tracking, and mapping services based on the record.
TL;DR: It is concluded that researchers in empirical software engineering must consider the external validity concerns that arise from using only several well-known open source software projects, and that discussion of data source selection is an important discussion topic in software engineering research.
Abstract: Empirical studies that use software repository artifacts have become popular in the last decade due to the ready availability of open source project archives. In this paper, we survey empirical studies in the last three years of ICSE and FSE proceedings, and categorize these studies in terms of open source projects vs. proprietary source projects and the diversity of subject programs used in these studies. Our survey has shown that almost half (49%) of recent empirical studies used solely open source projects. Existing studies either draw general conclusions from these results or explicitly disclaim any conclusions that can extend beyond specific subject software.We conclude that researchers in empirical software engineering must consider the external validity concerns that arise from using only several well-known open source software projects, and that discussion of data source selection is an important discussion topic in software engineering research. Furthermore, we propose a community research infrastructure for software repository benchmarks and sharing the empirical analysis results, in order to address external validity concerns and to raise the bar for empirical software engineering research that analyzes software artifacts.
TL;DR: It is argued that, in the modern era when Moore's dividend becomes less obvious, performance optimization is more of a software engineering problem than ever and should receive much more attention in the future.
Abstract: Generally believed to be a problem belonging to the compiler and architecture communities, performance optimization has rarely gained attention in mainstream software engineering research. However, due to the proliferation of large-scale object-oriented software designed to solve increasingly complex problems, performance issues stand out, preventing applications from meeting their performance requirements. Many such issues result from design principles adopted widely in the software research community, such as the idea of software reuse and design patterns. We argue that, in the modern era when Moore's dividend becomes less obvious, performance optimization is more of a software engineering problem than ever and should receive much more attention in the future. We explain why this is the case, review what has been achieved in software bloat analysis, present challenges, and provide a road map for future work.
TL;DR: This book delivers a comprehensive state-of-the-art overview and empirical results for researchers in academia and industry in areas like software process management, empirical software engineering, and global software development.
Abstract: Collaboration among individuals from users to developers is central to modern software engineering. It takes many forms: joint activity to solve common problems, negotiation to resolve conflicts, creation of shared definitions, and both social and technical perspectives impacting all software development activity. The difficulties of collaboration are also well documented. The grand challenge is not only to ensure that developers in a team deliver effectively as individuals, but that the whole team delivers more than just the sum of its parts. The editors of this book have assembled an impressive selection of authors, who have contributed to an authoritative body of work tackling a wide range of issues in the field of collaborative software engineering. The resulting volume is divided into four parts, preceded by a general editorial chapter providing a more detailed review of the domain of collaborative software engineering. Part 1 is on "Characterizing Collaborative Software Engineering", Part 2 examines various "Tools and Techniques", Part 3 addresses organizational issues, and finally Part 4 contains four examples of "Emerging Issues in Collaborative Software Engineering". As a result, this book delivers a comprehensive state-of-the-art overview and empirical results for researchers in academia and industry in areas like software process management, empirical software engineering, and global software development. Practitioners working in this area will also appreciate the detailed descriptions and reports which can often be used as guidelines to improve their daily work.
TL;DR: This position paper summarizes the state of practice and research of SI, and lays out future research directions for mining software engineering data to enable SI.
Abstract: Mining software engineering data has emerged as a successful research direction over the past decade. In this position paper, we advocate Software Intelligence (SI) as the future of mining software engineering data, within modern software engineering research, practice, and education. We coin the name SI as an inspiration from the Business Intelligence (BI) field, which offers concepts and techniques to improve business decision making by using fact-based support systems. Similarly, SI offers software practitioners (not just developers) up-to-date and pertinent information to support their daily decision-making processes. SI should support decision-making processes throughout the lifetime of a software system not just during its development phase.The vision of SI has yet to become a reality that would enable software engineering research to have a strong impact on modern software practice. Nevertheless, recent advances in the Mining Software Repositories (MSR) field show great promise and provide strong support for realizing SI in the near future. This position paper summarizes the state of practice and research of SI, and lays out future research directions for mining software engineering data to enable SI.
TL;DR: This work proposes an approach to automatically track changes occurring in the licensing terms of a system and reports an empirical study of the licensing evolution of six different FOSS systems, showing that licensing underwent frequent and substantial changes.
Abstract: Free and open source software systems (FOSS) are distributed and made available to users under different software licenses, mentioned in FOSS code by means of licensing statements. Various factors, such as changes in the legal landscape, commercial code licensed as FOSS, or code reused from other FOSS systems, lead to evolution of licensing, which may affect the way a system or part thereof can be subsequently used. Therefore, it is crucial to monitor licensing evolution. However, manually tracking the licensing evolution of thousands of files is a daunting task. After presenting several cases of the effects of licensing evolution, we propose an approach to automatically track changes occurring in the licensing terms of a system. Then, we report an empirical study of the licensing evolution of six different FOSS systems. Results show that licensing underwent frequent and substantial changes.