Toward Improved Understanding and Management of Software Clones


Book Description

The cloning of code is controversial as a development practice. Empirical studies on the long-term effects of cloning on software quality and maintainability have produced mixed results. Some studies have found that cloning has a negative impact on code readability, bug propagation, and the presence of cloning may indicate wider problems in software design and management. At the same time, other studies have found that cloned code is less likely to have defects, and thus is arguably more stable, better designed, and better maintained. These results suggest that the effect of cloning on software quality and maintainability may be determinable only on a case-by-case basis, and this only aggravates the challenge of establishing a principled framework of clone management and understanding. This thesis aims to improve the understanding and management of clones within software systems.




Empirical Research towards a Relevance Assessment of Software Clones


Book Description

Redundancies in program source code - software clones - are a common phenomenon. Although it is often claimed that software clones decrease the maintainability of software systems and need to be managed, research in the last couple of years showed that not all clones can be considered harmful. A sophisticated assessment of the relevance of software clones and a cost-benefit analysis of clone management is needed to gain a better understanding of cloning and whether it is truly a harmful phenomenon. This thesis introduces techniques to model, analyze, and evaluate versatile aspects of software clone evolution within the history of a system. We present a mapping of non-identical clones across multiple versions of a system, that avoids possible ambiguities of previous approaches. Though processing more data to determine the context of each clone to avoid an ambiguous mapping, the approach is shown to be efficient and applicable to large systems for a retrospective analysis of software clone evolution. The approach has been used in several studies to gain insights into the phenomenon of cloning in open-source as well as industrial software systems. Our results show that non-identical clones require more attention regarding clone management compared to identical clones as they are the dominating clone type for the main share of our subject systems. Using the evolution model to investigate costs and benefits of refactorings that remove clones, we conclude that clone removals could not reduce maintenance costs for most systems under study.




Toward an Understanding of Software Code Cloning as a Development Practice


Book Description

Code cloning is the practice of duplicating existing source code for use elsewhere within a software system. Within the research community, conventional wisdom has asserted that code cloning is generally a bad practice, and that code clones should be removed or refactored where possible. While there is significant anecdotal evidence that code cloning can lead to a variety of maintenance headaches -- such as code bloat, duplication of bugs, and inconsistent bug fixing -- there has been little empirical study on the frequency, severity, and costs of code cloning with respect to software maintenance. This dissertation seeks to improve our understanding of code cloning as a common development practice through the study of several widely adopted, medium-sized open source software systems. We have explored the motivations behind the use of code cloning as a development practice by addressing several fundamental questions: For what reasons do developers choose to clone code? Are there distinct identifiable patterns of cloning? What are the possible short- and long-term term risks of cloning? What management strategies are appropriate for the maintenance and evolution of clones? When is the ``cure'' (refactoring) likely to cause more harm than the ``disease'' (cloning)? There are three major research contributions of this dissertation. First, we propose a set of requirements for an effective clone analysis tool based on our experiences in clone analysis of large software systems. These requirements are demonstrated in an example implementation which we used to perform the case studies prior to and included in this thesis. Second, we present an annotated catalogue of common code cloning patterns that we observed in our studies. Third, we present an empirical study of the relative frequencies and likely harmfulness of instances of these cloning patterns as observed in two medium-sized open source software systems, the Apache web server and the Gnumeric spreadsheet application. In summary, it appears that code cloning is often used as a principled engineering technique for a variety of reasons, and that as many as 71% of the clones in our study could be considered to have a positive impact on the maintainability of the software system. These results suggest that the conventional wisdom that code clones are generally harmful to the quality of a software system has been proven wrong.




Code Clone Analysis


Book Description

This is the first book organized around code clone analysis. To cover the broad studies of code clone analysis, this book selects past research results that are important to the progress of the field and updates them with new results and future directions. The first chapter provides an introduction for readers who are inexperienced in the foundation of code clone analysis, defines clones and related terms, and discusses the classification of clones. The chapters that follow are categorized into three main parts to present 1) major tools for code clone analysis, 2) fundamental topics such as evaluation benchmarks, clone visualization, code clone searches, and code similarities, and 3) applications to actual problems. Each chapter includes a valuable reference list that will help readers to achieve a comprehensive understanding of this diverse field and to catch up with the latest research results. Code clone analysis relies heavily on computer science theories such as pattern matching algorithms, computer language, and software metrics. Consequently, code clone analysis can be applied to a variety of real-world tasks in software development and maintenance such as bug finding and program refactoring. This book will also be useful in designing an effective curriculum that combines theory and application of code clone analysis in university software engineering courses.




Improving the Unification of Software Clones Using Tree and Graph Matching Algorithms


Book Description

Code duplication is common in all kind of software systems and is one of the most troublesome hurdles in software maintenance and evolution activities. Even though these code clones are created for the reuse of some functionality, they usually go through several modifications after their initial introduction. This has a serious negative impact on the maintainability, comprehensibility, and evolution of software systems. Existing code duplication can be eliminated by extracting the common functionality into a single module. In the past, several techniques have been developed for the detection and management of software clones. However, the unification and refactoring of software clones is still a challenging problem, since the existing tools are mostly focused on clone detection and there is no tool to find particularly refactoring-oriented clones. The programmers need to manually understand the clones returned by the clone detection tools, decide whether they should be refactored, and finally perform their refactoring. This obvious gap between the clone detection tools and the clone analysis tools, makes the refactoring tedious and the programmers reluctant towards refactoring duplicate codes. In this thesis, an approach for the unification and refactoring of software clones that overcomes the limitations of previous approaches is presented. More specifically, the proposed technique is able to detect and parameterize non-trivial differences between the clones. Moreover, it can find a mapping between the statements of the clones that minimizes the number of differences. We have also defined preconditions in order to determine whether the duplicated code can be safely refactored to preserve the behavior of the existing code. We compared the proposed technique with a competitive clone refactoring tool and concluded that our approach is able to find a significantly larger number of refactorable clones.




Grand Timely Topics in Software Engineering


Book Description

This tutorial volume includes the revised and extended tutorials (briefings) held at the 5th International Summer School on Grand Timely Topics in Software Engineering, GTTSE 2015, in Braga, Portugal, in August 2015. GTTSE 2015 applied a broader scope to include additional areas of software analysis, empirical research, modularity, and product lines. The tutorials/briefings cover probabilistic program analysis, ontologies in software engineering, empirical evaluation of programming and programming languages, model synchronization management of software product families, "people analytics" in software development, DSLs in robotics, structured program generation techniques, advanced aspects of software refactoring, and name binding in language implementation.




Customer Relationship Management


Book Description

About the Book: Customer Relationship Management CRM was born in the 1990s in the West. In the initial phases, the over enthusiastic businesses invested almost US$ 400 billion. But, the very same businesses were disheartened very soon primarily because there were no * visible. And, there were no quick results mainly because 80 per cent of the investments were made in technology. 'CRM' meant 'technology' to them then; 'CRM' means 'technology' to them even today. However, no business need bother so long as it is ready to go by the 'human' aspect of CRM, and take technology only as a facilitator. This book is an attempt to present this 'human' side of CRM. The authors' belief is that, in the long-term, CRM can be successful only due to its 'human' face. The book is arranged in three Parts. Part I, Customer Relationship Management, contains the academic inputs titled as Customer is King, Customer Managed Relationships MINI-Marketing, Types of CRM, Building Blocks of CRM & CRM Strategies, Customer Relationship Management by Indian Firms, Customer Retention Strategies, HRM in CRM, and Implementing a Technology-based CRM Solution. Part II, Call Centre Management, covers the areas concerning the working of a call centre titled as The Call Centre, Call Centre Functionality, Team Building, Customer Relationship Management, Web-based Customer Support, and Contact Centre Glossary. Part III, Cases, gives a first-hand idea of the working of CRM in the more peculiar contexts, like public sector undertakings through five well documented cases. Contents Part I: Customer Relationship Management, Customer is King, Customer Managed Relationships-Mini-Marketing, Types of CRM, Building Blocks of CRM & CRM Strategy, Customer Relationship Management by Indian Firms, Customer Retention Strategies, HRM in CRM, Implementing a Technology-based CRM Solution, Future Trends in CRM Part II: Call Centre Management, The Call Centre, Call Centre Functionality, Team Building, Customer Relatio




The Passionate Programmer


Book Description

Success in today's IT environment requires you to view your career as a business endeavor. In this book, you'll learn how to become an entrepreneur, driving your career in the direction of your choosing. You'll learn how to build your software development career step by step, following the same path that you would follow if you were building, marketing, and selling a product. After all, your skills themselves are a product. The choices you make about which technologies to focus on and which business domains to master have at least as much impact on your success as your technical knowledge itself--don't let those choices be accidental. We'll walk through all aspects of the decision-making process, so you can ensure that you're investing your time and energy in the right areas. You'll develop a structured plan for keeping your mind engaged and your skills fresh. You'll learn how to assess your skills in terms of where they fit on the value chain, driving you away from commodity skills and toward those that are in high demand. Through a mix of high-level, thought-provoking essays and tactical "Act on It" sections, you will come away with concrete plans you can put into action immediately. You'll also get a chance to read the perspectives of several highly successful members of our industry from a variety of career paths. As with any product or service, if nobody knows what you're selling, nobody will buy. We'll walk through the often-neglected world of marketing, and you'll create a plan to market yourself both inside your company and to the industry in general. Above all, you'll see how you can set the direction of your career, leading to a more fulfilling and remarkable professional life.




Proceedings


Book Description




Software Process Improvement for Small and Medium Enterprises: Techniques and Case Studies


Book Description

Software engineering is of major importance to all enterprises; however, the key areas of software quality and software process improvement standards and models are currently geared toward large organizations, where most software organizations are small and medium enterprises. Software Process Improvement for Small and Medium Enterprises: Techniques and Case Studies offers practical and useful guidelines, models, and techniques for improving software processes and products for small and medium enterprises, utilizing the authoritative, demonstrative tools of case studies and lessons learned to provide academics, scholars, and practitioners with an invaluable research source.