Chapter 6: Process email@example.com What is a Successful Projects: • A successful software project is one whose deliverables -satisfy and possibly exceed the customer's expectations • It is one that was developed in a timely and economical fashion. • It is one that is resilient to change and adaptation. By this measure, we have observed two traits that are common to virtually all of the successful object-oriented systems • The existence of a Strong architectural vision • The application of a well-managed iterative and incremental development life cycle. 1) Architectural Vision: • A system that has a sound architecture is one that has conceptual integrity and, "conceptual integrity is the most important aspect to be considered in system design" • The architecture of an object-oriented software system encompasses its class and object structure, organized in terms of distinct layers and partitions. In some ways, the architecture of a system is largely irrelevant to its end users. • However, having a "clean internal structure" is essential to constructing a system that is understandable, can be extended and reorganized, and is maintainable and testable • Furthermore, it is only through having a clear sense of a system's architecture that it becomes possible to discover common abstractions and mechanisms. • Good architectures tend to be object-oriented. Attributes of good software architecture: • They are constructed in well-defined layers of abstraction • There is a clear separation of concerns between the interface and implementation of each layer. • The architecture is simple Distinction between strategic and tactical architectural decisions: • A strategic decision is one that has sweeping architectural implications, and so involves the organization of the architecture’s higher-level structures. • A tactical decision has only local architectural implications, and so usually only involves the details of an abstraction's interface and implementation. Chapter 6: Process firstname.lastname@example.org 2) Iterative and Incremental Life Cycle: • An iterative and incremental development life cycle is the direct opposite of the traditional waterfall life cycle, and so represents neither a strictly top-down nor a bottom-up process. • The process that leads to the successful construction of object-oriented architectures tends to be both iterative and incremental. • The process is incremental in the sense that each pass through an analysis/design/evolution cycle leads us to gradually refine our strategic and tactical decisions, ultimately converging upon a solution that meets the end user's real (and usually unstated) requirements. Towards a Rational Design Process: There are five distinct levels of process maturity • Initial: The development process is unplanned ( ad hoc) and often disordered (chaotic). Organizations can progress by introducing basic project controls. • Repeatable: The organization has reasonable control over its plans and commitments. • Defined: The development process is reasonably well-defined, understood, and practiced. • Managed: The organization has quantitative measures of its process. • Optimizing: The organization has in place a well-tuned process that consistently yields products of high quality in a predictable, timely, and cost-effective manner. The Micro Development Process: Overview: • To a large extent, the micro process represents the daily activities of the individual developer or a small team of developers. • Micro process is successively refined by the macro process. • From the perspective of the engineer, the micro process offers guidance in making the tactical decisions. • From the perspective of the architect, the micro process offers a framework for evolving the architecture and exploring alternative designs. • In the micro process, the traditional phases of analysis and design are intentionally blurred. Chapter 6: Process email@example.com The micro process tends to track the following activities: • Identify the classes and objects at a given level of abstraction. • Identify the semantics of these classes and objects. • Identify the relationships among these classes and objects. • Specify the interface and then the implementation of these classes and objects. Identifying Classes and Objects: 1) Purpose: • The purpose of identifying classes and objects is to establish the boundaries of the problem at hand. • Helps in decomposition of the system 2) Products: • The central product of this step is a data dictionary that is updated as development proceeds. • As development proceeds, and especially as the dictionary grows, it becomes necessary to formalize the repository. • In its more formal variations, a data dictionary serves as an index into all the other products of the development process. Advantages of data dictionary: • Maintaining a dictionary helps to establish a common and consistent vocabulary that can be used throughout the project. Chapter 6: Process firstname.lastname@example.org • A dictionary can serve as an efficient vehicle for browsing through all the elements of a project. • A data dictionary permits architects to take a global view of the project. 3) Activities in micro development process: • The identification of classes and objects involves two activities: Discovery and invention 4) Milestones and Measures: • Construction of a stable data dictionary at the beginning is very difficult. • We don't expect to complete or freeze this dictionary until very late in the development process. • A measure of goodness, therefore, is that the dictionary is not changing wildly each time we iterate through the micro process. A rapidly changing dictionary is a sign either that the development team has not yet achieved focus, or that the architecture is in some way faulty. Identifying the Semantics of Classes and Objects: 1) Purpose: • The purpose of identifying the semantics of classes and objects is to establish the behavior and attributes of each abstraction identified in the previous phase. 2) Products: • There are several products that flow from this step. The first is a refinement of the data dictionary, whereby we initially attach responsibilities to each abstraction. • Object diagrams and interaction diagrams are also produced. 3) Activities: • There are three activities associated with this step: storyboarding, isolated class design, and pattern scavenging. • Story boarding represents top down identification of semantics. • Isolated Classes represents bottom up identification of semantics. • Pattern scavenging, recognizes the importance of commonality. Chapter 6: Process email@example.com 4) Milestones and Measures: • The main thing to be achieved includes the identification of sufficient, primitive, and complete set of responsibilities and/or operations for each abstraction (concept). Identifying the Relationships among Classes and Objects: 1) Purpose: • The purpose of identifying the relationships among classes and objects is to solidify the boundaries. 2) Products: • Class diagrams, object diagrams, and module diagrams are the primary products. • During analysis, we produce class diagrams that state the associations among abstractions, and the operations and attributes for certain abstractions • During analysis, we also produce object diagrams and consider the interplay between classes and objects. 3) Activity: • There are three activities associated with this step: the specification of associations, the identification of various collaborations, and the refinement of associations. 4) Milestones and Measures: • Specification of semantics and relationships among certain interesting abstractions. • Measures of goodness include cohesion, coupling, and completeness. Implementing Classes and Objects: 1) Purpose: • During analysis, the purpose of implementing classes and objects is to provide a refinement of existing abstractions sufficient to unveil new classes and objects at the next level of abstraction, which we then feed into the following iteration of the micro process. 2) Products: • Decisions about the representation of each abstraction and the mapping of these representations to the physical model that derive the products. 3) Activities: • There is one primary activity associated with this step: • The selection of the structures and algorithms that provide the semantics of the abstractions we identified earlier in the micro process. Chapter 6: Process firstname.lastname@example.org • The first three phases of the micro process focus upon the outside view of our abstractions, this step focuses upon their inside view. 4) Milestones and Measures: • During analysis, we successfully complete this phase once we have identified all the interesting abstractions necessary to satisfy the responsibilities of higher-level abstractions identified during this pass through the micro process. • During design, we successfully complete this phase when we have an executable or near-executable model of our abstractions. -------------------- The Macro Development Process: Overview: • The macro process serves as the controlling framework for the micro process. • The macro process represents the activities of the entire development team on the scale of weeks to months at a time. • Many elements of the macro process are simply sound software management practice, and so hence they apply equally to object-oriented as well as non-object-oriented systems. • These include basic practices such as configuration management, quality assurance, code walkthroughs, and documentation. Chapter 6: Process email@example.com In the macro process, the traditional phases of analysis and design are to a large extent retained, and the process is reasonably well ordered. • Establish the core requirements for the software (conceptualization). • Develop a model of the system's desired behavior (analysis). • Create architecture for the implementation (design). • Evolve the implementation through successive refinement (evolution). • Manage post delivery evolution (maintenance). Conceptualization: 1) Purpose: • Conceptualization seeks to establish the core requirements for the system. • For any truly new piece of software, or even for the novel adaptation of an existing system, there exists some moment in time where, in the mind of the developer, the architect, the analyst, or the end user, there springs forth an idea for some application. 2) Products: • Prototypes (example) are the primary products of conceptualization. 3) Activity: • Activities Conceptualization is by its very nature an intensely creative activity. • New ideas can spring from virtually any source: end users, user groups, developers, analysts, the marketing team, and so on. 4) Milestones and Measures: • Completion of a prototype. Analysis: 1) Purpose: • As Mellor states, "the purpose of analysis is to provide a description of a problem. • The description must be complete, consistent, readable, and review able by diverse interested parties. • In analysis, we seek to model the world by identifying the classes and objects (and their roles, responsibilities, and collaborations) that: form the vocabulary of the problem domain. 2) Products: • Object diagrams are generated to illustrate the semantics of each scenario more precisely. Chapter 6: Process firstname.lastname@example.org • In addition to object diagrams, we will also include class diagrams (to show the associations among the object's classes) and finite state machines (to show the life cycle of certain important objects. 3) Activities: • Two primary activities that are associated with analysis: domain analysis and scenario planning. • Domain analysis seeks to identify the classes and objects that are common to a particular problem domain. • Scenario planning is the central activity of analysis. 4) Milestones and Measures: • We successfully complete this phase when we have developed and signed off on scenarios for all fundamental system behaviors. • Measures of goodness include completeness and simplicity. Design: 1) Purpose: • The purpose of design is to create architecture for the evolving implementation, and to establish the common tactical policies that must be used by dissimilar elements of the system. 2) Products: • There are two primary products of design: a description of the architecture, and descriptions of common tactical policies. • The architecture of an object-oriented system encompasses its class and object structure. • Common tactical policies include localized mechanisms that appear throughout the system. 3) Activities: • There are three activities associated with design: architectural planning, tactical design, and release planning. • Architectural planning involves devising the layers and partitions of the overall system. • Tactical design involves making decisions about various common policies. • Release planning sets the stage for architectural evolution. Chapter 6: Process email@example.com 4) Milestones and Measures: • We successfully complete this phase when we have validated the architecture through a prototype and through formal review. • The primary measure of goodness is simplicity. Evolution: 1) Purpose: • The purpose of the evolutionary phase is to grow and change the implementation through successive refinement. 2) Products: • The primary product of evolution is a stream of executable releases representing successive refinements to the initial architectural release. • Secondary products include behavioral prototypes that are used to explore alternative designs or to further analyze the dark corners of the systems' functionality. 3) Activities: • Two activities are associated with evolution: • Application of the micro process, and • Change management. 4) Milestone and Measure: • We stop this phase when the functionality and quality of the release are sufficient. • Measure is based on the change of architectural interface and tactical policies. Maintenance: 1) Purpose: • Maintenance is the activity of managing post delivery evolution. • More localized changes are made to the system as new requirements are added and lingering (persisting) bugs stamped out. 2) Products • Since maintenance is in a sense the continued evolution of a system, its products are similar to those of the previous phase. 3) Activities: Chapter 6: Process firstname.lastname@example.org • Maintenance involves activities that are little different than those required during the evolution of a system. Especially if we have done a good job in the original architecture, adding new functionality or modifying some existing behavior will come naturally. 4) Milestones and Measures: • The milestones of maintenance involve continued production releases, plus intermediate bug releases.