Proceedings of the ACM on Programming Languages, Год журнала: 2019, Номер 3(OOPSLA), С. 1 - 31
Опубликована: Окт. 10, 2019
The main goal of a static type system is to prevent certain kinds errors from happening at run time. A formulated as set constraints that gives any expression or term in program well-defined type. Yet mainstream programming languages are endowed with systems provide the means circumvent their through casting. We want understand how and when developers escape use dynamic typing. empirically study casting used by more than seven thousand Java projects. find casts widely (8.7% methods contain least one cast) 50% we inspected not guarded locally ensure against potential run-time errors. To help us better categorize cases thus practice, identify 25 cast-usage patterns---recurrent idioms using solve specific issue. This knowledge can be: (a) recommendation for current future language designers make informed decisions (b) reference tool builders, e.g., providing precise new refactoring analyses, (c) guide researchers test features, carry out controlled experiments, (d) practices.
Язык: Английский
Процитировано
12Journal of Systems and Software, Год журнала: 2024, Номер 215, С. 112065 - 112065
Опубликована: Май 6, 2024
Given the abundance of software in open source repositories, code search engines are increasingly turning to "big data" technologies such as natural language processing and machine learning, deliver more useful results. However, like syntax-based approaches traditionally used analyze compare first generation engines, big data essentially static analysis processes. When dynamic properties software, run-time behavior (i.e., semantics) performance, among criteria, exclusive use algorithms has a significant negative impact on precision recall results well other key usability factors ranking quality. Therefore, address these weaknesses provide reliable usable service, next needs complement techniques with equally large-scale, based its execution observation. In this paper we describe new platform specifically developed achieve by simplifying largely automating observation) at large scale. We show how can combine dynamically observed modules improve quality
Язык: Английский
Процитировано
1Empirical Software Engineering, Год журнала: 2024, Номер 29(4)
Опубликована: Май 17, 2024
Abstract Unit testing verifies the presence of faults in individual software components. Previous research has been targeting automatic generation unit tests through adoption random or search-based algorithms. Despite their effectiveness, these approaches aim at creating by solely optimizing metrics like code coverage, without ensuring that resulting have granularities would allow them to verify both behavior production methods and interaction between class under test. To address this limitation, we propose a two-step systematic approach tests: first force algorithms create cover code, hence implementing so-called intra-method ; then, relax constraints enable creation intra-class target interactions among methods. The assessment our is conducted mixed-method design combines statistical analyses with user study. key results report able keep same level mutation coverage while providing test suites are more structured, understandable aligned principles testing.
Язык: Английский
Процитировано
1Опубликована: Авг. 20, 2018
Analyzing methods in object-oriented programs whether they are side-effect free and also deterministic, i.e., mathematically pure, has been the target of extensive research. Identifying such helps to find code smells security related issues, analyses detecting concurrency bugs. Pure used by formal verification approaches as foundations for specifications proving pureness is necessary ensure correct specifications. However, so far no common terminology exists which describes purity methods. Furthermore, some terms (e.g., pure or free) inconsistently. Further, all current only report selected information making them suitable a smaller subset potential use cases. In this paper, we present fine-grained unified lattice model puts levels found literature into relation adds new level that generalizes existing definitions. We have implemented scalable, modularized analysis produces significantly more precise results real-world than best-performing work. The shows defined projects.
Язык: Английский
Процитировано
11Опубликована: Июнь 18, 2021
Although call graphs are crucial for inter-procedural analyses, it is challenging to statically compute them programs with dynamic features. Prior work focused on supporting certain kinds of features, but serialization-related features still not very well supported. Therefore, we introduce Salsa, an approach complement existing points-to analysis respect enhance the graph's soundness while greatly affecting its precision. We evaluate Salsa's soundness, precision, and performance using 9 from Java Call graph Assessment & Test Suite (CATS) 4 XCorpus dataset. compared Salsa against off-the-shelf construction algorithms available Soot, Doop, WALA, OPAL. Our experiments showed that improved graphs' their also observed did incur extra overhead underlying pointer method.
Язык: Английский
Процитировано
8Опубликована: Июнь 9, 2017
One of the inherent advantages static analysis is that it can create and reason about models an entire program. However, mainstream languages such as Java use numerous dynamic language features designed to boost programmer productivity, but these are notoriously difficult capture by analysis, leading unsoundness in practice. While existing research has focused on providing sound handling for selected (mostly reflection) based anecdotal evidence case studies, there little empirical work investigate extent which particular cause In this paper, we (1) discuss may (2) a methodology be used check (un)soundness call-graph construction, soundness oracles. These oracles also hybrid analyses.
Язык: Английский
Процитировано
8Journal of Systems and Software, Год журнала: 2022, Номер 193, С. 111442 - 111442
Опубликована: Авг. 11, 2022
Язык: Английский
Процитировано
5Опубликована: Дек. 1, 2017
Static program analysis is a cornerstone of modern software engineering - it used to detect bugs and security vulnerabilities early before deployed. While there large body research into the scalability precision static analysis, (un) soundness critical issue that has not attracted same level attention by community. In this paper we investigate question whether information harvested from stack traces obtained GitHub tracker Stack Overflow Q&A forums can be in order complement statically built call graphs. For purpose, extract reflective graph edges parsed traces, check these are correctly computed Doop, widely tool for with built-in support reflection analysis. We do find Doop misses when analysing real-world programs, even enabled. This suggests mining techniques useful test improve
Язык: Английский
Процитировано
5ACM Transactions on Software Engineering and Methodology, Год журнала: 2023, Номер 33(3), С. 1 - 35
Опубликована: Дек. 2, 2023
Researchers and tool developers working on dynamic analysis, software testing, automated program repair, verification, validation, need large compiled, compilable, executable code corpora to test their ideas. The publicly available are relatively small, and/or non-compilable, non-executable. Developing a compiled corpus is laborious activity demanding significant manual effort human intervention. To facilitate large-scale analysis research, we develop SourcererJBF , J ava B uild F ramework that can automatically build Java without project-specific instructions generate corpus, creates an offline knowledge base by collecting external dependencies from the project directories existing scripts (if available). It constructs indices of those collected enable fast search for resolving during compilation. As output compilation, it produces JAigantic, compilable containing projects, bytecode, dependencies, normalized script, command. We evaluated SourcererJBF’s effectiveness, correctness, performance, scalability in collection projects. Our experimental results demonstrate significantly effective scalable building corpus. Besides, substantiates reasonable performance correctness similar projects’ systems.
Язык: Английский
Процитировано
2Опубликована: Ноя. 1, 2018
Program analyses typically need to identify a single entry method that triggers program executions. However, many modern applications do not have such point. Instead, they be deployed in container interacts with them through an application programming interface (API). We present tool generates driver supplies for Java EE web applications. The generated simulates arbitrary client interacting the container. describe modular design of generator, and existing support features like server pages, servlets, filters listeners. report on our experience using generator large real-world
Язык: Английский
Процитировано
5