Software Analysis and Testing. Paolo Tonella Alessandro Marchetto Cu D. Nguyen Mariano Ceccato Software Engineering (SE) unit, Fondazione Bruno Kessler (FBK). Team. Paolo Tonella Cu D. Nguyen Mariano Ceccato Alessandro Marchetto Software Engineering research unit
Cu D. Nguyen
Software Engineering (SE) unit, Fondazione Bruno Kessler (FBK)
Paolo Tonella Cu D. Nguyen Mariano Ceccato Alessandro Marchetto
Software Engineering researchunit
at Fondazione Bruno Kessler
FBK (more than 350 researchers) is a research organization of the Autonomous Province of Trento that promotes research in the areas of science, technology and humanities.
FBK objectives are to: (i) conduct research that obtains recognition at an international level; (ii) carry out applied research of strategic importance to the province; (iii) publicize scientific results and promote economic development; and (iv) encourage innovation throughout the province.
Three main areas of Information Technology:
FBK is organized into Research Units.
Material for the course:
- Course objectives and program
- Course agenda
- Notes and slides of the lectures
- Project deliverables
- Exam rules and dates
Wed. 16.30 -18.30 room A107
Fri. 14.30 -16.30 room A107
Please, come to the Lab lectures with your laptop or ask us for having a laptop.
… Is any laptop needed?
The exam consists of an oral discussion of the project carried out during the laboratory.
Project must be delivered one week before the exam date!
- Which testing to apply?
- How to define test cases?
- How to automate test cases execution?
- How to decide when to stop testing?
Background and Context:
Intro & course project: Sep 14, 16, 21, 23
Acceptance testing: Sep 28, 30; Oct 5
GUI testing: Oct 7, 12
Unit testing: Oct 14, 19
Analysis and testing theory: Oct 21, 26, 28; Nov 2, 30
Debugging: Nov 4, 9, 11, 16
Coverage and mutation testing: Nov 18, 23, 25
Regression testing: Dec 2, 7
Advanced topic: Dec 14, 16
Software maintenance has been defined as “the modification of a software product after delivery to correct faults, to improve performance or other attributes, or to adapt the product to a changed environment.” (ANSI/IEEE, 1983)
Maintenance activities can be classified into four categories:
Maintenance activities are difficult:
What should we do with legacy code?
Reverse engineering is the process of taking something (a device, an electrical component, a car, a software, …) apart and analyzing its working in details, usually with the intention to construct a new device or program that does the same thing.
“Abstract Code Representation”
Restructuring is the transformation from one representation to another at the same relative abstraction level - while preserving the system external behavior (functionality and semantics).
Code level: - from an unstructured (“spaghetti”) form to a
structured form (“goto-less”)
- conversion of set of “if-statements” into a
Design level: to introduce design patterns (e.g., Model-View-Controller architecture).
I1, I2, I3, …, In, …
A randomly selected set of inputs is often not adequate …
Write and execute unit tests
Execute acceptance tests
Write acceptance tests
“Executed after the development”
FIT/Fitnesse (High level)
Junit (Low level)
“Badly designed system”
Design for testability
“Well architected application”
Adequacy = level of confidence of a test suite applied to the system under test
Coverage measures describe the degree to which a program has been tested
Many type of coverage measures
1 scanf("%d", &x);
2 a = x + 1;
3 b = x - 1;
4 if (a < 10)
6 if (b > 20)
8 printf("%d\n", x);
Selective re-testing of a system or component to verify that modifications have not caused unintended effects
- Ripple effects
Can be conducted at each of the test levels: unit, integration, system
The faults revealed by a test case are unknown until the test case is executed and its output is evaluated against the oracle.
The order in which test cases are executed affects:
The information can be used in regression testing to prioritize the re-executions of the test cases, thus early finding faults.
- V.R. Basili and R.W. Selby. Comparing the Effectiveness of Software Testing Strategies. IEEE Transactions on Software Engineering. 1987
- Jim Heumann. Generating Test Cases From Use Cases. Online IBM journal. 2001
- Peter Zielczynski. Traceability from Use Cases to Test Cases. online IBM journal
- R.C.Martin and G.Melnik. Tests and Requirements, Requirements and Tests: A Möbius Strip. IEEE Software 2008
- Y.K.Malaiya, M.N.Li, J.M.Bieman, R.Karcich. Software reliability growth with test coverage. IEEE Transactions on Reliability
- Q. Yang, J.Jenny Li and D.M. WEISS. A Survey of Coverage-Based Testing Tools. The Computer Journal 2007
- Ben H. Smith and Laurie Williams. Should Software Testers Use Mutation Analysis to Augment a Test Set. Journal of Software Systems 2009
-Florentin Ipate, Raluca Lefticaru. State-based Testing is Functional Testing! TAIC-PART 2007
-Jeff Offutt, Shaoying Liu, Aynur Abdurazik and Paul Ammann. Generating test data from state-based speciﬁcations. Jounal on Software Testing, Verification and Reliability. 2003