CS 477 Lecture Notes
Week One, Tuesday: Introduction
See the Web pages: http://www-scf.usc.edu/~csci477/
Handout: "What Software Reality is Really About," by james Bach,
Computer, December 1999. Read the handout and we will discuss it
in class next lecture.
Lecturer: Rick Wagner
BSME, UH, 1979
MSCS, USC, 1994
PhD (robotics and AI), USC, 1997
9 years in USAF (communications electronics)
20 years with TRW, Inc., Space and Electronics Group
2 years teaching at USC
Teaching Assistant: Ebru Dincel
PhD student in the Center for Software Engineering,
advisor: Prof. Barry Boehm. Ebru was TA for this course last year too.
All students should send an email message to the TA giving:
Last Name
First Name
Student ID number
A secret 4-digit random number
The TA will use this information to prepare the student scores file.
Student scores will be periodically Web published by secret student number
so any errors in record keeping can be identified and corrected. Any changes
must be reported within two weeks of publication, so check the announcements
page regularly.
The TA will also keep unclaimed homeworks, reports, and exams, and will have
old handouts available for students who miss a lecture.
Course Objectives
Impart knowledge of software processes appropriate to large software
projects.
Provide a valuable learning experience on a software project team.
Produce interesting (non-trivial) software products for term projects.
Ensure a fair and accurate measurement of student performance.
Policies
See the
policies
page.
Overview of Software Engineering
What is software engineering?
Software engineering is not
algorithms, languages, or mathematics. Software engineering is about managing
large software projects (or the software segments of large systems projects).
Software engineering is cross-disciplinary, drawing on techniques from management,
systems engineering, psychology, economics, etc.
That's why this course is unlike any computer science course you
have had so far. "Software engineering is a discipline whoose aim is the production
of fault-free software, delivered on time and within budget, that satisfies user's
needs" (SEJ, p. 6).
Programming paradigms: structured programming, object oriented programming. The
process model used for the project depends on the culture of the company.
Large software projects: how do we measure size? What is large?
Software process models. Many types: waterfall (traditional), incremental model,
rapid prototyping, spiral model.
History
To put software development on a formal methodical footing like more traditional
engineering disciplines, the term "software engineering" was coined in 1967 by
a NATO study group. The name stuck, but the
software crisis
is still with us.
Examples: CA DMV system, budgeted 25M, spent 40M, project canceled. CA
child support system, spent 100M, canceled, State faces penalties of 4G.
Denver airport: opened 1 year late, cost billions.
CA electrical power software, slipped deregulation 2 months.
Economics
Maintenance costs dominate software long term costs. Take the long term view
and consider maintenance costs in development decisions.
Maintenance
Good products are repaired and enhanced. Bad products are thrown away.
Corrective, perfective, and adaptive maintenance.
Specification and Design
Faults creep into software at all stages. Requirements faults will appear in all
following phases. Specification and design faults comprise a large proportion of
all faults (67%, Boehm).
Team Programming
Communication complexity goes up with the square of the team size! Adding manpower to
a late software project makes it later! [Brooks] Software engineering includes techniques
to ensure that teams are properly organized and managed.
OOP and Java
OOP considers both data and actions to be of equal importance. Information hiding
facilitates stepwise refinement. Encapsulation promotes responsibility-driven
design.
Pros and Cons of Java
Java is a simpler and higher level language than C++ and should be
easier to learn. Java has no struct abstract data type and
no template. Here's a brief summary of the pros and cons:
| Pro |
Con |
| Cross platform |
Cross platform incompatibilities |
| Garbage collection |
GC is slow and unreliable |
| No pointers |
No pointers |
| OOP |
AWT violates encapsulation |
| Applets are public |
Applets are severely limited |
| Supports cross platform GUI |
GUI is limited |
| Strongly typed language |
|
| Array bounds checking |
|
Term Project
The table below shows some of the projects assigned in CS 477
and CS 577 in the past:
| Semester |
Course |
Project |
| Fall 1988 |
CS 577 |
Electronic Mail Program |
| Spring 1991 |
CS 477 |
Electronic Mail System |
| Fall 1991 |
CS 577 |
Fault Tracking System |
| Spring 1992 |
CS 477 |
Personal Calendar |
| Spring 1994 |
CS 477 |
Interactive Map |
| Spring 1996 |
CS 477 |
School Schedule Planner |
| Spring 1998 |
CS 477 |
Collaborations with computer art students |
| Spring 1999 |
CS 477 |
Simulated customer: equipment tracking system |
This page established January 11, 1998; last updated January 10, 2000.