STATE UNIVERSITY OF NEW YORK AT OSWEGO
                 Computer Science Department


    I.  COURSE NUMBER AND CREDIT:

        CSC 380 - 3 S.H.

   II.  COURSE TITLE:

        Software Engineering

  III.  COURSE DESCRIPTION:

        Techniques for developing large software systems are
        presented.  Formal and semi-formal languages for
        specification and design of software, verification,
        and configuration management techniques are
        discussed.

   IV.  PREREQUISITES:

        CSC 241 - Abstract Data Types and Programming
        Methodology

    V.  JUSTIFICATION:

        This course is intended to provide students with and
        engineering perspective to software design.  Even
        though programming concepts such as procedural and
        functional abstraction, data abstraction, and perhaps
        object oriented programming have already been
        introduced in the core, their application to large-
        scale programming projects is done here.

        Various techniques for software specification and
        design, verification, and configuration management
        are introduced.  Such exposure is of utmost
        importance to students planning to pursue a career in
        software engineering.

        It is here that students for the first time engage in
        a group project.  The realization of the importance
        of the concepts learned in the core and techniques
        stated above can only be gained in such a setting.

        Students will be expected to read several classical
        and currently published papers on different topics in
        software engineering.  This will provide them with an
        opportunity to examine the state of the art problems
        in a highly volatile field.  Hopefully, it will
        inspire some to pursue a graduate degree in the
        discipline.

   VI.  COURSE OBJECTIVES:

        As a result of this course, students will be able to:
        1.  Understand the problems involved in large
            software projects.
        2.  Examine some of the solutions to these problems.
        3.  Learn new techniques in software specification,
            program testing, test case generation, program
            proofs.
        4.  Read and analyze technical publications in the
            field.
        5.  Work in a group setting.

  VII.  COURSE OUTLINE:

        A.  Software Engineering Paradigms
            1.  Definition
            2.  Classic Life Cycles
            3.  Prototyping
            4.  Fourth Generation Techniques
        B.  Requirements Analysis Methodologies
            1.  Data Flow-oriented
            2.  Data Structure-oriented
            3.  Jackson System Development
            4.  Software Prototyping
            5.  Automated Tools
        C.  Software Specification Techniques
            1.  Interface Specification
            2.  Operational Specification
            3.  The Specification of Abstract Data Types
        D.  Software Design
            1.  Fundamentals
                Refinement, Modularity, Abstraction,
                Information Hiding, Functional Independence,
                Cohesion, Coupling, Design Tools
            2.  Data Flow-oriented Design
            3.  Data Structure-oriented Design
            4.  Object-oriented Design
            5.  Real-time Design
        E.  Software Testing
            1.  Fundamentals
                Testing Objectives, Information Flow, Test
                Case Design
            2.  White Box Testing
                Basis Path Testing, Flow Graph Notation,
                Cyclomatic Complexity, Driving Test Cases,
                Graphic Matrices
            3.  Black Box Testing
                Equivalence Partitioning, Boundary Value
                Analysis, Cause-Effect Graphing Techniques,
                Data Validation Techniques
            4.  Proof of Correctness
            5.  Automated Testing Tools
        F.  Software Testing Strategies
            1.  Approach to Software Testing
            2.  Unit Testing
            3.  Integration Testing
            4.  The Art of Debugging
        G.  Quality Assurance
        H.  Maintenance and Configuration Management

 VIII.  METHODS OF INSTRUCTION:

        A.  Lectures
        B.  Discussion

   IX.  COURSE REQUIREMENTS:

        1.  Writing review of the publications.
        2.  Individual and group programming projects.
        3.  Participation.

    X.  MEANS OF EVALUATION:

        A.  Papers
        B.  Individual and group programming projects
        C.  Examinations
        D.  Participation in class discussions

   XI.  RESOURCES:

        The ICC facilities should be adequate for this
        course.  Our goal will be to install some of the
        software tools that would enhance it.

  XII.  BIBLIOGRAPHY:

        King, D. Creating Effective Software - Computer
           Program Design Using the Jackson Methodology.
           Prentice-Hall: Englewood Cliffs, NJ, 1988.

        Lamb, D. A. Software Engineering - Planning for
           Change. Prentice-Hall, Englewood Cliffs, NJ,
           1988.

        Pfleeger, S. L. Software Engineering - The Production
           of Quality Software. Macmillan, New York, 1987.

        Pressman, R. Making Software Engineering Happen - A
           Guide for Instituting the Technology. Prentice-
           Hall, Englewood Cliffs, NJ, 1988.

        Pressman, R. Software Engineering a Practitioner's
           Approach. McGraw-Hill, New York, 1987.

        Sommerville, I. Software Engineering. Addison-
           Wesley, Reading, MA, 1985.

        Steward, D. V. Software Engineering with Systems
           Analysis and Design. Wadsworth, Belmont, CA, 1987.
 Last Updated: 7/9/07