Figure 1 - uploaded by Kumiyo Nakakoji
Content may be subject to copyright.
The growth of Java SDK API classes and interfaces Given the sheer number of available APIs, few programmers, if any, know all of them. Whenever their programming tasks require API methods that they don’t yet know, they have to be able to learn to use the API methods on demand. To learn to use a new API method on demand during a programming practice requires that a programmer quickly find the one that he or she needs, understand the specifics that are related to the current task, and integrate the API into his or her own programs. Learning to use APIs on demand is different from other forms of learning in which the aim is to increase the general knowledge to prepare for potential future use. When the need for learning to use an unknown API method arises in a programming practice, the primary concern of the programmer is use, not the increase of general knowledge, because he or she has a pressing task to be accomplished [8]. Therefore, the process of learning to use a specific API on demand is highly personalized to the specific needs and existing knowledge of the programmer, and is tightly contextualized in the task and environment of the programmer.
Source publication
The existence of large API libraries contributes significantly to the programming productivity and quality of Java programmers. The vast number of available library APIs, however, presents a learning challenge for Java programmers. Most Java programmers do not know all the APIs. Whenever their programming task requires API methods they do not yet k...
Context in source publication
Context 1
... existence of large API libraries contributes significantly to the programming productivity and quality of Java programmers. The current Standard Edition of Java 1.6.0 (i.e., Java SE 6) has 3,777 classes and interfaces in its API library. As shown in Figure 1, the standard API library of Java SDK has grown nearly linearly over the past several years at the average rate of 356 classes and interfaces per year. In addition to the standard Java SDK APIs, many third-party API libraries from both proprietary companies and Open Source Software communities are being developed and becoming available for Java ...
Similar publications
It has become common practice to build programs by using libraries. While the benefits of reuse are well known, an often overlooked risk are system runtime failures due to API changes in libraries that evolve independently. Traditionally, the consistency between a program and the libraries it uses is checked at build time when the entire system is...
Citations
... It would be even better, after recommending certain APIs to developers, to recommend or generate and visualize sample code usages of the APIs so that it may be easier for the developers to understand and reuse the sample code in their code [4,5,[8][9][10][11][12][35][36][37][38][39][40][41][42][43][44][45][46][47][48][49][50][51], and even auto-complete developers' code or fix bugs using the APIs and proper parameters based on developers' coding contexts [6,7,[52][53][54][55][56][57][58]. There are studies that aim to achieve these goals, but they have not been adapted for generating code samples for eventdriven programs, where control flows and call relations are implicit and functionalities need to be implemented by not just invoking functional APIs but also overriding suitable callbacks. ...
Context
Software development is increasingly dependent on existing libraries. Developers need help to find suitable library APIs. Although many studies have been proposed to recommend relevant functional APIs that can be invoked for implementing a functionality, few studies have paid attention to an orthogonal need associated with event-driven programming frameworks, such as the Android framework. In addition to invoking functional APIs, Android developers need to know where to place functional code according to various events that may be triggered within the framework.
Objective
This paper aims to develop an API recommendation engine for Android application development that can recommend both (1) functional APIs for implementing a functionality and (2) the event callback APIs that are to be overridden to contain the functional code.
Method
We carry out an empirical study on actual Android programming questions from StackOverflow to confirm the need of recommending callbacks. Then we build Android-specific API databases to contain the correlations among various functionalities and APIs, based on customized parsing of code snippets and natural language processing of texts in Android tutorials and SDK documents, and then textual and code similarity metrics are adapted for recommending relevant APIs.
Results
We have evaluated our prototype recommendation engine, named LibraryGuru, with about 1500 questions on Android programming from StackOverflow, and demonstrated that our top-5 results on recommending callbacks and functional APIs can on estimate achieve up to 43.5% and 50.9% respectively in precision, 24.6% and 32.5% respectively in mean average precision (MAP) scores, and 51.1% and 44.0% respectively in recall.
Conclusion
We conclude that it is important and possible to recommend both functional APIs and callbacks for Android application development, and future work is needed to take more data sources into consideration to make more relevant recommendations for developers’ needs.
... Une alternative proposée par Ye et al. est un outil à la recherche de développeurs ayant des connaissances sur des éléments d'une API donnée [Ye et al., 2007]. L'idée est la suivante : un développeur importe dans l'outil un programme binaire Java. ...
Software depend on third-party libraries to reduce development and maintenance costs. Developers have access to robust functionalities through an application programming interface designed by these libraries. However, due to the strong relationship with these libraries, developers have to reconsider their position when the software evolves. In this thesis, we identify several re-search problems involving these third-party libraries in a context of software maintenance. More specifically, a library may not satisfy the software new requirements and has to be replaced by anew one. We call this operation a library migration.We leverage three points that characterize the impediments met by developers in this situation.To which library should they migrate ? How to migrate their software ? Who can help them in this case ? This thesis suggests answers and exposes several contributions to these problems. We define three approaches that are evaluated through several case studies. To achieve this work, weuse a methodology based on software evolution analysis to observe and understand how software change. We describe numerous perspectives to overcome the current limitations of our solutions.
... For example, the Standard Edition of the Java Development Kit version 1.6 (i.e., Java SE 6) has 3,777 classes and interfaces. Over the past several years, the standard API library of Java SDK has grown nearly linearly, on average at a rate of 356 classes and interfaces per year [10]. As another example, in a keynote speech 1 , Charles Petzold estimated that "[in the] .NET Framework 2.0 [,] [t]abulating only MSCORLIB.DLL and those assemblies that begin with word System, [there are] over 5,000 public classes that include over 45,000 public methods and 15,000 public properties, not counting those methods and properties that are inherited and not overridden." ...
Nowadays, programmers spend much of their workday dealing with code libraries and frameworks that are bloated with APIs. One common way of interacting with APIs is through Code Completion inside the code editor. By default, Code Completion presents in a popup pane, in alphabetical order or by relevance, all accessible members available in the apparent type and supertypes of a receiver expression. This default behavior for Code Completion should and can be further improved because (1) not all public methods are APIs and presenting non-API public members to a programmer is misleading, (2) certain APIs are meant to be accessible only in some limited contexts but not others, (3) the alphabetical order separates otherwise logically related APIs, making it hard to see their connection and to work with, and (4) commonly used APIs are often presented long after much less used APIs due to suboptimal API sorting strategies. BCC (Better Code Completion) addresses these problems by enhancing Code Completion so that programmers can control how specific API elements should be sorted, filtered, and grouped. We report our preliminary validation results from testing BCC with Java projects that make use of the AWT/Swing APIs. For one large project, the BCC approach reduces by over ninety percent the total number of APIs that a programmer would have to scroll through using Eclipse's Code Completion before settling on the desired ones.
... This research indicates that the communication among the developers is very important in recent software developments. Ye et al. [9] [10] helped the software developers to search the knowledge from the software libraries and members of software development team. They proposed the personalized search engine for API documents and communication channels for experts in software development team. ...
Communication is more important in software development fields. We proposed the intermediary knowledge model to analyze the enterprise communication by extending traditional knowledge creation model. In this article, we propose TIE models based on intermediary knowledge. TIE model is the knowledge network model to explain the just in time documentation in the CMC tools like wiki. We analyzed the case of wiki based software development and showed the effectiveness and efficiency of the CMC tools in software development in certain conditions.
... The former should be installed within an Eclipse platform. However, since it is widely acknowledged that the most desirable characteristic in an educational tool is simplicity, for a complex tool could discourage students, we provided also a stand-alone release of S-vLab [15,31]. This second version is implemented as a Rich Client Application, a rich client built on top of the Eclipse Rich Client Platform [23]. ...
... Finally, several systems have been developed to support students' practicing with the Java language. Some of them help searching the increasingly large Java API libraries [30], provide code samples illustrating the use of Java APIs [16,27], and support learners by allowing knowledge sharing among peers [31]; others can automatically collect and assess Java program fragments [7,17] and offer a pedagogical support tool to be added to commonly used software development frameworks [13]. All of these can effectively facilitate learning and gaining programming expertise both for novices and advanced students. ...
In many fields of Computer Engineering education it is crucial that students gain both conceptual understanding and practical skills. To this end, an effective teaching approach relies on a blended-learning strategy that combines face-to-face lessons with students' practice on some suitable educational tool. Such a tool should support students through the whole learning process, and help them to improve their modelling ability along with their programming expertise. In this paper we describe S-vLab, a virtual laboratory for supporting teaching and learning in several applicative domains; in particular, we analyse S-vLab applied to the Information Security field. In this context, one of its main goals is to help students in dealing with the Java Security Platform, supporting different learning styles and allowing multiple formative paths. Using S-vLab students can, in various steps, model a secure system, simulate its behaviour and evaluate its performance, and finally build and test a software prototype by leveraging numerous facilities. These include the provision of extracts of sample Java code, the availability of supporting resources and a continuous and immediate feedback, aimed at pointing out possible errors and suggesting solutions. After describing more in detail the features provided by S-vLab, as well as how the depicted functionalities can help in achieving the settled learning goals, we refer on the results obtained in an experimentation of the virtual lab during a course on Information Security with about 150 students.
... As a way to illustrate the DML mechanism, we have implemented it in the STeP_IN system (standing for Socio-Technical Platform for in situ Networking) [25, 26]. A huge reusable class library is one of the major benefits brought by Java, but it also poses great challenges for programmers to learn to use those library methods. ...
... The STeP_IN system implements the DML mechanism to help programmers to learn from their peers by asking questions about Java API methods. The system also provides other technical support, but this paper will focus on the issues related to the DML mechanism, for more details on other aspects of the system, please see [26]. At the core of the DML mechanism is the creation and use of expertise profiles and social profiles. ...
... The DynC is then discontinued and the emails exchanged are archived and linked to the method exec. An evaluation of the STeP_IN system [26] shows that the DML mechanism may miss some experts who are eager to help others regardless of their social obligations. This problem can be solved if the eager helpers set their participation preferences to always for all members so that they will be included in all expertise sharing acts concerning topics on which they have expertise. ...
The importance and benefits of expertise sharing for organizations in knowledge economy are well recognized. However, the
potential cost of expertise sharing is less well understood. This paper proposes a conceptual framework called collective
attention economy to identify the costs associated with expertise sharing and provide the basis for analyzing and understanding
the cost-benefit structure of different communication mechanisms. To demonstrate the analytical power of the conceptual framework,
the paper describes a new communication mechanism—Dynamic Mailing List (DML)—that is developed by adjusting certain cost factors.
... Examples of this approach include: [4] and [17]. Evaluation has even been applied to the software APIs programmers use, focusing how APIs are learned [52], how they are used in collaborative software development [10], and how they can be designed for improved usability [8] & [43]. ...
The paper proposes the term ‗software informatics‘ to describe research on the individual, collaborative, and social aspects of software production and use, spanning multiple representations of software from design, to source code, to application. It does this with a particular focus on information processes around software development. As more applications are web-based or available online for download and increasing amounts of source code is also available online, the information processes surrounding software are changing the way that software is created, appropriated and redesigned. Traditional distinctions between software developer and end-user are blurring, with software development processes occurring along a continuum of the proportion of original code written to develop the application, from build from scratch, through library and API calls, copy-paste programming, web mashup development, end-user programming, to creative design through the selection and combination of existing applications. All these design activities have much in common and can benefit from being studied as a whole.
Sometimes, when programmers use a search engine they know more or less what they need. Other times, programmers use the search engine to look around and generate possible ideas for the programming problem they are working on. The key insight we explore in this paper is that the results found in the latter case tend to serve as inspiration or triggers for the next queries issued. We introduce two search engines, CodeExchange and CodeLikeThis, both of which are specifically designed to enable the user to directly leverage the results in formulating the next query. CodeExchange does this with a set of four features supporting the programmer to use characteristics of the results to find other code with or without those characteristics. CodeLikeThis supports simply selecting an entire result to find code that is analogous, to some degree, to that result. We evaluated how these approaches were used along with two approaches not explicitly supporting iteration, a baseline and Google, in a user study among 24 developers. We find that search engines that support using results to form the next query can improve the programmers’ search experience and different approaches to iteration can provide better experiences depending on the task.
Scientists and engineers have long used simulation as a technique for exploring and evaluating complex systems. Direct interaction with a real, complex system requires that the system be already constructed and operational, that people be trained in its use, and that its dangers already be known and mitigated. Simulation can avoid these issues, reducing costs, reducing risks, and allowing an imagined system to be studied before it is created. The explorations supported by simulation serve two purposes in the realm of evaluation: to determine whether and where undesired behavior will arise and to predict the outcomes of interactions with the real system. This chapter examines the use of simulation to evaluate recommendation systems in software engineering (RSSEs). We provide a general model of simulation for evaluation and review a small set of examples to examine how the model has been applied in practice. From these examples, we extract some general strengths and weaknesses of the use of simulation to evaluate RSSEs. We also explore prospects for making more extensive use of simulation in the future.