R
|
|
System Development Definitions and Descriptions
I. System Development Methodologies. A. System: A collection of objects that interact to accomplish a common goal. An object is any real or abstract thing about which we store information (data) and the means to manipulate that data. A system may incorporate several different processes. A process is a time-ordered sequence of events (or sub-processes of events) that describe the lives of objects. An event is a object activity that may change the state of the system. A system's state is that collection of information (data) necessary to completely describe the system at any particular time. B. Development: A process geared toward the design and implementation of systems, which includes sub-processes (phases). A development phase is a state of product development that focuses on making progress on a particular development aspect or facet. The eight phases of most interest to software developers are(1):
1. Requirements Gathering: Development phase that defines the purpose of the development, the conditions or capabilities needed to solve a problem or achieve an objective. The main activities are to group requirements into use cases and prioritize by importance, window of opportunity and technical complexity. There are two major kinds of requirements:
1. User requirements: Drives analysis. Expressed by use cases. 2. Nonfunctional requirements: Drives design. Typical examples are: a. Development platform: hardware, software, etc. -- drives implementation. b. Delivery platform: hardware, software, etc. -- drives interface specifications and implementation activities. c. Performance: clarify space, time, etc. customer resource constraints d. Reliability: drives "delivery vehicles" selection. e. Availability: drives implementation activities. f. Interoperability: g. Persistence: h. Maintainability: i. Cost: Phase may include some or all of the following work products: a. Problem statement (E): Describes the business requirements of the development (short description of the business problem that the development should solve). b. Use case model (E): Captures functional requirements and consists of a set of actors (external agents -- human or other systems), use cases (representing usages of the system by the actors or usages of the actors by the system -- externally visible system behavior that defines the functional system requirements), and links between the actors and the use cases. Not concerned with permutations of assumptions (see analysis scenarios). Drives the analysis phase. Analysis scenarios are derived from this. c. Nonfunctional requirements (E): Collection of system requirements that are not directly related to what the system should do (response time, security, availability, data consistency, data integrity, ...). Must be known before design. d. Prioritized requirements (O): Defines the relative importance (from customers and/or users view) of the system requirements. e. Business case (E): Justification for undertaking the development, from a business perspective (e.g. revenue, productivity, complete org. mission statement, ...). f. Acceptance plan (O): Description of sequence of steps by which the customer will verify that the developed system does indeed satisfy its requirements. 2. Project Management: The main activities are to allocate requirements to releases and/or increments and plan activities that manage resource availability and other project constraints. May include some or all of the following work products: a. Intended development process (O): Documents the broad outlines of the development process that is to be used for the project. Might include things such as (ref. pp131,132 Developing Object-Oriented Software: An Experience-Based Approach): i. Follow the techniques outlined in a particular reference. ii. Use a combination of a waterfall and an iterative and incremental process. iii. Use conventional estimation techniques to provide initial sizing estimates. iv. State specific release cycle schedules. v. State specific increment phase schedules. vi. State any presence of depth-first development approaches. b. Project workbook outline (E): Needed to find agreement among the development team members about the set of work products to be created for the project. It is also needed to establish a commitment from the development team to record each of the identified work products in a project workbook. c. Resource plan (E): Identify all the resources that will be required during the life of a project for its successful completion. d. Schedule (E): Produced to understand the work completed and the work needed to be completed for the project. Used to plan and measure project progress. e. Release plan (O for single release projects, E for multiple release): Sets up the scope of the project and divides the work into manageable units. f. Quality assurance plan (O at this stage, included with each work product): Involves: i. Establishing quality goals, defining success criteria and expected results.. ii. Validation and tracking. iii. Removing defects. iv. Addressing global quality aspects. g. Risk management plan (O, E for innovative projects): Identifies risk associated with a project and suggests plans to manage them. Risks may be eliminated, reduced, possibly controlled, and if not controllable a contingency plan developed. h. Reuse plan (O except when spelled out in the requirements plan): Development of reusable parts has to be justified, planned, and tracked separately from the rest of the project. There are two major items effected by reuse: (1) the business case and (2) the project plan. i. Test plan (E): Ensures that testing is complete, feasible, and successful, and that adequate resources for testing are identified and planned for. Ensures that the testing strategy is agreed to in advance. j. Metrics (O): Measurements of essential elements of the development project that enable successful planning and tracking of projects. Metrics fall into the following categories: i. Size ii. Productivity iii. Quality iv. Reuse k. Project dependencies (O): Items that the project requires for successful completion. l. Issues (E): Identify areas of disagreement or uncertainty that require clarification. All resolved issues should be recorded. 3. Analysis: Development phase that explores the problem domain (as defined in the requirements specification) to gain a better understanding of the problem. The main activities are to develop solutions to scenarios (use cases => analysis scenarios drive the analysis phase) in terms of active objects that group related tasks and communicate with other objects in order to complete them (identification and division of responsibilities among objects). May include some or all of the following work products: a. Analysis guidelines (O but I): Set of guidelines intended to document the way in which analysis is to be performed. May be divided into work product guidelines and process guidelines. b. Subject areas (O in small/medium, E in large): Identification of distinct domains of interest, recognizable parts of the problem domain that can be analyzed as separate units. May or may not become subsystems at design time. Tend to be clusters of analysis classes that are closely related by inheritance (is-a), aggregation (has-a) or other (uses) associations. c. Analysis object model (AE): Fundamental way to document static aspects of objects in problem domain. Basic idea is to decompose a system down into classes of objects that cooperate by passing messages to solve the problem. May use CRC cards to focus on why classes must interact and OIDs to focus on how objects interact. d. Analysis scenarios (AE): An elaboration of a use case (use case + initial conditions [assumptions] + outcomes). A reflection of the system requirements. Drives the analysis phase. Used to develop object interaction diagrams. e. Analysis object interaction diagrams (E): Graphical representation of an analysis scenario, a high level view of how objects or object instances, defined in the analysis object model, interact in order to carry out the analysis scenarios (the system requirements). The focus is on protocol (how objects interact), including event flows or message passing between objects. OMT = event trace diag. UML = sequence diag. f: Class-Responsibility-Collaboration cards (O): A technique for responsibility analysis. For each class create a CRC card that includes the class name, lists class responsibilities, and lists the collaborators needed to fulfill each responsibility. May use the card back to describe the class definitions and other specifications (transcribed later to the model dictionary). During the CRC exercise, individuals may assume the identity of objects and be called upon to interact with other objects to fulfill a particular responsibility. The focus is on why a class has to interact with other classes. CRC analysis results in: i. Better defined object services ii. Refined attributes iii. Verified and refined classes and their relationships iv. Discovery of new classes Difficult to use for large problem domains. Still need to distinguish between the responsibilities of the class and the responsibilities of a class instance. g. Analysis state models (O, E in real-time domains): Describes the life cycle of a class or class instance, by giving an overview of how an object reacts to external events. h. Analysis class descriptions (O): Summaries of all information known about a class at the analysis level (similar to CRC cards). 4. User Interface Model: Describes how users will invoke the functions specified as part of the analysis model. The analysis model assumes external users can communicate directly with the problem domain objects to invoke their services and concentrates on the object-oriented semantics of the services themselves. The user interface model assumes that the detailed semantics of the services are specified (and managed) elsewhere, and it focuses on simplifying the communication required to invoke them. The main activities are to document how users will interact with the application. May include some or all of the following work products: a. User interface guidelines (O but I if critical to acceptance): Consists of a set of guidelines to assist developers in constructing work products related to user interfaces. Might refer to required standards. May require or suggest a particular GUI-builder. b. Screen flows (O but I): Needed to design user interfaces that match the intended user's conceptual model of the domain and to ensure efficient user interaction with the software. Interacts with the use cases by detailing how the information flows from the user to the system, and visa versa, for each functional transaction. c. Screen layouts (O but I): Depict the actual appearance of screens (windows, dialogs, prompts, etc.) that the users will see during the operation of the system. Usually does not include exception conditions. Show the actual text, labels, and icons intended for that screen as well as detailed spatial arrangement of text, icons, and controls. d. User interface prototype (O but I): A small application program which models the look, feel, and sequencing of the intended application's user interface. The point is to invest in validating the application's visual behavior while avoiding as much as possible the other facets of the application. 5. Design: Development phase that maps an analysis into a selected architecture to create a (software) solution to the problem. Mapping can be difficult if the analysis and design phases don't use the same underlying methodology (a "semantic gap" is created). The main activities involve the planning of a solution to the problem examined during analysis in terms of interacting objects, within the constraints specified by the nonfunctional requirements (nonfunctional requirements drive the design phase). Responsibilities take a more detailed form than in analysis, indicating method names, parameter types, data flow, etc. for all participating objects. Can be subdivided into System Design (the design of a high-level architecture for a proposed solution) and Application (Object) Design. System Design starts with the System Architecture (defines the major system building blocks and subsystems, and their high-level connectivity -- reflecting system (subsystem) functions as opposed to hardware or software products) and includes the following steps (see ref. 2): i. Determine the application, support, and services subsystems and their relationships (the requirements for defining subsystems are that they should have clearly defined functions, be fairly independent, and have well defined interfaces). ii. Allocate the subsystems to different resources (e.g. network nodes / processors -- influenced by nonfunctional requirements). iii. Determine how data is managed (influences subsystem design and placement). iv. Define priorities and trade-offs between desirable characteristics. SYSTEM DESIGN Design Detail Level System Architecture Application Architecture conceptual design from use case model, object model, dynamic model from use case model, object model, dynamic model logical design subsystem decomposition subsystem decomposition physical design system platforms / infrastructure system platforms / infrastructure Application Design divides the application into subsystems (a tightly coupled collection of classes) and defines the Application Architecture (see ref. 2). The Application Architecture can be partitioned (vertically) by functionality (i.e. roles and responsibilities) and layered (horizontally) by services provided (e.g.. model/view/data). Design may include some or all of the following work products: a. Design guidelines (O): A set of rules intended to define the design deliverables and to guide the design process. May be divided into work product guidelines and process guidelines. b. System architecture (E): The set of global, project wide design decisions (can be broad or narrow). May include the following areas of interest: i. structure (the way in which the software is to be layered or partitioned) ii. communication patterns between structure components iii. communications (e.g. interprocess) iv. component distribution v. persistence vi. security vii. error handling viii. recovery ix. debugging x. use / reuse of existing or specific hardware / software c. Application program interfaces (O): Documents an internal or external API provided by the system. Is defined to enable the system or subsystem to be used without the need to understand all its internal details. d. Target environment (E): Should specify hardware platform(s), operating system(s) and runtime environment [(s) in distributed or client/server system]. Ensures that the architect and end user share a common understanding of the operating environment. e. Subsystem model (O in small/medium, E in large): A partitioning of a system into subsystems and a delegation of system responsibilities to the subsystems. Subsystems may be nested. Logical and/or physical models. f. Design object model (AE): A static structural representation of the software objects (classes) that comprise the system implementation. Comprised of design object classes and their attributes, responsibilities, operations and interrelationships (expressed as association, aggregation and inheritance links). Focus is on the structure of the software system, as opposed to the structure of the problem domain (see analysis object model). g. Design scenarios (E): Similar to analysis scenarios, except they refer to design objects in describing their behavior, assumptions and outcomes, and they include information about how to trigger the scenario. May define system or subsystem behavior. Specifies a design object interaction diagram (OID) (states formally what a OID must do). h. Design object interaction diagrams (E, major activity of design phase): Used for dynamic modeling in an object-oriented design. A graphical representation of object collaborations in a design scenario in terms of design objects and their interactions. Is a result of transforming the corresponding analysis object interaction diagram (if it exists). The driving force behind the transformation is the system architecture. Not present in OMT or UML. i. Design Class-Responsibility-Collaboration cards (O): Starting with analysis CRC cards, create additional cards for new classes designed (generally interface and service classes). Assign responsibilities and reallocate responsibilities. Evenly distribute responsibilities among objects. Conduct new CRC exercises. May indicate required attributes, actions and events (public interface) for each class. j. Design state models (O): A representation of the dynamic object behaviors for the design classes. Only represents classes with strong state-dependent object behavior, use design OIDs otherwise. k. Design class descriptions (E): Containers of all the information known about a class at the design level. Provides the starting point for class implementations. l. Rejected design alternatives (O): A listing of design decisions considered but rejected. 6. Implementation: Development phase that creates a working solution to a problem, from the design. The main activities involve systematically coding the classes specified as a result of design in a programming language according to documented public/private interfaces so that they can be built and installed on the target platforms. Implementer should follow traceability of functional requirements from Use Cases into Design Scenarios and Design Object Interaction Diagrams, the results being organized into classes that are described by the Design Object Model and the Design Class Descriptions. May include some or all of the following work products: a. Coding guidelines (E): A set of documented rules and recommendations addressing the programming style to be used within the development project. Typical topics covered include: i. File naming conventions ii. File structure iii. Fiile and function prologues (e.g. security and copyright) iv. Identifier naming conventions v. Global names vi. Class/structure layout vii. Initialization viii. Use of types within a language ix. Calling conventions and return types x. Cohesion, encapsulation, binding xi. Memory management x. Exception and error handling xi. Use of language specific features xii. Terseness of expressions xiii. Performance xiv. Portability xv. Formatting b. Physical packaging plan (O): Contains decisions about the physical structure of the product deliverables (e.g. executables, source code, dynamic link libraries, etc.). c. Development environment (O): A minimum environment contains tools to edit, compile or interpret, run, and debug source code. It should span all phases of development without requiring us to enter the same data more than once (even if multiple tools are used). d. Source code (E): The actual implementation of the application design in a programming language. There may be several different types of code files. e. User support materials (E): Customer documentation. Typical customer tasks to be covered include: i. Evaluation ii. Planning iii. Installation iv. Administration v. Operation vi. Customization vii. Application programming viii. Diagnosis ix. End use f. Database schema (O): 7. Testing: Development phase that checks work products to determine whether they satisfy specific quality criteria. May be divided into internal verification (ensuring that the problem is being solved correctly) and validation (ensuring that the correct problem is being solved) against other work products or specifications. The main activities involve insuring that the application meets the requirements set forth in the problem statement and requirements. Includes the following work product: Test cases (E): May perform one or more of the following during one or more development increments: i. Function test: ii. Integration test: iii. User acceptance test: iv. Stress test: v. Performance test: vi. System test: 8. Maintenance: Development phase that includes error detection and correction and the addition of enhancements requires to adapt it to a new environment or meet requirements that were not initially specified. Conducted after the solution is delivered to the customer. Is actually a full path through the system development cycle (must have an understanding of the requirements analysis, design, implementation, test and maintenance).
C. Methodology: A formal framework for modeling a system from its requirements to its deployment and maintenance. Common methodologies for accomplishing system development are: 1. Functional decomposition: Consists of selecting the processing steps and sub-steps (functions and sub-functions) anticipated. The focus is on what processing is required for the new system, followed by specifying the processing and functional interfaces. Requires the analyst to map from problem space to functions and sub-functions. (The analyst must internalize the subject matter and then produce the corresponding required functions and sub-functions. Because of this, there is no direct map back from the functionality to the subject matter, which makes it difficult to assess whether or not the requirements are an accurate statement of what the system must do.) Additional drawbacks are that (1) processes and functions are the most volatile (often changed) aspects of system development , and (2) external interfaces are the second most volatile. If the system development is based on them (if they are the foundation of all work to follow), changes will propagate throughout the analysis, design and implementation phases. (functional decomp = functions + sub-functions + interfaces) 2. Data flow (structured) modeling: An analyst maps the real world problem domain into data flows and bubbles, where bubbles correspond to events. (Events are those occurrences that happen in the outside world that a planned-response system must respond to.) Each bubble is named according to what the system does in response to the event. Appropriate input and output flows are added to each bubble. Data stores are added between bubbles that need to communicate with persistent data. Group the bubbles "that deal with common data structures" and create successive higher level abstractions, the highest of which shows the entire system in a single bubble. Apply functional decomposition to define lower level abstractions, as needed. Data dictionaries need to be defined at each level. One problem with data flow modeling is that "following the flow of data" is not one of the basic methods humans use to manage complexity (abstraction [procedural, data], encapsulation (information hiding), inheritance, organization [objects, attributes, classification structures]). A second is how to pick a reasonable number of bubbles. A third is to keep the data dictionary tractable. Since this methodology has a strong functional and interface emphasis, it also suffers from the same resistance to change as does functional decomposition. (data flow modeling = data (& control) flows + data (& control) transformations + data (& control) store + terminators + minispecs + dictionary) 3. Information modeling: The strategy is to find objects in the real world and describe them with attributes. Add relationships between the objects. Refine the model with supertype/sub-types and associative objects. Sometimes takes the form of an entity-relationship diagram. Information modeling is missing the following concepts: i. services (object functionality) ii. inheritance iii. messaging (object interface) iv. structure (object classification and assembly) (information modeling = objects + attributes + relationships + supertype/subtype + associative objects) 4. Object-oriented modeling: The power of object modeling as opposed to data flow or functional decomposition modeling is that by focusing on modeling complete abstractions (objects) which encapsulate both function and data, it is possible to use the same basic concepts during all development phases. By contrast, one might analyze a problem conventionally in terms of data and then design in terms of function. (object-oriented = objects (abstract encapsulation of attributes and functionality) + classification + inheritance + message communication) i. Scenario-driven approach: Functional requirements (as Use Cases) are elaborated into Scenarios, which enumerate the assumption and outcome pairs associated with each Use Case. Each Scenario is elaborated into an Object Interaction Diagram, which distributes the system functions to the objects by assigning class responsibilities and identifying object collaborations. The classes and their OID-implied attributes, associations, and operations are organized by class and transferred to an Object Model. When a sufficient amount of class behavior varies due to an object's state, the operation sequences identified in the OIDs referring to that class are collected and reorganized into a State Model.
ii. Data-driven approach: The data portion of the Object Model is developed first from a pre-existing entity-relationship diagram, database schema, or legacy data structures. The normal Scenario-driven approach is used to identify Use Cases, Scenarios, Object Interaction Diagrams, and State Models. The Object Model acts like a design constraint, and is updated from the OID with the assignment of operations and possibly new attributes and associations that became evident during the dynamic modeling.
iii. State-driven approach: The State Models are developed first, usually from pre-existing legacy State Models. Some attributes, transition operations and relationships may be obtained this way. Transfer State Models to the Object Model. Use the Data-driven variation to identify Use Cases, Scenarios, and Object Interaction Diagrams. The State Model acts like a design constraint when developing the OIDs. Finally, the Object Model is updated with the additional classes (attributes, relations, operations) that become evident during the dynamic modeling.
II. Iterative and Incremental Development: A process model for software development in which the project is divided into a sequence of increments. During each increment a combination of incremental by requirements development and iterative rework is performed. Each increment is principally driven by the end-user requirements that define that increment, but a certain portion of the increment is set aside for iterative rework of existing work products to take reviews, tests, experience, and other feedback into account. Each increment results in executable system code. Components Requirements R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 A A1 A2 B B2 B5 B7 B9 C C1 C3 C6 C8 C10 D D3 D4 E E2 E5 E6 E9 F F4 F7 F10 G G1 G6 G8 H H5 H9 I I4 I7 I9 J J6 J8 J10 Ref: (1) When planning the increments it will not be possible to anticipate which particular parts of the design will require rework, but a certain portion of each increment should nevertheless be set aside to anticipate the inevitable fact that rework of some kind will be necessary (to correct errors, increase performance, increase modularity, increase extensibility, ....). Some issues may not arrise until reviews or tests. III. Distributed Systems A. Types of distributed systems (ref. 3): 1. Distributed operating system: Applications run on top of a distributed operating system, seeing a collection of services and resources to use without concern for where they exist. Advantages: Dealing with distribution done by operating system, not application Disadvantages: Requires node operating systems to be homogeneous. Examples: 2, Network operating system: Nodes run an independent operating systems, each providing a network interface that applications use to communicate with other nodes. Advantages: Independent operating system environment. Disadvantages Examples: IBM Customer Information Control System (CICS) product family. 3. Distributed file systems: Each node mounts file systems from other nodes at boot or as requested. Advantages: Node has access to remote files. Disadvantages: Each application has to find node where file resides. Examples: Sun's Network File System (NFS), OSF's Distributed Computing Environment (DCE). 4. Distributed programming language: The programming language is responsible for dealing with distribution. May access remote resources directly or may try to make make the network transparent (see distributed operating system). Advantages: Language can be implemented on different operating systems. Disadvantages: Complex to design such a language. Examples: HP's Distributed Smalltalk, IBM's Distributed Smalltalk, IBM's VisualAge Distributed Feature 5. Distributed programming toolkit: Provide a library that aids in writing distributed applications. Higher level of abstraction than network operating system, lower than distributed programming language. Advantages: Disadvantages: Examples: IBM's Distributed System Object Model (DSOM), OSF's Distributed Computing Environment (DCE), Sun's Network Computing System (NCS). B. How to divide classes for distribution(ref. 3): 1. From requirements specification. 2. From use cases. 3. From object model. 4. From dynamic model. 5. From system design. 6. From persistent object design.
ref. (3) Procedural Abstraction Data Abstraction Encapsulation Classification/Inheritance Organization Methods Behavior Categories Functional Decomposition
y Data Flow Modeling
y y Information Modeling-Data
(y) y Object-oriented Modeling
y y y y y y
R Hoffman, mann creek software, reh@manncreek.com, last updated 9/98.