CMPU-235: Software Development Methodology

Fall, 1998

Instructor

Chris Welty

Contents

Messages:

Schedule:

Week Topic Chapters Assignment
8/31 Overview, Review Homework #1
9/7 Modeling Tools Containers C++ 3.7 Homework #2
9/14 Namespaces, Templates, Iterators C++ 3.8, 8.1, 8.2, 13
9/21 C++ Standard Library C++ 16-18 Homework #3
9/28 C++ 19-22 Homework #4
10/5 Object-Oriented Modeling Introduction UML 1-3 Homework #5
10/12 Objects and Classes UML 4,5 Project #1
10/19 Fall Break
10/26 Objects and Classes UML 13
11/2 Committments and Static Behavior UML 5,6,14 Project #2
11/9 Dynamic Behavior UML 7
11/16 Relationships UML 15,16 Project #3
11/23 No Class (thursday classes held on 11/24)
Thanksgiving Break
11/30 Relationships UML 17 Project #4
12/7 Last Class UML 11

Books:

Groups:

For the second half of the semester, all the projects will be in groups. You will be working through the steps, from start to finish, of developing a complete software system. The groups were determined by me, using a chaotic process that approaches randomness. The names of each group are followed by the Unix group name in parenthesis.

Lucid (lucid):
Alex, Andrew, Jessica
Silver Bullets (bullets):
Daniel, David, Praju
Delta Group (delta):
Derek, Gabriel, Jasper
ORC - Omega Red Corp. (orc):
Nikhil, Session
SDM - Slingshot Dragster Masterworks (sdm):
Michael, Robina, Steve

Background:

This course will concentrate on modeling application domains for software development using object-oriented (OO) technology. One of the biggest problems with OO languages today is that there is not a widespread methodology in use, leaving programmers and designers on their own to interpret how these languages should be used. Without sufficient background in the conceptual reasons that various OO facilities exist, programmers typically use them incorrectly as programming tricks or hacks. We will address this problem directly by studying the techniques and principles of Object Oriented Design, and its most fundamental purpose: to model an application domain.

While the course will involve much programming in C++, the purpose of this course will not be to teach C++, but the more general facilities and uses of object oriented languages for design, such as: encapsulation, abstraction, inheritance, information sharing/hiding, and the object centered approach to software development. In addition, we will discuss programming in the large (without actually doing it), in hopes of at least seeing the problems this implies.

Another important experience this course will provide is working in groups. The main assignment will be a group assignment, requiring work in groups of no less than three.

One aspect of this course we have striven to emphasize is the importance of modeling a domain such that an understanding of it can be facilitated. There is a saying which can effectively sum up the importance of domain knowledge in software development and maintenance: Writing code isn't the problem, understanding the problem is the problem. The Microelectronics and Computer Technology Corporation (MCC) has been conducting field studies of large scale software projects in industry. Bill Curtis and Neil Iscoe conducted several of these studies, and they recognized the thin spread of application domain knowledge as the most critical problem common to all the projects they studied:

The deep application-specific knowledge required to successfully build most large, complex systems was thinly spread through many software development staffs. Although individual staff members understood different components of the application, the deep integration of various knowledge domains required to integrate the design of a large, complex system was a scarcer attribute. This problem was especially characteristic of projects where the software was embedded in a larger system (e.g. avionics or telephony), or where the software implemented a specific application function (e.g. transaction processing). These systems contrast with applications currently taught in computer science departments, like single processor operating systems and compilers. Although most software developers were knowledgeable in the computational structures and techniques of computer science, many began their careers as novices in the application domains that constituted their company's business. As a result, software development required a substantial time commitment to learning the application domain.

From: Curtis, B., Iscoe, N. and Krasner, H. A Field Study of the Software Design Process for Large Systems. Communications of the ACM. 31(11). Pp. 1268-1287. Nov, 1988.

Grading:

30%: Homeworks
40%: Projects
30%: Final Group Project