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