|
Software Engineering This website demonstrates using wikis as teaching and learning tool. The course instructor is also happy to share the teaching materials here with those who find it readable. |
Lecture /
Software Testing - Part 2A Software Engineering Lecture by Steven Choy Lecture Overview: In this lecture, we will continue to learn Software Testing. It covers System Testing, Regression Testing, and Documenting Testing. We will also have a brief touch on how JUnit is used to automate unit testing in Java. While unit and integration testing focus on finding faults in individual components and the interfaces between the components, system testing ensures that the complete system complies with the functional and nonfunctional requirements. System testing includes functional testing, performance testing, pilot testing, acceptance testing, and installation testing. Regression testing is to ensure that a program has not regressed; the functionality that was working yesterday is still working today. In other word, regression testing is to ensure that we do not introduce new bugs while removing existing bugs. A program still works correctly after changes were made to it. Reading: Chapter 11 of the textbook Testing System TestingSystem Testing Overview
Functional Testing
Performance Testing
Performance Test Tools
Acceptance Testing
Pilot Testing
Software release life cycle
Does Testing end Here?Regression Testing
"Yes, I admit Regression Testing is crucial to our system"
But…
How can we perform all test cases again & again manually?
It's really time-consuming & a waste of development man-hours
Automate Your Testing
A Very Simple Example
Unit Test in a manual way
Automate Unit Testing by JUnit
JUnit Example
Unit Testing Quotes
JUnit References
Test Documentation
Reference: IEEE Test Plan Outline (IEEE 829 FORMAT)
1) Test Plan Identifier
2) References
3) Introduction
4) Test Items
5) Software Risk Issues
6) Features to be Tested
7) Features not to be Tested
8) Approach
9) Item Pass/Fail Criteria
10) Suspension Criteria and Resumption Requirements
11) Test Deliverables
12) Remaining Test Tasks
13) Environmental Needs
14) Staffing and Training Needs
15) Responsibilities
16) Schedule
17) Planning Risks and Contingencies
18) Approvals
19) Glossary
Test case ID
Purpose
What are the test items? Basically what items are you testing? If in same document as above, then a simple 2 line overview and reference to previous document is sufficient for our purpose.
Source of the feature
Who originated the this test case?
Programmer ID
Who programmed the code implementing the feature?
Environmental Setup
Any special procedures required for the individual tests?
Test design method
What techniques has been used? What coverage criterion will be met? Did you use [J/Cpp]Unit? How do you organize the test cases using [J/Cpp]Unit? Many test cases differ only in a few parameters (.e. shelf/slot). These should be parameterized with [J/Cpp]Unit and invoked as needed. Also, there would be some type of system startup (initialize system to a known state and then a tear down part - restore system to initial state after test), that should be found in each TestFixture.
Test case dependencies
What are the test cases whose successful outcome is a precondition for this to be executed? Will the running of one test case possibly interfere with the running of another test case? If yes, identify the cases and state the effects/resolution. For example running a stress test with reduced resources may leave the system in state that may interfere with other test cases.
Test case behaviour
Extra Materials about Software TestingSuggested Readings on JUnit:
Some Tools for Performance Testing:
Some Tools for Testing Automation
Other useful resources: On-demand testing via a global community of professional testers - Build your own virtual testing team on demand, define your testing requirements and get real-time valuable bug reporting and application feedback from the uTester global community. Test and release your software with confidence to accelerate time to market.
Watch a Demo (about 3 minutes) (See how our Community of Professional Testers can improve your software testing!)
Application test tools include Source Test Tools, Functional Test Tools, Performance Test Tools, Java Test Tools, Embedded Test Tools, and Database Test Tools.
Opensourcetesting.org aims to boost the profile of open source testing tools within the testing industry, principally by providing users with an easy to use gateway to information on the wide range of open source testing tools available.
35 Performance test tools, including Apache JMeter, benerator, WebLOAD, Grinder, and Siege.
Selenium is a test tool for web applications. Selenium tests run directly in a browser, just as real users do. And they run in Internet Explorer, Mozilla and Firefox on Windows, Linux, and Macintosh. No other test tool covers such a wide array of platforms.
The Grinder is a Java load testing framework that makes it easy to run a distributed test using many load injector machines. It is freely available under a BSD-style open-source license.
Apache JMeter is a 100% pure Java desktop application designed to load test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to other test functions.
In the last few years, unit testing has emerged as one of the Good Ideas of our craft. Support for this has grown to as near to unanimous as you could ask for. The last idea that reached this level of consensus was source control in the mid 90s, something that has obviously stuck around. Unit testing very well may be one of the lasting ideas of this decade.
Thanks for ReadingIf you would rather like to have this lecture note in printed format, please click the print action link in the top right corner. If you find any problem in this lecture note, please feel free to tell Steven by steven@findaway.hk |