David Saff

dblp:68/4490 · DBLP profile ↗
← Back
7ranked-venue papers
6as first author
0since 2021 · last 2011
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 7 · 6 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
5 papers
Software testing · 86% Empirical software engineering · 14%

Topics — the 11 heaviest of 11, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Software testing › test generation
automated test generation
0.112011
Combined static and dynamic automated test generation · ISSTA 2011
Software testing › unit testing
object-oriented unit test generation
0.112011
Combined static and dynamic automated test generation · ISSTA 2011
Software testing › automated testing
continuous testing
0.122005
Continuous testing in eclipse · ICSE 2005
An experimental evaluation of continuous testing during development · ISSTA 2004
Software testing
regression testing
0.132005
Continuous testing in eclipse · ICSE 2005
Test factoring: focusing test suites for the task at hand · ICSE 2005
An experimental evaluation of continuous testing during development · ISSTA 2004
Software testing › test infrastructure
mock generation
0.112005
Automatic test factoring for java · ASE 2005
Software testing › regression testing
test suite reduction
0.112005
Test factoring: focusing test suites for the task at hand · ICSE 2005
Empirical software engineering
controlled experiment
0.012004
An experimental evaluation of continuous testing during development · ISSTA 2004
Empirical software engineering
developer studies
0.012004
An experimental evaluation of continuous testing during development · ISSTA 2004
Software testing
automated testing
0.012005
Continuous testing in eclipse · ICSE 2005
Software testing
system testing
0.012005
Automatic test factoring for java · ASE 2005
Software testing › test generation
unit test generation
0.012005
Automatic test factoring for java · ASE 2005

Methods — techniques the papers use, named apart from their topics

dynamic analysis · 0.2static analysis · 0.1record and replay · 0.1controlled human experiment · 0.0
YearPublicationVenuePosition
2011 Combined static and dynamic automated test generation
abstract
In an object-oriented program, a unit test often consists of a sequence of method calls that create and mutate objects, then use them as arguments to a method under test. It is challenging to automatically generate sequences that are legal and behaviorally-diverse, that is, reaching as many different program states as possible.
Sai Zhang 0001, David Saff, Yingyi Bu, Michael D. Ernst
ISSTA2
2005 Test factoring: focusing test suites for the task at hand
abstract
No abstract available
David Saff, Michael D. Ernst
ICSE1
2005 Continuous testing in eclipse
abstract
Continuous testing uses excess cycles on a developer's workstation to continuously run regression tests in the background, providing rapid feedback about test failures as code is edited. It reduces the time and energy required to keep code well-tested, and it prevents regression errors from persisting uncaught for long periods of time.
David Saff, Michael D. Ernst
ICSE1
2005 Automatic test factoring for java
abstract
Test factoring creates fast, focused unit tests from slow system-widetests; each new unit test exercises only a subset of the functionalityexercised by the system test. Augmenting a test suite with factoredunit tests should catch errors earlier in a test run.One way to factor a test is to introduce 'mock' objects. If a testexercises a component T, which interacts with another component E (the'environment'), the implementation of E can be replaced by a mock.The mock checks that T's calls to E are as expected, and it simulatesE's behavior in response. We introduce an automatic technique fortest factoring. Given a system test for T and E, and a record of T'sand E's behavior when the system test is run, test factoring generatesunit tests for T in which E is mocked. The factored tests can isolatebugs in T from bugs in E and, if E is slow or expensive, improve testperformance or cost.We have built an implementation of automatic dynamic test factoring for theJava language. Our experimental data indicates that it can reduce therunning time of a system test suite by up to an order of magnitude.
David Saff, Shay Artzi, Jeff H. Perkins, Michael D. Ernst
ASE1
2004 An experimental evaluation of continuous testing during development
abstract
Continuous testing uses excess cycles on a developer's workstation to continuously run regression tests in the background, providing rapid feedback about test failures as source code is edited. It is intended to reduce the time and energy required to keep code well-tested and prevent regression errors from persisting uncaught for long periods of time. This paper reports on a controlled human experiment to evaluate whether students using continuous testing are more successful in completing programming assignments. We also summarize users' subjective impressions and discuss why the results may generalize.The experiment indicates that the tool has a statistically significant effect on success in completing a programming task, but no such effect on time worked. Participants using continuous testing were three times more likely to complete the task before the deadline than those without. Participants using continuous compilation were twice as likely to complete the task, providing empirical support to a common feature in modern development environments. Most participants found continuous testing to be useful and believed that it helped them write better code faster, and 90% would recommend the tool to others. The participants did not find the tool distracting, and intuitively developed ways of incorporating the feedback into their workflow.
David Saff, Michael D. Ernst
ISSTA1
2004 Mock object creation for test factoring
abstract
Test factoring creates fast, focused unit tests from slow system-wide tests; each new unit test exercises only a subset of the functionality exercised by the system tests. Augmenting a test suite with factored unit tests, and prioritizing the tests, should catch errors earlier in a test run.One way to factor a test is to introduce mock objects. If a test exercises a component A, which is designed to issue queries against or mutate another component B, the implementation of B can be replaced by a mock. The mock has two purposes: it checks that A's calls to B are as expected, and it simulates B's behavior in response. Given a system test for A and B, and a record of A's and B's behavior when the system test is run, we would like to automatically generate unit tests for A in which B is mocked. The factored tests can isolate bugs in A from bugs in B and, if B is slow or expensive, improve test performance or cost.This paper motivates test factoring with an illustrative example, proposes a simple procedure for automatically generating mock objects for factored tests, and gives examples of how the procedure can be extended to produce more robust factored tests.
David Saff, Michael D. Ernst
PASTE1
2003 Reducing wasted development time via continuous testing
abstract
Testing is often performed frequently during development to ensure software reliability by catching regression errors quickly. However, stopping frequently to test also wastes time by holding up development progress. User studies on real development projects indicate that these two sources of wasted time account for 10-15% of development time. These measurements use a novel technique for computing the wasted extra development time incurred by a delay in discovering a regression error. We present a model of developer behavior that infers developer beliefs from developer behavior, and that predicts developer behavior in new environments - in particular, when changing testing methodologies or tools to reduce wasted time. Changing test ordering or reporting reduces wasted time by 4-41% in our case study. Changing the frequency with which tests are run can reduce wasted time by 31-82% (but developers cannot know the ideal frequency except after the fact). We introduce and evaluate a new technique, continuous testing, that uses spare CPU resources to continuously run tests in the background, providing rapid feedback about test failures as as source code is edited. Continuous testing reduced wasted time by 92-98%, a substantial improvement over the other approaches. We have integrated continuous testing into two development environments, and are beginning user studies to evaluate its efficacy. We believe it has the potential to reduce the cost and improve the efficacy of testing and, as a result, to improve the reliability of delivered systems.
David Saff, Michael D. Ernst
ISSRE1