CMPU-235: Software Development Methodology

Spring, 1998

Instructor

Chris Welty

Contents

Messages:

Schedule:

Week Topic Chapters Assignment
1/19 Overview, Review 1-3
1/26 Modeling Tools: Containers 8,9 Homework #1
2/2 Modeling Tools: Trees 13 Homework #2
2/9 Modeling Tools: Templates supplements Homework #3
2/16 Structured and Object-Oriented Design 10 Homework #4
2/23 Object-Oriented Design: Object Models 10 Homework #5
3/2 Object-Oriented Design: Object Models OMT Handout
3/9 Spring Break
3/16 Spring Break
3/23 Object-Oriented Design: Dynamic Model: Data and Control flow Project #1
3/30 Object-Oriented Design: Dynamic Model: State Transition Diagrams Handout
4/6 Implementing the Object Model 11 Project #2
4/13 Implementing the Dynamic Model Project #3
4/20 Implementing the Dynamic Model
4/27 Putting it all together
5/4 Final Class
5/11 Finals Week

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 using one of your jury selection programs.

Spacely Sprockets
Denis Imathiu, Alysa Carver, Benjamin Fry, Lauren Hammer
XXX (three X chromasomes)
Jessica Jenkins, Savina Kostadinova, Lisa Smith
Team 7
Will Carlough, David Dening, Deborah Gruenwald, Katelyn Milinowicz
Creative Connections
Ronald Taylor, Chris Seidel, Eli Mou
KAPs (Kick-Ass Programmers)
Laura Schrauf, Elvira Pinkhas, Lawrence Riungu

Books:

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