CEG 460/660: Software Engineering

This is the home page for the above course.

Winter Qtr 1997, Wright State U

Instructor: Dr Prabhaker Mateti, Associate Professor
Office Hrs: 16:30-17:30 T Th at 449 Russ, or by appointment 775-5114
Class Hrs: 19:00-20:15 T Th at 146 Russ



Important Dates

Feb 6             Mid Term

Jan 21           Requirements and UM
Feb 4             Specifications
Feb 18          Design
Feb 25           Implementation
Mar 4            Test Results
TBS              Demos
 

Jan 30            Home Work 1     8.2, 8.5, 8.10, and RA of Print Errors
Feb 11           Home Work 2     Design of 1. Condense Nums, 2. Print Errors
Feb 25           Home Work 3      Runnable Src Code for above in C++
Mar 13          Home Work 4      Runnable Src Code for above in Java

Feb 18            Reading Assignment 1 for CEG 660 only: [Hall 90, p265], [Meyer 85, p266]
Mar 15           Reading Assignment 2 for CEG 660 only


This course is concerned with the techniques of designing and constructing large programs. Some of the required basic concepts necessarily have to be developed using samll programs as examples. To this extent, we also study programming-in-the-small. The overall objectives are to present an overview of issues in the development of software, to discuss terminolgy, to illustrate via example case studies, and to give sufficiently detailed advice on how to develop quality software.

Source Material

The text book is ``Software engineering with Java,'' by Schach, Stephen R., Chicago : Irwin, c1997.

You may have heard of Java as a programming language for WWW applets. But, it is also an excellent language for general purpose programming, including software tools. Provided you are fluent in C/C++, you will, through this course, learn enough Java to be considered fluent in it.

Handouts and other useful material, such as old exams, are archived in the directory /public/pmateti/460/ on CaTS systems.

Course Content

The tentative content is as follows. The topics, except software tools and project discussions (equiv to 2 lectures), will be covered roughly in the order they are listed. The numbers in parens at the end of each topic is a rough estimate of the number of (75-minute) lectures I intend to devote. The word ``spread'' means that precise definitions, lengthier discussion are to be found spread over the entire course.

There are no lectures specifically devoted to Java. However, ``Java embodies the principles of software engineering,'' (see page vii), and in discussing design, construction, and the term project, we will be describing Java details also.

Introduction

Scope of software engineering. What is programming: art? craft? science? engineering? Programming in-the-small vs in-the-large; software engineering vs programming methodology.

Terms: precision, rigor, formalism, requirements, specs, design, implementation, testing, debugging, maintenance, versions, configurations, life-cycle issues. Prototyping, executability, declarative vs imperative. (spread)

Chapters 1, 2, and 3.

Requirements Analysis

Analyzing the client-given description of the system to be built: precision, ambiguity, consistency and completeness. Describing the results back to the client. Are we describing the right product? (2)

Chapter 7.

Specification

Functional and other axes of specs. Informal specs written in natural languages, and their problems. 'Declarative' languages for specs. Specs of systems, modules, procedures, and code-segments. Pre- Post conditions (entry/exit assertions), and loop invariants. Independence of implementation bias. (4)

Chapter 8.

Design

Step-wise refinement, virtual machines, and classes. Levels of design as we progress towards the given primitives of construction. Hierarchy, modularity, information hiding in each level of design. Cohesion and coupling. (4)

Chapters 11, 6, and 9.

Testing and Debugging

Black-box testing, coverage of statements, branches and paths. Data flow coverage. Mutation analysis. Symbolic execution. Unit testing, system testing. Test data selection. Monitoring the state of the running program. (2)

Chapter 5.

Construction and Tools

Expressive power and geneology of control structures, D-charts, Böhm-Jacopini thm, goto-free programs.

Systematic translation of detailed designs into a real programming language. Assembly languages, system implementation languages, and high-level languages. Support for modularity, information hiding, separate compilation, compile-time type checking, run-time watch dogs, exception handling, and concurrency.

CASE tools. The computer-aided design and development of software. make, programmable editors EMACS, revision control rcs, configuration mgmt, string and pattern languages awk, cross reference generators, documentation tools WEB. (4)

Chapter 12, and 13.

Exams

There will be two exams each contributing 25% to the final grade. The midterm is scheduled for Feb 6, 1997. The Final is as scheduled by the Registrar during the finals week.

Project

There is a group project contributing 30%. The project for this quarter is a conversion aid to go from C/C++ to Java. Each group will submit the following reports: (1) Requirements Document, and Users Manual, (2) Specs, (3) Design Document, (4) Implementation Description (including source code listings), and (5) Test Results. You will also arrange for a demo lasting 10-15 minutes during the last week of the quarter. The due dates for these will be announced in class.

The implementation language must be one of Ada, Pascal, or C/C++. You are expected to form into groups of 2 each. Choose your partner carefully -- one that you can get along well. Unless one of the partners brings it to my attention, it will be assumed that each member contributed equally.

Each group will submit two hard-copies of the above documents. Every document will be peer reviewed by one of your classmates. Reviews must be completed within one week of receiving the documents. You will be given a list of criteria and guidelines. Peer reviewing contributes 10%.

Individual Assignments

There are four homework assignments that are to be solved by you individually, not as a group. I will grade two out of these four, without pre-announcing which two will be graded. The two graded assignments will contribute 10% each to the final grade.

CEG 660

Graduate students will do, in addition to all the above, two Readings in Software Engineering that I assign. See the Problems sections at the end of chapters.
 


Prabhaker Mateti

Thu Jan 23 16:43:38 EST 1997