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.