Summary and Bibliographical Notes

Ivan Marsic • Rutgers University 56 Another place to look is: University of Florida’s Gator Tech Smart House [Helal et al., 2005], online at: http:www.harris.cise.ufl.edugt.htm For the reader who would like to know more about home access control, a comprehensive, 1400- pages two-volume set [Tobias, 2000] discusses all aspects of locks, protective devices, and the methods used to overcome them. For those who like to tinker with electronic gadgets, a great companion is [O’Sullivan T. Igoe, 2004]. There are many excellent andor curious websites related to software engineering, such as: Teaching Software Engineering – Lessons from MIT, by Hal Abelson and Philip Greenspun: http:philip.greenspun.comteachingteaching-software-engineering Software Architecture – by Dewayne E. Perry: http:www.ece.utexas.edu~perryworkswa Software Engineering Academic Genealogy – by Tao Xie: http:www.csc.ncsu.edufacultyxiesefamily.htm D. Coppit, “Implementing large projects in software engineering courses,” Computer Science Education, vol. 16, no. 1, pp. 53-73, March 2006. Publisher: Routledge, part of the Taylor Francis Group J. S. Prichard, L. A. Bizo, and R. J. Stratford, “The educational impact of team-skills training: Preparing students to work in groups,” British Journal of Educational Psychology, vol. 76, no. 1, pp. 119-140, March 2006. downloaded: NIHRandallMATERIALS2 M. Murray and B. Lonne, “An innovative use of the web to build graduate team skills,” Teaching in Higher Education, vol. 11, no. 1, pp. 63-77, January 2006. Publisher: Routledge, part of the Taylor Francis Group 57 Contents

2.1 Software Development Methods

2.1.1 2.1.2 2.1.3 Agile Development 2.1.4

2.2 Requirements Analysis and Use Cases

2.2.1 Types of Requirements 2.2.2 Use Cases

2.2.3 Requirements Elicitation through Use Cases

2.2.4 Modeling System Workflows 2.2.5 Risk Analysis

2.3 Analysis: Building the Domain Model

2.3.1 Identifying Concepts 2.3.2 Concept Associations and Attributes

2.3.3 Contracts: Preconditions and Postconditions

2.4 Design: Assigning Responsibilities

2.4.1 Design Principles for Assigning Responsibilities

2.4.2 Class Diagram 2.4.3 2.4.4 Why Software Engineering Is Difficult 2 2.5 Software Architecture 2.6 Implementation 2.6.1 2.6.2 2.7 Summary and Bibliographical Notes Problems Chapter 2 Object-Oriented Software Engineering The first issue to face with large-scale product development is the logistics of the development and the management issues. Software product development has some peculiarities not present in other engineering disciplines, mainly because software is abstract as well as more complex and more flexible than any other artifact. These peculiarities will be seen to influence the logistics and management of software development. In the following presentation, I will deemphasize development methodology or structured process of development for the reasons explained below. My main goal is to explain the concepts and describe the tools for software development. These concepts and tools are applicable over many different methodologies. Having learned the concepts and tools, the reader can pick their favorite methodology. The presentation is organized to present the material in a progressively increasing depth. Already, Section 1.2 briefly overviewed the stages of the software engineering lifecycle. Now, each stage is detailed in this chapter. System specification is further elaborated in Chapter 3 and software design is elaborated in Chapter 5.

2.1 Software Development Methods

The goal of software methodologists is to understand how expert developers work and convey this to students. Plus, the hope is that new insights will emerge about how to effectively do product development, so even experts might benefit from learning any applying methodology. The truth is, life cycle methods are rarely followed in real life of people’s own will; those who do Ivan Marsic • Rutgers University 58 are usually forced to follow a certain methodology due to the company’s policy in place. Why is it so, if following a method should be a recipe for successful projects? There are several reasons why methodologies are ignored or meet resistance in practice. One reason is that methodology is usually derived from a past experience. But, what worked for me may not work for you. Both developers and projects have different characteristics and it is difficult to generalize across either or both categories. A “one-size-fits-all” approach simply cannot adequately describe complex human activities, such as software development. In addition, method development takes relatively long time to recognize and extract “best practices.” By the time a method is mature, the technologies it is based on may become outdated. The method may simply be inappropriate for the new and emerging technologies for example, Web Services, described in Chapter 8. A development method usually lays out a prescriptive process by mandating a sequence of development tasks. Some methods devise very elaborate processes in which a rigid, documentation-heavy methodology is followed with very detailed specifications. The idea is that the developers should follow each step exactly as predetermined and a successful project will be result. In other words, if the rules are followed, it does not matter who carries them out— regardless of the developer’s knowledge and expertise, a mere method adherence leads to a success. Even if key people leave the project or organization, the project should go on as scheduled because everything is properly documented. However, we experience teaches us that this is not the case. Regardless of how well the system is documented, if key people leave, the project suffers. Recent methods, known as agility, attempt to deemphasize process-driven documentation and detailed specifications. They also take into consideration the number and experience of the people on the development team. The hope with metaphors and analogies is that they will evoke understanding much faster and allow “cheap” broadening it, based on the existing knowledge.

2.1.1 Agile Development

Agility is both a development philosophy and a collection of concepts embedded into development methodologies. An agile approach to development is essentially a results-focused method that iteratively manages changes and risks. It also actively involves customers, making them in effect a part of the development team. Unlike process-driven documentation, it promotes outcome-driven documentation. Agile development evangelists tell us that the development should be iterative, with quick turnover, and light on documentation. They are believers in perfection being the enemy of innovation. This is all well and fine, but it does not tell us anything about where to start and how to proceed. Selecting a line of attack is a major obstacle, particularly for an inexperienced developer. One problem is with this is that when thinking about a development plan, an engineer usually thinks in terms of methodology: what to do first, what next, etc. Naturally, first comes discovery studying the problem domain and finding out how the problem is solved now and proposing how Chapter 2 • Object-Oriented Software Engineering 59 it can be solved better with the to-be-developed technology; then comes development designing and implementing the system; lastly, the system is deployed and evaluated. This sequential thinking naturally leads to the waterfall model and heavy documentation. The customer does not see it that way. The customer would rather see some rudimentary functionality soon, and then refinement and extension. AGILE VS. SLOPPY ♦ I have had students complain that demanding readability, consistency, and completeness in project reports runs against the spirit of agile development. Some software engineering textbooks insist on showing snapshots of hand drawn UML diagrams, as opposed to neat diagrams created electronically, to emphasize the evanescent nature of designs and the need for dynamic and untidy artifacts. This may work for closely knit teams of professionals, working in adjacent offices exclusively on their project. But, I found it not to be conducive for the purpose of grading student reports: it is very difficult to discern sloppiness from agility and assign grades fairly. Communication, after all, is the key ingredient of teamwork, and communication is not improved if readability, consistency, and completeness of project reports are compromised. I take it that agility means: reduce the amount of documentation but not at the expense of the communicative value of project artifacts. Brevity is a virtue, but we also know that redundancy is the most effective way to protect the message from noise effects.

2.2 Requirements Analysis and Use Cases

Requirements analysis starts with the problem definition: customer statement of requirements. The problem could be identified by management personnel, through market research, by ingenious observation, or some other means. Defining the requirements for the planned system includes both fact-finding about how is the problem solved in the current practice as well as envisioning how the planned system might work.

2.2.1 Types of Requirements

System requirements make explicit the characteristics of the system that is to be developed. Requirements are usually divided into functional and non-functional. Functional requirements determine how the system is expected to behave and what kind of effects it should produce in the application domain. Non-functional requirements describe system properties that do not relate to the system function. An example of a non-functional requirement is: Maintain a persistent data backup, for the cases of power outages. FURPS+ Non-functional also known as “emergent” system properties: