Beyond API Signatures: An Empirical Study on Behavioral Backward Incompatibilities of Java Software Libraries
نویسندگان
چکیده
To make sure that existing client software applications are not broken after a library update, backward compatibility has always been one of the most important requirements during the evolution of software libraries. However, due to various reasons, backward compatibility is seldom fully achieved in practice, so it is important to understand the status, major reasons, and impact of backward incompatibilities in real world software. Previous studies related to this topic mainly focus on API signature changes between consecutive versions of software libraries, while in this paper, we mainly consider behavioral changes of APIs. Specifically, we performed large-scale cross-version regression testing on 68 consecutive version pairs from 15 most popular Java software libraries. Furthermore, we collected and studied 144 real world software bugs caused by backward incompatibilities of software libraries. Our major findings include: (1) more than 1,000 test failures / errors and 280 groups of behavioral backward incompatibilities are detected from 52 of 68 consecutive version pairs; (2) a large portion backward incompatibilities causing real-world bugs are related to user interface, which may be difficult to be detected by current automatic regression testing techniques; (3) the majority of backward incompatibilities are not well documented; and (4) there exists a number of fix patterns for behavioral backward incompatibilities.
منابع مشابه
Reducing the use of nullable types through non-null by default and monotonic non-null
With Java 5 annotations, we note a marked increase in tools that can statically detect potential null dereferences. To be effective such tools require that developers annotate declarations with nullity modifiers and have annotated API libraries. Unfortunately, in our experience specifying moderately large code bases, the use of non-null annotations is more labor intensive than it should be. Mot...
متن کاملTowards Categorizing and Formalizing the JDK API
Formal specification of correct library usage is extremely useful, both for software developers and for the formal analysis tools they use, such as model checkers or runtime monitoring systems. Unfortunately, the process of creating formal specifications is time consuming, and, for the most part, even the libraries in greatest use, such as the Java Development Kit (JDK) standard library, are le...
متن کاملPractical experience with the .NET cryptographic API
When a vulnerability is discovered in a cryptographic algorithm, or in a specific implementation of that algorithm, it is important that software using that algorithm or implementation is upgraded quickly. Hence, modern cryptographic libraries such as the Java Cryptographic Architecture and Extensions (JCA/JCE) and the .NET crypto libraries are designed to be extensible with new algorithms. In ...
متن کاملAn empirical study on the impact of refactoring activities on evolving client-used APIs
Context: Refactoring is recognized as an effective practice to maintain evolving software systems. For software libraries, we study how library developers refactor their Application Programming Interfaces (APIs), especially when it impacts client users by breaking an API of the library. Objective: Our work aims to understand how clients that use a library API are affected by refactoring activit...
متن کاملNon-null References by Default in Java: Alleviating the Nullity Annotation Burden
With the advent of Java 5 annotations, we note a marked increase in the availability of tools that can statically detect potential null dereferences. For such tools to be truly effective, they require that developers annotate declarations in their code with nullity modifiers and have annotated API libraries. Unfortunately, it has been our experience in specifying moderately large code bases tha...
متن کامل