pptx

advertisement
CISC/CMPE320
• Assignment 4 is due Nov. 22 (this Sunday).
• Presentation stuff.
• Today, More Software Engineering:
– System Failure and A Movie!
– Testing, Cont.
Fall 2015
CISC/CMPE320 - Prof. McLeod
1
Week 12 Team Presentations
• Demonstrate of the fruit of your efforts!
• And, summarize (in any order you wish):
– How work ended up being distributed and when it was
completed.
– Difficulties faced and overcome.
– Difficulties not overcome.
– Good/bad library use.
– Work left to do, if any.
– Team techniques that worked and those that did not.
– What you would do differently if you had to do this
again…
Fall 2015
CISC/CMPE320 - Prof. McLeod
2
Presentation Schedule – Week 12
• Tuesday, Dec. 1 – Basswood, Beech, Cherry,
Tamarack.
• Thursday, Dec. 3, Lecture Time – Hickory, Maple,
Oak, Birch.
• Thursday, Dec. 3, Tutorial Time (JEF 128) –
Poplar, BalsamFir, Spruce, Cedar.
• Friday, Dec. 4 – Hemlock, JackPine, Walnut,
WhitePine.
Fall 2015
CISC/CMPE320 - Prof. McLeod
3
Peer Grading, Again.
• Sign-up sheets will be circulated again during
presentations.
• Project Wikis will be make public on Nov. 25.
• As for last time – two Moodle surveys:
– The Wiki: Is the SDD up-to-date and does it accurately
describe the architecture? Is the Wiki looking better
than the last time you saw it?
– The Presentation: Organized, effective, met initial
goals, good discussion of problems overcome?
Fall 2015
CISC/CMPE320 - Prof. McLeod
4
System Failure
• Often the result of a combination of events that is
nearly impossible to predict or test for.
• See presentation from Dr. Terry Shepard linked to
the lecture notes page – in particular the slides on
the FBI VCF (“Virtual Case Files”) failure.
Possibly the most highly publicized software
failure.
• A few more examples ranging from just annoying
to deadly:
Fall 2015
CISC/CMPE320 - Prof. McLeod
5
Microsoft Zune 30 Meltdown
• Apparently 2006 models of this MP3
player just froze up at midnight, Dec. 31,
2008.
http://slashdot.org/article.pl?sid=09/01/04/2034248
• Eventually Microsoft acknowledged the
problem.
• Here is the offending C code:
• Can you spot the problem?
Fall 2015
CISC/CMPE320 - Prof. McLeod
6
#define ORIGINYEAR 1980
BOOL ConvertDays(UINT32 days, SYSTEMTIME* lpTime) {
int dayofweek, month, year;
UINT8 *month_tab;
//Calculate current day of the week
dayofweek = GetDayOfWeek(days);
year = ORIGINYEAR;
while (days > 365) {
if (IsLeapYear(year)) {
if (days > 366) {
days -= 366;
year += 1;
}
}
else {
days -= 365;
year += 1;
}
}
…
Fall 2015
CISC/CMPE320 - Prof. McLeod
7
Communications Problems
• The designers of the New England branch of the
ARPAnet decided on seven-fold redundancy.
Unfortunately all seven lines were sent through
the same fibre optic trunk line, which was severed
on Dec. 12, 1986.
• (Not all systems problems are a result of software
failure!!)
Fall 2015
CISC/CMPE320 - Prof. McLeod
8
More Communications Problems
• In late 1989, AT&T installed faulty software in 114
electronic switching systems. The problem was
traced to a break statement inside an if
statement inside a switch statement in a C
program.
• A cascading problem caused all 114 switches to
break down.
• AT&T was shut down nationwide for 9 hours, with
an estimated 5 million calls blocked as a result.
Fall 2015
CISC/CMPE320 - Prof. McLeod
9
Nuclear Power
• Bad software contributed to the accident at Three
Mile Island 2 in 1979
• Core temperatures were being measured with
thermocouples, but the software would not report
temperatures over 700 degrees – “??????” was
reported instead, even though the thermocouples
were capable of measuring higher temps.
• Also intended valve settings were displayed by
the control software rather than actual valve
settings…
Fall 2015
CISC/CMPE320 - Prof. McLeod
10
Defense and Warfare Problems
• Patriot Missiles during the Gulf War
– Reported to the media that they were
95% effective.
– Turns out that they were really only about
13% effective due to a clock drift
problem.
– This caused a Patriot missile to miss the
Scud missile that hit an American Army
barrack in Dhahran, killing 29 and injuring
97.
– This is a famous and classic example of a
failure of software engineering.
Fall 2015
CISC/CMPE320 - Prof. McLeod
11
Defense and Warfare Problems, Cont.
• Iran Air Flight 655 was shot down by USS
Vincennes’ missile in 1988
– 290 People were killed.
– The error was blamed mostly on the poor interface
used by the Aegis radar tracking system used aboard
the Vincennes.
Fall 2015
CISC/CMPE320 - Prof. McLeod
12
The F.I.R.S.T. Rules
• Fast tests are more likely to be run as often as
they should be.
• Independent tests will not depend on each other.
You should be able to run tests in any order.
• Repeatable tests can be run in any hardware/OS
environment.
• Self-validating tests either pass or fail.
• Timely tests follow the three laws of TDD.
Fall 2015
CISC/CMPE320 - Prof. McLeod
13
Overview of the Testing Process
Fall 2015
Process
Testing
Coding
Unit Testing
Design
Integration
Testing
Requirements
Analysis
Validation Testing
System
Engineering
System Testing
CISC/CMPE320 - Prof. McLeod
14
Overview, Cont.
• Test Planning – Allocate and schedule resources.
Do this early on – as soon as models stabilize.
• Usability Testing – Test user interface. (See
“Paper Prototyping”, for example.)
• Unit Testing – Test individual methods and
classes.
• Integration Testing –
– First separate classes by threads.
– Start by identifying independent classes and test them
first, then test dependent classes, layer by layer.
– Cluster testing – test a bunch of collaborating classes
together.
– Use regression testing, stub and driver code as needed
(more about these later!).
15
Overview, Cont.
• System Testing – Test all the classes together.
– Functional Testing tests the requirements listed in the
RAD and user manual.
– Performance Testing checks non-functional
requirements and additional design goals from the
SDD. (Done by developers).
– Acceptance and Installation Testing – Check the
system against any agreement made. (Done by clients
with help from developers, if needed).
Fall 2015
CISC/CMPE320 - Prof. McLeod
16
More Definitions…
• A Component is the class, the cluster of classes,
the package or one or more subsystems that is
being tested.
• A Test Case is a set of inputs and expected
results that exercises a component with the
purpose of causing failures and detecting faults.
• A Test Stub is partial implementation of a
component upon which the component being
tested depends.
• A Test Driver is a partial component that depends
on the component being tested.
– Stubs and Drivers allow the component to be
harnessed – isolated from the rest of the system.
Fall 2015
CISC/CMPE320 - Prof. McLeod
17
More Definitions, Cont.
• A Correction is a change to a component made to
repair a fault. A correction can introduce new
faults…
“Round and round we go – where we’ll stop nobody knows!”
Fall 2015
CISC/CMPE320 - Prof. McLeod
18
More Definitions, Cont.
• A system that fails after a correction has
regressed.
• Carrying out the previous set of integration tests
again is called Regression Testing.
Fall 2015
CISC/CMPE320 - Prof. McLeod
19
Unit Testing
• Common types of unit testing:
–
–
–
–
Fall 2015
Equivalence testing
Boundary testing
Path testing
State-based testing
CISC/CMPE320 - Prof. McLeod
20
Equivalence Testing
• A blackbox technique.
– (Deal with the input/output of the component, leave the
internal behaviour alone.)
• Minimal number of test cases.
• First, determine a set of equivalence classes.
• You assume that the component behaves the
same for all members of the equivalence class.
Fall 2015
CISC/CMPE320 - Prof. McLeod
21
Equivalence Testing, Cont.
• Criteria for equivalence classes:
– Coverage – every possible input belongs to one of the
equivalence classes.
– Disjointedness – no input belongs to more than one
equivalence class.
– Representation – if one member of an equivalence
class causes an erroneous state then the same state
can be caused by any other member of that class.
• For each class, select at least two test inputs – a
valid input and an input that should exercise your
exception handlers.
Fall 2015
CISC/CMPE320 - Prof. McLeod
22
Equivalence Testing, Cont.
• Example – suppose you are testing a class that
stores dates, as given by a year and month.
• You would need six equivalence classes:
–
–
–
–
–
–
31 day months, non-leap years
31 day months, leap years
30 day months, non-leap years
30 day months, leap years
28 day month, non-leap years
29 day month, leap year
• Minimum of 12 tests!
Fall 2015
CISC/CMPE320 - Prof. McLeod
23
Boundary Testing
• Look at the “edges” of the equivalence classes.
• For example:
–
–
–
–
Fall 2015
Leap year divisible by 400 (year 2000, for example)
Non-leap year divisible by 100 (year 1900, for example)
Invalid month (at negative edge of legal months): 0
Invalid month (at positive edge of legality): 13
CISC/CMPE320 - Prof. McLeod
24
Equivalence and Boundary Testing
• The problem with these techniques is that they do
not explore many combinations of input data.
• Often a strange combination will cause an error,
and this will take many more tests to locate.
• (My instincts say that there are just not enough
tests!)
Fall 2015
CISC/CMPE320 - Prof. McLeod
25
Path Testing
• A whitebox technique.
– (Focus on the internal structure of the component. Test
every state of the component and every possible
interaction of objects.)
• Exercise every possible path through the code at
least once.
– Exercise every branch of every if statement.
– Run each loop – can you cause a loop not to run?
– Throw each exception.
Fall 2015
CISC/CMPE320 - Prof. McLeod
26
Path Testing, Cont.
• The problem with this technique is that it cannot
show where code is missing – it only tests existing
code.
Fall 2015
CISC/CMPE320 - Prof. McLeod
27
State – Based Testing
• Developed for GUI systems.
• A new technique that is not fully fleshed out.
• Based on the idea that objects (like a button) can
have different states under different conditions
(like active, inactive, pressed, mouseover, etc.)
• See: WindowTester from Google, for example:
https://developers.google.com/java-devtools/wintester/html/index
Fall 2015
CISC/CMPE320 - Prof. McLeod
28
Polymorphism Testing
• OOP provides additional challenges to testing
when a program takes advantage of
polymorphism.
• You must make sure that every state of an object
is tested.
• This can lead to many more tests especially when
polymorphism is used by several objects in a
component.
Fall 2015
CISC/CMPE320 - Prof. McLeod
29
Download