Download presentation
Presentation is loading. Please wait.
1
SE 433/333 Software Testing & Quality Assurance
April 25, 2017 SE 433/333 Software Testing & Quality Assurance Dennis Mumaugh, Instructor Office: CDM, Room 428 Office Hours: Tuesday, 4:00 – 5:30 April 25, 2017 SE 433: Lecture 5 Lecture 5
2
Administrivia Comments and Feedback
SE 433 April 25, 2017 Comments and Feedback Grading: have not been assigned a grader, so I get to do it myself. Working. Midterm Examination this week [April 27-May 1] Will use the Desire2Learn System ( Using Desire2Learn [See note]. Details Things to avoid Taking Quizzes on-line There are a couple of things for the students to keep in mind when taking a quiz on-line. When taking the quiz, once started the student may not click or select any area outside of the quiz page. During the quiz the ISP may not receive any indication of user activity. Some ISPs will terminate the session due to inactivity. This would only be a problem for lengthy quizzes. The test will present each question one at a time. It can save each answer before going to the next question. You may return to a question and revise the answer but once you press submit you may not revisit the test. You will be warned if you do not answer a question fully or if you did not answer a question at all. In writing answers with multiple responses please mark or number each response and separate them by a couple of blank lines. Read each question carefully. Note especially words in bold as they signify something special about the context of the question. Also, note whether we are asking for the correct answer or the incorrect answer. April 25, 2017 SE 433: Lecture 5 Lecture 5
3
SE 433 – Class 5 Topic: Reading: Black Box Testing Part 2, JUnit & Ant
April 25, 2017 Topic: Black Box Testing Part 2, JUnit & Ant Reading: Pezze and Young: Chapter 10 JUnit documentation: Ant documentation: Ant introductory tutorial: An example of using JUnit with Ant: JUnit3.zip in D2L Articles on the Class Page and Reading List April 25, 2017 SE 433: Lecture 5 Lecture 5
4
Assignment 6 Using JUnit and Ant Due Date: May 4, 2017, Objective
SE 433 April 25, 2017 Using JUnit and Ant Due Date: May 4, 2017, Objective The objective of this assignment is to run JUnit tests using Ant. Requirements Install standalone JUnit and Ant. Write an Ant build file, build.xml, to compile and run the JUnit tests you have developed in Assignment 3 & 4. You should define a target named testAll that accomplishes all the tasks above. April 25, 2017 SE 433: Lecture 5 Lecture 5
5
Assignment 7 Part 2: Test Case Implementation Due Date: May 11, 2017
April 25, 2017 Part 2: Test Case Implementation Due Date: May 11, 2017 The objective of this assignment is to design unit test suites using black-box techniques, implementing the test suites using JUnit, and run the test suites using Ant. The binary code of both programs under test is provided in a zip file named classes.zip. Unzip this file, you will find a directory named classes, that contains the compiled byte code of programs under test. The programs match the descriptions given in the assignment. However, the implementations may contain defects. You must include the classes directory in your classpath to run or test the programs. April 25, 2017 SE 433: Lecture 5 Lecture 5
6
SE 433 April 25, 2017 Thought for the Day “You must be a constructive schizophrenic. Be clear about the difference between your role as a programmer and as a tester. The tester in you must be suspicious, uncompromising, hostile, and compulsively obsessed with destroying, utterly destroying, the programmer’s software. The tester in you is your Mr. Hyde – your Incredible Hulk. He must exercise what Gruenberger calls ‘low cunning.” – Boris Beizer April 25, 2017 SE 433: Lecture 5 Lecture 5
7
Black-box Testing April 25, 2017 SE 433: Lecture 5
8
Black Box Testing Testing software against a specification of its external behavior without knowledge of internal implementation details Can be applied to software “units” (e.g., classes) or to entire programs External behavior is defined in API docs, Functional specs, Requirements specs, etc. Because black box testing purposely disregards the program's control structure, attention is focused primarily on the information domain (i.e., data that goes in, data that comes out) The Goal: Derive sets of input conditions (test cases) that fully exercise the external functionality April 25, 2017 SE 433: Lecture 5
9
Black-box Testing Categories
Incorrect or missing functions Interface errors Usability problems Concurrency and timing errors Errors in data structures or external data base access Behavior or performance errors Initialization and termination errors Unlike white box testing, black box testing tends to be applied later in the development process April 25, 2017 SE 433: Lecture 5
10
Questions answered by Black-box Testing
How is functional validity tested? How are system behavior and performance tested? What classes of input will make good test cases? Is the system particularly sensitive to certain input values? How are the boundary values of a data class isolated? What data rates and data volume can the system tolerate? What effect will specific combinations of data have on system operation? April 25, 2017 SE 433: Lecture 5
11
The Information Domain: inputs and outputs
Individual input values Try many different values for each individual input Combinations of inputs Individual inputs are not independent from each other Programs process multiple input values together, not just one at a time Try many different combinations of inputs in order to achieve good coverage of the input domain Ordering and Timing of inputs In addition to the particular combination of input values chosen, the ordering and timing of the inputs can also make a difference April 25, 2017 SE 433: Lecture 5
12
The Information Domain: inputs and outputs
Defining the input domain Boolean value T or F Numeric value in a particular range -99 <= N <= 99 Integer, Floating point Non-negative One of a fixed set of enumerated values {Jan, Feb, Mar, …} {Visa, MasterCard, Discover, …} Formatted strings Phone numbers File names URLs Credit card numbers Regular expressions April 25, 2017 SE 433: Lecture 5
13
Black Box Testing Equivalence classes April 25, 2017 SE 433: Lecture 5
14
Equivalence Partitioning
A black-box testing method that divides the input domain of a program into classes of data from which test cases are derived An ideal test case single-handedly uncovers a complete class of errors, thereby reducing the total number of test cases that must be developed Test case design is based on an evaluation of equivalence classes for an input condition An equivalence class represents a set of valid or invalid states for input conditions From each equivalence class, test cases are selected so that the largest number of attributes of an equivalence class are exercised at once April 25, 2017 SE 433: Lecture 5
15
Equivalence Partitioning
Typically the universe of all possible test cases is so large that you cannot try them all You have to select a relatively small number of test cases to actually run Which test cases should you choose? Equivalence partitioning helps answer this question April 25, 2017 SE 433: Lecture 5
16
Equivalence Partitioning
Partition the test cases into "equivalence classes” Each equivalence class contains a set of "equivalent" test cases Two test cases are considered to be equivalent if we expect the program to process them both in the same way (i.e., follow the same path through the code) If you expect the program to process two test cases in the same way, only test one of them, thus reducing the number of test cases you have to run April 25, 2017 SE 433: Lecture 5
17
Equivalence Partitioning
First-level partitioning: Valid vs. Invalid test cases Valid Invalid April 25, 2017 SE 433: Lecture 5
18
Equivalence Partitioning
Partition valid and invalid test cases into equivalence classes April 25, 2017 SE 433: Lecture 5
19
Equivalence Partitioning
Create a test case for at least one value from each equivalence class April 25, 2017 SE 433: Lecture 5
20
Equivalence Partitioning
When designing test cases, you may use different definitions of “equivalence”, each of which will partition the test case space differently Example: int Add(n1, n2, n3, …) Equivalence Definition 1: partition test cases by the number of inputs (1, 2, 3, etc.) Equivalence Definition 2: partition test cases by the number signs they contain (positive, negative, both) Equivalence Definition 3: partition test cases by the magnitude of operands (large numbers, small numbers, both) Etc. April 25, 2017 SE 433: Lecture 5
21
Equivalence Partitioning
When designing test cases, you may use different definitions of “equivalence”, each of which will partition the test case space differently Example: string Fetch(URL) Equivalence Definition 1: partition test cases by URL protocol (“http”, “https”, “ftp”, “file”, etc.) Equivalence Definition 2: partition test cases by type of file being retrieved (HTML, GIF, JPEG, Plain Text, etc.) Equivalence Definition 3: partition test cases by length of URL (very short, short, medium, long, very long, etc.) Same host Etc. April 25, 2017 SE 433: Lecture 5
22
Equivalence Partitioning
Test multiple values in each equivalence class. Often you’re not sure if you have defined the equivalence classes correctly or completely, and testing multiple values in each class is more thorough than relying on a single value. April 25, 2017 SE 433: Lecture 5
23
Guidelines for Defining Equivalence Classes
If an input condition specifies a range, one valid and two invalid equivalence classes are defined Input range: 1 – 10 Eq classes: {1..10}, {x < 1}, {x > 10} If an input condition requires a specific value, one valid and two invalid equivalence classes are defined Input value: 250 Eq classes: {250}, {x < 250}, {x > 250} If an input condition specifies a member of a set, one valid and one invalid equivalence class are defined Input set: {-2.5, 7.3, 8.4} Eq classes: {-2.5, 7.3, 8.4}, {any other x} If an input condition is a Boolean value, one valid and one invalid class are define Input: {true condition} Eq classes: {true condition}, {false condition} April 25, 2017 SE 433: Lecture 5
24
Equivalence Partitioning - examples
Input Valid Equivalence Classes Invalid Equivalence Classes A integer N such that: -99 <= N <= 99 ? Phone Number Area code: [200, 999] Prefix: (200, 999] Suffix: Any 4 digits April 25, 2017 SE 433: Lecture 5
25
Equivalence Partitioning - examples
Input Valid Equivalence Classes Invalid Equivalence Classes A integer N such that: -99 <= N <= 99 [-99, -10] [-9, -1] [1, 9] [10, 99] ? Phone Number Area code: [200, 999] Prefix: (200, 999] Suffix: Any 4 digits April 25, 2017 SE 433: Lecture 5
26
Equivalence Partitioning - examples
Input Valid Equivalence Classes Invalid Equivalence Classes A integer N such that: -99 <= N <= 99 [-99, -10] [-9, -1] [1, 9] [10, 99] < -99 > 99 Malformed numbers {12-, 1-2-3, …} Non-numeric strings {junk, 1E2, $13} Empty value Phone Number Area code: [200, 999] Prefix: (200, 999] Suffix: Any 4 digits ? April 25, 2017 SE 433: Lecture 5
27
Equivalence Partitioning - examples
Input Valid Equivalence Classes Invalid Equivalence Classes A integer N such that: -99 <= N <= 99 [-99, -10] [-9, -1] [1, 9] [10, 99] < -99 > 99 Malformed numbers {12-, 1-2-3, …} Non-numeric strings {junk, 1E2, $13} Empty value Phone Number Area code: [200, 999] Prefix: (200, 999] Suffix: Any 4 digits (555) 200 <= Area code <= 999 200 < Prefix <= 999 ? April 25, 2017 SE 433: Lecture 5
28
Equivalence Partitioning - examples
Input Valid Equivalence Classes Invalid Equivalence Classes A integer N such that: -99 <= N <= 99 [-99, -10] [-9, -1] [1, 9] [10, 99] < -99 > 99 Malformed numbers {12-, 1-2-3, …} Non-numeric strings {junk, 1E2, $13} Empty value Phone Number Area code: [200, 999] Prefix: (200, 999] Suffix: Any 4 digits (555) 200 <= Area code <= 999 200 < Prefix <= 999 Invalid format , (555)(555)5555, etc.. Area code < 200 or > 999 Area code with non-numeric characters Similar for Prefix and Suffix April 25, 2017 SE 433: Lecture 5
29
Boundary Value Analysis
A greater number of errors occur at the boundaries of the input domain rather than in the "center" Boundary value analysis is a test case design method that complements equivalence partitioning It selects test cases at the edges of a class It derives test cases from both the input domain and output domain April 25, 2017 SE 433: Lecture 5
30
Guidelines for Boundary Value Analysis
If an input condition specifies a range bounded by values a and b, test cases should be designed with values a and b as well as values just above and just below a and b If an input condition specifies a number of values, test case should be developed that exercise the minimum and maximum numbers. Values just above and just below the minimum and maximum are also tested Apply guidelines 1 and 2 to output conditions; produce output that reflects the minimum and the maximum values expected; also test the values just below and just above If internal program data structures have prescribed boundaries (e.g., an array), design a test case to exercise the data structure at its minimum and maximum boundaries April 25, 2017 SE 433: Lecture 5
31
Boundary Value Analysis
When choosing values from an equivalence class to test, use the values that are most likely to cause the program to fail Errors tend to occur at the boundaries of equivalence classes rather than at the "center" If (200 < areaCode && areaCode < 999) { // valid area code } Wrong! If (200 <= areaCode && areaCode <= 999) { // valid area code } Testing area codes 200 and 999 would catch this error, but a center value like 770 would not In addition to testing center values, we should also test boundary values Right on a boundary Very close to a boundary on either side April 25, 2017 SE 433: Lecture 5
32
Boundary Value Analysis
Create test cases to test boundaries of equivalence classes April 25, 2017 SE 433: Lecture 5
33
Boundary Value Analysis - examples
Input Boundary Cases A number N such that: -99 <= N <= 99 ? Phone Number Area code: [ ] Prefix: [ ] Suffix: Any 4 digits April 25, 2017 SE 433: Lecture 5
34
Boundary Value Analysis - examples
Input Boundary Cases A number N such that: -99 <= N <= 99 -100, -99, -98 -10, -9 -1, 0, 1 9, 10 98, 99, 100 Phone Number Area code: [ ] Prefix: [ ] Suffix: Any 4 digits ? April 25, 2017 SE 433: Lecture 5
35
Boundary Value Analysis - examples
Input Boundary Cases A number N such that: -99 <= N <= 99 -100, -99, -98 -10, -9 -1, 0, 1 9, 10 98, 99, 100 Phone Number Area code: [ ] Prefix: [ ] Suffix: Any 4 digits Area code: 199, 200, 201 Area code: 998, 999, 1000 Prefix: 200, 199, 198 Prefix: 998, 999, 1000 Suffix: 3 digits, 5 digits April 25, 2017 SE 433: Lecture 5
36
Boundary Value Analysis - examples
Numeric values are often entered as strings which are then converted to numbers internally [int x = atoi(str);] This conversion requires the program to distinguish between digits and non-digits A boundary case to consider: Will the program accept / and : as digits? Char / 1 2 3 4 5 6 7 8 9 : 47 48 49 50 51 52 53 54 55 56 57 58 ASCII April 25, 2017 SE 433: Lecture 5
37
Mainstream usage testing
Don't get so wrapped up in testing boundary cases that you neglect to test "normal" input values Values that users would typically enter during mainstream usage April 25, 2017 SE 433: Lecture 5
38
General Testing April 25, 2017 SE 433: Lecture 5
39
Testing for race conditions and other timing dependencies
Many systems perform multiple concurrent activities Operating systems manage concurrent programs, interrupts, etc. Servers service many clients simultaneously Applications let users perform multiple concurrent actions Test a variety of different concurrency scenarios, focusing on activities that are likely to share resources (and therefore conflict) "Race conditions" are bugs that occur only when concurrent activities interleave in particular ways, thus making them difficult to reproduce Test on hardware of various speeds to ensure that your system works well on both slower and faster machines April 25, 2017 SE 433: Lecture 5
40
Performance Testing Measure the system's performance
Running times of various tasks Memory usage, including memory leaks Network usage (Does it consume too much bandwidth? Does it open too many connections?) Disk usage (Is the disk footprint reasonable? Does it clean up temporary files properly?) Process/thread priorities (Does it play well with other applications, or does it hog the whole machine?) April 25, 2017 SE 433: Lecture 5
41
Limit Testing Test the system at the limits of normal use
Test every limit on the program's behavior defined in the requirements Maximum number of concurrent users or connections Maximum number of open files Maximum request size Maximum file size Etc. What happens when you go slightly beyond the specified limits? Does the system's performance degrade dramatically, or gracefully? April 25, 2017 SE 433: Lecture 5
42
Stress Testing Test the system under extreme conditions (i.e., beyond the limits of normal use) Create test cases that demand resources in abnormal quantity, frequency, or volume Low memory conditions Disk faults (read/write failures, full disk, file corruption, etc.) Network faults Unusually high number of requests Unusually large requests or files Unusually high data rates (what happens if the network suddenly becomes ten times faster?) Even if the system doesn't need to work in such extreme conditions, stress testing is an excellent way to find bugs April 25, 2017 SE 433: Lecture 5
43
Security Testing Any system that manages sensitive information or performs sensitive functions may become a target for intrusion (i.e., hackers) How feasible is it to break into the system? Learn the techniques used by hackers Try whatever attacks you can think of Hire a security expert to break into the system If somebody broke in, what damage could they do? If an authorized user became disgruntled, what damage could they do? April 25, 2017 SE 433: Lecture 5
44
Usability Testing Is the user interface intuitive, easy to use, organized, logical? Does it frustrate users? Are common tasks simple to do? Does it conform to platform-specific conventions? Get real users to sit down and use the software to perform some tasks Watch them performing the tasks, noting things that seem to give them trouble Get their feedback on the user interface and any suggested improvements Report bugs for any problems encountered April 25, 2017 SE 433: Lecture 5
45
Recovery Testing Try turning the power off or otherwise crashing the program at arbitrary points during its execution Does the program come back up correctly when you restart it? Was the program’s persistent data corrupted (files, databases, etc.)? Was the extent of user data loss within acceptable limits? Can the program recover if its configuration files have been corrupted or deleted? What about hardware failures? Does the system need to keep working when its hardware fails? If so, verify that it does so. April 25, 2017 SE 433: Lecture 5
46
Configuration Testing
Test on all required hardware configurations CPU, memory, disk, graphics card, network card, etc. Test on all required operating systems and versions thereof Virtualization technologies such as VMWare and Virtual PC are very helpful for this Test as many Hardware/OS combinations as you can Test installation programs and procedures on all relevant configurations April 25, 2017 SE 433: Lecture 5
47
Compatibility Testing
Test to make sure the program is compatible with other programs it is supposed to work with Ex: Can Word 12.0 load files created with Word 11.0? Ex: "Save As… Word, Word Perfect, PDF, HTML, Plain Text" Ex: "This program is compatible with Internet Explorer and Firefox” Test all compatibility requirements April 25, 2017 SE 433: Lecture 5
48
Documentation Testing
Test all instructions given in the documentation to ensure their completeness and accuracy For example, “How To ...” instructions are sometimes not updated to reflect changes in the user interface Test user documentation on real users to ensure it is clear and complete April 25, 2017 SE 433: Lecture 5
49
JUnit & Ant April 25, 2017 SE 433: Lecture 5
50
Stand Alone JUnit & Ant Ant – a versatile Java build tool
Control and execute various tasks in development, testing, configuration, distribution, & installation. Full introduction a little later Run all the tasks independent from IDE Command-line, terminal mode Batch mode, continuous integration Full range of configuration options April 25, 2017 SE 433: Lecture 5
51
Prerequisite: Install JDK
Install latest JDK 7 or 8 (Java SE Development Kit) Minimum JDK 5 Download from oracle.com or java.com Run installer Typical location on Windows, called Java_Home C:\Program Files\Java\jdk8_u25 Add a new environment variable: JAVA_HOME Add to environment variable PATH: Java_Home/bin April 25, 2017 SE 433: Lecture 5
52
Setting Environment Variables
On Windows Control panel | System Advanced System Settings | Environment Variables New …/Edit … user variables On Linux or MacOSX Edit: .bash_profile or .profile Example: (MacOSX) export JAVA_HOME=“/usr/libexec/java_home” April 25, 2017 SE 433: Lecture 5
53
Download & Install JUnit 4
JUnit home page Download the latest JUnit 4.12 from github Download 2 jar files to Junit_Home junit-4.12.jar hamcrest-core-1.3.jar Both jar files must be in your classpath when you run JUnit. Add a new environment variable: JUNIT_HOME Set to Junit_Home Latest Junit version: JUnit 4.8.2, 04/08/2010 April 25, 2017 SE 433: Lecture 5
54
Download & Install Ant Download the latest Ant [ is also available] Unzip to a folder your local drive: Ant_Home Add a new environment variable ANT_HOME Set to Ant_Home Add to environment variable PATH: Ant_Home/bin For Apple OSX: How to install Apache Ant on Mac OS X – x/ Latest version: Ant February 8, 2010 Mac: ant lib directory: /usr/share/ant/lib/ April 25, 2017 SE 433: Lecture 5
55
An Introduction to Ant – A Java Build Tool
April 25, 2017 SE 433: Lecture 5
56
What is Ant? Ant – a versatile Java-based build tool
Control and execute various tasks in development, testing, configuration, distribution, & installation. Widely used in Java projects Integrated with IDE, including Eclipse Same objectives as make – a Unix/C-based build tool Ant build files (configuration) are written in XML April 25, 2017 SE 433: Lecture 5
57
Automating the Build (C & make)
The goal is to automate the build process foo.c foo.h bar.h bar.c driver.c foo.o bar.o driver.o gcc -c foo.c gcc -c bar.c gcc -c driver.c a.out gcc driver.o foo.o bar.o a.out: driver.o foo.o bar.o gcc driver.o foo.o bar.o driver.o: driver.c foo.h bar.h gcc -c driver.c foo.o: foo.c foo.h gcc -c foo.c bar.o: gcc -c bar.c linux3[1]% make gcc -c driver.c gcc -c foo.c gcc -c bar.c gcc driver.o foo.o bar.o linux3[2]% April 25, 2017 SE 433: Lecture 5
58
Project Organization The following example assumes that your workspace will be organized like so … build.xml Project Directory src *.java bin *.class doc *.html April 25, 2017 SE 433: Lecture 5
59
Anatomy of a Build File Ant’s build files are written in XML
Convention is to call the file build.xml Each build file contains A project At least 1 target Targets are composed of some number of tasks Build files may also contain properties Like macros in a make file Comments are within <!-- --> blocks April 25, 2017 SE 433: Lecture 5
60
The Ant Build File The default build file, build.xml
Each build file contains one project The project contains one or more targets A simple build file <project default="hello"> <target name="hello"> <echo message="Hello, World"/> </target> </project> April 25, 2017 SE 433: Lecture 5
61
The Ant Build File – Project
Each build file contains exactly one project The root element The project attributes name the name of the project. default the default target basedir the base directory of all relative paths. Example: <project name=“MyProject” default=“build” basedir=“.”> April 25, 2017 SE 433: Lecture 5
62
Projects The project tag is used to define the project you wish to work with Projects tags typically contain 3 attributes name – a logical name for the project default – the default target to execute basedir – the base directory for which all operations are done relative to Additionally, a description for the project can be specified from within the project tag April 25, 2017 SE 433: Lecture 5
63
Build File <project name="Sample Project" default="compile" basedir="."> <description> A sample build file for this project </description> </project> April 25, 2017 SE 433: Lecture 5
64
Targets The target tag has the following required attribute
name – the logical name for a target Targets may also have optional attributes such as depends – a list of other target names for which this task is dependent upon, the specified task(s) get executed first description – a description of what a target does Like make files, targets in Ant can depend on some number of other targets For example, we might have a target to create a jarfile, which first depends upon another target to compile the code A build file may additionally specify a default target April 25, 2017 SE 433: Lecture 5
65
The Ant Build File – Targets
Each project contains one or more targets One must be the default target Each target contains one or more tasks Targets are basic modules in the build April 25, 2017 SE 433: Lecture 5
66
The Ant Build File – Targets
Some attributes of targets name the name of the target. description a short description of this target depends a comma-separated list of names of targets on which this target depends. Execute Ant targets ant execute and complete the default target ant target execute and complete the specified target April 25, 2017 SE 433: Lecture 5
67
The Ant Build File – Target Dependency
Dependencies among the targets can be specified A depends on B, means B must be completed before A Ant automatically resolves the dependencies Determines the order of the dependent targets to be completed Invokes all the dependent tasks, Skips targets that have already been completed April 25, 2017 SE 433: Lecture 5
68
The Ant Build File – Target Dependency
Examples: <target name="A"/> <target name="B" depends="A"/> <target name="C" depends="B"/> <target name="D" depends="C,B,A"/> April 25, 2017 SE 433: Lecture 5
69
The Ant Build File – Tasks
Each target consists of one or more tasks Tasks are the actual jobs to be performed e.g., javac, jar, junit, etc. Ant provides a rich set of built-in tasks Core tasks Ant also supports user-defined tasks Needs to be defined before they can be used April 25, 2017 SE 433: Lecture 5
70
Tasks A task represents an action that needs execution
Tasks have a variable number of attributes which are task dependent There are a number of build-in tasks, most of which are things which you would typically do as part of a build process Create a directory Compile java source code Run the javadoc tool over some files Create a jar file from a set of files Remove files/directories And many, many others… For a full list see: April 25, 2017 SE 433: Lecture 5
71
Ant Core Tasks (Pre-Defined)
javac Runs the Java Compiler java Runs the Java Virtual Machine jar (war) Create JAR files mkdir Makes a directory copy Copies files to specified location delete Deletes specified files April 25, 2017 SE 433: Lecture 5
72
The Ant Build File – Tasks
Examples: <target name="prepare" depends="init“ > <mkdir dir="${bin}" /> </target> <target name="build" depends=”prepare" > <javac srcdir="src" destdir="${bin}"> <include name="**/*.java" /> </javac> April 25, 2017 SE 433: Lecture 5
73
The Ant Build File – Property Definitions
Properties are name-value pairs The property element defines properties that can be used in the rest of the build file An example: Property definition <property name=“src” value=“/home/src”/> Using defined property ${src} can be used anywhere in the build file to denote /home/src April 25, 2017 SE 433: Lecture 5
74
The Ant Build File – Property Definitions
Properties can also be defined in a separate properties file and imported to the build file <property file=“myprop.properties” /> In myprop.properties, you may define (Java properties format) src=/home/src Ant provides access to all system properties e.g., ${user.home}, ${user.name} April 25, 2017 SE 433: Lecture 5
75
The Ant Build File – Path Structures
Define paths used in various tasks Example of setting CLASSPATH (used in javac, java, etc..): <classpath> <pathelement path="${classpath}"/> <pathelement location="lib/helper.jar"/> </classpath> April 25, 2017 SE 433: Lecture 5
76
Running Ant – Command Line
Simply cd into the directory with the build.xml file and type ant to run the project default target Or, type ant followed by the name of a target April 25, 2017 SE 433: Lecture 5
77
Running Ant on Command-Line
Type ant Looks for the default build file build.xml in the current directory. ant –f mybuildfile.xml to specify another build file. April 25, 2017 SE 433: Lecture 5
78
Use JUnit with Ant Ant supports <junit> task
JUnit jar files must be in the classpath when the task is executed Two options: Add jar files in the classpath in the ant build file. For each task, <javac>, <junit> etc.. (examples later) Copy the jar files into the directory ANT_HOME\lib April 25, 2017 SE 433: Lecture 5
79
Running Ant – Eclipse Eclipse comes with out of the box support for Ant No need to separately download and configure Ant Eclipse provides an Ant view Window Show View Ant Simply drag and drop a build file into the Ant view, then double click the target to run April 25, 2017 SE 433: Lecture 5
80
An Example of Using JUnit and Ant
See JUnit3.zip April 25, 2017 SE 433: Lecture 5
81
The Example Program – The Class Under Test
package edu.depaul.se433; public class BinarySearch { public static int search(int[] a, int x) { … } public static int checkedSearch(int[] a, int x) { April 25, 2017 SE 433: Lecture 5
82
The JUnit Test package edu.depaul.se433; import org.junit.*; import static org.junit.Assert.*; import static edu.depaul.se433.BinarySearch.*; public class BinarySearchTest public void testSearch1() { … } public void testSearch2() { … } April 25, 2017 SE 433: Lecture 5
83
The Test Suite @Test public void testCheckedSearch1() {
int[] a = { 1, 3, 5, 7}; assertTrue(checkedSearch(a, 3) == 1); } @Test(expected=IllegalArgumentException.class) public void testCheckedSearch2() { checkedSearch(null, 1); public void testCheckedSearch3() { … } April 25, 2017 SE 433: Lecture 5
84
Running JUnit in Ant: Ant Build File: build.xml
<project name="MyProject" default="test1" basedir="."> <description> Ant build file </description> <!-- set global properties for this build --> <property name="src" location="src"/> <property name="bin" location="bin"/> <property name="junit" location="/Users/jia/Java/JUnit/junit-4.12"/> <target name="init"> <tstamp/> <!-- Create the time stamp --> <mkdir dir="${bin}"/> </target> April 25, 2017 SE 433: Lecture 5
85
Running JUnit in Ant: Ant Build File: build.xml
<target name="compile" depends="init" description="compile the source " > <!-- Compile the java code from ${src} into ${bin} --> <javac includeantruntime="false" srcdir="${src}" destdir="${bin}" debug="on"> <classpath location="${junit}/junit-4.12.jar"/> <classpath location="${junit}/hamcrest-core-1.3.jar"/> </javac> </target> April 25, 2017 SE 433: Lecture 5
86
Running JUnit in Ant: Ant Build File: build.xml
<target name="test1" depends="compile"> <!-- Run junit tests --> <junit printsummary="yes" fork="yes"> <classpath location="${bin}"/> <classpath location="${junit}/junit-4.12.jar"/> <classpath location="${junit}/hamcrest-core-1.3.jar"/> <formatter type="plain"/> <test name="edu.depaul.se433.BinarySearchTest"/> </junit> </target> </project> April 25, 2017 SE 433: Lecture 5
87
Run JUnit with Ant At the command line ant
~/Courses/SE 433/Examples/JUnit3$ ant Buildfile: /Users/jia/Courses/SE 433/Examples/JUnit3/build.xml init: [mkdir] Created dir: /Users/jia/Courses/SE 433/Examples/JUnit3/bin compile: [javac] Compiling 2 source files to /Users/jia/Courses/SE 433/Examples/JUnit3/bin test1: [junit] Running edu.depaul.se433.BinarySearchTest [junit] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: sec BUILD SUCCESSFUL Total time: 1 second April 25, 2017 SE 433: Lecture 5
88
JUnit Report TEST-edu.depaul.se433.BinarySearchTest.txt
Testsuite: edu.depaul.se433.BinarySearchTest Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: sec Testcase: testCheckedSearch1 took sec Testcase: testCheckedSearch2 took 0 sec Testcase: testCheckedSearch3 took 0 sec Testcase: testSearch2 took 0 sec Testcase: testSearch1 took 0 sec April 25, 2017 SE 433: Lecture 5
89
Running Ant in Eclipse Download and unzip JUnit3.zip to your workspace
New Java Project: JUnit3 build.xml in the project Open build.xml April 25, 2017 SE 433: Lecture 5
90
Running Ant in Eclipse Right click on the target “test1 [default]”
Run as -> Ant Build You can also run other targets in the build file April 25, 2017 SE 433: Lecture 5
91
Readings and References
JUnit documentation Ant documentation Using Apache Ant: Writing a Simple Buildfile Ant introductory tutorial How to install Apache Ant on Mac OS X – An example of using JUnit with Ant JUnit3.zip in D2L April 25, 2017 SE 433: Lecture 5
92
Next Class Topic: Combinatorial Testing, White Box Testing Part 1
SE 433 April 25, 2017 Topic: Combinatorial Testing, White Box Testing Part 1 Reading: Pezze and Young, Chapters , 11.1, 11.3, 12 Articles on the Class Page Assignment 6 – Using JUnit and Ant Due: May 4, 2017 Assignment 7 – Part 2: Test Case Implementation Due: May 11, 2017 April 25, 2017 SE 433: Lecture 5 Lecture 5
93
SE 433 “Nobody expects the Spanish Inquisition!” – Monty Python
April 25, 2017 Midterm Examination “Nobody expects the Spanish Inquisition!” – Monty Python This is from a famous sketch by Monty Python, a British comedy troop and show. April 25, 2017 SE 433: Lecture 5 Lecture 5
94
Mid-term Examination SE 433 April 25, 2017 Midterm Examination will be on the Desire2Learn system starting Thursday, April 27, through Monday, May 1 See important information about Taking Quizzes On-line On Desire2Learn Login to the Desire2Learn System ( Take the Mid-term examination. It will be made available Thursday, April 27, 2017. You must take the exam by COB Monday, May 1, 2017. Allow 3 hours (should take about one and a half hour if you are prepared); note: books or notes should not be used. Midterm study guide posted on the class page and on D2L Taking Quizzes on-line There are a couple of things for the students to keep in mind when taking a quiz on-line. When taking the quiz, once started the student may not click or select any area outside of the quiz page. During the quiz the ISP will not receive any indication of user activity. Some ISPs will terminate the session due to inactivity. This would only be a problem for lengthy quizzes. The test will present each question one at a time. It can save each answer before going to the next question. You may return to a question and revise the answer but once you press submit you may not revisit the test. You will be warned if you do not answer a question fully or if you did not answer a question at all. In writing answers with multiple responses please mark or number each response and separate them by a couple of blank lines. Read each question carefully. Note especially words in bold as they signify something special about the context of the question. Also, note whether we are asking for the correct answer or the incorrect answer. April 25, 2017 SE 433: Lecture 5 Lecture 5
Similar presentations
© 2025 SlidePlayer.com Inc.
All rights reserved.