Title: Ch. 1: Software Development (Read)
1Ch. 1 Software Development(Read)
- 5 Phases of Software Life Cycle
- Problem Analysis and Specification
- Design
- Implementation (Coding)
- Testing, Execution and Debugging
- Maintenance
1
2Problem Analysis and Specification
Easy in CS courses, not always in the real world.
Computer Science programming assignment -
specific statement of problem quantitative
description clearly defined requirements
input, output, calculations, test data
2
3Problem Analysis and Specification
Real World request - general statement of
problem qualitative not quantitative
precision missing for input, output,
processing
P. 3
3
4Statement of specifications
- the formal statement of the problems
requirements - the major reference document
- a benchmark used to evaluate the final system
The program should display on the screen a prompt
for an amount to be depreciated and the number of
years over which it is to be depreciated. If
should then read these two values from the
keyboard. Once it has the amount and the number
of years, it should compute the sum of the
integers 1, 2, . . . up to the number of years.
It should then display on the screen a table with
appropriate headings that shows the year number
and the number and the depreciation for that
year, for the specified number of years.
Sometimes stated precisely using a formal method.
4
5Design
- CS courses
- small systems
- few hundred lines of code
- simple, straightforward
- self-contained
- Real world
- large systems
- thousands of lines of code
- complex
- many components
5
6OCD Object-Centered Design
P. 4
(OOD Object-Oriented Design)
- 1. Identify the objects in the problem's
specification and their types. - 2. Identify the operations needed to solve the
problem. - 3. Arrange the operations in a sequence of steps,
called an algorithm, which, when applied to the
objects, will solve the problem.
6
7Algorithm
Data Types
P. 5
- Simple
- Structured data structures
containers
- May be written in pseudocode
- Characteristics of steps (instructions), see pg
9 - Definite and unambiguous
- Simple
- Finite
- Difference between correctness and efficiency,
see pp 7-8 - O(n) grows linearly with size (n) of the input
- O(1) is constant , i.e. independent of size of
input - Should be well-structured
Can't separate data structures and algorithms
Algorithms Data Structures Programs
7
8Algorithm (Structured Version)
Compare with unstructured version
/ Algorithm to read and count several triples of
distinct numbers and print the largest number in
each triple. / 1. Initialize count to 0. 2.
Read the first triple of numbers x, y, z. 3.
While x is not the end-of-data-flag do the
following a. Increment count by 1. b. If x gt
y and x gt z then display x. Else if y gt x
and y gt z then display y Else display z. c.
Read the next triple x, y, z. 4. Display count.
8
9Implementation (Coding)
- Select language of implementation
- Encode the design
- Verify integration
- combining program units into a complete software
system. - Insure quality
- programs must be correct, readable, and
understandable - well-structured, documented, stylistic (see
guidelines on pp. 15-18)
Why? See p. 15
9
10Testing, Execution, and Debugging
- Validation "Are we building the right product?"
- check that documents, program modules, etc. match
the customer's requirements. - Verification "Are we building the product
right?" - check that products are correct, complete,
consistent with each other and with those of the
preceding phases.
10
11Errors may occur in any of the phases
- Specifications don't accurately reflect given
information or the user's needs/requests - Logic errors in algorithms
- Incorrect coding or integration
- Failure to handle boundary data or test values
11
12Different kinds of tests required
- Unit tests
- Each individual program unit works?
- Program components tested in isolation
- Integration tests
- Units combined correctly?
- Component interface and information flow tested
- System tests
- Overall system works correctly?
12
13The "V" Life Cycle Model
13
Dorothy (Dot) Hoekema Graham -- Grove
Consultants (www.grove.co.uk)
14Unit testing
- probably the most rigorous and time-intensive
- surely the most fundamental and important
- kinds of errors tested
- syntax
- linking
- run-time
- logic
14
15Black box or functional test
- Outputs produced for various inputs are checked
for correctness without considering the structure
of the program component itself. - Program unit is viewed as a black box that
accepts inputs and produces outputs, but the
inner workings of the box are not visible.
15
16White box or structural test
- Performance is tested by examining codes
internal structure. - Test data is carefully selected so that specific
parts of the program unit are exercised.
16
17Example Binary search (pp. 19-23)
/ INCORRECT IMPLEMENTATION OF FUNCTION
BinarySearch() performs a binary search of array
a for item. Receive item, array a of n
items, sorted in ascending order Pass back
found (true if search successful) and mid
( the position of item in a) --------------------
-------------------------------/ void
BinarySearch(NumberArray a, int n, ElementType
item, bool found, int mid)
int first 0, // first and last
positions in sublist last n - 1 //
currently being searched ) found false
while (first lt last !found) mid
(first last ) / 2 if (item lt amid)
last mid else if (item gt amid)
first mid else found true
17
18Black box test Use n 7 and sample array a of
integers
a045 a164 a268 a377 a484
a590 a696 Test with item 77 returns
found true, mid 3 Test with item 90
returns found true, mid 5 Test with item
64 returns found true, mid 1 Test with
item 76 returns found false Hey, it seems
to work ok! Are we done yet?
18
19Boundary Testing
Must consider special cases Boundary values --
at bounds of data structures (not tested
above) item 45 found true and mid 0
OK item 96 doesnt terminate must
break program. ERROR!! Non-member
values Fails infinite loop
19
20Techniques to locate error
Debugger (GNU gdb -- Lab 1C) Debug statements
(p. 21) cerr ltlt "DEBUG At top of while loop
in BinarySearch()\n" ltlt "first " ltlt first ltlt
", last " ltlt last ltlt ", mid " ltlt mid ltlt
endl Output DEBUG At top of while loop in
BinarySearch() first 0, last 6, mid
3 DEBUG At top of while loop in
BinarySearch() first 3, last 6, mid
4 DEBUG At top of while loop in
BinarySearch() first 4, last 6, mid
5 DEBUG At top of while loop in
BinarySearch() first 5, last 6, mid
5 DEBUG At top of while loop in
BinarySearch() first 5, last 6, mid
5 DEBUG At top of while loop in
BinarySearch() first 5, last 6, mid 5
. . .
Trace Tables
20
21White-box test
Use knowledge of control flow of program to
devise test data. Exercise the different paths
of execution to find errors. e.g., Use item lt 45
to test a path in which the first condition item
lt amid is always true so first alternative
last mid is always selected. OK! Use item gt
96 to test a path in which the second condition
item gt amid is always true so second
alternative first mid is always
selected. ERROR! Infinite loop
21
22Maintenance
- Large of computer center budgets
- Large of programmer's time
- Largest of software development cost
- Why?
- Includes modifications and enhancements
- Poor structure, poor documentation, poor style
- less likely to catch bugs before release
- make fixing of bugs difficult and time-consuming
- impede implementation of enhancements
22
23Algorithm (Unstructured Version)
/ Algorithm to read and count several triples of
distinct numbers and print the largest number in
each triple. / 1. Initialize count to 0 2. Read
a triple x, y, z. 3. If x is the end-of-data
flag then go to step 14. 4. Increment count by
1. 5. If x gt y then go to step 9. 6. If y gt z
then go to step 12. 7. Display z. 8. Go to step
2. 9. If x lt z then go to step 7. 10. Display
x. 11. Go to step 2. 12. Display y. 13. Go to
step 2. 14. Display count. Note the spaghetti
logic!
23