Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data.

Nan Li 0008

dblp:84/3795-8 · DBLP profile ↗
← Back
17ranked-venue papers
7as first author
1since 2021 · last 2022
0000-0002-6723-0172ORCID · conflict

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

Software engineering, systems software and programming languages · 16 · 7 first-author · 1 since 2021Human-computer interaction and ubiquitous computing · 1

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
3 papers
Software testing · 100%
Databases, data mining, and information retrieval
1 paper
Data integration and cleaning · 100%

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

TopicWeightPapersLastEvidence papers
Software testing
combinatorial testing
0.822022
Combinatorial Test Generation for Multiple Input Models With Shared Parameters · IEEE Trans. Software Eng. 2022
Applying combinatorial test data generation to big data applications · ASE 2016
Software testing
test generation
0.722022
Combinatorial Test Generation for Multiple Input Models With Shared Parameters · IEEE Trans. Software Eng. 2022
Test Oracle Strategies for Model-Based Testing · IEEE Trans. Software Eng. 2017
Software testing › combinatorial testing
t-wise coverage
0.612022
Combinatorial Test Generation for Multiple Input Models With Shared Parameters · IEEE Trans. Software Eng. 2022
Software testing
model-based testing
0.312017
Test Oracle Strategies for Model-Based Testing · IEEE Trans. Software Eng. 2017
Software testing
test oracle
0.312017
Test Oracle Strategies for Model-Based Testing · IEEE Trans. Software Eng. 2017
Software testing
test input generation
0.212016
Applying combinatorial test data generation to big data applications · ASE 2016
Software testing › model-based testing
finite state machine testing
0.112017
Test Oracle Strategies for Model-Based Testing · IEEE Trans. Software Eng. 2017

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

post-optimization · 0.6combinatorial test generation · 0.6combinatorial testing · 0.5state machine testing · 0.3empirical study · 0.3
YearPublicationVenuePosition
2022 Combinatorial Test Generation for Multiple Input Models With Shared Parameters
abstract
Combinatorial testing typically considers a single input model and creates a single test set that achieves$t$-way coverage. This paper addresses the problem of combinatorial test generation for multiple input models with shared parameters. We formally define the problem and propose an efficient approach to generating multiple test sets, one for each input model, that together satisfy$t$-way coverage for all of these input models while minimizing the amount of redundancy between these test sets. We report an experimental evaluation that applies our approach to five real-world applications. The results show that our approach can significantly reduce the amount of redundancy between the test sets generated for multiple input models and perform better than a post-optimization approach.
Chang Rao, Nan Li 0008, Yu Lei 0001, Raghu Kacker, D. Richard Kuhn
IEEE Trans. Software Eng.2
2019 Exoneration-based fault localization for SQL predicates
Yun Guo, Nan Li 0008, A. Jefferson Offutt, Amihai Motro
J. Syst. Softw.2
2018 Automatically Repairing SQL Faults
abstract
SQL is the standard database language, yet SQL statements can be complex and expensive to debug by hand. Automatic program repair techniques have the potential to reduce cost significantly. A previous attempt to repair SQL faults automatically used a decision tree (DT) algorithm that succeeded in some cases, but also generated many patches that passed the automated tests but that were not acceptable to the engineers. This paper proposes a novel fault localization and repair technique to repair faulty SQL statements. It targets faults in two common SQL constructs, JOIN and WHERE. It identifies the fault location and type precisely, and then creates a patch to fix the fault. We implemented this technique in a tool, and evaluated it on five medium to large-scale databases using 825 faulty queries with various complexity and faulty types. Experimental results showed that this technique can identify and repair JOIN faults when the DT approach is infeasible, and repair WHERE faults at about the same rate as the DT approach. Moreover, patches generated by our approach are more acceptable to engineers, and the tool is much faster.
Yun Guo, Nan Li 0008, A. Jefferson Offutt, Amihai Motro
QRS2
2018 Safety-Critical System Modeling in Model-Based Testing with Hazard and Operability Analysis
abstract
Model-based testing (MBT) generates tests from behavioral models of systems. When applying MBT to safety-critical systems, one problem is that textual requirements from which the behavior model is generated focus on commonly used scenarios while missing other scenarios that may lead to hazards. We propose to combine MBT with a hazard analysis technique, Hazard and Operability analysis. We first derive guide phrases from original requirements, and use these phrases to extend original requirements by adding more alternative scenarios. Second, we create timed automata from the extended requirements. Third, we validate the automata with model checking. We report a case study where our approach was applied to train control system. We created two groups of automata from original and extended requirements, respectively. We found that the automata created from extended requirements are more likely to avoid problems such as deadlock. Furthermore, tests generated from such models cover more system behaviors.
Chang Rao, Nan Li 0008, Yu Lei 0001
QRS3
2017 Localizing Faults in SQL Predicates
abstract
Fault localization techniques have been applied to database and data-centric applications that use SQL or SQL-based languages. However, existing techniques can only identify the SQL statements that have faults, but not determine the precise location of the faults within SQL statements. Since SQL statements can be rather complex, programmers are still left with a difficult repair chore. We propose a novel fault localization method to localize multiple types of faults in SQL predicates, that is based on row-based dynamic slicing and delta debugging. Our method was implemented in a tool called ALTAR, and experiments were performed on two publicly available databases. Our method can be compared with existing fault localization techniques when these are applied to "drill-down" in SQL statements. The results showed that ALTAR can discover more types of faults. Moreover, for the type of faults discovered by current methods, ALTAR is more precise.
Yun Guo, Amihai Motro, Nan Li 0008
ICST3
2017 Test Oracle Strategies for Model-Based Testing
abstract
Testers use model-based testing to design abstract tests from models of the system's behavior. Testers instantiate the abstract tests into concrete tests with test input values and test oracles that check the results. Given the same test inputs, more elaborate test oracles have the potential to reveal more failures, but may also be more costly. This research investigates the ability for test oracles to reveal failures. We define ten new test oracle strategies that vary in amount and frequency of program state checked. We empirically compared them with two baseline test oracle strategies. The paper presents several main findings. (1) Test oracles must check more than runtime exceptions because checking exceptions alone is not effective at revealing failures. (2) Test oracles do not need to check the entire output state because checking partial states reveals nearly as many failures as checking entire states. (3) Test oracles do not need to check program states multiple times because checking states less frequently is as effective as checking states more frequently. In general, when state machine diagrams are used to generate tests, checking state invariants is a reasonably effective low cost approach to creating test oracles.
Nan Li 0008, A. Jefferson Offutt
IEEE Trans. Software Eng.1
2016 Skyfire: Model-Based Testing with Cucumber
abstract
In the software industry, a Behavior-Driven Development (BDD) tool, Cucumber, has been widely used by practitioners. Usually product analysts, developers, and testers manually write BDD test scenarios that describe system behaviors. Testers write implementation for the BDD scenarios by hand and execute the Cucumber tests. Cucumber provides transparency about what test scenarios are covered and how the test scenarios are mapped to executable tests. One drawback of the Cucumber BDD approach is that test scenarios are generated manually. Thus, the test scenarios are usually weak. More importantly, practitioners do not have a metric to measure test coverage. In this paper, we present a Model-Based Testing (MBT) tool, skyfire. Skyfire can automatically generate effective Cucumber test scenarios to replace manually generated test scenarios. Skyfire reads a behavioral UML diagram (e.g., a state machine diagram), identifies all necessary elements (e.g., transitions) of the diagram, generates effective tests to satisfy various graph coverage criteria, and converts the tests into Cucumber scenarios. Then testers write Cucumber mappings for the generated scenarios. Skyfire does not only generate effective tests but is also completely compatible with the existing agile development and continuous integration (CI) rhythm. We present the design architecture and implementation of skyfire, as well as an industrial case study to show how skyfire is used in practice.
Nan Li 0008, Anthony Escalona, Tariq Kamal
ICST1
2016 Applying combinatorial test data generation to big data applications
abstract
Big data applications (e.g., Extract, Transform, and Load (ETL) applications) are designed to handle great volumes of data. However, processing such great volumes of data is time-consuming. There is a need to construct small yet effective test data sets during agile development of big data applications.
Nan Li 0008, Yu Lei 0001, Haider Riaz Khan, Jingshu Liu, Yun Guo
ASE1
2016 What to expect of predicates: An empirical analysis of predicates in real world programs
Vinicius H. S. Durelli, A. Jefferson Offutt, Nan Li 0008, Márcio Eduardo Delamaro, Zengshu Shi, Xinge Ai
J. Syst. Softw.3
2015 A Scalable Big Data Test Framework
abstract
This paper identifies three problems when testing software that uses Hadoop-based big data techniques. First, processing big data takes a long time. Second, big data is transferred and transformed among many services. Do we need to validate the data at every transition point? Third, how should we validate the transferred and transformed data? We are developing a novel big data test framework to address these problems. The test framework generates a small and representative data set from an original large data set using input space partition testing. Using this data set for development and testing would not hinder the continuous integration and delivery when using agile processes. The test framework also accesses and validates data at various transition points when data is transferred and transformed.
Nan Li 0008, Anthony Escalona, Yun Guo, A. Jefferson Offutt
ICST1
2014 Experimental Evaluation of SDL and One-Op Mutation for C
abstract
Mutation analysis modifies a program by applying syntactic rules, called mutation operators, systematically to create many versions of the program (mutants) that differ in small ways. Testers then design tests to cause the mutants to behave differently from the original program. Mutation testing is widely considered to result in very effective tests, however, it is also quite costly. Cost comes from the many mutants that are created, the number of tests that are needed to kill the mutants, and the difficulty of deciding whether mutants behave equivalently to the original program. One-op mutation theorizes that cost can be reduced by using a single, very powerful, mutation operator that leads to tests that are almost as effective as if all operators are used. Previous research proposed the statement deletion operator (SDL) and found promising results. This paper investigates the use of SDL-mutation in a new context, the language C, and poses additional empirical questions, including whether other operators can be used. We carried out a controlled experiment in which cost and effectiveness of each individual C mutation operator were collected for 39 different subject programs. Experimental data are used to define a cost-effectiveness metric to choose the best single operator for one-op mutation.
Márcio Eduardo Delamaro, Lin Deng 0001, Vinicius H. S. Durelli, Nan Li 0008, A. Jefferson Offutt
ICST4
2014 An Empirical Analysis of Test Oracle Strategies for Model-Based Testing
abstract
Model-based testing is a technique to design abstract tests from models that partially describe the system's behaviour. Abstract tests are transformed into concrete tests, which include test input values, expected outputs, and test oracles. Although test oracles require significant investment and are crucial to the success of the testing, we have few empirical results about how to write them. With the same test inputs, test oracles that check more of the program state have the potential to reveal more failures, but may also cost more to design and create. This research defines six new test oracle strategies that check different parts of the program state different numbers of times. The experiment compared the six test oracle strategies with two baseline test oracle strategies. The null test oracle strategy just checks whether the program crashes and the state invariant test oracle strategy checks the state invariants in the model. The paper presents five main findings. (1) Testers should check more of the program state than just runtime exceptions. (2) Test oracle strategies that check more program states do not always reveal more failures than strategies that check fewer states. (3) Test oracle strategies that check program states multiple times are slightly more effective than strategies that check the same states just once. (4) Edge-pair coverage did not detect more failures than edge coverage with the same test oracle strategy. (5) If state machine diagrams are used to generate tests, checking state invariants is a reasonably effective low cost approach. In summary, the state invariant test oracle strategy is recommended for testers who do not have enough time. Otherwise, testers should check state invariants, outputs, and parameter objects.
Nan Li 0008, A. Jefferson Offutt
ICST1
2013 Empirical Evaluation of the Statement Deletion Mutation Operator
abstract
Mutation analysis is widely considered to be an exceptionally effective criterion for designing tests. It is also widely considered to be expensive in terms of the number of test requirements and in the amount of execution needed to create a good test suite. This paper posits that simply deleting statements, implemented with the statement deletion (SDL) mutation operators in Mothra, is enough to get very good tests. A version of the SDL operator for Java was designed and implemented inside the muJava mutation system. The SDL operator was applied to 40 separate Java classes, tests were designed to kill the non-equivalent SDL mutants, and then run against all mutants.
Lin Deng 0001, A. Jefferson Offutt, Nan Li 0008
ICST3
2013 Is bytecode instrumentation as good as source code instrumentation: An empirical study with industrial tools (Experience Report)
abstract
Branch coverage (BC) is a widely used test criterion that is supported by many tools. Although textbooks and the research literature agree on a standard definition for BC tools measure BC in different ways. The general strategy is to “instrument” the program by adding statements that count how many times each branch is taken. But the details for how this is done can influence the measurement for whether a set of tests have satisfied BC. For example, the standard definition is based on program source, yet some tools instrument the bytecode to reduce computation cost. A crucial question for the validity of these tools is whether bytecode instrumentation gives results that are the same as, or at least comparable to, source code instrumentation. An answer to this question will help testers decide which tool to use. This research looked at 31 code coverage tools, finding four that support branch coverage. We chose one tool that instruments the bytecode and two that instrument the source. We acquired tests for 105 methods to discover how these three tools measure branch coverage. We then compared coverage on 64 methods, finding that the bytecode instrumentation method reports the same coverage on 49 and lower coverage on 11. We also found that each tool defined branch coverage differently, and what is called branch coverage in the bytecode instrumentation tool actually matches the standard definition for clause coverage.
Nan Li 0008, A. Jefferson Offutt, Lin Deng 0001
ISSRE1
2012 Better Algorithms to Minimize the Cost of Test Paths
abstract
Model-based testing creates tests from abstract models of the software. These models are often described as graphs, and test requirements are defined as sub paths in the graphs. As a step toward creating concrete tests, complete (test) paths that include the sub paths through the graph are generated. Each test path is then transformed into a test. If we can generate fewer and shorter test paths, the cost of testing can be reduced. The minimum cost test paths problem is finding the test paths that satisfy all test requirements with the minimum cost. This paper presents new algorithms to solve the problem, and then presents data from an empirical comparison. The algorithms adapt approximation algorithms for the shortest super string problem. The comparison is with an existing tool that uses a brute force approach to extend each sub path to a complete path. One new algorithm is based on the greedy set-covering algorithm and the other is based on finding a matching over a prefix graph. The comparison was performed on open software and showed that both new solutions generate fewer test paths than the brute force approach. The prefix-graph based solution takes much less time than the other two solutions when the number of test requirements is large.
Nan Li 0008, A. Jefferson Offutt
ICST1
2012 Adding Criteria-Based Tests to Test Driven Development
abstract
Test driven development (TDD) is the practice of writing unit tests before writing the source. TDD practitioners typically start with example-based unit tests to verify an understanding of the software's intended functionality and to drive software design decisions. Hence, the typical role of test cases in TDD leans more towards specifying and documenting expected behavior, and less towards detecting faults. Conversely, traditional criteria-based test coverage ignores functionality in favor of tests that thoroughly exercise the software. This paper examines whether it is possible to combine both approaches. Specifically, can additional criteria based tests improve the quality of TDD test suites without disrupting the TDD development process? This paper presents the results of an observational study that generated additional criteria-based tests as part of a TDD exercise. The criterion was mutation analysis and the additional tests were designed to kill mutants not killed by the TDD tests. The additional unit tests found several software faults and other deficiencies in the software. Subsequent interviews with the programmers indicated that they welcomed the additional tests, and that the additional tests did not inhibit their productivity.
William Shelton, Nan Li 0008, Paul Ammann, A. Jefferson Offutt
ICST2
2011 Using abstraction and Web applications to teach criteria-based test design
abstract
The need for better software continues to rise, as do expectations. This, in turn, puts more emphasis on finding problems before software is released. Industry is responding by testing more, but many test engineers in industry lack a practical, yet theoretically sound, understanding of testing. Software engineering educators must respond by teaching students to test better. An essential testing skill is designing tests, and an efficient way to design high quality tests is to use an engineering approach: test criteria. To achieve the maximum benefit, criteria should be used during unit (developer) testing, as well as integration and system testing. This paper presents an in-depth teaching experience report on how we successfully teach criteria-based test design using abstraction and publicly accessible web applications. Our teaching materials are freely available online or upon request.
A. Jefferson Offutt, Nan Li 0008, Paul Ammann, Wuzhi Xu
CSEE&T2