Introduction to Software Engineering

ICS 121, Spring 2000

Final Exam Study Guide

General Format and Scope

Format.
The exam will consist primarily of short answer questions along with a few true/false or multiple choice questions.


Scope. The exam will focus on the lecture notes and in-class discussion. This is backed-up by your readings in Schach and Brooks as well as your preparation and learning experiences from all assignments and the basic material on UML in Fowler.


NOTE: this review sheet is not a substitute for looking at the notes or reading the book!

Specific Materials Covered
The material covered before the midterm exam,which is summarized in the midterm study guide, is "fair game" for he final, although the emphasis will be on the material covered after the midterm. Be aware, however, that this more recent material depends on the earlier material, and synergizing the relationships between topics is an important aspect of understanding the discipline of software engineering.

1. Lecture Notes: topics 8 through 14.

2. Assignments four, five, and six.

3. Schach text (sections as indicated in the schedule): chapters 2, 3, 5, 6, 10, 11, 12, 13, 14

4. Brooks, The Mythical Man-Month: complete

5. Fowler, UML Distilled: chapters 1, 3, 4, 6, 8


Topic Review

Design

Goal is to develop a coherent representation of software that will satisfy requirements and provide a blueprint for implementation

Design should be uniform, complete, rigorous, confirmable, desensitized to change, flexible, independently developable

Design starts when how is specified and continues until coding assignments can be made

Design must include a review plan for yielding confidence in design

Design must include a test plan for determining whether implementation is consistent with design and providing further assurance in design

Design process moves from informal design to formal design

Design process develops several model of the system at different levels of abstraction

architectural design -> abstract specification > interface design
-> component design -> data structure design -> algorithm design


Design Guidelines

Structure based on hierarchy and abstraction

Information hiding and abstraction are key

Modularization, encapsulation and abstract data types are a technique to accomplish these concepts


Modular decomposition is the result of architectural design

uses relation and hierarchy
is-composed-of hierarchy

Cohesion is the strength of the relationships between elements within a design unit, while coupling is the dependence between units in a design (want high cohesion and low coupling)

What is a module?


Design Methods

Most methods follow same basic steps

Function-oriented design considers system as interacting functions

structured design uses data flow diagrams and structure charts

Object-oriented design considers system as objects with state and methods to inspect and modify objects

an object is an entity with state and constructor and inspection operations; no other access is allowed


Architectural Design

Architectural design is the decmposition of large systems into sub-systems that provide related services; the architecture provides the framework for sub-system control and communication

system structuring -> control modeling -> modular decomposition

System structuring: three standard structures

repository model, client-server model, abstract machine model

Control modeling: two general models

centralized control (call-return and manager), event-based control (broadcast and interrupt-driven)

Modular decomposition: two basic approaches

data-flow (function-oriented), object-oriented

An integration test plan should be devloped as part of achitectural design for exercising module and sub-system interactions


Object-Oriented Design

Object-Oriented Analysis and Design

analysis models the "real-world" requirements
design applies object-oriented concepts to develop and communicate the architecture

basic software engineering principles are well adhered to: separation of concerns, modularity, abstraction, change anticipation, generality, incrementality

Class defines a set of objects along with common operations and attributes

Object-oriented concepts: instantiation, aggregation (consists of), generalization and inheritence, polymorphism


Object Modeling Technique

OMT phases: object-oriented analysis, system design, object design, implementation

OMT Models: object model, dynamic model, functional model

Object Model: identify objects, associations and links, class attributes and operations, inheritence relationships (as well as a d ata dictionary of sorts)

object model is the static structure of objects and relationships

Dynamic Model: identify scenarios and events between objects, event trace diagrams, state diagrams

dynamic model provides behavior over time and sequencing

Functional Model: identify inputs & outputs, data flow diagrams, function descriptions, object constraints

functional model shows the transformation of inputs to outputs

What are the model relationships?


Formal Methods and Specifications

Formal specification can be used from requirements specification through preliminary and detailed design

Formal specification languages have precise syntax and semantics

Benefits include verifiability, comprehensibility, automatability, analyzability, testability

Hesitation due to lack of experience, high learning curve, lack of automated support

Formal specification languages define syntax, semantics, exceptions

Formal specifications are either behavioral or structural

Approaches to behavioral specification include algebraic, abstract model, state transition, axiomatic specifications

Algebraic Specifications

Objects specified as sorts (types) in terms of relationships between associated operations

Sorts can be hierarchically composed

Specification includes signature (syntax of the sort and the operations) and axioms (semantic relationships between the operations)

State is concealed in objects, operations include access and constructor (destructor) operations

Axioms are usually needed for each access operation over each constructor operation

Abstract ModelSpecifications

System modelled in terms of well-defined mathematical entities, where objects and operations specified in terms of effect on the model

Objects and operations can be hierarchically composed

Specification includes signature (syntax of the entities in terms of model), and predicates (describing properties in terms of model operations)

State is made explicit


Verification and Validation

Critical need to produce high quality software, where quality is a many-attributed property

Verification vs. validation - what is the difference?

Proof of correctness has many deficiencies (some of which testing can address)

Testing's primary goal is failure detection via execution on selected test data and comparison with test oracle (but also provides quality assurance if done properly)

Testing is typically capable of assessing many requirements-based qualites simultaneously

Some qualitites require other sorts of analysis

Verification, validation and testing must permeate the lifecycle and require planning and documentation


Testing

Testing selects subsets of test cases likely to reveal failures by an activity akin to "equivalence classing"

Testing has four fundamental questions: what should we test? are the test results correct? when can we stop testing? what approach and techniques shall we use?

these correspond to test criteria, test oracles, test adequacy, and test process

Functional testing is black-box

input/output/error condition coverage
boundary/special value coverage
cause-effect graphing

Structural testing is white box

control flow coverage
data flow coverage
error-based test data selection
fault-based test data selection


Software Process

Quality products require formalized process

Process is a means of deriving product, where a process description represents many processes and each process instance derives a product instance

Software Process is a means of developing and evolving software products

Software development process is software, too, and should be developed by a "process" development process (as opposed to a product development process)

Software process consists of requirements, design, code, test cases, analyses

Process Models have changed with the development of the discipline of software engineering and no process is suitable for all development efforts

build and fix approach (is this a process model?)
stagewise development model
waterfall model
test development model
exploratory programming model
prototyping model
evolutionary/incremental model
transformational model
Spiral model (a meta-model that can describe several of the above)

What is the ICS 121 Software Development Process?

The CMM (capability maturity model) is a strategy for improving the software process (irrespective of the process model) based on improving technology and management

ISO 9000 is an attempt to improve software quality by stressing documenting the process, committing to quality, training developers, and measuring the process and product


Mythical Man-Month

Large programming projects suffer management problems, whereas smaller ones do not, due to the division of labor involved

Must preserve conceptual integrity of the product through exceptional design (lead and team)

consistency and accuracy of model more easily achieved with a few good designers

ratio of productivity gain to cost decreases with increased functionality

Primary "myths"/problems:

poor estimation by assuming nothing will go wrong and large project is just many small ones

progress is proportional to number of personnel (fallacy due to increased communication)

testing causes sschedule slips - must plan testing as 50% of schedule

gutless estimation due to client urgency

regenerative schedule disasters by adding personnel due to unplanned but necessary retraining

There's no silver bullet, but great designers help

accidents, which are not inherent in software production, can be overcome by better technology

essence, which are difficulties inherent in the nature of software, will not be overcome