TL;DR: In this article, a compiler program executed by the first computer compiles the source code into binary code and computes a message digest for the binary code, such that the encrypted message digest is defined as a digital "signature" of the application writer.
Abstract: Source code to be protected, a software application writer's private key, along with an application writer's license provided to the first computer. The application writer's license includes identifying information such as the application writer's name as well as the application writer's public key. A compiler program executed by the first computer compiles the source code into binary code, and computes a message digest for the binary code. The first computer then encrypts the message digest using the application writer's private key, such that the encrypted message digest is defined as a digital "signature" of the application writer. A software passport is then generated which includes the application writer's digital signature, the application writer's license and the binary code. The software passport is then distributed to a user using any number of software distribution models known in the industry. A user, upon receipt of the software passport, loads the passport into a computer which determines whether the software passport includes the application writer's license and digital signature. In the event that the software passport does not include the application writer's license, or the application writer's digital signature, then the user's computer system discards the software passport and does not execute the binary code. As an additional security step, the user's computer computes a second message digest for the software passport and compares it to the first message digest, such that if the first and second message digests are not equal, the software passport is also rejected by the user's computer and the code is not executed. If the first and second message digests are equal, the user's computer extracts the application writer's public key from the application writer's license for verification. The application writer's digital signature is decrypted using the application writer's public key. The user's computer then compares a message digest of the binary code to be executed, with the decrypted application writer's digital signature, such that if they are equal, the user's computer executes the binary code.
TL;DR: This paper proposes an automated approach to detect defects of API documents by leveraging techniques from program comprehension and natural language processing, and focuses on the directives of the API documents which are related to parameter constraints and exception throwing declarations.
Abstract: Application Programming Interface (API) documents represent one of the most important references for API users. However, it is frequently reported that the documentation is inconsistent with the source code and deviates from the API itself. Such inconsistencies in the documents inevitably confuse the API users hampering considerably their API comprehension and the quality of software built from such APIs. In this paper, we propose an automated approach to detect defects of API documents by leveraging techniques from program comprehension and natural language processing. Particularly, we focus on the directives of the API documents which are related to parameter constraints and exception throwing declarations. A first-order logic based constraint solver is employed to detect such defects based on the obtained analysis results. We evaluate our approach on parts of well documented JDK 1.8 APIs. Experiment results show that, out of around 2000 API usage constraints, our approach can detect 1158 defective document directives, with a precision rate of 81.6%, and a recall rate of 82.0%, which demonstrates its practical feasibility.
TL;DR: Practical API Design: Confessions of a Java Framework Architect teaches you how to write an API that will stand the test of time and applies to all programming languages, especially modern, objectoriented languages.
Abstract: You might think more than enough design books exist in the programming world already. In fact, there are so many that it makes sense to ask why you would read yet another. Is there really a need for yet another design book? In fact, there is a greater need than ever before, and Practical API Design: Confessions of a Java Framework Architect fills that need! Teaches you how to write an API that will stand the test of Time Written by the designer of the NetBeans API at Sun Based on best practices, scalability, and API design patterns What youll learn What an API is and what the theories are behind good API design When and why to build an API API design patterns applicable to all programming languages, especially modern, objectoriented languages How to optimize and test APIs Who is this book for? This book is recommended to every API architect who prefers a bit more engineering design over a purely artistic one.
TL;DR: The results show that developers initially try to form a global understanding regarding the overall purpose and main features of an API, but then adopt either a concepts-oriented or a code-oriented learning strategy that API documentation both needs to address.
Abstract: The success of an application programming interface (API) crucially depends on how well its documentation meets the information needs of software developers. Previous research suggests that these i...
TL;DR: This paper presents the design and the results of an empirical study on the directives of API documentation of object-oriented libraries, and proposes and extensively discusses a taxonomy of 23 kinds of API directives.
Abstract: 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.