Results 1 - 10
of
103
Checking system rules using system-specific, programmer-written compiler extensions
, 2000
"... ..."
(Show Context)
Finding bugs is easy
- ACM SIGPLAN Notices
, 2004
"... Many techniques have been developed over the years to automatically find bugs in software. Often, these techniques rely on formal methods and sophisticated program analysis. While these techniques are valuable, they can be difficult to apply, and they aren’t always effective in finding real bugs. Bu ..."
Abstract
-
Cited by 351 (8 self)
- Add to MetaCart
(Show Context)
Many techniques have been developed over the years to automatically find bugs in software. Often, these techniques rely on formal methods and sophisticated program analysis. While these techniques are valuable, they can be difficult to apply, and they aren’t always effective in finding real bugs. Bug patterns are code idioms that are often errors. We have implemented automatic detectors for a variety of bug patterns found in Java programs. In this paper, we describe how we have used bug pattern detectors to find real bugs in several real-world Java applications and libraries. We have found that the effort required to implement a bug pattern detector tends to be low, and that even extremely simple detectors find bugs in real applications. From our experience applying bug pattern detectors to real programs, we have drawn several interesting conclusions. First, we have found that even well tested code written by experts contains a surprising number of obvious bugs. Second, Java (and similar languages) have many language features and APIs which are prone to misuse. Finally, that simple automatic techniques can be effective at countering the impact of both ordinary mistakes and misunderstood language features. 1.
Finding Application Errors and Security Flaws Using PQL: a Program Query Language
, 2005
"... A number of effective error detection tools have been built in recent years to check if a program conforms to certain design rules. An important class of design rules deals with sequences of events associated with a set of related objects. This paper presents a language called PQL (Program Query Lan ..."
Abstract
-
Cited by 188 (5 self)
- Add to MetaCart
A number of effective error detection tools have been built in recent years to check if a program conforms to certain design rules. An important class of design rules deals with sequences of events associated with a set of related objects. This paper presents a language called PQL (Program Query Language) that allows programmers to express such questions easily in an application-specific context. A query looks like a code excerpt corresponding to the shortest amount of code that would violate a design rule. Details of the target application's precise implementation are abstracted away. The programmer may also specify actions to perform when a match is found, such as recording relevant information or even correcting an erroneous execution on the fly.
Navigating and querying code without getting lost
- In Proceedings of Aspect Oriented Software Development
, 2003
"... A development task related to a crosscutting concern is chal-lenging because a developer can easily get lost when explor-ing scattered elements of code and the complex tangle of re-lationships between them. In this paper we present a source browsing tool that improves the developer’s ability to work ..."
Abstract
-
Cited by 156 (6 self)
- Add to MetaCart
(Show Context)
A development task related to a crosscutting concern is chal-lenging because a developer can easily get lost when explor-ing scattered elements of code and the complex tangle of re-lationships between them. In this paper we present a source browsing tool that improves the developer’s ability to work with crosscutting concerns by providing better support for exploring code. Our tool helps the developer to remain ori-ented while exploring and navigating across a code base. The cognitive burden placed on a developer is reduced by avoiding disorienting view switches and by providing an ex-plicit representation of the exploration process in terms of exploration paths. 1.
Cache-conscious structure definition
- In PLDI ’99: Proceedings of the ACM SIGPLAN 1999 conference on Programming language design and implementation
, 1999
"... A program’s cache performance can be improved by changing the organization and layout of its data-even complex, pointer-based data structures. Previous techniques improved the cache performance of these structures by arranging distinct instances to increase reference locality. These techniques produ ..."
Abstract
-
Cited by 134 (9 self)
- Add to MetaCart
A program’s cache performance can be improved by changing the organization and layout of its data-even complex, pointer-based data structures. Previous techniques improved the cache performance of these structures by arranging distinct instances to increase reference locality. These techniques produced significant performance improvements, but worked best for small structures that could be packed into a cache block. This paper extends that work by concentrating on the internal organization of fields in a data structure. It describes two techniquesstructure splitting and field reordering--that improve the cache behavior of structures larger than a cache block. For structures comparable in size to a cache block, structure splitting can increase the number of hot fields that can be placed in a cache block. In five Java programs, structure splitting reduced cache miss rates 1 O-27% and improved performance 648 % beyond the benefits of previously described cache-conscious reorganization techniques. For large structures, which span many cache blocks, reordering fields, to place those with high temporal affinity in the same cache block can also improve cache utilization. This paper describes bbcache, a tool that recommends C structure field reorderings. Preliminary measurements indicate that reordering fields in 5 active structures improves the performance of Microsoft SQL Server 7.0
JavaML: A Markup Language for Java Source Code
, 2000
"... The classical plain-text representation of source code is convenient for programmers but requires parsing to uncover the deep structure of the program. While sophisticated software tools parse source code to gain access to the program's structure, many lightweight programming aids such as grep ..."
Abstract
-
Cited by 118 (4 self)
- Add to MetaCart
(Show Context)
The classical plain-text representation of source code is convenient for programmers but requires parsing to uncover the deep structure of the program. While sophisticated software tools parse source code to gain access to the program's structure, many lightweight programming aids such as grep rely instead on only the lexical structure of source code. I describe a new XML application that provides an alternative representation of Java source code. This XML-based representation, called JavaML, is more natural for tools and permits easy specification of numerous software-engineering analyses by leveraging the abundance of XML tools and techniques. A robust converter built with the Jikes Java compiler framework translates from the classical Java source code representation to JavaML, and an XSLT stylesheet converts from JavaML back into the classical textual form. Keywords: Java, XML, abstract syntax tree representation, software-engineering analysis, Jikes compiler. 1 Introduction Since...
A comparison of bug finding tools for Java
- In ISSRE ’04: Proceedings of the 15th International Symposium on Software Reliability Engineering (ISSRE’04
, 2004
"... Bugs in software are costly and difficult to find and fix. In recent years, many tools and techniques have been developed for automatically finding bugs by analyzing source code or intermediate code statically (at compile time). Different tools and techniques have different tradeoffs, but the practi ..."
Abstract
-
Cited by 89 (1 self)
- Add to MetaCart
(Show Context)
Bugs in software are costly and difficult to find and fix. In recent years, many tools and techniques have been developed for automatically finding bugs by analyzing source code or intermediate code statically (at compile time). Different tools and techniques have different tradeoffs, but the practical impact of these tradeoffs is not well understood. In this paper, we apply five bug finding tools, specifically Bandera, ESC/Java 2, FindBugs, JLint, and PMD, to a variety of Java programs. By using a variety of tools, we are able to cross-check their bug reports and warnings. Our experimental results show that none of the tools strictly subsumes another, and indeed the tools often find non-overlapping bugs. We discuss the techniques each of the tools is based on, and we suggest how particular techniques affect the output of the tools. Finally, we propose a meta-tool that combines the output of the tools together, looking for particular lines of code, methods, and classes that many tools warn about. 1
Notable design patterns for domain-specific languages
, 2001
"... The realisation of domain-specific languages (DSL DSLs) differs in fundamental ways from that of traditional programming languages. We describe eight recurring patterns that we have identified as being used for DSL design and implementation. Existing languages can be extended, restricted, partially ..."
Abstract
-
Cited by 85 (6 self)
- Add to MetaCart
The realisation of domain-specific languages (DSL DSLs) differs in fundamental ways from that of traditional programming languages. We describe eight recurring patterns that we have identified as being used for DSL design and implementation. Existing languages can be extended, restricted, partially used, or become hosts for DSLs. DSL Simple DSLs DSL can be implemented by lexical processing. In addition, DSLs DSL can be used to create front-ends to existing systems or to express complicated data structures. Finally, DSLs DSL can be combined using process pipelines. The patterns described form a pattern language that can be used as a building block for a systematic
Codequest: Scalable source code queries with datalog
- In ECOOP Proceedings
, 2006
"... Abstract. Source code querying tools allow programmers to explore relations between different parts of the code base. This paper describes such a tool, named CodeQuest. It combines two previous proposals, namely the use of logic programming and database systems. As the query language we use safe Dat ..."
Abstract
-
Cited by 58 (0 self)
- Add to MetaCart
(Show Context)
Abstract. Source code querying tools allow programmers to explore relations between different parts of the code base. This paper describes such a tool, named CodeQuest. It combines two previous proposals, namely the use of logic programming and database systems. As the query language we use safe Datalog, which was originally introduced in the theory of databases. That provides just the right level of expressiveness; in particular recursion is indispensable for source code queries. Safe Datalog is like Prolog, but all queries are guaranteed to terminate, and there is no need for extra-logical annotations. Our implementation of Datalog maps queries to a relational database system. We are thus able to capitalise on the query optimiser provided by such a system. For recursive queries we implement our own optimisations in the translation from Datalog to SQL. Experiments confirm that this strategy yields an efficient, scalable code querying system. 1
A Tool Framework for Static and Dynamic Analysis of Object-Oriented Software with Templates
- PROC. SUPERCOMPUTING 2000, DALLAS/TEXAS
, 2000
"... The developers of high-performance scientific applications often work in complex computing environments that place heavy demands on program analysis tools. The developers need tools that interoperate, are portable across machine architectures, and provide source-level feedback. In this paper, we des ..."
Abstract
-
Cited by 47 (32 self)
- Add to MetaCart
The developers of high-performance scientific applications often work in complex computing environments that place heavy demands on program analysis tools. The developers need tools that interoperate, are portable across machine architectures, and provide source-level feedback. In this paper, we describe a tool framework, the Program Database Toolkit (PDT), that supports the development of program analysis tools meeting these requirements. PDT uses compile-time information to create a complete database of high-level program information that is structured for well-defined and uniform access by tools and applications. PDT's current applications make heavy use of advanced features of C++, in particular, templates. We describe the toolkit, focussing on its most important contribution -- its handling of templates -- as well as its use in existing applications.