The George Washington University
School of Engineering and Applied Science
Department of Computer Science
CSci 51 -- Spring 2001
Occasional Lecture Notes
last change: Thursday, Feb. 8, 2001
Normally, lecture notes are not formally distributed in this course.
On the other hand, viewgraphs that present material not covered in the
course textbook will appear, from time to time, in this file. New notes
will simply be added to the end of the file. Watch the date at the top
to see if anything has been changed.
Objectives, Lecture 2 (1/18/01)
Discuss the purpose of a compiler and the process of compiling, linking,
and executing (running) a program.
Get a bit acquainted with the Spider animation system.
Compile and run some Spider programs.
Objectives, Lecture 3 (1/23/01)
Examine a few more Spider programs - discuss repetition (LOOP) and decision
Discuss human languages vs. programming languages
Observe compiler's response to language errors
The Power of Programs
Programs can be written to solve a multitude of (sometimes very complex)
Yet they are made up of careful combinations of very simple operations
Simple operations are combined in the following ways
sequence - one operation (or group of operations) directly follows another
decision - an operation (or group of operations) is executed, or not executed,
based on the results of a yes/no (true/false) decision
repetition - an operation (or group of operations) is executed repeatedly,
a given number of times, or until a given condition is true
Believe it or not, that's all! All programs are constructed this way!
How are programming languages different from natural (human) languages?
Human languages evolve naturally; programming languages are carefully designed
Computer languages have very fussy rules, but these are easier to learn
because they have fewer exceptions than human languages do
A compiler's function is to examine a program in a higher-level programming
language, then - if the program follows all the rules - translate it to
machine code. Here are the phases:
lexical analysis: classify every symbol according to its "part of speech"
syntactic analysis: check for proper "sentence structure" - do all the
parts of speech occur in the proper order?
semantic analysis: determine the meaning of the program - does every symbol
have a well-defined meaning?
translation into machine code
Syntactic and semantic analysis
Syntactic analysis compares statements in a language to the grammar, or
set of rules, for writing a well-formed statement in that language.
Semantic analysis analyzes well-formed statements of a language to determine
whether they are meaningful.
Monkey ate banana.
Monkey ate the banana.
The monkey ate the banana.
George ate the banana.
The banana ate the monkey.
The banana ate George.
Time flies like an arrow; fruit flies like a banana.
“We'll see,” said the blind man, as he picked up his hammer and saw.
Outside of a dog, a person's best friend is a book. Inside of a dog, it's
too dark to read.
Objectives, Lecture 7 (Tues. Feb. 6, 2001)
What is the purpose of a program test plan?
When is the best time to develop a test plan?
After you write the program?
After you write the algorithm?
As soon as you understand the problem to be solved?
black-box testing ==>
<testing> (Or "black-box testing", "closed-box testing") The application
of test data derived from the specified functional requirements
without regard to the final program structure.
white box testing
<programming> (Or "clear", "glass", "open") Software testing approaches
that examine the program structure and derive test data from the
Structural testing is sometimes referred to as clear-box testing since
white boxes are considered opaque and do not really permit visibility
into the code.
Source: Free Online Dictionary of Computing http://www.foldoc.org
How many test cases should a test plan have?
As few as possible, but no fewer
Problem: date validation
Given a month, a day, and a year between 1000 and 3000, determine whether
the combination would make a valid date.
Let's write a test plan for this!