Front cover Strategic Reuse with Asset-Based Development Implement strategic reuse with Rational Asset Manager Improve quality and time to market Learn the best practices for Service and Pattern assets Lee Ackerman Paul Elder Chris Busch Ana Lopez-Mancisidor Jin Kimura Rishi S. Balaji ibm.com/redbooks International Technical Support Organization Strategic Reuse with Asset-Based Development May 2008 SG24-7529-00 Note: Before using this information and the product it supports, read the information in “Notices” on “Notices” on page xv. First Edition (May 2008) This edition applies to Version 7.0.0.1 of Rational Asset Manager. © Copyright International Business Machines Corporation 2008. All rights reserved. Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. Contents Notices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv Trademarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvi Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii The team that wrote this book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xviii Become a published author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Part 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Chapter 1. Introduction to Asset-Based Development . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1 Software delivery challenges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 The reuse challenge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3 Value of using assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.4 Asset-Based Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4.1 Asset management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.4.2 Artifacts within reusable assets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.4.3 Styles of reuse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.4.4 Packaging assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.5 Asset life cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.6 Asset repositories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.7 Reuse success factors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.8 Guide to the remaining chapters of this book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Chapter 2. ZYX Electronics case study. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Overview of ZYX Electronics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2 CEO interview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.3 CIO interview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.4 Business composition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Challenges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 The business. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.2 Information technology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4 Scope and approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.1 Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.2 Approach. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.3 Benefits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5 Assumptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 18 18 18 20 22 23 25 26 26 28 28 29 30 31 Chapter 3. Tools in support of Asset-Based Development . . . . . . . . . . . . . . . . . . . . . . 3.1 Overview of IBM tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Eclipse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Rational Modeling Platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 Rational Application Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 33 35 35 36 © Copyright IBM Corp. 2008. All rights reserved. iii 3.4 3.5 3.6 3.7 3.8 WebSphere Business Modeler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . WebSphere Integration Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rational RequisitePro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rational ClearCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rational ClearQuest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.8.1 WebSphere Studio Asset Analyzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.9 Asset repositories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.9.1 Rational Asset Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.9.2 WebSphere Service Registry and Repository. . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.9.3 Rational Asset Manager compared with other products . . . . . . . . . . . . . . . . . . . . 3.9.4 IBM Asset Repository strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.10 Process and methodology support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.10.1 Rational Method Composer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.10.2 Rational Portfolio Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.10.3 Rational ProjectConsole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11 Bringing it all together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 36 37 37 38 38 39 39 39 40 44 45 45 46 46 47 Chapter 4. Introduction to the IBM Rational Unified Process . . . . . . . . . . . . . . . . . . . . 4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 How much of this guidance needs to be used . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 IBM Rational Unified Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 The heart of RUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.2 The IBM Rational Method Composer platform . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.3 Core principles of RUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.4 Key concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 49 49 50 52 52 53 56 59 Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.1 Introduction to the asset plug-ins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.2 Adoption guidance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.2.1 How adoption guidance fit into a process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.2.2 How much of this guidance do you use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.3 Governance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.3.1 Asset governance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 5.4 Asset governance plug-in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 5.4.1 Planning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.4.2 Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 5.4.3 Enablement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 5.4.4 Measurement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 5.5 Asset-Based Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.5.1 Manufacturing and usage cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.6 Asset-Based Development plug-in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.6.1 Produce reusable asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 5.6.2 Manage reusable assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5.6.3 Consume Reusable Asset Activity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 5.7 When to use these processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 5.8 Asset process views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 5.9 Creating extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 5.10 ZYX Electronics development case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 5.10.1 What is a development case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 5.10.2 Content sources for the ZYX Electronics development case . . . . . . . . . . . . . . . 99 5.10.3 More information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 iv Strategic Reuse with Asset-Based Development Chapter 6. Value, impact, and return on investment . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1 Impact and ROI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 Avoid over-measuring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Not all assets are equal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3 Gathering data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3.1 Startup data sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3.2 Ongoing data sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4 Asset Reuse Strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.1 Tooling and methodology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.2 Asset creation and acquisition approaches. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.3 Asset type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.4 Reuse scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5 Calculations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.6 Cost of reuse failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.7 Additional calculations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 103 104 105 111 114 115 117 117 117 117 117 118 120 120 Part 2. Reusable Assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Chapter 7. Adopting Asset-Based Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 7.1 Pilot projects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 7.2 Reuse maturity model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 7.3 Organization templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 7.3.1 Ad-Hoc organization template. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 7.3.2 Self-Governed organization template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 7.3.3 Governed organization template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 7.3.4 Enterprise Partial organization template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 7.3.5 Enterprise Full organization template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 7.4 Reuse adoption strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 7.5 ZYX’s Asset Governance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 7.6 Getting started at ZYX Electronics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 7.7 Purpose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 7.8 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 7.9 Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 7.10 Maturity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 7.11 Areas of assessment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 7.12 Management support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 7.12.1 Does management specify policies and support asset reuse . . . . . . . . . . . . . . 147 7.12.2 Does management provide top-down support for investing with bottom-up implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 7.13 Software process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 7.13.1 Do the project teams follow a repeatable software process . . . . . . . . . . . . . . . 150 7.13.2 Are there management artifacts produced from the process and does management use them . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 7.14 Business domain understanding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 7.14.1 Is the business problem space understood by the software organization. . . . . 150 7.15 Architecture to support reuse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 7.15.1 Does the software architecture permit assets to be harvested and plugged in for reuse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 7.16 Versioning and configuration management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 7.16.1 Does the software team practice source code versioning and configuration management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 7.17 Conclusions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 7.17.1 Maturity model alignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Contents v 7.17.2 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.18 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.19 Purpose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.20 Key concepts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.21 Asset-Based Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.22 Motivations for Asset-Based Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.23 Assets and artifacts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.24 Asset standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.25 Reuse vision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.26 Vision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.26.1 Realizing the vision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.27 Identified risks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.27.1 Asset misidentification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.27.2 Asset Consumer mis-targeting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.27.3 Volume-centric Repository . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.27.4 Asset governance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.27.5 Over-engineering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.27.6 Do It Yourself (DIY) equals innovation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.27.7 Budget and resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.28 Reuse environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.29 Reuse environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.30 Asset-Based Development process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.31 Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.32 Asset production strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.33 Reuse infrastructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.34 Reuse implementation strategy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.34.1 Reuse adoption strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.35 Maturity model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.36 Organizational templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.37 How it all fits together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.38 Reuse implementation plan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.39 Phase one: Existing assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.39.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.39.2 Goals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.40 Phase two: Pattern-based engineering rollout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.40.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.40.2 Goals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.41 Phase three: Services as assets rollout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.41.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.41.2 Goals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.42 Phase four: Post-pilot review and analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.42.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.42.2 Goals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vi Strategic Reuse with Asset-Based Development 154 155 156 157 157 158 158 159 160 162 164 166 166 166 167 167 167 168 168 168 168 168 169 171 172 173 173 175 180 183 184 184 184 185 185 185 185 185 185 186 186 186 186 7.43 7.44 7.45 7.46 7.47 7.48 7.49 7.50 7.51 7.52 7.53 7.54 Metrics for measuring progress. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Economic metrics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Primary metrics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Asset Consumer feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Library metrics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Additional considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reuse incentives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Internal communication model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Training model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funding model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Looking ahead. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 188 190 190 190 191 191 192 192 193 193 194 Chapter 8. Configure your Asset Repository . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1 Rational Asset Manager information metamodel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.1 Community Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.2 Asset workflow specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.3 Asset type specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.4 Administration roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.5 Best practices to customize your Repository . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Repository configuration for ZYX Electronics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.1 Creating communities and Community Administrators . . . . . . . . . . . . . . . . . . . . 8.2.2 Creating asset types, category schemas, relationship types, and attributes . . . 8.2.3 Managing users and assigning roles in communities . . . . . . . . . . . . . . . . . . . . . 8.2.4 Defining default review processes in communities . . . . . . . . . . . . . . . . . . . . . . . 8.3 What comes next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 196 197 203 205 209 211 214 217 218 228 232 235 Chapter 9. Produce reusable assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2 Asset manufacturing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.1 Asset manufacturing roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.2 Conduct recurring problem analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.3 Develop asset specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.4 Create asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.5 Review and test asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.6 Update asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.7 Publish or deploy asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3 ZYX Electronics: Produce reusable assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.1 Recurring problem analysis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.2 Develop asset specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.3 Create asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.4 Review and test asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.5 Update Asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.6 Publish or deploy asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 237 238 239 240 242 245 248 249 251 252 253 257 261 270 272 279 Chapter 10. Consume reusable assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2 Asset usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.1 Asset consumption roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.2 Search asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.3 Use asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.4 Provide asset feedback. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.5 Develop asset specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 282 283 283 284 286 288 289 Contents vii 10.3 ZYX Electronics: Consume reusable assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3.1 Search asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3.2 Use asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3.3 Provide asset feedback. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 290 295 297 Chapter 11. Manage reusable assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Asset management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.1 Asset management roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.2 Search asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.3 Review and test asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.4 Publish or deploy asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.5 Configure Repository . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.6 Remove asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.7 Report on asset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3 Migration of existing assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3.1 Migration strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3.2 Asset cleansing, defining, and mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3.3 Mapping and uploading. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4 ZYX Electronics: Manage reusable assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.1 Search asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.2 Review and test asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.3 Publish or deploy asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.4 Configure Repository . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.5 Remove asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.6 Report on asset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.7 Conclusions and future plans at ZYX Electronics . . . . . . . . . . . . . . . . . . . . . . . 303 304 305 306 307 307 309 310 311 313 314 314 315 316 317 318 318 324 324 324 326 331 Part 3. Service Assets in an SOA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 Chapter 12. Introduction to service assets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1 Setting the context for Part 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1.1 How does Part 3 relate to the rest of the book . . . . . . . . . . . . . . . . . . . . . . . . . 12.1.2 How does this part relate to SOA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1.3 How does this part relate to RUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2 SOA, services, and assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3 What is a service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.1 Reusable business functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.2 Explicit implementation-independent interfaces . . . . . . . . . . . . . . . . . . . . . . . . 12.3.3 Communication protocols that stress location transparency. . . . . . . . . . . . . . . 12.4 Web services and SOA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5 SOA Governance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5.1 SOA life cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5.2 SOA Governance defined . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5.3 The governance life cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5.4 Relationship between Asset Governance and SOA Governance . . . . . . . . . . . 12.6 Types of service-based assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.7 Service-oriented modeling and architecture (SOMA) . . . . . . . . . . . . . . . . . . . . . . . . 12.7.1 Rational Method Composer plug-in for SOMA . . . . . . . . . . . . . . . . . . . . . . . . . 12.8 IBM products for implementing service assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.8.1 Rational Method Composer plug-in for SOA Governance . . . . . . . . . . . . . . . . 12.8.2 Rational Software Architect and Rational Software Modeler . . . . . . . . . . . . . . 12.8.3 WebSphere Integration Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.8.4 WebSphere Process Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii Strategic Reuse with Asset-Based Development 335 336 336 336 336 338 339 339 340 340 341 341 341 343 343 345 346 349 349 349 350 350 351 352 12.8.5 WebSphere Business Services Fabric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.8.6 WebSphere Business Modeler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.8.7 WebSphere Business Monitor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.8.8 WebSphere Service Registry and Repository. . . . . . . . . . . . . . . . . . . . . . . . . . 12.8.9 Rational Asset Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.8.10 WebSphere Studio Asset Analyzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 354 355 355 355 356 Chapter 13. Producing service assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1 Creating service assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2 SOMA insights for asset development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.1 Service identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.2 Service specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.3 Service realization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3 Creating a composite business service asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3.1 Modeling a composite business service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3.2 Assembling a composite business service . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3.3 Deploying a composite business service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.4 Testing service assets in an SOA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.4.1 IBM products for SOA testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.5 Publishing service assets to the Repository . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.5.1 Repositories in the life of a service asset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.5.2 Governance options for publishing services . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.5.3 Publishing assets to Rational Asset Manager. . . . . . . . . . . . . . . . . . . . . . . . . . 13.6 Case study: SOA service reuse at ZYX Electronics . . . . . . . . . . . . . . . . . . . . . . . . . 13.6.1 Current state of service reuse at ZYX Electronics . . . . . . . . . . . . . . . . . . . . . . 13.6.2 Rational Asset Manager configuration for ZYX Electronics . . . . . . . . . . . . . . . 13.6.3 Produce and Publish service assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 360 360 362 366 371 373 374 375 380 380 382 383 383 386 387 392 392 393 394 Chapter 14. Consuming service assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.1 Locating services for consumption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.1.1 Locating services in WebSphere Service Registry and Repository . . . . . . . . . 14.1.2 Locating services in WebSphere Business Services Fabric . . . . . . . . . . . . . . . 14.2 Consuming service metadata from WSRR for CBS assembly . . . . . . . . . . . . . . . . . 14.2.1 WebSphere Business Services Fabric and the WSRR integration . . . . . . . . . . 14.3 Points of variability of service-based assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.4 Customizing Composite Business Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.5 Reusing assets from the Industry Content Packs . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.6 Providing service reuse feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.7 Case study: SOA service reuse at ZYX Electronics . . . . . . . . . . . . . . . . . . . . . . . . . 399 400 400 402 403 403 406 410 411 414 415 Chapter 15. Managing service assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 15.1 Configuring the repositories for effective service management . . . . . . . . . . . . . . . . 426 15.1.1 Integrating Rational Asset Manager and WebSphere Service Registry and Repository. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 15.1.2 Configuring WebSphere Business Services Fabric for sourcing metadata from WebSphere Service Registry and Repository . . . . . . . . . . . . . . . . . . . . . . . . . . 430 15.2 Review and approve services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430 15.2.1 Security features in WebSphere Service Registry and Repository . . . . . . . . . . 431 15.2.2 WebSphere Business Services Fabric Governance Manager . . . . . . . . . . . . . 434 15.3 Reporting on service reuse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 15.3.1 Assessing service reuse with WSRR and IBM Tivoli . . . . . . . . . . . . . . . . . . . . 436 15.3.2 Using WebSphere Business Services Fabric Performance Manager for asset management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 Contents ix 15.4 Retiring service assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.5 Service Integration Maturity Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.6 Case study: SOA service reuse at ZYX Electronics . . . . . . . . . . . . . . . . . . . . . . . . . 15.6.1 Publish developed service to WebSphere Service Registry and Repository . . 15.6.2 Conclusions and benefits for ZYX Electronics . . . . . . . . . . . . . . . . . . . . . . . . . 445 445 447 447 453 Part 4. Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 x Chapter 16. Introduction to patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.1 Improving productivity in software development . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.1.1 How to use this part of the book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.2 Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.3 Developing a pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.3.1 Roles in developing pattern implementations . . . . . . . . . . . . . . . . . . . . . . . . . . 16.4 Pattern-based engineering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.5 A process for pattern-based engineering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.5.1 Establish project constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.5.2 Identify representative use cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.5.3 Develop candidate architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.5.4 Customize the development process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.5.5 Pattern harvesting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.6 Reality check: Does pattern-based engineering really work . . . . . . . . . . . . . . . . . . . 16.6.1 Case study one: A large banking application . . . . . . . . . . . . . . . . . . . . . . . . . . 16.6.2 Case study two: An IBM product development team . . . . . . . . . . . . . . . . . . . . 16.6.3 Critical success factors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.7 The next steps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 458 458 459 460 460 461 462 463 464 464 465 466 466 466 467 468 468 Chapter 17. Produce: Model-to-text pattern implementations . . . . . . . . . . . . . . . . . . 17.1 Case study: Identifying a recurring problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.2 Model-to-text pattern tooling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.2.1 What is JET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.2.2 IBM tools for creating JET-based solutions. . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.3 Developing a pattern implementation for Java beans . . . . . . . . . . . . . . . . . . . . . . . . 17.3.1 Create a JET authoring project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.3.2 Identify an abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.3.3 Create a model element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.3.4 Identify exemplar artifacts arising directly from the abstraction . . . . . . . . . . . . 17.3.5 Create actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.3.6 Parameterize actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.3.7 Update templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.3.8 Parameterize templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.3.9 Running the JET transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.4 Enabling iterative development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.4.1 Case study: Adding derived properties to beans . . . . . . . . . . . . . . . . . . . . . . . 17.4.2 Reapply strategies: Handling incomplete abstractions . . . . . . . . . . . . . . . . . . . 17.4.3 Reapply strategies: Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.5 An XPath primer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.5.1 What is a path language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.5.2 XPath basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.5.3 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.5.4 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.5.5 Following a reference to another model element . . . . . . . . . . . . . . . . . . . . . . . 17.6 Useful JET techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.6.1 Dumping the input model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 470 473 473 475 479 479 481 482 483 485 488 495 495 503 506 506 507 511 518 518 518 521 521 522 523 523 Strategic Reuse with Asset-Based Development 17.6.2 The org.eclipse.jet.resource family of JET variables. . . . . . . . . . . . . . . . . . . . . 17.6.3 Load additional models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.6.4 JET support for different types of models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.6.5 Accessing EMF-based models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.6.6 Access the Eclipse workspace with JET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.7 The next steps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 524 525 526 527 528 Chapter 18. Produce: Model-to-model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.2 Case study . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.2.1 Solution design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.3 Technology review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.3.1 Eclipse plug-ins and the Plug-in Development Environment (PDE) . . . . . . . . . 18.3.2 The Eclipse Modeling Framework (EMF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.3.3 UML and UML Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.3.4 Model-to-model mapping transformations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.3.5 UML patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.3.6 UML template models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.4 Build an EMF model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.4.1 Enable the EMF capability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.4.2 Create an EMF project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.4.3 Control the EMF code generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.4.4 Generate model code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.5 Build a UML profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.5.1 Create a profile project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.5.2 Create stereotypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.5.3 Release the profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.5.4 Publish the profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.6 Build a model-to-model mapping transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.6.1 Create model mapping project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.6.2 Create mappings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.6.3 Generate transformation source code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.6.4 Customize to invoke a JET transformation back end . . . . . . . . . . . . . . . . . . . . 18.6.5 Debug and test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.6.6 Finding your way around the UML API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.7 Build a UML pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.7.1 Create the UML Pattern project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.7.2 Define the bean package UML pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.7.3 Complete the parameter implementations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.7.4 Test the UML pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.8 Build a template model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.8.1 Create a UML template model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.8.2 Test the template model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.9 Comments regarding the patterns that we have described. . . . . . . . . . . . . . . . . . . . 18.10 The next steps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529 530 530 530 531 531 531 531 532 532 532 532 532 534 535 536 536 536 538 540 541 545 545 547 557 558 559 569 571 572 572 574 578 580 581 583 584 586 Chapter 19. Produce: Packaging for deployment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.1.1 Distribution options overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.2 Sharing JET projects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.2.1 Case study: Packaging a JET-only solution . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.2.2 Deployment solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.2.3 Entering assets into repositories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587 588 588 588 589 589 590 Contents xi xii 19.2.4 Retrieving assets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.3 Exporting JET projects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.3.1 Case study . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.3.2 Deployment solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.3.3 Deployment preparation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.3.4 Pattern selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.3.5 Developer installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.4 Exporting Eclipse features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.4.1 Case study: Packaging the complete bean pattern solution . . . . . . . . . . . . . . . 19.4.2 Installing software in Eclipse-based products . . . . . . . . . . . . . . . . . . . . . . . . . . 19.4.3 Create a feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.4.4 Create an update site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.4.5 Using an update site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.4.6 Using features and update sites with IBM Rational Asset Manager . . . . . . . . . 19.5 Exporting Eclipse features using RAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.5.1 Create a RAS asset from a feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.5.2 Importing a feature from a RAS asset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.5.3 Notes on deploying features with RAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.6 The next steps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 594 594 594 594 598 598 600 600 600 601 603 604 606 608 608 610 611 611 Chapter 20. Consuming pattern implementations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.1.1 Types of pattern usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.2 Management of input models and transformation configurations . . . . . . . . . . . . . . . 20.2.1 Saving JET launch configurations in the workspace. . . . . . . . . . . . . . . . . . . . . 20.2.2 Supporting parallel development on input models . . . . . . . . . . . . . . . . . . . . . . 20.3 Management of transformation outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.4 Integrating transformations with automated builds . . . . . . . . . . . . . . . . . . . . . . . . . . 20.4.1 The jet.transform Ant task . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.4.2 Launching JET transformations as part of a workspace build. . . . . . . . . . . . . . 20.5 Running transformations with integration builds . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.5.1 Using the jet.transform Ant task with headless builds. . . . . . . . . . . . . . . . . . . . 20.5.2 Fine-tuning pattern implementations for integration builds . . . . . . . . . . . . . . . . 20.6 Extending existing JET transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.6.1 Common reasons for overriding a pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.6.2 Case study revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.6.3 Create a JET transformation that overrides another JET transformation . . . . . 20.6.4 Overriding templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20.6.5 Executing the overriding JET transformation . . . . . . . . . . . . . . . . . . . . . . . . . . 613 614 614 615 615 616 618 619 619 621 623 623 624 625 626 626 626 627 629 Strategic Reuse with Asset-Based Development 20.7 The next steps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629 Chapter 21. Managing pattern implementation assets . . . . . . . . . . . . . . . . . . . . . . . . 21.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Encouraging asset creation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3 Enabling multiple versions of an asset to coexist in a single workbench . . . . . . . . . 631 632 632 632 Part 5. Appendixes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635 Appendix A. Rational Asset Manager: Installation and administration . . . . . . . . . . . Rational Asset Manager architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.1 Administrator roles and tasks in Rational Asset Manager . . . . . . . . . . . . . . . . . . . . . A.2 Rational Asset Manager installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2.1 Planning the installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2.2 Installing Rational Asset Manager Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2.3 Installing Rational Asset Manager clients (Web and Eclipse). . . . . . . . . . . . . . . A.2.4 User authentication. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.3 Rational Asset Manager integrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.3.1 Integrating Rational Asset Manager with WSRR . . . . . . . . . . . . . . . . . . . . . . . . A.3.2 Integrating Rational Asset Manager with Rational ClearQuest. . . . . . . . . . . . . . A.3.3 Integrating Rational Asset Manager with Rational ClearCase . . . . . . . . . . . . . . A.4 Rational Asset Manager Administrator tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.4.1 How to import and export data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.4.2 How to import and export a Repository model . . . . . . . . . . . . . . . . . . . . . . . . . . A.4.3 How to perform a backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.4.4 Adding MIME types for a WebSphere Application Server installation . . . . . . . . A.4.5 How to customize the home layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.4.6 How to create a graphical navigation search navigation model . . . . . . . . . . . . . A.4.7 Start the RAM service automatically at startup on Windows . . . . . . . . . . . . . . . A.4.8 Performance considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.4.9 Application programming interface (API) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.5 Rational Asset Manager add-ins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.5.1 Rational Asset Manager configurator tool. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637 638 642 643 644 648 655 657 661 661 665 688 702 702 702 703 703 704 705 707 708 710 711 711 Appendix B. Integrating Asset-Based Development into a process . . . . . . . . . . . . . B.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.2 Rational Unified Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.3 Rational Method Composer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.4 How to customize the RUP using RMC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.4.1 Method development work products. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.4.2 Method development tasks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.5 How to create a project plan specific to your project . . . . . . . . . . . . . . . . . . . . . . . . . B.5.1 Identify the phase iterations, activities, and tasks to execute . . . . . . . . . . . . . . . B.5.2 Creating a project plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713 714 715 717 718 719 722 723 724 724 Appendix C. Additional material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Locating the Web material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Using the Web material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . System requirements for downloading the Web material . . . . . . . . . . . . . . . . . . . . . . . How to use the Web material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725 725 725 725 726 Contents xiii Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727 Related publications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IBM Redbooks publications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Other publications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Online resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . How to get IBM Redbooks publications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Help from IBM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729 729 729 729 730 730 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733 xiv Strategic Reuse with Asset-Based Development Notices This information was developed for products and services offered in the U.S.A. IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service. IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not give you any license to these patents. You can send license inquiries, in writing, to: IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A. The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you. This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice. Any references in this information to non-IBM Web sites are provided for convenience only and do not in any manner serve as an endorsement of those Web sites. The materials at those Web sites are not part of the materials for this IBM product and use of those Web sites is at your own risk. IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you. Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental. COPYRIGHT LICENSE: This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. © Copyright IBM Corp. 2008. All rights reserved. xv Trademarks IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. If these and other IBM trademarked terms are marked on their first occurrence in this information with a trademark symbol (® or ™), these symbols indicate U.S. registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at “Copyright and trademark information” at: http://www.ibm.com/legal/copytrade.shtml The following terms are trademarks of the International Business Machines Corporation in the United States, other countries, or both: Redbooks (logo) ® alphaWorks® developerWorks® i5/OS® z/OS® Ascendant® AIX® ClearCase® ClearQuest® Component Business Model™ CICS® DB2® IBM® ProjectConsole™ PureCoverage® PurifyPlus™ Rational Rose® Rational Summit® Rational Unified Process® Rational® Redbooks® Requisite® RequisitePro® RUP® Summit Ascendant™ Summit® System z™ Team Unifying Platform™ Tivoli® WebSphere® XDE™ The following terms are trademarks of other companies: SAP, and SAP logos are trademarks or registered trademarks of SAP AG in Germany and in several other countries. Oracle, JD Edwards, PeopleSoft, Siebel, and TopLink are registered trademarks of Oracle Corporation and/or its affiliates. Flex, and Portable Document Format (PDF) are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States, other countries, or both. EJB, Java, Javadoc, JavaBeans, JavaScript, JavaServer, JDBC, JMX, JRE, JSP, JVM, J2EE, J2SE, RSM, Sun, and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both. Access, Active Directory, Internet Explorer, Microsoft, SQL Server, Visual Studio, Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both. Pentium, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States, other countries, or both. UNIX is a registered trademark of The Open Group in the United States and other countries. Linux is a trademark of Linus Torvalds in the United States, other countries, or both. Other company, product, or service names may be trademarks or service marks of others. xvi Strategic Reuse with Asset-Based Development Preface Reuse has often been touted as an approach to solving issues, such as time to market and solution quality. Reuse over the years has taken on a number of forms, ranging from copy and paste of code, reuse of objects, reuse of components, to more recently the reuse of services. However, we still find ourselves running late on our projects (when we do deliver) and having poor quality. Unfortunately, we often underestimate the effort and forethought needed in creating a successful reuse program within an organization. Successful reuse does not happen by accident or by just wishing it to be true. This IBM Redbooks publication is focused on a best practice-based approach to strategic reuse within software delivery, known as Asset-Based Development, that will assist in addressing these issues. We do not contend that this is the “silver bullet” that will fix all of the issues that ail software delivery. However, Asset-Based Development is a key tool that needs to be found within the tool chest of all software development organizations (or at least those that want to succeed). This book, as shown in Figure 1, is comprised of four major parts and a set of appendixes. Part 1: Introduction Part 2: Reusable Assets •Introduction to Asset-Based Development •Adopting Asset-Based Development •Process and Tooling •Configuring Asset Management •Case Study Overview •Produce, Consume, and Manage Assets •Impact and ROI Part 3: Services •Services as Assets •Produce, Consume, and Manage Service Assets Appendixes •Rational Asset Manager Installation and Administration •Process Integration Part 4: Patterns •Patterns as Assets •Produce, Consume, and Manage Pattern Assets Figure 1 An overview of the structure of the book Although we encourage you to read the entire book, we also recognize that different audiences have more interest in certain areas than other areas. Therefore, we have a short guide to the contents found within this book: For an overview of Asset-Based Development, including process, roles, tooling, and types of assets, read Part 1, “Introduction” on page 1. For a detailed look at effective asset management, read Part 2, “Reusable Assets” on page 123. If you want to build reusable service-oriented architecture (SOA) service-based assets, read Part 1, “Introduction” on page 1, Part 2, “Reusable Assets” on page 123, and Part 3, “Service Assets in an SOA” on page 333. © Copyright IBM Corp. 2008. All rights reserved. xvii If you want to build pattern-based engineering reusable assets, we have had excellent results in groups adopting pattern-based engineering as a starting point into an asset program. This starting point has proven to provide a quick time to market, significant ROI, and high quality. Detailed guidance covering pattern-based engineering is provided in Part 4, “Patterns” on page 455: – After you have succeeded with pattern-based engineering, it becomes easier to invest in and launch a larger reuse initiative. As your skills in reuse mature and you build further competency, we encourage you to follow up your patterns experience by reading Part 1, “Introduction” on page 1 and Part 2, “Reusable Assets” on page 123. – If you are going to use patterns to build services, read Part 3, “Service Assets in an SOA” on page 333 as well. For those people, who want to deploy and administer Rational® Asset Manager, then refer to Part 1, “Introduction” on page 1, Part 2, “Reusable Assets” on page 123, and Appendix A, “Rational Asset Manager: Installation and administration” on page 637. Note that a number of sections in the book discuss topics that in real life happen concurrently. Unfortunately, it is difficult to present topics in a book concurrently. The team that wrote this book This book was produced by a team of specialists from around the world working at the International Technical Support Organization, San Jose Center. Figure 2 From left: Lee Ackerman, Paul Elder, Rishi S. Balaji, Ana Lopez-Mancisidor, and Jin Kimura xviii Strategic Reuse with Asset-Based Development Figure 3 Chris Busch Lee Ackerman is a Senior Product Manager with the Rational Learning Services and Solutions team in Canada. He has 12 years of experience in the software development field, the last seven of which have been spent IBM®. He holds a Bachelor’s degree in Business Administration from the University of Regina. His areas of expertise include model-driven development, pattern-based engineering, and service-oriented architecture. He has written extensively about these topics and often presents at conferences, workshops, and training events. Paul Elder is a a Senior Software Developer in the IBM Ottawa Lab (Canada). He is the Project Lead on the Eclipse Model-to-Text (M2T) project and the development lead for the IBM Rational model-to-text development tools. He has 23 years experience in the software development field and has worked with IBM Rational for the past seven years. He holds a Bachelor’s degree in Mathematics from the University of Waterloo and a Masters of Business Administration from the University of Ottawa. His areas of expertise include model-driven development, pattern-based engineering, and Java™ and Eclipse development. Chris Busch is a Business Flexibility (SOA) Practice Lead with the IBM Rational TechWorks team in the United States. He has 19 years experience in the software development field and 13 years using Rational Software processes and tools. He has been part of the Rational Software Technical Sales team since 1999 with a focus on software development best practices, requirements and change management, modeling, SOA, and governance. He writes extensive proof-of-technology material and develops implementation solutions to provide internal training and client awareness of Business Driven Development, SOA, SOA Governance, Service Life Cycle Management, and Asset-Based Development and management. He often presents at conferences and user groups and delivers workshops and training to IBM clients and IBM Business Partners. Ana Lopez-Mancisidor is a Certified IT Specialist in Software Application Development for IBM Rational Technical Sales in Spain. She has 14 years of experience in the software development field and nine years of experience using IBM Rational tools. She holds a Bachelor’s degree in Telecommunications Engineering from the Polytechnic University of Madrid. Her areas of expertise include the software development process, Asset-Based Development, requirements and change management, UML modeling, and testing. As part of the Rational Technical Sales Team, she provides consultancy to clients helping them to deploy and customize the Rational Unified Process and Rational tools to meet their needs. Jin Kimura is an Advisory IT Specialist for IBM Global Technology Services in Japan. He has six years of experience in the software development field. He holds a Masters of Science in Chemistry from Tohoku University, Japan. His areas of expertise include the design and development of J2EE™ applications with various assets and the management of their complete end-to-end life cycle. Preface xix Rishi S. Balaji is an Associate Architect at the Global Business Solutions Centre in IBM India. He has six and a half years of experience in software development. He has been with IBM for four and a half years, with three years in WebSphere® development at India Software Labs and the rest in asset development for the Global Business Solutions Center.His expertise is in design and development of J2EE applications and reusable assets for service-oriented architectures. Special thanks to Grant Larsen, STSM, Chief Architect - Asset Management, IBM Denver, for creating and providing access to many materials including articles, presentations, and white papers. Also, we appreciate the time, guidance, and reviews that he provided. Along the way, many people have contributed feedback and reference materials. We also want to thank the following people for their contributions to this project: Dan Popescu, IBM Vancouver Scott Ambler, IBM Toronto Grady Booch, IBM Boulder Bruce Besch, IBM Atlanta Kelli Houston, IBM Orlando Gili Mendel, IBM Raleigh Carlos Ferreira, IBM Lexington Thierry Matusiak, IBM France Ralph Schoon, IBM Germany Bertrand Portier, IBM Toronto Brian Paulsen, IBM Kansas Dino D’agostino, IBM Toronto Manprit Singh, IBM India Darrell Schrag, IBM Chicago Cindy VanEpps, IBM Houston Derek Holt, IBM Raleigh Chris Gerken, IBM Austin Geoff Hambrick, IBM Austin Jim Amsden, IBM Raleigh Greg Rader, IBM Oklahoma Franco Potepan, IBM Lexington Germán Goldszmidt, IBM Watson Carl Osipov, IBM Watson xx Strategic Reuse with Asset-Based Development and Joe DeCarlo, Manager - Special Projects, ITSO San Jose, California And we also want to thank the authors of previous IBM Redbooks publications from which we have reused content, including: The IBM Rational Unified Process for System z, SG24-7362-00, by Enrico Mancin, Cecile Peraire, Angelo Fernandes, Mike Edwards, and Kathy Carroll Building SOA Solutions with the Rational SDP, SG24-7356-00, by Ueli Wahli, Lee Ackerman, Alessandro Di Bari, Gregory Hodgkinson, Anthony Kesterton, Laura Olson, and Bertrand Portier Become a published author Join us for a two- to six-week residency program! Help write a book dealing with specific products or solutions, while getting hands-on experience with leading-edge technologies. You will have the opportunity to team with IBM technical professionals, IBM Business Partners, and Clients. Your efforts will help increase product acceptance and client satisfaction. As a bonus, you will develop a network of contacts in IBM development labs, and increase your productivity and marketability. Find out more about the residency program, browse the residency index, and apply online at: ibm.com/redbooks/residencies.html Comments welcome Your comments are important to us! We want our books to be as helpful as possible. Send us your comments about this book or other IBM Redbooks® publications in one of the following ways: Use the online Contact us review IBM Redbooks publications form found at: ibm.com/redbooks Send your comments in an e-mail to: [email protected] Mail your comments to: IBM Corporation, International Technical Support Organization Dept. HYTD Mail Station P099 2455 South Road Poughkeepsie, NY 12601-5400 Preface xxi xxii Strategic Reuse with Asset-Based Development Part 1 Part 1 Introduction In this part, we introduce you to Asset-Based Development. As shown in Figure P-1, this will also include a discussion of the business drivers, methodology, and associated tooling. Part 1: Introduction Part 2: Reusable Assets •Introduction to Asset-Based Development •Adopting Asset-Based Development •Process and Tooling •Configuring Asset Management •Case Study Overview •Produce, Consume, and Manage Assets •Impact and ROI Part 3: Services •Services as Assets •Produce, Consume, and Manage Service Assets Appendixes •Rational Asset Manager Installation and Administration •Process Integration Part 4: Patterns •Patterns as Assets •Produce, Consume, and Manage Pattern Assets Figure P-1 An overview of the structure of the book © Copyright IBM Corp. 2008. All rights reserved. 1 2 Strategic Reuse with Asset-Based Development 1 Chapter 1. Introduction to Asset-Based Development Software delivery has traditionally faced challenges regarding quality and time to market. As software becomes increasingly intertwined with business success, expectations on the software organization magnify these challenges. In this chapter, we introduce Asset-Based Development as a key mechanism for addressing these challenges. © Copyright IBM Corp. 2008. All rights reserved. 3 1.1 Software delivery challenges Traditionally, software projects have faced challenges regarding time to market and the quality of the resulting solution. Not so long ago, it was taken for granted that investing in a software project provided a business with a positive impact. This line of thinking disregarded the poor track record of software delivery in terms of quality and time to market. However, the assumption of automatic improvement and a willingness to accept failure and unpredictably is no longer the reality of the business world. Much effort goes into ensuring that the software team is in alignment with the overall business - recognizing that these projects need to be driven by and propel the business. More and more pressure is being exerted on the software delivery organization to ensure that projects deliver on time, at expected quality levels, and with a predictable and repeatable schedule. Figure 1-1 provides a view of Business Driven Development - bringing together Business, Development, and Operations. To provide true value to an organization, these three groups must work together and have tools and processes in place to support this collaboration. Business Senior Executive Define Requirements Model the Business Protect IT Operations Manager Architect the Solution Analyst Project Manager Manage Application Support Manage Change & Assets Deploy Implement Architect Test Developer Operations Deployment Manager Tester Development Figure 1-1 Business Driven Development The software organization must be aware of the issues and concerns that face the business. For example, Figure 1-2 on page 5 shows results from a CEO survey conducted by IBM. A key outcome from the survey was that CEOs see innovation as a key to profitable growth. Software plays a key role in supporting business innovation - ideally, allowing the business to be agile and flexible. However, a number of external forces are bearing down on the business and have implications across the organization. So in addition to figuring out how to improve time to market and the quality of our deliverables, we also have to deal with skill shortages, regulatory concerns, increasing expectations from clients, and so forth. Clearly, we need to find better ways to deliver software. 4 Strategic Reuse with Asset-Based Development Figure 1-2 CEO survey results 1.2 The reuse challenge Reuse has often been touted as an approach to solving these issues - ranging from copy and paste of code, reuse of objects, reuse of components, to more recently the reuse of services. However, we still find ourselves running late on our projects (when we do deliver) and having poor quality. So while reuse has been seen as an attractive idea, putting reuse into practice successfully and in a consistent and repeatable fashion has been a challenge. Moving forward, we have options for how we proceed, including: Disregard reuse, because it does not deliver success as consistently and repeatedly as needed. Reevaluate our approach to reuse and discover a better way to leverage this concept. Do nothing. Accept that our current approaches to reuse will eventually work. We need to make sure that we do not dismiss a valuable idea, just because we have not yet reached a point where it can be applied successfully in a predictable and repeatable manner. And although doing nothing is a strategy that has its moments, most times that is not the route to take. Therefore, in this book, we will reevaluate how reuse is approached when planning to develop a strategic reuse program. Over the years, we have taken steps forward in regard to reuse. From the previous brief list, it is clear that creating a service or a component is much better than copying and pasting code. In addition, it is common to see the use of frameworks, such as Java 2 Platform, Enterprise Edition (J2EE) and .NET. Unfortunately, this is not enough to provide shorter project time lines and fewer defects. Chapter 1. Introduction to Asset-Based Development 5 Unfortunately, we often underestimate the effort and forethought needed in creating a successful reuse program within an organization. Successful reuse is not something that happens by accident or by just wishing it to be true. Several aspects that need to be considered include: How do we make reusable assets consumable? How does someone find the reusable asset? When found, how do you use the asset? How can an asset be customized for reuse? Who pays for the creation of an asset? Who pays to maintain and update the asset? What reusable assets do we need to build? Issues, such as those in the previous list, can be thought of as “asset friction”. The higher the friction level, the less likely we are to succeed in asset reuse. Why does someone spend the time in figuring out how to reuse an asset if there is no documentation (or the documentation is of poor quality)? How long can we expect someone to search for an asset before giving up and deciding that it is quicker to build something from scratch? Our goal needs to be to create, use, and manage assets with as little friction as possible. Systematic reuse is defined as: “Systematic reuse is the reuse of assets within a structured plan with well-defined processes and life cycles and commitments for funding, staffing, and incentives for production and use of the reusable assets.”1 Strategic reuse builds on the idea of systematic reuse and sees an organization tie its reuse program to the strategy of the business. Therefore, the strategic reuse program must implement a systematic approach to reuse that enables the organization to deal with expertise shortages, globalization, regulatory concerns, rising client expectations, and so forth. This book is focused on a best practice-based approach to reuse within software delivery, known as Asset-Based Development, that will assist in addressing these issues. We do not contend that this is the “silver bullet” that will fix all of the issues that ail software delivery. However, Asset-Based Development is a key tool that needs to be found within the tool chest of all software development organizations (or at least those that want to succeed). 1.3 Value of using assets In this book, we will look at a wide ranging set of assets. The benefit derived from using a particular asset depends on a range of factors, including the scope of the asset, the number of times that the asset is used, the complexity of the target system with which the asset is associated, the business value associated with the projects that leverage the asset, and a number of other factors. Therefore, it is difficult to provide a answer to the question “What is the value of using assets?” In Chapter 6, “Value, impact, and return on investment” on page 103, we look at the metrics and calculations that you can use to help determine the costs and benefits associated with assets. 1 6 The definition for systematic reuse comes from Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ., which references M. Ogush, “Terms in transition: a software reuse lexicon,” Crosstalk: The Journal of Defense software Engineering, pages 41-45, Dec. 1992. Strategic Reuse with Asset-Based Development In the meantime, rather than just provide an answer of “It depends”, let us take a moment to review examples that we have come across that highlight the impact that reusable assets can have within an organization. These results come from a collection of sources, including IBM internal reuse, IBM client engagements, and experiences from the wider industry. First, let us look at several results reported from the wider industry: In Software Reuse: Architecture, Process, and Organization for Business Success2, Jacobsen et al estimate the following benefits of systematic reuse: – Time to market: 2 to 5 times reduction – Defect density: 5 to 10 times reduction – Maintenance cost: 5 to 10 times reduction Jeffrey Poulin, in Measuring Software Reuse3, proposes that the Relative Cost of Writing for Reuse is 1.5. This means that there is an additional 50% cost when building reusable software. He also proposes that the Relative Cost of Reuse is 0.2. This means that the relative cost to use the asset is 20% of what it cost compared to having to rebuild the solution. In terms of IBM experiences, we can look at a few examples: Leveraging pattern-based engineering, which is covered in Part 4, “Patterns” on page 455 of this book, a client was able to generate over 50% of the code necessary for a J2EE solution. In another case, a composite business service, which is covered in Part 3, “Service Assets in an SOA” on page 333 of this book, was created for handling New Quotes for Home and Auto Insurance. A client was able to reuse this Composite Business Service to achieve the following results: – Increased top-line growth: Number of personal property quotes increased by a factor of ten in one year, without adding staff – Increased asset reuse: 52 percent reuse across initiatives – Reduced operating costs: Experienced reduction in call center traffic with the reduction in phone calls, faxes, and paper-based processes benefiting not just the client, but also reducing costs, improving margins, and enhancing loyalty for partners In terms of internal IBM experiences, we can look at an example of how an internal development team leveraged pattern-based engineering. The development team needed to re-architect a set of servlet-based commands into a set of Web services to support a separation of application logic from presentation. There were over 100 services that needed to be created in this manner. An initial attempt at detailing the steps needed to perform the conversion ended up in a 100 page document. The steps needed to be followed in sequence and required an individual developer four days to follow. A two day effort was put forth in creating a pattern implementation that generated in minutes the service infrastructure and associated test cases. The developers were then able to focus their efforts on adding in the required business logic. 2 3 Software Reuse - Architecture, Process, and Organization for Business Success. Ivar Jacobson, Martin Griss, and Patrik Jonsson, page 7. Measuring Software Reuse. Jeffrey Poulin, pages 25-29. Chapter 1. Introduction to Asset-Based Development 7 1.4 Asset-Based Development Asset-Based Development is defined as: “Asset-Based Development is developing software solutions reusing cohesive, documented software artifacts. It is organizing software development in a way that leverages previous investments, and influences the nature of future investments. It is speeding up development, and reducing cost and risk by reusing assets and artifacts to solve recurring problems.” Which leads to the next question, what is an asset? An asset is defined as: “An asset is a collection of related artifacts that provides a solution to a problem. The asset is customizable through its variability points, meaning those locations within the asset (or more specifically, within the asset’s artifacts) that can be customized.” Figure 1-3 provides a visual depiction of an asset. In Figure 1-3, we can see that we have a number of artifacts with the asset. One or more of the artifacts within the asset might have variability points. In addition, you will find that the asset provides a solution for a specific problem within a given content. Also, the asset will have rules that guide how you can use the asset. Figure 1-3 An asset as a collection of artifacts There are several key ideas on which we need to focus: The artifacts within the asset work together to provide a solution to a problem. Variability points provide us with ways to customize how an asset is applied. More formally, a variability point is defined as: “a location in an asset, specifically an artifact that can be modified or extended as part of being reused. It is a planned for, controlled extension point of the asset.” Building on the idea that we often build rather than reuse, a root cause is that we often overestimate the uniqueness that a problem presents. Having points of variability guides us to start thinking in terms of separating those elements that are static and those that are dynamic when we build a reusable version of a solution. The context in which we reuse a solution is important. Examples of context include: – Development environment – Runtime environment – Reuse scope – Target Asset Consumer 8 Strategic Reuse with Asset-Based Development – Business domain – When in the process the asset is to be used – Where in the architecture the asset is to be used – Dependencies: relationships to other assets – Interfaces provided and consumed – Services provided and consumed – Policies compliant and ignored 1.4.1 Asset management Even if we decide that assets are the right approach, and assuming that we successfully build the assets, we still have to manage the assets. Associated with the management of assets we face a number of issues: Software reuse: – How are my software assets being used? – What cost savings are there? – How can I make sure that my developers have the right, high quality asset easily available? Open source management: – What open source is in use across my company? – Are the legal approvals in place for all use of it? Is my exposure managed? IT Governance: – How do I prescribe and enforce the use of certain architectural standards? – How do I link my project portfolio to my software assets and architecture? Web services/service-oriented architecture (SOA) transformation: – How do I control what projects can create new or access existing service assets? – What assets in my environment use this service? – How do I ensure alignment with architecture, standards, and business goals? 1.4.2 Artifacts within reusable assets At this point, you are likely wondering what sorts of things can be included within a reusable asset. The short answer is that most anything can be used as an artifact within a reusable asset. Several examples of the artifacts that can be packaged and used as reusable assets include: Models Design documents Patterns Web services Frameworks Components Requirements documents Chapter 1. Introduction to Asset-Based Development 9 Test plans Test scripts Deployment descriptors Model templates UML profiles Domain specific languages This is a quite a wide ranging, although not exhaustive, list of artifacts - which makes sense when we think about all of the roles and elements that come together during the delivery of a software project. In addition to the artifacts that form the core of the reusable asset, you will find a selection of additional, supporting artifacts within the asset, such as: Documentation explanations: – How to use the asset – How to customize the asset – The goals, motivation, and purpose of the asset Models that provide a visual representation of the elements involved in using the asset Test artifacts Build artifacts These assets are needed to improve the consumability of the asset. If we do not take the step to make the asset consumable, all of the effort that went into building the asset is for naught. Remember that the value of an asset will vary depending on a number of factors. Later in Chapter 6, “Value, impact, and return on investment” on page 103, we will look at metrics, ROI, and scorecards to help assess the value of an asset. In many cases, the roles, activities, and deliverables associated with Asset-Based Development can be applied generically across reusable assets. However, we do find that Service-based assets and Pattern-based assets stand higher than the other types of assets and require a more detailed examination. 1.4.3 Styles of reuse We have seen that there can be a wide range of artifacts within an asset and that assets can be applied to a range of contexts. Taking a more abstract look at how assets are consumed and used, we have found that there are four major styles of reuse: Black Box: An asset that is not altered by the Asset Consumer Gray Box: An asset that is modified using parameters White Box: An asset whose internals are modified by the Asset Consumer Glass Box: An asset that exposes internals for evaluation and browsing purposes As we build assets for reuse, we will want to keep these reuse styles in mind and use them as guides as we design the asset and as we build the supporting artifacts for consuming the asset. 10 Strategic Reuse with Asset-Based Development 1.4.4 Packaging assets To aid in the storing, finding, and consuming of assets, a mechanism is needed for packaging the asset. The mechanism must allow for the capturing of metadata related to the asset. As depicted in Figure 1-4, the metadata must capture details, such as the solution that the asset provides, guidance about how to use the asset, pointers to related assets, and information that can be used to classify the asset. Figure 1-4 Metadata to be captured for an asset In support of packaging assets, we are able to leverage the Reusable Asset Specification - a standard supported by IBM within the Object Management Group (OMG). 1.5 Asset life cycle Figure 1-5 on page 12 depicts the asset life cycle, including: Asset production: Includes the developing and harvesting of project artifacts to be included in the asset, as well as the packaging of the asset. Asset consumption: Consuming a reusable asset, which includes locating, evaluating, applying the asset, and providing feedback. Asset management: Includes the activity around reviewing and approving an asset, as well as the supporting workflows focused on Repository configuration, reporting, and removing the assets. Asset specification: Describes the content and metadata of an asset to be created and submitted to the Repository. Supporting this lifecyle is Asset Governance, whereby governance is the establishment of: Chains of responsibility to empower people Measurement to gauge effectiveness Policies to guide the enterprise to meet its goals Control mechanisms to ensure compliance Communication to keep all required parties informed Chapter 1. Introduction to Asset-Based Development 11 Figure 1-5 High-level view of the asset life cycle Again, we come back to the idea that successful reuse does not happen by accident. We do not just happen upon reuse and reap the rewards. To succeed, an investment is made in enablement, tooling, process, and governance. 1.6 Asset repositories At this point, we have a basic understanding of what a reusable asset is, what artifacts can be within a reusable asset, and how to describe and package the asset, as well as the asset life cycle. A final piece of the puzzle is the use of a Repository to manage working with the assets. At a high level, an Asset Repository is used to store and manage access to a set of reusable assets in support of the asset life cycle mentioned earlier. An Asset Producer will publish an asset to the Repository when it is ready for review by other people in an organization. After it is published, one or more people will review the asset and will either approve it or request that changes be made. When the asset has been approved, the asset will be made available to other people within the organization who consume assets. The Asset Consumers will be able to download the asset, provide feedback on the asset, or discuss the asset. At a later point, the asset might need to be updated or be retired. Asset Repositories can be specialized to support certain contexts, for example: A Repository can be used to hold just design and development time-related artifacts. A Repository can be used to hold just runtime-based artifacts. A Repository can be specialized to hold assets related to just a certain domain. A Repository can be specialized to hold assets particular to a certain phase within the software development life cycle. 12 Strategic Reuse with Asset-Based Development A Repository can be specialized to hold and manage the assets that define the enterprise architecture for an organization. Figure 1-6 highlights the benefits that are expected when we use an asset Repository, such as Rational Asset Manager. Improve quality and reduce cost and time Promote cross project reuse of assets Manage compliance by governing multi-platform development assets Manage and facilitate reuse of software assets, including Services used in serviceoriented architecture (SOA) development Promote reusable asset communication and sharing across disparate multi-platform projects implementing a workflow to manage the usage, updates, and delivery of assets, avoiding duplication Enforce and monitor integrity of development assets with a definable, enforceable, and auditable process Accelerate delivery of increased quality and reliability applications Unify disparate development teams to enable reuse and eliminate unnecessary rework Enforce and govern architectural standards, access, and utilization of the software assets Figure 1-6 Reuse trusted assets with Rational Asset Manager 1.7 Reuse success factors Adopting Asset-Based Development does require change within an organization. The change includes learning new skills, changes to process, and promoting and living by a new culture within the organization. As discussed earlier, there are a number of strong and compelling reasons why you want to switch to using Asset-Based Development. Having the right process, tooling, and people in place is usually the high-level elements that are referenced in making change successful. However, that is still somewhat ambiguous. A more concrete list of the things that you need to consider to help make reuse adoption successful includes: Management support: As with most initiatives, it is important to have executive support. In the case of reuse, this is critical. However, we also find that the development of reusable assets is most often bottom-up. Therefore, it is important to have top-down support while implementing assets bottom-up. Identifying the right asset to build: Next to management support, this is the next most important factor to consider. In this case, we need to decide what assets must be built. A strategy that only looks at measuring success based on the number of assets in the Repository is unlikely to succeed. The correct approach is to measure success based on the value that assets bring to your organization. When selecting what assets to build, look for recurring problems and best practices that need to be captured and ensure that there is indeed a need and a consumer for the solution. An asset that does not get used provides little value to the organization. Versioning and configuration management: Typically an asset is composed of multiple artifacts. As we build, maintain, and then support assets, it is expected that there will need to be new versions created. We end up seeing that there are two types of versioning that are needed - one to keep track of the versions of the artifacts, and then as we build and create the asset that contains the artifact, we will specify versions for the asset. Chapter 1. Introduction to Asset-Based Development 13 Training for producers and consumers: For reuse to be successful, those people producing assets must have skills in producing assets that are reusable. The Asset Consumers need to understand how to find assets, use them in the environments, and if appropriate, customize the assets for a particular situation. Measuring productivity and quality: Understanding asset usage, asset quality, and the cost and impact of assets is key to the program. Sponsorship and maintenance of assets: Much like a software application, the cost to maintain and support an asset does not end at the first release. There needs to be a plan and support for the continued maintenance of the asset. Communication of asset status to Asset Consumers: The Asset Producer needs to understand where and how the asset is being used. This will assist the producer in prioritizing the repair of defects and how to introduce and manage changes to the asset. Commitment to high quality assets: Without a focus on high quality assets, a Repository will become a junkyard, a dumping ground for any old thing that might be reusable. This environment is unlikely to find success as the consumers of assets quickly learn that it is quicker, easier, and less risky to proceed on their own. Well-understood domains: Assets are meant to contain and represent best practice solutions. To be able to build and support such assets, the Asset Producer needs to understand the domain for the asset. Customizable, coarse-grained reuse: Successful assets tend to have built-in support for customization. In cases where there is unlimited access to changing and customizing the asset, the consumer will find the asset’s flexibility overwhelming and lacking in guidance. Architectures established to create and use assets: Related to understanding the domain, we also need to understand the architectures that are targeted by the assets being built. Process and organizational structure to support reuse: In order for reuse to succeed within the organization, there generally must be a team that focuses on manufacturing assets. The challenge of this is that there are many technology domains for which reusable assets can be created, and it is difficult if not impossible to have one team that has all of the experts needed. Therefore, you generally have a core team that understands the principles of asset manufacturing, and you have visiting experts that join for a time to give guidance on the development of specific asset types. The enterprise needs to support this activity of harvesting expert knowledge into reusable assets, when and where it makes sense to the business. You will see these factors discussed further as we make our way through this book. In addition, these factors are built into the development process supported via tooling and standards. 1.8 Guide to the remaining chapters of this book This book, as shown in Figure 1-7 on page 15, is comprised of four major parts and a set of appendixes. 14 Strategic Reuse with Asset-Based Development Part 1: Introduction Part 2: Reusable Assets •Introduction to Asset-Based Development •Adopting AssetBased Development •Process and Tooling •Configuring Asset Management •Case Study Overview •Produce, Consume, and Manage Assets •Impact and ROI Part 3: Services •Services as Assets •Produce, Consume, and Manage Service Assets Appendixes •Rational Asset Manager Installation and Administration •Process Integration Part 4: Patterns •Patterns as Assets •Produce, Consume, and Manage Pattern Assets Figure 1-7 An overview of the structure of the book Although we encourage you to read the entire book, we also recognize that different audiences have more interest in certain areas than other areas. Therefore, we have a short guide to the contents found within this book: For an overview of Asset-Based Development, including process, roles, tooling, and types of assets, read Part 1, “Introduction” on page 1. For a detailed look at effective asset management, read Part 2, “Reusable Assets” on page 123. If you want to build reusable service-oriented architecture (SOA) service-based assets, read Part 1, “Introduction” on page 1, Part 2, “Reusable Assets” on page 123, and Part 3, “Service Assets in an SOA” on page 333. If you want to build pattern-based engineering reusable assets, we have had excellent results in groups adopting pattern-based engineering as a starting point into an asset program. This starting point has proven to provide a quick time to market, significant ROI, and high quality. Detailed guidance covering pattern-based engineering is provided in Part 4, “Patterns” on page 455: – After you have succeeded with pattern-based engineering, it becomes easier to invest in and launch a larger reuse initiative. As your skills in reuse mature and you build further competency, we encourage you to follow up your patterns experience by reading Part 1, “Introduction” on page 1 and Part 2, “Reusable Assets” on page 123. – If you are going to use patterns to build services, read Part 3, “Service Assets in an SOA” on page 333 as well. For those people, who want to deploy and administer Rational® Asset Manager, then refer to Part 1, “Introduction” on page 1, Part 2, “Reusable Assets” on page 123, and Appendix A, “Rational Asset Manager: Installation and administration” on page 637. Note that a number of sections in the book discuss topics that in real life happen concurrently. Unfortunately, it is difficult to present topics in a book concurrently. Chapter 1. Introduction to Asset-Based Development 15 16 Strategic Reuse with Asset-Based Development 2 Chapter 2. ZYX Electronics case study This chapter introduces the case study that is used throughout this book. This chapter contains these topics: An overview of ZYX Electronics, the company ZYX Electronics business capabilities and challenges Analysis and proposed solution Assumptions © Copyright IBM Corp. 2008. All rights reserved. 17 2.1 Introduction This book uses a single example throughout the book to illustrate the use of IBM tooling and processes to build and manage reusable software assets. ZYX Electronics (ZYX) will be reviewed from an outsider’s perspective, analyzed, and provided with a solution direction to help it achieve higher returns on its software investments through software asset reuse. ZYX Electronics is a fictitious supplier to retail, small business, and corporate customers. ZYX has specific goals and constraints that provide a typical set of challenges for the team implementing an asset reuse approach for software development. 2.2 Overview of ZYX Electronics ZYX Electronics has approached us to assist in building a reusable software asset infrastructure solution to meet specific business and IT goals. As part of our initial discussions with the company, we will interview with the chief officers, CEO and CIO, of the company. The ZYX Electronics organization will be outlined with the interview results to follow. 2.2.1 Organization Figure 2-1 illustrates the Chief Executive Officer’s (CEO’s) organizational chart focusing on Information Technology (IT). Chris, the CEO, has assembled a great executive staff over the years to run the global operations and IT. Chris hopes this team will help ZYX Electronics surpass its competition in value, service, and support for many years to come. Figure 2-1 ZYX Electronics CEO’s organizational chart Cid Oreo, the Chief Information Officer (CIO) of ZYX Electronics, thinks that he has also assembled a great team to evolve the technology department past the deep vertically focused and autonomous development culture currently ingrained within ZYX Electronics into a 18 Strategic Reuse with Asset-Based Development shared and reusable software development environment. Cid wants to reduce software redundancy, to reduce the need for software rework, and to help make IT more agile to the changes in the business environment. Figure 2-2 is Cid’s organizational structure, notably focused on development. Figure 2-2 ZYX Electronics CIO’s organizational chart Within Cid’s department, as outlined in Figure 2-2, a number of team members are involved by the role in which they align. In our example reference application, the ZYX Electronics team members who are most pertinent to the development are listed in Table 2-1. This is not an all inclusive list, but it reflects those who might be referenced in our examples. Table 2-1 ZYX Electronics development team roles ZYX employee Role Description Chris E. Oshman Executive - CEO Chief Executive Officer for ZYX Cid I. Oreo Executive - CIO Chief Information Officer for ZYX Chuck T. Offilgy Executive - CTO Chief Technology Officer for ZYX Victoria Prezzio VP of Development Directs all development functions at ZYX Richard Compliton Director or Risk, Security, Audit, and Compliance Directs all activities within ZYX IT related to risk, security, auditing, and compliance Patricia Moon Portfolio/Project Manager Manages development portfolios and projects across IT Duncan Munchkin Development Manager Manages the development of a software application or component Chapter 2. ZYX Electronics case study 19 ZYX employee Role Description Greg Muldoon GSI Manager Manages global system integration for ZYX Bob Analyn Business (Service) Analyst Analyzes and documents the business processes and functions. Can also help to identify and reuse assets, such as business requirements, processes, components, services, data, and business rules. Al Aarkashan (SOA) Architect Analyzes business needs and goals to create software architectures capable of supporting the business. Key identifier of software development reuse opportunities, both Asset Consumer and producer. Deb Devak (Service) Developer Implement software and service designs into executable code constructs. Identifies software reuse opportunities, both Asset Consumer and producer. Donna Archin Data Architect Designs and implements data storage. Identifies reuse opportunities related to corporate data. Pam Edison Process Engineer Responsible for all aspects of method/process composition and guidance. Irene Devin Service Assembler/Integration Developer Integrates components, services, business rules, and data into executable business processes. Asset Consumer Tammy Archin Test Architect/Manager Designs and manages testing of software assets. Identifies reuse opportunities concerning test plans and test cases, both Asset Consumer and producer. Terry Implemian Service and Process Tester Creates and executes automated and manual software test suites. Rebecca Englo Release/Build Engineer Designs, develops, and manages software releases and automated/manual software builds across IT. Deon Adminio Development Tools Administrator and Source Configuration Management (SCM) Configuration Manager Configures development tools throughout IT; administers the source control systems 2.2.2 CEO interview The CEO of ZYX Electronics, Chris, turns out to have an extremely positive outlook on the company’s future and has told us this about the company: ZYX Electronics is a premier supplier to retail, small business, and corporate customers. The company started in 1935 and has established a well recognized brand and solid brand image. Currently, ZYX Electronics employs 11000 people in 900 offices in six countries. 20 Strategic Reuse with Asset-Based Development Our success is based on a high-touch interaction with customers. Part of this high-touch approach is that customers can use multiple channels to interact with the company. The company wants to offer the best customer service at the lowest cost. ZYX Electronics already has an e-business site with the lowest cost per order in the industry. We recently acquired Jensen, Inc., and this has allowed us to strengthen our corporate customer base. We treat our corporate customers as true business partners. Our goal is to become the most profitable, high-touch company in the industry. Our plans are to: – Pursue aggressive growth while minimizing risk – Optimize our corporate organization to maximize company responsiveness – Maximize our strategic investments in the best Web site in the industry – Establish the best sales force in the industry with global Customer Relationship Management (CRM) and sales-focused call centers Although Chris has a positive outlook about the direction of the company in general, ZYX Electronics faces many of the same pressures exerted upon others in the industry (see Figure 2-3). He expressed concern over the rising customer demands. “Our customers are very satisfied with our efforts as a supplier, but their expectations for better service and delivery continue to rise. Our customers aren’t complacent, and nor can we be.” As noted in Chapter 1, “Introduction to Asset-Based Development” on page 3, CEOs are experiencing pressures, such as rising customer expectations, commoditization of products and services, and a “shrinking world”, which means that they have customers everywhere around the globe, which brings in additional regulatory concerns internationally and which has intensified the competition. ZYX Electronics is no exception to these pressures. Figure 2-3 CEO survey Chapter 2. ZYX Electronics case study 21 Internally, ZYX is also experiencing the pressures of industry technology advances. Chris is concerned whether they can surpass, can keep up with, or will be passed by the competition. As you can see in Figure 2-4, over the last three generations of basic technology advancements in tools, components, and processes, software development organizations are adopting the processes and tools that gain them efficiencies in project performance and success. Projects are creating more reusable assets and involve writing less custom code with more skilled labor. Figure 2-4 Software governance: generations of basic technology advancements1 Chris needs ZYX Electronics to mature out of the 90s by encouraging the organization to adopt these sought after software practices and governance techniques. Keeping the competitive edge through business and IT is foremost to Chris. 2.2.3 CIO interview The CIO of ZYX Electronics, Cid, is slightly less optimistic and clearly has had a difficult time in the last few years. Cid plans to address many of the issues head-on and we are part of that plan. Cid’s view on the company is: We cover multiple market segments through multiple channels. The integration with Jensen, which we started in 2000, is still in progress. We have six call centers, eight data centers, and about 2000 IT staff. We have a mixture of: – “Build versus buy” applications in SAP®, Siebel®, CICS®, and batch applications – Existing applications for core accounting and order entry written in multiple languages, such as Java/J2EE and C++ – Applications that we acquired as part of the Jensen purchase have yet to be integrated – A new CRM system is still being implemented and we must add analytics – Multiple platforms and a heterogeneous topology 1 22 Figure 2-4 data is taken from the presentation “IBM Software Group Executive Forum” used with permission by Dr. Daniel Sabbah, Rational Software. Strategic Reuse with Asset-Based Development We use both our employees and outsourced resources across multiple development locations in several countries, with the US and Europe as core development centers To be frank, we have very little reuse of components and skills across the company. This is something I need to address: – Components are created to address specific application needs, but no one wants to spend the time to harvest what we have or make the effort to understand how to reuse what is available. – We have a tendency to rewrite common componentry over and over again. – We are not using common approaches to common software constructs. As we transition to a service-oriented architecture (SOA), where service reuse is key, we have a series of challenges ahead: – We set up a department to support shared services. HR was first, and SAP Enterprise Resource Planning (ERP) was next, but it took a long time to complete (it came from Jensen). CRM is the current project. – We have a single database, but we still keep information in different schemas according to the area of business to which they relate. There is a resistance to sharing customer information across the lines of business (LoBs). – We have no common terminology and cannot get the LoBs to agree. Before we can implement SOA or make much use of reuse on a large scale, we have to get the LoBs aligned, normalizing their requirements and designing services with the right level of granularity. Of our 2000 IT staff, over 1000 are developers using more than 40 various development tools and environments. We have no end-to-end development methodology. And, governance is a huge issue that we have to address. You have heard about our business technology optimization program. This will support a major development based on SOA, and without proper governance, we will not know what services we have developed, who is responsible for each one, or which applications are using them. Thankfully, we have identified the key business processes that need optimization. We do have a good idea of the current processes in this area and how they have to look. Fixing these key business processes will help us achieve our business goals. As you can see here, Cid understands the internal and external pressures on the ZYX Electronics information technology department to stay current with the demands of the business and to be flexible to respond quickly to its requests. Chris and Cid have discussed the statistics related to corporate technology advances (see Figure 2-4 on page 22). Lagging behind the technology adoption curve is a concern that must be addressed. 2.2.4 Business composition It is important for ZYX Electronics to understand its business structure in a prescribed manner. A well-documented business structure aids in the understanding of business competencies and capabilities and how they are used and reused across the organization. We are not just describing the business as seen by the customer community and how the customer interacts with the organization, but also the structure within the ZYX Electronics organization itself and how the business is executed. Being able to understand the way in which ZYX approaches the execution of its business practices and functions helps ZYX to organize its IT department and to build development practices which align with the true nature of the business. Through service engagements at Chapter 2. ZYX Electronics case study 23 IBM, Global Business Systems specialists help organizations to decompose themselves into an organized view of the business, segmented by business competencies, accountability, and business components. The outcome is called a Component Business Model™. In reviewing Figure 2-5, the Component Business Model Heat Map (the highlighted items are the “hot” areas to be addressed by the business) for ZYX Electronics, you can get a grasp for the company’s key Business Competencies, which are those items listed on the top edge of the diagram as the column headers, that is, Business Administration, Product Management, Customer Acquisition, and so forth. Business competencies are defined as large business areas with characteristic skills and capabilities. Figure 2-5 ZYX component business model heat map In further examination of ZYX’s Component Business Model2, the row headings in the left edge column of the diagram enumerate the scope and intent of activity and decision-making using Directing, Controlling, and Executing. Directing is about strategy and overall direction and policy. Controlling is about monitoring, managing exceptions, and tactical decision making. And Executing is about doing the work. The remaining area within the Component Business Model accounts for ZYX Electronics business components related to business competencies and accountability. Business components are the parts of ZYX Electronics that have the potential to operate independently or as part of the company as a whole. 2 24 Component Business Model information was gathered through Franco Potepan of the IBM World wide SOA Technical Sales team from a presentation developed by Mark Sower and Mary Etta Cope in 2006. Strategic Reuse with Asset-Based Development Looking back at Figure 2-5 on page 24, let us point out a few of the business components that are highlighted as core to ZYX Electronics’s business optimization effort. As a “heat map”, the highlighted items are the “hot” areas to be addressed by the business: Account Administration: – Automating the manual tasks for creating and administering accounts will: • Decrease the cost of account activation by 50% Credit Administration: – Centralizing “siloed” departments and building optimized services to support the converged organization and then negotiating better prices with our vendors while taking advantage of our combined size will help us: • Decrease the negotiated cost (vendor volume discounts) of credit report retrieval by 20% • Automate 75% of all credit report retrievals – Implementing consistent business rules to manage risk will: • Decrease the number of credit report retrievals by 10% Sales: – Converging an optimized cross channel account application process will: • Increase the cross sell ratio to 2.0 • Add 500 new corporate customers • Improve the straight through processing (STP) of applications by 35% • Reduce number of call center calls by the sales force and offices by 30% (account inquiry) Document Management: – Decreasing the number of paper documents processed by task automation will: • Increase electronic applications by 25% Understanding ZYX Electronics in this manner will help the CIO and the development department structure themselves to support the CEO’s goals. In addition, structuring development in this fashion will provide ZYX Electronics a head start in defining reusable business functions. 2.3 Challenges ZYX Electronics, such as many companies, faces challenges with its current organizational capabilities pertaining to software delivery and the reuse of its software and assets. In this section, we will look at the challenges of ZYX Electronics’s business processes as pointed out by its Component Business Model. We will also review IT’s challenges and have Cid’s management team formulate a few thoughts about what will need to be addressed pertaining to the company’s Reuse Strategy. Lastly, we will elaborate on reuse challenges in the software industry. ZYX is not alone in their lack of a Reuse Strategy. Software reuse incurs greater costs than traditional software development. Reuse is not free. It must be planned for and does not occur automatically during normal software development practices. Reuse takes additional time and resources to identify, document, and govern. Chapter 2. ZYX Electronics case study 25 2.3.1 The business As a team, we need to be quite cognizant that the investment in IT is based on providing value to the organization. In addition to ensuring that we are improving the capability and capacity of the IT department, we also need to ensure that we are building solutions that support the business. To this end, let us first look at several of the problems facing the consumer business applications. Opening an account is one of the key business processes targeted for improvement and automation. This process covers four functions in the business: Account sales, account application, account verification, and account activation. We capture the key issues for each business function: Account sales issues are: – Account application processing delays: Customers want to use their accounts as soon as possible. – Account status is unavailable while the account is being set up: The business cannot answer customer queries about how the account application is progressing. Account application issues are: – Complex application forms – Different formats and information required for applications for different products, when the applications can use the same format – Errors due to re-keying of information. Information is re-keyed from paper applications as well as between various, disconnected systems. – Lack of single customer view. There are multiple systems that include customer and account information at the company. The primary system is an operational CRM, which is considered to be the master source of data for customer name, address, and relationship information. Account verification issues are: – No single, consistent view of the customer – Too many customer applications are declined because of different regional credit scoring policies. – Credit checks are faxed or called in to the credit checking agency. This takes too long and is too expensive. – Too many applications are referred for credit checks. Account activation issues are: – Manual updates to multiple systems are required to activate the account. The data is re-keyed into the ERP system, a data warehouse, and a billing system. 2.3.2 Information technology With the business focusing on the “right” competencies and components that add the most value for growth, IT has to address its particular software development and delivery capability shortcomings. Over the years, ZYX Electronics has been focused on monolithic applications, each department autonomous in its development and delivery efforts. Communication across departments has been shaky at best and usually brought about by the business units forcing software application team interaction. 26 Strategic Reuse with Asset-Based Development Let us recap several of the major issues Cid told us in the CIO interview related to software reuse: “To be frank, we have very little reuse of components and skills across the company and this is something that I want to address.” “We have a tendency to rewrite common componentry over and over again.” “As we transition to a service-oriented architecture (SOA), where service reuse is key, we have a series of challenges ahead...(support for shared services)...(shared data)...(LoBs aligned)” “...(for) reuse on a large scale, we have to get the LoBs aligned.” “We have no end-to-end development methodology. And governance is a huge issue that we must address...” ZYX uses 40 plus development tools Cid is deeply concerned about IT’s ability to implement software reuse. Because ZYX has no Asset-Based Development methodology, education on reuse is unavailable. This means skills to identify, create, or reuse assets are lacking. And when reusable software assets are identified, no governance mechanisms are available to determine and document who will be responsible for maintenance, funding, quality of service, monitoring, and so forth. Development staff are not motivated to identify and reuse software assets, either. Most developers instead want to copy a chunk of code to customize as necessary for the application situation. Copying code can cause maintenance nightmares if the code logic was incorrect from the beginning. Cid has serious work ahead of him in order to address these challenges. As we work with Cid to identify the most pressing concerns, we can help Cid develop and focus on a number of key IT objectives: Speed up the delivery of software systems and yet: – Meet or beat the agreed upon delivery dates – Reduce development costs and stay within the agreed upon budget – Deliver high-quality products – Meet business goals and objectives Provide IT assets that are more flexible to the constantly changing needs of business and reusable across application boundaries Restructure IT to achieve the component sharing that we need to add business flexibility, value, and reuse of software assets Integrate development efforts across application boundaries to help eliminate or to reduce writing the same business functions multiple times Determine what Asset-Based Development methodology, governance practices, skills, and expertise that we can acquire, create, or educate to develop a software infrastructure capable of aligning IT with the business and getting the most use and quality of each software asset that we create Cid is determined to upgrade the IT department practices and capabilities in order to positively impact business value in turn helping to drive an increased revenue stream for ZYX. Through these efforts, Cid wants to shorten application time-to-market and improve the quality of all applications. And lastly, Cid wants these applications to incorporate the business functionality necessitated by our customers. Cid wants true IT alignment with the business and with our customers. Chapter 2. ZYX Electronics case study 27 2.4 Scope and approach Chapter 1, “Introduction to Asset-Based Development” on page 3 provided a vision into the challenges behind software reuse, such as making reusable assets consumable and finding the right asset to reuse. The chapter further introduced Asset-Based Development and concepts behind asset management and the life cycle of assets. So far, this chapter has explored the ZYX Electronics organization, provided CEO and CIO interview feedback, decomposed their business structure, and reviewed both the business challenges and IT’s software asset reuse challenges. Now, it is time to bring these two chapters together into something meaning to ZYX Electronics. It is time to scope out the ZYX Electronics asset reuse plans and begin to formulate an approach to resolve their asset reuse challenges. 2.4.1 Scope As described by the CEO earlier in this chapter, the goals are to pursue aggressive growth, provide quick response to changing business needs, and to maximize our strategic investments. The customers expect better service from ZYX. Better service means better software systems delivered on time, in high quality, and functioning as needed. The ZYX Electronics IT department now has to step up its capabilities to respond to the business. Implementing an asset Reuse Strategy is a start, but the employees must be committed in order to make it work. Producing software assets identified for reuse and then reusing them requires dedication, resources, time, and money for it to succeed. In the CIO interview, Cid articulates the need for an end-to-end methodology, software asset reuse and governance, shared services, LoB alignment, and streamlined toolset. Cid is fully aware the challenges ahead and is ready to scope the initiative. First of all, it is not just an IT problem. This is a business problem, too. Introducing the ZYX Electronics organization and Component Business Model was to provide an outline of the business functions or components. Business components can be stand-alone or work together to accomplish a greater need. Components become candidates to be broken down into finer grained functionality that we will call tasks, for simplicity. Tasks perform very specific duties within a software system. At this level, we begin to see greater reuse opportunities where a task can be reused across different components in order to provide identical duty without rewrite. Seen in this way, components and tasks are the more obvious reusable software assets, but they are identified by aligning IT architecture and design with business competencies. At IBM, we call this a Business Driven Development approach. Again, first of all, the business is in the scope of our asset reuse vision. The other side of this scope is, of course, the IT department. IT develops the systems that the business uses to manage its business and the systems that its customers, partners, system integrators, and so forth use to interact with the business. These systems are at the center of the microscope with respect to reuse. And in the midst of both the business and IT, we insert an Asset-Based Development methodology, which guides the organization through asset identification, specification, production, consumption, and management. Asset-Based Development is a work product or instantiation of the Asset Governance processes that are defined by ZYX Electronics. Governance is the critical success factor in Asset-Based Development. 28 Strategic Reuse with Asset-Based Development Reuse can be approached in a number of ways, which we will describe later. At this point, Cid will ask the IT team to look at existing system implementations, as well as at new applications for reuse opportunities. ZYX Electronics is limiting the initial scope of their Reuse Strategy and efforts to: Software requirements: functional and non-functional Architectures and designs, including models, transformations, and patterns Interface specifications and other documentation Specific code constructs and patterns SOA-based services Test plans and test cases The book might not address all of these reuse opportunities, but it is a good list for ZYX to start with and to be aware of in their development efforts. 2.4.2 Approach Cid has scoped the asset reuse effort; now, he must lay out how he intends to approach resolving the asset reuse challenges. From all that we have learned thus far in this book, implementing and enforcing an entire methodology and the tools to automate and measure results in a single sweep across the organization are a guaranteed way not to succeed. People instinctively do not accept change gracefully, especially a lot of change at one time. Approaching this initiative with an incremental and iterative approach, slowly implementing the methods and tools, will provide a much higher chance of success. The ROI will come at a slower pace, but it will increase as the number of reusable assets are identified, developed, and consumable. Before we take on outlining an iterative approach, consider that to meet our objectives and stay within scope, the following points must be kept in mind while developing the approach: Software development methodology End-to-end method for guiding software and systems development Asset-Based Development methodology Guidance in producing, consuming, and managing reusable assets Asset governance to: – Create initial governance plans and document decisions, roles, and responsibilities – Determine how we will implement the plans and decision rights – Implement the plan through process education, mentoring, and automation – Measure reuse activity, assess cost, and ROI Streamlined tools: – Store, search, and retrieve reusable assets – Enforce review processes and asset life cycle – Reports to measure statistics, such as usage, searches, and reviews – Reports for auditing assets – Make it easy to produce and consume reusable assets Skill growth through education: both methodology and tools Chapter 2. ZYX Electronics case study 29 Each item in the list aligns with the key challenges that Cid revealed during the original CIO interview, which we described earlier in the chapter. And, each item impacts the staff. As Cid is planning the approach, Cid must be sensitive to the changes that the department will be experiencing. Process and tool adoption taken slowly and methodically from project to project can have a significant positive impact on software results and quality. Conversely, both process and tool adoption can be productivity inhibitors if no education and mentoring are provided to advance individual skills. Cid can now have the management team begin to lay out a Reuse Strategy implementation plan. He reminds the team that the company has budget constraints within which to work and that he is a little sceptical whether reuse will work well for ZYX given the currently ingrained culture. Chuck, ZYX CTO, and Victoria, VP of Development, direct a team from the project management office to create an iterative and incremental (phased) asset reuse approach. They will need to report back to Cid on the perceived benefits and ROI that ZYX will receive from this effort. The approach that they develop will be iterative in that it will build the team’s skills and capabilities slowly at a satisfactory maturation rate within increments (phases) over several phases until the entire defined solution is deployed. The outline of the plan is: Establish a methodology team to establish a ZYX software development (SD) approach using the Rational Unified Process (RUP). This “virtual” team will be made up of existing personnel, who are the most skilled in process. These employees will establish process requirements for ZYX, customize a software development process to meet their requirements, provide process education, and mentor project teams along the way to reduce the risk of failure. Establish an Asset-Based Development and governance (ABD/G) team to establish the ZYX approach. This “virtual” team will be made up of existing personnel, who are skilled software architects from around IT. The team will establish ABD and governance requirements for ZYX using the Rational ABD and Asset Governance method, provide education, and mentor project teams to reduce the risk of failure. Implement streamlined tooling to support our methodology, governance, SOA, and asset reuse efforts. Continue building out our development capabilities to support the adoption of SOA with a business fabric that can support our Component Business Model and the dynamic nature of our business, while reusing our existing software assets to help reduce the cost of new applications. Pilot a project to focus on process usage and refinement, tool selection, automated metrics gathering, and building the skills of our development team at producing, consuming, and managing reusable assets. Using this level of plan, the management team is able to build out a detailed phased plan over several years. Before presenting the details, though, the team wants to ensure that Cid is aware of the benefits that he will receive by implementing the team’s plan. 2.4.3 Benefits Cid and the management team will be moving forward on their plans. He has met with the CEO and CTO to discuss the plans, and they agree that a reuse initiative will be a lot for the business to consume, but it will have significant ROI in the long term. 30 Strategic Reuse with Asset-Based Development As the development team becomes skilled in asset production and consumption, ZYX will: Reduce the costs of new application development and existing application maintenance significantly through reuse instead of rewrite Develop repositories of searchable software assets reducing the time to locate and reuse the asset, in turn helping to reduce the cost of implementing that piece of application functionality Increase the standardization of application “look and feel”, providing a more consistent experience to our users Increase application dependability and quality, because the software components, services, models, and frameworks will have been proven and tested already in working systems Focus on leveraging individual expertise by bringing the employees together to build or harvest the reusable assets in their realm of knowledge Bring our applications to market earlier, therefore, capitalizing on early entry in the market to bring more sales and revenue to the company Reduce the time necessary to reuse a software asset as we refine how to reuse the asset from project to project, therefore, estimating projects with greater accuracy Our continued efforts to develop our SOA capabilities will play a larger and larger part in our Reuse Strategy and deliver even more benefits than we have described. Our increased capabilities will allow us to: Change business systems, which dynamically decreases the time to application availability Decrease the time-to-market by deploying applications quicker Choreograph multiple deployed business services and Composite Business Services together to produce the “right” business solutions more efficiently Preserve existing IT assets by encapsulating them into dynamic business services Enforce consistency of business and IT behavior across the company Control IT costs and help make IT more efficient As Cid can see, enabling ZYX Electronics software reuse capabilities can yield multiple benefits to the company. The remainder of this book will focus on many of the ways that you can make use of processes and tools to enable your software reuse capabilities. 2.5 Assumptions In the following chapters of Part 1, we will discuss tool selection, the Asset-Based Development method, Asset Governance, and metrics and ROI. In an effort to limit the scope of this book, we have made the following assumptions about our work at ZYX Electronics: ZYX Electronics is not undergoing a complete organizational business transformation. We undertake what RUP® calls business improvement - the techniques that a company uses to design its business according to specific goals involving trimming costs and lead times and monitoring service and quality. We do not assess the organizational structure; although, we have discussed it in detail, and we do not make changes to that structure. Chapter 2. ZYX Electronics case study 31 We do not assess the business structure; although we have discussed it in detail, and we do not make changes to that structure. We limit ourselves to analyzing a subset of the ZYX Electronics business problems but only in respect to the topic of the book, Asset-Based Development. Lastly, we do not offer or provide a full process and tools implementation. The purpose is to provide guidance in helping you understand and begin to plan your implementation. 32 Strategic Reuse with Asset-Based Development 3 Chapter 3. Tools in support of Asset-Based Development When applying reuse within an organization, we want to leverage automation, tooling, and best practice guidance. IBM creates a number of tools that can be used to fill these needs. In this chapter, we will look at these tools, providing an overview of the tool and the role that it plays in a strategic reuse program. If you are already familiar with these tools, you can safely skip ahead to the next chapter. For those unfamiliar with the tools and the roles that they play, this chapter is a quick read and will help you understand how the tools come together in Asset-Based Development. 3.1 Overview of IBM tools When looking at the tools involved in Asset-Based Development, we quickly find that there are a great number of tools. As you might recall from our earlier discussion, the artifacts that can be contained within an asset are both numerous and wide-ranging. Although not listed, there is an equally long list of tools that can both produce and consume artifacts associated with reusable assets. In this chapter, we will focus on a subset of the available products from IBM. Figure 3-1 on page 34 provides an overview of the subset of tools we will discuss, as well as several relevant roles. At the center of this discussion is the Rational Asset Manager, a key product that assists us with consuming, managing, and governing the use of assets in the enterprise. We can look at the tools from a number of perspectives, including the scope and capabilities of the tool or the role using the tool. Regardless of the perspective that we choose, it is important to note that the tools, even when supporting a number of roles, do not live and operate in isolation. © Copyright IBM Corp. 2008. All rights reserved. 33 Figure 3-1 Tools, tasks, and roles Process management FOCUS Tooling selection to support software innovation and IT and Business alignment is a critical success factor. As shown in Figure 3-2, we can look at the tooling and process needs of the organization from both a scope and focus perspective. If the selected tooling does not provide alignment, control, and efficiency, we end up with barriers to innovation and an inability to align with the business. Manual, error-prone processes with poor coordination and automation Brittle, inflexible architectures with unreliable integrations Project management Software delivery Resource availability Lack of alignment between business needs and software results Lack of traceability between requirements Lack of visibility and deployed solutions and accountability Chronic project management problems Poor software quality Development productivity/turnover SCOPE Individual Team Figure 3-2 Barriers to innovation 34 Strategic Reuse with Asset-Based Development Organization Business 3.2 Eclipse Eclipse is a platform engineered to build integrated Web and application tools for development. The platform encourages rapid development of integrated features based on a plug-in model. Eclipse is more than a foundation for development, it is: A Java development environment: – The Java development environment in Eclipse makes you productive by automating mundane and time-consuming operations. It integrates with advanced tools to help you generate, edit, and navigate your Java code. – The platform handles the logistics of finding and running the right code. The platform user interface (UI) provides a standard user navigation model. Each plug-in can then focus on doing a small number of tasks well. A tool integration platform Eclipse is a foundation or technology platform for tool integration. Think of it as a home for tools. It brings together designing, programming, testing, and drawing tools. As you work your way through this chapter, note that a number of the tools leverage Eclipse as their underlying platform. As a result, the user interface is consistent across the tools; the tools support multiple platforms; and, it is possible to integrate other components into the products. An open source community Eclipse.org is a group of technical professionals who use and produce not only the basis for tool integration, but also a set of tools integrated on that base or platform. Eclipse is an open source project that delivers a tool integration platform and tools in a package called the Eclipse SDK. More information regarding Eclipse can be found on the Web site: http://www.eclipse.org 3.3 Rational Modeling Platform The Rational Modeling Platform contains a set of related Model Driven Development tools. The tools share a common set of features, as well as specializations depending on role and target applications. The three products that comprise the platform include: Rational Software Architect: IBM Rational Software Architect is an advanced model-driven development tool. It leverages model-driven development with the Uniform Modelling Language (UML) for creating well-architected applications and services. It includes all of the features of IBM Rational Application Developer for integrated design and development experience and exploits the latest in modeling language technology, enabling flexible modeling across a variety of domains, including UML 2, UML-like notation for Java, and more. Rational Software Architect extends the Eclipse 3.2 open and extensible software development environment and enables flexible model management for parallel development and architectural refactoring, for example, split, combine, compare, and merge models and model fragments. Rational Software Architect eases the transition between the architecture and code with model-to-model and model-to-code transformations, including reverse transformations, along with design-to-code experience for Java/J2EE, Web Services, service-oriented Chapter 3. Tools in support of Asset-Based Development 35 architecture (SOA), and C/C++ applications. It includes transformations to support the development of SOA solutions and more. Rational Software Modeler: Rational Software Modeler provides a subset of the capabilities of Rational Software Architect, the most notable of which is the exclusion of the features provided via Rational Application Developer. In addition, the pattern implementations provided in Rational Software Architect are not found in Rational Software Modeler; however, the tooling to build your own pattern implementations is provided. Rational Systems Developer: Similar to Rational Software Modeler, Rational Systems Developer provides a subset of the capabilities of Rational Software Architect. It also does not include any features provided by Rational Application Developer. However, it does include a number of pattern implementations that you can leverage in working with Java and C/C++ development. 3.3.1 Rational Application Developer Rational Application Developer is the tool for developers; it includes all of the development features, such as Web development, J2EE development with EJBs, Web services development, JavaServer™ Faces (JSF) development, UML visualization, component automated test, and runtime test environments, such as WebSphere Application Server. 3.4 WebSphere Business Modeler IBM WebSphere Business Modeler Version 6.0 provides business professionals with easy-to-use tools to design, improve, and communicate complex business processes. Tailored for individual user requirements, IBM WebSphere Business Modeler Basic offers entry-level modeling capabilities that allow companies to capture processes at a lower cost per user. IBM WebSphere Business Modeler Advanced provides advanced modeling capabilities for advanced users and delivers sophisticated simulation and optimization capabilities that enable you to analyze the operational efficiency of business processes and potential business results - all before committing resources to development and deployment. Through WebSphere Business Modeler Advanced and WebSphere Business Modeler Basic, you can model the processes that can help you reap the full benefits of on demand business and the flexibility that you need to support and enable the world of integrated business processes. IBM WebSphere Business Modeler Publishing Server Version 6.0 enhances WebSphere Business Modeler by providing a way to publish business processes and related business information, such as organization diagrams, to a secure Web site. This capability supports the development, documentation, and dissemination of business process models on an enterprise and worldwide scale. 3.5 WebSphere Integration Developer WebSphere Integration Developer is a common tool for building SOA-based integration solutions across WebSphere Process Server, WebSphere Enterprise Service Bus (ESB), and WebSphere Adapters. It simplifies integration with rich features that accelerate the adoption of SOA by rendering existing IT assets as service components and encouraging reuse and efficiency. 36 Strategic Reuse with Asset-Based Development WebSphere Integration Developer enables integration developers to assemble complex business solutions - processes, mediations, adapters, or code components - requiring minimal skills. It enables the construction of process and integration solutions using drag-and-drop technology without requiring a working knowledge of Java. The rapid assembly of business solutions is possible by wiring reusable service components into an executable business process and enabling Business-Driven Development through integration with WebSphere Business Modeler to import models for rapid implementation. 3.6 Rational RequisitePro RequisitePro® is a requirements management tool. It stores requirements (and related information) in an underlying database and provides an easy-to-use (client or Web) interface to sort, search, filter, and track dependencies between those requirements. RequisitePro allows for the description of requirements in Microsoft® Word, which can then be stored in the RequisitePro database (using RequisitePro menus from under Microsoft Word). The database stores requirement details (attributes, links to other requirements, discussions, and revision history) while documents display the requirement text and context. Rational Software Architect allows for RequisitePro requirements to be browsed, modified, or created (from within Software Architect, under the Requirement perspective). More importantly, design elements can be created from requirements, or existing design elements can be linked (traced) to requirements. RequisitePro allows you to record how design decisions address requirements and then to analyze a requirements trace, including assessing the impact on the design of a change in the requirements. In addition, RequisitePro can be used in combination with WebSphere Business Modeler to ensure that the needs of the business are being captured and understood. When starting a project, the business, including executives, analysts, and architects, can use RequisitePro to record the high-level business needs. The high-level business needs can take the form of goals, including objectives and strategy, as well as business rules. As the project moves forward, you can use WebSphere Business Modeler to add details to the business goals, modeling them as processes, and then use simulation and cost comparison reporting to help the business understand the return on investment (ROI). RequisitePro can be used to add business operational details, capturing both functional and non-functional requirements. A key aspect of capturing these additional details within RequisitePro is to find a balance between the needs of the business and the architecture. 3.7 Rational ClearCase IBM Rational ClearCase® provides management and control of software development assets. It provides controlled access to software development assets across the full life cycle. Sophisticated version control, automated workspace management, parallel development support, baseline management, and build and release management improve productivity and operational efficiency. Heterogeneous, cross-platform support for distributed, mainframe (IBM z/OS®) and midrange (IBM i5/OS®) development enables platform flexibility and enterprise-wide application Chapter 3. Tools in support of Asset-Based Development 37 development. Security features, such as user authentication and audit support, help meet internal and external compliance requirements. ClearCase scales from small workgroups to geographically distributed enterprises. It is accessible through local, remote, and Web interfaces, and leading integrated development environments (IDEs), including IBM Rational Application Developer, IBM WebSphere Studio, Microsoft Visual Studio® 2005, and the Eclipse framework. ClearCase integrates seamlessly with IBM Rational ClearQuest® for a comprehensive software change and configuration management solution and contains in-depth integration with requirements, development, and build, test, and deployment tools to provide a complete end-to-end solution to meet current and future needs. 3.8 Rational ClearQuest IBM Rational ClearQuest automates and enforces development processes for improved effectiveness. ClearQuest offers process automation, reporting, defect and change tracking, and life cycle traceability for better insight, predictability, and control of the software life cycle. Predefined workflows ship with ClearQuest and can be easily customized to meet specific needs. Real-time status and reporting improve visibility, and defect and change tracking manage issues throughout the project life cycle. ClearQuest manages all development and test assets in a single integrated solution that improves communication and coordination between development and testing teams. The product is accessible through local and Web interfaces and leading IDEs, including IBM Rational Application Developer, IBM WebSphere Studio, Microsoft Visual Studio 2005, and the Eclipse framework. 3.8.1 WebSphere Studio Asset Analyzer IBM WebSphere Studio Asset Analyzer for Multiplatforms, Version 5.1 helps you maintain, extend, and transform existing applications through rapid application understanding and impact analysis and provides management information for making informed decisions about application projects. You can use the information provided by this product to modernize your existing enterprise assets. WebSphere Studio Asset Analyzer scans mainframe and distributed software assets, storing related application information in a DB2® Repository that resides on the mainframe. You do not have to download your mainframe application inventory to a workstation, nor do you have to upload your distributed application inventory to a mainframe. WebSphere Studio Asset Analyzer scans the source where it resides, whether in partitioned data sets (PDSs) or partitioned data sets extended (PDSEs) on the mainframe, directories on Windows® or AIX® systems, or in one of a number of Source Configuration Management (SCM) systems. WebSphere Studio Asset Analyzer also includes metrics for mainframe assets, such as Halstead and McCabe’s Cyclomatic Complexity and Essential Complexity, as well as more application-level reports. Together, these metrics provide the information that you need to help you understand the relative complexity of applications and to estimate the effort required for a given project. Also, with Version 5.1, you now have the ability to use the open-metrics framework of WebSphere Studio Asset Analyzer to programmatically calculate and store your own metrics with the inventory. 38 Strategic Reuse with Asset-Based Development 3.9 Asset repositories Next, we discuss asset Repository products. 3.9.1 Rational Asset Manager Rational Asset Manager is a collaborative software development asset management solution that helps organizations to create, modify, govern, find, and reuse any type of development assets, including services as part of a service-oriented architecture (SOA) initiative and systems development assets. It reduces software development costs and improves quality by facilitating the reuse of all types of software development-related assets. Rational Asset Manager reduces development time and cost and enhances architectural integrity through the reuse of software assets. It unifies disparate teams and eliminates rework by providing secure asset tracking and by managing asset and artifact interdependencies and relationships. The software also helps you to monitor asset integrity and utilization through a defined, enforceable, and auditable process that includes fine-grained permissions and review approval workflows. Secure intellectual property sharing in Rational Asset Manager helps lower costs and decrease the complexity of compliance. Rational Asset Manager improves governance with easy discovery and federated search across the SOA life cycle and stores information that is useful for collaborating on the software development of assets. To support asset management scenarios, Rational Asset Manager manages asset metadata, such as the asset’s name, description, version, and state, as well as the name, description, version, and reference (or location) of contained artifacts. To help you reduce development costs and time while improving software quality, Rational Asset Manager supports the Reusable Asset Specification, an industry standard from the Object Management Group. Rational Asset Manager integrates with other Rational and IBM software tools, including IBM Rational ClearCase, IBM Rational ClearQuest for change management, and IBM Rational architecture management software for asset development. To help you manage SOA assets at run time, Rational Asset Manager closely integrates with IBM WebSphere Service Registry and Repository software. Rational Asset Manager is focused on managing software development assets, but because the Reusable Asset Specification can support any type of metadata artifact, relationship, or attributes, Rational Asset Manager can also be used to manage more generic asset types that are related to software development. Therefore, Rational Asset Manager can also be used to manage both Enterprise Architecture business and technical assets. 3.9.2 WebSphere Service Registry and Repository WebSphere Service Registry and Repository is an industrial-strength tool that helps you achieve more business value from your SOA by enabling better management and governance of your services. Through its robust registry and Repository capabilities and its tight integration with IBM SOA Foundation, WebSphere Service Registry and Repository can be an essential foundational component of your SOA implementation. WebSphere Service Registry and Repository enables you to store, access, and manage information about services and service interaction endpoint descriptions (referred to as service metadata) in an SOA. This information is used to select, invoke, govern, and reuse services as part of a successful SOA. This service information includes traditional Web Chapter 3. Tools in support of Asset-Based Development 39 services that implement Web Services Description Language (WSDL) interfaces with SOAP/HTTP bindings as well as a broad range of SOA services that can be described using WSDL, XML Schema Definition (XSD), and policy decorations, but might use a range of protocols and be implemented according to a variety of programming models. You can use WebSphere Service Registry and Repository (WSRR) to store information about services in your systems, or in other organizations’ systems, that you already use, that you plan to use, or that you want to be aware of. For example, an application can check with WSRR just before it invokes a service to locate the most appropriate service that satisfies its functional and performance needs. This capability helps make an SOA deployment more dynamic and more adaptable to changing business conditions. WebSphere Service Registry and Repository includes: A service registry that contains information about services, such as the service interfaces, its operations, and parameters A metadata Repository that has the robust framework and extensibility to suit the diverse nature of service usage WebSphere Service Registry and Repository does not manage all service metadata, and it does not manage service metadata across the whole SOA life cycle. It focuses on a minimalist set of metadata that describes capabilities, requirements, and the semantics of deployed service endpoints. It interacts and federates with other metadata stores that play a role in managing the overall life cycle of a service. 3.9.3 Rational Asset Manager compared with other products Next, we discuss Rational Asset Manager compared to other asset management frameworks. Homegrown asset management frameworks as spreadsheets Today’s companies are already trying to share components and assets within their organizations; many companies have reusable assets but lack effective strategies to reuse them. Most companies use spreadsheets to track these assets or have homegrown asset management frameworks that are based on asset storage on local or shared drives, all of which can lead to compliance issues. These spreadsheets are mostly oriented to maintain just a catalog of the assets developed by certain departments and the changes made to the assets, but are not oriented to implement an Asset-Based Development process at the enterprise level. Spreadsheets are usually managed by an individual, who has manual control of the assets developed, but the individual does not have any control over the asset development (permissions, approvals, restrictions, and so forth). Spreadsheets simply do not scale as the number of assets and asset versions increases, or if teams are globally distributed. Plus, custom-built solutions are expensive to maintain and enhance. Rational Asset Manager provides a scalable and cost-effective solution for reusing software by providing a framework that allows you to define, create, share, and manage assets across your organization, either locally or globally, while helping to secure your intellectual property. 40 Strategic Reuse with Asset-Based Development Project collaboration solutions as Wiki pages Project collaboration solutions as wiki pages are starting to be quite popular these days. They allow users to create and update Web page content without having to use an external Web editor tool and requesting specific permissions. Users just need to perform simple operations and introduce text syntax to create new pages dynamically. Wikipedia is an example of a free encyclopedia that is built collaboratively using wiki pages. Wiki pages are a good option to encourage the democratic use of the Web and promote user participation and group communication, but they are not oriented to be used as a multi-user asset Repository across the enterprise. Generally, there are no review processes in place before modifications are accepted, and the Web pages are usually opened to a lot of users without specific security restrictions. Wiki pages do not provide extended capabilities around information capturing, security, indexing, or archiving information, and the search depends on whether the wiki engine is using a database. Compared to Rational Asset Manager, which is a tool that is oriented to produce, consume, and manage asset reuse, wiki pages are oriented just to publish exchange information between communities but without following a standard way to organize this information, without implementing complex security restrictions and constraints, and without following a formal approval life cycle to validate how the information is entered and its quality. WebSphere Server Registry and Repository The user communities and content managed by Rational Asset Manager software and the WebSphere Service Registry and Repository system are rather different. Rational Asset Manager is a Repository that is oriented to develop any kind of assets, and WebSphere Service Registry and Repository is a Repository that is oriented to manage information that is useful for the runtime operation of the services as Figure 3-3 on page 42 shows. Chapter 3. Tools in support of Asset-Based Development 41 Figure 3-3 Comparing Rational Asset Manager to WebSphere Service Registry and Repository Many assets managed by Rational Asset Manager have nothing to do with deployed services. And not every deployed service automatically is an asset that an enterprise might want to reuse and load into Rational Asset Manager. However, there are a number of artifacts that can be of interest to both user communities: basically any document (for example, WSDL, XSD, and WS-Policy) stored in WebSphere Service Registry and Repository software can be of interest as part of a reusable asset; WebSphere Service Registry and Repository users might be interested in understanding the design specifications, implementation, or documentation about a specific service. Having two repositories for development and run time is the right strategy for not penalizing the performance of the runtime environment. The users of both repositories are different, and service runtime information must not be penalized by searches or any other activity that is performed by users accessing the development information of services. Both tools are integrated so that assets managed by Rational Asset Manager that contain Web service definitions can be published to the WebSphere Service Registry and Repository, and WebSphere Service Registry and Repository information can be replicated into the Rational Asset Manager Repository. For a detailed discussion about the differences and relationship between both products, refer to Chapter 12, “Introduction to service assets” on page 335. Rational ClearCase: A software configuration management Repository Software configuration management repositories, such as Rational ClearCase, provide management and control of software development artifacts. These repositories are used by the software development team to control the parallel development and deployment of individual artifacts that will be later integrated to build software applications. 42 Strategic Reuse with Asset-Based Development Both Rational Asset Manager and Rational ClearCase have the concept of “version”, but it represents different things for each tool: Rational ClearCase controls and manage versions of individual artifacts or files (file elements for Rational ClearCase). Rational Asset Manager controls and manages versions of individual assets. Assets will be composed of individual artifacts (that can be under the control of Rational ClearCase or not) and additional metadata information to complete the asset information, such as name, description, asset type, to which category the assets belong, and so forth. All of this information will be packaged following the Reusable Asset Specification (RAS) standard. So, there are generally two major levels for versioning with assets: the asset version and the artifact version. The artifact version is typically managed and dictated by the source control management system (Rational ClearCase), whereas the asset version is generally dictated by the policies of the enterprise and managed by the Repository. Figure 3-4 illustrates the two major levels for versioning. Figure 3-4 Versioning levels across repositories Because the asset has information in addition to the individual artifact versions, although the artifact versions remain the same, a structural change in the metadata information in the asset can force the creation of a new version in the asset. For example, although the spring.jar and license.txt files in Figure 3-4 do not change their versions in Rational ClearCase, if the Spring asset has a new relationship with other assets, this will require a new version of the asset although the artifact versions remain the same. In addition to the two types of version concepts that managed by both types of tools (individual artifacts compared to assets), SCM repositories compared to Rational Asset Manager are not oriented to: Facilitate searches to the user. Extend artifact metadata with additional information. The artifact is just the file with information that is just oriented to controlling changes. Establish relationships to facilitate impact analysis. Chapter 3. Tools in support of Asset-Based Development 43 And Rational Asset Manager compared to SCM repositories is not oriented to: Create detailed reports comparing different versions of assets. Rational Asset Manager logs the history of the changes made to the asset, but it is not oriented to compare changes between different versions. Manage individual files without a real value to the user. But Rational Asset Manager and Rational ClearCase are integrated, and clients using both tools can benefit from this integration. This integration recognizes when artifacts that are submitted to Rational Asset Manager as part of the asset content are checked into Rational ClearCase, and it maintains a reference. When a user wants to download a version of the asset, Rational Asset Manager will use this information in providing the user the option of reconnecting the artifacts to Rational ClearCase. 3.9.4 IBM Asset Repository strategy IBM offers a number of metadata repositories, each targeted toward a specific user community, each supporting the tasks and processes that are important to that community, and each offering the content relevant to those tasks and communities. Examples are: Rational Asset Manager: This Repository is used in the development space that helps to create, modify, find, govern, and reuse any type of development assets, including services and business assets. Rational ClearCase: This software configuration management Repository provides management and control of individual software development artifacts. It provides sophisticated version control, workspace management, and parallel development support. WebSphere Service Registry and Repository: This Repository is used in the run-time space for managing SOA run-time-relevant metadata. WebSphere Metadata Server: This Repository is oriented for users who are concerned with the metadata related to “data”, for example, data architecture, data warehousing, and enterprise information integration. Configuration Management Database (CMDB): This Repository is for managing system and service management metadata. IBM strategy is to focus each type of Repository to one specific community of users, automate the exchange of information among them, and have the capability to conduct federated queries across them. As we discussed earlier in this chapter, these repositories can also, and will likely, be used in combination. Note: Additional details about the integrations and workflow between the repositories can be found in Appendix A, “Rational Asset Manager: Installation and administration” on page 637, Chapter 9, “Produce reusable assets” on page 237, and Chapter 15, “Managing service assets” on page 425. 44 Strategic Reuse with Asset-Based Development 3.10 Process and methodology support Next, we discuss process and methodology support products. 3.10.1 Rational Method Composer Rational Method Composer is an Eclipse-based framework for process and method authoring, targeting primarily process engineers who want to tailor or create method contents and processes. For example, Rational Unified Process (RUP) for SOA has been codified using Method Composer. Method Composer is the product that replaces RUP and RUP authoring products, such as RUP Process Builder. Method Composer ships with process plug-ins, including: Classic RUP RUP for Business Modeling RUP for Service-Oriented Modeling and Architecture (SOMA) Method Composer is based on the open source Eclipse Process Framework (EPF). The main difference between Method Composer and Process Framework is around process contents, such as the ones just listed. Process Framework only contains limited contents whereas Method Composer has a lot. Also, Method Composer provides additional integration capabilities with other Rational products, such as Rational Portfolio Manager. Method Composer implements the Unified Method Architecture (UMA) standard, submitted to the Object Management Group (OMG) as Software Process Engineering (SPEM) V2.0. With this standard, everyone uses the same terminology around methods and processes. For example, SPEM defines what tasks, activities, roles, and guidance are. Method Composer contents are packaged as plug-ins. A new plug-in can be based on an existing one. For example, RUP for SOMA is based on RUP and provides variations (contributions, extensions, or replacements) for service orientation. The main output of Method Composer is an HTML site (formerly RUP site) with method and process contents that is accessible from a Web browser and from within tools of the Software Development Platform (SDP), such as Rational Software Architect. Also, Method Composer bridges the gap between process engineering and project management by providing the capability to export processes as Rational Portfolio Manager or Microsoft Project templates. Important: Throughout the course of this book, we leverage content from the Asset-Based Development V3.0 and Asset-Based Development Governance V1.0 Rational Method Composer plug-ins. You can download these plug-ins using the following links: For use with Rational Method Composer V7.1: http://www.ibm.com/developerworks/rational/downloads/06/rmc_plugin7_1/#16 For use with Rational Method Composer V7.2: http://www.ibm.com/developerworks/rational/downloads/07/rmc_v7.2/#15 Chapter 3. Tools in support of Asset-Based Development 45 3.10.2 Rational Portfolio Manager Rational Portfolio Manager is a project portfolio management tool that is targeted at business executives to support them in making decisions. Portfolio Manager helps make business decisions in the areas of (sorted in chronological order): Business priorities, alignment, and trade-off: These activities involve evaluating initiatives based on internal performance and external demand. Then, trade-off decisions are made regarding what to pursue and when. Business alignment is key for SOA, and Portfolio Manager helps select the right initiatives. For example, Portfolio Manager provides a consistent way to look at demands with work and proposal templates. It also provides analytical tools (for example, investment maps and scorecards) to help decide what mix of initiatives makes the best aligned portfolio. Also, initiative approvals are auditable, which supports compliance. Source or resource: Following the prioritization of initiatives, the next decision is about identifying the solution needed to meet the initiative’s goal. Typically, a particular initiative can involve multiple projects. Decisions are made about using internal resources or outside vendors. Portfolio Manager helps improve resource utilization in geographically distributed teams. Also, it helps you understand forecasted resource capacity (for example, supply and demand analysis, what-if analysis, demand scheduling, and real-time resource assignment). Build or buy and deployment-ready: Knowing what resources are available, a decision maker can then decide whether to build from scratch, evolve an existing application, or buy a packaged application. Also, because multiple projects are running, there is always the need to integrate (projects, people, and so forth), so that, at the end, a solution can be delivered to support the identified initiatives. Portfolio Manager supports this execution through its integration with Method Composer, which allows project teams to follow consistent methods and processes. Portfolio Manager also provides access to all project information (including historical data from past projects) through its centralized Repository. Finally, Portfolio Manager provides an integrated way of assessing risks, issues, and changes. Value analysis: It is then critical to know whether the selected initiative brings the intended value to the business. Portfolio Manager provides constant access to measurements and control throughout development. Using Portfolio Manager, IT can prove to the business how much value it delivers (for example, calculating earned value to predict project performance, providing warnings through trends, and so forth). Regulatory compliance: Last but not least, businesses have to ensure regulatory compliance, and Portfolio Manager helps by providing graphical workflows that enforce and automate decision rights and responsibilities, as well as scorecards that show project compliance. Portfolio Manager is important for governance, because it helps executives make business decisions so that an organization’s portfolio is best aligned to business priorities. Also, it helps define and enforce decisions correctly, which is a central part of governance. 3.10.3 Rational ProjectConsole IBM Rational ProjectConsole™, part of IBM Rational Team Unifying Platform™, automates reporting on project status by dynamically creating a project Web site with a graphical dashboard based on data that you collect. This saves you the time of having to build, update, and maintain a team Web site, plus the time and effort of manually gathering status updates. Rational ProjectConsole collects both standard and custom metrics from your Rational Team Unifying Platform and third-party products, presenting the results graphically so that you can 46 Strategic Reuse with Asset-Based Development easily assess project progress and quality. This allows you to better predict which areas will require special attention and where to focus scarce resources to stay on schedule. More importantly, ProjectConsole enables you to make decisions based on quantitative analysis, rather than subjective status reports. As discussed in Chapter 6, “Value, impact, and return on investment” on page 103, it is important to be able to capture and track metrics to support a reuse program. Going into the program, you will need a baseline in regard to the time that it takes to deliver software, the cost of building the solution, and the overall quality of the solution. 3.11 Bringing it all together Rational Asset Manager can integrate with external tools to help development teams to produce, consume, and govern any kind of asset. Figure 3-5 represents an overview of the tools with which Rational Asset Manager can be integrated. Figure 3-5 Tools, tasks, and roles We can examine this diagram from a number of perspectives, including: Asset Management: RUP helps teams to implement and deploy an asset-development process, giving organizations the ability to manage and govern the production and consumption of reusable assets. The Rational Method Composer Asset-Based Development Plug-in (ABD) referenced during this book includes specific sections (called Tool Mentors) that give guidance explaining how to perform specific tasks or steps using Rational Asset Manager. For more information about how to configure and create a customized asset-development process, go to Appendix B, “Integrating Asset-Based Development into a process” on page 713. Note: The content from the Asset-Based Development Rational Method Composer plug-in can be inserted into any process, not just the Rational Unified Process. Rational Asset Manager Administrators can create connections to a change management solution, such as Rational ClearQuest, to discussion forums and customize the default Chapter 3. Tools in support of Asset-Based Development 47 review process defined in Rational Asset Manager to adapt it to the specific organization’s needs. For more information about how to set up and customize this integration, review A.4.2, “Integrating Rational Asset Manager with Rational ClearQuest”. Assets that contain Web service definitions can be published to the WebSphere Service Registry and Repository using the integration already provided in Rational Asset Manager. The integration between both tools also allows you to synchronize information from WebSphere Service Registry and Repository into Rational Asset Manager, helping developers to search for already published service assets and their supporting development assets. In Part 3, “Service Assets in an SOA” on page 333, you have a detailed explanation of how this integration works. A.4.1, “Integrating Rational Asset Manager with WebSphere Service Registry and Repository” gives more detailed information about how to configure the integration. Rational Asset Manager server can use Rational ClearCase to store assets as an alternative to using the file system. Rational Asset Manager also recognizes when artifacts that are going to be submitted to its control are under control of a version control system, such as Rational ClearCase or Concurrent Versions Systems (CVS), and records this information, which will be used later when the user wants to download or import the asset. A.4.3, “Integrating Rational Asset Manager with Rational ClearCase” describes the details of the integration with Rational Clearcase. The “Asset Management” Eclipse perspective of Rational Asset Manager allows users of Eclipse-based tools, such as Rational Software Architect, to use a flexible user interface to quickly find and package assets without having to leave the development environment. A specific integration exists between Rational Asset Manager and Rational Software Architect through the “Rational Asset Manager Configurator Plug-in”. This plug-in allows the user to export as XMI models the Rational Asset Manager configuration data, such as communities, asset types, categories, attributes, and relationships, using Rational Software Architect and import them into Rational Asset Manager. Asset Production: If we look at Asset-Based Development from the perspective of an Asset Producer, we notice that there is a collection of tools related to modeling, development, and testing. Each of these tools, and many more, can be used to produce assets that we want to use within the organization. In later chapters, we look at several of these tools in-depth, as well as best practices associated with the tools in building certain types of assets. Asset Consumption: When looking at Figure 3-5 on page 47 from an Asset Consumer point of view, again we see quite a few tools that can consume a reusable asset. For instance, there can be a set of models that need to be reused, a set of test plans, or a code component. Those people using consumer assets can interact with the Repository, searching for assets, downloading assets, and providing feedback on the assets. 48 Strategic Reuse with Asset-Based Development 4 Chapter 4. Introduction to the IBM Rational Unified Process This chapter discusses the IBM Rational software development process by describing the basics of Rational Unified Process (RUP) and the Rational Method Composer. The following chapter takes a more in-depth look at the Asset-Based Development and Asset Governance Rational Method Composer plug-ins. Jump ahead to the next chapter if you are already familiar with the basics of the Rational Unified Process. Note: The Asset Based-Development and Asset Governance plug-ins can be worked into any process. A good choice is to leverage content from the Rational Unified Process. However, if you prefer another process or already use another process, you can leverage these plug-ins and the guidance contained within the plug-ins in another process. 4.1 Introduction Every company, project, or team has a method. It can get invented every morning when the team walks through the door, but the team has a method, a way of working together. The question is, “Is this the appropriate method for the team?” This chapter introduces the IBM Rational Unified Process and the tooling that supports the use and consumption of the process. 4.1.1 How much of this guidance needs to be used As we work our way through this chapter, remember that this is a set of best practices and process guidance to help you on your way - there is no one-size-fits-all solution. As you review this material, remember the goals that you and your organization are trying to achieve. Figure 4-1 on page 50 presents a view that there is a range that represents the strength that is possible within a process implementation. In addition, there are a number of factors that help you to decide where on that range of strength your process implementation needs to reside. Keep these factors in mind as you consider how your process and governance must be set up and work to keep your process as agile and efficient as possible. © Copyright IBM Corp. 2008. All rights reserved. 49 Figure 4-1 Spectrum of process strength 4.2 IBM Rational Unified Process The IBM Rational Unified Process (RUP) is a software engineering process framework. It provides best practices and guidance for successful software development and a disciplined approach to assigning tasks and responsibilities within a development organization. Its goal is to ensure the production of high-quality software that meets the needs of its users within a predictable schedule and budget. The process has been developed over the last 26 years as a collection of IBM Rational field experience helping clients develop software and IBM Rational’s experience building their own products. This work has led to the Object Management Group (OMG) standard Software Process Engineering Metamodel (SPEM) and the Eclipse Process Framework project: SPEM is a standard way of describing a process1 and was originally developed by Rational Software, IBM, and other companies. The Eclipse Process Framework project is an open source project that provides tooling to build development and other processes and provide basic content. IBM and other companies initiated this project. IBM provided both the initial tooling and content and now uses this open source project as the basis for its commercial IBM Rational Method Composer product. The Web site for the Eclipse Process Framework is at: http://www.eclipse.org/epf Figure 4-2 on page 51 shows a few key definitions that we have to understand before we can effectively understand RUP. 1 50 The more recent versions of RUP and the Eclipse Process Framework project use an updated version of the original SPEM specification. This new version is currently being proposed by IBM and others as SPEM V2. Strategic Reuse with Asset-Based Development Figure 4-2 Key concepts in RUP (from RUP V7.1) These concepts are: Method is the combination of method content along with process (the way we combine the method content to create an approach that we can follow in a project). Method content is the information in the process: the words and pictures. Work product is something meaningful resulting from a process (from RUP). Role is a set of related skills, competencies, and responsibilities (RUP). Task describes a unit of work assigned to a Role that provides a meaningful result (RUP). Guidance is an abstract concept that generalizes all forms of content whose primary purpose is to provide additional explanations and illustrations to elements, such as Roles, Tasks, Work Products, Activities, or Processes (RUP). Process defines the structured work definitions that need to be performed to develop a system (RUP). Capability pattern describes a reusable cluster of Activities in common process areas that produces a result of observable value (RUP). Delivery process describes a complete and integrated approach for performing a specific type of project (RUP). Activity defines the breakdown as well as the flow of work (RUP). We tend to select a specific delivery process when we start looking for a process for our team or project (for example, RUP for small projects) and then adapt it for our local needs. This local version is called a development case. If we like our adapted process and want to use it elsewhere, we can use the Rational Method Composer to create our own delivery process. RUP is delivered as a large set of HTML pages that we use as a library of information. We select the parts of the library that we need for our project as a development case. RUP follows a set of core principles that are worth understanding as we use RUP. This forms the motivation for using a process and specifically for using RUP. Chapter 4. Introduction to the IBM Rational Unified Process 51 4.2.1 The heart of RUP At its heart, the IBM Rational Unified Process (RUP) is about successful software development. There are three central elements that define RUP: An underlying set of philosophies and principles for successful software development These philosophies and principles are the foundation on which RUP has been developed. See “Core principles of RUP” on page 53 for more on the topic. A framework of reusable method content and process building blocks Defined and improved on an ongoing basis by Rational Software, the RUP family of method plug-ins defines a method framework from which you create your own method configurations and tailored processes. The underlying method and process definition language Underlying it all is a unified method architecture meta-model. This model provides a language for describing method content and processes. This new language is a unification of different method and process engineering languages, such as the SPEM extension to the Unified Modeling Language (UML) for software process engineering, the languages used for RUP V2003, Unified Process, and IBM Global Services Method, as well as IBM Rational Summit® Ascendant®. One of the core practices behind RUP is iterative and incremental development. This practice is also good to remember as you start with RUP: Do not try to “do” all of RUP at once. Adopt an approach to implementing, learning, and using RUP that is itself iterative and incremental. Start by assessing your existing process and selecting one or two key areas that you want to improve. Begin using RUP to improve these areas first, and then, in later iterations or development cycles, make incremental improvements in other areas. We use both iterative and incremental methods in terms of process adoption and in terms of how we roll out Asset-Based Development and the associated tooling. 4.2.2 The IBM Rational Method Composer platform Over many years of development effort, RUP has evolved into a rich process engineering platform called IBM Rational Method Composer. Method Composer enables teams to define, configure, tailor, and practice a consistent process. The key elements of the platform are: Method delivery tool RUP is delivered to practitioners as an interactive Web site using industry-standard browser technology. A RUP Web site is a Rational Method Composer-published process presentation configured for your project and tailored to your specific needs. The Web site is created using dynamically generated HTML pages, which Method Composer enables you to publish in the form of multiple RUP Web sites, each representing a configured and tailored process definition. Method configuration tool Method Composer supports the fine-grained publish-time configuration of method content and processes to meet the varied needs of different projects and users. Method Composer allows the optional inclusion of method and process extensions using Method Composer’s plug-in technology. It also allows you to configure variants on processes, which are published differently depending on user-specific selections. Method authoring tool Method Composer is specifically designed for method content management and process authoring with functions, such as form-based authoring, breakdown structure-based authoring, content browsing, content search, and import and export of method content. 52 Strategic Reuse with Asset-Based Development Method Composer also provides mechanisms for rapid process assembly using process patterns and reusable method elements. It supports the creation of method plug-ins that provide powerful ways of extending and modifying existing content, simplifying method content, process management, and maintenance. A marketplace for process extensions The Method Composer/RUP section of the developerWorks® Rational Web site provides a place for process engineers in the software development community to share their method extensions as consumable plug-ins and provides a rich source of method extensions for the project manager. You can access the Method Composer/RUP section of the developerWorks Rational Web site at: http://www.ibm.com/developerworks/rational/products/rup/ You can read more information about Rational Method Composer at: http://www.ibm.com/software/awdtools/rmc/ 4.2.3 Core principles of RUP RUP has six core principles that provide the rationale for the process: Adapt the process Balance competing stakeholder priorities Collaborate across teams Demonstrate value iteratively Elevate the level of abstraction Focus continuously on quality Each principle is presented through: The benefits derived from applying the principle The pattern of behavior that best embodies the principle The most recognizable “anti-patterns” or behaviors contrary to the principle that can harm software development projects Adapting the process Adapting the process means to use the right amount of process for a particular project. Too much process kills projects, too little process can lead to unconstrained chaos. An interesting side effect of having a role-based process is that the process can be scaled from very small teams to very large teams without changing the core principles. The work products, tasks, and other aspects of the process can vary, but we must still be able to recognize a RUP-based process. The benefits are: Life cycle efficiency Increased project agility Realistic plans and estimates Patterns: Right-size the process to project needs, including: – The size and distribution of the project team – The complexity of the application – The need for compliance Chapter 4. Introduction to the IBM Rational Unified Process 53 Adapt the process ceremony to the life cycle phase (allow the formality to evolve from less to more as uncertainties are resolved) Improve the process continuously Balance plans and estimates with the level of uncertainty Anti-patterns: Always see more process and more detailed up-front planning as better: – Force early estimates and stick to those estimates. – Develop precise plans, and manage the project by tracking against a static plan. Balancing competing stakeholder priorities Balancing competing stakeholder priorities recognizes the need to constantly balance priorities on a project. Creating a clear set of requirements based on the real needs of the business and then regularly checking that these needs and requirements have not changed are examples of this balancing act. Build, buy, or reuse of services is another example. There are cost compared to time compared to functionality balancing acts in this case. The benefits are: Align applications with business and user needs. Reduce custom development. Optimize business value. Patterns: Define, understand, and prioritize business and user needs. Prioritize projects and requirements and couple the needs with the software capabilities. Understand what assets we can leverage. Balance asset reuse with user needs. Anti-patterns: Thoroughly document precise requirements at the outset of the project and force stakeholder acceptance of requirements: – Negotiate any changes to the requirements where each change can increase the cost or duration of the project. – Lock down requirements up front, thereby reducing the ability to leverage existing assets. – Primarily perform custom development. Architect a system only to meet the needs of the most vocal stakeholders. Collaborating across teams Collaborating across teams refers to the need to motivate the individuals on the team, break down the barriers between different teams or parts of the team, and ultimately extend this collaboration to the business, development, and operations. SOA-enabled solutions extend this collaboration outside the enterprise. The benefits are: Team productivity Better coupling between business needs, the development, and the operations of the software systems 54 Strategic Reuse with Asset-Based Development Patterns: Motivate people to perform at their best. Create self-managed teams. Encourage cross-functional collaboration (for example, analysts, developers, and testers). Provide effective collaborative environments. Manage evolving artifacts and tasks to enhance collaboration, progress, and quality insight with integrated environments. Integrate business, software, and operation teams. Anti-patterns: Nurturing heroic developers willing to work extremely long hours, including weekends Having highly specialized people equipped with powerful tools for performing their jobs, limited collaboration among team members, and limited integration between tools. The assumption is if everyone just does their job, the end result will be good. Demonstrating the value iteratively Demonstrating the value iteratively has several aspects. The first aspect is that we need to deliver real code regularly, starting right at the beginning of the project. It gives the stakeholders a chance to see what we are doing and to provide feedback. The second aspect is that iterations allow the plan to be adapted as the project proceeds. The third aspect is the chance to accept and manage change with changing business priorities and stakeholder expectations. The last aspect is that we drive out risk continuously from the project by demonstrating working software. We also constantly reassess the key risks and adapt the plans accordingly2. Benefits: Early risk reduction Higher predictability throughout the project Trust among stakeholders Pattern: Enable feedback by delivering incremental user value in each iteration. Adapt your plans using an iterative process. Embrace and manage change. Attack major technical, business, and programmatic risks early. Anti-patterns: Plan the whole life cycle in detail and track variances against plan (can actually contribute to project failure). Assess status in the first two-thirds of the project by relying on reviews of specifications, rather than assessing the status of test results and demonstrations of working software. Elevating the level of abstraction Elevating the level of abstraction is a principle aimed at simplifying how we work and communicate. We achieve this principle by the reuse of existing assets, the use of modeling tools, and the use of architecture. A significant benefit of SOA-based solutions relies on this 2 Moving a development team and its stakeholders to an iterative process is hard. An iterative process introduces perceived uncertainties, such as a lack of a stable set of requirements, difficulty in planning and costing work, regular rework, and challenges scheduling staff requirements. RUP, the supporting material, and training address all of these issues directly. Chapter 4. Introduction to the IBM Rational Unified Process 55 elevation of the level of abstraction: services being reused, modeling and transformations to translate business requirements to code as quickly as possible, and the use of SOA as an architectural style. The benefits are: Productivity Reduced complexity Patterns: Reuse existing assets. Use higher-level tools and languages to reduce the amount of documentation produced. Focus on architecture first. Architect for resilience, quality, understandability, and complexity control. Anti-patterns: To go directly from vague, high-level requirements to custom-crafted code: – Because few abstractions are used, a lot of the discussions are made at the code level compared to a more conceptual level, which misses many opportunities for reuse, among other things. – Informally captured requirements and other information require decisions and specifications to be revisited repeatedly. – Limited emphasis on architecture causes major rework late in the project. Focusing continuously on quality Focusing continuously on quality emphasizes the need to have quality as a priority throughout the life cycle. Testing is not the discipline that introduces quality into our solution it can only catch the lack of quality in what has gone before. Because each iteration involves testing, we have a regular monitor on quality throughout the project. The benefits are: Higher quality Earlier insight into progress and quality Patterns: Ensure team ownership of quality for the product. Test early and continuously in step with the integration of demonstrable capabilities. Incrementally build test automation. Anti-patterns: To peer review all artifacts and complete all unit testing before integration testing To conduct in-depth peer review of all intermediate artifacts, which is counterproductive because it delays application testing and hence identification of major issues To complete all unit testing before doing integration testing, again delaying identification of major issues 4.2.4 Key concepts The key concepts of RUP include: RUP summary chart Iterative development 56 Strategic Reuse with Asset-Based Development Phases (inception, elaboration, construction, and transition) Architecture driven Use case driven RUP summary chart The RUP summary chart is shown in Figure 4-3. Figure 4-3 RUP summary chart The RUP summary chart captures many of the concepts of RUP in one diagram. The chart shows a project with time on the x-axis and the disciplines on the y-axis. Each RUP project is divided into four phases (Inception, Elaboration, Construction, and Transition). Each phase is broken down into zero or more iterations. An iteration is a vertical slice through the disciplines as shown in Figure 4-3. This iteration is the first iteration in the Construction phase. The bumps on the chart indicate the level of effort required for each discipline. Notice, for example, how the business modeling and requirements disciplines are biased toward the beginning of the project but still continue into the Transition phase. One of our favorite questions about this chart is based around testing, “Why do the bumps on the testing discipline line get bigger and bigger over time?”3 We now look at several of these terms and ideas in more detail. Iterative development Iterative development is the concept of breaking a project into a set of iterations: “An iteration encompasses the development activities that lead to a product release a stable, executable version of the product, together with any other peripheral elements necessary to use this release.” 3 This is because as we build more and more code, we write more and more tests. Each iteration runs the tests of the new code and the tests from the previous iteration. If we managed to identify the really high-risk areas of the project correctly, we will have regression tested these areas to the full extent by the end of the project. Chapter 4. Introduction to the IBM Rational Unified Process 57 The project effectively becomes a set of smaller projects. The traditional software development project life cycle of gathering requirements, designing, implementing, and testing the solution is discarded. However, an iteration contains these traditional disciplines, hence, the idea of an iteration as a mini-project. A project consists of a number of iterations. This approach has many advantages, including: Faster feedback on all aspects of the project Faster exposure (and consequently faster mitigation) of risk Ability to validate any estimation techniques within the project Capability to build archetypes and derive reusable assets from them within one iteration and then leverage the assets in later iterations within the same project The focus of each iteration is to produce a form of working, tested code. In earlier iterations, this code might be a prototype of a certain aspect of the service or composite services. In later iterations, the working code will be complete builds of the services or composite services but with reduced functionality. This reduced functionality can be stubbed out code, no or reduced handling, or simulation of an intended function (for example, a database access and retrieval might be simulated). Project managers are concentrating on using the iterations to mitigate or expose risk. Contrary to natural inclinations, we encourage projects to attempt the highest risk aspects up front. This in turn allows us to spend most of the time addressing the risks. Each iteration must start with an assessment of what has changed since the start of the last iteration. Changes in risks and priorities can steer us to change the plan for this iteration, bringing part of the work forward and pushing part of the work back. Phases Each RUP project is broken into four phases. The phases in order of execution are: Inception Elaboration Construction Transition Inception is the phase where we scope out the project. During the iterations in this phase, we define business use cases (or revise them if several use cases already exist). We define our business goals, key performance indicators, and metrics. We create initial “as is” and “to-be” business process models. Elaboration is the phase where we make sure that we can have a working end-to-end automated business process or processes. Updates are made to all of the work products that were created in the Inception phase. Part of the code that was previously stubbed out is filled in. Tests from the previous phase are rerun and expanded to include the new functionality. Construction is where we complete the coding and testing. Many of the work products, such as the business process models, requirements, service model, and other work products, are further refined as appropriate and locked down as completed. At the end of the phase, the software is ready to be released to alpha and beta testing. Further changes to requirements based on feedback will be scheduled for future releases, or we might remain in Construction. Because the stakeholders have already seen running code during the preceding two phases, and we have been tracking changes in business processes and business goals, it is less likely that major changes will surprise us at this point. Transition is the phase that can vary the most. It entirely depends on what kind of software you are building. For a product release (such as a release of IBM Rational tools), transition is focused on alpha and beta testing. We are finishing training materials, marketing materials, 58 Strategic Reuse with Asset-Based Development deciding on the color of the box or CD, and checking that the copyright notices appear on the accompanying literature4. We are fixing any critical defects found in the alpha and beta releases. An internal project for the business will be working with operations to get system and user acceptance testing completed and planning for deployment. When the Transition phase is complete, further changes to the software require a new project (run iteratively, of course). Maintenance has a slightly different type of project. Each phase has strict entry and exit criteria or gates. By the end of each phase, we require that: Inception: We have agreed upon the scope of the project. Elaboration: Architecturally significant aspects of the project are up and running as tested code. Construction: The coding is complete. Transition: The project is “live”. It is very important that a project does not proceed to the next phase if these high-level goals have not been achieved. We can add iterations to the phase to enable us to achieve the goals of the phase. This has an obvious impact on schedule, but we can catch up later by accomplishing more in future iterations or we decrease the scope of the functionality that we plan to deliver. Iterative development makes this easier, because at the end of each successful iteration, we have a stable build of the code and the associated work products that must be suitable for release. Architecture-driven RUP is an architecture-driven process. Defining and building an executable architecture is the focus of the Elaboration phase of any RUP project. An executable architecture means code that demonstrates and proves the effectiveness of our architectural decisions. Use case-driven Prior to the introduction of SOA concepts, RUP focused on aligning iterations to system use cases. This is still true in that we expect to take system use cases through to implementation during a iteration; there are higher level drivers of the goal of an iteration. Automating a business process or task becomes the new goal of the iteration. We have to implement system use cases as part of this goal, but now we focus on implementing a thread of the business process from beginning to end. We might not handle all cases in the process, and we might not cover all exceptions or branches in the process flow, but we have to implement something useful end-to-end. If we use business use case realizations as an alternative to business process flows, we are implementing these business use case realizations. Either way, the focus of the iteration is to deliver useful business functionality. 4.3 References For more information: Read the Rational Method Composer developerWorks article series at: http://www-128.ibm.com/developerworks/rational/library/dec05/haumer/ 4 These tasks can be surprisingly continuous, especially the box color. Chapter 4. Introduction to the IBM Rational Unified Process 59 Refer to the Eclipse Process Framework site at: http://www.eclipse.org/epf/ Refer to the IBM developerWorks Rational Unified Process (RUP) and Rational Method Composer site at: http://www-128.ibm.com/developerworks/rational/products/rup 60 Strategic Reuse with Asset-Based Development 5 Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins This chapter provides an introduction to the content provided in the Asset-Based Development and Asset Governance plug-ins for Rational Method Composer. After completing this chapter, you will have a good understanding of the content provided by these plug-ins. In later chapters, we discuss how ZYX Electronics has leveraged this information, as well as the deliverables that they have built while following this guidance. Important: Throughout the course of this book, we leverage content from the Asset-Based Development V3.0 and Asset-Based Development Governance V1.0 Rational Method Composer plug-ins. You can download these plug-ins by using the following links: For use with Rational Method Composer V7.1: http://www.ibm.com/developerworks/rational/downloads/06/rmc_plugin7_1/#16 For use with Rational Method Composer V7.2: http://www.ibm.com/developerworks/rational/downloads/07/rmc_v7.2/#15 © Copyright IBM Corp. 2008. All rights reserved. 61 5.1 Introduction to the asset plug-ins To help you create a process for your organization that incorporates strategic reuse, IBM Rational has released two Rational Method Composer plug-ins: Asset-Based Development plug-in Asset Governance plug-in These plug-ins are packaged together as one download, because the plug-ins involve topics that are strongly related. When building assets, it is important to know what roles are involved, what steps to follow, and what work products to produce. But even more importantly, we need to understand that the correct business decisions are being made, investments are going into the right projects, proper metrics are captured, and that we are doing so in a way that matches our risk expectations. In the following sections, we describe the major characteristics of each plug-in. As part of this examination, we also highlight the activities, tasks, roles, and deliverables. 5.2 Adoption guidance Next, we discuss adoption guidance. 5.2.1 How adoption guidance fit into a process The content within these plug-ins is provided as capability patterns. A capability pattern: “describes a reusable cluster of Activities in common process areas that produces a result of observable value.” Rational Unified Process (RUP) The Asset-Based Development capability patterns and associated content are generally inserted into the current enterprise processes. If the enterprise uses RUP, the Asset-Based Development processes can be inserted in any phase, in any discipline, or within any iteration, an example of which is illustrated in Figure 5-1 on page 63. Note that this is just one possible example out of many possible and equally valid variations. 62 Strategic Reuse with Asset-Based Development Figure 5-1 Integrating Asset guidance into a process based on the Rational Unified Process The Asset-Based Development workflows can be inserted into other software development processes, such as the one shown in Figure 5-2. In this example, the Asset-Based Development workflows are inserted into each of the process phases. In certain cases, the business-related assets are only used on the software project and are not produced on the project, whereas each of the software-related phases produce and consume assets on the project. This example does not address a situation in which there are more central or cross-project asset manufacturing teams. Figure 5-2 Integrating with a non-RUP-based process Note: We provide more information regarding tailoring a process in Appendix B, “Integrating Asset-Based Development into a process” on page 713. Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 63 5.2.2 How much of this guidance do you use As we work our way through this chapter, remember that this is a set of best practices and process guidance to help you on your way. There is no one-size-fits-all solution in regard to how to govern asset development nor the steps that you take to produce and consume assets. As you review this material, remember the goals that you and your organization are trying to achieve. Figure 5-3 presents a view that there is a range that represents the strength that is possible within a process implementation. In addition, there are a number of factors that help you to decide where on that range of strength your process implementation needs to reside. Keep these factors in mind as you consider how your asset process and governance need to be set up, and work to keep your process as agile and efficient as possible. Figure 5-3 Spectrum of process strength 5.3 Governance Let us take a quick look at a couple of foundational definitions before getting into the details of Asset Governance: Governance: – Establishing chains of responsibility, authority, and communication to empower people (decision rights) – Establishing measurement, policy, and control mechanisms to enable people to carry out their roles and responsibilities IT Governance: – Decision making rights associated with IT – Mechanisms and policies used to measure and control the way IT decisions are made and carried out Figure 5-4 on page 65 relates this definition of IT Governance to the goals for IT Governance. 64 Strategic Reuse with Asset-Based Development (IT) GOVERNANCE DEFINED Chains of responsibility, authority and communications to empower people Policy, control and measurement mechanisms to enable people to carry out their roles and responsibilities (IT) GOVERNANCE GOALS Strategic Alignment Increase value realization from business strategies and objectives Risk Reduction Understand and mitigate risks associated with initiatives and operations Figure 5-4 Goals of IT Governance Asset Governance can be seen as a specialization of IT Governance. Therefore, we arrive at the following definition of Asset Governance: Asset Governance: – Extension of IT Governance focused on the life cycle of assets to ensure the business value of Asset-Based Development – Asset Governance is a catalyst for improving overall IT Governance Figure 5-5 provides a high-level view of the relationships among these levels of governance. Note that Asset Governance fits primarily within IT Governance; however, we still need to ensure that we are connected to the overall business via Business Governance. Figure 5-5 Relationships among the levels of governance Building on this understanding of the levels of governance, there are two more definitions of which you need to be aware: Governance Solution (n) is a work product of Governance, a set of governance decisions applicable to a specific context and scope of activities. Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 65 Management (v) includes the activities of goal setting, decision making, oversight, enablement, and guidance that implement a governance solution in pursuit of a set of defined objectives. As we discussed in 5.1, “Introduction to the asset plug-ins” on page 62, we want to build out a strategic approach to leveraging reuse. This means that the resulting program must follow a systematic approach and that the results of the effort are tied to and driven by the business. Asset Governance is a key concept that helps us ensure that our reuse efforts are tied into the goals of the larger organization. 5.3.1 Asset governance As discussed in the previous section, Asset governance sits within the broader IT Governance in an enterprise. Asset governance includes those activities for administering Asset-Based Development. The focus is on preparing the organization to properly create, use, measure, and plan the investments in assets. The major focus areas include: Planning: Capture the governance requirements; determine which processes to bring under governance; and determine the measurements and targets of effectiveness of the governance solutions. This area focuses on what predefined governance processes (content areas) to deploy and what customizations are necessary to accommodate the unique needs of the adopting organization. Definition: Specify the decision rights, measures, and policies to be applied to those processes under governance. Specify the automation and tool support. This area focuses on performing a gap analysis between the predefined governance process and what is needed. Enablement: Roll out the governance solution to the organization in stages. Measurement: Determine if the governance solution is meeting its effectiveness targets, and make adjustments as necessary. Describing the focus areas for Asset Governance is simplified when looking at it sequentially. In practice, the activities in the focus areas generally overlap. This work requires iteration and refinement. As policies and strategies are created, teams are being formed, and lessons are being learned, refinement must be permitted, allowing the governance model to be updated. Again, we come back to the theme of iterative and incremental. You can perform extensive tooling, processes, and tasks as part of Asset-Based Development. We want to selectively choose and work with those elements that best align with our own organization’s business requirements. As we progress, we build out our capabilities and approach as necessary. 5.4 Asset governance plug-in The focus areas within Asset Governance are illustrated in Figure 5-6 on page 67. In general, these four focus areas can be investigated parallel, and the order in which the actions are conducted is negotiable. Remember that as we work through these tasks a number of deliverables, including, but not limited to Reuse Assessments, Classification Schemas, and Process Documents, will be created. These artifacts will be built in an iterative and incremental fashion that is reflective of the parallel nature of the work involved and the relationships between the phases. 66 Strategic Reuse with Asset-Based Development Figure 5-6 Focus areas within Asset Governance The following sections take a more in-depth look at the focus areas and the roles, tasks, and deliverables within each focus area. 5.4.1 Planning Next, we discuss planning for governance. Overview In planning, we spend time determining what needs to be governed, the initial resource and cost requirements, and who will fund this effort. This effort will also include a discussion and decision about funding models. The capability pattern for this focus area is shown in Figure 5-7 depicting two activities: Preparation and Funding. Figure 5-7 Capability Pattern for Planning Activities and tasks Next, we discuss the activities and tasks of planning. Preparation Figure 5-8 on page 68 depicts the tasks found within the Preparation activity. Certain key planning tasks need to be performed first so that the estimates and funding discussions are meaningful. Within the tasks associated with this activity, we spend time in assessing the reuse capability of the organization and determine the Reuse Strategy for moving forward. As the strategy solidifies, we are able to start to plan staffing, training, asset classification, and reuse program adoption. Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 67 Figure 5-8 Tasks within the Preparation Activity Funding Figure 5-9 on page 69 depicts the tasks found within the Funding Activity. We are concerned with determining the costs of the asset program, as well as the preferred funding model. In regard to the funding model, we need to recognize that funding issues differ in a reuse situation compared to a traditional development project. In typical funding situations, the funds are allocated for the activities to deliver the artifacts for the project. This relationship changes with the reuse model, where the funding for assets and their artifacts can provide value for several projects. In addition, the project where the asset is built might need to incur additional costs to build and package the reusable asset. However, other teams that then use the asset get the benefits of using the asset and, therefore, appear to cost less to deliver. There are several models for funding the reuse team and related reuse efforts: Overhead funding: The costs for the reuse team are handled in the pool of overhead expenses. Tax funding: Each application development project pays a tax, which covers the cost of the reuse team. Payments for assets and services: The application development teams pay for the assets and services that they use from the reuse team. The organization needs to determine its funding model for conducting Asset-Based Development. An initial recommendation is to start with overhead funding and then shift to payments for assets and services. The purpose of this recommendation is to provide time for startup costs and then move to another funding model, such as for services or assets, when the initial value has been verified. For instance, you can use the overhead funding model throughout the startup phases and then shift to an asset and services funding model thereafter. Factors that will impact this decision include the decision to have an asset manufacturing team and a governance board, to support tooling, and so forth. As part of this work, we will find a sponsor for the program and ensure that the goals of the program align of the needs of the sponsor and the organization. 68 Strategic Reuse with Asset-Based Development Figure 5-9 Tasks within the Funding Activity Roles, tasks, and deliverables Note that the Asset-Based Development Manager and Administrator roles are key in these efforts. Tip: When reviewing the Roles and Deliverables diagrams in this chapter, remember that artifacts that are entering into the task from the top are inputs into the task. The artifacts that are displayed in the bottom of the graphic coming out of the task are outputs from the task. Preparation The deliverables and roles associated with this activity are depicted in Figure 5-10 and Figure 5-11 on page 70. Figure 5-10 Administrator role and associated deliverable Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 69 Figure 5-11 Manager role and associated deliverables Funding The deliverables and roles associated with the Funding activity are depicted in Figure 5-12. Figure 5-12 Manager role and associated deliverables Key deliverables There are six key deliverables associated with this focus area, including: Reuse Assessment: A Reuse Assessment describes the opportunities and abilities of an entity to conduct asset reuse work. The scope of the Reuse Assessment must be selected first. In general, it is not a good practice to attempt to apply reuse principles to the entire enterprise at one time. As input 70 Strategic Reuse with Asset-Based Development to the Reuse Assessment, the business problem and priority need to be understood. This provides the necessary context and scope for focusing the Reuse Assessment. Even in cases where there is a significant business driver, we want to start the rollout with a narrow focus. The Reuse Assessment evaluates two major elements for the selected scope: a. Reuse Capability: Reuse capability describes the organization’s ability to conduct reuse activities. Reuse opportunity describes the extent to which recurring problems and recurring solutions exist within the selected scope. An organization’s reuse capabilities are increased when the following factors are in place: • Management support • Mature software process in the organization b. Reuse Opportunity: There are generally more reuse opportunities when the following factors are in place: • Well-understood domains • Architecture to support reuse • Mature versioning and configuration management When conducting the assessment, we can leverage the following perspectives: – Governance: Is the enterprise willing and able to establish the policies and decisions providing the context for asset reuse within a reuse scope – Process: Where and when will the Asset Governance and Asset-Based Development capability patterns be inserted into existing processes – Opportunity: What are the opportunities for assets within a reuse scope – Aptitude: What are the ability and willingness of teams and individuals to work with assets – Tools: What are the tools, repositories, and their configuration to support work with assets Notice that the perspectives are not just related to technology and tooling. We also focus on business alignment and cultural willingness to create and use assets. Reuse Adoption and Incentive Plan: You need to consult: Incentive Compatibility and Systematic Software Reuse, Fichman and Kemererm, Journal of Systems and Software, New York: April 27, 2001; Volume 57, Issue 1, page 45. Reuse Strategy: The Reuse Strategy describes how the organization will conduct the activities of a reuse program. Similar to the way in which we spend time creating a Software Architecture document, we need to record the decisions that are made about the reuse program, the vision for the program, the results that we want to achieve, and the steps that we are going to take to realize the strategy. Within a Reuse Strategy document, we usually capture details from four key perspectives, including: a. Process: In general, process leads us to conducting software development in a way that leverages previous investments and preserves current investments. Specific to software reuse, there are two process categories to consider: organizational-level processes and project-level processes. Figure 5-13 on page 72 shows the relationship between these two processes. Notice that the Organizational Level processes align with Asset-based Governance and the Project Level processes align with Asset-Based Development. Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 71 Figure 5-13 Process levels b. Standards: WIthin this perspective, we describe the standards to which the reuse initiative will adhere, as well as the standards that will be ignored. c. Tools: Within this perspective, we describe the tools that will be leveraged to support the reuse initiative. This perspective must include a discussion of the asset Repository and process configuration, as well as the tools that will be used to produce and consume assets. The expectation is that the organization will use a standard set of tools based on the decisions and explanations detailed in this section. d. Assets: This perspective is used to outline the major types of assets that the organization plans to leverage. Up to this point, we have discussed assets quite generically, because many artifacts can be packaged together to create assets. For an organization to succeed in reuse, the organization needs to have a more narrow scope and identify the types of issues that the organization will pursue. Resources and Training Plan: Simply put, the Resources and Training Plan is used to detail the roles, users, and the plans for training them. We have a number of resources at our disposal to assist in building this plan including, but not limited to: Reuse Assessment, Reuse Strategy, and the Reuse Adoption and Incentive Plan. Asset Financial Estimate: There are three steps associated with generating this deliverable, including: a. Conduct Estimates: Determine the general asset program cost estimates. In order to estimate this cost, the Reuse Strategy needs to be understood, as well as the Resource Adoption and Incentive Plan and the Resources and Training Plan. These artifacts provide the scope and timing for resources to work on asset manufacturing, management, and use. b. Determine Initial Funding Approach: With the initial cost estimates, the funding approach needs to be determined. Often the overhead funding approach is used to launch the initial asset activities. This overhead funding can be done at the enterprise level, within the scope of a business unit, or on a project. c. Determine Long-term Funding Approach: More mature asset programs can use a tax approach on each project to fund the asset efforts in the long run. This funding approach generally occurs when the asset efforts have proven viable to the enterprise. 72 Strategic Reuse with Asset-Based Development Classification Schema: A classification schema is a structure of values used to classify assets in the Repository. Models provide a good way to communicate and share the classification schema. We want to ensure that we are setting up a Repository structure that is logical for both those people submitting assets and for those people consuming assets. 5.4.2 Definition Next, we cover the Definition focus area. Overview There are multiple workflows that comprise the asset’s life cycle, for example, the activities of submitting an asset to the Repository, the review and approval process, or the retirement and archiving activities. The workflows need to be identified, and the key participants understood. Often you must consider the type of asset or its categorization (for a specific business domain), as well as which organizational unit owns the asset. All of these considerations are factors in determining the workflows for assets. Controlling the access to assets is a key element of governance. Determining who can do what with an asset involves understanding the asset’s intended use and scope. Access™ control can be determined for assets of a given type, of a given classification, or of a given owner. These factors must be considered, and the access control must be captured in the Repository. Figure 5-14 depicts the capability pattern for the Definition focus area. Figure 5-14 The activities within the Definition capability pattern Activities and tasks Next, we discuss activities and tasks. Types and Rules Definition Activity The Types and Rules Definition Activity contains the tasks shown in Figure 5-15 on page 74. In this activity, we define our asset types, as well as the rules associated with those types. Each type of asset will likely contain a unique set of artifacts. However, there must be a level of commonality among assets of the same type. If there is too great a variation within an asset type, we make it much more difficult for those people wanting to consume the asset. Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 73 Figure 5-15 The tasks within the Types and Rules Definition Activity Workflow Definition Activity The Workflow Definition Activity contains the tasks shown in Figure 5-16. In this activity, we need to recognize that there are two levels of workflow for Asset-Based Development. There are the workflows at the organizational level, which describe the structure of the organization for supporting Asset-Based Development and the flow of activities in the organization. And there are also asset-level workflows, which deal with asset submission, review, and procurement. These are finer-grained workflows focusing on the asset-level activities and that impact the state of the asset. Figure 5-16 The tasks within the Workflow Definition Activity Access Control Definition Activity The Access Control Definition Activity contains the tasks shown in Figure 5-17 on page 75. In this activity, we consider the classifications of our user community. Thought is given to the types of assets to which these groups of users require access. 74 Strategic Reuse with Asset-Based Development Figure 5-17 Tasks within the Access Control Definition Activity Roles, tasks, and deliverables Next, we discuss roles, tasks, and deliverables. Types and Rules Definition Activity Figure 5-18 depicts the Asset Governance Board role along with the tasks, deliverables, and roles found within the Types and Rules Definition Activity. Figure 5-18 Asset Governance Board role, associated tasks, and deliverables Workflow Definition Activity Figure 5-19 and Figure 5-20 on page 76 depict the Manager and Asset Governance Board roles along with the tasks and deliverables found within the Workflow Definition Activity. Figure 5-19 Manager, associated task, and deliverable Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 75 Figure 5-20 Asset Governance Board, associated tasks, and deliverables Access Control Definition Activity Figure 5-21 depicts the Administrator role, associated task, and deliverable found within the Access Control Definition Activity. Figure 5-21 Administrator role, associated task, and deliverable Key deliverables The five key deliverables associated with the Definition phase include: Asset Rules and Policies: This deliverable is the rules and policies to which assets need to comply to participate in the Repository. This artifact is controlled by the Asset Governance Board and establishes the policies for Administrators, asset manufacturing teams, and asset consumption teams. The kinds of rules created include: – Naming conventions for Asset Types, Assets, Artifacts, and Relationship Types – Required support resources, length of support, and contact information for assets – Asset classification requirements, including policies for tagging assets with user-provided values and policies for classifying assets using category schema values When creating these policy documents, be sure to include a version number on the document. Asset Type Specification: This deliverable describes the structure of asset types. Declare one or more asset types to configure the Repository. Look for name collisions, as well as similar asset types and artifacts with different names. 76 Strategic Reuse with Asset-Based Development Each asset that is placed in the Repository will map to one of the types that we define. Based on the asset type that is selected, the user submitting the asset will have to abide by the constraints put into place by the asset type. The type definition will include information, such as: – Name: The type must have a unique and meaningful name. – Purpose: Specify the purpose for the asset. – Content: Define the artifacts that will comprise the asset. – Relationships: Specify other asset types that are related to this asset type. – Categories, schemas, and contexts, which are relevant, are included. – Custom attributes or metadata elements on the asset type are included. Asset Version Policy: A description of how assets must be versioned. Recall from earlier that an asset will contain one or more artifacts. Therefore, there are generally two major levels for versioning with assets: the asset version and the artifact version. The artifact version is typically managed and dictated by the Source Configuration Management (SCM) system, whereas the asset version is generally dictated by the policies of the enterprise and managed by the Repository. As we define this policy, we will have to ensure that we accommodate any distributed development requirements for both the assets and the underlying artifacts. Asset Workflow Specification: A description of the steps in an asset submission, review, or procurement workflow. This artifact can be represented in various forms, such as a model, text, or other format. The workflow must identify the steps, the participants, and the asset states. Figure 5-22 shows how the different workflows relate to asset production, consumption, and management. Figure 5-22 Asset workflows Community Map: A Community is an arbitrary collection of users, roles, and their assets. A Community can be defined along several boundaries, including: – Organizational unit – Project – Users with a common role, such as Business Analyst Therefore, the Community Map describes the organization of the Repository in terms of its Communities, user roles, and their permissions. The enterprise needs to determine whether there will be one asset Repository or many asset repositories. In addition, for each asset Repository, the organization of the assets, the teams, and the review processes needs to be determined. Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 77 The Community becomes the primary element for organizing the Repository. An asset lives in one Community. Roles and permissions are specified for a Community. Review processes and other workflows are specified for a Community. 5.4.3 Enablement Next, we discuss the Enablement focus area. Overview In the Enablement focus area, we define the teams needed to support the production, consumption, and management of assets and identify the tools that they will use. The tools for conducting Asset-Based Development must be selected and set up. Key to this is understanding which roles will work with which tools throughout the Asset-Based Development process. Recall from earlier that the work in the focus areas often overlaps and occurs iteratively and incrementally. Therefore, we start to see that there are dependencies between a number of the activities, tasks, and deliverables. For example, work done in the Plan focus area will have impact on the work done within the Enablement focus area, and the reverse is also true. Figure 5-23 depicts the capability pattern for Enablement, which includes the following activities: Organization: This activity includes tasks, such as Create Asset Governance Board, Create Asset Manufacturing Team, and Enable Asset Usage Teams. Environment: This activity includes tasks, such as Determine Tools to Support Asset-Based Development, Determine Topology, and Evaluate Cost of Ownership. Figure 5-23 Capability pattern for Enablement Activities and tasks Next, we describe activities and tasks. Organization Activity The Organization Activity contains the tasks shown in Figure 5-24 on page 79. This set of tasks is focused on defining the teams that will support the production, consumption, and management of assets. When the teams are defined, we will then work to enable them on the tools that have been identified as needed for supporting their work. 78 Strategic Reuse with Asset-Based Development Figure 5-24 Tasks within the Organization Activity Environment Activity The Environment Activity contains the tasks shown in Figure 5-25. As mentioned previously, in this activity, we focus on the tooling needed for supporting the reuse team. The tooling for asset production and consumption activities needs to be similar to and easily accessible to the way in which people perform their work today. Setting up an environment, which naturally extends the way that people work today, will reduce the adoption and learning curves required for Asset-Based Development. We will also need tooling to support the management of assets, which is most likely a Repository. Figure 5-25 Tasks within the Environment Activity Roles, tasks, and deliverables Next, we discuss roles, tasks, and deliverables. Organization Activity Figure 5-26 on page 80 depicts the Manager role along with the tasks and deliverables found within the Organization Activity. Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 79 Figure 5-26 Manager role and deliverables within the Organization Activity Environment Activity Figure 5-27 and Figure 5-28 on page 81 depicts the Administrator and Manager roles along with the tasks and deliverables found within the Environment Activity. Figure 5-27 Administrator role and deliverables in support of the Environment Activity 80 Strategic Reuse with Asset-Based Development Figure 5-28 Manager role and deliverables in support of the Environment Activity Key deliverables The key deliverable associated with this phase is: Asset Workflow Specification: As introduced earlier in the Planning focus area, this deliverable provides a description of the steps in an asset submission, review, or procurement workflow. In this focus area, we have defined the teams for asset production, consumption, and management. In addition, we determined the tools that these groups will use in order to fulfill their duties. This deliverable shows up as both an input and an output within this focus area. 5.4.4 Measurement Overview Identifying the measurements important to your organization is key to the long-term and sustainable use of assets. Measurement is often tracked at several levels, including: Asset Owner and Producer measurements: Level of investment (hours, money, and time) in an asset Asset Consumer: Level of benefit and value delivered to the asset user Repository: Level of activity on the Repository Management: Value to the organization and return on investment (ROI) Figure 5-29 on page 82 depicts the capability pattern for Measurement. Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 81 Figure 5-29 Capability pattern for Measurement Tip: Notice that in this case the capability pattern contains tasks rather than activities. Tasks Next, we discuss the tasks. Determine metrics to track In this task, the Reuse Strategy must be evaluated regarding the metrics that the enterprise wants to track. There are several kinds of metrics to track, including metrics managed by the Repository, metrics entered by Asset Owners or Producers, and metrics entered by Asset Consumers. Because collecting metrics can be distributed among many roles and points in software development, the asset rules, policies, and other governance documents must be updated with the results of this task. A key value of defining metrics early in the effort is to establish a common baseline for what a metric means, who creates the metrics, and where they are captured. Without establishing this baseline, the metrics are too vague and left to individual interpretation, which lacks clarity and does nothing to help the asset reuse work roll forward. This task of defining how the asset program will be measured is a core requirement to the success of the asset efforts to continue. Report on asset Reports can be generated graphically or textually. The metrics can be exported from the Repository into reporting tools, or the Repository can render the reports. Managers often requires reports on a periodic basis, which generally means Repositories need a way to run reporting jobs and send them to the appropriate stakeholders. Repositories must be integrated with portfolio and project management tools to aid the generation of derived metrics. Roles and deliverables Next, we discuss roles and deliverables. 82 Strategic Reuse with Asset-Based Development Determine metrics to track Figure 5-30 depicts the Manager role along with the deliverables found within the Determine Metrics to Track task. Figure 5-30 Role and deliverable in support of Determine Metrics to Track Report on asset Figure 5-31 depicts the Asset Consumer role along with the deliverables found within the Report on Asset task. Figure 5-31 Role and deliverable in support of Report on Asset Key deliverables There are two deliverables associated with this phase: Metrics Collection Plan: Describes what metrics will be captured, by whom, and how often. When making these decisions, we need to remember the scope for the metrics: deciding between project, community, or enterprise-wide metrics. Also, we need to recognize that certain metrics are more easily captured than others. Asset Report: A report of the asset activities in the Repository. Provide summaries of asset and other Repository activities. The report must provide both qualitative and quantitative information about the assets and related activities. Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 83 5.5 Asset-Based Development As discussed earlier, Asset-Based Development is defined as: “Asset-Based Development is developing software solutions (re)using cohesive, documented software artifacts. It is organizing software development in a way that leverages previous investments and influences the nature of future investments. It is speeding up development and reducing cost and risk by reusing assets and artifacts to solve recurring problems.” 5.5.1 Manufacturing and usage cycle The processes of Asset-Based Development can be described as two large cycles. One of those cycles is the manufacturing cycle. As shown in Figure 5-32, in this cycle, the producer creates an asset, the asset is reviewed and published to the asset Repository. Figure 5-32 Manufacturing cycle The other cycle is the Usage or Consumer cycle. As shown in Figure 5-33 on page 85, in this cycle, the consumer finds, reuses, and provides feedback about the asset. This cycle repeats each time that assets are reused. 84 Strategic Reuse with Asset-Based Development Figure 5-33 Usage cycle These cycles are connected and interact with each other. As shown in Figure 5-34, the usage cycle receives assets from the manufacturing cycle and provides feedback (or requests) to the manufacturing cycle. The manufacturing cycle receives feedback from the usage cycle and updates and gives assets to the usage cycle. Figure 5-34 Interaction between manufacturing and usage cycle Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 85 5.6 Asset-Based Development plug-in As shown in Figure 5-35, the workproducts produced from Asset Governance will feed into Asset-Based Development. As we work through the activities and tasks found in Asset-Based Development, we will provide input back into our Asset Governance and will need to update the associated governance workproducts. Figure 5-35 Asset Governance workproducts shaping the Asset-Based Development process Earlier, we discussed the fact that there are three major aspects to the asset life cycle, namely produce, consume, and manage. These aspects play a prominent role in the associated process guidance provided within the Asset-Based Development Rational Method Composer plug-in. Figure 5-36 on page 87 presents the capability pattern for Asset life cycle associated with Asset-Based Development. The diagram provides a high-level view, showing the activities found within the life cycle. Within each activity, you will find a number of tasks and steps that will guide you in Asset-Based Development. 86 Strategic Reuse with Asset-Based Development Figure 5-36 The asset life cycle capability pattern Tip: In the remaining parts of the book, we leverage the asset life cycle as a framework for the content. In Part 2, “Reusable Assets” on page 123, Part 3, “Service Assets in an SOA” on page 333, and Part 4, “Patterns” on page 455, we use the life cycle as a basis for chapters that discuss the creation, management, and use of assets. The discussion starts with describing these topics in regard to assets in general and then delves into specific types of assets, including patterns and services. 5.6.1 Produce reusable asset Next, we discuss the Produce Reusable Asset Activity. Overview Let us take a more detailed look at the Produce Reusable Asset Activity. This activity is described as: “The production of a Reusable Asset really involves two steps: producing the Asset Artifacts that comprise the asset and then packaging those artifacts into a reusable asset. Producing asset artifacts can involve creating those artifacts from scratch, or it can involve harvesting those artifacts from existing project artifacts.” Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 87 Activities and tasks As seen in Figure 5-37, the Produce Reusable Asset Activity contains the following tasks: Develop Asset Specification: Formal documentation that details the asset. This must include a discussion of the artifacts found with the asset, variability points, the problem that this asset will solve, as well as the context to which the asset applies. Conduct Recurring Problem Analysis: For a specific problem, determine the scope to which it recurs. Does the problem reoccur with a project, across projects, or across the organization? Create Asset: In this task, you create the asset implementation. This brings together the artifacts with the asset and documentation and then packages and posts the asset. Update Asset: You will see that an asset is often created in a iterative and incremental fashion. Therefore, you must expect to spend time in updating, enhancing, and adjusting assets that have already been built. Review and Test Asset: The asset review processes are executed to evaluate and approve an asset. Publish or Deploy Asset: Make the asset visible to a target audience, either in the scope of the Repository or in another tool. Figure 5-37 Capability pattern for Produce Reusable Asset 88 Strategic Reuse with Asset-Based Development Roles, tasks, and deliverables Figure 5-38 depicts the Asset Producer role along with the tasks and deliverables that the Asset Producer role participates in building. Figure 5-38 Asset Producer role and associated deliverables Figure 5-39 depicts the Asset Consumer role along with the tasks and deliverables that the Asset Consumer role participates in building. Figure 5-39 Asset Consumer role and associated deliverables Figure 5-40 depicts the Asset Owner role along with the tasks and deliverables that the Asset Owner role participates in building. Figure 5-40 Asset Owner role and associated deliverables Figure 5-41 on page 90 depicts the Asset Reviewer role along with the tasks and deliverables that the Asset Reviewer role participates in building. Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 89 Figure 5-41 Asset Reviewer role and associated deliverables Figure 5-42 depicts the Community Administrator role along with the tasks and deliverables that the Community Administrator role participates in building. Figure 5-42 Community Administrator role and associated deliverables Key artifacts Next, we discuss key artifacts. Asset specification The asset specification describes the asset being proposed. The specification must provide technical justification for the asset. Not all assets require an asset specification. In general, assets that require or are expected to require a meaningful investment for the organization or assets that are of sufficient complexity or reuse scope as to require multiple teams will benefit from creating an asset specification. The asset specification can go through several iterations as greater understanding of the problem and the solution are gathered from stakeholders. The need for this asset has generally been established, and sometimes sponsorship and support for the asset has been secured. This specification can be used by the support teams to understand the asset. The specification is also used by the Asset Owner or Producer to create and update the asset. This specification is largely intended for technical teams to use, although it can be shared with sponsors and technical management as part of making decisions to fund and staff the effort to build, maintain, and support the asset. 90 Strategic Reuse with Asset-Based Development Identify items, such as: Asset name The problem that the asset is expected to solve Description of the solution Expected contexts Expected artifacts in the asset Asset relationships and dependencies Possible categorization or classification: – Business – Technical – Organizational Expected Asset Consumer skills How the expected Asset Consumer will use the asset Asset Owner and maintainer: Sponsor and funding Estimated asset development effort Estimated Asset Consumer benefits Reusable asset Recall that we earlier defined an asset as: “An asset is a collection of related artifacts that provides a solution to a problem. The asset is customizable through its variability points, meaning those locations within the asset (or more specifically, within the asset’s artifacts) that can be customized.” You can consider an asset to be a candidate for reuse when it fits a cross section of: Providing a solution to your problem Fitting your technical context Meeting your business objectives Fitting within your delivery process Integrating within your organizational structure 5.6.2 Manage reusable assets Next, we describe managing reusable assets. Overview The purpose of asset management is to provide control and organization to the review and approval workflow and to deliver assets to consumers in a managed, scalable manner. Asset management is subject to and operates under the policies and guidance from Asset Governance. Note that Manage Reusable Assets is a capability pattern. Figure 5-43 on page 92 provides an overview of the activities found within the Manage Reusable Assets capability pattern. Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 91 Figure 5-43 Capability pattern for Manage Reusable Assets Activities and tasks Next, we discuss activities and tasks. Review and Approval Activity The tasks within the Review and Approval Activity are depicted in Figure 5-44. Depending on the role being played and its associated scope, the tasks performed within the Review and Approval Activity will vary. For instance, in the case of an Asset Consumer, the Asset Consumer is interested in searching the Repository and determining which are the right assets for the Asset Consumer’s organization. The Asset Consumer looks at the scope of a project (either current or future) and wants to find and evaluate assets within the Repository. In the case of the Asset Reviewer role, the Asset Reviewer is part of the process of validating that an asset belongs in a Repository. Therefore, this role executes one or more asset review processes to evaluate and possibly approve an asset. In the case of the Community Administrator role, this role’s focus is ensuring that approved assets are published or deployed, making the asset visible within the Repository or another tool. Figure 5-44 Tasks within the Review and Approval Activity 92 Strategic Reuse with Asset-Based Development Administration and Monitoring task The Administration and Monitoring task is where we make sure that the asset Repository is functioning as planned, has the correct set of assets, and that we understand how the Repository is being used. Therefore, there are three key tasks within this activity: Configure Repository: Plan and execute steps to administer the Repository in order to be used. Report on Asset: Provide summaries of asset and other Repository activities. Remove Asset: Describes the conditions when an asset is removed from visibility in the Repository and how the removal takes place. The tasks within the Administration and Monitoring Activity are depicted in Figure 5-45. Figure 5-45 Tasks within the Administration and Monitoring Activity Roles, tasks, and deliverables Next, we discuss roles, tasks, and deliverables. Review and Approval Activity Figure 5-46, Figure 5-47 on page 94, and Figure 5-48 on page 94 depict the Asset Consumer, Asset Reviewer, and Community Administrator roles found within the Review and Approval Activity along with their associated tasks and deliverables. Figure 5-46 Asset Consumer role and deliverables Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 93 Figure 5-47 Asset Reviewer role and associated deliverables Figure 5-48 Community Administrator role and associated deliverables Administration and Monitoring Activity Figure 5-49 and Figure 5-50 on page 95 depict the Community Administrator and Asset Consumer roles found within the Administration and Monitoring Activity along with the associated tasks and deliverables. Figure 5-49 Community Administrator role and associated deliverables 94 Strategic Reuse with Asset-Based Development Figure 5-50 Asset Consumer and key deliverables Key deliverables Next, we discuss key deliverables. Review and Approval Activity There are two key artifacts associated with the Review and Approval Activity: Reusable Asset: The key thing to remember is that each of the roles wants to make sure that the right assets are available. The perspectives of the roles bring a different focus on the scope and intent of the asset. In the case of the Asset Consumers, they want to find an asset that meets the need for a project. The Asset Reviewer is working to ensure that the assets in the Repository are high quality assets and appropriate to the needs of the organization. The Community Administrator is focused on making sure that assets that have been approved are visible to the target audience. Asset Review: This artifact provides the basis for the Reviewer’s vote. The Asset Review is typically submitted to the Repository and attached to the asset. The Asset Review must generally not be visible to Asset Consumers after the asset has been approved. Administration and Monitoring Activity There are three key artifacts associated with the Administration and Monitoring Activity: Asset Repository: We expect that the asset Repository will be installed and configured in a manner that is appropriate to the needs of the organization. Asset Types: Within the asset Repository, each asset will have to map to one of the provided asset types. The asset types describe what can be contained in the asset, what relationships an asset can or must have, and so forth. Asset Report: The asset report contains information regarding the assets in the Repository, their usage, and associated feedback. 5.6.3 Consume Reusable Asset Activity Next, we discuss the Consume Reusable Asset Activity. Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 95 Overview Let us take a more detailed look at the Consume Reusable Asset Activity. This capability pattern is focused primarily on: Locating reusable assets Evaluating the located assets Applying the located assets to the project Provide Asset Feedback on the applied assets, including identifying the need for assets that cannot be located The work is best done when the Asset Consumer has a well-defined problem that needs to be resolved. The Asset Consumer’s understanding of the problem directly affects the activities of searching and evaluating an asset for its relevance. A key aspect to an asset is that it is targeted to a specific context. To successfully reuse assets, we need to understand our current context before we evaluate and reuse. Note that the consuming assets play a key role in the production of assets. This suffices in a number of situations, such as: Asset feedback: After using an asset, the feedback provided on the asset helps the Asset Producers understand how their asset is used, areas for improvement, and aspects of the asset that worked well. Identification of needed assets: An Asset Consumer is one of the best sources for identifying where an asset is needed. An Asset Consumer often has the domain specific knowledge and can guide an Asset Producer both to where an asset is needed as well as what the asset must do or contain. Asset specialization: There are times when an asset is a close fit for a problem, but it is not quite an exact fit. The Asset Consumer can take the asset and determine that it is in the best interests of the team to customize the asset. The customized version of the asset might represent a variation that other Asset Consumers want to reuse as well. Working with the asset production team, the variation might end up as a new asset in the Repository. Figure 5-51 on page 97 depicts the tasks that are found within the Consume Reusable Asset Activity. 96 Strategic Reuse with Asset-Based Development Figure 5-51 Capability pattern for Consume Reusable Asset Activity Activities and tasks The tasks within the Consume Reusable Asset Activity include: Search Asset: This task includes steps for searching, discovering, browsing, and evaluating assets. Use Asset: Use the asset in the context of a consumer. This task includes a task to retrieve the asset and if necessary extend the asset. Develop Asset Specification: The task of identifying and specifying an asset shows up across each of the life cycle phases. This is an important task with which all team members must have familiarity. Often, those team members who are the most skilled in building asset implementations have the least domain-specific knowledge. Therefore, they rely upon those team members in the domain to identify possible assets and to create the associated asset specifications. Roles, tasks, and deliverables Figure 5-52 depicts the Asset Consumer role found within the Consume Reusable Asset Activity along with the associated tasks and deliverables. Figure 5-52 Asset Consumer role and associated deliverables Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 97 Key deliverables There are three key artifacts associated with the Consume Reusable Asset Activity: Reusable Asset: An Asset Consumer interacts with the asset Repository, searching to find assets that are relevant to the current problem and context. Reuse Feedback: As the Asset Consumer uses an asset, it is critical that the Asset Consumer provides feedback on the asset, which is beneficial both to future Asset Consumers, as well as those that produced the asset. Asset Specification: In cases where an asset does not yet exist, the Asset Consumer can create an Asset Specification that details the requested asset. The specification must provide technical justification for the asset. Not all assets will require an asset specification. In general, assets, which will require or are expected to require a meaningful investment for the organization or are of sufficient complexity or reuse scope as to require multiple teams, will benefit from creating an asset specification. The asset specification can go through several iterations as greater understanding of the problem and the solution are gathered from stakeholders. 5.7 When to use these processes When you start Asset-Based Development and you are still figuring out an adoption model and commitment level to this process, you might decide that you do not initially want to leverage all of the content. As mentioned earlier, RUP and, in turn, these plug-ins, are meant to provide you with a process framework. It is up to you and your organization to figure out which content fits with what you want to do and accomplish. With using Rational Method Composer and Rational Unified Process, you have tooling and a set of content based on best practices to pull together a process and approach that is unique to your organization. Also, remember that although these plug-ins are packaged using Rational Method Composer, they do not force you to follow or adopt the Rational Unified Process. You are able to leverage this guidance and merge it into other processes. 5.8 Asset process views There are five major views in a default configuration of the Asset-Based Development and Asset Governance content. These views are driven by user profiles, usage scenarios, and scope: To get started, a novice uses the Asset-Based Development and Asset Governance views. For reference purposes, use the Asset-Based Development and Asset Governance views. To understand what tasks are relevant to a particular role, use the Asset-Based Development Roles view. To understand the tasks that are relevant to a particular level of the organization, a manager uses the Asset-Based Development Levels view. To understand the organizational templates available to help roll out an Asset-Based Development process, use the Organization Templates - Assets view. 98 Strategic Reuse with Asset-Based Development When publishing a custom process configuration, you can choose which of these views to leverage. In addition, you can add your own client views as determined by the needs and preferences of your organization. 5.9 Creating extensions The Asset-Based Development and Asset Governance content is generic in regard to the type of context and process to which it can be applied. For instance, it can be applied to: Business, software, and so forth Software Development Process: RUP and so forth Domain: SOA and so forth The intent is that you can use this content and combine it with other plug-ins from the RUP library. These plug-ins can be sourced from within your organization, from IBM, or from a third-party organization. Possibilities to consider include: Create your own configuration and include Asset-Based Development specific views Create composite capability patterns and delivery processes Write your own Rational Method Composer extension (plug-in) Extend the current Asset-Based Development plug-ins (and other applicable RUP plug-ins) Write guidance for an Asset-Based Development solution to a specific domain (for example, SOA) 5.10 ZYX Electronics development case Next, we discuss the ZYX Electronics development case. 5.10.1 What is a development case A development case, as defined by the RUP Environment discipline, consists of a description of a software development process that is tailored for an organization or a project. In our case, we are talking about the development case used to develop the contents of this book, that is, the ZYX Electronics development case. The role responsible for creating the development case is the process engineer, responsible for providing teams with the organization’s development process. 5.10.2 Content sources for the ZYX Electronics development case We create a simple development case centered around Asset-Based Development based on the following processes: Rational Unified Process RUP for Asset-Based Development V3.0 and Asset-Based Development Governance Plug-in V1.0 IBM RUP for Service-Oriented Modeling and Architecture V2.4 (RUP SOMA) Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 99 IBM Rational Method Composer plug-in for SOA Governance V1.0 ZYX Electronics best practices In addition, content for the development case comes from proven best practices that we, as the authoring team, have applied successfully in the field. Looking at the list of content sources, you notice that we have two types of governance shown: SOA Governance and Asset Governance. In addition, we have two life cycles captured within the Asset-Based Development and RUP SOMA plug-ins. Figure 5-53 shows that there is a mapping between these sets of assets. Part 3, “Service Assets in an SOA” on page 333 of this book discusses this topic in more detail. Figure 5-53 Mapping SOA life cycle and SOA Governance to Asset life cycle and Asset Governance 5.10.3 More information For more information regarding the SOA plug-ins, refer to Part 3, “Service Assets in an SOA” on page 333 and the following SOA-focused information: Building SOA Solutions using the Rational SDP, SG24-7356-00: http://www.redbooks.ibm.com/abstracts/sg247356.html?Open For more details about how we built the development case, refer to Appendix B, “Integrating Asset-Based Development into a process” on page 713. To access and download the RMC plug-ins that are referenced in this chapter, use the following links: – IBM Rational Method Composer plug-in for SOA Governance V1.0: http://www.ibm.com/developerworks/rational/downloads/06/plugins/rmc_soa_gov/ soa_plugin.html – IBM RUP for Service-Oriented Modeling and Architecture V2.4: http://www.ibm.com/developerworks/rational/downloads/06/rmc_soma/ 100 Strategic Reuse with Asset-Based Development – RUP for Asset-Based Development V3.0 and Asset-Based Development Governance Plug-in V1.0: http://www.ibm.com/developerworks/rational/downloads/07/rup_abd_gov/index.ht ml Chapter 5. Asset-Based Development and Asset Governance Rational Method Composer plug-ins 101 102 Strategic Reuse with Asset-Based Development 6 Chapter 6. Value, impact, and return on investment In this chapter, we focus on the value, impact, and return on investment (ROI) that can be achieved via assets and a reuse program. After reading this chapter, you will understand that there are a number of sources for metrics, asset considerations that must be part of the value discussions, and metrics that must go into return on investment calculations. 6.1 Impact and ROI We cannot give you a simple, compact formula, such as E = mc2, to use in your work as you track and manage your assets to help you calculate the return on investment and the impact of an asset, or ideally, to allow you to calculate these figures in advance of developing the asset. Unfortunately, we are not yet at the point where there is a simple formula. However, with the importance of this topic, we cannot let the lack of a single, simple formula hold us back. When looking at moving to Asset-Based Development, there are a number of costs associated with adopting this approach: Purchase, customization, and rollout of a development process Tooling to create assets A Repository for the assets Enablement and training for producing assets Enablement and training for consuming assets For certain organizations, business model evaluation and update as you migrate to an asset-based approach Creation of the asset (including spending time to make the asset both reusable and consumable) Consumption and usage of the asset Maintenance and support of the asset © Copyright IBM Corp. 2008. All rights reserved. 103 To justify these costs, both initially and ongoing, the organization needs to be able to see that there is a positive impact from the assets and that a positive ROI is achieved in a specified time frame. Therefore, we need to find ways to measure and calculate the value of the asset, which are accurate and can be defended when placed under scrutiny. And regardless of how strongly we believe in Asset-Based Development, we still need to be able to provide metrics that support the decision to adopt Asset-Based Development. As discussed in our opening chapter, those of us working in software delivery are now more than ever integrated with the business. Therefore, the decision to adopt Asset-Based Development is a business decision and requires information that allows the business to choose how to make investments. 6.1.1 Avoid over-measuring In this chapter, we will look at a large number of metric-generating aspects and measurement points within a reuse program. The intent is not to get you to leverage all of these data sources and collect as much data as possible. We do not want you to spend all of your time locating data sources and tracking and compiling data. That is a project unto itself. Jeffrey Poulin, in Measuring Software Reuse, proposes that the Relative Cost of Writing for Reuse is 1.5, which means that there is an additional 50% cost when building reusable software. He also proposes that the Relative Cost of Reuse is 0.2. This means that the relative cost to use the asset is 20% of what it cost compared to having to rebuild the solution. These relative cost figures were arrived at by conducting an analysis across a range of other formulas and results achieved in reuse situations. In most cases, these relative cost numbers were “close enough” to the result from other more complex efforts that it raises the question, “Is it worth spending time gathering data and calculating more “accurately”?”. Keeping this in mind, we do want you to be aware of the data sources and aspects of development and reuse that are at your disposal. Based on the availability of data, your project constraints and goals, and the needs of the organization, you will need to pick the data and metrics that best fit your needs. Before starting to collect the data, spend time figuring out what questions you will be answering with the information that is collected. Many of the more common reasons why we measure include: Communicate effectively: Measurement supports communication among stakeholders. Objective measures reduce ambiguity. Identify and correct problems early: Measurement facilitates proactive management. Potential problems are identified early and managed. Problems discovered late are more difficult to manage and can be more costly. Good project managers do not wait for problems to arise; they anticipate problems. Make informed trade-offs: Decisions in one area often impact other areas, but these decisions are usually necessary. Measurement helps managers assess the impact. Track specific project objectives: Measurements help track specific objectives, such as: “Is the project on schedule?”, “Is the quality improving?”, or “Is the system ready to be delivered?” Manage risks: Rational Unified Process (RUP) describes a risk-focused approach to software development. Why not use measurements to track risk areas and reduce risks on projects? Defend and justify decisions: Managers must effectively defend and justify project performance decisions. Measurement provides the rationale for selecting the best alternatives. 104 Strategic Reuse with Asset-Based Development Remember this advice as you work your way through the remainder of this chapter. For your organization and situation, which metrics will provide the most value? How will this information be used to assist in rolling out and then managing your asset reuse program? How can this information be used to improve an existing reuse program? How can this information be used to help align a reuse program with the needs of the business? 6.2 Not all assets are equal An asset can contain a large variety of artifact types. And, assets can be built from a large number of tools. Thinking that all assets are equal in value and that anything can be an asset leads us into situations where we have an asset Repository that is viewed as a scrap heap and dumping ground rather than a vault containing valuable resources. Therefore, we need to remember that not all assets provide the same value to the organization. Therefore, we want to find ways to guide ourselves and our teams toward the assets that provide the most value to the organization. There are four major perspectives that we can leverage as we analyze the value of an asset. These perspectives include: Asset production: In this perspective, we want to see how much support is in place to build a high quality and consumable reusable asset. The Asset Production scorecard is found in Table 6-1. Questions to ask include: – Is there associated tooling that supports points of variability? Support for testing the asset? Packaging the asset? Composition of an asset from other assets? Support for documenting the asset? – What is the cost to produce the asset? – Will the asset support and align with industry standards? – In the case of a generative asset, is there support in place to update and customize the content when it is generated? Table 6-1 Asset Production scorecard Category Possible values Guidance Asset tooling support: Points of variability {Yes | No} Does the asset production tooling support points of variability? Packaging {Yes | No} Does the asset production tooling support the packaging of the asset? Documenting {Yes | No} Does the asset production tooling support and account for the creation of documentation in support of the asset? Support for composition {Yes | No} Does the asset production tooling support the creation of new assets via the composition of existing assets? Support for asset analysis and methodology {Yes | No} Does the asset production tooling support the process associated with building this type of asset? Asset testing {Yes | No} Does the asset production tooling support the testing of the asset? Chapter 6. Value, impact, and return on investment 105 Category Possible values Guidance Asset dependencies {Yes | No} Does the asset have dependencies on other assets? Asset specification {Yes | No} Does an asset specification exist? Reference solution {Yes | No} Does a reference solution exist? Cost to produce # What is the cost to build the asset? If using this scorecard in advance of building the asset, enter an estimate. If using the scorecard post-asset construction, enter the actual cost. Industry standard support {Yes | No} Does the asset leverage and adhere to industry standards? Customizability of the asset {None | Low | Medium | High} Has the asset been built so as to support customization via points of variability? Customizability of the output {None | Low | Medium | High} In the case of a generative asset, Can the output of the asset be customized? Time taken to build asset {Low | Medium | High} N/A Run time compared to design time {Run-time | Design-time} Is this a design time or a runtime asset? Asset production process {Yes | No} Will a process be followed in building the asset? Examples of expected processes to be leveraged include SOMA, pattern-based engineering, Exemplar Authoring, and so forth. Asset consumption: In this perspective, we look at the support in place for those users consuming a certain type of asset. The Asset Consumption scorecard is found in Table 6-2 on page 107. Questions to ask include: – Is there associated tooling that supports working with points of variability? Is the documentation for the asset integrated with the working environment? Does the environment support the composition of assets into a larger solution? Is there support for customizing the output from the asset (in the case of a generative asset)? – Is there expertise available to support the use of the asset? – How much skill is needed to learn how to use the asset? How much skill is needed to use the asset? – Is there supporting documentation available? What is its quality? 106 Strategic Reuse with Asset-Based Development Table 6-2 Asset Consumption scorecard Category Possible values Guidance Reuse style {Black Box | Gray Box | Glass Box | White Box} Ideally, we want to have assets that either can be reused as is or assets that provide points of variability that control and manage how the asset can be adjusted. White Box is the least preferred, because it permits unlimited changes. Asset usage {Compositional | Generative} Another aspect to consider is whether the asset is meant to generate content, or if it is meant to be part of a larger composition. Points of variability {None | Low | Medium | High | Unlimited} Preferably, we have a limited set of points of variability. A high number of points of variability can mean that it will be difficult to learn and use the asset. Unlimited, which is an undesirable trait, is the choice to use if the asset is considered White Box. Unlimited is an undesirable trait for an asset. If the asset is Black Box or Gray Box, the only option for this selection is None. An asset that has a high number of points of variability is considered Fine-grained. An asset that has a low number of points of variability is considered Coarse-grained. Tooling support: N/A An important aspect of working with an asset is whether the tooling that is meant to be used in conjunction with the asset actually supports reuse. Support for reuse from the tooling can make reuse easier, more productive, and enjoyable. Import {Yes | No} Does the tooling used to consume the asset support importing the reusable asset? Customize via points of variability {Yes | No} Does the tooling used to consume the asset support the customization of the asset through its points of variability? Ease of asset consumption {Low | Medium | High} Is it easy to consume assets within the tooling? Higher ease of use is preferred. Chapter 6. Value, impact, and return on investment 107 Category 108 Possible values Guidance Integrated documentation {Yes | No} Is the asset’s documentation accessible from within the tooling? Leveraging compositional features of asset {Yes | No} Does the tooling support the compositional features and aspects of the asset? Leveraging generative features of asset {Yes | No} Does the tooling support the generative features and aspects of the asset? Customize output of asset {Yes | No} In the case of a generative asset, does the tooling support updating of the output from the asset? Does this account for support of reapplying the asset? Is there support for iterative development? Cost to consume # Enter a dollar figure representing the cost to consume the asset. This must include the cost to learn how to use the asset, as well as the cost to use and apply the asset. Complexity {Low | Medium | High} From a consumption point of view, how complex is the asset? Ease of use {Low | Medium | High} From a consumption point of view, how easy is it to use the asset? Ease of learning {Low | Medium | High} From a consumption point of view, how easy is it to learn to use the asset? Expertise available to support asset {None | Low | Medium | High} How much expertise is available to support the use of the asset? Location of support {Internal | External} Is the expertise internal to the organization or external? Consumer’s required skill level {None | Low | Medium | High} What is the skill level required to work with this asset? Time taken to use asset {None | Low | Medium | High} How much time does it take to successfully use the asset? Expected time to modify and reuse the asset {None | Low | Medium | High} Preferably leveraging the points of variability, how long does it take to modify the asset? Expected time to modify and reuse the output from the asset {None | Low | Medium | High} How much time does it take to modify the output from the asset? Strategic Reuse with Asset-Based Development Category Possible values Guidance Presence and quality of supporting documentation {None | Low | Medium | High} Is there documentation supporting the asset? What is the level of quality of the asset documentation? Asset’s alignment with iterative development {None | Low | Medium | High} Does the asset support iterative development? Especially important for design-time, generative assets. Run time compared to design time {Run-time | Design-time} Is this a design-time or a run-time asset? Asset management: In this perspective, we look at how well the asset can be managed. Part of this information might not be available until after the assets have already been put into use. The Asset Management scorecard is found in Table 6-3. Questions to ask include: – Does the asset align with the categorization and classification system in place? – What feedback has been received about the asset? – What is the change history for the asset? Is there a great deal of churn? – How many times has the asset shown up in searches? How many times is the asset reused? Table 6-3 Asset Management scorecard Category Possible values Guidance Number of times that the asset has been reused # Leveraging metrics from the asset Repository, how many times has the asset been used? Number of times that the asset has been considered for reuse # Leveraging metrics from the asset Repository, how many times has the asset been considered for reuse? Asset feedback and ranking # What is the user feedback on the asset? Usually, this value is captured as a number. Alignment with categorization and classification {Yes | No} Does this asset align with the classification system used in the Repository? Change history {Never | Infrequent | Frequent} How often is the asset updated? Legal contracts in place {Yes | No} Are any necessary legal contracts, licenses, and so forth in place to allow the organization to use the asset? Asset defects {None | Low | Medium | High} How many defects are reported against the asset? Expected shelf life for the asset? {Short | Medium | Long} How long do you expect that this asset will be in use and relevant? Chapter 6. Value, impact, and return on investment 109 Alignment with business: In this perspective, we look at how well the asset aligns with and supports the business. Part of this information might not be available until after the assets have already been put into use. The Alignment with Business scorecard is found in Table 6-4. Questions to ask include: – Is this asset targeted to a business or technology domain? – How often does the issue occur that the asset addresses? – From where will funding for the asset come? Table 6-4 Alignment with Business scorecard Category Possible values Guidance Domain {Business | Technology} Is this asset tied to a specific business or technology domain? Domain specific {Domain Specific | Domain Independent | Application Dependent} Is this asset domain specific, domain independent, or application dependent? Alignment with business direction and strategy {None | Low | Medium | High} What is the alignment between the asset and the business strategy? Frequency of underlying recurring problem {Never | Infrequent | Frequent} How often does the underlying problem that the asset addresses occur? Cost of addressing underlying problem manually # What is the cost of manually addressing the problem that the asset handles? Fund creation {Yes | No} Is the business willing to fund the creation of the asset? Support and maintenance funding {Yes | No} Is the business willing to fund the support and maintenance of the asset? The scorecard contains a collection of subjective and objective data points to consider as you analyze an asset. Generally, we expect to limit building assets with the following characteristics: White Box: Providing the consumer of the asset with too much freedom is likely to greatly diminish the impact of the asset. Lack of an asset creation process: An asset creation process will often guide you to successfully identify the necessary points of variability on an asset. Lack of a process often leads to assets that overestimate the amount of required variability. Lack of tooling support for reuse: Whether producing or consuming an asset, you want tooling that supports the asset, points of variability, and asset import and export. Limited automation in support of the asset: Although assets, such as best practice documents, have value, they require each user of the asset to follow through with a significant amount of manual work in leveraging the “asset”. Therefore, you will want to move to leverage automation as much as possible. 110 Strategic Reuse with Asset-Based Development You can use this scorecard at a number of times, including: Pre-asset and post-asset creation: Before you build an asset, use the scorecard as a guide in determining the value of the asset. In addition to providing you with an initial indication of the value of the asset, it will remind you of key considerations to remember as you build your asset. When the asset has been built, use the scorecard as a checklist to ensure that attention has been paid to key details. Pre-asset and post-asset consumption: Just as there is a cost to build a reusable asset, there is a cost to consume the asset. Therefore, a consumer is looking for assets that add value and that are easy to consume. There is little value to an Asset Consumer if the asset that the Asset Consumer finds has limited consumability or poor quality. Also, a consumer wants to figure out how customizable the asset is and whether it can be made to fit into that specific consumer’s situation. 6.3 Gathering data The value that is generated from the formulas that we use will be highly dependent on the accuracy and quality of the input data. As the saying goes, “garbage in, garbage out”. We want to make sure that we are capturing accurate and supportable data. As mentioned earlier, there are startup costs associated with both adopting Asset-Based Development and then ongoing costs as we produce, consume, and manage our assets. Let us look at the data sources available both in support of starting up Asset-Based Development and then in support of the ongoing funding needed. When gathering data, try to leverage automated sources as much as possible. Leverage tools, such as Rational Asset Manager, WebSphere Service Registry and Repository, Rational Portfolio Manager, Rational Project Console, Rational ClearCase, and Rational ClearQuest. Remember that it is highly unlikely that you will capture all of the metrics that you require based on just one source or tool. For example, a key aspect of reusable assets is that the asset is indeed reused. However, it is often difficult to determine how an asset is being reused. This becomes even more difficult in large and distributed organizations. When using an asset Repository, you are able to track how many times an asset is downloaded, by whom, the types of assets, and so forth. Figure 6-1 on page 112 shows one of the metrics windows from Rational Asset Manager. Although this window provides us with useful information, it is insufficient to use for justifying investment in assets. In addition, this information comes in after much of the development cost has been incurred. Chapter 6. Value, impact, and return on investment 111 Figure 6-1 Repository metrics A Repository has additional metrics that can be added to the mix. As Figure 6-2 on page 113 shows, these metrics can be categorized by role. 112 Strategic Reuse with Asset-Based Development Figure 6-2 Metrics by role Successfully measuring the reuse program is based on the fundamental premise of a consistent measurement and comparison framework. Crucial to this framework is the need to come to agreement early about how reuse will be measured in the organization. There must be agreement on the metrics and the definition of how those metrics are calculated and captured for reasonable comparison and reporting. Identifying the business needs and the measurements for meeting those needs ultimately guides the organization to the set of behaviors for addressing the needs. The reuse program must operate within the context of the business needs. Progress toward meeting those needs must be measured on a regular basis. To do this, the following list identifies business motivators for conducting reuse activities. The metrics for these motivators and the approach for collecting them must be defined. In practice, there must be a minimal set of motivators that are initially selected; when selected, the proper metrics and measurement techniques must be put in place: Reduce development costs. Reduce maintenance costs. Increase productivity. Improve product quality. Provide consistent look-and-feel. Remove barriers to entry for new products. The general framework for categorizing these metrics is illustrated in Table 6-3 on page 109. Chapter 6. Value, impact, and return on investment 113 Figure 6-3 Reuse metrics framework1 6.3.1 Startup data sources When starting an Asset-Based Development initiative, you will need to have data that supports the investment. There are a number of data sources that can be leveraged to support this decision, including: Your own organization’s Software Delivery Metrics: – How long does it take to deliver a project? Associated metrics to find include projects on time, number of delays, length of delays as a percentage of overall delivery time, and so forth. – Success and failure rate for projects – Amount of source code (Source Lines of Code (SLOC), Kilo Lines of Code (KLOC), lines of code (LOC))? – Function points? Your own organization’s pressure points, including aspects, such as: – Backlog of projects – Skill shortages – Resource constraints Existing reuse within your organization: Discuss reuse occurrences that are already happening with your Architects and Designers. Industry metrics: Consult industry groups and analysts. Case studies: Consult with software vendors and service providers asking for references and case studies. Research papers: Review papers from researchers both in academia, as well as in private industry. Books: Review literature on the topic: – For example, in Software Reuse: Architecture, Process, and Organization for Business Success, Jacobsen et al estimate the following benefits of systematic reuse: 1 114 • Time to market: 2 to 5 times reduction • Defect density: 5 to 10 times reduction • Maintenance cost: 5 to 10 times reduction Adapted from Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. Strategic Reuse with Asset-Based Development – Another excellent resource on the topic is Measuring Software Reuse, Jeffrey S. Poulin. Existing assets: Consult with industry sources to find existing assets. What benefits are users told to expect from using these assets? Pilot projects: If more data is needed, it might make sense to request partial funding to support a pilot project. A real-world test drive of this approach within your organization will provide additional metrics and guidance about what it takes to start up the program, issues that might arise, and so forth. 6.3.2 Ongoing data sources After an Asset-Based Development program is put into place, we will continue to need to gather data to support the ongoing funding of the program. Tip: In addition to using these data points to support investment, a positive side effect of gathering this information is that it can also be used to guide you to areas where reuse needs to be leveraged. Pre-asset creation In cases where an asset has not yet been built, we can consult the following sources: Architecture and design documents: Do these documents specify elements in the solution that have a great deal of commonality? Are there estimates in place as to how long each instance will take to build? Models: Are there subsystems, mechanisms, services, and so forth that have commonality? Are there estimates in place regarding how long it will take to build these elements? Existing systems: Are there reference solutions in place that serve as a blueprint for how future development will be done? How long did it take to build the existing systems? How long will it take to recreate the reference solution in new systems? Historical metrics: Based on past projects, are there areas that take significant effort? Are there areas that have high defect rates? Risk profiles: Are there aspects of the system that are more risky than other aspects? Frameworks: Does the project team plan to use one or more frameworks in their development? Are there recurring patterns of using the framework? Business processes: Are there groups of services that often work together as part of a business process? Are there groups of services that work together across a number of business processes? How many artifacts are needed within the asset? How many of these artifacts already exist? Repeating questions: Do the experts within your organization find that they continue to see the same questions asked? What topics are covered by the question? How often do they have to answer these questions? Best practices documents. We often find that best practice documents exist, but are not used. Are there important best practices that need to be codified? What areas do the best practices cover? What is the anticipated impact? Leverage past asset production data: – How long did it take to build an asset? Chapter 6. Value, impact, and return on investment 115 – How much is spent on maintaining an asset? – You can look at individual assets that are thought to be similar and classes of assets, as well as averages across all assets. Leverage past asset management data: – How long does it take to review an asset? – Average number of downloads? – Discussion entries – Feedback levels Leverage past asset consumption data: – How long does it take to learn to use an asset? – How long does it take to apply an asset? Post-asset creation In cases where the asset has already been built, we can consult the following sources: User community surveys: Contact the people that have downloaded the asset and query them on their use of the asset. Defect rates: Are defects being filed against the asset? Help requests: Are requests coming in for help on using the asset? In the case of code generation assets, are defects that are generated from the asset showing up across a number of targets? Monitor discussion forums: Are there forums, mailing lists, or news groups related to asset use? And if so, is the asset under scrutiny discussed? Project plans: Are project plans referencing the use of assets? Architecture and design documents: Do these documents specify the assets to be used? Do they specify what is to be generated via these assets? Asset specification: The asset specification must detail when and where the asset must be used. This information will help to guide you in your effort to gather metrics. Tooling associated with the asset: Evaluate the environment that is used with the asset. What metrics does it provide? For instance, if the asset is a service, does the service provider provide details about how much use the service receives? Actual time required to build the asset Actual time spent in updating and maintaining an asset Actual time spent in learning how to use an asset Actual time spent in applying and using an asset Reuse compared to reapply In the case of certain assets, such as design time and code generation assets, we also need to differentiate between a use and reapply. For instance, we can use a Pattern to generate code associated with a project. As we work through development on the project, we might need to run the pattern multiple times - each time tweaking the input model to influence the code that is generated. We reuse the pattern each time, but as far as metrics are concerned, these are reapplies rather than reuse. A metric that summarizes reuse as opposed to reapply can be useful as a guide into the consumability of an asset. But in terms of ROI and impact, we are usually focused on reuse and not as interested in reapply. 116 Strategic Reuse with Asset-Based Development 6.4 Asset Reuse Strategy The approach that we take in producing, managing, and consuming assets will also have significant influence on our ROI and impact. 6.4.1 Tooling and methodology It is extremely important that we have tooling and methodology that supports us in creating our assets. Automation and simplification lead to situations where asset quality is higher, quicker to market, and, in many cases, easier to consume. The more that we can automate and simplify the creation of assets, the easier it becomes to make the case that we must build the asset. A common, proven process leads to predictability and repeatability. These processes are valuable when you plan, budget, and manage investments. 6.4.2 Asset creation and acquisition approaches We also need to consider what the correct model is for creating or acquiring an asset. An initial decision that will need to be considered is how you will acquire an asset. Options include: Acquire from a third party. This can include: – Purchase: This can include the acquisition of components, models, services, and so forth. – Acquire via Open Source: The Open Source community produces many useful assets. Regardless of the source, we might find that additional expense is incurred in license review, negotiations, and enablement. Build the necessary asset. We can leverage resources within the organization, outsourced resources, or a combination. An asset can also require a mixture of assets and artifacts from a number of sources. 6.4.3 Asset type The type of asset will also have an impact. Certain assets have characteristics and requirements related to timing of creation, development process, approach to consumability, consumption model, and so forth. A team must be aware of the best practices associated with the type of asset with which they are working. We will look at best practice approaches to building specific types of assets in later sections of this book. For now, it is important to remember that the approach that you take will have an impact on your estimates, metrics, and likelihood to get funding support. 6.4.4 Reuse scope The scope of the reusable assets can also affect the cost. Generally, the higher the asset’s scope for reuse, the higher the testing, packaging, communicating, and maintenance cost. One strategy for this is to start with lower scoped assets and then grow the scope across the phases over time as experience and lessons learned are gathered as shown in Figure 6-4 on page 118. Chapter 6. Value, impact, and return on investment 117 Figure 6-4 Reuse scope 6.5 Calculations Now that we have ideas about where we can capture input data, let us start to look at how we can leverage that data in calculations. As seen in Figure 6-5, our first calculation is simple and obvious. The cost of producing and using an asset must be less than the cost of just “business as usual”. productivity cost using an asset approach cost to implement asset productivity cost of business as usual Figure 6-5 Basic ROI calculation Let us take a more detailed look at the elements that comprise this formula, starting with the user productivity cost. In this case, we are interested in the consumer of the asset, and we need to figure out what the cost is for that person to use the asset. Questions that we want to consider: The amount of time that is spent in learning about the asset: – What problems does the asset address? – What is the solution that is provided? How can it be customized? – What other assets can be used in conjunction with this asset? – What constraints are placed on your project after you have used the asset? When you have learned how to use the asset: – How long does it take to actually apply and use the asset? – How many times will the asset be used? – How many people need to use the asset? 118 Strategic Reuse with Asset-Based Development Figure 6-6 provides a view of how we calculate the user productivity cost, where: L: Learn Asset, the average amount of time that it takes to learn to work with the asset A: Apply Asset, the average amount of time that it takes to someone to use and apply the asset x: Number of asset users y: Number of times that the asset will be applied x(L + y(A)) = user productivity cost Figure 6-6 User productivity cost calculation Now, let us take a more detailed look at the factors that go into calculating the cost of building the asset: Reference solution: Depending on the type of asset that we build, we might want to take a bottom-up approach when building our reusable assets. Therefore, we must have a reference solution in place that we can use as the starting point for building the reusable asset. Asset specification: Even when we have a reference solution, we will still need to spend time documenting how this reference solution really is reusable. Therefore, we need to spend time creating a specification for the asset that details the problem that it addresses, the solution that it provides, variability points, related assets, and so forth. Asset implementation: At this point, most of the hard work is done, we just need to build the asset itself. The hard work surfaces in creating the reference solution and figuring out how it must present itself as a reusable asset. Creating the asset becomes a mechanical task. Figure 6-7 provides a view of how we can calculate the cost of building the asset, where: DA: Describe the asset, whereby we create a reference solution and then document that solution as an asset specification AI: Asset implementation: Whereby we create an asset based on the specification (DA + AI) = cost of asset implementation Figure 6-7 Calculating the cost of the asset implementation Although not a part of the high-level equation with which we started, we also need to think about project risk. Figure 6-8 provides a view of how we can calculate project risk: z: Probability of an incorrectly created solution; the contention is that by using an asset the probability will be much lower CD: Cost to discover a defect CR: Cost of rework z(CD + CR) = project risk Figure 6-8 Calculating project risk Chapter 6. Value, impact, and return on investment 119 The project risk factor can then be used to adjust estimates based on whether assets are used in the project. 6.6 Cost of reuse failure Just as important as knowing the cost of producing and using assets successfully, it is important to recognize that there is a cost associated with reuse failure. You can obtain information about reuse failure in Incentive Compatibility and Systematic Software Reuse, Fichman and Kemererm, Journal of Systems and Software, New York: April 27, 2001; Volume 57, Issue 1, page 45. 6.7 Additional calculations The discussion regarding the calculation of asset financial estimates is more detailed than those calculations discussed so far in this chapter. The discussion to this point is likely what you expect all members of the team to be aware of. It provides sufficient insight without overburdening them with details. You can read additional content discussing calculations, metrics, and estimating in the Asset Governance Rational Method Composer (RMC) Plug-in, as well as in a number of books. A set of sample spreadsheets are provided in the Asset Governance RMC plug-in to help get you started in creating your financial estimates. There are three calculators to assist you: Asset ROI Calculator2: This sample calculator expects input on development costs and expects assets that are not modified directly by the consumer. The calculator estimates the ROI for a source code-based asset and uses lines of code (LOC) as the unit of measure. These metrics are adapted from Jeff Poulin’s metrics in Measuring Software Reuse, Addison Wesley. Figure 6-9 on page 121 shows an example of this calculator. Project ROI Calculator: A representative ROI calculation is derived from an extensive analysis performed by B. W. Boehm, “Economic Analysis of Software Technology Investments”, originally published in Analytical Methods in Software Engineering Economics, (Gulledge and Hutzler, editors, Springer-Verlag, 1993). The study was an analysis of which productivity improvement strategies produced the highest payoffs. The study covered software development from the 1950s into the 1990s. Reuse Financing3: This tool determines the financing required to initiate and maintain the reuse program. These metrics are adapted from Wayne Lim, Prentice-Hall, Managing Software Reuse. Figure 6-10 on page 122 shows an example of this calculator in use. 2 3 120 Adapted from Poulin, Jeffrey C., MEASURING SOFTWARE REUSE, ©1997. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. Adapted from Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. Strategic Reuse with Asset-Based Development Figure 6-9 Sample Asset ROI calculator Chapter 6. Value, impact, and return on investment 121 Figure 6-10 Sample financial spreadsheet 122 Strategic Reuse with Asset-Based Development Part 2 Part 2 Reusable Assets In this part, we take a more in-depth look at how to implement a strategic reuse program. The discussion will cover process, tooling, and governance. As shown in Figure P-2, we discuss reusable assets in general. Part 3, “Service Assets in an SOA” on page 333 and Part 4, “Patterns” on page 455 will build upon this content and will look at specific types of reusable assets, including Services and Patterns. Part 1: Introduction Part 2: Reusable Assets •Introduction to Asset-Based Development •Adopting Asset-Based Development •Process and Tooling •Configuring Asset Management •Case Study Overview •Produce, Consume, and Manage Assets •Impact and ROI Part 3: Services •Services as Assets •Produce, Consume, and Manage Service Assets Appendixes •Rational Asset Manager Installation and Administration •Process Integration Part 4: Patterns •Patterns as Assets •Produce, Consume, and Manage Pattern Assets Figure P-2 An overview of the structure of the book © Copyright IBM Corp. 2008. All rights reserved. 123 124 Strategic Reuse with Asset-Based Development 7 Chapter 7. Adopting Asset-Based Development This chapter provides a more in-depth look at how we can adopt a strategic reuse process. When looking at adopting a strategic reuse program, there are changes in culture, process, tooling, and skills. Introducing these changes into an organization needs to be planned and will occur iteratively and incrementally. In situations, such as this one, there are a number of things that we can do to help the organization in both making a case to adopt a strategic reuse program, as well as set up a foundation for the program’s implementation. Considerations include: Pilot projects Reuse maturity models Organization templates Reuse adoption strategy Leverage Rational Method Composer plug-ins covering Asset Governance and Asset-Based Development ZYX: In the past, the CIO of ZYX Electronics has seen the concept of reuse promoted as a cure-all for an organization. However, time and again, the approach did not live up to its publicity and failed to deliver the promised benefits. Therefore, although the idea of reuse and the promised benefits has appeal, the CIO is reluctant to move ahead quickly. © Copyright IBM Corp. 2008. All rights reserved. 125 7.1 Pilot projects When moving an organization forward in adopting a strategic reuse program, it might make sense to set up a pilot project. When setting up a pilot project, we want to make sure that we are going into the project with both a plan and a purpose. There are criteria to consider for selecting a pilot project. These criteria include: Choosing the emphasis for the pilot: – Focus on process refinement – Focus on tool selection validation – Focus on metrics validation – Focus on skill building Choose the domain within the organization on which to focus Consider the organization’s reuse and asset maturity Evaluate the impact to the organization Figure 7-1 is a sample outline of a reuse pilot and the major tasks for the pilot. The focus of this sample is on process refinement. Figure 7-1 Sample process for a pilot The tasks within the Assess phase include: Conduct reuse assessment: – Evaluate reuse opportunities – Evaluate target consumer team skills – Evaluate architectures and code – Determine target consumer projects Install and configure products Prepare productivity training Conduct introductory training: – Train asset manufacturing team – Train Asset Reviewers and governance board – Train project consumer team Select asset manufacturing, consumer, and governance board teams Evaluate as is development process 126 Strategic Reuse with Asset-Based Development The deliverables that emerge from this phase, include: Reuse assessment document Selected target consumer projects Installed products Teams selected Teams received introductory training Existing process evaluated The tasks within the Construct Process phase include: Prepare Reuse Strategy: – Determine candidate asset types – Determine packaging strategy – Determine asset versioning strategy – Evaluate and select classification schemas – Establish reuse marketing and communication plan – Determine funding strategy Customize the process and organization Submit, approve, publish, consume, and retire assets Prepare customized process training material Conduct customized process training Train teams The deliverables include: Reuse strategy document (Reuse vision, Asset types and packaging, Target development flow, Reuse environment, Target metrics) Customized process (Asset-Based Development (ABD) Process document) Training material documents and teams trained Governance boards in place The Implement Process phase includes the following tasks: Pilot asset manufacturing team executes – Produce, package, and classify assets – Manage assets – Publish assets Pilot Governance Board executes Review and approve assets Pilot Project Consumer Team executes: – Consume assets – Provide asset feedback The deliverables associated with this phase include: Reusable assets Chapter 7. Adopting Asset-Based Development 127 Reused assets The Measure phase includes the following tasks: Measure: – Prepare measurement report – Communicate report Plan for rolling out to other projects Deliverables for this phase include: Asset measurement report Planning To complete these tasks and build these deliverables, we leverage content from the Asset Governance and Asset-Based Development Rational Method Composer plug-ins. In particular, there are a number of templates that we can use as a starting point when creating a Reuse Assessment and a Reuse Strategy. After you have identified the focus of the pilot and the major tasks (as shown in Figure 7-1 on page 126), create the estimate for the pilot. 7.2 Reuse maturity model A number of models are available in the industry. Several of the models are quite generic and apply to software development in general; several models get more specific to software reuse; and other models get specific in support of specific types of reusable assets. For software in general, look at the Capability Maturity Model Integration (CMMI), which is described as, “Capability Maturity Model Integration (CMMI) is a process improvement approach that provides organizations with the essential elements of effective processes. It can be used to guide process improvement across a project, a division, or an entire organization. CMMI helps integrate traditionally separate organizational functions, set process improvement goals and priorities, provide guidance for quality processes, and provide a point of reference for appraising current processes.”1 Information about how to leverage Rational Unified Process (RUP) to achieve CMMI compliance can be found at: Enhancing RUP for CMMI compliance: A methodological approach at: http://www.ibm.com/developerworks/rational/library/5318.html RUP with CMMI Compliance Support V1.0 Beta at: http://www.ibm.com/developerworks/rational/downloads/07/rup_cmmi_v1/index.html Reaching CMMI Levels 2 and 3 with the Rational Unified Process (white paper that ships with RUP) at: ftp://ftp.software.ibm.com/software/rational/web/whitepapers/2003/rupcmm.pdf Looking more specifically at reuse, we can consider a framework, such as the Reuse Maturity Framework\Five Stages of Reuse Maturity, from Wayne Lim2 as depicted in Figure 7-2 on page 129, Figure 7-3 on page 130, and Figure 7-4 on page 131. 1 128 http://www.sei.cmu.edu/cmmi/general/index.html Strategic Reuse with Asset-Based Development Figure 7-2 Reuse Maturity Framework3 2 3 Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. Chapter 7. Adopting Asset-Based Development 129 Figure 7-3 Stages of Reuse Maturity4 4 Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. 130 Strategic Reuse with Asset-Based Development Figure 7-4 Progression across stages of Reuse Maturity5 When looking at specific types of reusable assets, such as patterns or services, you are likely to find specialized maturity models. For an example of a maturity model that is specific to services, look at Part 3, “Service Assets in an SOA” on page 333. 7.3 Organization templates When setting up an organizational structure within which your asset reuse program will operate, you can leverage organization templates to help plan your structure. These templates provide guidance in terms of governance, repositories, and team and organization structure. Therefore, they provide a starting point that you can leverage as you begin adopting Asset-Based Development. The templates can be used “as is” or can be modified to better fit within your organization. Our advice is to use the templates “as is” when getting started and then modify them when you gain experience in asset reuse. Although not a maturity model, you will find that there is a loose relationship between an organization’s maturity and the template that the organization selects. As seen in the previous section, there are a number of aspects that surface within a maturity model, such as: Reuse culture Process Funding and sponsorship 5 Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. Chapter 7. Adopting Asset-Based Development 131 Each of the organization templates has a number of categories that are used to describe its characteristics, including: Reuse scope: The intended reuse visibility. As can be expected, more formality and structure appear as the scope of the reuse increases. Governance board: The number and kind of governance boards Asset management: Location of the resources that manage the assets Asset manufacturing: Location and resources producing the assets Asset Use: The techniques and formality for asset reuse Figure 7-5 provides a comparison of the characteristics for each of the organization templates. Figure 7-5 Characteristics of organization templates We provide more detail regarding each template in the following sections. We present the templates based on increasing order of formality. 7.3.1 Ad-Hoc organization template Figure 7-6 on page 133 depicts the Ad-Hoc organization template. Unfortunately, many organizations begin their asset work using a organization template similar to this one. This is an unsatisfactory structure to adopt, because it introduces the following challenges: Difficult to produce sufficient results and benefits to warrant migrating to a more formal structure. Sometimes, a level of structure is needed to capture and report benefits. Creates the potential for the Repository to become a junkyard of assets. With no governance, the Asset Producers feel that their assets are reusable and the needs of the consumers are not directly considered or are assumed. Soon, the Repository is rendered useless. 132 Strategic Reuse with Asset-Based Development These are significant challenges to overcome, and most likely, this approach will lead to a failed reuse program. The proper use of this template is to use it as a starting point on the path to a governed Repository. If the enterprise uses this template for a period of time to gather lessons learned and then move on, this template can fulfill that purpose quite well. Figure 7-6 Ad-Hoc organization template 7.3.2 Self-Governed organization template Figure 7-7 depicts the Self-Governed organization template. If the enterprise started with the Ad-Hoc organization template, the Self-Governed organization template is often the next template used. This template introduces governance for the reuse scope, which in this template is a single group. Introducing governance represents growth in the Asset-Based Development maturity for the group. This template has many of the characteristics of the more formal templates, such as the Enterprise Partial template or the Enterprise Full template. However, it varies in reuse scope, in the size, and in the number of groups involved. A key difference for this template compared to the Ad-Hoc template is that the Asset Consumers can conduct planned reuse, as well as opportunistic reuse. Planned reuse means that the governance policies establish the asset version policies, asset types, and categorizations that the Repository will support. However, in this template, the group does not fund the assets produced, or supported, for that matter, so the planned asset reuse is mitigated by that fact. Figure 7-7 Self-Governed organization template Chapter 7. Adopting Asset-Based Development 133 7.3.3 Governed organization template Figure 7-8 depicts the Governed organization template. A key differentiator between this template and the Self-Governed template is that the asset production is funded, supporting both the development and maintenance of key assets. This affects the Asset Consumer’s ability to plan for reuse in the Asset Consumer’s projects, allowing the Asset Consumer to put more trust in the asset’s availability and support. Another key differentiator is that the use of the assets is supported by the Asset Producers. This means that the Asset Producers help the Asset Consumers to be successful using the asset. This support can be performed directly by the Asset Producers, or it can be performed through an enablement team. This support has a direct benefit to the Asset Consumers and their projects. When assets are more complex and will be used multiple times, there is generally justification for providing higher levels of support. The time to achieve a return on investment (ROI) for assets can be decreased in this template and the remaining more formal templates (Enterprise Partial and Enterprise Full) through the proper use of asset support, enabling the success of the consumers. A governed group can interoperate with self-governed groups as well. The governance board for the governed group provides policies for the self-governed group. Figure 7-8 Governed organization template 7.3.4 Enterprise Partial organization template Figure 7-9 on page 135 depicts the Enterprise Partial organization template. A key differentiator from this template and the Governed template is the separation of asset production and asset management. The functions around asset management require overhead, and the organization can achieve efficiency by centralizing them. Meanwhile, the asset production activities benefit by staying within the community and, therefore, being close to the domain experts. 134 Strategic Reuse with Asset-Based Development Figure 7-9 Enterprise Partial organization template 7.3.5 Enterprise Full organization template Figure 7-10 on page 136 depicts the Enterprise Full organization template. A key differentiator between this template and the Enterprise Partial template is the asset production activities are centralized as well. To make an asset reusable and to reduce the friction in reuse transactions, often packaging and other overhead activities are required across assets. For certain kinds of assets, such as coarse-grained solutions that are comprised of many assets, it might be justified to centralize the production and packaging of the assets. A challenge with this template is that the asset production might be performed organizationally too distant from the domain experts in the communities. This has to be monitored closely, and communication must be constant. The majority of the Asset-Based Development work, including the configuration of the repositories and the development of the assets, must be done within the context and purpose of positively impacting the Asset Consumers. Anything that causes a hurdle or a gap that the Asset Consumers do not understand clearly must be removed. Chapter 7. Adopting Asset-Based Development 135 Figure 7-10 Enterprise Full organization template ZYX: ZYX Electronics has decided that they will adopt the Governed organization template for the pilot. Depending on the success of the pilot and funding levels, they will consider adopting one of the Enterprise Partial or Enterprise Full organization templates. Also, based on the results of the pilot and their further analysis, they might customize the select organization template. 7.4 Reuse adoption strategy With many information sources provided, it can seem difficult to figure out where to start when adopting a reuse-based approach in an organization. Although each organization is different, a reuse adoption model has been proposed as depicted in Figure 7-11. Figure 7-11 Reuse adoption model The five phases of this adoption model6 are: Initiate: In this phase, we acquire a commitment from the organization to investigate adopting a reuse approach. Investigate: In this phase, we determine the feasibility of leveraging reuse within an organization. An important aspect of this work is to ensure that a clear understanding of 136 Strategic Reuse with Asset-Based Development the business drivers exists and that a clear understanding of how reuse aligns with and supports the business. Plan: In this phase, we create a plan that details how we are going to leverage reuse within the organization. Implement: In this phase, we follow through on our plan and work to become a reuse-based organization. Improve: As we follow through on our plan, it will likely become apparent that we will learn about reuse, our organization, and the need to make adjustments. In this phase, we recognize the need to improve our approach and then roll those improvements back into our plan. The model is meant to be customized as needed for your organization. In addition, you will want to leverage the artifacts that we have discussed, such as organization template, maturity models, and pilot projects, as well as the Asset Governance and Asset-Based Development Rational Method Composer plug-ins. 7.5 ZYX’s Asset Governance Before starting to leverage Asset-Based Development, we need to figure out how we are going to roll this process enhancement out to our organization. Building on the discussion from the previous section, we can now start to plan out our governance strategy. Governance plays a key role in helping us, because we need to figure how what the process will look like, the roles, the levels of responsibility, the funding models, and so forth. Governance is the establishment of: Chains of responsibility to empower people Measurement to gauge effectiveness Policies to guide the enterprise to meet its goals Control mechanisms to ensure compliance Communication to keep all required parties informed We can try to proceed without figuring these things out, but our odds for success will be greatly diminished. There is no such thing as not having governance. There is only good and bad governance. As depicted in Figure 7-12 on page 138, Asset Governance is composed of four main phases, with a number of activities and tasks performed within each phase, leading to the creation of a number of deliverables. The tasks can be done in parallel, and the order in which they are performed is negotiable. Remember that we want to leverage an iterative and incremental effort; therefore, it is likely that we will revisit elements as necessary to update, refine, and enhance. 6 Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. Chapter 7. Adopting Asset-Based Development 137 Figure 7-12 ZYX’s Asset Governance deliverables 7.6 Getting started at ZYX Electronics To this point, we have discussed a number of different artifacts that we can leverage in starting the adoption of Asset-Based Development at ZYX Electronics. Figure 7-13 on page 139 is used to illustrate to the ZYX team how these components all fit together. We use the Reuse adoption model as a starting point to lead into the Asset-based Governance material. Based on the Asset-based Governance material, we are able to structure a pilot, which in turns leads into our Asset-Based Development process. 138 Strategic Reuse with Asset-Based Development Figure 7-13 Bringing together adoption, pilot, governance, and development Note: Figure 7-14 shows the cover from the completed ZYX Electronics Reuse Assessment document. The document leverages the Reuse Strategy template provided by the Asset-Based Development Rational Method Composer plug-in. The contents of the document appear in the following sections of this chapter. Appendix C, “Additional material” on page 725 provides details about how to download a text document that contains the content to use as a starting point for your own assessment. Chapter 7. Adopting Asset-Based Development 139 Figure 7-14 Cover from the ZYX Electronics Reuse Assessment document 7.7 Purpose The purpose of this document is to describe the opportunities and capabilities of ZYX Electronics (ZYX) to conduct strategic asset reuse within its software development teams. We have not yet adopted any formal reuse program; any reuse that has happened to date has been ad hoc and driven by individuals. The expectation is that a strategic reuse program will allow the IT organization to deliver results more quickly, deliverables will be of higher quality, and we will be better aligned with the overall business. Planning, diligence, and execution, at the corporate level, are necessary to ensure that reuse happens successfully for ZYX Electronics. Software reuse will not simply be a by-product of software development. To be useful, reusable assets must be: Well designed, implemented, and tested Documented regarding how to reuse Cataloged and made easily retrievable 140 Strategic Reuse with Asset-Based Development As a company, we need to assess our ability to create reusable software assets. Today, IT is not organized for this reuse to happen. Our software development teams are autonomous and not aligned with the way that our business operates. No reusable asset library is available within the company today. And, we have no standard end-to-end software development processes to exploit best practices to identify or guide the development and management of reusable software assets. This document will detail these issues, as well as highlight a few positive areas that will be leveraged as we roll out a strategic reuse program. 7.8 Background ZYX Electronics is adopting a strategic reuse program within the IT organization. Reuse capability describes the organization’s ability to conduct reuse activities. Reuse opportunity describes the extent to which recurring problems and recurring solutions exist within the selected scope. An organization’s reuse capabilities are increased when the following factors are in place: Management support: – Management specifies policies that support asset reuse. – Management provides top-down support for investing with bottom-up implementation. Mature software process in the organization: – Project teams follow a repeatable software process. – Management artifacts are produced from the process, and management uses them. There are generally more reuse opportunities when the following factors are in place: Well understood domains The business problem space is understood by the software organization. Architecture to support reuse The software architecture permits assets to be harvested and plugged in for reuse. Mature versioning and configuration management: – The software team practices source code versioning and configuration management. – A release cycle is in place for delivering software in the organization. To ensure that the entire team is on the same page, we provide the following definitions: Systematic reuse is defined as, “Systematic reuse is the reuse of assets within a structured plan with well-defined processes and life cycles and commitments for funding, staffing, and incentives for production and use of the reusable assets.”7 Strategic reuse builds on the idea of systematic reuse and sees an organization tie their reuse program to the strategy of the business. Therefore, the strategic reuse program must implement a systematic approach to reuse that enables the organization to deal with expertise shortages, globalization, regulatory concerns, rising customer expectations, and so forth. 7 The definition for systematic reuse comes from Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ., which references M. Ogush, “Terms in transition: a software reuse lexicon,” Crosstalk: The Journal of Defense software Engineering, pages 41-45, December 1992 Chapter 7. Adopting Asset-Based Development 141 7.9 Scope In general, it is not a good practice to apply reuse principles to the entire enterprise at one time. As input to the reuse assessment, the business problem and priority need to be understood, which provides the necessary context and scope for focusing the reuse assessment. Therefore, we have decided that we will limit the scope of the reuse assessment to the team lead by Duncan Munchkin, the Development Manager for the Credit Application (see Figure 7-15). Figure 7-15 Organization chart for the CIO The reasons for the limited scope decision are: The team contains a mix of development locations, as well as third-party contractors from a Global Systems Integrator (GSI). We need to ensure that we capture our reuse capabilities in a globally distributed development (GDD)-enabled portion of the organization. As determined in the Component Business Model (CBM) analysis, the Credit Administration component is a key element to the business (see Figure 7-16 on page 143). If we want reuse to be a strategic effort, we need to ensure that reuse works in our strategic business components. The culture within Duncan’s team is open to new ideas and change. 142 Strategic Reuse with Asset-Based Development Figure 7-16 Component business model heat map for ZYX Electronics 7.10 Maturity In order to truly determine where our reuse capabilities are as a company, we will set the bar against known criteria. In the software industry, several maturity models have been documented and found to be very effective in measuring a company’s current software development and asset reuse maturity. In addition, the maturity model can provide a road map in helping the organization plan how they will move forward and advance their approach to reuse. Perhaps the most well known of these is Capability Maturity Model Integration (CMMI). CMMI is a process improvement approach that provides organizations with the essential elements of effective processes. However, this is a more generic maturity model and therefore is not tailored to reuse. Taking reuse into account, other maturity models are available. In particular, ZYX Electronics will leverage the Reuse Maturity Framework – The Five Stages of Reuse Maturity by Kulton and Hudson, because it was the best at outlining organizational reuse capabilities in a well described approach. The Reuse Maturity Framework, as depicted in Figure 7-17 on page 144, describes the dimensions of a company’s reuse maturity. Although we have a Chapter 7. Adopting Asset-Based Development 143 minor issue with the framework not directly targeting our business, it provides a great deal of value as we plan a reuse adoption. Figure 7-17 Reuse Maturity Framework8 In addition to the Reuse Maturity Framework itself, we will also leverage the characteristics of each level in the framework that are shown in Figure 7-18 on page 145. Thoroughly understanding our current level of reuse maturity can only help us to better formulate a successful Reuse Strategy. 8 Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. 144 Strategic Reuse with Asset-Based Development Figure 7-18 Reuse Maturity Framework Stage Characteristics9 7.11 Areas of assessment In this section, we discuss the abilities of ZYX Electronics to conduct asset reuse practices and the opportunities for future reuse. The assessment will review the organization from a number of perspectives, including: Management support Software process Business domain understanding Architecture to support reuse Versioning and configuration management Within each perspective, we will also align our responses with the Reuse Maturity Framework. As a result of this alignment, we will provide more depth to the assessment and position ourselves to move further up the maturity model. As seen in Figure 7-19 on page 146, there are both Motivations and Travel Events that we will be using as a loose guide indicating that we need to be looking at moving to a particular level in the framework. These motivations and travel events usually occur before we can migrate from one level in the 9 Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. Chapter 7. Adopting Asset-Based Development 145 framework to the next higher level. For example, to move from the Initial/Chaotic level to the Monitored level, we must recognize that competitive pressures require increased reuse. In addition, the management team must be requesting reports detailing the progress made toward this reuse goal. Figure 7-19 Maturity Framework Progression10 7.12 Management support From the management perspective, we need to answer the following questions: Does management specify policies and support asset reuse? Does management provide top-down support for investing with bottom-up implementation? And from the Reuse Maturity Framework, we want to evaluate the organization based on: Motivation and culture: – Is reuse encouraged? Noted? Rewarded? – Are there incentives in place for reuse? – Is reuse seen as “the way we do business”? Planning for reuse Is there any planning for reuse? If so, what approach? Ad hoc? Opportunistic? Part of business strategy? 10 Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. 146 Strategic Reuse with Asset-Based Development Responsibility for making reuse happen At what level does responsibility for building assets show up? Individual? Shared? Dedicated resource? Dedicated group? Corporate group? 7.12.1 Does management specify policies and support asset reuse In general, ZYX management has been supportive of the IT operations, although there is a perception that there is room for improvement. Within the IT organization, the management team has been focused on results and has allowed the teams freedom in terms of process, tooling, and overall project approach. The IT management team views this as a shortcoming that needs to be addressed. Of our 2000 IT staff, 1000+ are developers using more than 40 diverse development tools and environments. In addition, there is no standard end-to-end development process in place. In the past, the IT management team was made aware of isolated instances of reuse success and bestowed small awards to the individuals involved. However, the focus of IT management has been on meeting project deadlines, defect rates, and overall acceptance of the deliverables. To this end, little encouragement has been given to reuse or process initiatives. The side effect has been slipped projects and budget overruns, sometimes causing the business units to lose faith in our ability to deliver to their needs. Although this might sound like poor performance, based on the metrics gathered from the wider industry, we are performing at least at industry average levels. The lack of a common approach in our software development practices will require education and mentoring as we adopt a process. The expectation is that this will position us for a significant return on investment. To this point, the IT management team is fully committed to supporting a software reuse initiative. Reuse policies and decision responsibilities will be specified and supported from the highest management levels to encourage project teams about the importance of software reuse. The IT management team recognizes that they need to create a new culture within ZYX Electronics that values: Strategic reuse Common, proven development process Leveraging of industry best practices Leveraging an iterative and incremental approach Leveraging abstraction and automation 7.12.2 Does management provide top-down support for investing with bottom-up implementation From the highest levels of executive and IT management, we have general commitment to support our reuse initiatives. In reviewing the “Generations of Basic Technology Advancements” report as summarized in Figure 7-20 on page 148, we recognize that the industry trend is toward considerable software reuse. Chapter 7. Adopting Asset-Based Development 147 Figure 7-20 Generations of basic technology advancements Note that as an organization, we do not map to one specific column. Our interpretation of our current as is situation is depicted in Figure 7-21 on page 149. In terms of reuse, based on the definition of elements that can be considered a reusable asset (components, frameworks, models, test scripts, design documents, and so forth), we have determined that a limited amount of reuse has been occurring. However, this reuse has not been systematic or strategic. As noted in Figure 7-21 on page 149, our team configuration and work approach is based on a distributed model. A major concern is that with having a distributed IT organization, along with leveraging GSI partners, our lack of advancement in the other areas will limit the success of leveraging a distributed model (and will likely lead to failure). 148 Strategic Reuse with Asset-Based Development Figure 7-21 ZYX as is: Software governance - generations of basic technology advancements As an organization, we need to achieve the benefits listed, including predictable project performance, on budget and on schedule deliveries, and a higher success rate. However, there is still skepticism regarding the levels of investment required and the real benefits reuse will provide us. Therefore, initial support and investment will be provided for the program. However, a longer term commitment will require proof that strategic reuse is possible at ZYX and that the benefits seen are as advertised. A strategy is needed for building and proving the reuse business case as a means to secure long-term funding and support. 7.13 Software process From the Process perspective, we need to answer the following questions: Do the project teams follow a repeatable software process? Are there management artifacts produced from the process, and does management use them? And from the Reuse Maturity Framework, we want to evaluate the organization based on: Process by which reuse is leveraged: – Is there a process in place that accounts for reuse? – At what point in the process is reuse brought up? – Does reuse only focus on off-the-shelf components? – Does reuse see the creation of families of products? – Are all products generalized for future reuse? Chapter 7. Adopting Asset-Based Development 149 Metrics: – Are reuse metrics collected? At the code level? Based on Repository assets? – Is an analysis performed to determine the payoff for developing an asset? – Are the tooling and accounting mechanisms set up to track reuse? 7.13.1 Do the project teams follow a repeatable software process The short answer is “No”. Over the years, we have allowed software teams to utilize any software development process found capable of helping the team produce software products. As mentioned earlier, a common, proven and repeatable process is required both to improve our overall software delivery capabilities, as well as to support a strategic reuse program. In addition, to support our globally distributed development team, we need to ensure that when the process is put into place that it is managed and measured. With the current lack of process and lack of focus on reuse, it is difficult to state when reuse is considered in the development process. For several members of our team, reuse is never discussed. Several of our other teams will leverage reuse in an ad hoc fashion, but it is usually (there are exceptions, of course) something that is brought up by and leveraged by an individual. 7.13.2 Are there management artifacts produced from the process and does management use them With the lack of a formal process in place, it is not surprising that few management artifacts are produced from the process. A key success that has been achieved in this area is the implementation of Unified Change Management. Metrics regarding defects, components, and project progress are available. Although reuse is occurring, no metrics are yet collected on the reuse, what is being reused, or the benefits of the reuse. Information regarding reuse is collected via informal discussions and anecdotes. 7.14 Business domain understanding From the Business Domain perspective, we need to answer whether the business problem space is understood by the software organization. And from the Reuse Maturity Framework, we want to evaluate the organization based on breadth of reuse involvement. Is reuse seen as requiring the involvement of just individuals, workgroups, departments, division, or the enterprise? 7.14.1 Is the business problem space understood by the software organization Recently, we brought in a management consulting firm to conduct a report of our core business processes, structure, and practices. A detailed report was produced, as well as a model of ZYX Electronics business processes. This model has helped us to better understand and focus on our core business competencies on those business areas most important to us for revenue and growth. In addition, this model has helped us to refine our 150 Strategic Reuse with Asset-Based Development corporate strategies, overall direction and policy, the way that we monitor our business and manage exceptions, tactical decision making, and business execution. This model, referred to as a Component Business Model (CBM) and shown in Figure 7-22, has led us to begin organizing our early service-oriented architecture (SOA) efforts to the goals of our business. We still have a long way to go, but IT is headed in the right direction to align with the ZYX Electronics business structure. Aligning IT with our business goals allows us to focus on the needs of the business, create software products that mirror the business, and will help us to identify business areas where we perform the same tasks. As discussed in the scope section, our initial reuse efforts will focus on the Credit Administration component. This is a core component for the business and therefore, an area where we need to focus IT investment. Figure 7-22 ZYX Electronics component business model heat map In regard to the business drivers within this component, we are aware of the following requirements for the Credit Administration component: Centralizing siloed departments and building optimized services to support the converged organization and then negotiating better prices with our vendors and taking advantage of our combined size help us: – Decrease the negotiated cost (vendor volume discounts) of credit report retrieval by 20%. Chapter 7. Adopting Asset-Based Development 151 – Automate 75% of all credit report retrievals. Implementing consistent business rules to manage risk Decrease the number of credit report retrievals by 10%. 7.15 Architecture to support reuse From the Architecture perspective, we need to answer the following question: Does the software architecture permit assets to be harvested and plugged in for reuse? And from the Reuse Maturity Framework, we want to evaluate the organization based on: Motivation and culture: – Is reuse encouraged? Noted? Rewarded? – Are there incentives in place for reuse? – Is reuse seen as “the way we do business”? Breadth of reuse involvement: Is reuse seen as requiring the involvement of just individuals? Workgroups? Departments? Division? Enterprise? Responsibility for making reuse happen At what level does responsibility for building assets show up? Individual? Shared? Dedicated resource? Dedicated group? Corporate group? 7.15.1 Does the software architecture permit assets to be harvested and plugged in for reuse To date, many people within the organization have taken a “not built here” approach – and so far, little has been done to fix this culture. When object-oriented programming languages really started hitting the mainstream, it was our general assumption that we “automatically” reuse encapsulated functionality across IT. However, we have found that this was an incorrect assumption. We recently selected SOA as an architectural style. The SOA techniques, practices, and process are mature, and SOA is successful within many organizations today. Our SOA choice aligns very well with our corporate initiatives to align IT with business goals and objectives. In addition, SOA will allow us to be more flexible to changes in our business offering and take us from an autonomous application development shop to a shop that can mix and match business components to create a business solution. A concern is whether an organization that is siloed – a “not built here” attitude and a history of non-reuse – will be able to leverage the reuse aspects of SOA. We also have the opportunity to make reuse of other application development artifacts, such as open source and internally built frameworks, architecture and design patterns, code templates, and so forth, not to mention the opportunity to expose existing code through business services and Composite Business Services. Our lack of consistency in tooling, process, and architectural styles has made it difficult to identify recurring solutions, areas of commonality, and possible points of variability. When everyone does things differently, it seems as though everything is a unique solution. As we work toward a consistent set of best practices, standardized architectural styles, standard 152 Strategic Reuse with Asset-Based Development tooling, and a common process, we expect to identify many recurring solutions that can be converted into assets. 7.16 Versioning and configuration management From the Versioning and Configuration Management perspective, we need to answer the following question, “Does the software team practice source code versioning and configuration management?” And from the Reuse Maturity Framework, we want to evaluate the organization based on: Technology support: – Are configuration management tools used? If so, are they specialized for reuse? – Are asset classifications used? – Is a Repository separate from the source code Repository used? – Is there integration between the asset Repository and development tooling? 7.16.1 Does the software team practice source code versioning and configuration management An area of strength for ZYX Electronics is their source code versioning and configuration management approach. With the globally distributed development approach of the IT Organization, a strong software configuration management approach was needed. The IT Organization has adopted Unified Change Management supported by IBM Rational. One of the key aspects of the Unified Change Management model is that it unifies the activities used to plan and track project progress and the work products undergoing change. The Unified Change Management model is realized by both process and tools. The IBM Rational products Rational ClearCase and Rational ClearQuest are the foundation technologies for Unified Change Management. ClearCase manages all of the work products produced by a software project, including both system work products and project management work products. ClearQuest manages the project’s tasks, defects, and requests for enhancements (referred to generically as activities) and provides the charting and reporting tools necessary to track project progress. Currently, however, there is no specialized focus on reuse. In addition, because little work has been done to identify the assets that we currently use, we have not taken steps to create a classification schema or an asset Repository, nor has work been done to determine how our development tools support assets. 7.17 Conclusions In this section, we look at our alignment with the maturity model, as well as a summary of the assessment. 7.17.1 Maturity model alignment Figure 7-23 on page 154 shows the “as is” assessment results aligned with the Reuse Maturity Framework, in other words, our current reuse maturity as it stands today. Not too Chapter 7. Adopting Asset-Based Development 153 surprisingly, we find ourselves primarily in the Initial/Chaotic level of the framework. When the ZYX Reuse Strategy is developed, the Reuse Maturity Framework will be used to guide many of our key reuse competency improvement decisions. Figure 7-23 Reuse Maturity Framework ZYX as is11 7.17.2 Summary Coming into this assessment, the team had a number of preconceptions regarding ZYX’s reuse abilities and opportunities. The assessment guidelines and maturity framework details have assisted the team in looking past our preconceptions and have also led to interesting discoveries regarding reuse abilities and opportunities. In particular, we had the impression that we were less prepared than we actually are and that we had fewer opportunities for reuse than actually exist. Although we did find a number of areas that are problematic and will require attention, we also found a number of positive aspects that will position us for reuse, including: Alignment with our SOA initiative: In addition to SOA having reuse of services as a key concept, the alignment with business, business agility, and business flexibility concepts will serve ZYX well in a wider, more general reuse program. 11 Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. 154 Strategic Reuse with Asset-Based Development Unified Change Management adoption: The Unified Change Management approach already adopted will serve us well as we implement the reuse program. Having controls and a process in place surrounding code artifacts will translate very well to a reuse program. Culture: The IT team led by the Credit Application team, which is led by Duncan, is open to improving their process and leveraging reuse and service as a role model for the rest of the organization. Business Support: The organization sees the software team as key to the competitiveness of the overall company. There is both support and a strong desire to see the IT team succeed. 7.18 References For more information, refer to: Incentive Compatibility and Systematic Software Reuse, Journal of Systems and Software, Apr 27, 2001; Vol. 57, Iss. 1, Robert G. Fichman Managing Software Reuse, Prentice Hall, 1998, Wayne Lim Measuring Software Reuse, Addison Wesley, 1997, Jeffrey S. Poulin Global Development and Delivery in Practice: Experiences of the IBM Rational India Lab, SG24-7424-00 Note: Figure 7-24 shows the cover from the completed ZYX Electronics Reuse Strategy document. The document leverages the Reuse Strategy template provided by the Asset-Based Development Rational Method Composer plug-in. The contents of the document appear in the following sections of this chapter. Appendix C, “Additional material” on page 725 details how to download a text document that contains the content to use as a starting point for your own strategy. Chapter 7. Adopting Asset-Based Development 155 Figure 7-24 Cover from the ZYX Electronics Reuse Strategy document 7.19 Purpose Systematic software reuse is the purposeful creation, management, support, and reuse of assets. In Software Reuse: Architecture, Process, and Organization for Business Success, Jacobson, Griss, and Jonsson estimate the following benefits of systematic reuse12: Time to market: 2 to 5 times reduction Defect density: 5 to 10 times reduction Maintenance cost: 5 to 10 times reduction Strategic reuse builds on the idea of systematic reuse and sees an organization tie their reuse program to the strategy of the business. Therefore, the strategic reuse program must implement a systematic approach to reuse that enables the organization to deal with expertise shortages, globalization, regulatory concerns, rising customer expectations, and so forth. 12 156 Software Reuse - Architecture, Process, and Organization for Business Success. Ivar Jacobson, Martin Griss, Patrik Jonsson, pg 7. Strategic Reuse with Asset-Based Development Leveraging these definitions, the mission for the ZYX Electronics (ZYX) reuse program is to improve the quality and time lines of deliverables from the IT organization to support and enable the business goals and objectives of ZYX Electronics. ZYX Electronics expects to realize this mission by developing tools, processes, and policies that will establish, maintain, and encourage strategic reuse. There are many challenges, however, to implementing software reuse at an organization, because reuse has an impact and dependency on culture, process, and tooling. All three of these elements must come together to realize a successful reuse program. This document discusses the changes in policy and practice that will be required at ZYX Electronics to adopt and apply Asset-Based Development. As detailed in the Reuse Assessment, the initial scope for the reuse program will be the Credit Application development team. Also, as detailed later in this document, the initial rollout of this program will include a pilot phase. Therefore, this document must be seen as a living artifact as decisions, best practices, and documents are built during the rollout. 7.20 Key concepts This section defines key Asset-Based Development concepts. These terms form the vocabulary that we will use throughout this document and in the other guideline documents. All teams within ZYX Electronics are expected to leverage and use this set of definitions when discussing and working within the reuse program. Any changes in definition or additionally required terms must show up in future revisions of this document. 7.21 Asset-Based Development Asset-Based Development is a way to develop software solutions using and reusing cohesive, documented software artifacts. It is organizing software development in a way that leverages previous investments and influences the nature of future investments. In addition, its modular approach of using components and assets makes it easier to adopt changes to a system that has already been built. The four elements of Asset-Based Development are: Assets Cohesive, documented software artifacts that provide a solution to a problem for a given context Standards Consistent specification and representation of software assets and processes Process Conducting software development in a way that leverages previous investments and preserves current investments Tooling Automation that supports the process (that is, the production, management, and consumption of assets) The relationships among the elements are shown in Figure 7-25 on page 158. Chapter 7. Adopting Asset-Based Development 157 Figure 7-25 Standards, Tooling, Processes, and Assets in Asset-Based Development 7.22 Motivations for Asset-Based Development Motivations for Asset-Based Development are described in Figure 7-26. Note that Cost shows up in both columns. It is important for the organization to be aware that reuse does not occur for free. Additional costs will be incurred in building and supporting reusable assets. However, as shown in Figure 7-26, we expect the benefits to far outweigh the associated costs. In particular, the cost to apply and use an asset is significantly lower than rebuilding the solution found in the asset. Therefore, the more that we can reuse an existing asset, the greater the cost benefit. Also, because certain assets provide lower creation costs, we will be looking for types of assets that help to minimize the costs while magnifying the associated benefits. Figure 7-26 Asset-Based Development motivations 7.23 Assets and artifacts An asset is a collection of artifacts that provides a solution to a problem for a given context with rules for usage and variability points. Types of assets include components, patterns, Web services, frameworks, code, documentation, models, and templates. Artifacts are work 158 Strategic Reuse with Asset-Based Development products from the software development process, for example, requirements, models, source code, and tests. The relationship between assets and artifacts is shown in Figure 7-27. Problem Solution Artifact Artifact Artifact Artifact for a context Variability point Asset Artifact with rules for usage Figure 7-27 Assets and their artifacts Of particular importance to our reuse program will be the idea of variability points. We expect that the assets that we create are engineered for reuse. Therefore, they must either support Black box reuse (that is, zero variability points) or Gray box reuse where a small number of variability points are provided. It is unacceptable to produce and contribute reusable assets for White box reuse (that is, unlimited points of variability). White box reuse drives development to rewrite instead of reuse. Encapsulating and controlling the functionality within a reusable asset is of the utmost importance. 7.24 Asset standards The Reusable Asset Specification (RAS) describes a standard for consistently organizing and packaging assets. This standard requires that assets include the following sections, which are also shown in Figure 7-28 on page 160: Classification Contains name and value pairs that describe, classify, and categorize the asset Solution Contains the asset’s “payload” (that is, the artifacts, such as models, code, and so forth, which comprise the solution that the asset provides) Usage Provides usage instructions Related Assets Describes the association, aggregation, dependency, and so forth with other assets Chapter 7. Adopting Asset-Based Development 159 Figure 7-28 Reusable Asset Specification The tooling that we use for producing, consuming, and managing assets must support the RAS standard. We do not want to end up with just a scrap heap that contains a collection of stuff that no one can figure out how to use. To support strategic reuse, the assets that are created, in addition to providing a correct and proven solution, must be packaged as a reusable asset. The Reusable Asset Specification provides us with a mechanism to use in increasing the reusability of our assets. In addition, we are able to leverage an industry standard, which prevents vendor lock-in. 7.25 Reuse vision Asset-Based Development uses standards, processes, and tooling so that software development artifacts can be reused. This development method leverages previous development efforts, reduces development time and costs, reduces maintenance costs, and improves product quality. Figure 7-29 on page 161 depicts the Component Business Model (CBM) heat map for ZYX Electronics, capturing the key business areas and priorities for the organization. The IT organization within ZYX needs to ensure that our work is tied to the business needs of the organization. The heat map indicates the key business components, as well as the most important areas where we need to focus our efforts and investment. When we have proven our reuse approach, we will broaden the scope of the reuse program. In the initial rollout and pilot, we will focus on the second tier priorities, because they allow us to continue to deliver value to the business. However, if issues arise, we will not jeopardize the most important areas of the business. 160 Strategic Reuse with Asset-Based Development Figure 7-29 ZYX Electronics component business model heat map ZYX Electronics has initiated efforts in Asset-Based Development and strategic reuse to support the Credit Administration business component. As discussed in the Reuse Assessment, the initial efforts for reuse will focus on this business area and the associated development organization. We want to support business agility and flexibility within Credit Administration. The business drivers within this component are based on the following requirements: Centralizing siloed departments and building optimized services to support the converged organization and then negotiating better prices with our vendors and taking advantage of our combined size to help us: – Decrease the negotiated cost (vendor volume discounts) of credit report retrieval by 20%. – Automate 75% of all credit report retrievals. Implementing consistent business rules to manage risk Decrease the number of credit report retrievals by 10%. The development team wants to reduce software development costs, increase software quality, and reduce software maintenance costs. In this section, we describe ZYX Electronics’ vision for Asset-Based Development. Chapter 7. Adopting Asset-Based Development 161 7.26 Vision The overall vision of the ZYX Electronics Asset-Based Development (ABD) strategy is to produce systems through a strategic reuse program in support of the following themes: Business alignment in support of a larger IT Governance requirement. We need to ensure that the investments made in the reuse program support the business. The result will be targeted investments that support business agility and flexibility. Reduce software development costs. Increase software quality. Reduce software maintenance costs. The ZYX Electronics business drivers that motivate this vision are: Improve business agility and flexibility. Improve efficiency of business operations. Reduce skill shortages. Meet rising customer expectations. The ZYX Electronics IT drivers that motivate this vision are: Leverage Reuse Strategy in all architectural layers, including in the code. Improve maintainability, availability, and scalability. Minimize total cost of ownership. Reuse is a two-part decision process: first, the organizational level decision to institute strategic reuse and second is the decision for practitioners to practice reuse at lower levels of the organization. Both decision levels require management support and enforcement. For the reuse vision to be successful, the application development teams must see from the start that the reuse efforts provide value to their development challenges and assignments. Relying on a Reuse Strategy that holds out benefits in the distant future will fail. Therefore, assets must be identified early that have high value for a targeted Asset Consumer audience, namely, the application development teams. There are two approaches here: identify assets that are reusable across a broad sector of the development teams or identify assets that are highly valuable to a narrow sector, perhaps for a specific project or two. The latter strategy tends to be more approachable, because it helps to control scope, cost, training, project coordination, and so on. To successfully implement the reuse vision, there are fundamental principles that must be observed. Without support for these principles, implementing the reuse vision is placed at risk: Management support for Asset-Based Development. In particular, the management team will monitor the team deliverables and reuse metrics and will both recognize and encourage reuse. Seek ways to shift the extra costs and risks of reuse production and consumption out of the individual application development projects and into the core asset development team. Look for high quality, relevant assets that are critically needed by the target Asset Consumers, namely the application development teams. The functional and non-functional requirements must be well understood by both the application development teams, as well as the core asset development team. Application development teams have limited resources available for reinvention. 162 Strategic Reuse with Asset-Based Development There is a strong architect, who acts as the reuse guardian for asset assessment and usage. Seek reuse opportunities where they have the highest probability of a net positive project payoff. A key aspect of this principle is that we will have team members enabled on pattern-based engineering to ensure that we find and build assets that provide an ROI within the projects where they are used. Recognize and encourage all forms of reuse that have net benefits at a project level, which includes reusing document templates, procedures, and so on. With these principles in mind, the reuse vision is to provide cost-effective assets that provide value to Asset Consumers – in particular, application development teams – so that there is business value to using these assets. The business value can be described in terms of increased production time, lower development and maintenance costs, improved return on investment, and so on. The reuse program can be altered to focus on the identified value that the business seeks to obtain. A critical element of this vision is that the reuse program is implemented so that the costs of reusing assets are continually pushed down. The reuse cost is a major factor in the success of the reuse program. Increasing the packaging costs to decrease reuse costs is generally a reasonable strategy. However, having nicely documented non-reusable assets only increases costs for the business. Refer to 7.27, “Identified risks” on page 166. Of particular importance at ZYX Electronics is a desire to avoid unnecessary formality and over-engineering. Therefore, we leverage iterative and incremental approaches to building our assets. At the end of each iteration, there must be a reviewable deliverable. A critical aspect to controlling asset production and reuse costs is through the nature of the relationship of the asset development team and the Asset Consumer teams. As part of the reuse vision, the asset development team provides resources for ensuring the success of assets on the asset consumption teams. This not only helps the asset consumption teams in terms of their costs, but it also provides valuable feedback on the assets that benefits future asset development efforts. The scope of the reusable assets can also affect the cost. As seen in Figure 7-30 on page 164, there are multiple scope levels regarding how an asset can be reused within an organization. Generally the higher the asset’s scope for reuse, the higher the testing, packaging, communicating, and maintenance cost. The strategy for this reuse, as outlined in this document, is to start with smaller scoped assets and then grow the scope across the phases over time as experience and lessons learned are gathered. Chapter 7. Adopting Asset-Based Development 163 Figure 7-30 Asset reuse scope With the guiding principles outlined in this vision, the real focus becomes what can help ZYX Electronics develop systems to meet the overall vision and business drivers that have been specified. There are four major aspects to how we plan to leverage reuse, including: Open source software: An abundance of open source software is available for use by organizations. ZYX Electronics will leverage assets from the open source realm. An important concern with this aspect is a need to ensure that all legal issues are addressed and managed. Tools and frameworks: Industry leading tools and frameworks will be leveraged. A preference for open standards and specifications exists. Services: ZYX Electronics is adopting the SOA architectural style. Therefore, there is the expectation that siloed application development will be reduced or eliminated, services will be reused, and there will be alignment with the business. As part of this effort, work will be done regarding how to ensure that business services are reused, Composite Business Services are created and used as necessary, and the WebSphere Business Services Fabric is leveraged as appropriate. Pattern-based engineering: A strong bottom-up, quick ROI approach to building pattern implementations in support of frameworks, industry best practices, and ZYX Electronics best practices is required. 7.26.1 Realizing the vision The overall vision is to provide a set of assets that conduct a series of transformations from a description of the business or organization ultimately to the code. This vision must be approached in controlled steps. These steps are outlined in this section of this document. Implementing the entire vision requires a level of familiarity with pattern technology and a commitment to support sophisticated assets. Figure 7-31 on page 165 describes the significant steps for realizing the vision. 164 Strategic Reuse with Asset-Based Development This approach is a top-down, model-driven style of reuse. There are multiple styles for addressing reuse. This template only illustrates one approach. Figure 7-31 High-level ABD process steps The exact steps and approach will differ depending on the aspect and the types of assets. For example, this approach can be compressed via the use of pattern implementations that infuse architectural best practices and decisions. Therefore, it might be possible that the seven steps turn into a smaller number of steps, such as two or three steps. The number of steps will depend on the patterns that are identified and the amount of variability that exists. Also, the input models into the patterns can be graphical, as shown in Figure 7-31, or they can be textual (for example, XML-based). For more information about a pattern-based engineering approach, refer to Part 4, “Patterns” on page 455. For more details about a Service-based approach that leverages Composite Business Services and the WebSphere Business Services Fabric, refer to Part 3, “Service Assets in an SOA” on page 333. Next, we briefing describe each of these steps. For more information about ZYX Electronics’ Asset-Based Development (ABD) process, see Part 2, “Reusable Assets” on page 123: Step 1: Business Process/Solution Architecture Mapping: Starting with the ZYX Electronics Business Model (considered a mandatory input), the IBM Patterns for e-business are applied, which describe the mapping of the business processes onto a runtime topology. Then the product mapping is developed, which identifies the technologies and products that are to be used within the high-level Solution Architecture. Chapter 7. Adopting Asset-Based Development 165 In addition, an analysis is done to determine which industry and open source software frameworks must be included in this solution. In cases where it is clear that certain frameworks will fit, a further analysis for identifying supporting assets and best practices that are associated with the framework will be conducted. Step 2: Application Use-Case Modeling: The application use cases that implement the business processes are defined. As can be expected, work is done to prioritize the use cases, and consideration is given to the iterations in which the use cases will be attacked. In addition, a pattern opportunity analysis will be done to find areas of recurring problems that can be addressed via pattern-based assets. As part of the analysis, a search for exemplars will be performed. In cases where exemplars do not exist, archetypes will be built to serve as input into the pattern creation process. Step 3: Application Behavioral Modeling: The key abstractions, use-case realizations (for example, interaction diagrams), and other behavioral models are created. In cases where we have identified a pattern opportunity, we perform these tasks in building the archetype. In cases where we have a unique and non-repeating solution, we will leverage this approach to build the solution. 7.27 Identified risks There are several key risks that must be understood and mitigated in the organization. We describe a list of several of these risks with an accompanying mitigation strategy next. 7.27.1 Asset misidentification There is a general tendency in asset identification to consider that each “interesting” piece of code or other artifact is reusable. If this course of action is followed, it tends to produce a large number of assets that are in fact “interesting”, but in reality are not reusable. This tends to drive up the costs of the asset reuse effort, therefore, pushing out the time line when a return on investment can be achieved. Mitigation strategy Identify asset identification criteria and conduct regular asset surveys and assessments with these criteria. Establish governance policies and acceptance policies whereby management has the option to accept or deny the development and long-term maintenance of the asset. In addition, leverage the Asset Scorecard as published in Chapter 6 of the Strategic Reuse with Asset-Based Development book. 7.27.2 Asset Consumer mis-targeting Although an asset might have been thoroughly evaluated and the proper governance strategies have been identified, the asset might be packaged and organized at a level that misses the skill level of the target Asset Consumer. What this means is that assets are produced that are too difficult or complex for the target Asset Consumer to use. This drives up the reuse costs, which drives down the business value proposition and the time line for achieving a return on investment. Mitigation strategy Establish an asset packaging policy that tests the organization of the asset’s documentation, guidance, and even variability points that eases the effort to reuse the asset. Increasing packaging costs to lower reuse costs are a critical part of the success of the asset reuse 166 Strategic Reuse with Asset-Based Development activities. Another key element to the mitigation strategy for this risk is to establish training for the Asset Consumers on the process, tooling, policies, and guidelines early in the asset reuse program. 7.27.3 Volume-centric Repository Management can mandate that there must be “x” number of assets within a certain time frame. With this motivation, the organization can focus its energies on meeting this objective. The result is that the Repository can truly reflect this number, but the value of the Repository is generally low while the cost goes up as fewer valuable, reusable assets are found in the cadre of assets. A key concept on which the team must be educated is that there is a cost associated with reuse failure. Focusing solely on volume increases the number of failures and negatively impacts the reuse culture that we are trying to create. Mitigation strategy Set objectives in place that seek to positively impact the value to the Asset Consumer’s project, such as increased productivity or decreased development and maintenance cost. The Repository must always be kept fresh through asset usage reviews, statistics, and feedback. Assets must be retired that are not providing value to the Asset Consumers. 7.27.4 Asset governance Assets are identified and developed, but no clear sponsor has been identified. The sponsor owns the responsibility of funding the development and maintenance of the asset over the life of the asset. Mitigation strategy The assets that are commissioned and developed by the reuse team will be owned and maintained by the reuse sponsor’s funding. Those assets developed by the application development teams will be owned and maintained on the budgets of the respective projects. The application development teams can propose assets to the reuse team to own and maintain. The business case for the cross-project relevance of the proposed asset must be achieved. If the reuse team takes ownership of a project-developed asset, the funding model must support the reuse team’s ownership and maintenance costs associated with the asset, because there will generally need to be refinements to the newly acquired asset to support a broader reuse scope. 7.27.5 Over-engineering There is often a tendency to build the perfect reusable asset that will solve the entirety of the problems facing a project. Development time becomes lengthy, costs rise, and the asset development becomes a project unto itself. Mitigation strategy An iterative and incremental approach to asset creation will be a key aspect to the mitigation strategy. We will avoid the creation of custom and in-house frameworks and other large scale assets. A compositional approach to building larger solutions must be followed, which means that we plan to have a selection of smaller assets, which can then be composed into larger and larger solutions. Chapter 7. Adopting Asset-Based Development 167 7.27.6 Do It Yourself (DIY) equals innovation A perception that “Do It Yourself” (DIY) equals innovation arises, where in order to be innovative, you have to build and do everything on your own. Therefore, the team only looks to internal sources for best practices, solutions, and assets. Mitigation strategy Innovation can be achieved by bringing together a number of smaller assets in a unique composition. Therefore, we again stress the importance that we will favor smaller, composable assets. We can create new and innovative compositions quickly and easily from a selection of smaller and proven assets. Those assets can be built by ZYX Electronics or sourced from other organizations (either commercial or open source). 7.27.7 Budget and resources The level and number of resources required to support Asset-Based Development is underestimated. The organization does not have a sufficient budget to establish and maintain the reuse environment, including both processes and tools. The lack of both resources and budget can severely jeopardize the success of the reuse program. Mitigation strategy We will leverage estimation and cost calculators provided by industry sources to assist in building reasonable estimates. In addition, we will focus on finding assets that quickly produce desired levels of ROI. 7.28 Reuse environment 7.29 Reuse environment A very important part of a successful reuse program is the establishment of a reuse environment, where that environment consists of both a well-defined process and automation that directly supports the process. In this section, we provide a high-level view of the envisioned reuse environment at ZYX Electronics. The reuse environment focuses on the IT drivers just listed with a heavy emphasis on making the application development process simple and avoiding undue complexity for the organization roles supporting the process. Note that we will be leveraging the Asset-Based Development and Asset Governance Rational Method Composer plug-ins as the basis of our process. The expectation is that we will refine and customize the process workflows, roles, and process content as we gain experience with our reuse program. 7.30 Asset-Based Development process For the Asset-Based Development process to be used at ZYX Electronics, ZYX needs to implement the Reuse Strategy defined in this document. A high-level view of the process is shown in Figure 7-32 on page 169. You can obtain more details about the workflows, activities, roles, and disciplines in the Asset-Based Development and Asset Governance Rational Method Composer plug-ins. 168 Strategic Reuse with Asset-Based Development Figure 7-32 ZYX Electronics ABD overview diagram Rational Method Composer will be used to publish a ZYX Electronics-specific RUP configuration that includes process guidance for Asset-Based Development and Asset Governance. 7.31 Organization In this section, we describe how the ZYX Electronics organization will be structured to support Asset-Based Development. The ZYX Electronics entities involved in the Asset-Based Development process are shown in Figure 7-33 on page 170. Chapter 7. Adopting Asset-Based Development 169 Figure 7-33 ZYX Electronics organization chart We describe these organizational roles and their responsibilities with regard to reuse next: ZYX Electronics management (CIO and CTO): ZYX Electronics management needs to support the reuse efforts in order for those efforts to be successful. Chief Technology Officer (CTO): The CTO oversees and leads the Solution Architects. Enterprise Architecture (EA) Team: The EA Team is responsible for developing, implementing, and maintaining the Enterprise Architecture within ZYX Electronics. Within ZYX Electronics, the Enterprise Architecture is represented in multiple levels, each with its own architectural framework, and each with its own architect: – Solution Architects are responsible for assembling and integrating core assets and developing solutions to specific technical requirements (Solution Architectures). – Application Family Architects are responsible for application architectures that leverage commonality across a family of applications (Application Family Architectures). – Application Architects are responsible for the development of the software architectures for specific application architectures. Reuse Team: The Reuse Team shoulders much of the Asset-Based Development responsibilities. The Reuse Team provides the reuse environment (both process and tools), develops the core reusable assets, certifies all produced enterprise assets, manages the enterprise asset repositories, and manages and coordinates the overall reuse program. Core Asset Development (CAD) Team: The Core Asset Development (CAD) Team is responsible for performing the hardest tasks of qualifying, harvesting, and delivering the core reusable assets. Assets can be commissioned to be built from respected Asset Producers, who can be the Reuse Team or a specific domain expert. The Reuse Team will build several of the assets and will gather funding to pay respected Asset Producers to 170 Strategic Reuse with Asset-Based Development develop and maintain reusable assets. At times, a respected Asset Producer might need to be pulled into an application development project to provide support. The CAD team requires the funding to support this kind of activity. Reuse Working Group (RWG): The Reuse Working Group (RWG) includes representatives fulfilling each of the Asset-Based Development process roles (for example, asset production, asset consumption, and so forth). The RWG serves as the champion for the reuse program, communicating management’s goals regarding the reuse program and reporting on the progress of achieving those goals. The RWG supports the development of the Asset-Based Development environment (including the ABD guidelines), identifies candidate assets, approves the development of enterprise assets, and encourages inter-organizational cooperation. The RWG provides asset marketing services to the architecture and application development teams (the primary Asset Consumers). Representatives from the RWG work with the development teams to understand their requirements and then they communicate to those teams the kinds of assets that are in the Repository that might fit those needs. The RWG also provides asset support services to the architecture and application development teams to help ensure the success of using the assets. They formally solicit feedback from the development teams in order to understand the effectiveness of the assets; this information is then communicated to the Asset Development team to improve the assets. Asset Certification Board (ACB): The Asset Certification Board (ACB) is responsible for certifying assets before they are published in the asset Repository. User Requirements (UR) Team: The User Requirements (UR) Team is the liaison representing the users and their requirements. This role exists in application development and is impacted by the set of assets that begin to flow within a description of the requirements and the users’ needs. Business Architect (BA): The BA drives the activities for describing the business requirements, processes, and use cases. The BA role exists as part of the business unit and application development teams. The BA is impacted through assets that describe the business and also is responsible for ultimately driving the technical solution from the basis of the business description. The previous organizational role descriptions provided a high-level strategy for how the ZYX Electronics organization will support Asset-Based Development. 7.32 Asset production strategy Before producing assets, important decisions must be made regarding what assets will be developed, who will develop them, and when they will be built. There are multiple approaches for identifying the assets to be built: Identifying candidate assets based on an analysis of the domain (top-down approach) Identifying candidate assets by reviewing existing artifacts (bottom-up approach) The initial strategy for selecting assets to build will follow a bottom-up approach. In this approach, we will evaluate and harvest artifacts from the landscape of existing artifacts and systems within ZYX into potential reusable assets. We will avoid the prohibitive costs of performing a top-down analysis of the ZYX Electronics domain. This does not preclude developing reusable assets based on performing domain analysis or building new assets from scratch, which can be pursued further in the implementation of this strategy. Chapter 7. Adopting Asset-Based Development 171 There are also multiple options for determining where in the life cycle the assets are built: Prior to application project development During application project development After application development projects have been completed (harvesting assets) There are several places within the organization that assets can be produced: the reuse team and the application development teams. The reuse team operates outside the context of any given project, but it certainly must be tightly associated with the application development teams to ensure the success of the teams’ use of reusable assets. Application development teams can also develop reusable assets, although the scope of these assets is bound by the current project on which they are created. Application development teams building assets must be aware of the potential costs of creating and maintaining reusable assets. In certain cases (that is, with small, closely located teams), informal reuse can occur, and this is encouraged where possible and where the obvious benefits exist. Initially, the reuse team will create assets based on conducting reuse assessments and determining redundant problems and solutions across the teams. The artifacts from these projects will be harvested and organized for reuse. It is possible to see a time when the reuse team can create artifacts and assets from scratch, rather than from harvesting activities. There are several reuse failures that can occur during asset consumption. These failures must be addressed as part of the reuse program management and the asset production activities. A reuse failure is ultimately when an asset is not discovered, found, or cannot be used, as listed: Assets are not searched for: In other words, the asset repositories are not being used. This situation creates the need for incentives and influencing the behavior of potential Asset Consumers. Assets are not found: Tracking the nature of the queries on the Repository to help Asset Producers understand the needs of Asset Consumers helps mitigate this situation. Asset cannot be used: The asset does not accomplish what is needed. The earlier in the asset consumption workflow that it can be determined that the asset is not going to meet the needs, the less expensive the reuse failure is. Therefore, this situation creates the need to have strong packaging and documentation that outline the asset very clearly so the decision to not use the asset can be made as early as possible. This situation also creates the need for a strong asset certification workflow. The real goal is to lower the costs of reuse, and this goal falls squarely into asset production (effective asset consumption depends on effective asset production). The goal here is to reduce the number of reuse failures that are more costly, such as discovering the asset will not work after the asset has already been brought into a project and development activities are taking place, or discovering the asset will not work during testing and validation. This experience is expensive reuse failure, and many times, it can be mitigated through strong asset packaging and documentation strategies. The assets must be high quality and well documented. There can be variants of the same asset supporting the same functionality but supporting different performance requirements. 7.33 Reuse infrastructure It is extremely important that we have tooling that supports us in creating our assets. Automation and simplification lead to situations where asset quality is higher, quicker to market, and in many cases, easier to consume. The more that we can automate and simplify the creation of assets, the easier it becomes to make the case that we must build the asset. 172 Strategic Reuse with Asset-Based Development The general tooling infrastructure for supporting Asset-Based Development is illustrated in Figure 7-34. Figure 7-34 Asset-Based Development tooling infrastructure 7.34 Reuse implementation strategy In this section, we discuss the approach and steps that will be taken in adopting a reuse adoption program. 7.34.1 Reuse adoption strategy The reuse adoption process13 that is being applied at ZYX Electronics is shown in Figure 7-35. Figure 7-35 Reuse adoption steps The adoption strategy includes the following simple steps: Initiate: In this phase, we acquire a commitment from the organization to investigate adopting a reuse approach. Investigate: In this phase, we determine the feasibility of leveraging reuse within an organization. An important aspect of this work is to ensure that a clear understanding of the business drivers exists and how reuse aligns and supports the business. 13 Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. Chapter 7. Adopting Asset-Based Development 173 Plan: In this phase, we create a plan that details how we are going to leverage reuse within the organization. Implement: In this phase, we follow through on our plan and work to become a reuse-based organization. Improve: As we follow through on our plan, it will likely become apparent that we will learn about reuse, our organization, and the need to make adjustments. In this phase, we recognize the need to improve our approach and then roll those improvements back into our plan. During initiation, the Reuse Team gained an understanding of Asset-Based Development and presented it to several levels of management for support and commitment. The Reuse Team then initiated a program (investigation) to explore Asset-Based Development concepts and work with Rational to develop an initial set of guidelines and standards to prepare ZYX Electronics for Asset-Based Development. As part of the initiation, the decision was made to that we will make two passes through this adoption model as part of the reuse rollout. In this first pass, we will go through all of the steps in a pilot project. Then, based on the results from the pilot, we will take a second pass through the model as part of a larger rollout. Figure 7-36 depicts the high-level steps that we will include in the pilot project. The results from the pilot project will feed into this document, as well as into a second pass of the adoption strategy. Figure 7-36 Pilot project phases ZYX Electronics is currently in the investigation phase. With the support of Rational, ZYX Electronics has started to investigate how to implement a reuse program within ZYX Electronics. The results are described in the ZYX Electronics Asset-Based Development and Strategic Reuse Guidelines and Standards document set. The purpose of the guidelines and standards is to provide a solid foundation for the ZYX Electronics Asset-Based Development and strategic reuse initiative. The ZYX Electronics Asset-Based Development and Strategic Reuse Guidelines and Standards are: Part 1: Reuse Strategy (this document) Part 2: Asset-Based Development Process Overview Part 3: Asset Packaging Guidelines Part 4: Asset Configuration Management and Version Control Guidelines Part 5: IBM Patterns for e-Business Guidelines. You can refer to these guidelines and associated guidelines at: http://www.ibm.com/developerworks/patterns/ Part 6: Asset Modeling Guidelines Part 7: Asset Certification 174 Strategic Reuse with Asset-Based Development Part 8: Asset-Based Development User’s Guide As part of the investigation, ZYX Electronics also worked with IBM Rational to develop an initial phase plan for implementing Asset-Based Development at ZYX Electronics. After the results of the investigation have been presented to ZYX Electronics management (CIO) and those results are approved, ZYX Electronics will enter the planning phase. During planning, ZYX Electronics will work with IBM Rational to refine the initial implementation plan and prepare a detailed plan for implementing Asset-Based Development within the organization, including identifying the steps to get started. In parallel with the planning phase, the Reuse Working Group (RWG) will provide leadership and reach out to the ZYX Electronics community and will present the Asset-Based Development strategy to several levels of management for support and commitment. During implementation and improvement, the implementation plan will be conducted and the reuse program (including the reuse environment) will be refined as lessons are learned. At the completion of these steps, we will roll these lessons into the second pass through the adoption model. 7.35 Maturity model In order to determine where our reuse capabilities are as a company, we will set the bar against known criteria. In the software industry, several maturity models have been documented and found to be effective in measuring a company’s current software development and asset reuse maturity. In addition, a maturity model can provide a road map in helping the organization plan how they will move forward and advance their approach to reuse. Taking reuse into account, other maturity models are available. In particular, ZYX Electronics will leverage the Reuse Maturity Framework – The Five Stages of Reuse Maturity by Kulton and Hudson. The Reuse Maturity Framework, as depicted in Figure 7-37 on page 176, describes the dimensions of a company’s reuse maturity. Although we have a minor issue with the framework not directly targeting our business, it provides a great deal of value as we plan a reuse adoption. Chapter 7. Adopting Asset-Based Development 175 Figure 7-37 Reuse Maturity Framework14 Figure 7-38 on page 177 provides further details regarding the framework by depicting the characteristics of each level in the framework. 14 Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. 176 Strategic Reuse with Asset-Based Development Figure 7-38 Five Stages of Reuse Maturity and associated characteristics15 Figure 7-39 on page 178 uses a star shape to show the “as is” – current state – assessment of ZYX Electronics’ position within each of the categories in the framework. The target symbol is used to indicate the desired endpoint for the organization in the medium term. Longer term advancement along the framework will depend on results during the pilot and then in the initial rollout of the program. 15 Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. Chapter 7. Adopting Asset-Based Development 177 Figure 7-39 ZYX Electronics to-be Reuse Maturity Framework16 Figure 7-40 on page 179 shows the motivation and travel events that are associated with each level in the framework. The Motivations and Travel Events will be used loosely as a guide to indicate when we need to move to a particular level in the framework. These motivations and travel events usually occur before we can migrate from one level in the framework to the next higher level. For example, to move from the Initial/Chaotic level to the Monitored level, we must recognize that competitive pressures require increased reuse. In addition, the management team must request reports detailing the progress made toward this reuse goal. A key challenge for the reuse program will be to prove itself to the organization to earn a multi-year funding commitment and to reach the Planned level in the framework. 16 Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. 178 Strategic Reuse with Asset-Based Development Figure 7-40 Progression across stages of reuse maturity17 As a result of the funding commitment issue, we envision the organization migrated from the Initial/Chaotic level to the Coordinated level in the initial rollout of the reuse program (see Figure 7-41 on page 180). A longer term goal, when further funding commitments are in place, will be to move to the Planned and Ingrained levels. 17 Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. Chapter 7. Adopting Asset-Based Development 179 Figure 7-41 ZYX Electronics next stage in the Reuse Maturity Model18 7.36 Organizational templates When setting up an organizational structure within which the asset reuse program will operate, we can leverage organizational templates to help plan the structure. The templates provide guidance in terms of governance, repositories, and team and organizational structure. The templates can be used as is or can be modified to better fit within your organization. Our plan is to use the templates as is when getting started and then to modify them when we have gained experience in asset reuse. Although this template is not a maturity model, there is a loose relationship between an organization’s maturity and the template selected. As seen in the previous section, there are a number of aspects that surface within a maturity model, such as: Reuse culture Process Funding and sponsorship 18 Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. 180 Strategic Reuse with Asset-Based Development Each of the organization templates has a number of categories that are used to describe its characteristics, including: Reuse scope: The intended reuse visibility. As can be expected, more formality and structure appear as the scope of the reuse increases. Governance board: The number and kind of governance boards Asset management: Location of the resources that manage the assets Asset manufacturing: Location and resources producing assets Asset use: The techniques and formality for asset reuse Figure 7-42 provides a comparison of the characteristics for each of the organization templates. Figure 7-42 Organization templates Figure 7-43 on page 182 provides an overview of the Governed organization template. Key characteristics of this template include: Asset production is funded, supporting both the development and maintenance of key assets. Use of the assets is supported by the Asset Producers. Asset use is both planned and opportunistic. Chapter 7. Adopting Asset-Based Development 181 Figure 7-43 Governed organization template Figure 7-44 provides an overview of the Enterprise Full organization template. A key characteristic of this template is that the functions around asset production and asset management require overhead, and the organization can achieve efficiency by centralizing them. A challenge for this structure is that asset production can occur too distantly from the domain experts working on the projects. Attention and effort need to be in place to ensure that this undesirable circumstance does not occur. Figure 7-44 Enterprise Full organization template We have decided to adopt the Governed organization template for the pilot. Depending on the success of the pilot and funding levels, the preference is to then move to the Enterprise Full template. 182 Strategic Reuse with Asset-Based Development The organization chart shown in Figure 7-44 on page 182 provides a view of the to-be organization structure after we have completed the pilot of our reuse program. Those employees who work in the pilot will become a reuse team during the pilot and will then see their responsibilities grow from just the Credit Administration development team to the wider organization. 7.37 How it all fits together Figure 7-45 provides an overview of how the Reuse Adoption Steps, Asset Governance, Reuse Pilot Project, and the Asset-Based Development content fit together. Remember that this is not a “one size fits all” approach. As we gain experience with the process elements, roles, deliverables, and workflows, we will customize and adapt them to the unique characteristics of our organization. However, until we gain more experience in using this guidance, we will leverage it as is and leave customization and tailoring until later. Our focus at this moment is to identify and leverage the high-value aspects of the guidance and focus on those areas. It is not our intent to adopt all aspects of each of these elements. As discussed previously, our approach is iterative and incremental. Figure 7-45 Asset-Based Development tooling infrastructure19 19 Adapted from Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. Chapter 7. Adopting Asset-Based Development 183 7.38 Reuse implementation plan In this section, we describe the initial plan for introducing the reuse program to the organization. This plan will be refined and expanded on during the planning phase, and a detailed implementation plan will be created. The implementation plan described in this section is a phased adoption plan where variations of the workflows are applied over time to meet ZYX Electronics’ needs. The phases describe the major steps to adopting the reuse program within ZYX Electronics. The phases increase in scope and complexity over time. At the completion of the first phase, the pilot pass-through the reuse adoption steps, a second pass will be made through the adoption steps leveraging the lessons learned from the pilot. The pilot will contain four phases, each of which is discussed further in the following sections. The pilot will run over two quarters (six months total) with an interim analysis of the progress and results completed at the halfway point. Internally, the team will be guided to consider this as six one month iterations. We describe the highlights of this pilot: 1. Establish the initial reuse environment, including both process and tools. This includes identifying the resources and involved organizational unit to perform the related roles (that is, the reuse program plan). Note: The reuse environment will be continually refined/improved throughout all of the phases. 2. Roll out the reuse environment. All affected ZYX Electronics organizations will receive training in the Asset-Based Development environment, both process and tools. 3. Harvest existing artifacts and assets. 4. Support the application development teams who use the components. 5. Start discussions with other organizations regarding federated component governance and development, project and component selection, and so on (in preparation for the development of federated assets in later phases). 6. Refine the reuse environment, especially the ZYX Electronics Asset-Based Development and Strategic Reuse Guidelines and Standards, based on the experiences in the pilot projects. 7.39 Phase one: Existing assets Next, we describe Phase one and its goals, which consider existing assets. 7.39.1 Description Although we have had little focus on reuse in the past, we do expect to find a number of assets already in use within the organization. Therefore, we need to locate the assets, evaluate the assets, ensure legal compliance as necessary, and make the assets available for other people to use. This is a key step for the organization, because it provides a quick win and provides momentum for the organization. 184 Strategic Reuse with Asset-Based Development 7.39.2 Goals The goals for this phase include: Get a quick start to reuse. Get teams thinking about reuse. Ensure license and legal compliance with open source software use. Get team started using reuse adoption model (RAM) and consulting RAM for assets. Start collecting feedback and discuss the assets. Define communities and asset types within the asset Repository. 7.40 Phase two: Pattern-based engineering rollout Next, we describe Phase two and its goals, which consider pattern-based engineering. 7.40.1 Description In this phase, we get the team enabled on pattern-based engineering (PBE) and leveraging this approach in how we deliver software. A key appeal of starting with this approach is the ability to learn how to build patterns quickly, build patterns, and deliver a positive ROI. A key aspect of this work is opportunity identification, where the team is able to analyze the work that needs to be done for pattern opportunities. Perform evaluations of other preexisting pattern implementations that are provided by third-party sources. 7.40.2 Goals The goals for this phase include: Enable the team to build pattern implementations. Evaluate, select, and acquire pattern assets from third-party sources. Include pattern activities in project plans. A pattern opportunity identification mentality is created within our development organization. 7.41 Phase three: Services as assets rollout Next, we describe Phase three and its goals, which consider services as assets. 7.41.1 Description In this phase, we focus on getting the team to look at SOA as a key mechanism for leveraging and supporting reuse. Therefore, we will enable the team on the RUP-SOMA approach to creating SOA solutions and in particular will focus on the Service Identification phase. In addition, we need to find ways to reuse service assets that are made available from third-party providers. In particular, we need to evaluate the IBM WebSphere Business Services Fabric (WBSF). Chapter 7. Adopting Asset-Based Development 185 7.41.2 Goals The goals for this phase include: Enable the team to identify, design, and build reusable service assets leveraging RUP-SOMA. Identify an initial set of services within the Credit Application component. Identify opportunities for leveraging WBSF elements within the Credit Application component. Enable the team to leverage pattern opportunity identification for finding pattern possibilities within the creation of service assets. Complete an evaluation of the WBSF product as a source of reusable service assets. 7.42 Phase four: Post-pilot review and analysis Next, we describe Phase four and its goals, which consider the post-pilot review and analysis activities. 7.42.1 Description In preparation for a larger rollout of the reuse program, we need to evaluate the results of the pilot project. As part of the evaluation, we capture lessons learned, both good and bad. The investment in the pilot project is seen as providing payback in improving our odds of success as we broaden the scope of the reuse program and roll it out to a larger portion of the organization. We expect that the ZYX Electronics Asset-Based Development and Strategic Reuse Guidelines and Standards will be updated based on the experiences in the pilot projects. The metrics and maturity models will be leveraged to interpret the results of the pilot. The metrics will serve as a baseline for future iterations. We will enhance and update the process workflows, roles, and deliverables to better suit ZYX Electronics. 7.42.2 Goals The goals for this phase include: Gather and report on lessons learned from the pilot. Gather metrics and results that have proven reuse and that prove that a further investment is warranted. Create a Repository instance with useful and proven assets. Provide a foundation upon which the reuse program can grow. Build a plan for the next phase of the reuse adoption program, looping back to the Initiate step in the reuse adoption model. Update the ZYX Electronics Asset-Based Development and Strategic Reuse Guidelines. 186 Strategic Reuse with Asset-Based Development 7.43 Metrics for measuring progress Figure 7-46 provides an overview of the sources available for generating metrics related to our reuse program. Capturing metrics is a key aspect of our Strategic Reuse program adoption, because we need to ensure that we are managing our investments. Therefore, we need to understand details regarding asset production, asset consumption, and asset management. Figure 7-46 Sources of metrics Successfully measuring the reuse program is based on the fundamental premise of a consistent measurement and comparison framework. Crucial to this framework is the need to agree early in the process how reuse will be measured in the organization. There must be agreement on the metrics and the definition of how those metrics are calculated and captured for reasonable comparison and reporting. Identifying the business needs and the measurements for meeting those needs ultimately guides the organization to the set of behaviors for addressing the needs. The reuse program must operate within the context of the business needs. Progress toward meeting those needs must be measured on a regular basis. To do this, the following list identifies business motivators for conducting reuse activities. The metrics for these motivators and the approaches for collecting them must be defined. In practice, there must be a minimal set of Chapter 7. Adopting Asset-Based Development 187 motivators that are initially selected; when selected, the proper metrics and measurement techniques must be put in place: Reduce development costs. Reduce maintenance costs. Increase productivity. Improve product quality. Provide a consistent look-and-feel. Remove the barriers to entry for new products. The general framework for categorizing these metrics is illustrated in Figure 7-47. Figure 7-47 Reuse metrics framework 20 Each category in Figure 7-47 lists sample metrics to consider. Considering the potential breadth and depth of the metrics outlined in Figure 7-47 and the costs of capturing those metrics, a subset of these metrics will be gathered initially for the purposes of the ZYX Electronics reuse program. The categories for these initial metrics must include economic metrics, primary metrics, and Asset Consumer feedback. As the program matures, additional metrics must be added to each category, as well as specific categories of metrics, such as library metrics and so forth. 7.44 Economic metrics For general economic metrics, consider two categories: producer costs and consumer benefits. In the area of producer costs, there are startup costs and ongoing costs. There can be a different funding model for the startup costs than for the ongoing costs. Table 7-1 on page 189 illustrates items to consider tracking. 20 Lim, Wayne C., MANAGING SOFTWARE RE-USE, 1st, ©1998. Electronically reproduced by permission of Pearson Education, Inc., Saddle River, NJ. 188 Strategic Reuse with Asset-Based Development Table 7-1 Economic metrics End of year FY 06 FY07 FY08 $0 $0 $0 Total ongoing costs $0 $0 $0 Total startup and ongoing costs $0 $0 $0 Total benefits $0 $0 $0 Net result $0 $0 $0 Producer costs Startup Reuse management Work product creation Library creation Tools creation Training/marketing Other Total startup Ongoing Reuse management Workproduct creation Library creation Tools creation Training/marketing Other Consumer benefits Total asset ROI Development resources saved Quality Assurance resources saved Development Manager resources saved Chapter 7. Adopting Asset-Based Development 189 7.45 Primary metrics Each of the application development teams must capture asset usage metrics, such as quality impact and productivity impact. These metrics must be reported to the reuse team for assimilation and reporting. These metrics capture items, such as level of quality, productivity, and time-to-market. The individual application development teams must identify the impact of an asset on their development efforts. 7.46 Asset Consumer feedback Vital to any program is the need to collect and evaluate feedback. Early in the reuse program, there must be mechanisms in place to capture, assimilate, and report Asset Consumer feedback. The Asset Consumer and application development teams must identify the asset’s ROI using a simple asset ROI calculator. Also, the Asset Consumer must identify and report the percentage of reusable assets within the application. The following links help to capture asset ROI and other measurements: http://home.stny.rr.com/jeffreypoulin/html/reucalc_basic.html http://home.stny.rr.com/jeffreypoulin/html/reucalc_adv.html 7.47 Library metrics The driver for these metrics must not be the number of assets in a Repository. This will not measure the success of the program. Rather, the Reuse Team must keep track of the locations where assets are used and must glean from the application development projects the amount of time and money that was saved by using the assets. There are several types of metrics to track on the library. At the very least, the reuse team must capture these kinds of metrics for the repositories that they manage. However, this will take time to get to the point where these metrics can be captured, and the team must be given time throughout the implementation of the phases to make this happen. Several types of metrics to track on the library are: Asset defect rate/time period: Number of defects submitted for an asset in a given time period Asset defect correction turnaround: Amount of time from receiving a change request to publishing the revised asset Library search missed hits/time period: Number and content of searches for which no hits were found in the library in a given time period Library search hits/time period: Number of searches for which there were hits in a given time period Library retrievals/time period: Number of retrievals from the library in a given time period Library deletion rate/time period: Number of asset removals from the library in a given time period 190 Strategic Reuse with Asset-Based Development Asset change request rate/time period: Number of change requests for an asset in a given time period Asset maturity: Breakdown of the asset versions in the library 7.48 Additional considerations An effective Reuse Strategy involves additional considerations. We describe these considerations in the following sections. 7.49 Reuse incentives Planning the reuse program also calls for evaluating the Asset Consumer incentives and Asset Producer incentives. Incentives generally are needed to align the behaviors of one group with the intentions of another group. Therefore, an elaborate incentive model can articulate a deeper problem in terms of the nature of the reuse program itself. This is not to say that there must be no incentive plan, but rather that it must be modest and must rely on a foundation and an approach that, by its very nature, provides an immediate value proposition to those individuals who are seeking to reuse assets. The reuse program must be structured, where possible, so that the existing values of the developers naturally lead to the outcomes that are desired by the management. The values of the target Asset Consumers must be understood. The assets and activities must be prepared that meet management’s needs and that leverage the values of the target Asset Consumers. When creating the incentive, only use modest control systems (Fichman, page 8): Behavioral-based approach Rewarding projects and individuals based on the levels of reuse. This approach requires consistency in capturing what is counted, how, and when. Outcome-based approach Identifying the results of applying assets, such as improved quality, time-to-market, and productivity. Refer to 7.43, “Metrics for measuring progress” on page 187 for an introduction of the types of metrics to capture for this approach. These metrics are more difficult to capture, and therefore, the incentives for this approach can be more difficult. Socialization-based approach Indoctrinate developers on the value of reuse; reach out to the set of values that developers have and seek to change them; and seek to make the developers’ values the same as management’s values. For example, if the target Asset Consumers value high quality in reusable assets, the Asset Producers must have incentives that are attached to defect reports, which reflect the quality level of the assets; this approach is an outcome-based approach. ZYX Electronics must evaluate the values of the target Asset Consumers and producers and identify the necessary incentives. These incentives must be identified within the context of Asset-Based Development activities that benefit the target Asset Consumers. To accomplish this task, there needs to be a consistent effort to communicate the status of the Asset-Based Development efforts to key stakeholders, and there needs to be sufficient training for all stakeholders. Without these elements of the program, the incentives will not be as effective. The CTO and Solution Architecture team will determine the best approach for ZYX Electronics under the direction of the CIO and other executives. Chapter 7. Adopting Asset-Based Development 191 7.50 Internal communication model The reuse activities within the organization must be communicated to several stakeholders, including executive management, department and division management, project management, and engineers. The Reuse Coordinator is responsible for all communication of the reuse program to the various stakeholders. The type of information about the Asset-Based Development activities that needs to be communicated includes: Executive management (CIO): Value to organization Application Project Management: Asset and reuse impact to deadlines, budgets, and quality Architects (solution architects and application architects): Relevance of architectural assets to the applications and problems that the organization is trying to solve Core Asset Development Team: Reusability of assets, quality, and feedback Application Developers: Upcoming asset support, impact on development workflows, and asset complexity The communication of this information is extremely critical during the adoption phase and must be communicated on a regular basis. This communication is necessary for the life of the reuse program. The earlier that this information can be communicated, the sooner the organization can make appropriate refinements in implementing the Reuse Strategy. 7.51 Training model The people in the various roles need to be trained on Asset-Based Development processes and workflows, tools, standards, and policies. This training must occur within the context of each of the phases just listed. Table 7-2 on page 193 identifies the training that is relevant to the ZYX Electronics workflows. Each ZYX Electronics workflow has the RUP ABD workflows within it. The training on these ZYX Electronics workflows also implies training on supported tooling and policies. The training needs to provide an overview of the tooling and reuse infrastructure for several of the roles, such as the Software Architect (SA), Application Architect (AA), Business Architect (BA), Application Development (AD) Teams, the User Requirements (UR) Team, and the Reuse Team. However, other roles will need detailed training on applying asset production, asset management, and asset consumption within the context of the ZYX Electronics workflows. 192 Strategic Reuse with Asset-Based Development Table 7-2 ZYX Electronics workflow training model ZYX Electronics Workflow SA AA BA AD UR Reuse Business Solution Architecture Workflow Asset production Asset management Asset consumption Software Architecture Workflow Asset production Asset management Asset consumption Application Development Workflow Asset production Asset management Asset consumption Core Asset Development Workflow Asset production Asset management Asset consumption Asset Certification Workflow 7.52 Funding model In typical funding situations, the funds are allocated for the activities to deliver the artifacts for the project. This relationship changes with the reuse model where the funding for assets and their artifacts can provide value for several projects. There are several models for funding the reuse team and related reuse efforts: Overhead funding: The costs for the reuse team are handled in the pool of overhead expenses. Tax funding: Each application development project pays a tax, which covers the cost of the reuse team. Payments for assets and services: The application development teams pay for the assets and services that they use from the reuse team. Clearly, ZYX Electronics needs to determine its funding model for conducting Asset-Based Development. An initial recommendation is to start with overhead funding and shift to payments for assets and services. The purpose for this recommendation is to provide time for startup costs and then move to another funding model, such as for services or assets when the initial value has been verified. One approach here is to use the overhead funding model throughout the four phases identified in this document and then shift to an asset and services funding model thereafter. The CTO and Solution Architect Team will determine the best approach for ZYX Electronics under the direction of the CIO and other executives. 7.53 References For more information, refer to: Incentive Compatibility and Systematic Software Reuse, Journal of Systems and Software, Apr 27, 2001; Vol. 57, Iss. 1, Robert G. Fichman Chapter 7. Adopting Asset-Based Development 193 Managing Software Reuse, Prentice Hall, 1998, Wayne Lim Measuring Software Reuse, Addison Wesley, 1997, Jeffrey S. Poulin Software Reuse: Architecture, Process, and Organization for Business Success, 1997, Jacobson, Griss, and Jonsson Global Development and Delivery in Practice: Experiences of the IBM Rational India Lab, SG24-7424-00 Patterns for e-business: A Strategy for Reuse, Adams et al., ISBN: 1-931182-02-7 7.54 Looking ahead In the next chapters, we take a more in-depth look at how we produce, consume, and manage assets. In addition, we look at how the governance policies that we have chosen will be enforced, monitored, and acted upon as we move through these workflows. These next few chapters look at these activities and tasks but do not focus on specific types of assets. The latter portions of this book, found in Part 3, “Service Assets in an SOA” on page 333 and Part 4, “Patterns” on page 455, will revisit these topics but with a focus on specific asset types, including SOA Services and Patterns. 194 Strategic Reuse with Asset-Based Development 8 Chapter 8. Configure your Asset Repository This chapter introduces the information metamodel that is used by Rational Asset Manager. A solid understanding of this metamodel is needed for customizing the Repository to implement an Asset-Based Development approach that meets the organization’s needs and promotes reuse. We also discuss best practices and specific concepts related to Rational Asset Manager configuration. The chapter wraps up by describing how to apply these best practices to create an initial Repository configuration for the ZYX Electronics case study. © Copyright IBM Corp. 2008. All rights reserved. 195 8.1 Rational Asset Manager information metamodel The Reuse Strategy document that was generated during the Asset Governance Planning Phase will help you to understand the approach that the organization will take in pursuing asset reuse activities. During the Asset Governance Definition Phase, you will use the Reuse Strategy document as an input and define the tool or set of tools that you will use to support your Asset-Based Development process. In addition, you will configure this toolset to provide a governed asset management environment. This is an initial task that needs to be done before users start to use the Repository. Remember that this initial configuration is not permanent and can be modified based on experience and user feedback. This Repository configuration information must be described and detailed in a Usage Model document. The goal of the Usage Model is to provide a consistent process and tool environment configuration that will support your specific project’s asset development needs. As stated in Chapter 7, “Adopting Asset-Based Development” on page 125, we will use Rational Asset Manager as the collaborative asset management Repository to cover all phases of asset production, consumption, and management for ZYX Electronics. Different tools or solutions can use different terms to refer to the Repository structure, so we will start defining how the Rational Asset Manager Repository is structured, the terms that are used to define it, and which information you can customize. The objective is to understand how you can configure your Rational Asset Manager Repository to support an organization’s Asset-Based Development process. A goal for this work is to ensure that the resulting Repository configuration facilitates reuse. Figure 8-1 presents a simplified view of the Rational Asset Manager Information Metadata Model. Community X Assets Community Map: Users, Roles, Permissions Asset Workflow Specification: Review Process Connections to: Asset Type Specification Asset Types Rational ClearQuest, WebSphere Service Registry and Repository Community Y Assets Category Schemas Asset Attributes Relationship Types Community Map: Users, Roles, Permissions Asset Workflow Specification: Review Process Connections to: Rational ClearQuest, WebSphere Service Registry and Repository Figure 8-1 Rational Asset Manager information metadata model In the next sections, we will explain in detail the terms represented in Figure 8-1, including: 196 Community Map Asset Workflow Specification Asset Type Specification Administration Roles Strategic Reuse with Asset-Based Development As part of the explanation, we will also discuss best practices to configure your Rational Asset Manager Repository to govern the assets that are relevant for your organization. 8.1.1 Community Map The organization of a Rational Asset Manager Repository in terms of its communities, user roles, and their permissions is described in a Community Map artifact. A community is a collection of assets grouped by a common use and purpose. Rational Asset Manager Repository will contain communities to group architecturally related elements together, to minimize administrative overhead, and to facilitate access control. A community is a Repository structure that facilitates user interaction with a group of assets that are related. An asset can only belong to one community, but users can search for assets in more than one community at the same time. Communities are formed by users, their roles and permissions, and their assets and review processes. Users can have various roles and permissions on each community. For example, a database architect will have permissions to create and update database design assets in the Analysis & Design community, but the database architect only has permissions to search, browse, and download assets from the testing community that contains the test plans for all of the projects in the organization. This access control allows you to implement a consistent Asset-Based Development process across the whole organization, defining what users can do in each community Repository and with which assets they can work as shown in Figure 8-2. Rational Asset Manager repository Analysis and Design Community Role = Asset Producer Permissions to: Database Architects User Group create and update Database Design Asset Types search and browse other asset types Can create and modify Cannot create or modify Database Design Asset Type Open Account database design Artifacts: datamodel.ldm Software Design Asset Type Open Account analysis model Artifacts: use case model.mdx analysis model.mdx Testing community Testers User Group Cannot create or modify Role = Asset Consumer Permissions search and browse Test Asset Types Can create and modify Test Asset Type Open Account test plan Artifacts: Test Plan.doc Role = Asset Producer Permissions create and update Test Asset Types Figure 8-2 Rational Asset Manager access control Chapter 8. Configure your Asset Repository 197 Important: If you are interested, you can download a template of the Community Map artifact that is provided as additional material to this book. For details, refer to Appendix C, “Additional material” on page 725. Organizing the Rational Asset Manager Repository into partitions of assets for specific users and interests enhances scalability by easing reusable asset communication and maintenance, as well as the approachability of the Repository user experience. Making all assets visible to everyone quickly decreases the value proposition of the Repository, because it becomes too large for people to navigate. Administrators will use communities to: Control the level of access that users will have to the community’s assets. Define and configure the review processes for specific community’s assets. Integrate with external tools to extend the default functionality provided by Rational Asset Manager: – Use with Rational ClearQuest to customize asset review processes and forum discussions. – Use with WebSphere Service Registry and Repository to publish and search for services in the runtime environment. To control the level of access of users to the various communities created, the Administrator will define and configure roles, users, user groups, and permissions: A role is a collection of permissions that Administrators can assign to individual users or user groups. Roles are defined by community. A user is an individual with assigned roles and permissions within a community. A user can have multiple roles and permissions. Rational Asset Manager manages two types of users: authenticated or anonymous: – Anonymous users do not have to log in to the Repository, but they are restricted to searching and reading the general details of an asset. They have permission to search for assets, but they do not have permission to modify, download, or view the artifacts’ contents. – Authenticated users need a valid login and password to log in to the Repository, and their permissions depend on the permissions assigned by the community Administrator. A user group is a collection of users with the same roles and permissions for a particular community. Users and user groups can come from an Lightweight Directory Access Protocol (LDAP) registry or can be manually added to the Repository. For more information about how user authentication works in Rational Asset Manager, see A.2.4, “User authentication” on page 657. Permissions define the actions that a user can perform in any given community. Roles provide a way for community Administrators to group those permissions and assign them to all users, particular users, or user groups as shown in Figure 8-3 on page 199. 198 Strategic Reuse with Asset-Based Development Rational Asset Manager repository Configure LDAP LDAP Group Community User Group 1 User Group 2 Query User Group 1 A list of users that comes from an LDAP group Users A list of users entered into the repository, or from LDAP. Users Roles Review Process User Group 2 A list of users entered directly in the repository Roles A list of roles and their permissions, scoped within one Community Review Process References user and user groups to participate in the review process. Figure 8-3 Community roles, user groups, users, and permissions A role consists of a role name, description, permissions, and scope. Administrators can constrain the scope of a role by making permissions apply only to assets that meet a specific criteria (specific types or categories). Each new community is created with a set of default roles, as shown in Figure 8-4 on page 200, including: Administrator: The Administrator has administration capabilities to configure the community. Asset Owner: The Asset Owner role is a person or an organization that defines and submits the asset version, as well as updates or removes the asset version. The Asset Owner is the original creator of the asset version. Asset Review Board: The Review Board is responsible for specifying review processes. It works with the Community Administrator to get the assets into the Repository. The Review Board identifies the potential reviewers and customizes the review process in the Repository to add the reviewers. The Review Board also initiates the review in the Repository, monitors who has submitted reviews, and then evaluates the submitted reviews and casts the final vote on an asset. This role needs to be optional, allowing varying degrees of formality in the asset review process. Asset Reviewer: The Repository notifies the Asset Reviewer when an asset is submitted for review. The Asset Reviewer selects the asset to review and evaluates the asset, prepares review material, and then votes to accept or reject the asset. Asset Consumer: The Asset Consumer searches and browses Reusable Assets in the Asset Repository, and ultimately uses the assets. The Asset Consumer provides feedback about the assets. Asset Producer: The Asset Producer updates an asset version by developing artifacts and harvesting artifacts, as well as making changes to the metadata. If the updates require the creation of a new asset version, the Asset Producer becomes the Asset Owner in the Repository. Chapter 8. Configure your Asset Repository 199 Figure 8-4 Default community roles Important: These are the same roles that are defined by default in the Asset-Based Development plug-in of Rational Method Composer. Administrators can create additional roles as a method of grouping permissions that can be assigned to users or user groups. Individual users or groups can have more than one role. Note: Roles are not used to group Repository users; user groups are used to group Repository users. Roles are used to assign permissions to individual users or groups of users. These Repository roles must be assigned to the various users or user groups of the Rational Asset Manager Repository. When assigning roles, Community Administrators must consider a user’s tasks within the context of a particular community. For example, user groups, such as Analysts, are not required to modify or change development code and only need browse, download, and submit access in a development community. However, users with a role of Analyst in the Analyst Community can adopt full permissions so that the Analyst can modify existing assets or upload new assets in their field of expertise. The same role can be assigned to different users or user groups, and more than one role can be assigned to a single user or user group. The following list describes the permissions available to choose from when defining a role within a specific community: Browse assets: Users can view the asset, including the artifacts, which includes searching and reading details. Create assets: Users can create new assets. Creating assets includes describing and adding artifacts. 200 Strategic Reuse with Asset-Based Development Delete assets: Users can permanently delete assets from the Repository. Download assets: Users can download assets. This permission also includes describing and adding artifacts. Forums administration: Users can administer forums for an asset (if assigned to an asset role) or administer all forums and forum connections in a community. Publishing administration: Users can perform publishing actions for an asset (if assigned to an asset role) or perform all publishing actions (including publishing connections) in a community. Read asset details: Users can view asset details beyond the standard search asset page. Search assets: Users can search for assets using keyword and filter searches. Subscribe to assets: Users can subscribe to e-mails or Really Simple Syndication (RSS) file feeds to receive notification when an asset is modified. Update assets: Users can update the content or descriptive metadata of assets. Table 8-1 shows the various roles that are defined by default when a new community is created and the permissions that are associated by default to each role. Table 8-1 Roles and permissions for a community Permission Administrator Asset Owner Asset Producer Asset Consumer Asset Review Board Asset Reviewer Browse assets YES YES YES YES YES YES Create assets YES NO YES NO NO NO Delete assets YES YES NO NO YES NO Download assets YES YES YES YES YES YES Forums administration NO NO NO NO NO NO Publishing administration NO NO NO NO NO NO Read asset details YES YES YES YES YES YES Search assets YES YES YES YES YES YES Subscribe to assets YES YES YES YES YES YES Update assets YES YES YES YES YES YES Asset Review Board * N/A N/A N/A N/A YES N/A Review asset * N/A N/A N/A N/A N/A YES Note: Permissions marked with * are not available to the Community Administrator to assign to new roles. These permissions are only assigned and used by the Asset Review Board and Asset Reviewer default roles. Chapter 8. Configure your Asset Repository 201 Criteria for creating a community When making the determination whether to create a new community, there are a number of different approaches that can be followed. It is unlikely that one approach or one set of communities works across all organizations. The most important criteria that you must follow for defining the communities within your organization is to create a community for each unique set of assets over which you want specific control and governance. That control might be needed by a manager, a business unit, or by a customer. So, if your enterprise sees value in providing a place for Business Analyst assets and controlling the access to and the review and approval process of those assets, it likely makes sense to create a Business Analyst community. Tip: Create a community for each unique set of assets over which you want specific control and governance. A community can be defined along, but not limited to, multiple boundaries, including: Organizational unit: You can create a community based on the organization chart. Project: You can create a community based on a project or an initiative, even though this is often a temporary community, if you can justify the overhead and the organization. Users with a common role: You can create a community based on a common role (Business Analyst) that crosses organizational boundaries. In Figure 8-5, the Business Analyst Community is organized according to IT role; the Project XYZ Community is organized according to an IT project; and the Testing Team Community is organized according to an organizational unit. Business Analyst Community Business Analyst Repository Permissions Search asset Browse asset Retrieve asset Create asset Update asset Delete asset Community Admin Project XYZ Community Architect Service Designer Service Developer Repository Permissions Create asset Delete asset Update asset … Testing Team Community Service Tester Service Assembler Repository Permissions Search asset Browse asset Retrieve asset … Repository Permissions Search asset Browse asset Retrieve asset Create asset Update asset Delete asset Community Admin Community Admin Figure 8-5 Criteria to define communities There are trade-offs to consider when creating communities, including: If you create too few communities, the scope can be too broad, leaving the user to navigate many assets. If you specify too many communities, the administration costs can become too burdensome for specifying access control rights, review processes, asset types, and so on for each community. 202 Strategic Reuse with Asset-Based Development It will take several iterations to create the proper set of communities. In most cases, the Repository will need to be configured and then exercised for a period of time in order to properly refine it. It is best to start with fewer communities and then add more as necessary. 8.1.2 Asset workflow specification Community Administrators define review processes that provide a framework for reviewing assets leading to the assets being approved or rejected. This way, users can review and verify the quality and accuracy of assets according to their specific area of expertise. Within Rational Asset Manager, this asset workflow specification is referred to as a Review Process. Review processes can be specific to one or more asset types, specific to one or more categories, or a combination of both. For example, you can specify different review processes depending on the business domain to which the component belongs, because each business domain must follow different workflow approvals. More specifically, if the asset belongs to the Market Campaigns business domain, it must have only the marketing manager approval, but if the asset belongs to the Credit Administration business domain, it must go through an approval and have authorization from the legal and finance departments. You can also constrain the review process to have different reviewers or review board members, so that each review is unique and appropriate for each business context. There can be several levels of governing bodies to oversee the process of approving assets for reuse. For instance: At the simplest form, assets can be automatically approved as soon as they are submitted to the Repository, which can be reasonable for certain asset types. The next level of review can include one or more reviewers. Based upon their reviews and the votes that they cast, the asset might be approved or it might be rejected. There is another level of control, which is to use a Review Board. In this case, the reviewers submit their reviews and cast their votes. Then, the Review Board evaluates the submitted reviews and casts the official vote to accept or reject the asset. Rational Asset Manager has three types of review process: As is: This means that there is no review process, assets submitted as is are automatically approved. Administrators normally have to approve the selection of this type of review process. Default review process: This review process has specific states and transitions, as shown in Figure 8-6 on page 204. Chapter 8. Configure your Asset Repository 203 Figure 8-6 Default Rational Asset Manager review process The states defined in the default review process workflow include: – Draft: Only the Asset Owner and Administrators can view the assets. The Asset Owner can make changes to the asset. – Plan review: Only Administrators and Review Board members can view the assets. Administrators and Review Board members can specify reviewers and start the review process. – Review: Assets are under review. Reviewers can participate in discussion forums about the asset and submit reviews concerning the asset. – Approved: Assets have passed the review. The Review Board has the highest level of authority to approve an asset, followed by reviewers. – As is: Assets bypass the review process. Community Administrators can designate “as is” assets to require administrative approval. – Retired: Assets are available in the Repository to Asset Owners or Administrators, but cannot be downloaded. – Archived: This state makes a retired asset unavailable to users for access. – Deleted: This state means that assets are no longer available in the Repository. The states and transitions of this default review process are fixed and cannot be modified, but the Community Administrator can configure this default review process by adding different Reviewers or Review Board members. 204 Strategic Reuse with Asset-Based Development Rational ClearQuest driven review process: Although the default review process is generic, and it can be used in a wide majority of cases, if the organization requires a customized review process with different states and transitions, Rational Asset Manager (RAM) can be connected to the Rational ClearQuest change management tool. With Rational ClearQuest, you can create a customized review process integrated with the Rational Asset Manager review process. For more information about how to install, customize, and use Rational Asset Manager and Rational ClearQuest to implement a custom review process, go to A.3.2, “Integrating Rational Asset Manager with Rational ClearQuest” on page 665. An asset can have more than one review process assigned to it, but Administrators can assign priority to them, so the users can view the review processes in order of the lowest priority to the highest priority. Each review process is characterized by a single asset type and zero or more category selections. The review processes are then ordered in a top-down review process list. RAM checks this list from the top down. When it locates a review process that meets all of the characteristics of the asset being submitted, it then uses that review process. If no review process is found, the asset review process is skipped, and the asset is automatically approved. 8.1.3 Asset type specification So far, we have discussed the communities, roles, and review processes associated with an instance of the Repository. However, we still need to discuss the assets that will go within the Repository. As you can imagine, we want to continue to work toward creating an environment where it is easy for the users of the Repository to find the right assets. To help with that search, the user needs to understand what the asset is, how it can be used, and possibly to what other assets it is related. Therefore, we will create a set of asset type specifications to define and capture the assets and related information needed to have a successful Repository. Assets can contain any number of artifacts, or relate to other assets, and also have associated information or metadata that will help users to classify, search, and reuse assets. Asset metadata includes the following mandatory information fields: Name Version Community where the asset belongs Asset type Short description There are other optional information fields that can be filled by the user when submitting a new asset, such as a long rich-text description of the asset and tags to help in asset searches. Also, “creation time” and “usage time” can be specified and later used to produce metrics and statistics about the usage and return on investment (ROI) of the assets. Rational Asset Manager can be customized to include additional metadata information and attach it to the asset. This additional information will be dependent on the asset type that the user selects. When creating an asset type specification, there are four types of information to capture, including: Asset types Category schemas Asset attributes Relationship types Chapter 8. Configure your Asset Repository 205 Asset types An asset type is the primary level of organization for assets within the Asset Manager Repository. As discussed previously, asset types contain information that helps a user store and find assets. Another important aspect of asset types is that they also facilitate governance. Therefore, when a user submits an asset, the asset type controls the information and artifacts that users must include with the asset. Repository Administrators can customize the asset type with the following constraints: Artifacts: You can define rules to control the number and types of artifacts that must be part of the asset of a specific type. Categories: A category is a classification that helps to organize assets within the Repository so that users can find and reuse them more easily. You can configure and control which category or group of categories the user can complete when submitting a new asset of a specific type. Relationships: You can define restrictions to control the number of relationships that the asset that you are creating needs to have, and you can specify the type of assets with which it needs to be related. Attributes: An attribute is an additional information field associated to the asset. You can control the additional information fields (and make them optional or mandatory) that the user must complete when submitting a new asset of a specific type. For example, you can define an asset type called Software Design with the following rules or restrictions: Contains at least one “.emx” file, which represents a Uniform Modelling Language (UML) model Has at least one related asset of type “Requirement” with a relationship named “design for” Defines its associated Business Domain (category) Defines the type of architecture that is used to implement the asset (Java 2 Platform, Enterprise Edition (J2EE), batch application, and so forth) (category) The Repository Administrator can also customize the constraints (category schemas, relationship types, and asset attributes) that will later be referenced when creating a new asset type as represented in Figure 8-7 on page 207. 206 Strategic Reuse with Asset-Based Development Figure 8-7 Asset types reference categories, relationship types, and asset attributes Tip: Remember that you can also use asset types and categories to constrain the scope of roles when configuring communities. Therefore, the permissions associated with a role will only apply to assets that meet a specific criteria. Category schemas Category schemas can be used as mechanisms for searching and discovering assets, and an asset can be classified using values from many category schemas. The category schemas can be exclusive and unrelated to each other. Using category schemas in this manner permits many perspectives to be captured. For example, not only do practitioners (architects, developers, testers, and so forth) work with assets, but certainly Administrators and technical management will interact with the assets, as well as with report generators, metrics collectors, and other tools. Each classification schema must be created with a specific focus. For example, you can create a classification schema to describe the business domain of interest to the enterprise. You might create another classification schema to describe the technical contexts for the enterprise, such as runtime platforms and development platforms. Category schemas are often created from the perspective of a target consumer. For example, architects might want to discover an asset’s relevancy from the perspective of non-functional characteristics so a “Technical environment” category schema will be created as represented in Figure 8-8 on page 208. Chapter 8. Configure your Asset Repository 207 Figure 8-8 Asset classified from multiple classification schemas Category schemas do not have to apply to all types of assets. You can define and use specific category schemas to facilitate searches and the organization of specific asset types. Administrators must evaluate the way in which users will view and access their assets. In general, the Administrator will create one classification schema per perspective. To keep things simple, remember that not all users need to be burdened with all perspectives. Tip: When creating the schemas, the use of models or pictures to communicate the category schema simplifies the effort to achieve acceptance from the users. Asset attributes Custom asset attributes are metadata elements that help you to provide an asset with additional information that fits a specific context. Custom attributes contain either strings or predefined lists and are defined at the Repository level by the Community Administrator. They are associated with asset types and might be required or optional on the asset type. The following are examples of custom attributes that Administrators can create: Project: The project that has created the asset Support contact: The person with the knowledge to answer questions about the asset Relationship types Relationships enable users to specify which assets are related to each other within the Repository and to describe the nature of that relationship. Relationships facilitate search, governance, and impact analysis. Asset relationships are bidirectional, and each relationship end has a type. If a user creates a relationship from asset A to asset B, the reverse relationship exists from asset B to asset A. For example, if you create a relationship type “Uses open source framework” to describe that a component asset type was built using an open source framework, you must also define the reversed relationship “Open source framework used by” to describe that the framework is being used by the component as shown in Figure 8-9 on page 209. 208 Strategic Reuse with Asset-Based Development Component Asset Type Opening Account Application Artifacts: openaccount.ear source files Uses open source framework Open source framework used by Framework Asset Type Spring Framework Artifacts: springfiles.zip license.text Figure 8-9 Two-sided relationship types Rational Asset Manager is pre-populated with the following relationships: Dependent/Dependency Parent/Aggregation Tutorial/Tutorial for Test/Test for Specification/Implementation In order to provide governance, Repository Administrators can place relationship constraints on an asset type. The Repository Administrator can require users that submit an asset of a certain type to also include assets of a certain relationship. For example, if the organization produces assets that require testing, the Repository Administrator can create a constraint on an asset type so that users must include a related testing asset along with it. Relationships facilitate searching and also make it easier for a user to access all of the assets that are necessary for a project. When a user searches for an asset, they can see the other assets that are related to their project and gain information about the nature of those relationships. 8.1.4 Administration roles There will be several administration roles involved when configuring a Rational Asset Manager Repository. These roles can be played by a single person, but it is more likely that multiple people will be involved in playing these roles. The administration roles include: Repository Administrator: Repository Administrator sets up the structure for how the Repository is organized and how users interact with the Repository. The Repository Administrator also manages communities, asset types, relationships, categories, and attributes and has authority to perform any activity within the Rational Asset Manager Web interface. The main tasks that this role has to perform are: – Create communities and assign users as Community Administrators. – Add additional Repository Administrators. – Configure asset definitions: Define the infrastructure and criteria for assets as they are submitted into the Repository. This task will include the following actions: • Define asset types • Define asset attributes • Define asset relationships • Define Repository category schemas – View and configure Repository metrics and statistics – Configure Repository settings Chapter 8. Configure your Asset Repository 209 Community Administrators: Community Administrators manage access control, review processes, and configure integrations with external tools, such as Rational ClearQuest and WebSphere Service Registry and Repository (WSRR), for groups of assets called communities. Integration Administrators: An additional Administrator role might be necessary when Rational Asset Manager is integrated with external tools. This role is responsible for integrating the Rational Asset Manager Repository with other development life cycle tools, such as Rational ClearCase, Rational ClearQuest, and WebSphere Service Registry and Repository. While Repository Administrators oversee high-level Repository maintenance and organization, Community Administrators ensure that users can work with the Repository effectively by managing assets, roles and privileges, review processes, and connections with external tools as shown in Figure 8-10. Rational Asset Manager Repository Community X Information Metadata Model Asset Types Category Schemas Asset Attributes Users, Roles, Permissions Review Processes Connections to ClearQuest, WSRR Community Y Relationship Types Users, Roles, Permissions Review Processes Connections to ClearQuest, WSRR Figure 8-10 Rational Asset Manager Repository organization Administrators will use specific Administrator menus that are available in the Rational Asset Manager Web client to configure metadata information (this functionality is not available in the Rational Asset Manager Eclipse client). For more information about the differences between these client types, go to A.2.3, “Installing Rational Asset Manager clients (Web and Eclipse)” on page 655. The next section in this chapter shows how ZYX Electronics configured their Rational Asset Manager Repository and gives you detailed information about how to configure your Repository. Tip: If the Administrator wants to have a visual representation of a specific Rational Asset Manager configuration, the Rational Asset Manager Configurator plug-in can be used in Rational Software Architect to provide a UML visualization of the configuration and allow you to import and export these configurations into an XML Metadata Interchange (XMI) file. See A.5.1, “Rational Asset Manager configurator tool” on page 711 for more information. 210 Strategic Reuse with Asset-Based Development 8.1.5 Best practices to customize your Repository This section provides best practice guidance that you can leverage as you customize your Repository configuration. Remember that the configuration of your Repository will be an iterative process, and it will be redefined and improved over time. You have to define an initial configuration for your Repository when you start to deploy Rational Asset Manager in your organization, but based on user feedback, metrics collected, and reports generated, you might need to update the configuration. Tip: The main theme running through all of these best practices is that you want to create a usable Repository. Therefore, you will want to create a logical structure, which is as simple as possible, and then effectively communicate this information to your user community. Community Map To create the community map: Start with a basic configuration that is easy to understand. With the introduction of your new Asset-Based Development process and asset management tooling, a basic configuration needs to be easy to digest by the users in the short term. Later, the tool configuration can be modified to include more process detail as your situation allows. Communities must group architecturally related elements together and facilitate access control. Start with fewer communities and then add more communities as necessary. Create a community for each unique set of assets over which you want specific control and governance, which will facilitate administration. When considering creating a role, evaluate the asset types that are defined in the Repository against asset type specifications. This action can both discover potential asset types, as well as help refine with which assets the role will be working. Asset workflow specification To create the asset workflow specification: Do not forget to define review processes for the asset types. If review processes are not defined, assets will not be forced to follow a review process and will go directly to the approved state. Recall that there is a cost to reuse failure. Therefore, it is imperative that the asset review process is set up to favor quality over quantity. There are no awards for having a Repository with a high number of assets. Favoring quantity over quality will lead to more instances of reuse failure. The review process can play an important role in the overall governance of the software organization. Ensure that you have the appropriate participants from management, technical, and legal groups involved in the approval process. Asset type specification To create the asset type specification: A category schema must have only one focus to classify the asset. Do not use the same category schema to define different or complex classifications. Chapter 8. Configure your Asset Repository 211 The asset type specification plays an important role in helping Asset Consumers discover assets. So when creating this specification, do so from the perspective of Asset Consumers and other stakeholders. Do not confuse categories and asset types. Both are used for describing the asset, and both are used for searching and discovery. But the asset type has a stronger affinity with describing the set of artifacts that must exist in the asset and also with the kinds of relationships that the asset must have with other assets. An asset has one type, whereas it can have many classifications, which enhance the description of the asset. There is a balancing act that needs to be performed when defining the necessary asset types. An asset must contain a number of artifacts that are necessary to make the asset meaningful. However, you must include only the artifacts that are meaningful to the asset. If you include too many artifacts, the asset type definition is diluted and becomes meaningless. Define attributes for important information needed to describe the asset or for additional information needed to generate metrics and reports on the Repository contents. For example, if you want to measure the return on investment from reusing a specific type of asset, define an attribute called “Time saved” to represent the time saved by users when reusing the asset and make this attribute mandatory. Create a policy document describing the rules by which the assets must comply as they are created. Table 8-2 provides a sample of this type of a document. Table 8-2 Sample asset rules and policies Asset type rules Version 1.0 Description Asset type must describe the kinds of users who will use the assets and at what point in the development process the assets will be used. An asset type specification must be created and approved by the Asset Governance Board. This is to minimize redundant or similar asset types in the Repository. Asset rules Target audience Architects and Administrators Version 2.0 Description All assets must include support contact information. All asset names must abide by the naming conventions described here: – No asset names can use abbreviations. – Asset names can use industry acronyms. – All words in asset names start with a capital letter. Target audience 212 Strategic Reuse with Asset-Based Development Practitioners (analysts, architects, and so forth) who submit assets. Artifact rules Relationship type rules Asset classification rules Version 1.0 Description An artifact name can be the same as the file name. Target audience Practitioners (analysts, architects, and so forth) who submit assets. Version 1.0 Description Relationship types must be approved with the Asset Governance Board before they are used. Target audience Architects and Administrators Version 2.0 Description All assets must be classified with the enterprise business domain schema and the technology schema. Custom tags need to abide by the naming conventions here: – No tags can start with a number. – Tags with multiple words must be concatenated with an underscore “_”. Classification schema rules Target audience Practitioners (analysts, architects, and so forth) who submit and use assets. Version 1.0 Description Classification schemas must be approved by the Asset Governance Board. The schema must be reviewed and compared with other schemas for redundancy. The classification schema must have a name that follows the same naming convention as for asset types. The classification schema must have a description that identifies the target users and audience for the schema. Target audience Architects and Administrators General In general: Define naming conventions and policies to give coherent and standard names to the configuration that you create. Create a community in the Repository called “Repository Configuration” to store the assets describing the policies and decisions you have followed for your configuration (create a specific Dev Time Policy asset type to store these information assets). The Administrator must have a single picture or a spreadsheet of the asset types, their Chapter 8. Configure your Asset Repository 213 definitions, and their structure along with the artifact definitions in order to reduce confusion and provide the consistent use of terms. When users come to the Repository they often do not understand many things about the Repository (information metamodel, communities, access control, asset versioning policy, and so forth). So, you must create a Repository Configuration Overview document and distribute it to the Rational Asset Manager users. Integrate the Repository with the LDAP registry for your organization to manage users and groups. Doing so, you will avoid a great deal of administration overhead. 8.2 Repository configuration for ZYX Electronics This section describes the Rational Asset Manager configuration that ZYX Electronics decided to create based on the best practices detailed earlier in this chapter. The ZYX Electronics Reuse Assessment and the ZYX Electronics Reuse Strategy documents were additional sources of input into this configuration. Because we will refer to a number of roles and individuals from ZYX Electronics, it is worthwhile to take a moment to refamiliarize yourself with the IT team, as depicted in Figure 8-11. Figure 8-11 Organization chart for the IT organization 214 Strategic Reuse with Asset-Based Development Also, as discussed in the ZYX Electronics Reuse Strategy document, a new Reuse Team has been created within the organization, as depicted in Figure 8-12. The Reuse Team will work with Duncan Munchkin and the team as they work through the pilot phases of the Reuse Adoption project. Figure 8-12 Reuse Team within the larger IT organization Important: The Reuse Team will report into the Enterprise Architect, because ZYX Electronics is using Rational Asset Manager as the Repository to manage the details and artifacts associated with the overall enterprise architecture. The Enterprise Architecture represents a key set of assets, which ZYX Electronics needs the entire organization to follow and leverage. Therefore, this will be a key aspect of the Rational Asset Manager and Reuse program adoption. ZYX Electronics’ management team decided that Duncan Munchkin, the Development Manager for the Credit Application, is the best candidate to lead this project due to his great experience and knowledge of software reuse. In addition, as part of his team’s effort in the Reuse Pilot, they will define the initial Repository configuration and be the first to work with the Repository. Therefore, they will produce, consume, and manage the first set of assets to be loaded into ZYX Electronics’ Rational Asset Manager Repository. Using this initial configuration, the objective is to have an environment ready to start using Rational Asset Manager at ZYX Electronics to validate the defined process and the tool implementation. This initial configuration will not be the final one. It will be reviewed and updated later based on user feedback, collected metrics, and reports generated. In Part 3, “Service Assets in an SOA” on page 333 of this book, you will see how this initial configuration can be expanded to manage service assets to help ZYX Electronics to transition to a service-oriented architecture (SOA) and in Part 4, “Patterns” on page 455 to manage pattern assets. Chapter 8. Configure your Asset Repository 215 ZYX Electronics had recently created a methodology team to establish a software development approach using the Rational Unified Process (RUP). They wanted to define their own software development process based on the standard “RUP for Large Projects” configuration, using the Rational Method Composer tool to simplify the predefined process and to adapt it to ZYX Electronics’ needs. The Asset-Based Development plug-ins are leveraged, and content added into the ZYX process will be sourced from these plug-ins. Based on the early work of the methodology team, ZYX Electronics was familiar with RUP terminology, and they had already defined roles similar to the ones described in RUP for the various software development disciplines. Their software development projects follow an iterative approach, and the phases correspond to RUP disciplines. The artifacts that they consume and produce during the software life cycle are also in-line with the artifacts defined in RUP (although they wanted to generate only a small set of the artifacts described in the “RUP for Large Projects” process configuration). Tip: Although largely outside the scope of this book, more information about customizing RUP for an organization is provided in Appendix B, “Integrating Asset-Based Development into a process” on page 713. It is important to remember that RUP is not a “one size fits all” solution. It is a resource to leverage and guide you as your organization develops its process. As you build your own process, you will determine which deliverables are important to your organization and which deliverables offer less value. To define the optimal configuration for the Repository, Duncan Munchkin, the ZYX Electronics Development Manager, decided to organize several meetings with key people (analysts, developers, and project managers) involved in development to have their feedback and to define an initial Repository configuration that meets their needs. He also invited Victoria Prezzio, the VP of Development, to these meetings to be sure that the approach they were following was in-line with the objectives that the ZYX Electronics executives want to achieve with this pilot project. Deon Adminio, the Developer Tools Administrator, was also invited to participate in these meetings. He had already attended Rational Asset Manager training, so during the first meeting, he presented and delivered a demonstration to the other participants to show the major features and to explain the major concepts of Rational Asset Manager. Because ZYX Electronics was going to use RUP for their software development projects, they decided to use its terminology to define the first Rational Asset Manager Repository configuration. The following sections describe in detail the criteria that they agreed to use to define their Repository structure and how they implemented this configuration using Rational Asset Manager. Based on his early exposure and experience with Asset Manager, Deon will be involved in the reuse pilot. However, a key element to his role is to ensure that there is a skill transfer occurring to Tim Spectacle from the Reuse Team. Therefore, Deon was designated the Rational Asset Manager Repository Administrator in charge of installing, configuring, and administering Rational Asset Manager. In order to summarize the agreements from the meetings, Duncan created a document describing the structure for their Rational Asset Manager Repository called ZYX Electronics Usage Model. The following sections assume that Rational Asset Manager was already installed and that the main administration configuration tasks had been completed. For example, the connection with the LDAP registry to manage users and user groups in ZYX Electronics had already been established. For more information about how to install and configure Rational 216 Strategic Reuse with Asset-Based Development Asset Manager, see Appendix A, “Rational Asset Manager: Installation and administration” on page 637. 8.2.1 Creating communities and Community Administrators Because users were going to be organized by RUP disciplines, ZYX Electronics decided to take the approach of defining one community per RUP discipline. This approach minimized the administrative overhead to define and configure permissions and review processes (communities were oriented to group assets used by users with common interests and purposes). They also adopted the best practice described in the previous chapter to define a special community called Repository Configuration to store assets that describe the policies and decisions made by ZYX Electronics to configure the Rational Asset Manager Repository. ZYX Electronics defined the following communities to be created in Rational Asset Manager: Business Modeling Requirements Analysis Design Implementation Test Deployment Project Management Environment As per the best practices covered earlier, ZYX Electronics also created a community for managing the assets related to the configuration of the Repository. So one additional community was created, which was called Repository Configuration. To facilitate administration, Deon Adminio, the Rational Asset Manager Repository Administrator for ZYX Electronics, wanted to assign Administrators to each community. Because this was a pilot project, and not many people were involved, he decided to assign Duncan Munchkin (the Development Manager) as the Administrator for all of the communities instead of having to define different Administrators for each community. To create communities and to assign Duncan as the Community Administrator, Deon used the Rational Asset Manager Web interface, which contains all administrative capabilities. Deon performed the following steps as depicted by Figure 8-13 on page 218 for each community that he needed to create: 1. Click the Administration tab. 2. Click New Community. 3. Specify the following information in the New Community window: – Name: name to identify the community, for example, Analysis Design. – Description: brief description of the community – Type the name of the specific user who will be assigned as the Community Administrator and click Search. – Select the check boxes next to the users who will be added as Community Administrators. – Click OK. Chapter 8. Configure your Asset Repository 217 Figure 8-13 Create a new community 8.2.2 Creating asset types, category schemas, relationship types, and attributes Because ZYX Electronics’ software development projects created several of the RUP artifacts, ZYX decided to define an asset type for each set of artifacts that were related in RUP. They did not create an asset type for each RUP artifact, because this means you must have many asset types without real value to the user. For example, they created an asset type called “Software Design” that contains at least the UML analysis and design models and any additional documentation needed to understand these models, instead of defining a different asset type for each file type generated. During the meetings to define the initial Repository configuration, ZYX Electronics also described the constraints they wanted to associate to each asset type (categories, asset relationships, attributes, and which artifacts to include). Table 8-3 on page 219 describes the asset types and associated restrictions that ZYX Electronics agreed to configure in the Rational Asset Manager Repository (this was a simplified configuration model used for the pilot project and all asset types might not be represented). 218 Strategic Reuse with Asset-Based Development Table 8-3 Asset types and restrictions associated to each asset type Asset type Artifact constraints Category constraints Relationship constraints Attribute constraints Business Process Requirement Include at least one .doc file to represent the requirements document Optionally, include one .emx file to represent the use case model Architecture Include at least one .doc file Include at least one relationship of type “architecture for” with the “Requirement” asset type Software Design Include at least one .emx file to represent the UML file Include at least one relationship of type “design for” with the asset type “Architecture” Database Design Include at least one .ldm file to represent the data model (developed with Rational Data Architect) Include at least one relationship of type “database design for” with the asset type “Software Design” Database Type: SQL Server® DB2 Oracle® DB Schema Name Microsoft Access SQL Anywhere Chapter 8. Configure your Asset Repository 219 Asset type Artifact constraints Category constraints Component Include at least one BIN label artifact Technology software: Include at least one SourceCode label artifact – – – – Relationship constraints J2EE Cobol C++ Others Technology hardware: – – – – – Windows Linux® UNIX z/OS Others Development Type: – Internal development – External development Framework Include at least one .doc file to know how to use the framework Framework type: – Open source – Commercial UI components – SQL scripts – Batch scripts Technology hardware: – Windows – Linux – z/OS Test Optionally include one .ini file to specify the connection to ClearQuest TestManager Include at least one relationship of type “tests for” with the “Component” asset type Include at least one relationship of type “tests for” with the “Requirement” asset type 220 Strategic Reuse with Asset-Based Development Attribute constraints Asset type Artifact constraints User Support Material Include at least one .doc file to contain the user manual Category constraints Relationship constraints Attribute constraints Optionally include one .emx file to define the Deployment model Project Management Information Process URL link to Rational Portfolio Manager Include at least one .doc file to explain the process artifacts Methodology used Asset Governance Artifact type: Dev Time Policy (asset describing the policies and decisions for the ZYX Electronics configuration) Asset type specification Workflow specification Asset versioning policy Category schema Repository configuration overview Community map Presentation Include at least one .ppt document To facilitate searches and navigation through the Repository, ZYX also defined additional categories and attributes that were associated to all asset types, as Table 8-4 on page 222 and Table 8-5 on page 222 describe. Chapter 8. Configure your Asset Repository 221 Table 8-4 Categories common to all asset types Category Values Business Domain Business Administration Business Planning Business Unit Tracking Staff Appraisals Account Administration Product Administration Purchasing Branch/Store Operations New Business Development Sector Planning Sector Management Product Management Product Directory Marketing Campaigns Relationship Management Account Planning Relationship Management Credit Assessment Credit Administration Servicing and Sales Sales Planning Sales Management Sales Customer Service Collections Product Fulfillment Fulfillment Planning Fulfillment Monitoring Product Fulfillment Document Management Financial Control and Accounting Portfolio Planning Compliance Reconciliation Customer Accounts General Ledger Geographic Area North America South America Europe APAC Rational Unified Process Phases Inception Elaboration Construction Transition Table 8-5 Attributes common to all asset types Attribute Project name In advance of creating and configuring these asset types and their restrictions, the Repository Administrator had to create the categories, asset relationship types, and attributes. 222 Strategic Reuse with Asset-Based Development Create categories To create a new category schema that represents the Database Type that is referenced by the Database Design asset type, Deon performed the following steps: 1. Go to the Administration tab. 2. Select Category Schemas from the Repository Administration sidebar as Figure 8-14 shows and click New Category Schema. Figure 8-14 Create a new category schema 3. Define the new category by entering a category Name and Description. Use Add Field to create additional “root nodes” as necessary. 4. To begin creating the Category tree, click Add Field to add the root of the category tree. Note that the Add Field link creates new root nodes of the Category Schema. Use Insert Child to create leaf nodes. 5. Enter the Name and Description of the category node. Note: When you select “Children are exclusive”, it means that an asset can be categorized using only one of the subcategories. Each choice in the list of subcategories is mutually exclusive; therefore, the user can only assign one value from the list to the asset. 6. To add child categories, click Insert Child as many times as necessary to add the necessary child categories to complete the category definition as shown in Figure 8-15 on page 224 (add SQL Server, DB2, Oracle, MS Access, and SQL Anywhere values). Chapter 8. Configure your Asset Repository 223 Figure 8-15 Create category hierarchy 7. Click OK to save the newly created category. Repeat the same process to create the other categories in the Repository. Create relationship types Next, Deon moved on to create the necessary relationship types. The relationship type will later be referenced as a restriction when specifying the asset type. For example, the relationship type “Database design for” can be used to associate the Database Design asset types with Software Design asset types. To create the relationship types, Deon followed these steps: 1. Go to the Administration tab. 2. Select Relationship Types from the Repository Administration sidebar as Figure 8-16 on page 225 shows and click New Relationship. 224 Strategic Reuse with Asset-Based Development Figure 8-16 Create a new relationship type 3. As shown in Figure 8-17, in the New Relationship window, specify database design for as the Relationship type. Then, specify database design as the value for Reversed relationship. Figure 8-17 Define relationship type and its reversed relationship 4. Click OK to save the new relationship. He repeated the same process to create the other relationship types in the Repository. Create attributes Next, Deon moved on to create the necessary attributes. Attributes will be used at a later time as a restriction in the asset type. For example, a new attribute called DB Schema Name can be used to describe the type of database associated with an asset of type Database Design. Chapter 8. Configure your Asset Repository 225 Deon followed these steps to create the attributes: 1. Go to the Administration tab. 2. As shown in Figure 8-18, select Asset attributes from the Repository Administration sidebar and then click New Attribute. Figure 8-18 Create a new asset attribute 3. In the New Attribute window, as shown in Figure 8-19, type the name and description for the new attribute. To specify a default value to be assigned to the attribute, select the check box Use preset values, type the value to be displayed, and click Add. Figure 8-19 Create a new attribute dialog 4. Click OK to save the new attribute. Deon repeated the same process for the other attributes that needed to be created in the Repository. 226 Strategic Reuse with Asset-Based Development Create asset types After Deon created all of the categories, relationship types, and attributes, he proceeded to create the ZYX Electronics’ asset types. Deon performed the following steps to create the Database Design asset type: 1. Go to the Administration tab. 2. As shown in Figure 8-20, select Asset Types from the Repository Administration sidebar and click New Asset Type. Figure 8-20 Create a new asset type 3. Provide a name and description for the new Database Design asset type. 4. Define a new artifact constraint by clicking New Artifact Constraint. A new window will appear as is shown in Figure 8-21. Select the number of artifacts that will be required, the restriction type, and the type of the required asset. When finished with these selections, click OK. For example, to create the restriction to check if the datamodel diagram created with Rational DataArchitect is included, Deon created a restriction to verify that the asset type has at least one datamodel diagram (one file with extension .ldm). Figure 8-21 Add new artifact constraints to the asset type Chapter 8. Configure your Asset Repository 227 5. Define the category constraints that will be shown to the user when creating a new instance of this asset type. As Figure 8-22 shows, Deon selected just the general categories (Business Domain and Geography) and the specific category for this type of asset called Database Type. Figure 8-22 Select categories to constraint to the asset type 6. Define a new asset constraint by clicking New Relationship Constraint. A new window will appear as is shown in Figure 8-23. To define the constraint to have a relationship with the Software Design asset type, Deon selected the number of relationships that will be required (1), chose the asset type to relate with (Software Design), selected the type of relationship already defined in the Repository (Database Design for), and then clicked OK. Figure 8-23 Add new relationship constraints to the asset type 7. Define the attribute constraints that will be shown to the user when creating a new asset of this type. Figure 8-24 shows Deon was able to select with a check box the attributes that were already defined in the Repository to use to add additional information to the Database Design asset type. To make the attribute mandatory when the asset is submitted, Deon checked the Required check box for the DB Schema Name attribute. Figure 8-24 Add attribute constraints to the asset type 8. Click OK to save the new asset type created. Deon repeated these same steps to create the other asset types. 8.2.3 Managing users and assigning roles in communities Because ZYX Electronics was going to use several of the standard RUP roles and the ZYX Electronics Systems Administrator had already configured the connection with the LDAP registry, the permissions configuration task was quite easy. He used the default roles defined 228 Strategic Reuse with Asset-Based Development by Rational Asset Manager when a new community is created so for each community he just had to assign the role’s permissions to the LDAP user groups according to the permissions agreed upon in Table 8-6. Important: Roles not listed in the table have Asset Consumer permissions in all communities. Table 8-6 ZYX Electronics roles permissions Community User groups Role permission Business Modeling Business Analyst Asset Producer Project Manager Asset Reviewer System Analyst Asset Producer Project Manager Asset Reviewer System Analyst, Architect, and Database Architect (but only with permissions to produce “database design” asset types) Asset Producer System Analyst Asset Reviewer Developer, Integration Developer, and Architect Asset Producer Project Manager Asset Reviewer Test Architect/Manager Asset Producer Project Manager Asset Reviewer Release/Build Engineer and Technical Writer Asset Producer Project Manager and Test Architect/Manager Asset Reviewer Project Manager and Development Manager Asset Producer Executives and Development Manager Asset Reviewer Development Tools Administrator Asset Producer Development Manager Asset Reviewer Development Tools Administrator and Development Manager Asset Producer Requirements Analysis_Design Implementation Test Deployment Project Management Environment Repository Configuration Community As stated before, Duncan Munchkin (Development Manager) was designated the Administrator for all of the communities that were created. These are the steps that Deon followed to associate the Role’s permissions with the User Groups for the Analysis_Design community. Note, because Duncan Munchkin had been Chapter 8. Configure your Asset Repository 229 designated as a Community Administrator, this task might also have been performed by Duncan as well: 1. Open the Administrator tab. 2. Click the community name Analysis_Design to modify the user groups and their permissions that are associated with the community. 3. Open the User Groups tab. 4. To add a new user group to the community, click New User Group. 5. Type a name and a description for the new user group that is going to be created (System Analyst, Architect, and Database Architect). 6. Because authentication was configured to use an LDAP directory, he clicked Bind to select the LDAP group that he wanted to bind to Rational Asset Manager. Note: A scheduled job will pick up any user information modifications for the group listed on the LDAP server. After you bind the LDAP group to this user group, you can no longer modify any of the user’s information about the Rational Asset Manager server (for example, a user’s name or telephone number). This information must be modified on the LDAP server. 7. To add new users to the user group, Deon clicked Add User in the Group Members section. Then, he typed a search string and clicked Search to retrieve a list of user names. Note that this search might return multiple user names. 8. Select the check box next to each user’s name to add them to the user group as shown in Figure 8-25. Figure 8-25 Select users to add to the user group 9. Select the roles to assign to the user group as shown in Figure 8-26 on page 231 and click OK. 230 Strategic Reuse with Asset-Based Development Figure 8-26 Select roles to assign to the user group Tip: If the roles that are listed do not satisfy the needs of the user groups that you are adding, add the user group and then go to the Role tab to create the new role. Later, you can edit a user group and modify its roles. Asset Owner, Asset Reviewer, Asset Review Board, and Administrator roles are created automatically by Rational Asset Manager. These roles cannot be assigned to users or user groups. There will be specific menus to assign these roles to users: Administrator: This role will be assigned by the Repository Administrator to users when creating a new community. Asset Reviewer and Asset Review Board: This role will be assigned by the Community Administrator when creating and configuring the review process for an asset type (Review Process tab). Asset Owner: This role is the original creator of the asset version. To implement a restriction for the Database Architect role in the Analysis_Design community so that it only has permissions to produce Database Design asset types, Deon had to create a new role called Database Asset Producer and restrict the scope to only “database design” asset types. To modify default roles permissions to constrain “database design” asset types, Deon followed these steps: 1. Open the Administrator tab. 2. Click the community name Analysis_Design to modify the roles and permissions that are associated with the roles in the community. 3. Open the Roles tab. 4. Because Deon needed to create a new role for the community, Deon clicked New Role to add a new role definition to the community. Chapter 8. Configure your Asset Repository 231 5. As shown in Figure 8-27: – On the Community Role page, Deon provided a name (Database Asset Producer) and description for the role. – In the Role Permissions section, he selected the permissions that this role will have in the community (he selected all, except the permission to “Delete assets”). – In the Roles Scopes section, Deon selected the restriction that the role must only have permissions for the Database Design asset type. – He clicked Add Constraint to create the restriction. Figure 8-27 Select permissions for the role 6. Click OK to save the changes. 8.2.4 Defining default review processes in communities For this first phase of the pilot project, Duncan Munchkin and Deon Adminio decided to use the default review process that comes with Rational Asset Manager. This default review process allows the team to get familiar with a review process and later provide an educated opinion when evaluating the need to move to a custom review process. To implement this default review process in Rational Asset Manager according to what was agreed to in Table 8-6 on page 229, Duncan and Deon defined review processes at the community level and assigned as reviewers the user groups defined in the table. These are the steps that Duncan and Deon followed to create a default review process in the Analysis_Design community for the System Analyst user group: 1. Log in to Rational Asset Manager Web client with the Community Administrator’s permissions. 232 Strategic Reuse with Asset-Based Development 2. Open the Administration tab. 3. Click the community name Analysis_Design to create a review process in that community. 4. Open the Review Process tab and click New Review Process. 5. As shown in Figure 8-28, select Default review process from the list and then click OK. Tip: If you want to know how to customize and use a Rational ClearQuest review process, go to A.2.2, “Installing Rational Asset Manager Server” on page 648. Figure 8-28 Select default review process 6. Describe the new review process: a. Type a name for the review process: Analysis_Design review process. b. Type a description for the review process. Descriptions can include spaces and special characters. 7. Define the conditions for the review process: If no conditions are selected, this review process will apply to all assets in the community. So, ZYX Electronics did not add any condition as shown in Figure 8-29. Figure 8-29 No special conditions were selected for the review process 8. Deon did not select “Add review board members” to this review process. 9. Rather than select individual reviews, Deon wanted to assign the responsibility for reviews to a user group. So, to add the System Analysts user group to this review process as a Reviewer, Deon followed these steps: a. Click Add User Group and select System Analyst group from the list as shown in Figure 8-30 on page 234. Chapter 8. Configure your Asset Repository 233 Figure 8-30 Add user group-based reviewers 10.Specify 1 as the number of Required Reviews. 11.Optionally, select the Make reviews private check box so that reviewer names are not visible to other users. 12.Optionally, set reminders to send an e-mail notification on the schedule that you choose in the lists. Deon specified 3 Days, so Rational Asset Manager will send an e-mail reminder every three days to the reviewers that Deon specified. 13.Click OK. Tip: An asset can have more than one review process assigned to it, but Community Administrators can assign priority to them, so the users can view the review processes in the order of the lowest priority to the highest priority. Because ZYX Electronics wanted to force assets to follow a review process, Deon configured that the assets submitted “as is” (see Figure 8-6 on page 204) must have administration approval as shown in Figure 8-31 on page 235. 234 Strategic Reuse with Asset-Based Development Figure 8-31 Administrator approval for assets submitted “as is” To create the other review processes of Table 8-6 on page 229, Duncan and Deon just followed the same process that we just described for the rest of communities. 8.3 What comes next Following the criteria and steps just detailed, ZYX Electronics’ Repository and Community Administrators (Deon Adminio and Duncan Munchkin) defined and implemented an initial configuration for the Rational Asset Manager Repository. They have created the initial environment needed to start to implement and use an Asset-Based Development approach. As discussed previously, this was just an initial configuration that will be updated to be able to manage new asset types as services and patterns. We have not covered how ZYX Electronics’ Community Administrators defined Rational Asset Manager connections with external tools, such as WebSphere Service Registry and Repository and Rational ClearQuest. This information will be covered in other chapters of the book: The connection between Rational Asset Manager and WebSphere Service Registry and Repository allows users to publish service assets to the WebSphere tool directly from the Rational Asset Manager Web interface and to search for services that were already published to WebSphere Service Registry and Repository. For detailed information about how to create and configure the connection between both tools, go to A.3.1, “Integrating Rational Asset Manager with WSRR” on page 661. The connection between Rational Asset Manager and Rational ClearQuest allows users to replicate forum discussion topics to Rational ClearQuest and to customize the asset review process to adapt it to specific organizational needs. For detailed information about how to install and configure the connection between both tools, go to A.3.2, “Integrating Rational Asset Manager with Rational ClearQuest” on page 665. Chapter 8. Configure your Asset Repository 235 The remaining chapters of Part 2 will detail the asset management life cycle tasks and roles that are needed to produce, consume, and manage assets using the Rational Asset Manager configuration that we have just created and defined for ZYX Electronics. Part 3, “Service Assets in an SOA” on page 333 of the book will extend the configuration defined in this chapter to include new metadata that is needed to manage services following an SOA approach. Part 4, “Patterns” on page 455 of the book will extend the configuration defined in this chapter to include new metadata needed to manage patterns that are developed using Rational Software Architect. 236 Strategic Reuse with Asset-Based Development 9 Chapter 9. Produce reusable assets In this chapter, we look at how we must go about producing reusable assets. We include a further discussion of best practices in producing reusable assets and how ZYX Electronics produced reusable assets and leveraged Rational Asset Manager in order to produce reusable assets. 9.1 Introduction In this chapter, we look at the asset manufacturing life cycle, that is, the production of assets. As shown in Figure 9-1, it is important to remember that this is a cycle. We are not looking at a large waterfall type process with long lags between deliverables and infrequent opportunities to adjust course. Figure 9-1 Manufacturing cycle © Copyright IBM Corp. 2008. All rights reserved. 237 Also, we need to remember that there is a connection between the manufacturing cycle and the usage cycle. This interaction is a key aspect of the success of any asset reuse program. The assets that are produced must find an audience, be usable by that audience, and address issues that are important to that audience. The Asset Producers need to communicate with the consumers listening to the needs of this community, as well as accept the feedback that is provided on assets that have already been built as shown in Figure 9-2. Figure 9-2 Integration between usage and manufacturing cycles The remaining portion of this chapter is comprised of two major sections: A detailed discussion of the process to produce assets Coverage of how ZYX Electronics was able to leverage this guidance in producing their assets 9.2 Asset manufacturing As described in Chapter 5, “Asset-Based Development and Asset Governance Rational Method Composer plug-ins” on page 61, the Asset-Based Development plug-in provides the asset manufacturing process as a capability pattern. Tip: You might encounter this capability pattern referred to as either Producing Reusable Assets or Asset Manufacturing. The terms are meant to be interchangeable; and therefore, you will see references to both terms in this book. Figure 9-3 on page 239 shows the workflow and tasks that compose this capability pattern. 238 Strategic Reuse with Asset-Based Development Figure 9-3 Workflow of manufacturing process 9.2.1 Asset manufacturing roles This chapter describes the tasks involved in asset manufacturing mainly from the views of the following three roles: Asset Owner: The Asset Owner role is a person or an organization that defines and submits the asset version, as well as updates or removes the asset version. The Asset Owner is the original creator of the asset version. This role mainly performs the Create Asset task. Asset Producer: The Asset Producer updates an asset version by developing artifacts and harvesting artifacts, as well as making changes to the metadata. If the updates require the creation of a new asset version, the Asset Producer becomes the Asset Owner in the Repository. This role mainly performs the following tasks: – – – – Conduct Recurring Problem Analysis Develop Asset Specification Create Asset Update Asset Asset Manufacturing Team: This team creates and uses Asset Specifications to create and maintain assets. The intended scope of the team must be defined. Will the team be responsible for creating assets for the declared reuse scope at the enterprise level or the divisional level? Will the team create the assets, or is the purpose of the team to clean up assets and prepare them for reuse? Directly associated with the scope of the Asset Manufacturing Team is the manufacturing process. There are several models to consider. These models use the basic producer and Chapter 9. Produce reusable assets 239 consumer model for assets. The premise is that an organization is focused on the creation of assets and another organization is focused on the usage of assets. In more mature organizations, the assets having a wider scope and impact are developed by special teams as part of an Asset Manufacturing Center or Excellence Center. This role captures the responsibilities and the tasks performed by these development groups with regard to the asset production. This role mainly performs the following tasks: – Create Asset – Update Asset 9.2.2 Conduct recurring problem analysis Figure 9-4 shows the position of this task in the workflow of the Asset-Based Development plug-in. The purpose and expected inputs and outputs defined for this task are: Purpose: To protect the organization’s investments in Reusable Assets and to ensure that the proper assets are developed. Inputs: None. Outputs: Asset Specification. Figure 9-4 Conduct recurring problem analysis In this task, the Asset Producer analyzes recurring problems, or problems that are expected to be recurring, and evaluates whether it makes sense to build a reusable asset to address the problem. As part of the analysis, the Asset Producer needs to determine the cost to build the asset, as well as the benefits derived from using the asset. We encourage you to leverage the material from Chapter 6, “Value, impact, and return on investment” on page 103 to help you to perform these calculations. A good starting point is to leverage the relative cost factors proposed by 240 Strategic Reuse with Asset-Based Development Jeffrey Poulin, in Measuring Software Reuse. He proposes that the Relative Cost of Writing for Reuse is 1.5, which means that there is an additional 50% cost when building reusable software. He also proposes that the Relative Cost of Reuse is 0.2, which means that the relative cost to use the asset is 20% of the cost to rebuild the solution1. Recommendations: Leverage the tooling and automation that support reuse. As discussed in “Value, impact, and return on investment” on page 103, place value on those tools that help you to build and consume assets. Consumability is a key aspect of reuse; the harder it is to build and use an asset, the more likely it is that your reuse program will fail. Pragmatism is a valuable trait. Take a common sense approach, ask many questions, and avoid over-engineering. For example, ask these questions: – Why are we building this asset? – What is the value of building the asset? – What is the cost of not building the asset? – Does this solution really represent a best practice? – Is there an incremental approach to building the asset, where we can achieve results more quickly? Unfortunately, it is not unusual to come across situations where the time pressure for a project leads the team to decide that reuse introduces risk into a project. From the outside, this looks to be a strange decision, because reuse and assets are meant to address time-to-market issues and reduce project risk. However, human nature is often at odds with accepting change and views change as introducing risk. We have actually come across a number of projects where this decision has been made, and it is only later in the project’s time line, when it is clear that deadlines will not be met that reuse is reconsidered and then adopted. Tips to consider if you find yourself in this type of situation: A strategic reuse program adopted throughout the organization leads to a culture that views reuse as “the way that we do business” and looks to leverage reuse as a risk and time line reducer. Again, tooling and automation need to be in place for building the assets. Iterative and incremental asset delivery need to be considered. The quicker that you can show that there is a payoff for the reuse investment, the better. Assets that take a team three years to build before allowing for reuse are not likely to help the situation. This task includes the following three steps: 1. Identify recurring problem: To understand the problem, the Asset Producer needs to understand the impact of the problem on the users. When defining the problem, define the context within which the problem exists. Explain the context in business terms and in technical terms. Also, verify that the problem and its context exist in multiple places and determine if this is an issue that occurs in other teams, projects, or organizations. When the scope of the issue has been determined, ensure that communication occurs with those individuals within the scope. 2. Identify common solution to recurring problem: The temptation is to focus on describing the solution before having a solid definition of the problem. Fight this tendency and do not spend significant time on this step until step 1 is completed. The proposed solution must be relevant to the problem’s context and assumptions. 3. Verify the existence of the problem: A general rule from the patterns community is that the problem and solution combination must be verifiable in three places in order for it to be 1 Measuring Software Reuse. Jeffrey Poulin, pages 25-29. Chapter 9. Produce reusable assets 241 a candidate for a pattern. While this rule is not strictly prescribed here, it is a reasonable guideline to follow. It is critical to evaluate the combination of the problem and the solution. In certain contexts, the solution to the same problem can vary slightly. It is possible to have multiple implementations, or solutions, to the same problem. The variance is caused by changing contexts, target Asset Consumers, and delivery channels for the assets. Also, ensure that over-engineering does not occur. We need to be aware of variations of the problem, but it is likely that if we address several of the variants initially and prove the asset and results, we can return to the asset later and generalize it further. 9.2.3 Develop asset specification Figure 9-5 shows the position of this task in the workflow of the Asset-Based Development plug-in. The purpose and expected inputs and outputs defined for this task are: Purpose: Provide clarity and design for a proposed asset. Inputs: (Optional) Asset Specification. Outputs: Asset Specification. Figure 9-5 Develop asset specification A major goal of this task is to properly describe the problems, their context, and the solution. This task can be described as “asset proposal and adoption”, because specification can be used as a key input into the decision regarding whether to build the asset. After an asset is published, it is natural that the asset can be used by the people who do not know its background or context. That is, the problem, their context, and the solution of the asset must be specified precisely enough for the consumer to evaluate the fit of the asset for their problem. 242 Strategic Reuse with Asset-Based Development Ideally, the asset will be able to be used in slightly different contexts from the original source of the asset. The asset will need to provide future Asset Consumers with ways to adjust the asset to meet the needs of their situations. Therefore, a key aspect of the specification is that it accurately captures the points of variability that will be provided by the asset. To reduce reuse failure costs, the specification must provide the information needed by Asset Consumers as they determine whether to use the asset in their project. This task includes the following steps: 1. Analyze asset requirements: Understand the problem that you want to solve, its scope, and specific context. In cases where an asset is created for unspecified consumers, the requirement of the asset tends to be based on the experience and decisions of the Asset Producer. Define asset requirements while considering these points: – Conducting recurring problem analysis in advance helps to find the true requirements. – Collect requirements from many candidate consumers, if possible, to raise the precision of the requirements. – It is often a good idea to build an architectural prototype or an archetype of the asset, as a means of mitigating risks and getting early feedback, even when the asset is not executable software. 2. Describe the asset: Leverage the Five “Ws” and One “H” (Who, What, Why, Where, When, and How) to help write the specification in a manner that will answer Asset Consumers’ questions. For example: – “Who do I ask for help?” – “What points of variability are available for this asset?” – “Why must I use this asset?” – “Where must this asset be used?” – “When must this asset be used?” – “How can I use this asset?” The asset’s specification must include the following information: – Asset name and version – The problem that the asset is expected to solve – Description of the solution – Expected contexts: • Development context • Testing context • Runtime context • Business domain context – Expected artifacts in the asset – Asset relationships and dependencies – Possible categorization and classification: • Business • Technical • Organizational – Expected Asset Consumer skills Chapter 9. Produce reusable assets 243 – How the expected Asset Consumer will use the asset – Asset Owner and maintainer – Sponsor and funding – Estimated asset development effort – Estimated Asset Consumer benefits Reusable Asset Specification (RAS) Reusable Asset Specification (RAS) is an Object Management Group (OMG) standard that was jointly produced by a number of member companies, including IBM. RAS describes the structure of information about an asset and is generally captured in XML Metadata Interchange (XMI)/Extensible Markup Language (XML). There are many kinds of software development artifacts in many forms, and from many authors with varying styles. This variety increases the costs of discovering, comprehending, and reusing other authors’ artifacts. Providing consistent artifact organization, structure, description, and packaging mitigates part of these costs through consistency and predictability. RAS describes an extensible way to organize software artifacts into assets for future reuse. As described in Figure 9-6, having a standard mechanism for packaging and documenting an asset makes it easier for an Asset Consumer to understand: The solution represented by the asset The requirements associated with the asset How to consume the asset (a) Without RAS (b) With RAS Requirement Requirement Solution Produce create Solution Consumer Produce create consume Consumer Figure 9-6 Difference between without RAS and with RAS RAS is generally realized in an .xml file and describes the specification of artifacts, such as classification, solution, usage, and related assets. Also, it indicates the locations of its artifacts in the solution section. All artifacts, including RAS, can be packaged as a single zip file with the extension name, “ras”. In general, the structure of RAS is extremely simple; however, a .ras file can become large and complicated. Regardless of the size and complexity, using tools, such as RAM, shields us from having to know the structures and specification in detail. The important point is that RAS provides a standard for packaging assets so that they can be supported in production, consumption, and management by a variety of tools. 244 Strategic Reuse with Asset-Based Development 9.2.4 Create asset Figure 9-7 shows the position of this task in the workflow of the Asset-Based Development plug-in. The purpose and expected inputs and outputs defined for this task are: Purpose: Populate Repository with the right assets, providing solutions to problems in the enterprise Inputs: Asset Specification Outputs: Asset Artifact and Reusable Asset Figure 9-7 Create asset In this task, the asset artifacts are created and harvested. The asset is created according to the Asset Specification. Packaging the asset includes preparing documentation and supporting material to provide easy comprehension of the asset. The asset’s metadata, such as name, description, and anticipated context, is prepared. Finally, the asset is submitted to the Repository. In asset creation, variability analysis weighs more heavily than in comparison to building a traditional software artifact. Rather than building a solution to be used in just a specific instance, you look at how you can leverage the solution in multiple situations. Part of the analysis looks at: What must be common to the solution and asset across all uses of the asset? What aspects of its use are unique to certain situations? What assumptions can be made within the asset? What information must be provided by the user of the asset? Is there a subset of this information that can be calculated based on a combination of other values in the set of assumptions? Chapter 9. Produce reusable assets 245 Even in the case of an asset that is meant for reuse in a White box manner, it is worthwhile to spend time thinking of how and where the asset can or must be adjustable. Preferably, we want to limit the points of variability and provide the Asset Consumer with a manageable set of points of variability. If we allow the set of points of variability to be unconstrained, we make it much more difficult for the user of the asset to succeed. Also, initial versions of the asset are unlikely to have a perfect set of points of variability defined. In the first iteration or two, focus on building the asset and a best effort approach on the points of variability. In later iterations, you can increase your focus in this area and incorporate feedback from Asset Consumers as you harden the asset for wider reuse. This task includes the following five steps: 1. Understand the considerations in creating assets: Several of the main considerations are described in the description for this task that is provided earlier in this section. Understanding the answers to these considerations is critical to building the proper asset. Again, the goal is to not over-populate the Repository with assets just because we can. The goal is to populate the Repository with the right set of assets that provide a solution to a problem that the organization faces and that are easy for Asset Consumers to use. Remember, reuse failure has a cost as well. 2. Create or harvest artifacts: An asset can have many artifacts. Certain artifacts are created for the asset, whereas other artifacts can be harvested. In either case, the artifacts must be prepared to the accepted level of context and dependencies. In many cases, dependencies need to be removed or modified in the artifacts to meet the expected context Asset Consumers will have. The artifacts are prepared in the Asset Owner’s or Asset Producer’s workspace. The artifacts must be checked in to a software configuration management system before associating the artifacts with the asset in the Repository. A project that produces a reusable asset needs to address many of the same concerns addressed by Software Architecture, even for assets that are not executable software. Therefore, architectural concerns for an asset can include: – The logical structure of components that make up the asset and the relationships to other assets (for software, this is covered by the Design Model) – The physical files that make up the asset, and how will they be packaged (for software, this is the Implementation Model). The nature of the target user experience, as well as the target audience, might require that the asset is reorganized. This reorganization can involve adjusting the way that the artifacts contained in the asset are organized or can involve splitting the original asset into several assets. – The major technical decisions driving development of this asset At a high level, the architecture of a reusable asset must include a description of its parts (the asset artifacts), how those parts fit together, and how those parts can be customized or tailored to fit into a specific context. For the reusable asset as a whole, you must describe: – Within what environment or context you intend to apply the asset. This environment includes the development context, deployment context, business domain context, and so forth. – How the Asset Consumer must use the asset or an initial usage model for the asset (view this as the use case view of the asset) – What asset artifacts make up the asset, what their inter-dependencies and the relationships among these artifacts are, and what is the overall organization of these artifacts (think of this as the logical view of the asset) 246 Strategic Reuse with Asset-Based Development – How are the physical files that make up the asset organized (think of this as the implementation view of the asset) – Any mechanisms for customization of the asset (for example, variability points, framework parameters, and so forth). What can be customized and what are the guidelines for customizing? – Any relationships to other reusable assets – Any constraints or limitations – The relative priority of the asset “use cases” (to assist in iteration planning) – What, if any, standard representation format is being used to represent the asset For each asset artifact, you must describe: – The type of the artifact, for example, document, model, script, template, plan, and so forth – What part of the overall solution does the artifact provide – What customization options must exist for the artifact (the initial definition of the variability points of the asset) – Whether the artifact already exists or if it needs to be developed – What relationships and dependencies the artifact has with other artifacts – What physical files contain the artifact Tip: The degrees to which the Asset Consumer can access the artifacts of the asset can also affect packaging. For example, a “White box” asset can require more packaging and documentation than a “Black box” asset because of the increased visibility of the asset’s internal information. 3. Package asset: Addressing documentation quality and ease of asset comprehension are the purpose of the packaging assets. The extra investment for packaging assets is justified if the effort in this area reduces the costs of reuse. The type of documentation that is developed for an asset, and its level of detail, depends on the target audience and the target user experience. There are two categories of documentation when documenting an asset: – External asset documentation: The documentation available to Asset Consumers when browsing an asset Repository or catalog where the asset is published. This documentation can be considered marketing material. – Internal asset documentation: The documentation that an Asset Consumer uses to install and use the asset. This documentation can be considered the asset’s user’s guide. The external documentation can be created by abstracting from the detailed internal asset documentation. People might question the value in taking the time to develop distinct, more abstract external documentation that is separate from the internal asset documentation. However, providing a less detailed description of the asset allows Asset Consumers to get a feel for the purpose and intent of the asset without having to wade through all of the details. 4. Categorize asset: There are several terms describing this step, such as classifying the asset or using taxonomies. The goal here is to assign values to the asset metadata that benefit the discovery of the asset. More formal structures, such as category schemas or taxonomies, are typically used. However, other techniques, such as tagging assets with terms that are meaningful Chapter 9. Produce reusable assets 247 to the Asset Consumer, are less structured techniques but are often more useful means of searching and finding assets. Assets must be categorized as they are created and submitted, but they certainly must be permitted to be categorized at other points in the lifetime of the asset. 5. Submit asset: Submitting the asset to the Repository, the Asset Owner/Producer typically fills in the asset metadata, associates the selected artifacts, and categorizes the asset using category schemas and taxonomies in the Repository. For certain repositories, the asset version is declared by the person submitting the asset. When selecting the artifacts to be in the asset, typically the Asset Producer/Owner will select the root directory where the artifacts live. Certain repositories will permit only one root directory in the asset, other repositories can permit multiple root directories. When selecting the artifacts for the asset, the Asset Owner/Producer will often need to identify a label or other identifiable tag that is stored in the asset metadata and SCM to ensure the proper retrieval of the asset artifacts for the Asset Consumer. In a governed Repository, the asset must be submitted to review and approval processes. Governing the asset submission, review, and approval processes adds to the quality and usability of the assets in the Repository. 9.2.5 Review and test asset Figure 9-8 on page 249 shows the position of this task in the workflow of the Asset-Based Development plug-in. In this task, the Asset Reviewer reviews and tests the asset. The details regarding this task are explained in 11.2.3, “Review and test asset” on page 307 as the Administrator’s task. From the Asset Owner perspective, the key thing to remember is that the asset has been: 1. 2. 3. 4. 248 Tested Documented Packaged Submitted to the Repository Strategic Reuse with Asset-Based Development Figure 9-8 Review and test asset 9.2.6 Update asset Important: As discussed earlier, an issue with the default review process was that the “Risk, Security, Audit, and Compliance” Department was not involved. In Chapter 15, “Managing service assets” on page 425, you will see how ZYX Electronics customized this default review process with Rational ClearQuest to create a special review process to manage license issues and applied it only to Framework asset types with Framework Type value equal to Open source. In addition, we describe the submission of a second open source asset and show how it works its way through the updated process. Figure 9-9 on page 250 shows the position of this task in the workflow of the Asset-Based Development plug-in. The purpose and expected inputs and outputs defined for this task are: Purpose: To improve and refine the asset Inputs: Reusable Asset. (Optional) Asset Artifact, Asset Review, and Asset Feedback Outputs: Reusable Asset Chapter 9. Produce reusable assets 249 Figure 9-9 Update asset An asset is described with metadata and has artifacts, each of which can be modified. The nature of the modification, or update, dictates if a new asset version is required. It is up to the organization to establish the asset versioning policies, such as when a new asset version is required. For example, certain people might think that modifying a grammar issue in the metadata does not require a new asset version. Whereas if the grammar issue is in one of the artifacts, people might state that a new asset version is required. A general guideline to follow is to categorize asset modifications as structural and non-structural. Structural changes include modifying the following items: Metadata: – Asset version – Asset relationship – Artifact reference Artifact File name, path, or content In general, these kinds of changes require that a new asset version is created. Non-structural changes are modifications to asset metadata other than those described and do not require a new asset version. This task includes the following four steps: 1. Identify or discover a problem with an asset: The organization needs to determine the tolerance level for changes before requiring a new asset version. When the new version is created, then the asset review and approval activities take place. 250 Strategic Reuse with Asset-Based Development Asset problems can be submitted as part of a change management system. Alternatively, requirements can be posted in a requirements management system, or the Asset Owner can be notified via instant messaging of a defect. Regardless of the source of the notification, the Asset Owner or Producer must be notified of the problem and needs to prepare a plan to address this issue. 2. Search for the asset: The asset with the reported issue must be located in the Repository. 3. Plan asset update activity: The correction or adjustment to the asset must be planned. The necessary resources to modify the asset must be estimated and secured. The expected timing of making the changes must be understood. An impact analysis must be conducted where current Asset Consumers are evaluated and the impact to their efforts is understood. This can require communication and planning with Asset Consumers. The impact analysis must also address asset relationships, including the related assets’ Asset Owners or Producers, as well as other technical dependencies. The Asset Owners or Producers of related assets might need to participate in the planning, depending on the nature of the problem and the nature of the asset relationship. The review process for the asset might need to be revised to include other reviewers and subject matter experts. 4. Update the asset: To update the asset, a developer will follow steps similar to these steps: a. Search for the asset in the Repository. b. Retrieve the asset. Identify the SCM location from which to check out the asset artifacts. c. Modify the asset artifacts and metadata. The Asset Owner/Producer might need to conduct merges from previous changes to the artifacts made by other people but which have not yet been incorporated into the published asset in the Repository. d. Submit the modified asset. Make changes to metadata, supporting documents, and identify the SCM label or tag that must be applied to this asset version. The asset must now be ready for the review and test process. 9.2.7 Publish or deploy asset Figure 9-10 on page 252 shows the position of this task in the workflow of the Asset-Based Development plug-in. In this task, the Administrator of the Repository publishes the asset or deploys the asset in case the asset is deployable. The concept of this task is explained in 11.2.4, “Publish or deploy asset” on page 309 as the Administrator’s task. Chapter 9. Produce reusable assets 251 Figure 9-10 Publish or deploy asset 9.3 ZYX Electronics: Produce reusable assets This section describes how ZYX Electronics implements producing reusable artifacts using Rational Asset Manager. To simplify this section, although ZYX Electronics will produce different asset types (look at Table 8-3 on page 219 to know all asset types that will be stored in the Rational Asset Manager Repository), we focus only on how ZYX Electronics produces asset types related with open source frameworks and how these asset types relate with other asset types. We will describe how ZYX Electronics: 1. Conducts a recurring problem analysis to justify the costs and benefits of developing reusable assets for the open source frameworks already used in different projects. 2. Develops an asset specification to describe the content and metadata of one of the open source frameworks that will be created and submitted to the Repository and validates this asset specification against the initial configuration created in Chapter 8, “Configure your Asset Repository” on page 195 for the Rational Asset Manager Repository. 3. Uses Rational Asset Manager to create a new open source framework asset according to its asset specification and to submit it to the Repository. 4. Uses Rational Asset Manager to create a new version of the existing asset according to the asset versioning policies document created by ZYX Electronics to know when a new asset version is required. 5. Implements and uses a review process to manage the approval of these open source frameworks. 252 Strategic Reuse with Asset-Based Development Note: Because the sample asset to produce in this section is not a service and it cannot be published to a service registry, such as WebSphere Service Registry and Repository, we will not cover the “Publish or Deploy Asset” task in this chapter for the ZYX Electronics case study. It will be covered in Part 3, “Service Assets in an SOA” on page 333 of this book when we talk about producing services. 9.3.1 Recurring problem analysis Following the criteria and steps detailed in Chapter 8, “Configure your Asset Repository” on page 195, ZYX Electronics’ Repository and Community Administrators (Deon Adminio and Duncan Munchkin) defined and implemented an initial configuration for the Rational Asset Manager Repository. They have created the initial environment that is needed to start to implement and use an Asset-Based Development approach. Therefore, at this point, ZYX Electronics has an available ready environment to support the reuse initiative. In this chapter, we will follow the ZYX story and look at how they started to work with the Asset Manager Repository. The first task that Duncan Munchkin wanted to perform was to analyze and understand the recurring problems that ZYX Electronics was facing to identify the first assets to load into the Rational Asset Manager Repository and to justify its development and long-term maintenance. ZYX Electronics’ initial reuse assessment determined that they were at Level 1- Initial/Chaotic of the Reuse Maturity Framework (look at Chapter 7, “Adopting Asset-Based Development” on page 125 for more information about this framework). It was clear that reuse was not being supported and that any reuse was happening on an ad hoc and individual basis. Duncan knew that at least in certain Java projects the developers were using the same development environment (Eclipse). The use of open source frameworks had become popular at ZYX Electronics when more and more pieces of code, subsystems, and systems were available through the Internet. Duncan also knew than when software developers were moved from one project to another project, they reused part of the components built (doing a local copy) as the basis for the new components. So, Duncan decided to organize a meeting with these teams to determine how much reuse was occurring and to discover what assets can be created and placed into the Rational Asset Manager Repository. During the meeting, Duncan Munchkin discovered that most of the Java projects were using the same open source Java components, but nobody in the organization was aware of this situation. These Java components provided frameworks and tools focused on the development of Java 2 Platform, Enterprise Edition (J2EE) applications. There were also common open source frameworks used for C++ and COBOL development. This is a list of the open source frameworks that were used by ZYX Electronics projects. Open source Java components: Open source Ajax frameworks: – DWR: DWR2 is a Java open source library, which allows you to write Ajax Web sites. It allows code in a browser to use Java functions running on a Web server just as though it was in the browser. DWR works by dynamically generating Javascript based on Java classes. The code does Ajax magic to make it feel as though the execution is 2 Adapted from http://getahead.org/dwr Chapter 9. Produce reusable assets 253 happening on the browser, but in reality, the server is executing the code and DWR is moving the data backwards and forwards. Open source build systems in Java: – Maven: Maven3 is a Java project management and project comprehension tool. Maven is based on the concept of a project object model (POM) in that all of the artifacts produced by Maven are a result of consulting a well defined model for your project. Builds, documentation, source metrics, and source cross-references are all controlled by your POM. To see the full list of Maven’s features, go to: http://maven.apache.org – Ant4: Ant is a Java-based build tool. Open source caching solutions in Java: – OSCache: OSCache5 is a widely used, high performance J2EE caching framework. In addition to its servlet-specific features, OSCache can be used as a generic caching solution for any Java application. Open source charting and reporting tools in Java: – JFreeChart: JFreeChart6 is a free Java class library for generating charts. Open source integrated development environments (IDEs) in Java: – Eclipse: Eclipse7 is a type of universal tool platform. Eclipse is an open extensible IDE for anything and nothing in particular. – NetBeans8: NetBeans is a full-featured integrated environment for Java developers. – JEdit: JEdit9 is a mature and well designed programmer’s text editor that has been in development for over five years. Open source persistent frameworks in Java: – Hibernate: Hibernate10 is a powerful, ultra-high performance object/relational persistence and query service for Java. Hibernate lets you develop persistent objects following common Java idioms, including association, inheritance, polymorphism, composition, and the Java collections framework. Extremely fine-grained, richly typed object models are possible. The Hibernate Query Language, designed as a “minimal” object-oriented extension to SQL, provides an elegant bridge between the object and relational worlds. Hibernate is now the most popular Object Relational Mapping (ORM) solution for Java. Open source testing tools in Java: – JUnit: JUnit11 is a regression testing framework written by Erich Gamma and Kent Beck. It is used by the developer who implements unit tests in Java. Open source J2EE/Web frameworks in Java: – Struts: The core of the Struts12 framework is a flexible control layer based on standard technologies, such as Java Servlets, JavaBeans™, ResourceBundles, and XML, as well as various Jakarta Commons packages. Struts encourages application 3 Adapted from http://maven.apache.org Adapted from http://ant.apache.org 5 Adapted from http://www.opensymphony.com/oscache 6 Adapted from http://www.jfree.org/freechart 7 Adapted from http://www.eclipse.org 8 Adapted from http://www.netbeans.org 9 Adapted from http://www.jedit.org 10 Adapted from http://www.hibernate.org 11 Adapted from http://www.junit.org 12 Adapted from http://struts.apache.org 4 254 Strategic Reuse with Asset-Based Development architectures based on the Model 2 approach, a variation of the classic Model-View-Controller (MVC) design paradigm. – Spring: The Spring Framework13 provides solutions to many technical challenges faced by Java developers and organizations wanting to create applications based on the Java platform. Because of the sheer vastness of the functionality that is offered, it can be hard to distinguish the major building blocks of which the framework is composed. The Spring Framework is not exclusively linked to the Java Enterprise platform, although its far-reaching integration in this area is an important reason for its popularity. – MyFaces: MyFaces14 is an implementation of JavaServer Faces (JSR 127), a new and upcoming Web application framework that accomplishes the MVC paradigm. It is comparable to the well-known Struts Framework but has features and concepts that are beyond those of Struts. – Aurora: Aurora15 is an open source MVC framework that is aimed at writing configurable, fully object-oriented form controllers using the Spring Framework. The code base grew out of experience using Spring’s MVC module and slowly developed over several versions into a full-fledged framework that attempts to address the most common problems when using Spring MVC and other J2EE Web-related issues in general. Open source COBOL components: Open source COBOL compilers: – OpenCOBOL: OpenCOBOL16 is an open source COBOL compiler. OpenCOBOL implements a substantial part of the COBOL 85 and COBOL 2002 standards, as well as many extensions of the existent COBOL compilers. Open source C++ components: C++ GUI libraries: – MGui: MGui17 is a cross-platform GUI written in ANSI C. It has the usual widgets, such as menus, push buttons, editable fields, and lists. It comes with a code generation tool to design and maintain the graphical interface visually. – SmartWin++: SmartWin++18 is a C++ abstraction of the Windows API. It is designed to be type safe and be as thin a layer over the Windows API as possible. C++ graphic libraries: – Open Scene Graph: Open Scene Graph19 is a high-level 3-D graphics toolkit used in the development of games, visual simulation, virtual reality, scientific visualizations, and modeling. All of the Java developers who attended the meeting were using Eclipse as their integrated development environment, modules of the Java Spring Framework, and Ant to build Java applications. But there was not any standardization in the use of these frameworks and which versions to use. Each project had its own policies, and developers got their copies by going to the external Web site and downloading a local copy on their workstations for their own use. 13 14 15 16 17 18 19 Adapted from http://www.springframework.org Adapted from http://myfaces.apache.org Adapted from http://auroa.ryotic.de/docs/introduction Adapted from http://www.opencobol.org Adapted from http://web.tiscali.it/morello/MGui Adapted from http://smartwin.sourceforge.net Adapted from http://www.openscenegraph.org/projects/osg Chapter 9. Produce reusable assets 255 In fact, during the meeting, there were several discussions between Java developers from different projects talking about incompatibilities between framework versions. Due to the framework incompatibility, the developers were uncertain whether the resulting applications will be compatible. The COBOL and C++ frameworks were only used by a few teams and all team members were using the same versions. But the meeting helped Duncan to discover that these teams were using a common directory in one of the ZYX Electronics’ servers to share these frameworks. However, no policy was defined for reusing them, and they were not using any Software Configuration Management System to manage different versions of the frameworks. In addition, Chris E. Oshman, the Chief Executive Officer at ZYX Electronics, had recently read an article published in the press about legal issues of using open source and he wanted to know how this was managed in his company. Refer to “Open Source, Open Legal Issues” from New York Law Journal, January 2007, at: http://www.dlapiper.com/files/Publication/97b92444-d924-4820-a3c0-66f0073ffc21/Pre sentation/PublicationAttachment/220248cd-da82-4c8b-89d2-6cf0783c8396/NYLJ_Radcliff e_Nelson_Article_Jan07.pdf Chris was very worried after discovering that there was not a policy in place to manage the licensing terms of these open source frameworks. Moving forward, Duncan met with the “Risk, Security, Audit, and Compliance” Department to implement a mechanism to manage the use and restrictions of open source frameworks within ZYX Electronics. Duncan analyzed the list of frameworks already used and thought that it might be a good idea to start uploading these open source frameworks into the Rational Asset Manager Repository. Publishing these frameworks as assets into Asset Manager provided a number of benefits, including: Developers had a central place to look for all open source assets that were allowed to be used within their organization. Versioning of frameworks was managed and versioning lowered the incompatibility risk. Duncan was now able to track which teams were using which assets. Support for the definition and implementation of an approval process for all of the open source assets used within the ZYX Electronics organization (including the “Risk, Security, Audit, and Compliance” Department in this review process). Figure 9-11 on page 257 shows all roles that benefit from reusing open source frameworks and the relationships to open source frameworks. 256 Strategic Reuse with Asset-Based Development Figure 9-11 Roles that will use open source framework assets in ZYX Electronics The next step for Duncan was to develop the asset specification for this asset type, which we will see in the next section. 9.3.2 Develop asset specification The asset specification of the open source framework must provide the business and technical justification for the asset and must be used by the support teams to understand the asset. In 8.2, “Repository configuration for ZYX Electronics” on page 214 (see Table 8-3 on page 219), ZYX Electronics defined an initial configuration for the Rational Asset Manager Repository describing the asset types and restrictions that the Repository must be able to manage. However, after the meetings with developers and then with the “Risk, Security, Audit, and Compliance” Department, Duncan and Deon had to review this initial structure. In particular, they needed to determine if the structure was still valid to manage open source frameworks. Tip: As discussed earlier, the Repository configuration will need to be revisited periodically to ensure that it accurately reflects the organization, asset types, and workflow needed by the organization. The first step in the review was to confirm that the Asset Manager configuration already had an asset type defined to manage open source frameworks. They checked that the structure created in Rational Asset Manager had an asset type called Framework and that there was a category constraint for this asset type called Framework type with values (Open source, Commercial UI components, SQL Scripts, and Batch scripts). Therefore, the configuration was able to manage open source assets by specifying the assets as type Framework and setting Framework type equal to Open Source. To be able to manage license issues, the asset must also include information about the license terms and conditions to use it. An open source license is a copyright license for software that makes the source code available under terms that allow for modification and Chapter 9. Produce reusable assets 257 redistribution without having to pay the original author20. These licenses can have additional restrictions, such as a requirement to preserve the name of the authors and the copyright statement within the code. Note: The Open Source Initiative (OSI) is a non-profit corporation formed to educate individuals about and advocate for the benefits of open source and to build bridges among various constituencies in the open source community. This corporation has approved a set of open source licenses that comply with the Open Source Definition (see http://www.opensource.org/licenses/alphabetical for a complete list of open source licenses approved by the Open Source Initiative). So although the initial configuration allowed ZYX Electronics to manage open source frameworks, the Framework asset type did not include any information about the license terms and conditions needed to use the asset. As a result, Deon and Duncan had to modify the initial Framework asset type definition to: Include additional constraints to verify automatically the content of the asset. Create a specific asset review process to include the “Risk, Security, Audit, and Compliance” Department in the review and approval process of open source frameworks. They also included the following additional metadata information in the Framework asset type: New artifact constraint to include a LEGAL TERMS&CONDITIONS label to describe the specific terms and conditions to use the open source framework. Because the Framework asset type was also used to manage other frameworks that are not open source, this constraint is optional. New category constraint called “Open source license name” specific to this asset type to classify the open source framework. This category must include the list of open source licenses approved by the Open Source Initiative (OSI) that are listed at this Web site: http://www.opensource.org/licenses/alphabetical Because the Framework asset type was also used to manage other frameworks that are not open source, this constraint is also optional. A new category constraint called Technology_Software specific to this asset type and to the Component asset type to define the technology where this framework must be used. This category can have following values: J2EE, COBOL, C++, and Others. A new attribute called “License Expiration Date” to define the expiration date, if it exists, of the open source framework licenses. This attribute is optional. A new attribute called “Specific Restrictions” to capture additional information about restrictions that can apply to use the asset. This attribute is optional. All component asset types that were using an open source component must include a relationship named “Uses open source framework” with the Framework asset type that represents the open source framework. All open source framework assets were planned for Black box reuse: although the source code is available, the assets are delivered and used as binaries (libraries and executables). To include this additional metadata to the Framework asset type, Deon logged in as the Repository Administrator and used the Administration tab to go to the asset type definition. When in the Administration section, he modified the asset type definition to include these 20 258 Open Source Initiative at http://www.opensource.org Strategic Reuse with Asset-Based Development updates. For detailed information about how to modify an asset type configuration, go to 8.2, “Repository configuration for ZYX Electronics” on page 214. To implement the review process for the open source frameworks, Deon and Duncan had to create a new review process to include the “Risk, Security, Audit, and Compliance” Department. This review process must only be applied to Framework asset types with Framework Type equal to “Open source”. Chapter 11, “Manage reusable assets” on page 303 describes how ZYX Electronics created this special review process and assigned it only to open source frameworks (not to other types of frameworks). According to the information gathered from developers, one of the assets most often used by ZYX Electronics’ projects was the Spring J2EE framework. Based on this fact, Deon decided to develop the Asset Specification for the Spring open source framework as an example to offer to users. Table 9-1describes the ZYX Electronics’ asset specification content for the Spring J2EE open source framework. Table 9-1 Asset Specification for Spring open source framework Asset Specification Value Name Spring Framework Version Current Version is 2.0.6 Description of problem A need to increase development productivity and reduce complexity when building J2EE applications. In addition, there is a need to improve test coverage and application quality. Description of solution The Spring open source framework provides a set of solutions to many technical challenges faced by Java developers and organizations wanting to create applications based on the Java platform. At a high level, this framework: Promotes writing code to interfaces Provides a consistent approach to managing business objects Provides data access abstraction Provides a transaction management abstraction Provides an Aspect-Oriented Programming (AOP) framework Provides an MVC-based Web framework The framework provides strong support for modularity, which means that you can choose specific aspects from the framework as desired. In addition, the solutions within the framework support work across all architectural layers in a J2EE solution. Chapter 9. Produce reusable assets 259 Asset Specification Value Expected contexts: Development context Rational Application Developer Testing context N/A Runtime context WebSphere Application Server 6.1 Technical domain context Development of Java and J2EE applications Expected artifacts in the asset At least one .doc file to know how to use the asset A LEGAL TERMS&CONDITIONS label to describe the specific terms and conditions to use the open source framework A .zip file containing the framework content Asset relationships and dependencies All component asset types that use the Spring open source component must include a relationship named “Uses open source framework” with it. Category schemas Framework Type → Open source Technology Hardware → Windows Technology Hardware → Linux Technology Hardware → UNIX Open Source License Name → Apache License, 2.0 Technology_Software → J2EE Custom attributes License Expiration Date → N/A Specific Restrictions → The Spring Framework 2.0 requires J2SE™ 1.3 and J2EE 1.3 (Servlet 2.3, JSP™ 1.2, JTA 1.0, EJB™ 2.0) 260 Expected Asset Consumer skills Developers writing J2SE and J2EE solutions How the expected consumer will use the asset Download the zip file containing the Spring framework. The “dist” directory contains the following distinct jar files for developing Java applications. Asset Owner and maintainer Java Developer expert in J2EE development Sponsor and funding No funding needed, because it is an open source framework Estimated asset development effort Not applicable, because it is an open source framework Estimated Asset Consumer benefits 10% of time consumed by a Java developer writing Java code Strategic Reuse with Asset-Based Development This Asset Specification was used as an input for the asset creation phase as we will see in next section. 9.3.3 Create asset The Spring open source framework was created according to the Asset Specification information of Table 9-1 on page 259. According to this specification, the Spring asset must be created by a Java developer expert in J2EE development (Asset Owner and maintainer field in Table 9-1 on page 259) so Duncan decided that Al Aarkashan (the ZYX Electronics’ Architect with a long experience in Java development) is the best person to create this new asset in the asset Repository. Al Aarkashan is also responsible for maintaining and creating new versions of the asset. As the Asset Owner, he is also the technical contact for other developers’ questions regarding the asset. To create this new asset and load its content into Rational Asset Manager, Al logged into Rational Asset Manager via its Web interface. Deon, the Rational Asset Manager Repository Administrator, had already included Al in the Architects user group that had Asset Producer permissions to create assets in the Analysis_Design and Implementation communities. To create the new Spring asset: 1. Al selected the Submit Asset tab and entered the following information in the Describe section: – Name: Spring Framework – Version: 2.0.6 (because this is the last version of the Spring Framework downloaded from the Web). For more information about asset version policy, look at 9.3.5, “Update Asset” on page 272. – Community: Implementation – Type: Framework (when the asset type is selected, new information fields will appear in the window, such as License Expiration Date attribute, that is, restrictions associated to the Framework asset type will be applied automatically to the asset definition) – Short Description: Spring open source Java framework to improve Java development – Tags: Spring – Creation time: 0 hours – Usage time: Leave blank – Project: Pilot Project – License Expiration Date: Not applicable – Specific Restrictions: The Spring framework requires J2SE 1.2 and J2SE 1.3. – Description: The Spring Framework can be considered a collection of smaller frameworks or frameworks-in-the-framework. Most of these frameworks are designed to work independently of each other yet they provide better functionalities when used together. These frameworks are divided along the building blocks of typical complex applications: • Inversion of Control container: Configuration of application components and life cycle management of Java objects Chapter 9. Produce reusable assets 261 • Aspect-oriented programming framework: Working with functionalities that cannot be implemented with Java’s object-oriented programming capabilities without making sacrifices • Data access framework: Working with relational database management systems on the Java platform using JDBC™ and Object-relational mapping tools providing solutions to technical challenges that are reusable in a multitude of Java-based environments • Transaction management framework: Harmonization of various transaction management APIs and configurative transaction management orchestration for Java objects • Model-view-controller framework: HTTP and Servlet-based framework providing many hooks for extension and customization • Remote Access framework: Configurative RPC-style export and import of Java objects over computer networks supporting HTTP-based protocols, RMI, CORBA, and Web services (SOAP). • Authentication and authorization framework: Configurative orchestration of authentication and authorization processes supporting many popular and industry-standard standards, protocols, tools, and practices via the Acegi security framework (Java) sub-project. • Remote Management framework: Configurative exposure and management of Java objects for local or remote configuration via JMX™ • Messaging framework: Configurative registration of message listener objects for transparent message consumption from message queues via JMS, improvement of message sending over standard JMS APIs. • Testing framework: Support classes for writing unit tests and integration tests Figure 9-12 on page 263 shows Al entering this information into the Repository. 262 Strategic Reuse with Asset-Based Development Figure 9-12 Submit An Asset: Describe tab 2. To include the required artifacts associated to the Spring framework asset, Al selected the Attach tab and noticed that there was an information message warning about the constraints associated to the open source frameworks, as shown in Figure 9-13. Figure 9-13 Constraints associated to the open source framework Chapter 9. Produce reusable assets 263 3. As shown in Figure 9-14, based on the Asset Specification information of Table 9-1 on page 259 and the asset type constraints, Al attached the following artifacts: – A word document describing how to use the Spring Framework – A license.txt with a Legal Terms&Conditions label to describe the specific terms and conditions to use the open source framework – A zip file containing the framework content (both the source and executables) Figure 9-14 SubmIt An Asset: Attach tab 4. To categorize and classify the Spring framework asset, Al selected the Categorize tab and entered the following information as Figure 9-15 on page 265 shows, based on the Asset Specification information of Table 9-1 on page 259. To specify each category classification, Al had to select the values for each category in the left and then click Add to add each value to the Repository): – Framework Type: Open source – Technology Hardware: Windows – Technology Hardware: Linux – Technology Hardware: UNIX – Open Source License Name: Apache License, 2.0 – Technology_Software: J2EE 264 Strategic Reuse with Asset-Based Development Figure 9-15 SubmIt An Asset: Categorize tab 1. To associate the Spring framework asset with other assets that already exist in the Rational Asset Manager, Al selected the Associate tab. However, the Spring framework was the first asset to be loaded into the Repository so there were no component assets using this framework, so he left this section empty, as Figure 9-16 shows. Figure 9-16 SubMit An Asset: Associate tab 2. To finish the asset submission and to verify that all Spring constraints were correctly introduced as Figure 9-17 on page 266 shows, Al selected the Confirm tab and clicked Submit for Review. If any of the restrictions for the Framework asset type had not been entered correctly, this Confirm section displays in red the constraints that were not met for this asset type. Al also might have selected other options instead of submitting the asset for review: Save as Draft: This option saves the modifications made to the asset, but the asset remains in the draft state. Chapter 9. Produce reusable assets 265 Submit As Is: This option submits the asset directly to the Approved state, but it still needs to be reviewed by the Administrator if the review process was configured for an asset to need administration approval. Figure 9-17 Submit An Asset: Confirm tab As shown in Figure 9-18 on page 267, Rational Asset Manager displayed a confirmation to Al displaying the different options available to continue working with the asset (Subscribe To Asset, E-mail Asset, and Forums). 266 Strategic Reuse with Asset-Based Development Figure 9-18 Asset submission confirmation By default, when Al submitted the asset, the Repository listed him as the Asset Owner. Later on, if necessary, he can change this Asset Owner to someone else. As Asset Owner, he automatically is given e-mail subscriptions to the asset and will be notified when any user downloads the asset, updates the asset’s metadata or content, or discusses the asset. In Chapter 10, “Consume reusable assets” on page 281, we will talk in detail about these additional available options and how ZYX Electronics used them for consuming and managing assets. The initial Repository configuration had associated a default review process for all of the assets submitted to the Implementation community. Therefore, the Spring asset automatically went to the Review state. The Project Managers user group was responsible for reviewing the asset. In 9.2.4, “Create asset” on page 245, you saw how ZYX Electronics used this Rational Asset Manager default review process to implement a generic workflow to review all asset types stored in the Implementation community. Important: As discussed earlier, an issue with the default review process was that the “Risk, Security, Audit, and Compliance” Department was not involved. In Chapter 11, “Manage reusable assets” on page 303, you will see how ZYX Electronics customized this default review process with Rational ClearQuest to create a special review process to manage license issues and applied it only to Framework asset types with Framework Type value equal to Open source. Rational Asset Manager stores the artifacts and metadata associated to the Spring open source framework using the Reusable Asset Specification (RAS) structure. Example 9-1 on Chapter 9. Produce reusable assets 267 page 268 is a copy of the manifest file created by Rational Asset Manager for the Spring asset. Important: This manifest file is shown here to provide additional detail and insight into how Rational Asset Manager manages information related to assets. In the typical usage of an asset, you will not need to delve into this level of detail. Example 9-1 Manifest file for Spring open source framework <?xml version="1.0" encoding="UTF-8"?> <defaultprofile:Asset xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:defaultprofile="http:///defaultprofile.ecore" name="Spring Framework" id="{DAA188E3-7B78-C115-7F9E-BBBE69199B63}" date="2007-09-04" state="Approved" version="2.0.6" shortDescription="Spring open source Java framework to improve Java development"> <classification> <descriptorGroup name="AssetType"> <nodeDescriptor href="http://localhost:9083/com.ibm.ram.repository.web/classif/assetTypesSchema.xm i#framework10"/> </descriptorGroup> <descriptorGroup name="CreationTime"> <freeFormValue freeFormDescriptor="//@classification/@descriptorGroup.1/@freeFormDescriptor.0"><v alue>0.0</value></freeFormValue> <freeFormValue freeFormDescriptor="//@classification/@descriptorGroup.1/@freeFormDescriptor.0"><v alue>person hours</value></freeFormValue> <freeFormDescriptor name="CreationTime"/> </descriptorGroup> <descriptorGroup name="CustomAttributes"> <freeFormValue><freeFormDescriptor href="http://localhost:9083/com.ibm.ram.repository.web/classif/assetTypesSchema.xm i#licenseexpirationdate"/><value>No Applicable (license does not expires)</value></freeFormValue> <freeFormValue><freeFormDescriptor href="http://localhost:9083/com.ibm.ram.repository.web/classif/assetTypesSchema.xm i#project"/><value>Pilot Project</value></freeFormValue> <freeFormValue><freeFormDescriptor href="http://localhost:9083/com.ibm.ram.repository.web/classif/assetTypesSchema.xm i#specificrestrictions"/><value>The Spring framework requires J2SE 1.2 and J2SE 1.3.</value></freeFormValue> <classificationSchema href="http://localhost:9083/com.ibm.ram.repository.web/classif/assetTypesSchema.xm i#/"/> </descriptorGroup> <descriptorGroup name="StandardInfo"> <freeFormValue freeFormDescriptor="//@classification/@descriptorGroup.3/@freeFormDescriptor.0"><v alue>6</value></freeFormValue> <freeFormDescriptor name="revisionCount"/> </descriptorGroup> <descriptorGroup name="Framework Type"> 268 Strategic Reuse with Asset-Based Development <nodeDescriptor href="http://localhost:9083/com.ibm.ram.repository.web/classif/frameworktype.xmi#o pensource"/> <classificationSchema href="http://localhost:9083/com.ibm.ram.repository.web/classif/frameworktype.xmi#/ "/> </descriptorGroup> <descriptorGroup name="Open Source License Name"> <nodeDescriptor href="http://localhost:9083/com.ibm.ram.repository.web/classif/opensourcelicensena me.xmi#apachelicense20"/> <classificationSchema href="http://localhost:9083/com.ibm.ram.repository.web/classif/opensourcelicensena me.xmi#/"/> </descriptorGroup> <descriptorGroup name="Technology Hardware"> <nodeDescriptor href="http://localhost:9083/com.ibm.ram.repository.web/classif/technologyhardware. xmi#windows"/> <nodeDescriptor href="http://localhost:9083/com.ibm.ram.repository.web/classif/technologyhardware. xmi#unix"/> <nodeDescriptor href="http://localhost:9083/com.ibm.ram.repository.web/classif/technologyhardware. xmi#linux"/> <classificationSchema href="http://localhost:9083/com.ibm.ram.repository.web/classif/technologyhardware. xmi#/"/> </descriptorGroup> <descriptorGroup name="Technology Software"> <nodeDescriptor href="http://localhost:9083/com.ibm.ram.repository.web/classif/technologysoftware. xmi#j2ee"/> <classificationSchema href="http://localhost:9083/com.ibm.ram.repository.web/classif/technologysoftware. xmi#/"/> </descriptorGroup> </classification> <solution> <artifact name="How to use Spring Framework.doc" type="application/msword"> <reference><value>How to use Spring Framework.doc</value></reference> </artifact> <artifact name="spring-framework-2.0.6.zip" type="multipart/x-zip"> <reference><value>spring-framework-2.0.6.zip</value></reference> </artifact> <artifact name="license.txt" type="text/plain"> <reference><value>license.txt</value></reference> <artifactType type="Legal terms&Conditions"/> </artifact> </solution> <description><value><p style="margin: 0px;">Spring Asset Description .... <br></value></description> </defaultprofile:Asset> Chapter 9. Produce reusable assets 269 9.3.4 Review and test asset The Spring asset that Al submitted to the Rational Asset Manager Repository was in the Draft state, so it had to go to through a review process to get to the Approved state as shown in Figure 9-19. Figure 9-19 Rational Asset Manager default review process Deon had already configured that all of the assets belonging to the Implementation community must go through a default review process and that users included in the Project Managers user group must be the reviewers for these assets. Patricia Moon, the Project Manager, logged in to the Rational Asset Manager Web Interface and selected the My Asset Manager tab to check for assets pending for review. The section Assets to Review showed the Spring asset, as shown in Figure 9-20 on page 271. 270 Strategic Reuse with Asset-Based Development Figure 9-20 Assets pending review So, Patricia clicked the Spring Framework asset and selected the Review tab. As shown in Figure 9-21, the Spring asset was still in the Review state. Figure 9-21 Asset is in the Review state To start the review process, Patricia clicked Claim Review, added comments to the review, and clicked Accept to finish the review process as shown in Figure 9-22 on page 272. Chapter 9. Produce reusable assets 271 Figure 9-22 Accept asset review After the Spring asset was approved by Patricia (who was the only reviewer assigned to approve the asset), it went to the Approved state, and it was also available for the other Rational Asset Manager users. In Chapter 11, “Manage reusable assets” on page 303, you will see how ZYX Electronics customized this default review process with Rational ClearQuest and applied it only to the open source framework assets to involve the “Risk, Security, Audit, and Compliance” Department in their review. 9.3.5 Update Asset An asset is described by its metadata and artifacts, and every organization must decide when a change in its metadata or artifacts must produce a change in the asset version. Therefore, each organization defines its own asset version policy. Duncan Munchkin assigned this task to Deon Adminio, the Tools Administrator in ZYX Electronics, because Deon was the person with the most experience in software configuration management. Because ZYX Electronics was using Rational ClearCase to manage software configuration, Deon decided that this might be a good opportunity to define how Rational Asset Manager and Rational ClearCase must work together and the tasks associated to each tool. This integration was not clear for many users, and Deon had already received several questions asking about the difference between Rational Asset Manager and Rational Clearcase. Although ZYX Electronics had offices in multiple countries, the first deployment of Rational Asset Manager was going to be in their main offices in San Jose, California, where ZYX Electronics had most of their development projects. 272 Strategic Reuse with Asset-Based Development This is a summary of the Asset Version Policy document that Duncan wrote and sent to all Rational Asset Manager and Rational ClearCase users to define and clarify the policy that ZYX Electronics’ users must follow to manage versions of assets and the individual artifacts of assets. Asset Version Policy Rational ClearCase is the software configuration management tool that manages versions of individual artifacts or files. You must use Rational ClearCase during development time, and it will help development teams to work together. The individual ClearCase artifacts will later be grouped in assets with additional metadata information and submitted as an specific asset version to Rational Asset Manager as shown in Figure 9-23. Rational ClearCase Rational Asset Manager Spring Asset v2.0.6 Additional metadata * Spring.jar v2 Spring.jar v2 license.txt v1.9 license.txt v1.9 Additional metadata = Name, Description, State, Attributes, Categories, Relationships Figure 9-23 Rational Asset Manager and Rational ClearCase versions for ZYX Electronics When you submit a new asset to the Rational Asset Manager Repository, you have to assign a version to the asset, because the version is a mandatory field. But when the asset content is modified, you must follow these rules to determine whether you need to create a new asset version. Rational Asset Manager will not force you to create a new version when you change asset content: Create a new asset version when: – – – – – There is a new artifact version. There is a new artifact included in the asset. An existing artifact is removed from the asset. There is a new relationship with other asset. There is a change in the asset name. Maintain the same asset version when: – – – – There is change in an attribute. There is a change in a category value. There is a change in the asset description. There is a change in the asset state. A few days after submitting the 2.0.6 Spring asset version to the Repository, Al received an e-mail from the official Spring Web site indicating that a new version of the Spring framework Chapter 9. Produce reusable assets 273 was available. Because he was the Asset Owner and responsible for its maintenance, he decided to update this information into Rational Asset Manager. He reviewed the changelog file describing what was new in the new Spring version. There was a change in the spring.jar file, which consisted of the removal of the RemoteInvocationUtilsTests class. Based on this information, he decided to update the asset in Rational Asset Manager and create a new version of the asset. To create a new asset version and update its content: 1. Al logged into Rational Asset Manager using the Web interface. Al selected the My Asset Manager tab to find the asset version that he had previously submitted into the Repository. When located, he clicked Spring Framework (Version 2.0.6) to check its content as shown in Figure 9-24. Figure 9-24 Spring Framework Version 2.0.6 content 2. Because Al was the Asset Owner, he had permissions to create a new asset version. To modify its content, he clicked Create new version of the Asset Detail Tools section as shown in Figure 9-25 on page 275. 274 Strategic Reuse with Asset-Based Development Figure 9-25 Modify link 3. Because there was a change in one of the asset artifacts, Al had to change the asset version, so he updated the Version field to 2.1 in the Describe tab as shown in Figure 9-26. He also included a comment in the Description field to reflect the change that he introduced. Figure 9-26 Create a new version for the Spring Framework asset Chapter 9. Produce reusable assets 275 4. To load the new version of the spring.jar file, Al clicked the Attach tab and removed the old version of the spring.zip file and replaced it with the new version as shown in Figure 9-27. There were not any changes in the word document describing how to use the framework nor in the license.txt file describing the licensing terms and conditions to use this asset. Figure 9-27 Change spring.jar artifact version 5. Because no additional changes were needed, Al just clicked Confirm to save the modifications to the new asset version and submit it for review. 6. To verify that the new asset version was submitted correctly to the Repository, Al went to the My Asset Manager tab to check that there was a new version for the Spring Framework as shown in Figure 9-28. Figure 9-28 My Asset Manager tab with all versions created As we can see in Figure 9-28, the new version 2.1 was submitted to the Repository but was still in the Review state. The process to approve the new version was exactly the same 276 Strategic Reuse with Asset-Based Development process that Patricia Moon, the Project Manager, followed to approve the first version of the asset (See details in 9.2.5, “Review and test asset” on page 248). The Unique ID, which is an internal field used by Rational Asset Manager to identify each asset, remains that same across asset versions. If the modification that Al wanted to make to the asset had not needed to create a new version according the rules specified by Deon in the Asset Version Policy document, Al might have used the Modify link instead of Create new version as shown in Figure 9-29. Figure 9-29 Modify asset content without creating a new version 7. After the modification was made, Al had to confirm the changes using Update, write comments explaining the change made to the asset, and then submit the asset for review. If Al had wanted to create another asset with similar information to the Spring asset, he might have reused the content of this asset and clicked the Duplicate link as shown in Figure 9-30 on page 278. Chapter 9. Produce reusable assets 277 Figure 9-30 Duplicate asset content Rational Asset Manager will create a new asset with same content of the Spring asset but will use a new Unique ID. The asset must be renamed and then updated according to the new asset specification. Looking at the functionality provided by the Duplicate link, Al thought that it might be a good idea to propose creating “template” assets that can be reused later by Asset Producers as shown in Figure 9-31 on page 279. 278 Strategic Reuse with Asset-Based Development Asset Template Duplicate New Asset Draft Asset Save as Draft Give new name and version Download and create local copy of artifacts Modify Artifact templates Asset Artifacts Attach Create new content based on the templates Submit Final Asset Figure 9-31 Duplicate asset templates process These “template” assets contain detailed descriptions of what was expected of any new asset of this type (templates for Microsoft Word documents, models, and so forth) for the Asset Producer to use as a base, as well as providing default settings for many fields within the asset. Asset Producers can reuse these asset templates and duplicate their content to make a copy for their new assets. With this approach, Asset Producers can review the detailed description with the instructions of how to create the asset, download the artifact (templates of documents), give the asset a new name, and save it as a draft until they finished creating the asset artifacts and filling out the asset fields and relationships as necessary. When complete, the Asset Producer submits the new asset. 9.3.6 Publish or deploy asset Because the assets produced in this part for ZYX Electronics do not contain service definitions, these assets will not be published to WebSphere Service Registry and Repository. Part 3, “Service Assets in an SOA” on page 333 will describe this task for the ZYX Electronics case study. Chapter 9. Produce reusable assets 279 280 Strategic Reuse with Asset-Based Development 10 Chapter 10. Consume reusable assets In this chapter, we discuss consuming reusable assets. We include a further discussion of best practices in consuming reusable assets and how ZYX Electronics consumed reusable assets and leveraged Rational Asset Manager to consume reusable assets. © Copyright IBM Corp. 2008. All rights reserved. 281 10.1 Introduction In this chapter, we look at the asset usage life cycle, that is, the consumption of assets. As shown in Figure 10-1, it is important to remember that this is a cycle. Consumption of assets happens throughout a project, requests for enhancements and defects will be recorded, and quite likely, new assets will be identified. This cycle occurs many times both within and across projects. Figure 10-1 Asset usage cycle Also, we need to remember that there is a connection between the manufacturing cycle and the usage cycle. This interaction is a key aspect to the success of any asset reuse program. The Asset Consumer team needs to ensure that they are communicating with the production team. As part of this communication, the Asset Consumer team needs to keep the production team informed regarding any consumability or quality issues with the asset. In addition, the consumers might modify an asset as part of their effort and will find themselves making the updated asset available as a new asset. Last, but certainly not least, the Asset Consumers need to alert the Asset Producers to opportunities or needs for new assets as shown in Figure 10-2 on page 283. 282 Strategic Reuse with Asset-Based Development Figure 10-2 Integration between usage and manufacturing cycles 10.2 Asset usage As described in Chapter 5, “Asset-Based Development and Asset Governance Rational Method Composer plug-ins” on page 61, the plug-in provides use process guidance to the asset as a capability pattern. Figure 10-3 shows its workflow and the tasks composing it. Figure 10-3 Workflow of use process 10.2.1 Asset consumption roles This chapter describes the tasks involved in asset consumption mainly from the views of the following two roles: Asset Consumer: The Asset Consumer searches and browses Reusable Assets in the Asset Repository and ultimately uses the assets. The Asset Consumer provides feedback Chapter 10. Consume reusable assets 283 on the assets. There are many roles from the enterprise which can perform the role of an Asset Consumer, for example: Manager, Analyst, Architect, Developer, Tester, and so forth. This role mainly performs the following tasks: – Search Asset – Use Asset – Provide Asset Feedback Subscriber: A Subscriber is interested in the activities related to an asset or a specific search in the Repository. The Subscriber registers interest in the Asset Repository. Examples of events related to an asset include change in state, submitted rating, downloads, asset update, and other events. The Subscriber can be notified via e-mail or Really Simple Syndication (RSS) feeds. This role mainly performs the Search Asset task. 10.2.2 Search asset Figure 10-4 shows the position of this task in the workflow of the Asset-Based Development plug-in. The purpose and expected inputs and outputs defined for this task are: Purpose: To find a Reusable Asset that fits specific criteria (for example, context, features, platform, performance, and so forth). Inputs: Asset Repository. (Optional) Asset Report. Outputs: Reusable Asset. Figure 10-4 Search asset In this task, the Asset Consumer searches, browses, evaluates, and accepts an asset. This task is the first step of consuming. As we make asset reuse a part of the business, it is important that Asset Consumers are able to successfully find the assets that they need and can use in a timely fashion. This highlights the fact that not only do we need high quality, well documented and consumable assets, we also need to make sure that they are stored in a logical manner and can be accessed via search mechanisms. These search mechanisms can include tagging, keyword search, or schema navigation. Ideally, we want the search mechanisms to be quick and easy to use. 284 Strategic Reuse with Asset-Based Development Also, remember that when an asset is produced, there is often a connection to related assets. When looking for assets to use, the Asset Consumer will take advantage of these relationships to find other worthwhile and beneficial assets. This task includes the following four steps: 1. Search for asset: This step is where we search for an asset in the Repository. As the volume of assets in the Repository grows, we will need to ensure that we are as specific as possible in our search. Just as it can be discouraging to perform a search and not find any assets, it can be discouraging to search and find too many assets. 2. Browse asset: This is often an informal step. Based on the information provided in the search results from the Repository, we make decisions regarding the suitability of an asset for reuse. Several of the assets will be deemed as not being a good fit and other assets will be considered fit candidates and therefore will be used as the input into the next step. 3. Evaluate asset: Perform a “fit” analysis to see if the asset will work or fit in the required context. This analysis can involve applying the asset into a temporary location and validating its compliance with your requirements, including testing out variability point binding and customization ideas. This step generally implies a more formal style of assessing the applicability of an asset. There are several key perspectives to evaluate: – Evaluate the asset’s business fit: • Determine the reuse cost avoidance by using the asset: Another way of saying this is to determine the potential cost savings to the business by using this asset. To do this, you must understand the capabilities that the asset provides and what the cost is for your organization to develop it. • Determine the payoff threshold by using the asset: How many uses will it take to pay off the costs of purchasing and maintaining the asset? • Determine if the asset’s terms and licensing fit with your business model: Will the asset be used in domestic and international locations? Does the asset need to be distributed to multiple servers? • Identify who owns the task of maintaining the asset: What are the maintenance support agreements? Will the asset authors provide support? If it is a White box asset, can your organization maintain the asset? – Evaluate the asset’s organizational fit: • Determine if all stakeholders will accept the use of the asset: Can your organization overcome the “not invented here” mentality? Is the asset viewed as a threat to any groups or individuals within the organization? • Determine if the asset will be used and accepted on multiple projects: Is there sufficient need for this asset in other projects? Can the costs of reusing this asset be amortized to other projects? Understanding the asset’s capabilities helps in determining if the asset is a candidate for reuse on other projects within the organization. – Evaluate the asset’s process fit: • Determine if the use of the asset will fit into your organization’s process: Does this asset require new roles and tasks in the process to develop with it and support it? Is your organization’s process maturity level sufficient to incorporate the roles and tasks for reuse? Usage information for the asset aids in the evaluation of the asset fitting into the process, as well as the roles required to work with the asset. Chapter 10. Consume reusable assets 285 • Make sure that tasks and time have been allocated to use and maintain the asset: Will the asset’s stakeholders (architects, developers, and so on) be given sufficient time to comprehend, use, and defend the asset? – Evaluate the asset’s engineering fit: • Determine ease of understanding and usage: What is the quality of the documentation? How many steps are involved to use the asset? How many variability points does the asset have? • Determine functional completeness: Does the asset do what it says and do what you need? • Evaluate reliability: Exercise and test the asset to determine if the asset will fit your contexts. • Evaluate error handling: Will the error handling fit into the way that your organization’s software handles errors? • Review hidden information: Are the complexities encapsulated to strengthen the value proposition and decrease maintenance issues? • Evaluate cohesion and coupling properties: How many dependencies does the asset have? What technical assumptions does the asset make? Is the asset organized along reasonable, functional boundaries? • Review portability: In what technical contexts will the asset work? • Evaluate comments from other users: What has been the experience of other people using the asset? • Understand the level of effort invested in the asset: What reuse metrics come with the asset? How many person labor months and years are invested in the asset? 4. Accept asset: This acceptance defines a technical acceptance and does not override the necessary managerial acceptance needed, if any. The Asset Consumer might take notes about recommendations for customizing the asset for the required context. This ensures that what was learned while performing the fit analysis is not forgotten and reduces duplicate effort between determining if the asset will work and making it work. 10.2.3 Use asset Figure 10-5 on page 287 shows the position of this task in the workflow of the Asset-Based Development plug-in. The purpose and expected inputs and outputs defined for this task are: Purpose: To incorporate or instantiate a located Reusable Asset into the project or the Consumer’s workspace. The time that it takes to search, browse, evaluate, and reuse an asset impacts the value of the asset. Inputs: Reusable Asset. Outputs: Reusable Feedback. 286 Strategic Reuse with Asset-Based Development Figure 10-5 Use asset In this task, the Asset Consumer retrieves, uses, and sometimes extends an asset. Using an asset is the main purpose of creating an asset. There are four major styles of reuse: Black box Gray box White box Glass box The consumer expects to have an asset that is well built, documented, and supported. From a producer’s point of view, there is an expectation that the Asset Consumer will provide feedback about the asset, share information regarding possible enhancements and defects, and possibly enhance or create supporting and related artifacts. As discussed in the introduction to this chapter, there is a strong relationship between these roles, and for a successful reuse program to emerge, this relationship must be supported. This task includes the following two steps: 1. Retrieve asset: Retrieve an asset from a Repository and bring the asset into the development environment. 2. Extend asset: Certain assets can be extended through variability points, which are locations in an asset or a contained artifact to be customized or extended. It is unrealistic to expect each asset that has been retrieved to be a 100% fit. In these cases, based on the fit analysis, the team will need to decide whether the extension of the asset is worth the effort. Again, a well-engineered asset that supports extension through variability points and proper documentation can be make this a low-risk situation. Chapter 10. Consume reusable assets 287 10.2.4 Provide asset feedback Figure 10-6 shows the position of this task in the workflow of the Asset-Based Development plug-in. The purpose and expected inputs and outputs defined for this task are: Purpose: To deliver insight and the effects of using the asset back to the Asset Owners or to benefit other potential Asset Consumers. To have a channel for communicating any issues with the Repository to the Repository Administrators. Inputs: Asset Repository. (Optional) Reusable Asset. Outputs: Reusable Feedback. Figure 10-6 Provide asset feedback Offering feedback is essential for accelerating Asset-Based Development. Forms of feedback include: Rating system: This method is a well-known form of feedback where stars or other icons are used; it is great for quick glances but lacks the descriptive power of other forms. Comments: This method provides textual description of experiences with an asset and is generally given in a single direction. Discussions: Discussion threads or forums provide a community approach to addressing feedback. Problems or issues: This method is more formal feedback where a problem number might be retrieved and the asset development team tracks the submitted issue and responds with future releases of the asset. Surveys: These surveys are sent to the Asset Consumer asking the Asset Consumer to answer the questions and reply. 288 Strategic Reuse with Asset-Based Development Note: When sending a survey to the Asset Consumer, there are sample questions to consider, such as: How long did it take to use the asset? What amount of time was saved by using the asset? What did not go well with using the asset? On what asset discussion forums have you participated? On average, how much time do you spend searching for each asset? Can you estimate what percentage of searches results in not finding what you want? What assets do you need in the Repository, but you cannot find? What kinds of assets do you not need? When you have submitted defects, have you received a timely response on the defect? How do you generally search for assets: keywords, search filters, custom tags, or a combination? Have you subscribed to any assets or searches? If so, have you received notification of events? This task includes the following two steps: 1. Identify form of feedback: Select the type of feedback that meets your purpose. 2. Provide feedback: In general, the feedback must be captured in the Repository, where you can track the relationship of the feedback to assets, Asset Consumers, feedback providers, and so forth. If a problem or issue is submitted, these relationships are even more important, because the Asset Owners, Producers, and other teams involved with authoring the asset plan are notified of the problem and create plans for addressing the issue. 10.2.5 Develop asset specification Figure 10-7 on page 290 shows the position of this task in the workflow of the Asset-Based Development plug-in. In this task, the Asset Producer, or the Consumer in certain situations, develops the asset specification. The concept of this task is explained in 9.2.3, “Develop asset specification” on page 242 from a Producer’s point of view. When looking at this task from a consumer’s point of view, it might at first seem strange that a task related to creation is associated with this role. However, the consumer role is often the one that is closest to the problems and the needs of the team. Therefore, the consumers are most likely to first recognize a need for a reusable asset. In addition, because they are the experts regarding the context, project, and reuse need, they are most qualified to write the asset specification. Writing the asset specification does not necessarily mean that the consumer will create the asset. Depending on the team structure, asset production responsibilities might belong elsewhere. However, the person who writes the specification is usually a key resource who is consulted by those people building the reusable asset. Chapter 10. Consume reusable assets 289 Figure 10-7 Develop asset specification 10.3 ZYX Electronics: Consume reusable assets Next, we discuss consuming reusable assets at ZYX Electronics. 10.3.1 Search asset In Chapter 9, “Produce reusable assets” on page 237, we described how Al Aarkashan, the ZYX Electronics’ Project Manager for this case study, created a new asset for the Spring open source framework and how this asset was approved by Patricia Moon, the Project Manager. Al followed a similar process to load other assets into the Rational Asset Manager Repository. He loaded all of the open source frameworks that ZYX Electronics projects were using, and developers started to use these open source frameworks to build their applications. Later in this chapter, we will describe how developers used Rational Asset Manager to download the assets that they used. As expected, before the developers can use any of the assets, they had to find them in the asset Repository. The initial Rational Asset Manager structure that Deon and Duncan created was oriented to facilitate user searches looking for specific information. To explain this initial structure and how to search for specific assets, Deon decided to spend one hour with developers showing them all of the possibilities they had to look for information. This also helped him to verify that the initial structure created in the Repository was valid and facilitated easy searches for the users. This is a summary of what Deon explained to the developers during that enablement meeting: To search for assets in the Rational Asset Manager Repository, you can use both the Web and Eclipse interfaces. When you search for assets in the Rational Asset Manager Repository, you can search for assets through all of the communities. But you will only be able to consume and download assets from communities where you have at least Consumer permissions (see 8.1.1, “Community Map” on page 197 to see the permissions assigned to each role). 290 Strategic Reuse with Asset-Based Development You can restrict the scope of your search to: – Search assets: You will search for information in the asset metadata, but not for information included in its artifacts. This option is always selected by default, and you cannot modify it. – Search remote assets: You will search for information not only for the assets stored in the Rational Asset Manager Repository, but also in other repositories integrated with it, such as WebSphere Service Registry and Repository. – Search within artifacts: You will search for information not only included in the asset metadata, but also included in its artifacts. – Search forums: You will search for information stored in the forums associated to the assets. To modify the scope of your search, you just have to select the magnifying glass located to the left of the field search and mark the desired scopes. To search for assets using the Rational Asset Manager Web interface, you must select the Search for Assets tab. Rational Asset Manager provides tools that simplify the task of finding assets within the Repository. You can find assets through keyword search, advanced search, tags, and filters: – Search assets by keywords: The primary method of finding assets is to search using keywords. By default, the search keywords are compared to information in an asset’s name, description, short description, rating, community, category, attributes, custom attributes, and tags. As just discussed, this search includes the following options: Search within artifacts, Search remote assets, and Search forums. You can use search query terms and operators to help you create meaningful search queries. Certain operators that you can use include: the asterisk (*) character to represent a multiple character wildcard or the question mark (?) character to represents a single wildcard character. For example, if you look for the “spr?ng” keyword and the scope is modified to search within artifacts, the search will return all assets containing spring and sprang words in the asset metadata or in its artifacts’ content as shown in Figure 10-8 on page 292. Chapter 10. Consume reusable assets 291 Figure 10-8 Search for assets using keywords – Search assets using advanced search fields: Click the Advanced link and you will see a new window, as shown in Figure 10-9, with additional options to allow you to increase the specificity of your search. Figure 10-9 Search for assets using advanced search fields Use as many fields as you want and in any combination as desired toward this goal of a more focused search. After you type values in the fields, click Search. The search query that you created by using the fields will be displayed. You can also restrict the scope of your search to search within artifacts, remote assets and, forums. – Search assets by tags: Tags are words or phrases that users create and assign to assets (using the Tag field). You can find assets by using your own tags or tags that are created by other users. Tags are displayed in confined areas that are known as tag 292 Strategic Reuse with Asset-Based Development clouds. You can use tags to assign meaningful labels that are more unique and personally relevant than the predefined categories or types that an Administrator creates for you. You can view all of the tags and information about how many assets are using those tags across the Repository in the tag cloud, which is located on the Search for Assets page in the Tags section as Figure 10-10 shows. Figure 10-10 Search for assets using tags If in Figure 10-10, you click the spring tag, you automatically see a list of all assets included in the Rational Asset Manager Repository that have been assigned the Spring tag. You can view the number of assets in the Repository that share a tag by clicking the “Show tag counts” link. – Search assets with filters: Search filters help limit your asset search by using a combination of community, asset type, state, categories or subcategories, or rating. You can view filters on the Search for Assets page in the sidebar “Filter your search” as shown in Figure 10-11 on page 294. Chapter 10. Consume reusable assets 293 Figure 10-11 Filter your search The filters that are displayed change dynamically depending on which assets are displayed in the search results. As you filter your search, you can apply and remove any combination of filters. The assets listed in the search results will appear or disappear depending on the filters that you choose. For example, if you look only for the assets belonging to the Implementation community, you click the Implementation link that is under the Community section. Then, Rational Asset Manager will automatically show you a filter with all of the assets belonging to the Implementation community as shown in Figure 10-12. Figure 10-12 Assets belonging to the Implementation community 294 Strategic Reuse with Asset-Based Development As you can see Figure 10-12 on page 294, the “Filter your search” section has changed automatically and it has been adjusted dynamically to reflect the filters that can be applied to the assets displayed in the search results (asset types, categories assigned, and states). You click X to remove the filters in any order. You can also subscribe to your favorite queries using the Subscriptions section of the Rational Asset Manager Web interface as shown in Figure 10-13. Figure 10-13 Subscriptions to searches – Search feed: This option creates an RSS (Really Simple Syndication) subscription to the search query. RSS is a family of Web feed formats used to publish frequently updated content, such as blog entries, news headlines, or podcasts. RSS makes it possible for people to keep up with their favorite Web sites in an automated manner that is easier than checking the Web sites manually. RSS content can be read using software called a “feed reader” or an “aggregator.” The user subscribes to a feed by entering the feed’s link into the reader or by clicking an RSS icon in a browser that initiates the subscription process. The reader checks the user’s subscribed feeds regularly for new content, downloading any updates that it finds. – Subscribe to this search: You will receive an e-mail notification when any asset that meets the search criteria that you have selected is changed or updated. You can configure the name of this subscription and the frequency of the e-mails you will receive (daily, weekly, or monthly). – Add search engine to browser: This option installs a search engine to your browser so that you can search within the asset Repository from any open browser window using browser shortcuts. – You can also add the bookmark of the Web page displaying the search query results that you have selected using your Internet browser menu and come back to it later. Tip: You can also make subscriptions (RSS feeds and e-mail notifications) to individual assets to receive notifications when the individual asset is changed or updated. 10.3.2 Use asset After the developers learned how to search for open source framework assets within the Rational Asset Manager Repository, they started to use open source framework assets to build their code components. Deb Devak, a developer who planned to build a Java component for the ZYX Electronics’ Account application, needed to use the Spring open source framework to build it. Deb logged into the Rational Asset Manager Web application and looked for the Spring open source code following the instructions that Deon had provided: 1. Deb selected the Search for Assets tab and clicked the spring tag that was already associated to the Spring open source assets. Chapter 10. Consume reusable assets 295 2. The Search Results list showed that there were two versions of the Spring Framework already loaded into the Rational Asset Manager Repository as shown in Figure 10-14. Figure 10-14 Search Results list for the Spring open source framework 3. Because Deb wanted to be informed of changes in the Spring framework, she clicked the Subscribe to this search link in the Subscriptions section to receive an e-mail notification when the Spring asset was changed or updated. 4. Deb was reviewing both versions of the Spring Framework plug-in, navigating through the General Details and Content tabs. Based on this initial review, she decided to use the Spring Framework Version 2.1 asset to build her Java component. To download it, she clicked the Spring Framework Version 2.1 link, and clicked Download as shown in Figure 10-15 on page 297. 296 Strategic Reuse with Asset-Based Development Figure 10-15 Download Spring open source framework 5. Rational Asset Manager processed her request and checked if Deb had permissions to download the asset. Because she was a developer with consumer permissions in the Implementation community, she was authorized to download the asset to her local disk. Note: If another user without download permissions had wanted to download the asset, the user must request access to the asset by clicking the Request permission button. This request is then sent directly to the Community Administrator. 10.3.3 Provide asset feedback Deb started to use the Spring Framework to build her Java component, but she noticed that the reference documentation associated to the Spring version she was using had not been updated to Version 2.1, and it still had references to Version 2.0.6. To notify the owner of the asset (Al Aarkashan) and other developers who were using the same version of the framework of this problem, she selected the Forums functionality available in Rational Asset Manager. To enter a new comment into the forum associated to the Spring Version 2.1 framework, Deb selected the Forums tab and followed these steps: a. Deb clicked the General discussion link and clicked New topic to start the discussion. She introduced a new forum topic, which warned that the documentation had not been updated to the new version, and she clicked Create to make the comment visible to other users as shown in Figure 10-16 on page 298. Chapter 10. Consume reusable assets 297 Figure 10-16 Introduce a new forum topic b. Al Aarkashan, the Asset Owner, saw that there was a new forum topic, checked it, and modified the asset to fix the documentation problem. When he finished the modification, he replied to the obsolete documentation reference topic saying that the problem had already been solved as shown in Figure 10-17. Figure 10-17 Respond to Forum Topic 298 Strategic Reuse with Asset-Based Development c. Because Deb was subscribed to the Spring search list, she automatically received an e-mail when Al updated the documentation, and she went to Rational Asset Manager to download the updates. Note: Optionally, Forum Topics can be automatically synchronized with Rational ClearQuest record types. Refer to Appendix A, “Rational Asset Manager: Installation and administration” on page 637 for additional information. When Deb finished building her code component, she submitted the new version to the Rational Asset Manager Repository, and she created a “Uses open source framework” relationship between this component and the Spring asset that she used to build it as shown in Figure 10-18 and Figure 10-19 on page 300. Figure 10-18 Search for Spring assets to establish a relationship Chapter 10. Consume reusable assets 299 Figure 10-19 Establish a relationship between component and framework assets Establishing relationships between assets helps Rational Asset Manager users to analyze the impact of changes in other assets. For example, if Al Aarkashan had wanted to update the Repository with a new version of the Spring framework asset, he might have used the relationships that developers established with this asset to know how many components might be impacted by a change in this asset. To analyze this impact, he just had to go to Rational Asset Manager to see the details of the Spring Framework version that he wanted to change (for example, Spring Framework Version 2.1), and the Related Assets section of the General tab shows all assets that had used this version of the framework to build their applications as shown in Figure 10-20. Figure 10-20 Components using the Spring Framework During the meeting that developers had with Deon to learn how to search for assets, Deon told to them that he wanted to have their input (using the Ratings functionality of Rational Asset Manager) to record which assets were most valuable for developers. So, Deb searched for the Spring asset Version 2.1 that she used to build her Java component and selected the Ratings tab to rate this asset. She clicked the Leave Feedback link and left her feedback as shown in Figure 10-21 on page 301. 300 Strategic Reuse with Asset-Based Development Figure 10-21 Ratings: Leave Feedback This feedback can be used later by Deon to generate metrics, as well as by other users of the asset as they determine whether they will use the asset. We look further into the rating, metrics, and evaluation topics in Chapter 15, “Managing service assets” on page 425. Chapter 10. Consume reusable assets 301 302 Strategic Reuse with Asset-Based Development 11 Chapter 11. Manage reusable assets In this chapter, we look at how we manage reusable assets. This discussion includes a further discussion of best practices in managing reusable assets and how ZYX Electronics managed reusable assets and leveraged Rational Asset Manager to help manage reusable assets. © Copyright IBM Corp. 2008. All rights reserved. 303 11.1 Introduction As we learn how asset management plays a role in our asset reuse initiative, we need to keep the following definitions in mind: Governance: The ongoing, recursive process of establishing decision rights (chains of responsibility, authority, and communication), measurements, policies, standards, and control mechanisms to enable people to carry out their roles and responsibilities Governance Solution: A work product of Governance; a set of governance decisions applicable to a specific context and scope of activities Management: The activities of goal setting, decision making, oversight, enablement, and guidance that implement a governance solution in pursuit of a set of defined objectives In this chapter, we focus on the management aspect of assets and reuse. As per the previous definition, we want to make sure that goals have been set, decision making occurs, enablement is in place, and there is oversight in place - all while reaching the objectives of the organization. Also, as shown in Figure 11-1, we see that management is not an event that occurs in isolation. Management plays a key role in supporting asset production and asset consumption. Figure 11-1 Role of asset management in overall asset workflows Without having asset management in place, the integration, steps, and roles as found in Figure 11-2 on page 305 likely fall into chaos. 304 Strategic Reuse with Asset-Based Development Figure 11-2 Integration between usage and manufacturing cycles 11.2 Asset management As described in Chapter 5, “Asset-Based Development and Asset Governance Rational Method Composer plug-ins” on page 61, the plug-in provides the management process as a capability pattern. Figure 11-3 shows its workflow and the tasks composing it. Figure 11-3 Workflow of management process Chapter 11. Manage reusable assets 305 11.2.1 Asset management roles This chapter describes the tasks involved in managing assets mainly from the views of the following three roles: 1. Asset Reviewer: The Repository notifies the Asset Reviewer when an asset is submitted for review. The Asset Reviewer selects the asset to review and evaluates the asset, prepares review material, and then votes to accept or reject the asset. This role mainly performs the Review and Test Asset task. 2. Asset Review Board: The Review Board is responsible for specifying review processes. It works with the Community Administrator to get the assets into the Repository. The Review Board identifies potential reviewers and customizes the review process in the Repository to add the reviewers. The Review Board also initiates the review in the Repository, monitors who has submitted reviews, and then evaluates the submitted reviews and casts the final vote on an asset. This role needs to be optional, which allows varying degrees of formality in the asset review process. This role mainly performs the Review and Test Asset task. 3. Repository Administrator: This role is responsible for the overall configuration of the Asset Repository. These responsibilities include specifying: – Server paths – Repository license – Application server paths – Database configurations – Web server path – Web services path – Background index process settings – Overall performance This role mainly performs the following tasks: – Configure Repository – Report on Asset 4. Community Administrator: The Community Administrator makes Reusable Assets available to the target audience by establishing and maintaining the Asset Repository. This responsibility can include activities, such as: – Defining the asset types for one or more organizations – Describing the review process for these asset types – Capturing the taxonomy for these asset types – Defining the roles for a particular organization – Defining the access control and permissions for roles in that organization The Community Administrator coordinates with the Repository Administrator as part of the overall configuration of the Repository. This role mainly performs the following tasks: – Publish or Deploy Asset – Remove Asset 306 Strategic Reuse with Asset-Based Development 5. Integration Administrator: This role is responsible for integrating the Repository with development life cycle tools, such as Source Configuration Management (SCM) tools, change management tools, and service registries. This role mainly performs the Configure Repository task. 11.2.2 Search asset Figure 11-4 shows the position of this task in the workflow of the Asset-Based Development plug-in. In this task, the Administrator of the Repository searches the asset to review. The details of this task are explained in 10.2.2, “Search asset” on page 284 from a Asset Consumer’s point of view. In this section, we take a moment to look at how things are different when performing this task within Asset Management. Ideally, this task is performed in the same manner as the steps taken by the Asset Consumer. The only difference is the purpose behind the searching. In the case of asset management, we look for assets for the purpose of reviewing the asset and determining if the asset needs to be included within the Repository. An asset Repository, such as Asset Manager, notifies a user when that user is expected to review an asset. However, the users must still understand and have familiarity with searching for assets. There can be cases where an asset review is started based on feedback, discussion, or another ad hoc mechanism, and the reviewer needs to find the asset on their own. Figure 11-4 Search asset 11.2.3 Review and test asset Figure 11-5 on page 308 shows the position of this task in the workflow of the Asset-Based Development plug-in. The purpose and expected inputs and outputs defined for this task are: Purpose: To maintain control, quality, and management of the content into the Repository Inputs: Reusable Asset. (Optional) Asset Artifact Outputs: Asset Review and Reusable Asset Chapter 11. Manage reusable assets 307 Figure 11-5 Review and test asset Assets can be used by an unspecified number of users in various contexts and environments. Consequently, the review process needs to be able to take multiple perspectives and requirements into account. For example, assets must be reviewed from the viewpoint of reusability, such as: The asset must be easy to use, customize, and apply to another context. The asset must possess the characteristics of sound engineering: tight internal cohesion, loose coupling with other assets, and sufficient capabilities. The asset’s purpose and intent must be easy to understand. Conducting fit analysis must be easy in order to be able to determine the asset’s match to a particular context. Several key perspectives to evaluate are (See 10.2.2, “Search asset” on page 284): Asset’s business Asset’s organizational fit Asset’s process fit Asset’s engineering fit This task includes the following four steps: 1. Submit asset for review: The Asset Owner or Producer has completed their refinements of the asset and now submits the asset to the review and approval process. The Asset Owner or Producer might have suggestions of subject matter experts who can fill the role of Reviewers. 2. Notify parties: The Repository must handle the activities of notifying the Reviewers of the asset to be reviewed. However, in practice, the Asset Owner or the Review Board might need to provide reminders. 3. Conduct review: There are many aspects of an asset that can be included as part of the review, including: – Asset name: The proposed asset name is evaluated in regard to conveying the purpose and use of the asset. – Classification: The classification aligns with the manner in which target Asset Consumers will search for the asset. 308 Strategic Reuse with Asset-Based Development – Functional compliance: The asset goes through typical functional testing, executing test cases and using testing tools to validate the asset. – Non-functional compliance: The asset goes through non-functional testing to verify the asset’s performance, scalability, security, and so forth. – Packaging: Verify that the asset contains the necessary support material, making it easy for the Asset Consumer to use. Also, support contact information is present and accurate, and the support team is ready to support the asset. – Asset similarity: The asset is evaluated compared to other assets to determine if the implementation overlaps or is similar to other assets in the Repository. – Subject matter expert: A fit for purpose evaluation is conducted, examining if the asset fulfills the purpose properly and aligns with the Asset Specification. When a Reviewer completes a review, they submit the review files (if any) and cast a vote. 4. Review board vote: If the Review Board is enabled, the members of the Review Board cast their vote on approving or rejecting the asset. If the asset is rejected, it returns to an early submission state, such as Draft; otherwise, it transitions to another state, such as Approved. An asset that is Approved is made visible to the anticipated Asset Consumer audience through the Repository. An asset can transition to other states, as well, after it has been approved. For example, if the asset is a service, it can be published to a service registry, which can change the state to Published. 11.2.4 Publish or deploy asset Figure 11-6 shows the position of this task in the workflow of the Asset-Based Development plug-in. The purpose and expected inputs and outputs defined for this task are: Purpose: To move the asset through the life cycle to now be visible in other tools, such as a service registry Inputs: Reusable Asset Outputs: Reusable Asset Figure 11-6 Publish or deploy asset In this task, the asset is released to the Consumer, either in the scope of the Repository or in another tool. The target for the released asset will depend on the asset type. For example, a Chapter 11. Manage reusable assets 309 pattern asset or code component will be released within the asset Repository. In the case of a service asset, it is likely that the asset will be published to a service registry and Repository. This task includes the following three steps: 1. Select approved asset in Repository: If the asset Repository is enabled, the Administrator selects the asset to be published. 2. Select the target registry or other Repository: If the asset Repository is enabled, the Administrator selects the target registry of the runtime type and deployable asset or other Repository. 3. Publish the asset’s contents to the target Repository: If the target Repository is enabled, the Administrator publish the asset’s contents to the target Repository. If not, the Administrator publishes the asset’s contents into the target (Consumer) environment. After the publication, the Administrator must notify the Consumer of the publication. 11.2.5 Configure Repository Figure 11-7 shows the position of this task in the workflow of the Asset-Based Development plug-in. The purpose and expected inputs and outputs defined for this task are: Purpose: Provide a governed asset management environment to preserve and improve the organization’s software related investments Inputs: (Optional) Asset Repository and Asset Types Outputs: Asset Repository and Asset Types Figure 11-7 Configure Repository In this task, the Administrator must keep the Repository well-classified and appropriately accessible for the Consumer. The concept of this task can be applicable to the Administrator, who has no Repository. The two major steps of this task are access control for the asset and its classification. The access control determines the control of the asset logistics while avoiding unauthorized reuse, and the asset classification influences the visibility of the asset and helps to define the metrics for the Reuse Strategy. Chapter 8, “Configure your Asset Repository” on page 195 provided an overview of how ZYX Electronics configured their asset Repository. If you recall from that discussion, a key concept is that of a community. A community is a Repository structure that facilitates user interaction with a group of related assets. Communities are formed by users, their roles, and permissions and their assets and review processes. 310 Strategic Reuse with Asset-Based Development This task includes the following seven steps: 1. Create category schema: The Administrator defines and creates category schema in alignment with the organization’s Reuse Strategy. Creating a category schema often requires visualization and socialization. To achieve stakeholder agreement, you need to provide the stakeholders with a representation of the schema that is easy to understand and discuss. To visualize the category schema, the Administrator might use a model, such as a Uniform Modelling Language (UML) model, as shown in Figure 11-8. Figure 11-8 Example of visualization for category schema After the stakeholders have agreed upon the category schemas, the category schemas are loaded by the Repository or Community Administrator into the Repository. 2. Specify asset types: The Administrator specifies the asset types that will be supported by the Repository. Recall that an asset is composed of one or more artifacts. We need to analyze how these artifacts will group into assets, and as part of the effort, specify the name of this asset type, provide a description, detail the artifacts that comprise the asset, and define the relationships among the asset types. Again, the use of visualization can help both define and then socialize the resulting set of asset types. 3. Specify communities and access control: The Administrator specifies communities and access control for the assets. 4. Specify review process: The Administrator specifies and configures the review process for assets. 5. Configure Repository users: The Administrator defines and configures Repository users. The users can come from existing directory services, such as Lightweight Directory Access Protocol (LDAP). 6. Configure Repository integrations: When appropriate, the Administrator must integrate the Repository with various tools, such as SCM tools, change management tools, service registries, and so forth, to provide a seamless interaction for the software development workflows. 7. Configure system timers and notifications: The Administrator defines the policy for scheduling the types of regular events, such as a publication to the target registry, asset subscriptions, indexing, and so on. The Repository needs to be configured to provide a balance of optimal performance and timely updates. 11.2.6 Remove asset Figure 11-9 on page 312 shows the position of this task in the workflow of the Asset-Based Development plug-in. The purpose and expected inputs and outputs defined for this task are: Purpose: Bring the asset to the end of its life cycle in the Repository Inputs: Reusable Asset Chapter 11. Manage reusable assets 311 Outputs: Asset Repository and Reusable Asset Figure 11-9 Remove asset In this task, the Administrator removes an asset from the Repository. The typical situations where this need arises are: Asset usage levels: The asset is dormant, and it has few searches, few browses, few downloads, little feedback, and so forth. Funding termination: The sponsor changes or terminates funding support, perhaps due to business prioritization. Need for solution diminishes: The problem either goes away, or a new solution is available, or the level of effort to maintain this asset becomes prohibitive. There are three levels of removing an asset from a Repository. These levels include retiring an asset, archiving an asset, and deleting an asset: Retire asset This task is performed by an Administrator who sets the state of the asset to retired. The effect of this task is the asset is no longer visible to the Asset Consumers, but it is still visible to the Asset Owner and the Administrator. Archive asset This task is performed by an Administrator who sets the state of the asset to archived. The effect of this task is that the asset is no longer visible to Asset Consumers or to the Asset Owner, but it is still visible to the Administrator. Delete asset This task is performed by the Asset Owner or the Administrator. The effect of this task is the asset is removed from the Repository. Certainly, this action needs to be handled with care. This task includes the following four steps: 1. Determine need to remove asset: An interested party brings forward concerns about an asset. Examining the considerations for removing an asset, an Administrator and Asset Owner verify the concerns and evaluate the need to remove the asset. 2. Conduct impact analysis: The Administrator conducts an impact analysis where current Asset Consumers are evaluated and the impact to their projects is understood. The impact analysis must also address asset relationships, including the related assets’ Asset Owners and Producers, as well as other technical dependencies. The Asset Owners and Producers of related assets might need to participate in the planning depending on the nature of the problem and the nature of the asset relationship. The Administrator and the Asset Owner must communicate with the Managers to understand the business impact of removing the asset. 312 Strategic Reuse with Asset-Based Development A case must be prepared to determine the level of removing the asset. Enough insight must be collected to answer the question, “Does the asset need to be retired, archived, or deleted?” 3. Obtain approval to remove: The Administrator obtains approvals from Managers and other stakeholders to remove the asset. 4. Remove the asset: The Administrator removes the asset from the Repository according to the appropriate level. 11.2.7 Report on asset Figure 11-10 shows the position of this task in the workflow of the Asset-Based Development plug-in. The purpose and expected inputs and outputs defined for this task are: Purpose: Deliver activity measurements to managers for governance and management functions. Inputs: Asset Repository. (Optional) Asset Artifact and Reusable Asset Outputs: Asset Report Figure 11-10 Report on asset As discussed in Chapter 6, “Value, impact, and return on investment” on page 103, the gathering and analyzing of asset metrics is a key activity as you decide where to make investments. In this task, the Administrator collects reports from various sources, such as: Asset Consumers: Asset Consumer metrics generally include qualitative metrics, such as reusability ratings (4 out of 5 stars) or text feedback in the form of comments and discussions. Typically, these metrics are stored in the Repository. Asset Owners, Producers, and Reviewers: Asset Owners, Producers, and Reviewers tend to create asset-level metrics. These asset-level metrics include the anticipated level of effort for an Asset Consumer to use the asset, the level of effort to create a given version of an asset, and so forth. The metrics also include size, such as the number of bytes, lines of code, or number of components. Typically, these metrics are stored with the asset in the Repository. Repository: Repository metrics are largely quantitative. These metrics the number of downloads for a given asset version, the number of searches and kinds of searches, and the number of browses from searches, as well as information about which Asset Consumers conducted certain downloads. Other metrics can be Repository activity over a period of time, such as the number of Repository accesses, asset submissions, and so Chapter 11. Manage reusable assets 313 forth over a certain period of time. The Repository can also track the number of problems or defects associated with an asset. Derived for Managers: In general, repositories are not tracking the cost side of asset development. This cost is typically tracked in project management and financial reporting tools. Bringing together the metrics from Asset Consumers, Asset Owners, Producers, Reviewers, and the Repository with costing metrics gives you a foundation for derived metrics. Several of these metrics include project reuse percentage, project productivity gains, and return on investment. This task includes the following three steps: 1. Practitioners provide values: As described earlier, the Asset Owner, Reviewer, and Consumer provide both qualitative and quantitative values for assets. 2. Repository and assets used: Managers, Administrators, Asset Owners, Reviewers, and Consumers interact with the Repository and the assets, therefore, creating the basis for generating reports. 3. Generate report: Reports can be generated graphically or textually. The metrics can be exported from the Repository into reporting tools, or the Repository can render the reports. Managers often require reports on a periodic basis, which generally means repositories need a way to run reporting jobs and send them to the appropriate stakeholders. Repositories must be integrated with portfolio and project management tools to aid in the generation of derived metrics. 11.3 Migration of existing assets In contrast to the ZYX Electronics case study, certain organizations already have a reuse initiative in place. In these cases, there can be additional work and planning needed to migrate existing assets into a new Repository. In this section, we briefly look at several of the considerations to remember when planning this type of a migration. 11.3.1 Migration strategy Next, we discuss a migration strategy. Prerequisites Before starting the migration of existing assets, it is imperative that you have a good understanding (and documentation) of the existing Repository, its user community, business purpose, general structure and schema, size, and types of assets. Considerations Make sure that you: Ensure that you have the right resources to define the migration strategy: – Do they have the authority to speak for the community, database “owners”, and so forth? – What is their internal review and approval process for this migration? Who are the ultimate owners and decision makers? – Is there an internal review process in place and documented for this community or area? 314 Strategic Reuse with Asset-Based Development High-level migration options (define and document): – Will you migrate the entire contents? If not, what is the selection criteria for migration (only high value, reusable items, or all items that have been used within a specific time frame, for example, the last 24 months). This criteria must be documented and distributed to the users in the community. – What is the time frame that you are considering for migration? Do you have timing restrictions? Are you sunsetting the existing Repository? What is your goal: all at once, a complete migration by a specific date, or a certain number of assets per week? If you are staging the migration, will the contents be migrated by community or type of asset? – Is there a cut-over period? If so, how long? – What resources are required for your strategy? Measures of success: – Who makes the decisions on these questions? – Who will ensure that the decisions are documented and communicated? Templates Ensure that you have a: Migration questionnaire to assist the teams in deciding on a migration strategy High-level Migration Strategy document High-level Communication Plan (which can be included in the Migration Strategy document) Deliverables You need to produce a: High-level Migration Strategy document High-level Communication Plan 11.3.2 Asset cleansing, defining, and mapping After a migration strategy has been defined and communicated, look at the assets themselves. The migration provides an opportunity to ensure that the new Repository contains those assets that provide the most value to the organization. As you work through the assets, you also test the structure that has been defined for the new community. Prerequisites You must have Asset Taxonomy documentation. Considerations The steps and considerations to remember during this task include: Create a high-level Architectural Design document If all assets are not being migrated: – Determine the criteria for migrating assets. Examples of criteria include: • Only include assets that have been used within a certain time frame (that is, two months) • Only include high value assets and so forth. Chapter 11. Manage reusable assets 315 – Determine how assets that are not being migrated will be handled: • Will remaining assets be “archived” somehow or just deleted? • Is there a notification process documented for assets that are not moving? Map your assets to your organization’s asset taxonomy: – Where there is no match: • Request additional asset types • Reevaluate the asset Templates You must have an Asset Mapping spreadsheet. Deliverables Ensure that you produce a: Completed Asset Mapping spreadsheet Architectural Design document 11.3.3 Mapping and uploading At this point, we look at the work involved in the actual migration. You must decide whether to use automation to migrate the assets, what to do with assets that are not migrated, how to test, and how to confirm the results. In cases where a significant number of assets need to be migrated, consider using the Asset Manager application programming interfaces (APIs) to create an automated solution. Prerequisites You need the completed Asset Mapping spreadsheet and Architectural Design document. Considerations Consider: Will you migrate data manually or via automation using the provided Asset Manager APIs? You need to define the resources and responsibilities for one or both options. For batch upload, map existing metadata to asset metadata. Determine if an adapter is required to handle additional existing storage types that are not handled as part of the utility. Document the requirements and determine if adapters are available from other sources that can be used as a starting point. Define and document the batch migration process: – Selection criteria, time lines, roles, and responsibilities – Approval process – Funding and resources identified and in place – Communication plan to stakeholders that outlines the process and time line – Define initial or test case for initial batch load (including success criteria) – Testing process – Success criteria defined and documented – Define the phases for the migration with a batch utility following a successful pilot 316 Strategic Reuse with Asset-Based Development Templates Use a: Communication plan Detailed Migration plan Deliverables The deliverables need to be a: Communication plan Detailed Migration plan (including a test migration case scenario) At this point, you must also consider whether it makes sense to first run a test migration before proceeding with a full migration. Steps and considerations for these migrations include: Initial test case migration: – Test case migration is documented and resources are in place – Run test – Success criteria met – Document results and lessons learned – Deliverables: Test plan Full migration: – Lessons Learned from initial migration – Revisit Architecture Design Document (if required) – Revisit and revise Detailed Migration plan (if required) For example, did the initial batch migration results require changes to your overall migration plan as far as scope, rollout phases, timing, and so forth? – Communicate changes to constituents – Deliverables: • Updated Migration plan (if required) • Updated Communication plan (if required) 11.4 ZYX Electronics: Manage reusable assets This section describes how ZYX Electronics implements managing reusable artifacts by using Rational Asset Manager. Chapter 11. Manage reusable assets 317 We discuss how ZYX Electronics: Creates a new customized review process using Rational ClearQuest to involve the “Risk, Security, Audit, and Compliance” Department in the review of open source frameworks Uses Rational ClearQuest Web client to review legal license terms and conditions and to approve the use of open source frameworks submitted to Rational Asset Manager Uses Rational Asset Manager to remove or retire obsolete assets from the Repository Uses Rational Asset Manager Repository statistical capabilities to generate reports and graphs to evaluate Repository usage 11.4.1 Search asset Deon Adminio, the Rational Asset Manager Repository Administrator, explained to ZYX Electronics’ developers how to search for assets in Rational Asset Manager. Refer to 10.2.2, “Search asset” on page 284 for more information. 11.4.2 Review and test asset To manage licensing issues, ZYX Electronics had to implement a mechanism to involve the Risk, Security, Audit, and Compliance Department in the review process for open source frameworks. Richard Compliton, the Director of the Risk, Security, Audit, and Compliance Department, had to be included in the review process, and without his initial authorization, open source frameworks cannot be approved for use within ZYX Electronics. This department was already using Rational ClearQuest to manage and control authorizations for other departments, so during their conversations with Duncan Munchkin, the Development Manager, they decided that the best option to involve them in the review of open source frameworks was to implement a customized review process with Rational ClearQuest via its integration with Rational Asset Manager. Rational ClearQuest is a change management tool that helps development teams to manage software life cycles more effectively. With Rational ClearQuest, users can define automated workflows to control and enforce development processes, helping them to improve team communication and coordination. Duncan, Richard, and Deon agreed to use Rational ClearQuest to create a simple approval workflow called CQApprovalProcess where the first approval comes from the Risk, Security, Audit, and Compliance Department. This new process is integrated with the Rational Asset Manager review process workflow. A.3.2, “Integrating Rational Asset Manager with Rational ClearQuest” on page 665 describes in detail how you can install, configure, and create the review process shown in Figure 11-11 on page 319 using Rational ClearQuest Designer. In addition, A.3.2, “Integrating Rational Asset Manager with Rational ClearQuest” on page 665 details how you can associate this review process to open source frameworks (Framework asset types whose Framework Type category value is Open source) that were created in the Rational Asset Manager Implementation community. 318 Strategic Reuse with Asset-Based Development Figure 11-11 Rational ClearQuest customized review process When a new asset is submitted into Rational Asset Manager and if it has been configured to follow a customized Rational ClearQuest review process, it will automatically create a new review process request in ClearQuest that will go to the first state configured in the Submit action. At this point, the review process passes the control to Rational ClearQuest, so reviewers must use the Rational ClearQuest interface to change the states of the review process (represented on the right of Figure 11-12). Figure 11-12 Synchronization of Rational Asset Manager and Rational ClearQuest states Chapter 11. Manage reusable assets 319 When the Community Administrator configures the synchronization between both review processes, the Community Administrator must map the approved and rejected states of the review process in Rational Asset Manager and ClearQuest as shown in Table 11-1. Table 11-1 Mapping of Rational Asset Manager and Rational ClearQuest states State Rational Asset Manager Rational ClearQuest Approved (green color) Approved Approve Rejected (red color) Draft Rejected This way, when the Rational ClearQuest review process request reaches the Approved or Rejected states, it will automatically move the asset state in Rational Asset Manager to the corresponding state. After Deon configured the integration between the Rational Asset Manager and the Rational ClearQuest review processes following the previous guidelines, Al Aarkashan (the Architect at ZYX Electronics) used the Ant open source framework to test whether the review process just described had been configured correctly. Al checked the submission and approval process in this manner: 1. Al submitted the Ant Framework (Version 1.7.0) to the Implementation community as a Framework asset type with Framework Type category value equal to “Open source” and submitted it for review. 2. Richard Compliton, the Director of the Risk, Security, Audit, and Compliance Department, logged in to the Rational ClearQuest Web interface and verified that there was a new review process request created to review the new Ant open source framework. The new Ant open source framework was created automatically by Rational Asset Manager when Al submitted the Ant Framework asset for review, as shown in Figure 11-13. Figure 11-13 Rational ClearQuest query with Rational Asset Manager assets 3. So, Richard opened the Ant Framework Rational ClearQuest request to see the details as Figure 11-14 on page 321 shows (Rational Asset Manager automatically synchronized the Headline field with the asset name and the Description field with the URL to access the asset details using the Rational Asset Manager Web interface). 320 Strategic Reuse with Asset-Based Development Figure 11-14 Ant Framework Rational ClearQuest request details 4. Richard Compliton clicked the URL link in the Description Field to see the content of the asset. Richard selected the Content tab to see the terms and conditions of the open source framework that were included in the license.txt file as shown in Figure 11-15. Figure 11-15 Content details of the Ant Framework asset 5. Richard opened the license.txt file from the Web interface to check the special terms and conditions of the open source framework. Because Richard needed to have a more detailed review of its content, he changed the state of the review process to Legal (using the ClearQuest action change State → LegalScanRequired and clicked Save) using the Rational ClearQuest Web interface as shown in Figure 11-16 on page 322. Chapter 11. Manage reusable assets 321 Figure 11-16 Changing the state of the Rational ClearQuest review process request to Legal The state change moved the ClearQuest review process request to the Legal state as shown in Figure 11-17. While the review process request was in this Legal state, no other users can change the state. Only Richard Compliton has permissions to change the state to Review Board state and continue with the review process. Figure 11-17 Review process has moved to the Legal state 322 Strategic Reuse with Asset-Based Development If Al had wanted to know the review process state using Rational Asset Manager interface (selecting the Review Process tab), Al can see that the Ant Framework was still in the Review Board state. There is a special link to go to directly to Rational ClearQuest to see the request details. The Review History Link shows that the Rational ClearQuest-driven review process was still in progress as shown in Figure 11-18. Figure 11-18 Review process state in Rational Asset Manager 6. When Richard Compliton finished and accepted the review process of the special legal terms and conditions of the open source license, Richard logs in to Rational ClearQuest Web to complete the legal scan process and moved the review process request to the ReviewBoard state (Change State → Legal Scan Completed). 7. From this state, Patricia Moon, the project manager, who had permissions to move the Rational ClearQuest request to other states, logs in to the Rational ClearQuest Web interface. Patricia did not want developers to use this Ant Framework, because ZYX Electronics had already developed an internal application to provide similar functionality, so Patricia changed the state to Rejected (Change State → Reject). 8. The configuration between Rational Asset Manager and Rational ClearQuest had been set up so that the Rejected state of the Rational ClearQuest request was mapped to the Rejected state of Rational Asset Manager. Therefore, the synchronization between both tools automatically moved the state of the Ant Framework to the Draft state in Rational Asset Manager. Figure 11-19 on page 324 shows how the states were synchronized between both tools. Chapter 11. Manage reusable assets 323 Figure 11-19 Synchronization of Rational Asset Manager and Rational ClearQuest states In the ZYX Electronics example, because Patricia had rejected the review process and made a transition in Rational ClearQuest to the Rejected state, this change was automatically propagated to Rational Asset Manager moving the asset state to Draft. 11.4.3 Publish or deploy asset Because the assets produced and consumed by ZYX Electronics during this first phase were only open source frameworks and code components that cannot be deployed as services to the WebSphere Service Registry and Repository, we will not cover the Publish or Deploy Asset task in this section for the ZYX Electronics case study. We will discuss this task in Part 3, “Service Assets in an SOA” on page 333 of this book when we discuss producing services. 11.4.4 Configure Repository To read details about how ZYX Electronics configured the Rational Asset Manager Repository, go to Chapter 8, “Configure your Asset Repository” on page 195. 11.4.5 Remove asset Two months after starting to deploy and use Rational Asset Manager at ZYX Electronics, Deon Adminio, the Repository Administrator, received various requests from users asking how they can delete an asset that was not being used or was obsolete. According to the asset life cycle described in Figure 11-20 on page 325, Deon explained to them that they had two alternatives with Rational Asset Manager: retire or delete the assets. 324 Strategic Reuse with Asset-Based Development Figure 11-20 Asset life cycle If the Asset Owner and Administrators wanted to maintain the asset in the Repository but have the asset available only to the Asset Owner or to Administrators and not the rest of the users, they must ask the Repository Administrator to change the asset to the Retired state. The Repository Administrator was the only role in Rational Asset Manager with permissions to change any asset to this state. The content of the asset remains available in the Repository to the Asset Owners or Administrators, but the content of the asset cannot be downloaded unless the state was changed again to the Draft state. To move an asset to the Retired state, Deon just had to log in as a Repository Administrator and select the Retire link that is available in the Asset Detail Tools section as shown in Figure 11-21. Figure 11-21 Retire an existing asset Chapter 11. Manage reusable assets 325 If the users wanted to permanently delete the asset from the Rational Asset Manager Repository, they needed to ask the Repository Administrator or the Asset Owner, who are the only roles with Delete permissions, to use the Delete link. After the asset is deleted, it is no longer available in the Repository. To delete an asset, the Asset Owner just had to log in to Rational Asset Manager and select the Delete link that is available in the Asset Detail Tools Section as shown in Figure 11-22. Figure 11-22 Delete assets 11.4.6 Report on asset Three months after starting to deploy Rational Asset Manager at ZYX Electronics, Duncan Munchkin, Development Manager at ZYX Electronics, was having a meeting with Victoria Prezzio (Vice-President of Development at ZYX Electronics), Chuck T. Offilgy (Chief Technology Officer for ZYX Electronics), Cid I. Oreo (Chief Information Officer for ZYX Electronics), and Chris E. Oshman (Chief Executive Officer for ZYX Electronics). Duncan had to present the results and benefits achieved by ZYX Electronics using Rational Asset Manager. Duncan knew from the comments received from developers that they were extremely satisfied with the tool, and it had helped them save time looking for specific assets in a centralized Repository. In the past, the developers spent too much time going to the Internet to look for information or calling other colleagues to learn where the code was. Architects and project managers were also extremely very optimistic with the tool, because now with Rational Asset Manager, they had a way to know the relationships between assets and evaluate the impact that a change in one asset can have in other related assets. Al, the architect, also found it very useful to know which developers were using his frameworks and he planned specific training for the most frequently used frameworks. But because Duncan had to prepare a presentation for the meeting, Duncan thought that it might be a good idea to use the reporting and metrics capabilities included in Rational Asset Manager. Rational Asset Manager users can access different reports about the activity of a specific asset, but Deon wanted to have global metrics and reports to evaluate Repository usage. So he logged in to Rational Asset Manager as a Repository Administrator. Next, he went to the 326 Strategic Reuse with Asset-Based Development Administrator tab to have access to the global metrics available in the Repository Statistics Section as shown in Figure 11-23. Figure 11-23 Repository Statistics list Figure 11-23 represents the list of the reports that can be generated. Deon can select the period of time to use as the basis for the report. To generate the reports, Deon clicked the link for the report that he wanted and the report was automatically generated. This is a list and examples of the reports Deon generated: Repository Contents: This report is used to generate graphs and statistics about assets. It shows the number of assets by community, type, and state as shown in Figure 11-24. Figure 11-24 Report example showing the number of assets by type and state Most of the asset types generated by Rational Asset Manager users were frameworks, and all of the assets were already approved except one asset that was still pending Chapter 11. Manage reusable assets 327 review. Other asset types generated by developers were code components that reused the open source frameworks to build the code. Important: This report is not affected by the selected date range, because it shows the current distribution of assets in the Repository. Asset Activity: This report is used to generate statistics about the number of times that any asset in the Repository had been downloaded and subscribed to as shown in Figure 11-25. Figure 11-25 Asset Repository activity report The latest Version 2.1 of the Spring Framework was the asset that was most used by the developers, because it was the first in the list with the maximum number of downloads. User Activity: This report is used to show how many licenses have been acquired by each user as shown in Figure 11-26 on page 329. 328 Strategic Reuse with Asset-Based Development Figure 11-26 User activity report Al Aarkashan, the architect responsible for loading all Java open source frameworks, was the person most active in using Rational Asset Manager. Search History: This report is used to show the most popular search strings used, listed in order of popularity as shown in Figure 11-27. Figure 11-27 Search history report Because all open source frameworks and code components were stored in the Implementation community, the “Community: Implementation” search string was the Chapter 11. Manage reusable assets 329 search pattern most often used by the Repository users (in order to get a list of all assets belonging to that community). The “Spring” framework, which was the second most common search in the list, was the open source framework most requested by developers. Activity Audit: This report is used to show how many times various actions had been performed over a period of time as shown in Figure 11-28. Deon selected various actions to generate the report and the starting and end dates for each audit. Figure 11-28 Activity audit report The Spring Framework with 5 starts was one of the highest-rated assets by the Rational Asset Manager users. Other open source frameworks with high ratings (5 stars) were the Struts and Hibernate Java frameworks, and also the OpenCobol framework to compile COBOL code. So, Deon just had to copy and paste each one of the previous graphs into his presentation to show his managers the usage of the Rational Asset Manager Repository during the last three months. Deon also exported and downloaded each report as a comma-separated value (CSV) text file and included these files in the documentation to send for the meeting. Providing CSV files to the management team allows them to create other reports and graphs driven by the audit report data. With all of this material and the feedback received from the users, Deon was able to make a magnificent presentation and was congratulated by his managers for the great work. 330 Strategic Reuse with Asset-Based Development 11.4.7 Conclusions and future plans at ZYX Electronics This first implementation of Rational Asset Manager to produce, consume, and manage open source frameworks and code components had positive economical results to ZYX Electronics and demonstrated the high potential benefits of reusing software assets. With only three months and a small set of assets loaded into the Rational Asset Manager Repository, it is difficult to perform calculations and give an exact figure for Return on Investment (ROI). But there are real industrial experiences, similar to the ZYX Electronics case study reusing open source frameworks, that can help us to deduce that its Reuse Strategy can bring positive economical and technical benefits to ZYX Electronics. In particular, there is a paper published by the IEEE, Conventional and Open Source Software Reuse at Orbotech - an Industrial Experience, that explains the experience and results obtained by an Israeli systems development company reusing open source software over a four year period. The paper includes real-world calculations comparing the development effort of building a systematic reuse approach against the effort of developing the same functionality in past projects without any reuse at all. The paper compares these efforts in two components, and the results show that savings might be between 45% to 54%, representing a total savings equal to nine person years. The paper also provides numbers about the additional cost of building reusable assets that it is important to mention: Developing a Black box reusable component costs 160-250% of non-reusable (ad hoc development) software. Mining the existing software doubles the effort required for asset definition. Integration of a Black box reusable component costs 1-3% of ad hoc development. Use of a development tool (rather than an application function) costs up to 15% of ad hoc development. But in spite of these additional costs, the paper clearly demonstrates that the software reuse approach followed by this company contributed not only to cost reduction but also in the developer’s satisfaction. In particular, when software reuse is based on the adaptation of an open source framework, the savings begin immediately (which is no wonder, because there is hardly any development, only search, evaluation, and adaptation efforts). With a successful reuse pilot project, as outlined by ZYX’s Reuse Strategy, the following benefits can be derived, which are in-line with management expectations (described in 2.4.3, “Benefits” on page 30): Reduce the costs of new application development and existing application maintenance significantly through the reuse of existing open source frameworks and code components instead of writing from scratch. Develop a central Repository of searchable software assets (Rational Asset Manager) reducing the time to locate and reuse assets in turn helping to reduce the cost of implementing new application functionalities. Increase standardization in development providing a more consistent use of open source frameworks. Increase application dependability and quality, because open source frameworks and components to be used had been proven and validated for technical experts. Focus on leveraging individual expertise by bringing the experts together to harvest the reusable assets in their realm of knowledge. Reduce development time and bring applications to market earlier to increase revenue to the company. Chapter 11. Manage reusable assets 331 Reduce the time necessary to reuse open source frameworks and components from project to project, therefore, being capable of project estimates with greater accuracy. And the Rational Asset Manager implementation was possible without modifying any development processes already used in ZYX Electronics. The strategy followed to start producing open source frameworks and code components as reusable assets helped other departments to maintain their development processes and way of work, while starting to integrate several of these reusable assets. Benefits experienced by the developers (they were the main consumers of the produced assets) were: They reduced the time spent looking for information and new versions of open source frameworks. Several of the first reusable assets loaded into the Rational Asset Manager Repository implemented tedious and marginal functions that they had implemented by themselves, so they were happy to eliminate these tasks and use existing components instead. Several of the new open source framework assets loaded into the Repository introduced new technology new to them, so they had a change to use state-of-the-art technologies that they might not have brought into the project on their own. They had an easy way to look for the technical expert with deep knowledge of the asset produced (they just had to look for the Asset Owner) in order to ask that person technical questions about how to use it. With the subscription mechanism of Rational Asset Manager, they were automatically informed by e-mail when a new version of the asset was published into the Repository. Nevertheless, these benefits were not possible without management funding support and the commitment of ZYX Electronics’ directors, as well as developer support for the reuse of open source frameworks and components. Involving developers in this Reuse Strategy was to key to the successful deployment of a central Repository. Their involvement also resulted in a configuration suited specifically to their terminology and needs. Thanks to benefits obtained reusing development assets and the management commitment to software reuse, several new asset types were candidates to include in Rational Asset Manager. Following the incremental adoption of reuse that ZYX Electronics had selected to follow, the next step for the deployment of Rational Asset Manager at ZYX Electronics was to include new service asset types and other WebSphere tools to help to transition to a service-oriented architecture (SOA) approach, where service reuse was key. You will see this progression in Part 3, “Service Assets in an SOA” on page 333 of this book. 332 Strategic Reuse with Asset-Based Development Part 3 Part 3 Service Assets in an SOA In this part of the book, we look into the details of producing, consuming, and managing services, which are a key form of reusable assets in a service-oriented architecture (SOA). Part 1: Introduction Part 2: Reusable Assets •Introduction to Asset-Based Development •Adopting Asset-Based Development •Process and Tooling •Configuring Asset Management •Case Study Overview •Produce, Consume, and Manage Assets •Impact and ROI Part 3: Services •Services as Assets •Produce, Consume, and Manage Service Assets Appendixes •Rational Asset Manager Installation and Administration •Process Integration Part 4: Patterns •Patterns as Assets •Produce, Consume, and Manage Pattern Assets Figure P-3 An overview of the structure of the book © Copyright IBM Corp. 2008. All rights reserved. 333 334 Strategic Reuse with Asset-Based Development 12 Chapter 12. Introduction to service assets This part of the book focuses on services in a service-oriented architecture (SOA) from an Asset-Based Development perspective. This chapter provides an introduction to services and related topics that set the stage for the rest of the chapters in this part of the book. This chapter covers the following topics: Setting the context for Part 3, “Service Assets in an SOA” on page 333 SOA, services, and assets What is a service Web services and SOA Types of service assets Roles involved in service asset development Service-oriented modeling and architecture IBM products for SOA implementation © Copyright IBM Corp. 2008. All rights reserved. 335 12.1 Setting the context for Part 3 Next, we discuss how Part 3, “Service Assets in an SOA” on page 333 integrates with the other parts of this book. 12.1.1 How does Part 3 relate to the rest of the book Part 1, “Introduction” on page 1 of this book gives an introduction and the motivation for Asset-Based Development. It explains the business value of strategic asset reuse and gives an overview of the processes and methods used for Asset-Based Development. Part 2, “Reusable Assets” on page 123 of this book explains the basics of Asset-Based Development from a technical perspective. It mentions the types of assets that can be developed and reused in an organization. It gives an overview of the products and tooling that IBM provides to support Asset-Based Development. Part 3, “Service Assets in an SOA” on page 333 builds on Part 1, “Introduction” on page 1 and Part 2, “Reusable Assets” on page 123. Part 2 shows the types of reusable software assets that can exist in an organization. One of those types of assets are services. Part 3, “Service Assets in an SOA” on page 333 elaborates on these service assets by presenting the details of producing, consuming, and managing service assets. Part 4, “Patterns” on page 455 explains a different type of asset called patterns. While designing a service-oriented architecture using service assets, it is common practice to use several patterns as part of the design activities. Furthermore, solutions to common design problems in an SOA might lead to the creation of new patterns. Thus, Part 3, “Service Assets in an SOA” on page 333 and Part 4, “Patterns” on page 455 complement each other in an Asset-Based Development environment. 12.1.2 How does this part relate to SOA If you are aware of what an SOA is, this part of the book will give you an asset perspective of the services in an SOA. It gives an insight into methods, tools, and best practices that can be used to make services more reusable as software assets in an enterprise. It explains how to make effective use of certain “asset-oriented” features of many of the IBM products and how you can integrate the products to produce, consume, and manage services as assets. This part of the book does not explain how to implement an SOA. It does not give a detailed description of the usage of tools and products that are available to implement an SOA. However, it gives a brief introduction to SOA for readers who are not aware of it but are interested in understanding and leveraging the power of SOA- based assets. It provides links to relevant books, articles, and other publications for detailed information about the larger SOA implementation story. 12.1.3 How does this part relate to RUP If you are unaware of Rational Unified Process (RUP) or the Rational Method Composer plug-in for Asset-Based Development, refer to Part 1 and Part 2 of this book, which introduce and explain the importance of this process guidance and associated tooling. Part 3 of this book explains the Rational Method Composer plug-in for Asset-Based Development life cycle phases (produce, consume, and manage assets) from an SOA perspective. In regard to creating SOA solutions, we leverage guidance discussing 336 Strategic Reuse with Asset-Based Development Service-Oriented Modeling and Architecture (SOMA) as found in the RUP/SOMA Rational Method Composer plug-in. As illustrated in Figure 12-1, the RUP/SOMA plug-in is treated as a supporting process for guidance in the development of service assets in the produce phase of the Asset-Based Development plug-in. Therefore, when building service-based reusable assets, we leverage guidance from RUP/SOMA. Note that explaining the RUP/SOMA plug-in in detail is out of the scope of this book. Figure 12-1 SOMA within Asset-Based Development We can also look at the relationship between Asset-Based Development and RUP/SOMA from another perspective. As shown in Figure 12-2 on page 338, the Asset-Based Development life cycle plays a role in each of the phases within RUP/SOMA, for example: In the “Describe the Current Business” phase, you first determine if an existing WebSphere Business Model asset for this portion of the business is already available. In the Realization phase, we can leverage Pattern-based assets to assist in the generation of services. When a service has been completed, we can leverage the Manage aspects of the Asset-Based Development guidance for promoting the service to a runtime Repository. This is certainly not an exhaustive list of examples, but hopefully it shows that assets play a key role in creating SOA solutions. Chapter 12. Introduction to service assets 337 Figure 12-2 Asset-Based Development within SOMA The SOA-Governance plug-in for Rational Method Composer overlaps with the Asset-Based Development Governance plug-in. This part of the book explains the relationship between the two plug-ins. 12.2 SOA, services, and assets Service-based assets are closely related to the concept of service-oriented architecture (SOA). SOA is an architectural style that aims at aligning the business of an organization with the information technology that enables it. In an SOA solution, a service is a repeatable task in a business process. It can be a simple task or a business process by itself. Consider, for example, the process of ordering a book on a Web site. We first have to log on to the Web site, search for the book, add the book to the shopping cart, do an online payment, and log out of the Web site. Here, the individual tasks that are part of the ordering process are the search function, the shopping cart function, the payment function, and the user account management function. From an SOA perspective, each of these repeatable tasks is a service. Note that the payment function can be a process in itself, involving the processing of the payment with the payment gateways. 338 Strategic Reuse with Asset-Based Development The services within an SOA solution need to be reusable across different business processes. Making the services reusable gives the flexibility to change existing processes and implement new processes easily, thus leading to business agility. In the book ordering example, each of the identified services (search, shopping cart, payment, and user management services) can be reused in different processes. For example, a back-end process for ordering stock from the vendors for delivery to the warehouse can be built using the same payment processing service. This reuse not only reduces the time required to automate the new business process, but it also makes it easy to implement changes to the payment process across the multiple business processes in the organization (when there is a change made to the organization policies in relation to the payment processing). In this way, integrating the business as a set of linked services is called service orientation. A formal definition of a service-oriented architecture is: An architectural style for creating an enterprise IT architecture that exploits the principles of service orientation to achieve a tighter relationship between the business and the information systems that support the business. We can thus see that reusable software services are important assets of an organization. By maintaining a Repository of reusable services, organizations can quickly build new processes as a choreography of existing services. When business processes need to be changed, a suitable service can be sourced out of the enterprise’s service Repository and plugged into the right point in the choreography. This makes the business more responsive to changing market needs, reduces the time and cost to automate new processes, and maximizes the return on investment of the service assets. 12.3 What is a service Having seen the importance of service-based assets from a business perspective, let us now see the technical characteristics of a service. There are many additional aspects to a service that we must also consider in the definition of a service within an SOA. The most commonly agreed-on aspects are that services: Encapsulate reusable business functions Are defined by explicit, implementation-independent interfaces Are invoked through communication protocols that stress location transparency and interoperability 12.3.1 Reusable business functions A service can be any business function. In an SOA, however, it is preferable that the function is genuinely reusable. The goal of a service in an SOA is that it can be used and reused by one or more systems that participate in the architecture. For example, while the reuse of a Java logging application programming interface (API) can be described as design time (when a decision is made to reuse an available package and bind it into application code), the intention of SOA is to achieve the reuse of services at: Run time: Each service is deployed in one and only one place and is invoked remotely by anything that must use it. The advantage of this approach is that you only apply changes to the service (for example, to the calculation algorithm or the reference data on which it depends) in a single place. Deployment time: Each service is built one time, but it is redeployed locally to each system or to the set of systems that must use it. The advantage of this approach is increased Chapter 12. Introduction to service assets 339 flexibility to achieve performance targets or to customize the service (perhaps according to geography). 12.3.2 Explicit implementation-independent interfaces The use of explicit interfaces to define and to encapsulate service function is of particular importance to making services genuinely reusable. The interface must encapsulate only those aspects of process and behavior that are used in the interaction between the service consumer and the service provider. An explicit interface definition, or contract, is used to bind a service consumer and a service provider. The explicit interface definition must specify only the mutual behavior that is required for the interaction and must specify nothing about the implementation of the consumer or the provider. By explicitly defining the interaction in this way, those aspects of either system (for example, the platform on which they are based) that are not part of the interaction are free to change without affecting the other system. This implementation-independent interface allows either system to change implementation or identity freely. Figure 12-3 illustrates the use of explicit interfaces to define and encapsulate service functions. Figure 12-3 Service Implementation in an SOA 12.3.3 Communication protocols that stress location transparency SOA does not specify that any specific protocol is used to provide access to a service. A key principle in SOA is that a service is not defined by the communication protocol that it uses, but instead, a service must be defined in a protocol-independent way that allows different protocols to be used to access the same service. Ideally, a service must only be defined one 340 Strategic Reuse with Asset-Based Development time, through a service interface, and must have many implementations with different access protocols. This type of definition helps to increase the reusability of any service definition. 12.4 Web services and SOA SOA represents a conceptual architecture of how to integrate applications. Web services are a specific set of standards and specifications that are one method of enabling SOA. Web services technology is a collection of standards (or emerging standards) that can be used to implement a service-oriented architecture. That is not to say that Web services and SOA are intrinsically linked, because they can be implemented separately. In fact, many significant SOAs are proprietary or customized implementations that are based on reliable messaging and Enterprise Application Integration middleware. For example, IBM WebSphere MQ and IBM WebSphere Message Broker do not use Web services technologies. Also, most existing Web services implementations consist of point-to-point integrations that address a limited set of business functions between a defined set of cooperating partners. The logical links between Web services and SOA are: Web services provide an open standard model for creating explicit implementation-independent descriptions of service interfaces. Web services provide communication mechanisms that are location-transparent and interoperable. Web services are evolving through Business Process Execution Language for Web Services (WS-BPEL), document-style SOAP, and Web Services Description Language (WSDL) to support the implementation of well-designed services that encapsulate and model reusable function in a flexible manner. 12.5 SOA Governance Next, we discuss SOA Governance. 12.5.1 SOA life cycle The IBM SOA Foundation defines a four-phased services life cycle as shown in Figure 12-4 on page 342. Chapter 12. Introduction to service assets 341 Figure 12-4 SOA life cycle From the IBM SOA Foundation: An Architectural Introduction and Overview white paper (see the following shaded box for a link to this white paper): The Model phase includes the process of capturing your business design - from an understanding of business requirements and objectives - and translating that into a specification of business processes, goals, and assumptions, creating an encoded model of your business. The Assemble phase concerns assembling the information system artifacts that will implement the business design. The enterprise architect - working with the business analyst - can begin to convert the business design into a set of business process definitions and activities, deriving the required services from the activity definitions. The Deploy phase includes a combination of creating the hosting environment for service-based (composite) applications and the actual deployment of those applications. This phase includes resolving the application’s resource dependencies, operational conditions, capacity requirements, and integrity and access constraints. The Manage phase addresses the maintenance of the operational environment and the policies realized by the deployed SOA applications. This phase includes monitoring the performance of service requests and the time lines of service responses, maintaining problem logs to detect failures in various system components, detecting and localizing those failures, routing work around them, recovering work affected by those failures, correcting problems, and restoring the operational state of the system. The manage phase also includes managing the business model and tuning the operational environment to meet the requirements of the updated business design. Note: For more information, refer to IBM SOA Foundation: An Architectural Introduction and Overview at: http://www-128.ibm.com/developerworks/webservices/library/ws-soa-whitepaper/ The rationale for SOA Governance is that in order to achieve the benefits of SOA, it is important to establish chains of responsibilities, authority, and communication to empower people to bring about the necessary changes for service orientation and to sustain those changes, so that the organization does not default to business as usual. As seen in 342 Strategic Reuse with Asset-Based Development Figure 12-4 on page 342, SOA Governance is applied to all of the four stages in the life cycle of services. 12.5.2 SOA Governance defined SOA Governance is an extension of IT Governance that is specifically focused on the life cycle of services, metadata, and composite applications in an organization’s service-oriented architecture. SOA Governance extends IT Governance by assigning decision rights, policies, and measures around the services processes and life cycle to address concerns, such as: Service registration Service versioning Service ownership Service discovery and access Deployment of services and composite applications Security for services The agility provided by SOA also provides a set of challenges to the IT organization. Undisciplined development and deployment of services can do more harm than good. Hence, organizations must address a set of key questions if they are to obtain value from SOA: 1. How do organizations regulate the deployment of composite applications? 2. What organizational change is required? What new organizational roles and structures facilitate service identification, design, and sharing? 3. How do you organize the IT function to build and leverage service-oriented capabilities? 4. What metrics support the investment, maintenance, vitality, and sharing of services? 5. How do businesses decide to invest in service creation and maintenance? As a specialization of IT Governance, SOA Governance addresses how an organization’s IT Governance decision rights, policies, and measures need to be modified and augmented for a successful adoption of SOA. 12.5.3 The governance life cycle SOA Governance is setting decision rights and measures for those individuals who execute SOA processes. However, executing governance intentionally meets our definition of process; it requires a sequence of events through which the rights and measures are specified. The governance process enables organizations to make considered decisions about the structure and rigor of executing governed processes. For example, the governance process roles are different than the IT or SOA process roles. An SOA architect in certain organizations can be granted certain decision rights around the design and use of services, but does not, in that role, carry out the governance process. The process of governance has its own life cycle, which is distinct from the process life cycle being governed. See Figure 12-5 on page 344. Chapter 12. Introduction to service assets 343 Figure 12-5 The SOA Governance life cycle As shown in Figure 12-5, the governance process consists of four phases, which we discuss next. Note the process is repeated cyclically. Each cycle provides an opportunity for improving the governance approach: Plan: As previously discussed, good IT and SOA Governance results in better alignment of the IT organization and the needs of the business. It is in the plan phase that the needs and priorities of the business are documented along with the role of the IT organization in meeting these needs. Also, the state and maturity of the current IT organization governance is assessed, and gaps are identified. The governance vision and strategy, as well as the roadmap and plan, are documented from all of this analysis. In the plan, the governance measures are put in place. These measures are used to assess how well the IT organization is aligned with the business and how well the business needs are met. Define: In the define phase, the detailed governance plan is put in place for the current cycle. In particular, the processes to be governed are specified and prioritized, and the decision rights, policies, and measures for these processes are defined. In preparation for the next phase, detailed deployment plans are set. In certain cases, these plans can include specifying or updating the structure and staffing of the SOA Governance Center of Excellence (CoE). Enable: The enable phase is when the defined solution is rolled out to the organization. In this phase, roles are assigned, the staff is trained, the decision rights can be automated in workflow tools, and the metrics collection and report mechanisms are put in place. Measure: In this phase, the governance approach is executed and tuned. The governance metrics that show alignment with the business are gathered. These metrics are used in the next cycle to revise the governance approach. 344 Strategic Reuse with Asset-Based Development 12.5.4 Relationship between Asset Governance and SOA Governance Asset governance was introduced in Part 1, “Introduction” on page 1 of this book. It mentioned the importance of governance in an Asset-Based Development approach and also detailed the different stages in the asset-governance life cycle. By now, you have realized that Asset Governance and SOA Governance both have plan, define, enable, and manage stages. Figure 12-6 relates SOA Governance to asset, IT, and business governance. Figure 12-6 Relationship between the governance levels As seen in Figure 12-6, there is an overlap between SOA Governance and Asset Governance. This means that SOA Governance deals with the aspects of Asset Governance, because an SOA treats services as reusable assets. The processes, roles, and competencies that might be required to produce, consume, and manage service assets might be similar to those defined by Asset Governance. However, the scope of SOA Governance is much more than just Service Asset Governance. It includes process, policy, role, and responsibility definitions for a larger set of activities that are part of the service life cycle in an SOA. Similarly, an Asset Governance body in an organization can perform governance activities for assets that might not necessarily be services, even though the organization might be undergoing an SOA transformation. This distinction explains the non-overlapping portion of the Asset Governance ellipse in Figure 12-6. SOA Governance and Asset Governance can coexist in an organization. SOA Governance can address the issues of Asset Governance at relevant stages in its life cycle. For example, during the define stage of SOA Governance, asset repositories can also be defined for service assets. Workflows can be defined for publishing services to the repositories. Policies can be defined for service reuse. Based on the IT Governance policies of an organization, there can be common members in the SOA Governance and Asset Governance boards to align the activities of both the governance bodies. Chapter 12. Introduction to service assets 345 12.6 Types of service-based assets Assets related to services can be of various types. Common types of these assets are: Service interfaces Basic services (service interface and implementation) Choreographed services Business services Composite Business Services A service interface is just a standards-based interface for services. It does not contain any implementation attached to it. The implementation aspects are left to the application that consumes this asset. The importance of having service interfaces as assets is to lay a standard for performing certain tasks across the organization. This standard enhances the interoperability between applications, because one application that needs to interoperate with another application knows what to expect from the other application based on the standard interface. Furthermore, even if application integration is unimportant, it makes sense to have service interfaces defined for certain tasks that are likely to be implemented by different applications in the organization. Having the interfaces and data types defined reduces the development time needed to create them. At a physical level, a service interface asset is usually a Web Service Description Language (WSDL) file along with the related XML Schema Definition (XSD) files. A basic service is a service that performs a certain generic task. As a reusable asset, it is used as a building block for implementing process choreographies. It is usually implemented using the Web service standards in order to make it easy to integrate into applications that want to consume this service. At a physical level, a basic service asset contains a service interface (WSDL and XSD files) and implementation files. A choreographed service is a process implementation that is exposed as a service. It is built using basic services. It has the business logic that drives the business process in it. These assets can be used as part of other larger process choreographies. The industry standard for implementing process choreographies is using the Business Process Execution Language (BPEL). At a physical level, a process implementation contains the files related to BPEL and the files related to the basic services. A business service is a business function whose execution can be adapted at run time based on business policy and user context. It is a matured form of a choreographed service that is more dynamic and flexible than the choreographed service. It is designed at the business level to represent a discrete business function. It is derived from disparate IT resources, such as existing systems, custom applications, independent software vendor (ISV) systems, and third-party services. It is provisioned through multiple communication channels, such as Web portal, Business-to-Business (B2B), Fax, or any other channel relevant to the business. It is a reusable asset in the sense that it can be combined with other business services to create loosely coupled applications and processes. To understand these features of a business service, look at the example shown in Figure 12-7 on page 347. A Credit Check service is a business function to evaluate the credit score of a consumer. It encapsulates a business process that performs credit score lookup, applies credit rules to determine acceptance, updates the consumer credit profile, provides notification of acceptance or failure. It is derived from disparate IT resources and comprised of Web services, such as credit lookup (third-party), credit eligibility (existing), update profile (packaged application), and notification (custom). It can be provisioned through a Web portal 346 Strategic Reuse with Asset-Based Development channel and existing customer relationship management (CRM) systems. It can be composed into Loan Origination solutions and other consumer loan applications. It can be made flexible and adaptable through policies, such as a rapid pre-approval for qualified low risk consumers, that is, consumers with a credit score over 720 or an “A” rating. The "Credit Check" Business Service represents a discrete business function to evaluate the credit score of a consumer Business Policies Communication Channels Web Portal IVR Role-Based Users CRM Pre-Approval Policies Risk Assessment Policies Business Service Technical and industry standards compliance CSR • WS-I for service interfaces • MISMO, IFW for messages and transactions Consumers Operational Capabilities Credit Lookup: 3rd Party Service Credit Eligibility: Legacy System Customer Profile: Packaged CRM Customer Notification: Custom J2EE Figure 12-7 Business service example A composite business service is a collection of business services that work together with existing applications to provide a specific business solution. Figure 12-8 on page 348 shows a pictorial representation of the concept of Composite Business Services. The service performing a generic task in Figure 12-8 on page 348 can be either a basic service or a choreographed service, which is not as dynamic as a business service. Chapter 12. Introduction to service assets 347 Figure 12-8 Composition of business services A composite business service is a composition of business services that are selected and executed dynamically to deliver adaptive and personalized behavior. The individual business services can be derived from existing, third-party, or custom-packaged applications. Thus, Composite Business Services enhance reuse of IT assets by leveraging these business service assets. Furthermore, by being able to create Composite Business Services incrementally, organizations have the advantage of reduced risk in building composite business service assets. When compared to assets developed as traditional monolithic applications, Composite Business Services provide greater flexibility at a lower cost due to their ability to dynamically adapt behavior at run time using policies, instead of hard coding new or duplicate functionality. By reusing Composite Business Services to build larger business processes, organizations can achieve faster time to market, because Composite Business Services automate part of the business process and are easy to adapt and configure using business context and content-based policies. To summarize, a composite business service has the following attributes: Composable: Composite Business Services support an asset-based approach to building an SOA solution leveraging services exposed from existing, ISV, third-party, and partner assets to incrementally automate a core business process. Subscribable: Users subscribe to Composite Business Services, and the subscribers of services are managed with an integrated entitlement model that enables licensing, packaging, and billing of business level services. Describable: Composite Business Services and the constituent business services are described via metadata that can be annotated and published in a catalog for easy discovery; this type of metadata must include business, application, technical, and informational architectural elements. Flexible: Composite Business Services are built with points of variability. These points of variability within the underlying business processes are dynamically implemented based on an externalized set of directives. These directives are derived from business, application, technical, and informational architecture elements including quality of service, 348 Strategic Reuse with Asset-Based Development industry semantics, and business policies. In this case, a policy is a business rule that constrains the behavior of a business process. Visible: Composite Business Services provide contextual visibility to service behavior so that business services can be optimized or evolved during execution. Governable: Composite Business Services have the ability to be managed and versioned through their life cycle from creation through upgrades to end of life. 12.7 Service-oriented modeling and architecture (SOMA) Building an SOA requires certain activities and artifacts that are not part of traditional object-oriented analysis and design. SOMA fills this gap by describing a set of modeling, analysis, and design activities that are required to build an SOA. It defines a three stage process involving the activities required to identify, specify, and realize services (and their compositions), components, and flows. Figure 12-9 summarizes these activities. Figure 12-9 Service-oriented modeling and architecture activities 12.7.1 Rational Method Composer plug-in for SOMA The RUP for SOA plug-in is a commercial offering from IBM that has been developed to bring the unique aspects of SOMA 2.4 to the RUP commercial method. The plug-in is included with Rational Method Composer and provides tooling and guidance that integrate the activities and techniques provided by SOMA. RUP/SOMA is based on RUP and provides variations (contributions, extensions, or replacements) for service orientation. 12.8 IBM products for implementing service assets IBM provides a wide range of products and tooling to enable SOA-based solutions. While a complete discussion of all of the products is out of the scope of this book, this section highlights the key products and tools that help in the production, consumption, and management of service-based assets. Chapter 12. Introduction to service assets 349 We discuss the following products in this context: Rational Method Composer plug-in for SOA Governance Rational Software Architect WebSphere Integration Developer WebSphere Process Server WebSphere Business Services Fabric WebSphere Business Modeler WebSphere Business Monitor WebSphere Service Registry and Repository WebSphere Studio Asset Analyzer Rational Asset Manager 12.8.1 Rational Method Composer plug-in for SOA Governance The Rational Method Composer plug-in for SOA Governance V1.0 helps identify appropriate best practices, merged with your existing IT processes, to provide proper governance of the capabilities introduced with SOA. The end result is a project plan to create your organization’s unique governance framework. The SOA Governance methodology described in the plug-in is extensive, covering the full life cycle and many of the key processes. However, based on the specific needs of the organization, projects can be scoped to include only a subset of the phases, process activities, and tasks. One of the first tasks is to tailor the methodology to create a project plan based only on the components of the methodology that are necessary to satisfy the defined scope of the project. Providing a description of all of the features provided by the RUP for SOA Governance plug-in is beyond the scope of this book. For a full description of the RUP for SOA Governance plug-in features, refer to the information provided with the plug-in. 12.8.2 Rational Software Architect and Rational Software Modeler Rational Software Architect and Rational Software Modeler include all of the capabilities that are needed by the software architect, the designer, and the developer. They are part of a larger picture representing the IBM Rational offering for software development, as we can see in Figure 12-10 on page 351. 350 Strategic Reuse with Asset-Based Development Figure 12-10 High-level view of tools and roles Rational Software Architect includes: Rational Software Modeler: This is the tool for designers. It offers all Uniform Modelling Language (UML) 2 modeling capabilities, diagrams, and Model Driven Development (MDD) features (transformations and patterns authoring). It is based on a basic Eclipse project, such as UML 2 and Eclipse Modeling Framework (EMF). Rational Application Developer: This is the tool for developers. It includes all development features, such as Web development, Java 2 Platform, Enterprise Edition (J2EE) development with Enterprise Java Beans (EJBs), Web services development, JavaServer Faces (JSF) development, UML visualization, component automated test, and run time test environments, such as WebSphere Application Server. Eclipse Web Tools Platform (WTP): This platform includes basic tooling for Web developers. It includes source editors for HTML, JavaScript™, cascading style sheet (CSS), JavaServer Pages (JSP), SQL, XML, document type definition (DTD), XML Schema Definition Language (XSD), and Web Services Description Language (WSDL); graphical editors for XSD and WSDL; J2EE project natures, builders, models, and a J2EE navigator; a Web service wizard and explorer, and Web Services Interoperability Organization (WS-I) test tools; and database access and query tools and models. In addition, Rational Software Architect offers other features, such as the selection of ready to use transformations and patterns. For detailed information about these features, refer to Part 4, “Patterns” on page 455 in this book. 12.8.3 WebSphere Integration Developer WebSphere Integration Developer is a common tool for building SOA-based integration solutions across WebSphere Process Server, WebSphere Enterprise Service Bus (ESB), and WebSphere Adapters. From an asset development perspective, the primary purpose of the Integration Developer is to produce service-based assets. However, it integrates with asset Chapter 12. Introduction to service assets 351 management products, such as Rational Asset Manager, to help you consume and publish assets from and to the Repository. All of the types of service assets can be created and tested using the Integration Developer. It provides an Eclipse-based integrated development environment to code, test, debug, and deploy SOA solutions. The product is based on industry standards for Web services, such as SOAP, WSDL, XSD, and Web Services Business Process Execution Language (WS-BPEL), thus, enabling reuse of the services developed using its environment across multiple platforms. WebSphere Integration Developer simplifies integration by using an industry standard programming model called Service Component Architecture (SCA). SCA is a specification that describes a model for building applications and systems using an SOA. It decouples service implementation and assembly from the details of infrastructure capabilities and from the mechanisms for invoking external systems. By developing service-based assets as SCA components: Consumers can integrate the asset as part of their application assembly in a standard way. Client programs can use a standard API to invoke the services. Integration developers can configure the deployment time parameters, such as service binding information, without having to change the code. Thus, service reuse can be enhanced to a great extent by using the SCA programming model to render existing IT assets as service components. WebSphere Integration Developer enables rapid assembly of business solutions by wiring reusable service components. It enables the construction of process and integration solutions using drag-and-drop technology without the need to have a working knowledge of Java. This capability helps in the quick development of service assets that involve process choreography, such as business services and Composite Business Services. 12.8.4 WebSphere Process Server WebSphere Process Server is a high-performance business integration server. From an asset development perspective, it provides the runtime environment that is required to host basic services and process choreography-based assets. This integration can happen in the produce and consume phases of the asset development life cycle. The WebSphere Process Server contains WebSphere ESB, which internally contains the WebSphere Application Server. Hence, services developed on WebSphere ESB or WebSphere Application Server can be deployed without any changes on the Process Server. Similar to the Integration Developer, the Process Server support for Web services is based on standards, such as SOAP/HTTP, SOAP/JMS, WSDL 1.1, and WS-* Standards, including WS-Security and WS-Atomic Transactions. It also provides the run time for SCA components. The WebSphere Process Server supports the WS-BPEL standard for process choreography and provides certain IBM proprietary extensions of the standard in a number of areas, including human tasks and Java snippets. WebSphere Integration Developer provides the development environment to support the usage of these features. 352 Strategic Reuse with Asset-Based Development 12.8.5 WebSphere Business Services Fabric WebSphere Business Services Fabric is an SOA platform for assembly, deployment, management, and governance of business services. Using the WebSphere Business Services Fabric, business level services can be assembled into extended, cross-enterprise business processes and solutions that are dynamically personalized and delivered based on the business context, content, and contract of the service request. As an end-to-end platform for Composite Business Services, the Business Services Fabric consists of two complementary software packs: the IBM Business Services Foundation Pack and the IBM Business Services Tool Pack. These packs work together to simplify the business, technology, security, governance, and process interoperability issues associated with business services in an SOA. To help ensure a robust and extensible SOA platform, the Business Services Fabric includes WebSphere Process Server and WebSphere Integration Developer for the composition and deployment of flexible, service-oriented business processes. IBM Business Services Foundation Pack provides the integrated runtime and manage-time environment: Provides a highly scalable runtime policy definition and enforcement engine that enables dynamic service assembly and service behavior adaptation based on content, context, and contract. Controls and automates entitlement of business services for subscribers, enabling creation, control, and management of service packages to subscribers across the ecosystem. It integrates with leading security and identity management products. Provides visibility and monitoring of service-oriented processes and applications. It includes multi-perspective views and enables the drill-down analysis of events and exceptions. Provides end-to-end governance of business services through design time, run time, deploy time, and manage time. Stores and manages business services, policies, and business service entitlements. IBM Business Services Tool Pack provides the design-time environment and tools: Provides tools to maintain, manage, and govern services metadata, subscribers, policies, and governance processes. Enables domain-experienced software architects to model, create, publish, and manage industry-specific service metadata models and policies around data, processes, resources, policies, and domains. Provides a visual assembly environment for creating and managing industry specific business service metadata models and policies. The Industry Content Packs provide reference business services templates optimized to industry standards that contain the following prebuilt SOA assets: Reference business services templates that include definitions of business assertions, business roles, and business channels; all based on a common industry business glossary Industry business glossary that presents a taxonomy of industry terms, with associated relationships and properties Industry standards-based data types and Web service interfaces that enable interoperability across disparate systems in the enterprise ecosystem Chapter 12. Introduction to service assets 353 Industry-common services that can speed up the delivery and assembly of service-oriented business solutions. Industry business object model (BOM) used as a semantic model for design and development of service-oriented business solutions Knowledge assets that can accelerate the use and extension of the prebuilt SOA content contained in the industry content packs Content packs are currently available for the Healthcare, Insurance, Telecom, and Banking domains. Figure 12-11 shows how the pieces of the Business Services Fabric product come together to provide a platform for developing Composite Business Services (CBSs). The lowest layer consists of the foundation pack and the tools pack, which run on the Process Server (not shown in Figure 12-11). The industry content packs are developed over the foundation pack to provide industry-specific reusable assets that help in the quick development and delivery of industry-specific CBS solutions. The CBSs are developed using the business services, basic services, and ontology assets in the industry content pack. The CBSs use the dynamic assembler for policy-based dynamic endpoint selection, basic services, and APIs for functions, such as subscription management from the foundation pack. CBS developers use the Web-based administration tool and the Composition Studio, which is an Eclipse plug-in for Integration Developer, to create, manage, and govern service metadata and policies. Industry Composite Business Service Portfolio Trade Payments Payments Status Fund Transfer Bill Payments …Other Industry Composite Business Service IBM Industry Content Packs Product • Reference Business Services Templates Composite Business Services Industry Content Packs …Other Industry Packs IBM Tools Pack for WebSphere Business Services Fabric IBM Foundation Pack for WebSphere Business Services Fabric W ebSphere Business Services Fabric Flexible, adaptable, loosely coupled business solutions Available through Global Business Services, System Integrators, and ISVs Pre-built, industryspecific SOA assets Industry solution accelerators that are optional extensions to the WBS Fabric SOA platform for Composite Business Services Fabric incorporates other SOA Foundation products Figure 12-11 IBM platform for Composite Business Services 12.8.6 WebSphere Business Modeler WebSphere Business Modeler helps organizations to fully visualize, comprehend, and document their business processes. Rapid results can be obtained through the collaboration functionality, where subject matter experts team to clearly define business models and eliminate inefficiencies. The Business Modeler is used in the produce phase of the asset development life cycle. It is used to model business processes for assets that involve process choreography. It provides a clean transfer from the business to IT by providing the option to export the completed model as a BPEL file, which can be used as a starting point by the IT team to develop the asset in the Integration Developer. 354 Strategic Reuse with Asset-Based Development Business process models are assets by themselves, which can be maintained in a Repository, such as Rational Asset Manager. They can be stored as Business Modeler projects for later reuse, or they can be stored as image files for reference. Having the business process models ready for reuse reduces the time needed to create business services and their composites. 12.8.7 WebSphere Business Monitor WebSphere Business Monitor helps in monitoring business processes in real time. It provides a visual display of business process status with alerts and notifications to key users that facilitate continuous improvement of the business processes. The monitor is controlled through a customizable dashboard implemented as WebSphere Portal pages that are visually intuitive, featuring scorecards, key performance indicators, and gauges. While it is primarily used for process management, from an asset management perspective, the monitor can be used to view and analyze the metrics related to usage of service assets to gain insight on the benefits gained through reuse. 12.8.8 WebSphere Service Registry and Repository IBM WebSphere Service Registry and Repository is a tool that enables better management and governance of your services. WebSphere Service Registry and Repository enables you to store, access, and manage information about services and service interaction endpoint descriptions (referred to as service metadata) in an SOA. This information is used to select, invoke, govern, and reuse services as part of a successful SOA.This service information includes traditional Web services that implement Web Services Description Language (WSDL) interfaces with SOAP/HTTP bindings, as well as a broad range of SOA services that can be described using WSDL, XML Schema Definition (XSD), and policy decorations, but can use a range of protocols and be implemented according to a variety of programming models. You can use WebSphere Service Registry and Repository to store information about services in your systems, or in other organizations’ systems, that you already use, that you plan to use, or of which you want to be aware. WebSphere Service Registry and Repository includes: A service registry that contains information about services, such as the service interfaces, service operations, and parameters A metadata Repository that has the robust framework and extensibility to suit the diverse nature of service usage 12.8.9 Rational Asset Manager Rational Asset Manager is an asset management tool that can be used to store not only service assets but any other kind of software assets in your organization. For more information about the Asset Manager, refer to Part 2, “Reusable Assets” on page 123 of this book. From an asset development perspective, WebSphere Service Registry and Repository serves as a runtime Repository for service metadata while Rational Asset Manager serves as a development time Repository. Chapter 12. Introduction to service assets 355 12.8.10 WebSphere Studio Asset Analyzer WebSphere Studio Asset Analyzer is an application metadata Repository derived from the static analysis of source code and the configurations of the database and transactional systems in which the applications run. It consists of the following components: Source scanners running on z/OS, and, optionally, distributed scanners running on AIX or Windows Metadata Repository in DB2 on z/OS WebSphere applications running on z/OS, AIX, and Windows systems, which provide the user interface, impact analysis engine, and optional distributed scanners Figure 12-12 shows the major components of WebSphere Studio Asset Analyzer that take part in the process of collecting inventory, performing analysis, and presenting metadata about software artifacts. Figure 12-12 Major functions and components of WebSphere Studio Asset Analyzer The first step is to inventory your applications: Analyze source and Java bytecode to capture relevant information about the objects in the application (program names, data stores, program tokens, data elements, control transfers, relationships between programs and data, program metrics, and so forth). Capture system configuration information to provide context. Store this metadata in a DB2 database. As part of the process, figure out what is missing or inconsistent in your inventory (missing programs, bad JCL, program name clashes, and so forth). 356 Strategic Reuse with Asset-Based Development After inventorying an application, its metadata becomes the source of application insight, which can be used for, among other things, rapid application understanding and change impact analysis. It is accessible in multiple ways: People access this application insight through a browser interface Other tools and programs use a Web service interface or make direct DB2 SQL calls Chapter 12. Introduction to service assets 357 358 Strategic Reuse with Asset-Based Development 13 Chapter 13. Producing service assets This chapter provides best practices, insights, and tooling capabilities for producing service assets in an service-oriented architecture (SOA). We discuss how services can be reused as assets to produce larger assets and solutions, Also, we focus on the features of IBM products that help you produce service assets: Creating service assets Service-oriented Modeling and Architecture (SOMA) insights for asset development Creating Composite Business Service assets Testing SOA assets Publishing service assets to the Repository Case study: SOA Service Reuse at ZYX Electronics © Copyright IBM Corp. 2008. All rights reserved. 359 13.1 Creating service assets Chapter 12, “Introduction to service assets” on page 335 gave you an overview of Service-oriented Modeling and Architecture (SOMA). SOMA enabled by the Rational Unified Process (RUP)/SOMA plug-in for Rational Method Composer can be used to identify, specify, and realize services in an SOA. We discuss insights into the SOMA process for Asset-Based Development next. IBM provides a wide range of tooling to create service artifacts. Important: Because there are a number of books written about creating basic services and service choreographies, this chapter focuses only on the creation of Composite Business Services. For detailed information about creating the types of services, refer to the following books: Building SOA Solutions Using Rational SDP at: http://www.redbooks.ibm.com/abstracts/sg247356.html?Open WebSphere Version 6 Web Services Handbook Development and Deployment at: http://www.redbooks.ibm.com/abstracts/sg246461.html?Open Business Process Management: Modeling through Monitoring Using WebSphere V6.0.2 Products at: http://www.redbooks.ibm.com/abstracts/sg247148.html?Open Technical Overview of WebSphere Process Server and WebSphere Integration Developer at: http://www.redbooks.ibm.com/abstracts/redp4041.html?Open 13.2 SOMA insights for asset development In this section, we provide certain insights about RUP/SOMA for asset development. We do not intend to explain the SOMA process in detail. We highlight the areas in RUP/SOMA that are of relevance for Asset-Based Development. Both the RUP/SOMA and the Asset-Based Development plug-ins define roles to perform the tasks that they describe. There might be overlap between these role definitions, because SOA views services as reusable assets. Based on the governance policies of your organization, you might adopt a subset of these roles that is suitable for your needs. As shown in Figure 13-1 on page 361 and Figure 13-2 on page 362, we can view the relationship between RUP/SOMA and Asset-Based Development from two perspectives. In Figure 13-1 on page 361, we see that we can follow RUP/SOMA as an approach to build a reusable asset. 360 Strategic Reuse with Asset-Based Development Figure 13-1 A look at RUP/SOMA inside of Asset-Based Development In the case of Figure 13-2 on page 362, we can see that the Asset-Based Development guidance can be used throughout RUP/SOMA. Chapter 13. Producing service assets 361 Figure 13-2 A look at Asset-Based Development within RUP/SOMA In the following sections, we look in more detail at the Service Identification, Service Specification, and Service Realization phases of RUP/SOMA. 13.2.1 Service identification This phase focuses on the identification of candidate services from the set of assets from both business and IT. It has three approaches to identify services: Domain decomposition: Domain decomposition is a top-down approach that takes the domain models and decomposes them into subsystems to arrive at candidate services. Reusable assets are involved in a number of ways in this approach, for example: – Reuse of business models – Reuse of Component Business Models – Reuse of Uniform Modelling Language (UML) models – Industry standards – Patterns to automate the navigation between levels of abstraction 362 Strategic Reuse with Asset-Based Development Goal-service modeling: Goal-service modeling is a meet-in-the-middle approach to identify services that were not identified using the other two approaches. Reusable assets are involved in a number of ways in this approach, for example: – Reuse of business models – Reuse of Component Business Models – Reuse of UML models – Industry standards – Patterns to automate the navigation between levels of abstraction – Existing services – Existing systems, such as packaged or custom applications – Existing code and components that are suitable as the basis for services Existing asset analysis: Existing asset analysis is a bottom-up approach that involves a process of leveraging existing assets. Reusable assets are involved in a number of ways in this approach, for example: – Existing systems, such as packaged or custom applications – Industry standards – Existing services – Existing code and components that are suitable as the basis for services Searching for assets In order to analyze assets, you need to locate them in your asset and service repositories. Services can be identified from custom applications or packaged applications. If the assets are maintained in a Repository, such as the Rational Asset Manager, it might be easy to search for specific assets for analysis using the Repository’s search features. Refer to Part 2, “Reusable Assets” on page 123. If you use WebSphere Service Registry and Repository as the runtime Repository for services, you can use the query features in the WebSphere Service Registry and Repository to find deployed services. WebSphere Service Registry and Repository provides search/browse feature for services with varying degrees of criteria driven by any metadata associated with the service. A common example of service information gathered or searched is that of documents conforming to the Web Services Description Language (WSDL) or XML Schema Definition (XSD) standards. Architects and developers can also annotate this technical information in the registry and Repository with extra information using formal classification techniques, such as using the Web Ontology Language (OWL) standard or by adding other content that is defined following the XSD standards. Classification of services allows for meaningful groupings of the services based on the business objective. If you have business services deployed in your organization, you can use the search features in WebSphere Business Services Fabric to find business services and Web services stored in the business services Repository. Note that ideally all of the service asset artifacts are stored in Rational Asset Manager. Hence, you might have to search for assets in one central asset Repository. However, you do have the option to search in specific service repositories to make use of their unique search features. Chapter 13. Producing service assets 363 Note: For detailed information about locating services in WebSphere Service Registry and Repository and WebSphere Business Services Fabric, refer to Chapter 14, “Consuming service assets” on page 399. Using WebSphere Studio Asset Analyzer for asset identification Chapter 12, “Introduction to service assets” on page 335 introduced WebSphere Studio Asset Analyzer as an application metadata Repository derived from the static analysis of source code and the configurations of the database and transactional systems in which the applications run. By inventorying your application source and organizing metadata about your heterogeneous software assets in an accessible way, WebSphere Studio Asset Analyzer helps you identify assets for reuse. When the process of inventorying the applications and their configurations is complete, WebSphere Studio Asset Analyzer is ready to analyze the assets. Your approach to the discovery of assets for reuse with WebSphere Studio Asset Analyzer can start with either data or programs. You can start with relevant data of interest. One way to think of a business process is to consider it as a set of states of the associated data together with the transformations of this data. If you know part of the data that is created by or consumed in the business process, you can use WebSphere Studio Asset Analyzer to help you find the related set of applications and other data stores. Perhaps you know the name of a dataset or DB2 table that contains the data that your Web service needs to read or update. In this case, you can start by finding the applications that access this data source. You can then run an impact analysis on a dataset or DB2 table, the record, or a related data element to find other applications, data elements, and data stores through which this data flows. Or perhaps you know only that your Web service needs to deal with employee number, part number, order number, and so forth. You can construct searches of the data elements defined in your applications using the various likely permutations of the name. You can then run an impact analysis on one or more data elements and find other data elements into which values are moved and the applications containing these data elements, and other data stores. You can start with applications or screens that you know are part of a business function that you want to reuse in your Web service. Applications can have various call sequences. These call sequences are called run units in WebSphere Studio Asset Analyzer. Software assets associated with run units include screens, transactions, data stores, and other applications. Run units often embody and enable one or more business functions. For example, a run unit can include screens for order entry, which return data to applications that validate that data and which call other applications that embody the business logic and interact with the data stores. This characteristic makes the run unit a useful construct when you consider reuse of a business task or process. When you find any candidate element in the run unit, you can quickly get a look at that element in the context of its related elements. Figure 13-3 on page 365 shows an example of a run unit diagram. 364 Strategic Reuse with Asset-Based Development Figure 13-3 Run unit diagram in WebSphere Studio Asset Analyzer There are several ways to find specific assets in WebSphere Studio Asset Analyzer: If you know the name of the asset for which you are looking, you can search on that name. If you know only part of the name, you can use wildcards and search attributes to find the asset. If you know only certain aspects of the asset but not the name, you can drill down in a likely container, such as the enterprise application archive (EAR) file, one of which must contain the asset for which you are looking. WebSphere Studio Asset Analyzer can help you to find: Which applications perform screen or data I/O or both Which applications appear to be the hub applications Which applications are the largest, most complex, or most often invoked by other applications Chapter 13. Producing service assets 365 The advanced search allows searching on interesting attributes, as well as asset name patterns. You can, for instance, select CICS programs that perform or do not perform terminal I/O. Extending this idea, you can combine these attributes in custom queries to identify just the programs in which you are interested. After finding candidate assets from the asset Repository, you can proceed with the Existing Asset Analysis process to identify candidate services. A detailed discussion about this process is out of the scope of this book. The key thing to remember is that even if an organization is not yet leveraging reuse, the organization likely has code that is suitable to find its way into an asset (service or otherwise). WebSphere Studio Asset Analyzer can be a key tool to help you analyze the code and artifacts that are already tested, understood, and in use within your organization. WebSphere Studio Asset Analyzer can provide you with the insights needed to further leverage that investment. Tooling considerations In addition to the tools mentioned in this section, Rational Software Architect and its integration features with other tools, such as Rational RequisitePro and WebSphere Business Modeler, can be used to perform service identification. Rational Software Architect’s RequisitePro integration allows you to work on RequisitePro projects from within the Software Architect Integrated Development Environment (IDE). Almost all of the capabilities provided by the RequisitePro native client are also provided, except administration capabilities and the ability to create new projects. There is a Requirement perspective, which supports working with RequisitePro requirements and the linkage (traceability) of design elements to requirements. 13.2.2 Service specification This phase of SOMA is focused on the selection of candidate services to be developed into full-fledged services. These services are then allocated to subsystems identified in the identification phase and then decomposed into sets of components for implementation. This phase involves three stages: Service specification Subsystem analysis Component specification During the service specification phase, it is important to remember the following points. Service assets in an SOA become part of the enterprise portfolio and are reused in projects across the organization. When service assets are reused, the service specification is used by application developers to understand the interactions and requirements of the service or to provide a different implementation for the service that conforms to the service interface. Hence, it is important to make sure that the service, message, and collaboration designs that are performed as part of the service specification are generic enough to be reused across the enterprise and not very specific to the particular project for which it is being developed. Using industry standard information and messaging models (such as HIPAA, ACCORD, and so forth) is one way of making sure that the specification is reusable. A key aspect of the Service Model artifact, which must be developed during specification, is the capture of the dependencies between services. As a part of the service model, a number of dependencies are naturally captured. These dependencies can be as obvious as the relationship between a service and its specification or more complex, such as the logical 366 Strategic Reuse with Asset-Based Development relationship between two independent services, because they both implement the same specification. If the Existing Asset Analysis phase resulted in identification of deployed services in the WebSphere Service Registry and Repository, you can use the impact analysis feature in the WebSphere Service Registry and Repository to analyze the dependencies between these services. The vast majority of objects that are stored in the WebSphere Service Registry and Repository do not exist in isolation. Each object can define a number of predefined relationships (also known as modelled relationships) or user-defined relationships that connect them to other objects in the WebSphere Service Registry and Repository, forming an object graph. These relationships indicate dependencies that exist between the objects in the object graph. They can be traversed in order to determine which objects might be affected by changes to other objects in the graph. However, for any non-trivial object graph, attempting to perform this task manually is a time-consuming process. The impact analysis functionality within the WebSphere Service Registry and Repository can automatically traverse the relationships in an object graph to determine the list of dependent objects. More specifically, the impact analysis component recursively navigates the relationships that originate from a specified object, building a list of all of the reachable objects in the object graph. It is this list that is returned as a result of running impact analysis. It represents the collection of objects in the WebSphere Service Registry and Repository that might be affected by a change to the specified object. This can help in the existing asset analysis process to understand the impact of choosing to reuse a specific service from the Repository. During service specification, it is important to identify the non-functional requirements for the desired Qualities of Service (QoS), which can be related to security, performance, and availability. When the service asset is consumed, the non-functional requirements will be used to commit resources for service components that offer the services and to fund the realization and maintenance of service components that will ensure the delivery of the QoS over time. For more general information about non-functional requirements for assets, refer to Part 2, “Reusable Assets” on page 123 of this book. When candidate services have been selected and documented in the (categorized) Service Portfolio, we then need to determine which ones must be exposed as services. Although, in theory, any candidate service can be exposed by exporting its interface as a service description, not every candidate service must be. It might not be economically and practically (non-functional requirements might be compromised) feasible to do so. In particular, the naive decision to expose “all methods from all classes” will result in an overwhelming and often unmanageable number of services leading to the “Service Proliferation Syndrome”. This creates huge performance and service management problems, not to mention the fact that we might be giving away the company’s intellectual capital. Moreover, we must remember that there is a cost associated with every service that we choose to expose: the funding, governance, and the underlying infrastructure (its security, performance, and management) of the service and the components that will implement them must be taken into account. Hence, a service litmus test is conducted on the candidate services to make the right exposure decisions. Table 13-1 on page 368 summarizes the steps involved in a service litmus test. Chapter 13. Producing service assets 367 Table 13-1 Steps involved in service litmus test Name Description Ensure service is business-aligned The first test of a service is about its business alignment. If the service is not traceable back to a business task or goal, it might not yield the benefits required for SOA implementation. The following questions, if all are answered positively, mean that the service is aligned with the business: Does the service provide a required business functionality that supports business processes and goals? Is the business willing to fund the service through its life cycle: provisioning, management, governance, and maintenance? Is the business willing to share the service internally or externally with clients or business partners? For example, implications might be additional costs, business secrets, security, and so forth. Are there existing or future opportunities within the enterprise to reuse the service? Ensure service is composable Composability is defined as an attribute that enables the service to participate in a service composition. Applications can be created using both types of composition: Does the service meet the required QoS attributes as defined in the composition’s non-functional requirements? Is the service stateless? Is the service self-contained? Can the service be deployed independently to meet a business goal although it might cooperate with other services at run time to perform business processes? There are no implicit dependencies of the service on other embedded functionality. All dependent services are either replaceable or self-contained. Is the service’s implementation technology-neutral? Technology-neutral means that the service does not impose support of nonstandard (and unknown to the consumer) protocols or devices, for example, the constituent component requires intervention through a nonstandard application interface. This test applies only when the service is deployed in the consumer’s environment. For example, a business provides an image retrieval service to its customers. It can provide this capability to its subscribed customers via a Web service. Alternatively, the business can hand over to its customer the image retrieval capability exposed as a Web service and a collection of images. Here, the customer will be burdened by the implementation of the technology search. 368 Strategic Reuse with Asset-Based Development Name Description Ensure service has an external description The most basic property of a service is that it has an externalized service description. The externalized service description can either be generated automatically via tools or manually: Does the service have an externalized service description that is distinct and separate from the underlying physical implementation? A current example of this is WSDL. Can the service be discovered and bound using the service description? Does the service description contain metadata about itself? The service description must be self-sufficient and contain or reference all of the information necessary to understand the message exchange between the consumer and the provider of a service. Ensure service is reusable Can this service be used by the business stakeholder within all processes where its function is required? Ensure service is technically feasible Technical feasibility ensures that the service can actually be realized (implemented and deployed) according to functional and non-functional requirements using available technologies: Is the implementation and management effort for the service reasonable and readily achievable given either the requirements or infrastructure of the implementation? This is done after the realization’s technical feasibility exploration. Candidate services that pass all four parts of the Service Litmus Test must then be exposed as services in the SOA. There can be candidate services that did not pass the Service Litmus Test but which are still implemented as services. Service Litmus Test is an aid to determine which services to expose; if a business chooses to expose candidate services that did not pass the Service Litmus Test, the implication is that benefits associated with an SOA will not be realized and the organization might end up spending resources on assets that might not give returns from reuse. Candidate services that do not meet the Service Litmus Test will have to be implemented, because they are required to fulfill business needs. They can be implemented as methods on service components and not require the generation of WSDL or other forms of service definitions; or they can be used as non-exposable entities. While design patterns can be incorporated any time during the design, the service specification stage is a good time to start. Patterns in UML can be transformed to code using the transformation capabilities in Rational Software Architect. You can also create your own model to text transformation in Rational Software Architect. These transformations are reusable assets that help improve developer productivity. For a detailed discussion about pattern assets, refer to Part 4, “Patterns” on page 455 in this book. Tooling considerations Rational Software Architect is the tool that is primarily used for specifying services. UML is a generic language, designed for all possible software systems, applications, and solutions. Although it is possible to represent services using only UML, it is a better idea to use a specific profile designed for services, because it specializes the modeling language to the Chapter 13. Producing service assets 369 task. Therefore, when we need to represent, analyze, and design an SOA solution with IBM Rational modeling tools, we can use the UML profile for Software Services. We recommend that you use this profile mainly in conjunction with the service identification and service specification phases of SOMA, but not with the service realization phase. Therefore, services are identified and specified here. Even if this specification is well detailed, it does not represent a White box view or realization of services. This profile extends an existing UML element (we can call them meta classes) by defining new stereotypes that provide additional semantic and visual representation on UML meta classes. In Figure 13-4, we can observe these stereotypes and which meta classes they extend. Refer to the official documentation for the formal specifications of this profile. Figure 13-4 UML Profile for Software Services Note: In Version 6 of the Rational Software Architect, this profile was provided as a tool add-in (through IBM developerWorks). In Rational Software Architect Version 7, this profile is provided automatically with the product. For a complete description of the profile, refer to: http://www-128.ibm.com/developerworks/rational/library/05/419_soa/ Note that there are few differences between Rational Software Architect Version 6 and 7 for this profile; stereotypes, such as <<serviceModel>>, have been added in Rational Software Architect V7. 370 Strategic Reuse with Asset-Based Development 13.2.3 Service realization The realization phase in SOMA is focused on the completion of component design to be ready for component implementation. This phase involves making realization decisions for each of the service components that have been identified and specified in the earlier phases of SOMA. These decisions are beyond the “buy versus build” decisions that involve the selection of one of the several ways of realizing a service, such as wrapping existing functionality, subscribing to a service that provides the functionality, and so forth. As a best practice, SOMA recommends the service model be realized using a design model. This provides the ability for the designer and implementer to apply patterns to the design model and model additional capabilities and structures before generating implementation artifacts. Fine-grained mapping of existing assets You must not forget that few solutions are built without consideration to existing applications that either will provide functionality to support the solution or with which the solution must interact. Therefore, it is vital that existing applications that will be reused as part of any solution are cataloged, and their functionality is identified. With a service-oriented solution, there are multiple ways to integrate new services with existing functionality. We demonstrate the following methods in Figure 13-5: Wrap existing function as a service. In this case, we are want to leave the function as is, but use tools or middleware to expose the existing function as a service. For example, IBM provides the capability to expose existing CICS transactions as SOAP Web services. Wrap and replace existing function with a service. In this case, we wrap a function as we have just done, but we use the resulting service specification to redevelop the service at a later date, replacing the original service and having clients redirected to the new implementation. Use an adapter more amenable to service invocation. In certain cases, it is not possible to wrap a function and expose it as a service, but it might be possible to wrap the function in something that you can integrate, such as a message queuing interface or the Java Connector Architecture (JCA). This action allows new services to access the function in place. Integrate the function into the service. Obviously in certain cases, it is possible for the new service to access the existing function in place, simply using the function as a logical component within the implementation of the service. Figure 13-5 Fine-grained mapping of existing assets The third and fourth options provide the most flexibility, because they use the existing function but do not continue to expose the function “as is” to clients. However, the first and second options can introduce issues with wrapping existing functions as services, because the performance of Web service protocols and mismatches between native data formats and XML can introduce performance concerns. Chapter 13. Producing service assets 371 You need to analyze existing software assets and their dependencies and interfaces in order to determine if changes are required to support the business functionality. For example, in order to create a Web services interface for an existing implementation of a business function, analysis might involve the examination of the composition and flow of online transactions or batch jobs, or persistent data stores that help perform that function. The current design of these existing applications might need to change to support the functionality. You also need to identify any potential barriers to creating a Web services interface with the desired quality of service. For example, a monolithic batch implementation of a business function might require sub-second response time when invoked as a service. In certain cases, however, it is expedient to develop an existing service partition where a set of low-level existing functions are exposed individually as services. This partition is only accessible to higher level services that utilize the functions in presenting a more granular business-aligned specification to consumers. This encapsulation of the existing functions must be seen as a temporary solution and must only be undertaken if the performance characteristics of the wrapping technology is well understood. During the realization of assets, it is important to know the layer in the architecture to which the service will be reused. Knowing the layers in which their asset resides, developers know on what services they can rely in the coding environment. As a rule, components must not make use of features provided by components on a higher layer, because this makes it difficult to replace the higher layers without changing the lower ones. Addressing reuse challenges with WebSphere Studio Asset Analyzer The basic rationale for WebSphere Studio Asset Analyzer and other tools, such as Asset Transformation Workbench, is to help address the technical challenges related to “change complexity” involved in reusing existing assets. By automating portions of the analysis and transformation process, the cost of the exercise of changing existing software for reuse might drop to the point where it becomes feasible to modernize and transform applications in ways that were not feasible when using the previous manual method. WebSphere Studio Asset Analyzer can be used to address reuse challenges caused by technical factors, such as: Intellectual control: Certain applications in your organization are probably better understood than other applications. How well applications are understood can be a function of whether your team has spent time working with them recently, the quality of your documentation, and the application’s size and complexity. When you do not have sufficient knowledge about an application, the risk and cost of transforming it is higher. The knowledge gap can involve basic information, including: – – – – What programs make up your application What data these programs use What interfaces are available today Where the business logic (rules) reside Intermingled business logic: The business logic that you want to use might be sprinkled across a number of programs and intermingled with screen or data I/O and related data validation, which can make it more difficult to isolate for reuse. Application pattern: Your application’s pattern might not be optimal for the kind of reuse that you want to perform. In particular, you might have business tasks handled in batch mode, which complicates the effort to offer them as synchronous services. Here are examples: – Your application writes transactions to a journal, and the journal is then processed in batch mode at a later time, typically at night. – Multiple business tasks are done in one job step as an optimization of I/O processing 372 Strategic Reuse with Asset-Based Development – Your batch application assumes data transformations in a specific sequence, that is, A and B must run before C, but you only want to reuse C in your service. – Data might not be immediately accessible, for example, if the application uses sequential files; your program must read the file from the beginning. Run unit remediation Whether starting with data or applications, an analyst or developer can use WebSphere Studio Asset Analyzer to review the run unit to determine what modifications (if any) are required before reusing the run unit. Additional work that might be required can include: Identifying data validation assumptions from screen interactions and ensuring that the data validation is done somewhere, potentially as part of the contract with the calling service Separating the business logic that you want to reuse from what is not relevant Finding business rules that span a single source module and grouping them in a way that enables reuse Removing screen calls down in a call chain and replacing the screen calls with error return codes WebSphere Studio Asset Analyzer provides information to the analyst or developer to enable the analyst or developer to manually do these remediations. WebSphere Studio Asset Analyzer’s companion product, the IBM Asset Transformation Workbench, can help to automate many of these activities. If you have used WebSphere Studio Asset Analyzer to identify existing assets for reuse, you can use the program structure diagram and the graphic runtime flow diagram in WebSphere Studio Asset Analyzer to understand the dependency between the assets. Tooling considerations Rational Software Architect’s modeling, patterns, and transformation capabilities are used in the SOMA realization phase. Service components and their relationships are designed in UML by using relevant design patterns and are prepared for transformation to the next level of abstraction by using the appropriate profiles. 13.3 Creating a composite business service asset This section gives you an overview of the various activities that are involved in developing Composite Business Services. It is out of the scope of this book to provide a step-by-step detail of the various tasks involved in developing a composite business service. However, this section intends to provide a high-level summary of the tasks to show how Composite Business Services can be composed from existing assets and to highlight the attributes of the composite business service that make it easy to reuse. This section includes the following key activities: Modeling a composite business service Assembling a composite business service Deploying a composite business service We describe the management of service assets in Chapter 14, “Consuming service assets” on page 399. Chapter 13. Producing service assets 373 13.3.1 Modeling a composite business service Composite Business Services are modelled using the SOMA process. We described the SOMA process with supported tooling with an emphasis on Asset-Based Development in the section 13.2, “SOMA insights for asset development” on page 360. This section provides further insights on SOMA from a composite business service perspective. As mentioned earlier, existing assets can be identified and analyzed during the identification phase for reuse by the current composite business service. The WebSphere Business Services Fabric Industry Content Packs contain reusable assets in the form of industry-specific business services, basic Web services, interfaces, and business models. The assets within the Industry Content Packs are based on standards, and while modeling Composite Business Services using these assets, you can closely align with the standards. In addition, sample reference implementation is provided within the Industry Content Packs showing how these assets collectively can be used to create an SOA solution. Identifying the industry content pack assets that can be reused in a composite business service has an impact on the development time, quality, and reliability of the composite business service. For more information about reusing the industry content pack assets, refer to Chapter 12, “Introduction to service assets” on page 335. The business process is one of the core pieces in an SOA implementation. As a reusable asset, a composite business service provides generic implementation for part of a larger business process. The business process that the composite business service implements is modeled using the WebSphere Business Modeler tool. Models by themselves are reusable assets. If the process models from the business services that are used to compose the composite business service are maintained in an asset Repository, they can be reused to create the models for the composite business service and thus reduce the modeling time. The model is created by business analysts and IT architects and gives a business perspective of the process. It forms the basis for identifying potential services which work together to accomplish the process. In order to identify candidate services from functionality in existing applications, the relationship between the business process and existing applications must be understood. Refer to the RUP/SOMA plug-in for RMC for more details about how to perform this mapping. You can visualize the business process model created in WebSphere Business Modeler in UML. Rational Software Modeler (or Rational Software Architect) accesses the Business Modeler project and creates the UML business use case and skeleton business use case realizations. This is useful to allow the users of Software Modeler to see the business process models in UML format. In addition to the Existing Asset Analysis, you can use the other techniques for service identification described in the RUP/SOMA to identify the services that are required by a composite business service. During the specification phase of a composite business service, in addition to the obvious SOMA tasks of designing the interfaces, their dependencies, exposure details, namespaces, and so forth, it is important to specify the policies and assertions that are relevant to the scope of the composite business service. You can use these policies to define the dynamic behavior of the composite business service at run time. The definition of these policies can require that you define certain assertions. You need to identify and document whether to reuse an assertion from the Industry Content Pack or to extend the domain ontology with new assertions. 374 Strategic Reuse with Asset-Based Development You can make the realization decisions for the services. The WebSphere Business Services Fabric Industry Content Packs provide interfaces for services without providing the implementation. This avoids multiple interfaces for the same service to be published to the Repository for potential service clients to look up, while allowing different applications to provide custom implementations. Realization decisions need to be made on the implementation of these services. The functionality for this type of a service can be provided by open source software or a commercial product that can be wrapped as a service, in which case, the decision might have been made as part of the identification phase. The implementation of the composite business service is preceded by the detailed design activities similar to those performed for traditional J2EE applications using the principles of object-oriented analysis and design. This can require the use of design patterns, which is detailed in Part 4, “Patterns” on page 455 of this book. The data model might be designed for the composite business service using Rational Data Architect. The inputs and outputs of the services that were specified in the service model can be used as input for designing the data model for the composite business service. 13.3.2 Assembling a composite business service Assembling a composite business service involves the following tasks: Implementing the business process choreography Implementing the services and the user interface Assembling the composite business service in WebSphere Business Services Fabric Tip: The WebSphere Business Services Fabric leverages the Service Component Architecture (SCA) programming model, and the process can be implemented using Business Process Execution Language (BPEL). The model from the Business Modeler tool is exported as a BPEL file. This file acts as the basis for the development team to implement the composite business service. This BPEL file is imported into WebSphere Integration Developer tool. Integration Developer provides a visual interface to create and edit BPELs. As an architect or a developer working on the BPEL, you might never have to see or know the contents inside a physical BPEL file. WebSphere Integration Developer provides an easy to use drag-and-drop-based interface to work with BPELs. Note: While the BPEL for the business process can be created from scratch in WebSphere Integration Developer, using the process model exported from the Modeler increases the accuracy of the transition of the model from business to IT and also reduces the implementation time. Because Composite Business Services are compositions of business services, the simplest composite business service is a straightforward wiring of these business services to accomplish the business goal of the composite business service. However, typically there are additional services that might be required as part of the choreography. The BPELs of the existing business services are reusable assets, which might be reused as part of the choreography for the composite business service. This is implied by the fact that the business process models of the business services are reused in creating the models for the composite business service. The BPEL now needs to be completed by attaching the interfaces to the partner links to the various activities in it. This requires interfaces (WSDL files) and data types (XSD files) to be created. The UML representation of the service model from the SOMA process as described Chapter 13. Producing service assets 375 earlier in the section 13.2, “SOMA insights for asset development” on page 360 can be used as input for the transformation capabilities in Rational Software Architect to transform the services to WSDL files and Java skeleton implementations. Figure 13-6 shows the typical transformations that you can use to move from one level of abstraction to the next. Figure 13-6 Using transformations to convert models to code Figure 13-6 shows that the service model can be transformed to WSDL files, and Web service skeleton code can be generated using these WSDL documents. Also, the design model, which contains the detailed designs for each of the service-oriented parts in the service model, namely, the service consumers and service providers, can also be transformed to source code using transformations in Rational Software Architect. You can also create your own model to text transformations in Rational Software Architect and reuse them as assets. For more information about how to create your own transformations, refer to Part 4, “Patterns” on page 455 of this book. Note: For detailed information about how to use the features of Rational Software Architect for performing the SOMA tasks, refer to Building SOA Solutions Using Rational SDP, SG24-7356, at: http://www.redbooks.ibm.com/abstracts/sg247356.html?Open The interfaces and datatypes are used for several tasks during development: The interfaces are attached to the partner links in the BPEL. The data types are used for typing the various variables in the BPEL. They are used to generate the implementation for the services in Integration Developer. These documents are used by Integration Developer to generate the corresponding Java source code files. They form the basis for invoking the services that are defined in the interfaces. This means that all service clients will use these documents to invoke the service. These documents are used in assembling business services and their composites using the Composition Studio tool that is part of the WebSphere Business Services Fabric. 376 Strategic Reuse with Asset-Based Development When the service has been implemented and is ready for deployment, these documents are published to the WebSphere Service Registry and Repository to serve as runtime metadata for clients that might want to use the service. Note: Care must be taken to use the correct namespaces and names for the various elements in the WSDL and XSD documents, because they are reused in several other tasks during development. Changes to these documents at a later point of time have an impact on various pieces of the solution. A complete and reviewed service model document can help you produce these artifacts correctly. The service model might have identified the existence of service interfaces (and implementations) in the WebSphere Business Services Fabric Industry Content Packs or in the asset Repository. These interfaces need to be sourced from the identified sources for reuse. After the BPEL is complete, you have to create the SCA assembly for the composite business service in the Integration Developer. The assembly diagram will give you an end-to-end view of the composite business service, with the business process wired to all of the referenced services in it. The assembly diagram is used to provide the implementation details, such as the binding information, the endpoints, and other transaction details for the services referenced by the BPEL. Tip: The BPEL process that is implemented is a generalized process. The BPEL process designed until now does not have dynamic capability support. For example, there is no conditional logic provided in a BPEL process to determine which set of services to call if the customer is a gold level customer compared to a silver level customer. If you are using the WebSphere Business Services Fabric and require dynamic capability support, you need to use the SCA Dynamic Assembler component in Assembly editor while composing the application. WebSphere Business Services Fabric leverages the SCA model and provides a Dynamic Assembler component, which simplifies the business service programming model. Using the SCA Dynamic Assembler component eliminates the static binding between service consumers and the service provider. The SCA Dynamic Assembler enables dynamic policy assembly and service selection based on the context, content, and contract. The SCA Dynamic Assembler provides business agility through the policy-driven runtime assembly of business services. You can test the BPEL in the integrated test environment by using Integration Developer, without having to provide an implementation for all of the services. The Integration Developer gives you the option to use emulators for the services referenced by the BPEL. Alternatively, you can provide mock implementations for the services and use them to test the correctness of the flow of the BPEL. The composition of a composite business service can be tested through mock services and emulators without having any knowledge of how the service has been or will be implemented in reality. This decoupling of the choreography from the actual implementation of the services makes Composite Business Services flexible SOA assets that allow the business process to be changed at any time without having to consider the technicalities of the actual service implementation. Implementing the services and the user interface Integration Developer provides a feature to create the implementation files for a service from the interface (WSDL) and datatypes (XSD) that were used by the process choreography. These files can be used by application developers as the starting point for coding the business logic. Chapter 13. Producing service assets 377 The implementation is usually based on micro design that is based on traditional object-oriented analysis and design using artifacts, such as the class diagram, sequence diagram, and design patterns. As shown in Figure 13-6 on page 376, you can use the transformation features in Rational Software Architect to generate skeletons for your services from the design model. The server-side implementation of the composite business service is independent of the presentation layer that can be used as the front end for the composite business service. Any technology or framework that is capable of locating and executing the composite business service can be used to implement the user interface for the composite business service. The composite business service is usually exposed as a Web service using SOAP/HTTP. WebSphere Business Services Fabric Assembling the composite business service involves the creation of business level service metadata for the composite business service and publishing it to the business service Repository through the WebSphere Business Services Fabric governance process. It involves the following key activities: 1. Use the WebSphere Business Services Fabric tools to create service metadata, such as channels, roles, and policies. Configure the WebSphere Business Services Fabric using the governance manager. This involves creating the organization, roles, namespaces, business service project, and other related metadata. 2. Import the SCA module into Composition Studio. 3. Attach channels, roles, and assertions to the various services in the composite business service. 4. Create the policy assertions, which are policies that were identified during the identification and specification of services in SOMA, by using the Composition Studio. 5. After all of the business-centric service metadata has been created in the Composition Studio, you have to publish it to the business service Repository through a governance process. The governance process ensures that the business services and metadata created by the users follow a review process and eventually get published to the business service Repository or get rejected back to the user who submitted them. 6. When the service metadata has been published to the business service Repository, you can configure the SCA assembly to use the dynamic assembler to route service requests using the Integration Developer. The dynamic assembler selects suitable endpoints for the service requests based on the context, content, and contract attached to the service request. Thus, you can see that the composite business service externalizes business level service metadata, such as channels, roles, policies, assertions, and so forth, to a Repository giving the Asset Consumer the flexibility to change them during consumption without having to change the existing code or write new code. For example, policies based on non-functional requirements, such as performance, reliability, interoperability, security, and manageability, are created in the Composition Studio and stored in the business service Repository. The composite business service then uses the WebSphere Business Services Fabric dynamic assembler to select the correct endpoint based on the context and content of a specific request. This separates the business logic required to implement the non-functional requirements from the BPEL and from the service implementation code. This makes it easy to reuse the composite business service in different business environments, because changing these policies does not require any code changes. 378 Strategic Reuse with Asset-Based Development Note: If you use the WebSphere Service Registry and Repository for registering services deployed in your organization, you can source the interfaces and data types from the WebSphere Service Registry and Repository. Figure 13-7 summarizes the composite business service development tasks. Figure 13-7 Producing composite business service assets As seen in Figure 13-7, the business process model in WebSphere Business Modeler is exported as a BPEL, which is imported into the WebSphere Integration Developer. The BPEL and SCA assembly wiring are completed in parallel with service implementation in the WebSphere Integration Developer. The composite business service is then assembled in the Composition Studio and published to the business services Repository. Figure 13-7 also shows that the service metadata can be sourced from WebSphere Service Registry and Repository. Service invocations in the BPEL are routed through the dynamic assembler, which at run time, selects a suitable endpoint based on the context, content, and the contract associated with the request. The Rational Asset Manager is shown as the central Repository where all service artifacts are stored. The business process models, service interfaces, implementation artifacts, and reusable metadata in the form of ontology files that are used through the rest of the composite business service creation process can be sourced from the Rational Asset Manager. The Rational Asset Manager Eclipse plug-in helps developers source the relevant Chapter 13. Producing service assets 379 assets in WebSphere Integration Developer. Rational Asset Manager can be integrated with WebSphere Service Registry and Repository to publish and synchronize service metadata with the service Repository. These links between the products are not shown explicitly in Figure 13-7 on page 379. 13.3.3 Deploying a composite business service A composite business service is typically packaged as set of J2EE applications. These applications contain the SCA modules, service interfaces, implementations (WAR files), and components that can be used by the service implementation. These applications are deployed on WebSphere Process Server. You configure WebSphere Process Server and other middleware based on the requirements of the composite business service just as you do for traditional J2EE applications. The WebSphere Business Services Fabric needs to be configured with the service metadata for the composite business service to dynamically locate and execute the services. This metadata is exported as .fca (fabric content archive) files from the business service Repository using the WebSphere Business Services Fabric tools and packaged along with the composite business service deployables. The composite business service asset typically contains the following artifacts: The source code for the asset, which includes service implementations, generated code for the process implementation, user interfaces, and other code artifacts The service metadata for the WebSphere Business Services Fabric (.fca files, which contain the channels, roles, policies, and so forth for the composite business service) The scripts to build source code and configure the Process Server and other middleware that might be required for the composite business service to run (such as DB2, MQ, and so forth) The asset documentation Packaged assets can be published to the Rational Asset Manager Repository. For more information about publishing the assets to the Repository and for management aspects of service assets, refer to Chapter 15, “Managing service assets” on page 425 in this book. We describe customizing the composite business service for consumption in detail in Chapter 14, “Consuming service assets” on page 399. 13.4 Testing service assets in an SOA Testing SOA applications introduces unique challenges that are not found in traditional applications. However, the scope of this book is limited to testing individual services rather than testing applications based on SOA. From an Asset-Based Development perspective, consider the following insights while testing services in an SOA. Testing for reusability As it has been mentioned several times in this book, services are treated as reusable assets in an SOA. Hence, the tests performed on services need to test for reusability of services. Services can be reused in different styles, as a Black box, White box, or Gray box. We 380 Strategic Reuse with Asset-Based Development describe these styles further in Chapter 14, “Consuming service assets” on page 399. Test cases can be written based on the reuse style of the service. Industry standards are key drivers for reusability. Using relevant industry standards enhances the chances of reusability of a service. For example, Web services can follow the Web Services Interoperability Organization (WS-I) standards to ensure that they are interoperable across multiple platforms. WS-I is an open industry organization chartered to promote Web services interoperability across platforms, operating systems, and programming languages. Test cases can be written to ensure relevant standards compliance. Potential consumers can use any of the various points of variability of the services that awe describe in Chapter 14, “Consuming service assets” on page 399. Test cases must be written to test these various points of variability. Because reusable assets services can be deployed in a variety of target environments, test cases can be written to test the services in the various environments in which they are expected to be reused. This can involve various client technology and operational environment considerations. Testing services at various levels You might have to test services at various levels: service components, atomic and composite services, business composition, and end-to-end. Testing at each level enables you to locate and fix defects at the point where they were introduced, which helps you find and fix defects early. Testing must be an iterative process that continues throughout the life cycle of the application. Code reviews and inspections must be done for each code drop along with unit and regression testing. Service composition tests do not need to wait all of the service implementations that are part of the composition are available for testing. The composition can be tested using mock services that simulate the behavior of the actual service using the interfaces that have been specified during the design stage. Testing Composite Business Services poses challenges that are close to those that are found in the end-to-end testing of full-fledged applications. Beyond testing the process automation, the ability to access the service through multiple channels, the dynamic behavior of the service based on the various contexts and content of the service request, and the policies that govern this dynamic behavior all need to be tested. For example, Composite Business Services using the Web portal channel might have to be tested for compatibility with multiple browsers. Consider another example where there might be a policy governing the business service that directs specific high priority customers to a high performance service. Test cases need to ensure that the composite business service adapts its behavior at run time and selects a suitable service to process a request. Composite Business Services might also have to be tested for non-functional requirements. However, these requirements differ based on the consuming application. A best practice is to document a set of benchmarks based on historical information and the industry trends about what type of requirements are expected in the consuming environment and test the asset against those benchmarks. For example, a specific industry trend is around 10000 real-time requests through the portal channel per minute with 24x7 availability. The consuming applications might have slightly different requirements and different operational environments. However, by testing the composite business service based on known trends and the most common and expected operational environments, the chances of its reusability get enhanced. Chapter 13. Producing service assets 381 13.4.1 IBM products for SOA testing The IBM Rational Software Development Platform (SDP) supports SOA testing with a portfolio of modular, open standard base products. Use the following tables to help determine the tools that can assist you in unit, functional, and system testing. Tools to assist in unit testing are shown in Table 13-2. Table 13-2 Tools to assist in unit testing Area Tools Defect management/metrics Rational ClearQuest Performance Rational Performance Tester Code inspector/static analysis Rational Application Developer: Code Review Java Runtime analysis metrics Rational PurifyPlus™ Rational Application Developer Test automation Rational Application Developer with Rational Component Test Automation Rational Functional Tester Test management Rational ClearQuest Rational Manual Tester Change management Rational ClearCase Requirements tracking Rational Requisite® Pro Tools to assist in functional testing are shown in Table 13-3. Table 13-3 Tools to assist in functional testing Area Tools Source control/change management Rational ClearCase Defect tracking Rational ClearQuest Test management Rational ClearQuest Rational Manual Tester Test automation Rational Functional Tester Code inspection Rational Application Developer: Code Review Metrics Rational ClearQuest Rational PureCoverage® Rational Application Developer Tools to assist in system testing are shown in Table 13-4. Table 13-4 Tools to assist in system testing 382 Area Tools Defect management Rational ClearQuest Performance Rational Performance Tester Strategic Reuse with Asset-Based Development Area Tools Test automation Rational Functional Tester Test management Rational Test Manager Rational Manual Tester Metrics and reporting Rational Project Console (Dashboard) Requirements tracking Rational Requisite Pro Customer interaction programs Design reviews, residency, and visitations Change management Rational ClearCase Note: For more information about these tools, refer to Building SOA Solutions Using Rational SDP, SG24-7356, at: http://www.redbooks.ibm.com/abstracts/sg247356.html?Open 13.5 Publishing service assets to the Repository Next, we discuss publishing service assets to the Repository. 13.5.1 Repositories in the life of a service asset In Chapter 1, “Introduction to Asset-Based Development” on page 3, 1.6, “Asset repositories” on page 12 mentions the importance of an asset Repository in an Asset-Based Development environment. This section highlighted the benefits of using a Repository, such as Rational Asset Manager, and mentioned the use of a Repository for services in an SOA. During their life cycle, service assets are stored and managed in various repositories (in addition to the Rational Asset Manager) serving different purposes. In this chapter, you learn about many of the key repositories that are used during the lifetime of a service and also the relationships between them. Rational Asset Manager is a development time registry containing assets that are used by development teams. When service assets are produced, they are moved into the Rational Asset Manager Repository. Developers can search and source reusable assets from the Rational Asset Manager during the development process. Service-oriented applications at run time might need to find services suitable for their business requirement based on QoS factors or certain business policies. Services might need to be monitored at an enterprise level for various metrics. WebSphere Service Registry and Repository, which is a service metadata Repository, establishes a central location for finding and managing service metadata acquired from a number of sources, including service application deployments and other service metadata and endpoint registries and repositories. It is where service metadata that is scattered across an enterprise is brought together to provide a single, comprehensive description of a service. When that happens, visibility is controlled, versions are managed, proposed changes are analyzed and communicated, usage is monitored, and other parts of the SOA foundation can access service metadata with the confidence that they have found the single, correct copy of record. In this context, the WebSphere Service Registry and Repository handles the metadata management aspects of operational services and provides the system of record of these metadata artifacts - the place where anybody looking for a catalog of all services deployed in or used by the enterprise Chapter 13. Producing service assets 383 goes first. Hence, when a service asset that has been published to the Rational Asset Manager is ready for deployment, the service metadata might be published to the WebSphere Service Registry and Repository. When a Rational Asset Manager asset’s artifacts are passed onto the WebSphere Service Registry and Repository, they are now owned and managed in the WebSphere Service Registry and Repository as runtime documents. The definition of a service in this respect is broad, including: Traditional Web services implementing WSDL interfaces with SOAP/HTTP bindings A broad range of SOA services that can be described using WSDL, XSD, and WS-Policy decorations, but might use a range of protocols and be implemented according to a variety of programming models Business services and Composite Business Services are business level services, which contain service metadata from a business perspective. Beyond the technical metadata, there are interfaces and data types of a service and there are business services that include metadata, such as channels, roles, and so forth. WebSphere Business Services Fabric as a platform for assembling Composite Business Services contains a Repository called the business service Repository for storing business service metadata. Developers assembling Composite Business Services can source the technical service metadata from the WebSphere Service Registry and Repository into the business service Repository and add business context information to compose business services. After passing through a governance process, the service metadata for the business services gets stored in the business service Repository. At run time, Composite Business Services use this metadata for the dynamic selection of endpoints based on the business context, content, and contract metadata associated with the business service. For more information about using WebSphere Service Registry and Repository with WebSphere Business Services Fabric, refer to Chapter 14, “Consuming service assets” on page 399. Note: During the development of a service, the service artifacts are typically maintained in a configuration management system, such as Rational ClearCase. The services are maintained in Rational ClearCase until they are developed and tested. This approach is not unique to services; it is true across all types of assets. This section discusses only the primary repositories that are relevant to services. For detailed information about Rational Asset Manager and Rational ClearCase positioning and integration, refer to Appendix A, “Rational Asset Manager: Installation and administration” on page 637. The three repositories are used for three distinct purposes during the life cycle of a service asset, as shown in Figure 13-8 on page 385. 384 Strategic Reuse with Asset-Based Development Figure 13-8 Repositories in the life of a service The following points summarize the distinction between the Rational Asset Manager and the WebSphere Service Registry and Repository: The Rational Asset Manager is seen as a development time registry targeted at development teams and the WebSphere Service Registry and Repository is a runtime registry that deals with documents and logical services derived from the service artifacts in the Rational Asset Manager. WebSphere Service Registry and Repository does not contain all service artifacts, such as the service implementation files. These service implementation files are stored in the Rational Asset Manager. Only the service metadata is published from the Rational Asset Manager to the WebSphere Service Registry and Repository. When a Rational Asset Manager asset’s artifacts are passed onto the WebSphere Service Registry and Repository, they are free to change and to be governed as needed by the runtime organization. However, it is useful for both development and the runtime organization to preserve linkages between the development assets and their runtime counterpart documents. This way you can understand the linkages between developed assets and the deployed documents. Rational Asset Manager manages information that is useful for developing, reusing, and managing all types of reusable assets. It gives you the ability to define asset types, create and manage assets, and provide traceability and details, and includes collaboration software. WebSphere Service Registry and Repository manages information that is useful for the runtime operation, management, and development use of services. It gives you the ability to select service endpoints dynamically in an SOA run time, govern runtime changes to service metadata, set and get runtime policies for service execution, and get deployed service details, such as endpoints and service definitions. Together, the two Chapter 13. Producing service assets 385 products create seamless, reusable asset tracking mechanisms through development and runtime activities. The following points summarize the distinction between the WebSphere Business Services Fabric and the WebSphere Service Registry and Repository: WebSphere Service Registry and Repository does not manage all service metadata, and it does not manage service metadata across the whole SOA life cycle. It focuses on a minimalist set of metadata that describes capabilities, requirements, and the semantics of deployed service endpoints. It interacts and federates with other metadata stores that play a role in managing the overall life cycle of a service. The business service Repository in the WebSphere Business Services Fabric contains business-related metadata and industry semantic models for use in dynamic service selection and assembly. The business service Repository includes business-related policies, semantics, metadata, and subscriptions. The WebSphere Business Services Fabric leverages and extends the WebSphere Service Registry and Repository to source technical service metadata information and provides business context through the use of the business service Repository. The integration between the WebSphere Service Registry and Repository and the WebSphere Business Services Fabric is a convenience mechanism in the WebSphere Business Services Fabric to source the service metadata from a central location and to accelerate the assembly of Composite Business Services. It does not result in physical links that can be used to navigate from the metadata in the WebSphere Service Registry and Repository to the business metadata in the WebSphere Business Services Fabric unlike the case of the WebSphere Service Registry and Repository and the Rational Asset Manager integration. 13.5.2 Governance options for publishing services The Asset-Based Development process guidance states that the service artifacts need to be published to external repositories during the manage stage of the asset life cycle. However, there are other valid options that can be considered while making decisions that govern at which stage of the development process a service asset can be published to the various repositories. Here are two options: Maintain the service life cycle in WebSphere Service Registry and Repository and publish the tested asset to Rational Asset Manager. WebSphere Service Registry and Repository supports life cycle management of services. This means that right from the stage of modeling and design to deployment and management, the service resides in WebSphere Service Registry and Repository. You can leverage this feature in WebSphere Service Registry and Repository and publish your service metadata to WebSphere Service Registry and Repository during the modeling stage, when the services have been identified and specified. These services can be governed with custom life cycle definitions in WebSphere Service Registry and Repository, which indicate that the service is still not ready for runtime invocation but has been defined. This makes the service visible to other project teams in the organization and thus helps you avoid service proliferation. If you have configured Rational Asset Manager with WebSphere Service Registry and Repository connection information, this metadata can be replicated to Rational Asset Manager. Rational Asset Manager users can find these services while searching for assets in Rational Asset Manager. By viewing the life cycle status of the service in WebSphere Service Registry and Repository (by navigating a link), users know that the service is still under development. They might, however, source the metadata files for reuse in their applications. The service as an asset is published to Rational Asset Manager when it has been implemented and tested. At that stage of the project, the service metadata is already 386 Strategic Reuse with Asset-Based Development present in WebSphere Service Registry and Repository, and hence, you do not have to publish the service metadata artifacts to WebSphere Service Registry and Repository. Important: A variation to this option is to publish the metadata early in the service life cycle to Rational Asset Manager and then publish it to WebSphere Service Registry and Repository for life cycle management. The other artifacts for the service asset can be updated when they have been developed and tested. While this is a technically feasible option, we do not recommend that you follow this path, because the service metadata that is published in the early stages of the service is likely to change. We recommend that you store only tested and reviewed assets in Rational Asset Manager. For the same reason, you might want to only replicate service metadata from services that have matured enough for reuse from WebSphere Service Registry and Repository to Rational Asset Manager. You can achieve this by having multiple instances of WebSphere Service Registry and Repository. Services, which are not yet in a state where they can be reused, can be maintained in a separate instance of WebSphere Service Registry and Repository. Service metadata from this instance must not be replicated into Rational Asset Manager. Publish the tested asset to Rational Asset Manager and publish service metadata to WebSphere Service Registry and Repository. In this option, you can publish service assets to any of the repositories only when they have been developed and tested. These assets are published to Rational Asset Manager. You can then publish the necessary metadata to WebSphere Service Registry and Repository. This option does not make good use of the service life cycle management feature in WebSphere Service Registry and Repository. In situations where the services are not developed from scratch, they are first published to Rational Asset Manager as assets and then published to WebSphere Service Registry and Repository. These cases are common when services are sourced from third parties, open source resources, or from software resulting from acquisitions. Note: In both of these governance options, technical service metadata to assemble Composite Business Services can be ideally sourced in WebSphere Business Services Fabric from WebSphere Service Registry and Repository. 13.5.3 Publishing assets to Rational Asset Manager Assets that have been developed and tested can be published to the Rational Asset Manager Repository. We describe the details of how to publish an asset to the Repository in Part 2, “Reusable Assets” on page 123 of this book. This section mentions things to consider while using Rational Asset Manager as a Repository for publishing service assets. Rational Asset Manager is shipped with a data model for managing SOA-based assets. This model contains communities, asset types, asset categories, and other configuration elements that are relevant for an organization that contains SOA-based assets. This model can be used as a starting point to configure the Rational Asset Manager to manage assets in an SOA. It is expected to be extended to include attributes, categories, asset types, and other asset configuration elements that suit your organizational needs. Chapter 13. Producing service assets 387 Figure 13-9 shows the list of asset types, relationship types, asset attributes, and category schemas in the sample SOA model for the Rational Asset Manager. Figure 13-9 Configuration elements in the sample SOA model for Rational Asset Manager As seen in Figure 13-9, the basic types that are typically required in an SOA implementation have been included in the model. Figure 13-10 on page 389 gives a UML representation of these asset types. It shows that a service interface asset can have implementations, design, and test cases attached to it. It can fulfill architectural requirements and can also serve as the contract for business processes. The artifacts from RUP/SOMA identification, specification, and realization phases typically are business process and service design types. The implementation assets fall under the service interface, service implementation, and component types. Test cases are the Service Test type. Requirements and other higher level architecture documents have their corresponding types defined as well. Important: It is important to note that this model is not an exhaustive listing of the asset types and other configuration elements for your SOA assets. It helps you get a jump start in setting up the configuration for the SOA requirements in your organization. 388 Strategic Reuse with Asset-Based Development Figure 13-10 Asset types in the sample SOA model for Rational Asset Manager Figure 13-11 on page 390 shows the communities that are part of the sample SOA model for Rational Asset Manager and the assets that are contained in them. These communities have sample business processes, interfaces, and service documentation assets. You can create new communities or customize these communities based on your organizational policies. Chapter 13. Producing service assets 389 Figure 13-11 Communities and assets in the sample SOA model for Rational Asset Manager The sample SOA Model for Rational Asset Manager also comes with three connection configurations for development, test, and production WebSphere Service Registry and Repository instances, which we do not show in Figure 13-11. Extending the sample SOA model for Rational Asset Manager The sample SOA model that ships with the Rational Asset Manager can be customized with additional attributes and categories suitable for business services and Composite Business Services. This section mentions many of the possible extensions. The intent of providing these extensions is to help potential consumers looking for assets in the Rational Asset Manager make a better decision about the usefulness of the asset for their requirement without having to download and analyze it. This reduces the time that is spent trying to reuse existing assets and hence the impact of a failed attempt to reuse. Important: The best practices for defining a new asset types and attributes are detailed in Part 2, “Reusable Assets” on page 123 of this book. Refer to these best practices before proceeding with this section. Asset type extensions The sample SOA model for the Rational Asset Manager contains several asset types for an SOA. This section mentions other possible service asset types that might be required in an SOA. Whether to a create new asset type in the Rational Asset Manager for your asset requires governance decisions with respect to organizational policies and the expected usage of the Repository. Based on your organizational governance policies, you might have to use 390 Strategic Reuse with Asset-Based Development these asset types. Alternatively, you might choose to use other metadata, such as asset attributes, or a generic asset type to distinguish between the assets. You can use the following guidelines to define custom service asset types in the Rational Asset Manager: Different service assets contain different artifacts. For example, a choreographed service contains the process choreography files in addition to the candidate service interfaces and their implementations. You might have to define an asset type for choreographed services to lay a restriction on the artifacts that are published to the Rational Asset Manager. Based on the type of the asset, the Rational Asset Manager has capabilities to check that the correct artifacts are being published to the Repository. A business service typically contains artifacts including a business process implementation, service interfaces and implementations, service metadata (typically .fca files for the WebSphere Business Services Fabric), and supporting documentation. The artifacts for a composite business service are the same as that of a business service. However, you might still want to define a custom type for Composite Business Services if you have different access requirements for users of business services and users of Composite Business Services. For example, if you want the Composite Business Services to be published by the architects and not by programmers, you might have to create a specific asset type for the two types of services. In the Rational Asset Manager, you might want to relate the business services to Composite Business Services or relate the Composite Business Services to the business services, because Composite Business Services are by definition composites of business services. This enables the Rational Asset Manager users to see what business services are used in a specific composite business service or the compositions in which a particular business service has participated (thus, reflecting the reusability of the asset). To be able to define these relationships, the Rational Asset Manager requires you to define different asset types for the participants in the relationship. Based on your SOA implementation, you might want to define a type to hold ontologies. Part 2, “Reusable Assets” on page 123 of this book details the basics of an ontology. Ontologies are usually represented in Web Ontology Language (OWL) and the artifacts that represent them are .owl files. Ontologies are used to represent the business object models and business service metadata in WebSphere Business Services Fabric. The Industry Content Packs ship with industry-specific ontologies. You can extend or define the ontology for your industry. Furthermore, you can define your own service life cycles in WebSphere Service Registry and Repository using ontologies. Defining an Ontology type might help you to manage these ontology artifacts. Tip: For a step-by-step guide for Administrators to create new classification systems and life cycles for WebSphere Service Registry and Repository, go to: http://www-128.ibm.com/developerworks/websphere/library/techarticles/0703_shore /0703_shore.html Asset attribute extensions The possible attribute extensions to the SOA model for Rational Asset Manager are: Supported channels: Business services and their composites typically support multiple channels of access, such as Web portal, FTP, FAX, and so forth. The channels that are supported by a business service can be a possible attribute for the business service asset. Supported industry standards: Composite Business Services solve business problems for a specific industry. They support different industry-specific data and messaging Chapter 13. Producing service assets 391 standards, which can be another possible Rational Asset Manager attribute for the asset. For example, possible values for a health care business service might be HIPAA or HL7. Number of endpoints: Business services and their composites might have multiple endpoints to access them. Typically, Rational Asset Manager users can use this as an indication to know that the service has been enabled to adapt to different environments based on context-based business policies. Note that this attribute can be used for basic Web services as well. A variant form of this attribute indicates the number of services with multiple endpoints which comprise a composite business service. This number is an indication of the flexibility of the composite business service. Business process type: The business process that is implemented by a composite business service can be either a long running process with several human tasks, or it can be a quick process that runs completely in a single invocation. This attribute helps the Rational Asset Manager users to understand the complexity of the composite business service, because long running processes typically run several days or weeks and hence require system resources for longer durations than the short processes. Requires open source or third-party software: This attribute can be used to indicate that the composite business service uses open source or third-party software for its service implementations. This can be used as an alert about additional costs and licensing issues for potential consumers of the asset. Note that this attribute can be used for all types of assets and not just service assets. 13.6 Case study: SOA service reuse at ZYX Electronics This section starts the discussion regarding how ZYX Electronics configured and used Rational Asset Manager and WebSphere Service Registry and Repository tools to produce, consume, and manage service assets to transition to an SOA reuse approach. In this chapter, our focus is on the production of service assets. Chapter 14, “Consuming service assets” on page 399 focuses on how ZYX Electronics used these repositories to consume service assets. Then, Chapter 15, “Managing service assets” on page 425 concludes the discussion by looking at how ZYX Electronics used the repositories to manage service assets. To simplify the discussion, we focus only on how ZYX Electronics created, consumed, and managed services from a reuse perspective, but we do not describe how these services were built using other IBM tools, such as WebSphere Business Modeler, WebSphere Integration Developer, and Rational Software Architect. We assume that the service artifacts have already been produced using these tools, and we concentrate on how Rational Asset Manager and WebSphere Service Registry and Repository helped ZYX Electronics to reuse these services in the development and runtime environments. 13.6.1 Current state of service reuse at ZYX Electronics Building on the discussion from Part 2, “Reusable Assets” on page 123, ZYX Electronics continued with the deployment of Rational Asset Manager. In addition, as part of their SOA adoption project that was also occurring, ZYX Electronics was already using WebSphere Service Registry and Repository as a service registry for the runtime environment, but they had many inconsistencies in the services that were developed. The issues encountered included: They did not have any standardization and projects created services using Web Services Description Language (WSDL) files while other projects just used XML files to create other services. 392 Strategic Reuse with Asset-Based Development There was no mechanism in place to manage the development and publication of services. As a result, developers were unable to find the code that was used to build the services. Experienced developers included a document explaining how to use the service, but most of them just created the code and files to be deployed to the service registry without verifying its quality. So, following the incremental adoption of reuse that ZYX Electronics had selected to follow, the next steps for the deployment of Rational Asset Manager at ZYX Electronics included: Specifying new service asset types and associated metadata Integrating with other WebSphere tools to help to transition to an SOA approach. This helps business analysts, architects, developers, and service assemblers to manage and control the life cycle of services. Recall from earlier that Duncan Munchkin (Development Manager at ZYX Electronics) is leading the reuse adoption initiative with support from Deon Adminio. 13.6.2 Rational Asset Manager configuration for ZYX Electronics The initial Rational Asset Manager configuration created by Deon Adminio (Rational Asset Manager Repository Administrator) and Duncan Munchkin (Development Manager) did not include any information for managing SOA-based assets, so the first task that they had to approach was to modify the Rational Asset Manager configuration. After looking at the default SOA Model that ships with Rational Asset Manager, they decided that it was a good idea to start using this basic model and extend it later just in case it was needed. But, at least this initial configuration provides a simple base to begin to work with SOA-based assets. To load this SOA model and modify the Asset Manager configuration, Deon just had to go to the Administrator tools and import this SOA Model. For a step-by-step guide of how to import this SOA Model into Rational Asset Manager, go step 8, “Import predefined sample SOA Model” of A.2.2, “Installing Rational Asset Manager Server” on page 648. Duncan and Deon had created the initial Rational Asset Manager configuration for ZYX Electronics in Chapter 8, “Configure your Asset Repository” on page 195. The SOA model import created additional elements needed to manage SOA-based assets. The SOA model import includes asset types and attributes for service design, interface, implementation, test cases, and communities for service analysis, development, and testing teams. Figure 13-12 on page 394 provides an overview of the communities and assets in the sample SOA model from Asset Manager. Chapter 13. Producing service assets 393 Figure 13-12 Communities and assets in the sample SOA model for Rational Asset Manager 13.6.3 Produce and Publish service assets To achieve the business goals of reducing costs and cycle times, ZYX Electronics had started an initiative called “Business Process Optimization” to analyze and improve critical business processes. Bob Analyn, the Business Service Analyst, was leading this team. The team had used WebSphere Business Modeler to create “as is” models to represent the current state of the services and “To-Be” models to represent a target state. The team created these “To-Be” models by enhancing the “as is” models with improvements that they identified through simulation and analysis. As part of the SOA transformation process, the SOA team from ZYX Electronics followed the SOMA process to identify candidate services for reuse. In the course of the analysis, they discovered that account verification is a reusable business process across multiple applications in the enterprise. In particular, the analysis helped Bob to discover that a new service was needed to determine applicant eligibility. This process is called Determine Applicant Eligibility and the service implementing this process choreography is called EligibilityService. To determine if another department had already created a similar business process model that can be reused in the creation of the new service, Bob used Rational Asset Manager to search for other business process models already developed and loaded into the Repository. Bob logged on to the Rational Asset Manager Web client, selected the Search tab and used the keyword “Eligibility” to search for assets related to the new service that Bob had to create, as shown in Figure 13-13 on page 395. 394 Strategic Reuse with Asset-Based Development Figure 13-13 Search assets related to “Eligibility” Rational Asset Manager located two business process models in the Service Analysis community. Bob reviewed the content and discussion forums attached to them and discovered that one of the business process models that had been created, Account Opening Business Process Model, was similar to what he required. Bob downloaded the Account Opening Business Process Model asset and used it as a base to model the new process model for the Determine Applicant Eligibility business process. Because he had producer permission, when he finished modeling the new process model with WebSphere Business Modeler, he created a new process model asset in Asset Manager called Determine Applicant Eligibility, as shown in Figure 13-14. Figure 13-14 Submit “Determine Application Eligibility business process model” asset Chapter 13. Producing service assets 395 The Business Process asset type had associated the constraint of having at least one artifact with a label of “ProcessModel” as shown in Figure 13-15. Therefore, Bob had to attach the new process model files with the “ProcessModel” label. Figure 13-15 Artifact constraint to business process asset types As shown in Figure 13-16, Bob also created a relationship between both process model assets (the old “Account Opening Business Process Model” and the new one that Bob created) to make it clear that these assets were related. It must be clear to future users of the Repository that there is a connection between these assets. Figure 13-16 Create relationship between business process assets Bob completed all asset information and verified that there were no errors in the information provided. Note that Rational Asset Manager shows red messages when the constraints associated to the asset type are not met. Next, Bob submitted the asset to the Repository, and it followed the default review process configured in Rational Asset Manager. When the review was accepted by the project manager, the new asset moved to the Approved state. For more information about how you can configure and create the review process in Rational Asset Manager, go to Chapter 9, “Produce reusable assets” on page 237. 396 Strategic Reuse with Asset-Based Development After submitting the new process model to the Rational Asset Manager Repository, Bob sent an e-mail to Al Aarkashan (the SOA architect at ZYX Electronics), as shown in Figure 13-17. The purpose of the e-mail was to inform Al that there was a new asset submitted to Rational Asset Manager for the Determine Applicant Eligibility business process, and Al can start to create the requirements specification, design models, and initial implementation of this service. Figure 13-17 Bob sent an e-mail about the new business process asset to Al Chapter 13. Producing service assets 397 398 Strategic Reuse with Asset-Based Development 14 Chapter 14. Consuming service assets This chapter provides details to consider during the consumption of services in a service-oriented architecture (SOA). This chapter discusses the following details: Locating services for consumption Consuming services from WebSphere Service Registry and Repository (WSRR) to assemble Composite Business Services (CBSs) Points of variability of service assets Customizing Composite Business Services for consumption Reusing services from the WebSphere Business Services Fabric Industry Content Pack Providing service reuse feedback: using WebSphere Service Registry and Repository, dynamic assembler, and Rational Asset Manager Case Study: SOA Service Reuse at ZYX Electronics © Copyright IBM Corp. 2008. All rights reserved. 399 14.1 Locating services for consumption Chapter 11, “Manage reusable assets” on page 303 mentioned the types of repositories that can be used in the life cycle of service assets. These repositories are a good place to locate services when there is a need for consumption. This section focuses on how to locate services stored in these repositories. Service consumption can happen either at the time of modeling, design, and assembly (hereafter referred to as development time) of SOA solutions and assets, or it might happen at the run time of the applications that consume services. When using a Repository, we need to understand and be able to leverage its search capabilities. By doing so, we are able to find and reuse assets more effectively. In particular, we want to minimize the following occurrences: False negative: A search is performed, and we are unable to find an asset to reuse. However, one or more assets do exist in the Repository that we are using. False positive: A search is performed and returns a set of assets that match our search criteria. However, as we work with the assets, we discover that none of the assets is really a good fit. Here is a brief overview of the features in the various repositories that help you locate services for consumption: Rational Asset Manager can be used to locate service assets at development time. Rational Asset Manager provides extensive search features based on various parameters to find assets. For detailed information about the search features in Rational Asset Manager, refer to Part 2, “Reusable Assets” on page 123 of this book. WebSphere Service Registry and Repository can be used to locate services at development time as well as run time. At the time of development, you can look for the deployed services in your organization and analyze their dependencies using WebSphere Service Registry and Repository. If you need access to the complete set of artifacts for a service that you have identified for reuse, you can use the integration features of Rational Asset Manager and WebSphere Service Registry and Repository to locate the asset in Rational Asset Manager. WebSphere Service Registry and Repository provides several interfaces to locate services at run time. WebSphere Business Services Fabric can be used to locate business services and Composite Business Services at development time and run time. At the time of development, you can use the search features in the WebSphere Business Services Fabric Web-based administration tool to discover what business services and Web services have been deployed in a particular organization. At run time, you can use the dynamic assembler routing engine to select specific service endpoints based on the context, content, and contract associated with the service request. 14.1.1 Locating services in WebSphere Service Registry and Repository Next, we discuss locating services in WebSphere Service Registry and Repository. Locating services at development time WebSphere Service Registry and Repository provides a number of ways to search for deployed services. The key search features include: Quick search: Use the quick search field at the top left of the navigation tree in the WebSphere Service Registry and Repository Web user interface to find any type of object 400 Strategic Reuse with Asset-Based Development stored in the registry. The search is performed on the entire registry using an exact-case match on the text entered. It is matched against the name and description properties of any object. The text is used as a partial match; for example, a search for “Echo” returns both “Echo.wsdl” and “MyEcho”. You can specify an asterisk character (*) in any part of the search text to denote that any number of other characters are permitted to occur at that position in the search results. Query Wizard: The Web interface for the WebSphere Service Registry and Repository provides a query wizard that can be used to search for service metadata based on the following criteria: – – – – – – – Different specific types of entities All entity types Entity name Custom property name or value Classifications An entity property (for example, namespace) AND or OR queries The wizard walks the user through a series of windows to select the previously mentioned criteria to create a search query and then displays all of the service metadata in the Repository that matched the criteria. View query definitions: The WebSphere Service Registry and Repository view query system is a highly customizable method of creating predefined queries against the contents of the registry. It uses a simple XML file that defines the parameters of each query, associating that query with a unique identifier. These queries then form the main method of providing links from the navigation tree to show relevant views in the Web user interface. Users can customize existing or new navigation trees in the user interface by defining additional view queries in a new view query definition file and then referencing the new queries in the navigation tree. Eclipse Plug-in: The Eclipse plug-in for the WebSphere Service Registry and Repository is primarily a tool used to search for and publish documents from the development environment. It contains a search feature that is highlighted here for the sake of completeness of the content with respect to its query capabilities. From the Service Registry view of the WebSphere Service Registry and Repository Eclipse plug-in, you can search WebSphere Service Registry and Repository using one or more of the following criteria: – The object’s uniqueness identifier or any part of it. If you search on only one or two parts of the identifier, more than one object can be returned in the search results. – The type, or types of objects that you want to retrieve. For example, you can search for XML and WSDL documents. – One or more properties and property values of the object – The classification of the object in the WebSphere Service Registry and Repository. If you specify a high-level classification, all of the objects in all of the classifications beneath it are returned in the search results. Programmatic query: Although we do not go into detail here, because it is out of our scope, the WebSphere Service Registry and Repository provides other programmatic query capabilities that can be used for searching for assets for reuse. Locating services at run time WebSphere Service Registry and Repository has several interfaces that provide a variety of ways to access the product’s functionality. We are the most interested in the context of this Chapter 14. Consuming service assets 401 book in the Java application programming interface (API) Enterprise Java Bean (EJB) and the Web Services API. These APIs can be used to locate services at run time. 14.1.2 Locating services in WebSphere Business Services Fabric The IBM Business Services Repository is a standards-based Business Service model Repository that captures information about Business Services, Business Policies, And Service Subscribers. WebSphere Business Services Fabric allows you to search for and view the details of the various Repository objects through a Web-based interface. Figure 14-1 on page 403 shows the various metadata elements that you can search for in the Business Services Repository. As seen in Figure 14-1 on page 403, you can search for Resources, which typically refer to discrete IT assets. Types of Resources include Application Suites, Applications, Business Services, Interfaces, Endpoints, and Business Events. You can search for subscribers, who might be a person, role, organization, or a machine that consumes business services. You can also search for policies by name. Figure 14-1 on page 403 also shows the views that are available in the search results for each of the metadata elements. You can also run correlation queries to know the relationships between different objects. 402 Strategic Reuse with Asset-Based Development Figure 14-1 Search features in WebSphere Business Services Fabric 14.2 Consuming service metadata from WSRR for CBS assembly Next, we discuss consuming service metadata from WSRR for CBS assembly. 14.2.1 WebSphere Business Services Fabric and the WSRR integration As mentioned earlier in this section, the WebSphere Business Services Fabric integrates with the WebSphere Service Registry and Repository to source service metadata. The service metadata is then extended with business context, policies, and assertions as part of the assembly of business services (and its composites) and is stored in the Business Service Repository in the WebSphere Business Services Fabric. As a result of the integration, the WebSphere Business Services Fabric replicates service metadata from the WebSphere Service Registry and Repository into the Business Service Repository. Developers assembling Composite Business Services can then use this service metadata during assembly without having to populate the Business Service Repository manually. Figure 14-2 Chapter 14. Consuming service assets 403 on page 404 shows the positioning of the WebSphere Service Registry and Repository with respect to the WebSphere Business Services Fabric. Figure 14-2 WebSphere Business Services Fabric and WSRR integration Configuring Repository integration In order for the integration to work, the WebSphere Business Services Fabric needs to be configured with an External WebSphere Service Registry and Repository project. This project contains the WebSphere Service Registry and Repository connectivity details along with the authentication information if the Repository instance has been secured. Details about how to configure this integration can be found in the following article: http://www.ibm.com/developerworks/websphere/library/techarticles/0708_balaji/0708_ balaji.html How the replication works When the WebSphere Business Services Fabric is configured for replicating, it queries the WebSphere Service Registry and Repository for service endpoints, interfaces, and operations. The first time that the WebSphere Business Services Fabric connects to the WebSphere Registry, it retrieves all of the service metadata from the Web Services Description Language (WSDL) files and catalogs them in the Business Service Repository. On subsequent connects, it retrieves updates that have been made to the services in the WebSphere Service Registry and Repository or any new service metadata that might have been published in WebSphere Service Registry and Repository since the previous connect. When a WSDL file is deleted from the WebSphere Service Registry and Repository, the service metadata is not deleted from the Business Service Repository in order to avoid invalidating the assertions that have been defined on the deleted endpoints. 404 Strategic Reuse with Asset-Based Development Any metadata deleted from the Business Service Repository that is a replicated instance from the WebSphere Service Registry and Repository will be restored back from the WebSphere Service Registry and Repository upon their next connection. WebSphere Business Services Fabric validates the contents of the WSDLs based on the Web Services Interoperability Organization (WS-I) standards before it replicates the metadata into the Business Service Repository. Specifically, the following validations are performed on the WSDL file: 1. Endpoint fields must have a display name (port name), address (per port soap address), and support service (per portType). 2. Addresses must have a valid HTTP URL. 3. Web service display name (portType name) must be specified. 4. Service operations must have input and output messages (wsdlInput/wsdlOutputMessage). Note: Web Services Interoperability Organization (WS-I) is an open industry organization chartered to promote Web services interoperability across platforms, operating systems, and programming languages. For more information about WS-I, refer to the Web site: http://www.ws-i.org/ The WebSphere Business Services Fabric validation validates WSDLs based on WS-I standards while trying to replicate from WebSphere Service Registry and Repository to Business Service Repository. Only the WSDLs that pass the validation checks are replicated. Any WSDLs that fail the validation will not be replicated. Therefore, the best practice is to ensure that WSDLs published to WSRR are WS-I compliant. Using replicated metadata After ensuring that the WebSphere Business Services Fabric has been successfully configured to replicate service metadata from the WebSphere Registry, you can now use this data to assemble your composite business service. Composite Business Services are assembled using the Composition Studio tool, which is an Eclipse plug-in that ships as part of the WebSphere Business Services Fabric tools pack. It is installed as a plug-in to WebSphere Integration Developer. Using the metadata from the WebSphere Service Registry and Repository in your composite business service involves a two stage process: 1. The fabric project that is created for the WebSphere Service Registry and Repository replication needs to be replicated into the Composition Studio. You will then be able to view the services and endpoints that were retrieved from the WebSphere Service Registry and Repository in the Composition Studio. You can then define assertions for these endpoints. 2. The Business Service project that is typically created to hold composite business service metadata needs to be replicated into the Composition Studio. This project needs to import the namespaces of the External WebSphere Service Registry and Repository project in order to make the content replicated from the WebSphere Service Registry and Repository visible to the composite business service. In this project, you can define policies and assign them to the services retrieved from the WebSphere Service Registry and Repository. In this way, service metadata can be sourced from the WebSphere Service Registry and Repository and extended with business level metadata in the WebSphere Business Services Fabric. Chapter 14. Consuming service assets 405 14.3 Points of variability of service-based assets An asset, by definition, has variability points through which it can be customized for specific consumption requirements. The definition of variability points from that section is repeated here for elaboration in the present context of service assets: “A variability point is a location in an asset, specifically an artifact that can be modified or extended as part of being reused. It is a planned for, controlled extension point of the asset.” The variability points of an asset depend largely on the type of the asset. Services have several extension points based on their style of reuse. There are four major styles of reuse: Black box: An asset that is not altered by the Asset Consumer Gray box: An asset that is modified using parameters White box: An asset whose internals are modified by the Asset Consumer Glass box: An asset that exposes internals for evaluation and browsing purposes In this section, we discuss which styles of reuse apply to services and what points of variability are available based on the style of reuse of a service. In theory, services can be reused based on any of the four styles just mentioned. However, the following three styles warrant further discussion: Black box reuse: Generic services, which perform a specific task, such as validation or transformation, are generally reused as Black boxes. However, it is common to have to perform minor configuration work on the asset, such as changing the endpoint of the service based on the deployment environment. Therefore, this configuration work can turn this asset reuse into Gray box reuse. Gray box reuse: Certain services have deployment parameters that can be configured at the time of deployment to suit the deployment environments. A common example of this parameter is the endpoint of a Web service. Services that are usually shipped as part of licensed products are usually Gray boxes. Web services that are part of WebSphere Business Services Fabric industry content pack are examples of these services. These services provide implementations of generic tasks in specific industries, such as transformation, validation, and so forth. White box reuse: Reuse of Composite Business Services are examples of White box reuse. Composite Business Services provide generic implementation of common industry-specific business processes. It is usually expected that you customize the business processes and implementations that are used by a composite business service based on the reuse scenario. The business services in the WebSphere Business Services Fabric Industry Content Packs are examples of White box reuse. They contain mock implementations of the Web services that can be customized based on the requirements of the larger solutions of which they are usually a part. 406 Strategic Reuse with Asset-Based Development Important: As discussed earlier, a goal for the organization must be to support all forms of reuse. Therefore, although typically White box reuse has a lower value than Black box and Gray box approaches to reuse, it can still provide a significant amount of value. A key aspect to the Composite Business Services is that they are intended to provide organizations with a best practice approach to building services within a specific industry. However, there is also a need to allow each business to provide their unique, and likely competitive differentiating, approach to the algorithm within the services. Therefore, there is a balance between providing a standards-based set of services and providing an organization with room to innovate. Last but not least, when the composite business service has been customized to a particular organization, it then migrates to the Black box and Gray box reuse models as others in the organization consume this completed set of services. Technically it is possible to reuse a composite business service as a Gray box by configuring the business level service metadata, such as channels, roles, and policies. Common points of variability of service assets are: Business level service metadata: Business services and their composites are characterized by business level metadata, such as channels, roles, and policies. This metadata can vary based on the consuming application. WebSphere Business Services Fabric helps externalize this metadata to a business service Repository. It uses externalized policies to select specific implementations of a service based on the context, content, and contract associated with a service request. This makes it easy to change policies that govern the business process without having to write or change the source code. Changes to metadata, such as what roles can access the business service through what channels, can also be made declaratively, making it easy to customize the business services and their composites for specific solutions. Changes to this metadata are made using the WebSphere Business Services Fabric Composition Studio tool. Service Endpoints: Endpoints of Web services are the most common points that vary based on the deployment environment of the service. In the case of Composite Business Services, new endpoints can be added for a specific service in the business service Repository by using the Composition Studio tool. At run time, the WebSphere Business Services Fabric dynamic assembler then uses the new endpoint as part of the dynamic endpoint selection process. The actual endpoint URL itself can vary based on the deployment server configuration. Endpoint URLs for basic services can be edited using the WebSphere Process Server administration console. Messaging protocol: The protocol that is used to communicate with a service can vary based on the application requirements. The most common protocols that are in use are SOAP/HTTP and SOAP/Java Message Service (JMS). Implementing a service as a Service Component Architecture (SCA) component gives you the flexibility to choose the binding protocol at the time of service creation or assembly of Composite Business Services. WebSphere Process Server provides three binding protocols: SOAP/HTTP and SOAP/JMS for Web service bindings, JMS binding, and SCA binding. Service implementation: Services that are intended for White box reuse expose the implementation source code for customization by consumers. Customizing existing implementation is usually a cumbersome task if it involves understanding existing code. The best practices that can help facilitate a service implementation change are: – Externalize all probable application-specific variability points in an application. This reduces the chances of having to change the service implementation code. Chapter 14. Consuming service assets 407 – Keep the service implementation cohesive and use the right design patterns to separate the logical layers and specific products used by the composite business service into logical modules. Using adapters to connect to third-party and open source software makes it easy to switch between alternatives for this software. Implementing services as SCA components gives you the flexibility to select one of the implementation types at the time of service creation or assembly of Composite Business Services. Business process: Business agility is one of the key goals of service orientation. Organizations need to change their business processes as quickly as possible to meet the demanding market needs. Hence, the business process implemented by business services and their composites is a key point of variability of these services. At a technical level, common changes to the Business Process Execution Language (BPEL) include adding completely new services to the choreography, changing conditions that select specific services for invocation, or selecting specific implementations of a service based on the context. There are multiple ways of varying a specific service in the business process implementation. These methods vary in terms of the degree of the flexibility that they bring to the business process and their ease of implementation. These options are described here in brief: – Baseline SCA implementation: This approach is the simplest and most straightforward option to implement service endpoint selection. It involves using the choice elements in the BPEL to select a specific service based on the evaluation of a condition. The SCA assembly for the business process will have the actual endpoints configured. These endpoints can be changed using the WebSphere Process Server’s administrative console. – Selectors: Selectors are special purpose SCA components that are part of WebSphere Process Server. You can use a selector to indirectly wire a workflow with one or more SCA import components. When a workflow sends a request through a selector, the selector routes the request to an endpoint based on a selection criteria that is evaluated for each request. Integration Developer 6.0.2 provides predefined support only for selectors that use date as a variable in selection criteria. Extending the selectors to use more complex criteria, specified using Java, requires that you write custom code that implements the SelectionAlgorithm interface. At run time, the selectors can be modified using the administrative console, though this applies only to the Integration Developer-supported selectors. Custom selectors implementing the SelectionAlgorithm interface do not qualify. The console has windows for editing selector tables that can point to specific service endpoints compliant with the selector’s Web service operation. There is also support for protocol-independent aliasing using a selector table. Because each entry in a selector table resolves to an SCA component, an entry can be an import component with HTTP or a JMS binding. Selectors also support runtime dynamicity of endpoint choices. When an SCA module is deployed to a process server, the module’s binding components can be added as entries in a selector table. Selectors can be good candidates for a points of variability implementation. However, it is important to assess the risks of deploying selectors to production and to fully understand the capabilities of the points of variability implementations based on mediation modules, service registries, and dynamic assembly. The selector-based implementation requires access to the WebSphere Process Server administrative console. It might not be suitable in environments where security requires separation of access rights for the role responsible for editing the selector choices and 408 Strategic Reuse with Asset-Based Development the role of the Process Server Administrator. This security risk is particularly serious in cases where selectors are used to implement points of variability in business logic that must be inaccessible to system Administrators. In many production environments, business users must not have the capabilities of a Process Server Administrator (stopping or deleting applications, changing system configuration, and so on). Points of variability implementations that rely extensively on selectors are also a regression risk for development organizations. When deploying a new version of an application, developers must update the runtime selector tables from an existing version of an application before an upgrade. When the selector tables change frequently, this can mean downtime for existing applications. Because selector tables are modified through the WebSphere Process Server administrative console, they do not allow invocation time dynamicity for service endpoints. WebSphere Process Server provides scripted access to the administrative console capabilities, including selection table modification, but the performance impact of using this scripting interface at endpoint invocation time is unacceptable to most applications. – Mediation modules: In Enterprise Service Bus (ESB)/Process Server terminology, a mediation module is a type of SCA component. Mediation modules are designed to perform message transformations, usually between application specific and generic business objects. Mediation modules are not limited to mediating content; each module’s implementation, called mediation flow, can contain alternative service invocation steps, along with associated logic routing the control flow to a specific step. Mediation modules can alias across different protocols (for example, from SOAP/HTTP to SOAP/JMS) and across different message exchange patterns. Although mediation modules lack runtime and administrative user interfaces to access and modify routing logic, ultimately they are more flexible than selectors for service endpoint aliasing. Mediation modules are a step up from selectors in terms of flexibility and tooling support. WebSphere Integration Developer provides a collection of mediation primitives that assist you in developing complex protocol and endpoint independent implementations. For example, there are primitives available for logging, event notification, and request routing. – Mediation with service registry: Thus far, our discussion of options for implementing endpoint selection ignored the issue of managing service endpoint choices. Implementations based on selectors, business rules, and mediation modules do not provide a standard approach for storing, querying, and manipulating information about service endpoints. WebSphere Service Registry and Repository can be used in conjunction with WebSphere Enterprise Service Bus or WebSphere Process Server to enable dynamicity of service endpoint choices at run time. WebSphere Service Registry and Repository exposes Java and Web service APIs for managing service endpoints in an internal registry. WebSphere Service Registry and Repository can also keep track of classification metadata for describing service endpoints. For example, an endpoint can be stored in WebSphere Service Registry and Repository along with: • Associated metadata describing the WSDL interface of the endpoint • Alternative service endpoints with different protocols or message exchange patterns • Business information, such as the name of the company hosting the service endpoint In terms of implementation, SCA mediation modules can be written to query WebSphere Service Registry and Repository to retrieve service endpoints prior to Chapter 14. Consuming service assets 409 performing a service invocation. In parallel, BPEL workflows or other WebSphere Service Registry and Repository clients can modify the pool of service endpoints, potentially changing the behavior of the mediation modules querying WebSphere Service Registry and Repository. Governance features help ensure that WebSphere Service Registry and Repository clients are not affected when these changes are made. – Business rules: Using rule groups and rules is one option for implementing an SCA component. Business rules can implement selection of a service endpoint in a workflow, and they can be edited during development time and run time. During development, you can use Integration Developer to define an initial implementation of endpoint selection based on criteria embedded in a business rule. The selection criteria can be expressed using a business rule specific language, which is a subset of Java expressions with the capabilities of querying Service Data Objects (SDOs). Alternatively, the workflow containing the business rule can have an equivalent selection expression in a Java snippet and simply pass the result to the business rule. Two types of business rule implementations are relevant to endpoint selection: • If-then business rules for evaluating a selection criteria • Action rules containing endpoint invocations that are executed depending on the outcome of selection criteria evaluation At run time, an application can use the Process Server Business Rule Manager to modify the business rules. When selection criteria is specified purely in the business rules expression language, the criteria can be rewritten entirely. Naturally, at run time, the criteria can only be modified within the limits of the input parameters that are passed to the business rule. This limitation can be anticipated and mitigated by passing the entire workflow state to the rule. When the selection criteria is captured using a Java snippet, it cannot be modified using the rule manager application. – Dynamic assembler: WebSphere Business Services Fabric provides dynamic assembly capability for workflows. Implementations based on dynamic assembly differ from the other options, because they rely on an out-of-workflow scope evaluation of selection criteria for service endpoints. A business analyst can implement the selection criteria in Composition Studio (a tooling part of WebSphere Business Services Fabric) using a simple expression language without any need for Java programming skills. A points of variability implementation using WebSphere Business Services Fabric is the approach that offers the most flexibility to developers of Composite Business Services. When deciding to use WebSphere Business Services Fabric, however, it is important to understand the additional development requirements of WebSphere Business Services Fabric. For example, preexisting BPEL workflows cannot be retrofitted to leverage WebSphere Business Services Fabric without changes to the workflows and the implementation of additional data and logic structures for the dynamic assembly engine. 14.4 Customizing Composite Business Services Composite Business Services are essentially choreographies of industry-specific business processes. The business process and the other variability points that were mentioned in 14.3, “Points of variability of service-based assets” on page 406 hold true for Composite Business Services. 410 Strategic Reuse with Asset-Based Development Given that Composite Business Services are much more complex than basic Web services, the following points must be considered while customizing composite business service during their consumption: Note: Many of these considerations are relevant not only to services but to all kinds of assets that solve business problems and can be reused as customizable applications in larger solutions. Composite business service assets need to be tested for non-functional requirements, such as performance, security, and availability based on certain benchmarks. The test results along with the operational environment that was used to conduct the tests need to be published as part of the supporting documentation for the asset. This will help the consuming team to tune the environment of its solution for the composite business service. In fact, publishing these details as attributes of the asset in the asset Repository can help you decide whether to reuse the asset in a specific context. The use of commercial or open source third-party software in composite business service assets needs to be evaluated prior to consumption. This can have a cost impact on reusing the asset due to licensing issues. You might also consider replacing certain commercial or open source software used by the composite business service with other software that might be available for use at a lower cost or that has been mandated for use by the governance policies. The use of commercial or open source third-party software in a composite business service (and in all kinds of assets in general) can cause technical issues related to version dependencies. For example, the composite business service can require a certain version of the third-party software and the consuming application can need a different version. These two versions might or might not reconcile to a single latest version based on the technicalities of the specific open source software. This can require packaging or structural changes in the consuming project and the composite business service. User interfaces are usually built for a composite business service primarily to be able to test and demonstrate the capabilities of an asset to solve a domain specific problem. These interfaces are most likely to be customized to match the look and feel of the consuming application, at a minimum. In certain cases, the user interface can be discarded, and the business process implementation alone can be reused. The user registry used by a composite business service is likely to vary based on the consuming application requirements. As a best practice, we recommend not to use any registry-specific APIs in the composite business service. Using a standard API, such as Java Authentication and Authorization Service (JAAS), ensures that the composite business service is user registry-independent. Consuming applications can switch registries, most likely to Lightweight Directory Access Protocol (LDAP), based on their requirements. 14.5 Reusing assets from the Industry Content Packs Composite business service asset development can be accelerated using the WebSphere Business Services Fabric Industry Content Packs. These packs include valuable industry common services and reference industry models to simplify interoperability between IT systems and partners, facilitate service reuse, and drive industry standards compliance. The industry packs are industry specific assets in the form of reference business service templates. The service templates have been derived from standard industry specific processes and are extensible and configurable to support the unique requirements of a Chapter 14. Consuming service assets 411 specific solution. They follow industry standards, such as ISO 200022, NACHA in the banking domain, and HIPAA and HL7 in healthcare, to name a few. The assets that are part of the Industry Content Pack are: Reference business services templates: The reference business services templates consist of the business services, metadata that includes decompositions of business services and Web services, and the associated definitions of business policy assertions, business roles, and business channels, based on the industry business glossary. Industry Business Glossary that presents a taxonomy of industry terms, with associated relationships and properties Industry standards-based Web service interfaces and data types that enable interoperability across disparate systems in the enterprise ecosystem Industry-common services that contain specific implementations that are consistently reused in multiple solutions to enable transactional industry-specific functions, such as validation, bulking, debulking, transformation, and so forth. These services follow industry-specific standards. Industry Business Object Model used as a semantic model for design and development of service-oriented business solutions Knowledge assets that can accelerate the use and extension of the prebuilt SOA content contained in the industry content packs To understand the content of these assets, let us look at the Banking Payments Pack. Figure 14-3 summarizes the assets in the Banking Payments Pack. Similar assets are available as part of the Healthcare, Insurance, and Telecom content packs. Figure 14-3 Banking payments industry content pack assets The IBM Banking Payments Pack supports payment processes for financial institutions. 412 Strategic Reuse with Asset-Based Development Benefits of reusing this content pack to develop composite business service assets are: The Banking Payments Business Glossary contains a banking payments common vocabulary that represents the taxonomy of banking terms with associated relationships and properties based on ISO 20022 payments standards, Electronic Payments Association, formerly the National Automated Clearing House Association (NACHA) payments standards, and the IBM Information Framework (IFW) business object model. You can choose one of the models based on your requirement as the semantic model for your Composite Business Services. This model forms the basis for defining assertions, channels, roles, and other metadata for your Composite Business Services. The glossary is used to define business metadata for reference business service templates that are part of the content pack as well. The assets within the Banking Payments Pack leverage payments standards from ISO 20022, NACHA, and IFW. This ensures that the assets that you develop using the content pack comply to the industry standards. The business service templates contain a decomposition of the domain into the application suites, applications, and business services. These business services represent the reference templates. Each business service has been configured with channels that can be used to access the service and roles for which the service can be personalized. The associated Web services that are required by the business service have been mapped in the template. Sample policies are defined for each template using the context, content, and contract-based assertions sourced from the business glossary. Reusing these business services and metadata reduces the time required to assemble Composite Business Services. The Banking Payments Business Object Model is an ISO 20022 payments standards-based business object model that represents the conceptual view of the payments domain through business objects. The Business Object Model is a logical data model that can be used for implementing operational data stores for your Composite Business Services. The Banking Payments Service Interfaces contain banking payment-specific schemas and Web service interfaces based on a subset of Interface Design Model (IDM) of IFW. The Banking Payments Common Services is based on ISO 20022 and NACHA payments standards. These are basic interfaces and services that can be reused in your Composite Business Services. The following steps summarize the tasks that need to be done to develop a composite business service reusing the assets in the content packs: Note: The following summary of steps gives an overview of the key tasks that need to be performed to reuse the assets in the Industry Content Pack. An exhaustive list of steps required to reuse these assets is out of the scope of this book. 1. Leveraging the Service-Oriented Modeling and Architecture (SOMA) process, identify the assets from the content pack that can be reused. Important: Steps 2 through 6 are performed using WebSphere Integration Developer. 2. The business services templates are available as SCA modules. Service interface assets are represented as SCA libraries. Import the templates and libraries that have been identified for reuse. Note that the use of a template might mandate the need of the common services and interface libraries, because these libraries are reused by the templates. Chapter 14. Consuming service assets 413 3. Customize the BPEL for the business service if necessary. 4. Integrate the business services sourced from the content pack into the choreography of your composite business service. (This involves adding the business service partner links in the BPEL for the composite business service). 5. Create or update the SCA assembly for the composite business service with the references wired to the business services imported from the templates. 6. The business services templates are configured to route the service requests through the dynamic assembler. Ensure that the right context and content information is populated in the service requests that are made from the templates. This affects the service endpoint that is selected at run time by the dynamic assembler. You can test the business polices relevant to your business services using the Composition Studio Policy Simulator tool. 7. Customize the implementations for the services reused from the content pack. The business services templates might contain mock implementations or have no implementation attached to them. You will have to provide custom implementation for these services. Service interfaces, which have been sourced from the content pack, will require that implementations are provided as well. 8. Customize the metadata for the reused business services in the templates using the Composition Studio. This involves customizing roles, policies, channels, and other metadata with which the business service is configured. While it is optional to change the business level metadata (such as the channels and roles) based on your business needs, you might have to customize the technical metadata, such as the endpoint URLs for the services, based on your environment. Because you are developing a reusable asset, you might want to reuse the default business level metadata and leave this step for the consumers of the asset. 9. If your composite business service requires metadata, for example, assertions that are not part of the industry business glossary, you might have to extend the glossary using the Uniform Modelling Language (UML) models in Rational Software Architect. Terms not in the glossary can be introduced into the glossary from the industry standard Business Object Models. 14.6 Providing service reuse feedback Consumers of assets need to provide feedback on their reuse experience of an asset. This feedback provides the following benefits: Helps the producers assess the value, quality, and reusability of their asset Helps the governance bodies to assess the degree of success or failure of the governance policies related to asset reuse Helps Repository Administrators to assess the value of the Repository with respect to asset reuse We recommend the following best practices to service consumers in this regard: Business services and their composites can use the WebSphere Business Services Fabric dynamic assembler component to route the requests to service endpoints. This helps Administrators to use the WebSphere Business Services Fabric Performance Manager to monitor the performance of business services and use this information to assess service reuse. More information about this topic can be found in the Chapter 14, Manage service assets. 414 Strategic Reuse with Asset-Based Development Use WebSphere Service Registry and Repository as a central service Repository in the organization and use the integration features of WebSphere Service Registry and Repository and IBM Tivoli® Composite Application Manager to feed operational information about service usage from the management infrastructure to WebSphere Service Registry and Repository. WebSphere Service Registry and Repository stores information, such as metadata, associated with the related services for users and applications to access it when needed. For more information, refer to Chapter 15, “Managing service assets” on page 425. Rational Asset Manager contains a feature to rate assets that are stored in it. Services consumed from the asset managers can use the feedback facility provided by the repositories. Refer to Chapter 10, “Consume reusable assets” on page 281 for more information about Rational Asset Manager’s feedback capability. 14.7 Case study: SOA service reuse at ZYX Electronics In this section, we see how ZYX Electronics uses the features of Rational Asset Manager to consume service assets. Note that aspects of asset production also appear in this section. As discussed earlier, the asset manufacturing and asset use life cycles have connections and usually occur at the same time. Recall from Chapter 13, “Producing service assets” on page 359 that a new asset has been placed into the Repository. After submitting the new process model to the Rational Asset Manager Repository, Bob sent an e-mail to Al Aarkashan (the SOA architect at ZYX Electronics), as shown in Figure 14-4. The e-mail was to inform Al that there was a new asset submitted to Rational Asset Manager for the “Determine Applicant Eligibility” business process and that Al can start to create the requirements specification, design models, and initial implementation of this service. Figure 14-4 Bob e-mails the new business process asset to Al Chapter 14. Consuming service assets 415 Al Aarkashan, the SOA architect, received the notification sent by Bob and logged in to Rational Asset Manager to look at the newly created business process, as shown in Figure 14-5. Figure 14-5 Search for Determine Applicant Eligibility process model asset Al then used Rational Requisite Pro to create the requirements specification of this process and Rational Software Architect to create analysis and design models. When Al finished, he also used Rational Asset Manager Web interface to submit these new assets to the Repository (he created new Requirement and Software Design assets). He also created a relationship between these new assets and the business process asset submitted by Bob. Al then sent an e-mail notification to Deb Devak (the Service Developer at ZYX Electronics) to inform her about the newly loaded assets and to request that Deb start to design and implement the service. Deb received the e-mail, searched in Rational Asset Manager for the newly produced assets, and looked at the skeleton implementation produced by Al. Deb used WebSphere Integration Developer and WebSphere Process Server to assemble the process choreography and to implement and test the necessary services that are part of the choreography. Deb had previous experience using Spring from her time at a previous employer. However, rather than download the asset from the Internet, she searched in the Repository to learn whether it was available to be used and if so, what version. As shown in Figure 14-6 on page 417, Spring Version 2.1 was indeed available for reuse on ZYX projects. Important: According to the governance policy in ZYX Electronics, developers need to use Rational Asset Manager for reusable frameworks, such as the Spring framework, in order to avoid individual employees downloading content from the Internet, which might have potential copyright and licensing issues. 416 Strategic Reuse with Asset-Based Development Figure 14-6 Search for Spring open source framework V 2.1 Deb then proceeded to download the artifacts associated with the Spring V 2.1 asset. Also, based on her previous experience with the asset, she decided to rate this asset and gave it 5 stars using the Rating tab as shown in Figure 14-7. Figure 14-7 Rate Spring V2.1 asset When Deb verified that the service implementation worked correctly, she generated the Eligibility EAR to be used for deployment. When she generated this EAR file, she decided to add the implementation and service interface to Rational Asset Manager and associate them with the business process they support and the design model, which drove the creation, as shown in Figure 14-8 on page 418. Chapter 14. Consuming service assets 417 Figure 14-8 Service asset type relationships Because Deb already used Eclipse, she used the Rational Asset Manager Eclipse interface to create these new Service Implementation and Service Interface assets. To create the new Determine Applicant Eligibility Service Interface asset, she followed these steps: 1. Switch to the Asset Management perspective by clicking Asset Management as shown in Figure 14-9. Figure 14-9 Switch to Asset Management perspective in Eclipse Deb had already created a connection to the Rational Asset Manager Repository, so she did not have to create it again. For detailed steps of creating a connection to the Rational Asset Manager Repository using the Rational Asset Manager Eclipse Interface, go to A.2.3.2, “Eclipse client installation” on page 655 2. Right-click in the whitespace of the Asset Explorer view and select New → Asset as represented in Figure 14-10. Figure 14-10 Create new asset 3. Complete the New Asset window as shown in Figure 14-11 on page 419, and click Next. 418 Strategic Reuse with Asset-Based Development Figure 14-11 Complete new Eligibility Service Interface asset window 4. Click Next to skip the next window in the wizard, because Deb did not enter any asset attribute information. 5. Select the Business Planning and Sales categories for the asset and then click Next as shown in Figure 14-12 on page 420. Chapter 14. Consuming service assets 419 Figure 14-12 Select categories for the Service Interface asset 420 Strategic Reuse with Asset-Based Development 6. Select the Determine Applicant Eligibility.DOC and Eligibility.wsdl files from her workspace to be associated to the asset and click Finish as shown in Figure 14-13. Figure 14-13 Select artifacts to be associated to the asset After Deb completed these steps, the Eligibility Service Interface asset icon representation contained a red X as shown in Figure 14-14, which means something was missed with the asset, and Deb was unable to complete the submission process until it is resolved. Figure 14-14 Error submitting the Service Interface asset To fix the problems, Deb went to standard Eclipse Problems view and she discovered that she had not associated the WSDL file to the asset as Figure 14-15 on page 422 shows. Chapter 14. Consuming service assets 421 Figure 14-15 Problems submitting the Service Interface asset This constraint is added by default to the Service Interface asset type to verify that all service interface assets have at least a WSDL file describing the service. So Deb selected the Content tab to add the Eligibility.wsdl file to the asset. And, because she had also forgotten to create a relationship between this service interface and the process model, she created a “Fulfills” relationship between these assets as shown in Figure 14-16. Figure 14-16 Establish relationship between service interface and process model assets To submit the asset to the Rational Asset Manager Repository, Deb clicked Submit. Because it was configured by default in the SOA Model, the Service Interface asset must follow a review process, so Deb selected to follow this review process as shown in Figure 14-17. Figure 14-17 Submit the asset for approval through the review process The review process configured for the Service Interface asset type is similar to the one described and explained in Chapter 11, “Manage reusable assets” on page 303 for reviewing open source frameworks. Chapter 11, “Manage reusable assets” on page 303 provides more information about the review process and how reviewers can use the Rational Asset Manager Web interface and Rational ClearQuest to review the asset. After adding the Eligibility service interface to Rational Asset Manager, the service implementation code needed to be added and associated with this service interface. Deb used the same Rational Asset Manager Eclipse interface and followed the same steps previously described for the Service Interface asset type. The only difference was that the constraints associated to each asset type were different. The Service Implementation asset type has three possible constraints placed upon it: First, it must be related to a Service Interface asset. 422 Strategic Reuse with Asset-Based Development It must contain at least one artifact labeled as Binary. In the case of service implementation, this must be the .war, .ear, or other executable file supporting the services implementation and able to execute. One other optional constraint is the labeling of a deployment descriptor file. Chapter 14. Consuming service assets 423 424 Strategic Reuse with Asset-Based Development 15 Chapter 15. Managing service assets This chapter provides information about the management aspects of services in a service-oriented architecture (SOA) from an Asset-Based Development perspective. In Chapter 1, “Introduction to Asset-Based Development” on page 3, 1.4.1, “Asset management” on page 9 mentions the issues involved in managing assets in an SOA. This chapter describes how to use the management features of multiple IBM products and tools for SOA to address these issues. It shows how you can use specific product features and their integration capabilities with other IBM products to enforce governance policies that help you better manage the services in an SOA. This chapter discusses the following topics: Configuring the repositories for effective service management: – Integrating Rational Asset Manager with WebSphere Service Registry and Repository – Integrating WebSphere Business Services Fabric with WebSphere Service Registry and Repository Reviewing and approving services Reporting on service reuse: – Assessing service reuse with WebSphere Service Registry and Repository and IBM Tivoli – Assessing service reuse with WebSphere Business Services Fabric performance manager Retiring service assets Asset management insights for WebSphere Studio Asset Analyzer users Understanding the Service Integration Maturity Model Managing service assets in our case study: SOA Service Reuse at ZYX Electronics © Copyright IBM Corp. 2008. All rights reserved. 425 15.1 Configuring the repositories for effective service management Chapter 13, “Producing service assets” on page 359 mentions the various repositories in the life of a service asset, including Rational Asset Manager, WebSphere Service Registry and Repository, and the Business Service Repository. It also shows the relationships among these repositories and mentions when each of these repositories can be used, as shown in Figure 15-1. Figure 15-1 Repositories in the life of a service This section provides details about integrating these repositories for effective asset management. Before we go into the details, it is important to understand how this integration can help you in better service management. Assuming that the products mentioned here have been configured for integration: Consider this scenario regarding a under-performing service: – You can use the service operational data that is fed into WebSphere Service Registry and Repository from IBM Tivoli Composite Application Manager to identify defects in the services. – You can find this service in WebSphere Service Registry and Repository and navigate to the corresponding asset in Rational Asset Manager directly from WebSphere Service Registry and Repository and raise a defect in Rational ClearQuest using the Rational Asset Manager-ClearQuest forum integration feature. – You can track the status of the defect from Rational Asset Manager. Using the integration between ClearCase and Rational Asset Manager, developers can source the asset from Rational Asset Manager into ClearCase to fix the defect. When the asset has been updated in Rational Asset Manager with the fix, and its review process has been completed, you can publish the service back to WebSphere Service Registry 426 Strategic Reuse with Asset-Based Development and Repository. In this way, you can effectively manage assets from a central Repository (Rational Asset Manager) while using Rational Asset Manager’s integration features to work with the capabilities of other related products. By sourcing technical service metadata from WebSphere Service Registry and Repository to assemble Composite Business Services in WebSphere Business Services Fabric, you can manage updates to service metadata from a single Repository (WebSphere Service Registry and Repository) without having to make changes in multiple repositories, thus improving developer productivity and metadata consistency across the organization. The following sections detail the integration of Rational Asset Manager with WebSphere Service Registry and Repository and the integration of WebSphere Business Services Fabric with WebSphere Service Registry and Repository. For details about integration of Rational Asset Manager with Rational ClearQuest and Rational ClearCase, refer to Appendix A, “Rational Asset Manager: Installation and administration” on page 637. 15.1.1 Integrating Rational Asset Manager and WebSphere Service Registry and Repository The integration of the Rational Asset Manager and the WebSphere Service Registry and Repository has two sides to it: Synchronize service metadata from the WebSphere Service Registry and Repository into the Rational Asset Manager. Publish service metadata from the Rational Asset Manager asset into the WebSphere Service Registry and Repository. Synchronizing service metadata The service metadata that is in the WebSphere Service Registry and Repository can be useful for the users of the Asset Manager to understand, for example, what services are deployed in the run time or the relationships between the various services. Hence, the Rational Asset Manager provides a synchronization facility to replicate service metadata from the WebSphere Service Registry and Repository into the Rational Asset Manager. This allows users working in the Rational Asset Manager to have visibility to the service runtime characteristics and to make use of this metadata in better utilization of the assets stored in the Rational Asset Manager. The integration works by configuring the Rational Asset Manager with the WebSphere Service Registry and Repository server details. Refer to the Appendix A, “Rational Asset Manager: Installation and administration” on page 637 for more details about how to configure the Rational Asset Manager for WebSphere Service Registry and Repository connectivity. As part of the configuration, you can provide a time interval for the synchronization to run. Each time that the synchronization happens, the Rational Asset Manager checks the WebSphere Service Registry and Repository for new assets or updates for existing assets and brings them into the Rational Asset Manager. By bringing in service metadata in Web Services Description Language (WSDL) files, XML Schema Definition (XSD) files used by services, and the relationships among various services from the WebSphere Service Registry and Repository, the Rational Asset Manager users can get access to this metadata when they are searching for an asset in the Rational Asset Manager. Chapter 15. Managing service assets 427 As a result of synchronization: A category called service registry is created in the Rational Asset Manager for the data retrieved from WebSphere Service Registry and Repository. All of the classifications, WSDLs, XSDs, and other data brought in from WebSphere Service Registry and Repository are stored in this category. The unique ID of the document in WebSphere Service Registry and Repository is also brought in to the Rational Asset Manager to help users relate between the Asset Manager and WebSphere Service Registry and Repository. A link called bsrURI is created and associated with the replicated document in the Rational Asset Manager. Users can click this link to navigate to view the service metadata in the WebSphere Service Registry and Repository Web interface. Publishing service metadata If you have a new service that is developed and stored in the Rational Asset Manager but is not updated with service metadata in the WebSphere Service Registry and Repository, you can use the Rational Asset Manager to publish service metadata to the WebSphere Service Registry and Repository. You can publish the following document types into the WebSphere Service Registry and Repository: WSDL XSD XML Web Services Policy Framework (WS-Policy) Service Component Architecture (SCA) Module You need to create a WebSphere Service Registry and Repository server configuration in order to be able to publish services to the WebSphere Service Registry and Repository. Refer to Appendix A, “Rational Asset Manager: Installation and administration” on page 637 for more details about how to configure the Rational Asset Manager for the WebSphere Service Registry and Repository connectivity. When an asset is published into the WebSphere Service Registry and Repository: A concept is created in the WebSphere Service Registry and Repository with the name of the asset. This new concept contains the ID and the version of the asset that was in the Rational Asset Manager. Note: A WebSphere Service Registry and Repository concept can be used to represent anything that does not have a physical document in the WebSphere Service Registry and Repository. For detailed information about WebSphere Service Registry and Repository concepts, refer to the WebSphere Service Registry and Repository Handbook, SG24-7386. The individual artifacts that are selected for publishing, such as WSDLs, XSDs, and so forth, are then published. You can overwrite the authentication credentials for the WebSphere Service Registry and Repository that are part of the WebSphere Service Registry and Repository configuration information in the Rational Asset Manager with a new set of credentials while publishing service metadata to the WebSphere Service Registry and Repository. You can select specific documents that are part of the Rational Asset Manager asset to be published to the WebSphere Service Registry and Repository. After the artifacts are successfully published, you might see them as custom relationships to the new concept that was created for the asset in the WebSphere Service Registry and 428 Strategic Reuse with Asset-Based Development Repository. You can also see the link to the Rational Asset Manager asset as a custom property of the published document in the WebSphere Service Registry and Repository. When Rational Asset Manager tries to synchronize its contents with WebSphere Service Registry and Repository, it creates a single asset shadowing the WebSphere Service Registry and Repository service metadata concept that was created as a result of the publish operation. Rational Asset Manager also creates a content artifact for each WebSphere Service Registry and Repository service document related to the WebSphere Service Registry and Repository service metadata concept. The shadow asset is linked to the original asset that was used to publish to WebSphere Service Registry and Repository. This is necessary, because these services can undergo any kind of versioning or life cycle changes at the WebSphere Service Registry and Repository level when they are in the WebSphere Service Registry and Repository. By having the asset in the Rational Asset Manager linked to the published data in the WebSphere Service Registry and Repository, users can know which artifacts were originally used to publish the service and what the current status of the service is in the WebSphere Service Registry and Repository. Figure 15-2 summarizes the publish and synchronization tasks that happen as part of the Rational Asset Manager and the WebSphere Service Registry and Repository integration. Figure 15-2 Rational Asset Manager and WebSphere Service Registry and Repository integration Chapter 15. Managing service assets 429 Figure 15-2 on page 429 shows the steps that are performed by Rational Asset Manager when the CreditCheckService asset is published to the WebSphere Service Registry and Repository. The box with a dotted outline in Figure 15-2 on page 429 represents a logical grouping of the concept and the documents in WebSphere Service Registry and Repository that resulted from the publish operation. Figure 15-2 on page 429 also shows the steps that are performed by Rational Asset Manager when it is configured to synchronize service metadata from WebSphere Service Registry and Repository. Figure 15-2 on page 429 shows two synchronize operations to differentiate the steps that are performed during the synchronization of WebSphere Service Registry and Repository content that has been published from Rational Asset Manager from the steps that are performed to synchronize content that was found in WebSphere Service Registry and Repository but was not published from Rational Asset Manager. However, in reality, these two types of assets are synchronized during a single attempt to synchronize. Note that there is only one shadow asset for the CreditCheckService. This shadow for the WebSphere Service Registry and Repository concept holds the CreditCheck.wsdl and Account.xsd as its contents. The Transformation.wsdl is an example of a service found in WebSphere Service Registry and Repository that was not published from Rational Asset Manager. Multiple Repository instance configurations You might want to have a dedicated instance of the WebSphere Service Registry and Repository for the development, testing, and the production environments. The Rational Asset Manager can be configured to work with multiple WebSphere Service Registry and Repository servers. The synchronization process results in a shadow asset being created for every WebSphere Service Registry and Repository instance that has been configured in Rational Asset Manager. You can also select from this set of repositories when you publish an asset to WebSphere Service Registry and Repository. 15.1.2 Configuring WebSphere Business Services Fabric for sourcing metadata from WebSphere Service Registry and Repository Chapter 13, “Producing service assets” on page 359 mentions the basics of consuming services from WebSphere Service Registry and Repository to assemble Composite Business Services. For detailed step-by-step instructions of how to configure WebSphere Business Services Fabric for WebSphere Service Registry and Repository integration, refer to the following article: http://www.ibm.com/developerworks/websphere/library/techarticles/0708_balaji/0708_ balaji.html 15.2 Review and approve services Creation and access to services need to be governed by policies that are laid out by the governance boards. Services submitted to repositories need to pass through certain review and approval processes before they get published. This section details the features of WebSphere Service Registry and WebSphere Business Services Fabric in this respect. 430 Strategic Reuse with Asset-Based Development 15.2.1 Security features in WebSphere Service Registry and Repository WebSphere Service Registry and Repository makes use of the security mechanisms provided by WebSphere Application Server to ensure that only authenticated users are able to access the various interfaces that it exposes. However, it also extends these capabilities to allow more fine-grained access control to the information that it stores. These capabilities are discussed in the following sections. J2EE security roles Because WebSphere Service Registry and Repository is a Java 2 Platform, Enterprise Edition (J2EE) application; it defines a number of security roles within its deployment descriptors. When global security is enabled within WebSphere Application Server, these J2EE security roles are used to restrict who can access WebSphere Service Registry and Repository at run time. In other words, WebSphere Application Server uses these roles to enforce standard J2EE security within the relevant J2EE containers at run time. The J2EE security roles defined by WebSphere Service Registry and Repository are: User Administrator In order to be able to access the WebSphere Service Registry and Repository Web user interface or to invoke methods on the WebSphere Service Registry and Repository application programming interface (API), a user must at least be mapped to the J2EE User role. By default, the special subject AllAuthenticatedUsers is mapped to both the User and Administrator roles during WebSphere Service Registry and Repository installation. Mapping the AllAuthenticatedUsers special subject to a role maps any user who has authenticated to WebSphere Application Server to that role. Therefore, in a default WebSphere Service Registry and Repository installation, all users who are able to authenticate to WebSphere Service Registry and Repository are able to perform any action against WebSphere Service Registry and Repository. Note: We recommend that you modify the relevant environment script prior to installation to ensure that only those users or groups who are permitted to access WebSphere Service Registry and Repository are mapped to the relevant roles. However, note that the Server user ID that is configured in your WebSphere Application Server environment must be mapped to the Administrator J2EE security role in WebSphere Service Registry and Repository. If this mapping is not defined, WebSphere Service Registry and Repository will fail to start when running in a WebSphere environment where security has been enabled. User-defined roles The access control provided by the use of J2EE security roles within WebSphere Service Registry and Repository is very coarse-grained. It is only able to control who can access the WebSphere Service Registry and Repository Web user interface or the WebSphere Service Registry and Repository API methods themselves. It is not able to control access to the objects on which the WebSphere Service Registry and Repository API methods operate. In order to provide more fine-grained access control functionality, WebSphere Service Registry and Repository provides an authorization component that allows additional roles to be defined and for permissions to be added to these roles. User or group principals must be explicitly mapped to these roles in order for the principal to have the entitlement (permissions) associated with the role. When a method is invoked on the API, WebSphere Service Registry and Repository uses the authorization component to determine whether the user is authorized to perform the Chapter 15. Managing service assets 431 requested action on the target object or objects. Therefore, in a secure environment, each method invocation on the WebSphere Service Registry and Repository API results in the user being authorized twice: one time for standard J2EE role-based access control and one time for the more fine-grained access control provided by WebSphere Service Registry and Repository. Note: Any roles that are defined to the authorization component in WebSphere Service Registry and Repository are completely separate from the J2EE security roles defined within the deployment descriptors for the WebSphere Service Registry and Repository application. At run time, WebSphere Application Server is only aware of the Administrator and User J2EE security roles. To simplify the installation and configuration of WebSphere Service Registry and Repository, the installation process creates roles within the WebSphere Service Registry and Repository authorization component that match the J2EE security roles. That is, the installation process creates an Administrator and a User role within the WebSphere Service Registry and Repository authorization component. It also maps the same users and groups to these roles that are mapped to the J2EE security roles. Permissions As shown in Figure 15-3, a permission within WebSphere Service Registry and Repository encapsulates an action and the target objects on which it can be performed. Adding a permission to a role grants the users who are mapped to that role the permission to perform the specified action on the specified target objects. Figure 15-3 Permissions in WebSphere Service Registry and Repository Permissions can be configured with name, action, and target properties. The name of the permission is used to identify the permission within WebSphere Service Registry and Repository. The action property for a permission specifies the operation that the permission 432 Strategic Reuse with Asset-Based Development authorizes. In addition to the create, retrieve, update, and delete operations, other valid actions include control over state transitions and governance of the objects in WebSphere Service Registry and Repository. The target property for a permission specifies the objects in WebSphere Service Registry and Repository to which the permission applies. Examples of valid targets are an XSD document, a WSDL document, and a SCA Module, to name a few. Default permissions WebSphere Service Registry and Repository adopts a permissive approach to access control in the authorization component. This means that access to all of the artifacts in WebSphere Service Registry and Repository is unrestricted by default. This approach allows users to continue to access objects in WebSphere Service Registry and Repository when security is enabled without the need to define permissions that explicitly grant them access to these objects. However, when a role is explicitly granted access to a set of target objects in WebSphere Service Registry and Repository, all other roles are implicitly denied access to that set of objects. In this situation, in order for other roles to access the same set of target objects, each role must also be explicitly granted access to the set of objects. For example, if you add a permission to the Administrator role that granted its members permission to create WSDLDocument objects in WebSphere Service Registry and Repository, all other roles that were defined to the authorization component can no longer create WSDLDocument objects. In order to grant users in a Developer role the permission to create WSDLDocuments, you need to add the same permission to this role. WebSphere Service Registry and Repository also defines default permissions for Administrator and User roles. Extensible Access Control Markup Language (XACML) The Extensible Access Control Markup Language is an XML-based language that is designed to express security rules, policies, and policy sets that define the access rights of users (subjects) to resources. The goal of XACML is to provide a common policy language that allows organizations to enforce all of the elements of their security policy across all of the components of their IT infrastructure. The XACML specifications were developed through a collaborative effort involving various companies, including IBM, Sun™ Microsystems, and Entrust. XACML was ratified by the Organization for the Advancement of Structured Information Standards (OASIS) in February 2003. The XACML specification can be found here: http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=xacml The WebSphere Service Registry and Repository authorization component uses XACML to represent the security policies that have been defined to it. It generates XACML policy files that are then stored in WebSphere Service Registry and Repository and are used during application startup to initialize the WebSphere Service Registry and Repository authorization component with the current security policies. The WebSphere Service Registry and Repository authorization component makes use of two policy files, and we discuss these files in more detail in the following sections. Role mapping file The WebSphere Service Registry and Repository authorization roles, and the user and group principals that have been mapped to these roles, are defined in the role mapping XACML file. This file is read from WebSphere Service Registry and Repository during application startup and is used to initialize the role mappings within the WebSphere Service Registry and Repository authorization component. The role mapping file is stored in WebSphere Service Registry and Repository as a configuration document called SrrAuthzRoleMappingXacml of type XACML. Chapter 15. Managing service assets 433 Authorization policy file The WebSphere Service Registry and Repository authorization policy is defined in the authorization policy XACML file. This file defines the mapping between permissions and the roles to which they have been added. This file is read from WebSphere Service Registry and Repository during application startup and is used to initialize the authorization policy within the WebSphere Service Registry and Repository authorization component. The authorization policy file is stored in WebSphere Service Registry and Repository as a configuration document called SrrAuthCheckedPolicyXacml of type XACML. 15.2.2 WebSphere Business Services Fabric Governance Manager IBM Business Services Repository stores metadata that is used to create business services in a service-oriented architecture (SOA) system. The metadata describes the services, policies, relationships among them, and entitlements to subscribers. Using IBM Business Services Composition Studio, you can create or modify this metadata. A multi-authoring environment facilitates controlling the changes published to IBM Business Services Repository. To ensure data integrity, changes applied to the metadata must be monitored and conflicts must be resolved. IBM Business Services Governance Manager enables you to manage this process through the following business services. Configure Projects: To create Fabric projects and assign project teams: IBM Business Services Governance Manager provides the mechanism to create multiple types of projects. All projects are associated with a team, which is an organization managed through IBM Business Services Subscriber Manager. Only users on the team can use a given project through IBM Business Services Composition Studio. A Fabric project is created to manage the metadata for a set of applications and services. You can also use Configure Projects to carry out the configuration of federation data sources, such as Lightweight Directory Access Protocol (LDAP) directory and WebSphere Service Registry and Repository (WebSphere Service Registry and Repository) to enable external repositories. Configure Namespaces: To create and manage namespaces for each project: After you create a Fabric project, you have to staff it with the team and allocate the namespaces in which the instances will be stored. Metadata instances can be created in or moved between namespaces using IBM Business Services Composition Studio. Content can be exposed to another team by having their project import a namespace owned by another project. Configure Environments and Configure Repository: An environment is a named collection of logical and physical resources used to support the performance of a function. Often, a service is deployed in multiple environments, for example, development environments and testing environments. A single instance of WebSphere Business Services Fabric allows you to manage business services deployed across multiple environments. Also, every environment can have a dedicated instance of WebSphere Business Services Fabric to manage the applications deployed within it. Through the Configure Environments business service, organizations can define environments that provide a named scope in which services are deployed. Every WebSphere Business Services Fabric instance is tied to a single instance of IBM Business Services Repository and the metadata within it. Using the Configure Repository business service, organizations can associate a Repository instance with specific environments. This association specifies the subset of environments that the associated Repository instance is allowed to use. At run time, only endpoints in supported environments are considered for endpoint selection. 434 Strategic Reuse with Asset-Based Development Manage changes business service: To view, approve, or reject metadata changes and to publish approved changes to IBM Business Services Repository: The governance process enqueues the service metadata changes in an approval system for immediate pass-through. While automatic approval of changes is the preferred process in a development environment, deployments in other environments might necessitate a designated approver for all metadata changes. Using the Manage Changes business service, the approver can sanction or reject business service metadata submitted by IBM Business Services Composition Studio users. After approving the changes, the approver or the designated user must publish the approved change lists to IBM Business Services Repository. Thus, only authorized individuals can approve and publish or reject the proposed changes to business services’ metadata. View change history business service: To view metadata changes that have been processed through the governance system: Using this business service, a change Administrator can trace metadata changes published to IBM Business Services Repository, through visibility into their status, and other pertinent details, as they pass through the various approval stages. Import/export business service: To transport content: between environments, for translation, and for version control: When changes have been made and it is time to deploy the metadata created in a development Repository to another environment for testing and ultimately promotion, this is where the import and export of a Fabric Content Archive is needed. A Governance Administrator can export part or all of the data for a project to a Fabric Content Archive file, and then import or update this project on to another system. Usage scenarios The following scenarios exemplify the usage of the governance business services: Scenario 1: Consider an example where an enterprise wants to develop a credit check business service that will automate the assessment of the credit-worthiness of customers. Using the Configure Projects and Configure Namespaces business services, you can create a development project workspace and assign a development team with controlled access to the business service metadata during the development process. Scenario 2: To develop and test the credit check business service, you might require two separate environments. Using the Configure Environments business service, you can create two named environments, “develop” and “test”, and define a scope for each environment. You can associate one or more of these environments to endpoints defined by using IBM Business Services Composition Studio. Using the Configure Repository business service, you can associate these environments with Repository instances. Scenario 3: During the development process or later, you can export the project that you created in Scenario 1 to other deployments, such as a test or production environment. A prerequisite to exporting a project is exporting the environments associated with the project. Therefore, you export the “develop” and “test” environments that you have created in Scenario 2 before you export the project. Other requirements, such as providing multilingual support for the business service to cater to a global market, necessitate externalizing and translating user-facing service elements. Maintenance of the service versions, such as the alpha, beta, and release versions, is also a key requirement. The Import/Export business service provides the functionality to fulfill these requirements. Chapter 15. Managing service assets 435 Governance process in WebSphere Business Services Fabric The following steps enumerate the governance process in WebSphere Business Services Fabric: 1. Create a Fabric project. 2. Assign the team members for the project. 3. Create and configure the appropriate namespaces (both Owned and Imported). Note: You perform steps 1, 2, and 3 by using IBM Business Services Governance Manager. 4. Using IBM Business Services Composition Studio, select the project and create instances of the objects. This action generates a list of Business Service model changes. 5. Submit this list through IBM Business Services Composition Studio. 6. The system transfers these changes to IBM Business Services Governance Manager. 7. Authorized individuals approve or reject these changes through IBM Business Services Governance Manager. 8. Approvals or rejections are reflected in IBM Business Services Governance Manager. When approved, the Change Administrator can publish approved changes to the Repository. 9. Export the metadata content from a development environment; import it into another WebSphere Business Services Fabric environment. In a typical usage scenario, developers import and export content archive files to test them in stand-alone WebSphere Business Services Fabric deployments. An entire WebSphere Business Services Fabric deployment runs on an embedded server in WebSphere Integration Developer, and the default setting for the IBM Business Services Governance Manager approval is set to pass through. 15.3 Reporting on service reuse One of the key concerns of asset management is to be able to assess the reuse of assets in the organization and thus be able to assess the value of Asset-Based Development. This section provides the details of the features of WebSphere Service Registry and Repository (WSRR) and WebSphere Business Services Fabric that help you assess the value of Asset-Based Development. 15.3.1 Assessing service reuse with WSRR and IBM Tivoli WebSphere Service Registry and Repository is the source of service information and metadata in an organization. Therefore, it plays a double role in the overall domain space of SOA management: It provides the SOA management infrastructure with detailed information about the registered services. It supports the enrichment of service information with operational data that is observed and processed by the SOA management infrastructure. Figure 15-4 on page 437 shows the interactions between a service registry and Repository and the SOA monitoring and management infrastructure. 436 Strategic Reuse with Asset-Based Development Figure 15-4 WebSphere Service Registry and Repository and SOA Management Registered services are managed in the WebSphere Service Registry and Repository. This information is accessed by multiple actors, including the Service Provider (registering services) and the Service Consumer (looking for services to consume). The monitoring and management infrastructure uses this information about registered services to enhance its understanding of the topology and characteristics of the services in the monitored SOA. This information can include immediate details about service endpoints. It can also consist of a meaningful description of service interfaces and behavior, or it can provide a formal description of relationships across services and other SOA citizens, such as business processes, consumers, and providers. Based on this information, the Monitoring and Management infrastructure can enhance its view of the managed resources and their topologies. The monitoring and management infrastructure then feeds back operational data that it collects about the observed services to the service registry and Repository. This data has been captured and collected at run time by the observation points from the running services that are part of the managed resources. Various elements of the runtime behavior of the services can be collected, such as the average response time, the fault rate, the size, the frequency of the messages, and so on. These operational elements are used to further enrich the service information model managed by the service registry and Repository, therefore, allowing other factors in the SOA to use this information. Chapter 15. Managing service assets 437 IBM Tivoli Composite Application Manager for SOA provides the management function for managing the services and mediations in a service-oriented architecture (SOA) running on multiple application servers and SOA infrastructures. For supported environments, IBM Tivoli Composite Application Manager for SOA monitors and performs simple control of message traffic between Web services in the SOA. IBM Tivoli Composite Application Manager for SOA relies on a distributed network of data collectors to feed data into IBM Tivoli Monitoring for analysis and management. The integration between IBM Tivoli Composite Application Manager for SOA and WebSphere Service Registry and Repository can be broken down into two key scenarios: WebSphere Service Registry and Repository Discovery Library Adapter (DLA) discovers services and static relationships between service artifacts that are registered with WebSphere Service Registry and Repository. The data discovered by the DLA is displayed in the new Services Management Workspace within the Tivoli Enterprise Portal. This integration also includes the ability to discover and display certain XML-based metadata files associated with a service and extracted from WebSphere Service Registry and Repository. IBM Tivoli Composite Application Manager for SOA sends status events back to WebSphere Service Registry and Repository when a situation is detected for a service port and operation. This mechanism can be used to enrich service metadata in WebSphere Service Registry and Repository with additional operational information that is monitored and fed back by IBM Tivoli Composite Application Manager for SOA. Providing coarse-grained information about service health allows registry users, such as mediations, to dynamically select services and human beings to choose a specific service to access. This book focuses on how the exchange of information between the WebSphere Service Registry and Repository and the IBM Tivoli Composite Application Manager for SOA can be used to gain insights about services as reusable assets. In other words, it tries to show how the integration of the two products can be used to answer questions, such as: Which of the services are registered in the WebSphere Service Registry and Repository but not being used? Which of the services are being used but are not registered in the WebSphere Service Registry and Repository? Which of the registered services fault frequently? The answers to these questions coupled with the integration features of the various IBM repositories help you better manage your assets, thus enhancing their reusability across the organization. Important: A detailed description of the integration of the WebSphere Service Registry and Repository and IBM Tivoli Composite Application Manager for SOA is out of the scope of this book. For more information about how to configure the products for integration and the benefits of the integration, refer to the WebSphere Service Registry and Repository Handbook, SG24-7386. Using service discovery information IBM Tivoli Composite Application Manager discovers service metadata relevant for SOA management through the use of adapters: IBM Tivoli Composite Application Manager for SOA Discovery Library Adapter discovers the relationships between service ports and operations and the application servers and computer systems on which they are deployed, using data collected by IBM 438 Strategic Reuse with Asset-Based Development Tivoli Composite Application Manager for SOA monitoring agents and retrieved from Tivoli Enterprise Monitoring Server. WebSphere Service Registry and Repository Library Adapter discovers the relationships between service ports, operations, services, port types, and metadata documents from WebSphere Service Registry and Repository. WebSphere Service Registry and Repository can process Web Services Description Language (WSDL) and other definition files to determine these static relationships. Business Process Execution Language for Web Services Discovery Library Adapter discovers the relationships between port types, operations, and business processes from BPEL files. Using these adapters: Observed services are discovered using IBM Tivoli Composite Application Manager for SOA Discovery Library Adapter from the running agents monitoring operational applications and services. Registered services are discovered using WebSphere Service Registry and Repository Discovery Library Adapter by querying WebSphere Service Registry and Repository for published services and related information. IBM Tivoli Composite Application Manager for SOA captures all this information in a Repository called the Common Object Repository. The information in the Common Object Repository must be reconciled to link observed and registered services together and ensure consistency between designed and operational states of services. After configuring the adapters and other integration elements of the WebSphere Service Registry and Repository and IBM Tivoli Composite Application Manager for SOA, the service information can be viewed in the Tivoli Enterprise Portal using the Services Management workspace. This workspace provides topology views to help you with the following tasks: View the services and service relationships that are registered with WebSphere Service Registry and Repository that have been discovered by WebSphere Service Registry and Repository DLA and imported into the Tivoli Common Object Repository. View service metadata documents from WebSphere Service Registry and Repository. View the service ports and operations that are discovered by the IBM Tivoli Composite Application Manager for SOA DLA and imported into the Tivoli Common Object Repository. Compare a set of service definitions with a set of discovered services in order to verify that services are implemented and operating as designed. View the business processes that use activities that are implemented by Web services that are discovered by the IBM Tivoli Composite Application Manager for SOA DLA or the WebSphere Service Registry and Repository DLA. The business process and service relationship data is discovered by the BPEL DLA and imported into the Tivoli Common Object Repository. Chapter 15. Managing service assets 439 Reconciliation of the observed and registered service information helps to point out the following situations regarding asset (service) reuse: Services observed but not registered: Assuming that registering a service in the WebSphere Service Registry and Repository is a prerequisite to a broader reuse of that service, this situation might reflect one of the following scenarios: – The operational services, which are currently observed, are not the ones targeted for exposure and reuse. These observed services might be only test services whose implementation is due to change. – The observed services can reflect the existence of service assets in the Rational Asset Manager that are not registered in the WebSphere Service Registry and Repository. – The observed services can reflect the existence of reusable assets in the organization that have not been published and registered in the repositories. Knowing these facts about the assets can help enforce governance policies on the assets, thus, enabling better reuse. Services registered but not observed: This situation might indicate: – The fact that the common services, which are registered in the WebSphere Service Registry and Repository and potentially highly reused, are missing monitoring capabilities – The fact that certain registered services are not being used by consumers probably due to defects in the service, such as poor performance and so forth This information about the assets can lead to the identification of defects in the services, thus, helping to improve their quality. Services registered and observed: This situation can prove to be a sound foundation to enable and understand common service reuse. Using forwarded service information Service status information is forwarded to WebSphere Service Registry and Repository using the situation and event mechanisms provided by Tivoli management infrastructure and leveraged by IBM Tivoli Composite Application Manager for SOA. IBM Tivoli Monitoring gathers data from the various monitoring agents that are installed on the computers in your environment. Information about Web services is collected for IBM Tivoli Composite Application Manager for SOA and stored for display in tables of attributes. Events are triggered in IBM Tivoli Composite Application Manager when the attribute values hit certain thresholds. While there are several attribute tables that contribute to the generation of events related to observed services, only the events generated from a specific table called the KD42IT: Services Inventory_610 attribute table are propagated to WebSphere Service Registry and Repository. A situation in IBM Tivoli Composite Application Manager for SOA is a condition where a set of attributes is tested against a threshold. The situation evaluates the conditions at predefined intervals and invokes the appropriate automated responses and notification methods. IBM Tivoli Composite Application Manager for SOA provides a set of predefined situations. The following situations are supported for WebSphere Service Registry and Repository integration, because they are generated from the information stored in the KD42IT: Services Inventory_610 attribute table: 440 Fault_610: MessageSize_610 MaxMessageSize_610 ResponseTimeCritical_610 Strategic Reuse with Asset-Based Development ResponseTimeWarning_610 MaxResponseTimeCritical_610 MaxResponseTimeWarning_610 These situations are triggered when there are faults caused by Web services, messages sizes, and response times for the Web services that exceed the configured thresholds. These predefined situations can be configured with custom threshold values or custom situations can be defined to monitor specific attributes of the services. When a situation event is detected, the properties of the service in WebSphere Service Registry and Repository are updated with the operational metadata. From a service management perspective, you can use this information to measure the utilization of the service assets and plan service migration/retirement strategies accordingly. The effectiveness of the SOA can be captured in the service information where service usage can directly reflect the success of the overall reuse policy of services across consumers. Defects might be identified in the services (for example, based on the fault situation event) and might be raised in Rational ClearQuest by tracing the asset artifacts from WebSphere Service Registry and Repository to Rational Asset Manager and utilizing the integration features of Rational Asset Manager and Rational ClearQuest. 15.3.2 Using WebSphere Business Services Fabric Performance Manager for asset management IBM Business Services Performance Manager provides business visibility and monitoring of service-oriented processes and applications. It includes multi-perspective views and enables drill-down analysis of events and exceptions in a loosely coupled, service-oriented business ecosystem. Designed for seamless interoperability with leading business activity monitoring and Web services management tools, IBM Business Services Performance Manager provides greater visibility across service-oriented business processes and functions. The Performance Manager provides predefined reports: Business Service Usage report Service Performance report Business Service Invocation report Ecosystem Performance report This section highlights these reports with a focus on how these reports can help you better manage service assets. Chapter 15. Managing service assets 441 Service Usage report The Service Usage report shows the analysis details of business service used in an enterprise or its ecosystem. This report shows the following service utilization details: Name: Name of the organization using the business service Volume: The number of times that the business service was invoked (utilized) by the organization within the specified duration Cost: The amount per unit charged to the organization for the utilization of the business service Cost Modifier: The base unit for calculating the cost of business service usage. Valid values for base unit are transaction, second, minute, hour, day, month, and year. Total: The total amount charged for business service usage. It is the product of the volume of transactions and the cost per transaction. The volume metric shows the number of times that the business service was invoked (utilized) by the organization within the specified duration. If this business service is managed as a reusable asset in the organization, this metric can be used to judge the use of the asset in the organization. A low value indicates that the business service is not being utilized, which can lead to further analysis of the asset at the business and technical levels to understand the cause for low utilization. The asset might have technical defects that make it less reusable in multiple Composite Business Services. This metric can also lead to the conclusion that the asset does not solve a problem that has business value and hence might not qualify to be a reusable asset. In Chapter 6, “Value, impact, and return on investment” on page 103, 6.1, “Impact and ROI” on page 103 discusses various costs that are involved in Asset-Based Development. One of the costs is the runtime cost of executing a service asset. This can include the cost of the software and hardware infrastructure that is required for a successful execution of a business service. The service usage report can be used as feedback to the asset management team to measure the level of reuse and the cost involved in the reuse of a business service asset. The cost metric gives the amount charged to the organization for utilizing the service. Assuming that this service is an asset, this value indicates the runtime cost of using this asset. This can be used to add up to the additional costs that are involved in creating and maintaining this asset and relate the final value to the income earned out of this business service. In a business model where a composite business service is being used by a service provider, the provider can configure the cost of the business service to an appropriate value and use the cost from the utilization report to charge the consumers. In this model, the cost metric turns out to be the returns obtained from using the asset. Figure 15-5 on page 443 shows an example of this report. 442 Strategic Reuse with Asset-Based Development Figure 15-5 Service Usage report in WebSphere Business Services Fabric 5.3.1, “Asset governance” on page 66 mentions the various models through which the reuse team can be funded during the Planning phase. One variation to the “Payment for assets and services” model is to pay the reuse team based on every usage of an enterprise-wide common set of services, which can be reused at run time by multiple departments in the organization. This report can be used to find the amount that needs to be charged to the departments that use the services, and a percentage of this amount can be used to maintain the reuse team. The report in Figure 15-5 also shows the Claims Submission asset being used by multiple organizations. It also shows the volume of usage by each organization and gives the total cost charged to the organization. Service Performance report The Service Performance report allows you to analyze the performance of Web services and endpoints in an enterprise or its ecosystem. This performance analysis is in terms of key performance measures (KPMs), such as the total number of transactions for a business service, the average response time of a Web service or an endpoint, and the number of failed transactions. Of specific relevance here is the number of transactions for a business service metric. This displays the Web service’s average response time for the transaction volume for a specified duration. The X axis shows the service performance period for which the data is generated. The Y axis shows the total number of transactions, the number of failed transactions, that is, transactions that encountered Web service failures, and the average Chapter 15. Managing service assets 443 response time in milliseconds. The number of transactions for the service is an indication of how well the service is being used at run time similar to the volume metric for the business service in the Service Usage report. A similar type of service performance report can be generated at the service endpoint level, as shown in Figure 15-6, for fine-grained information about which specific endpoint is getting used the most or the least. Note that the performance reports can be filtered based on the context parameters, such as the organization, duration, business services, and so forth. Figure 15-6 Service Endpoint Performance report in WebSphere Business Services Fabric The report also shows the ratio of the Web service requests that are serviced to the total number of Web service requests made. This metric can be used to analyze the availability requirements that are expected from the service at run time. A low availability value can indicate a defect in the asset with respect to non-functional requirements. 444 Strategic Reuse with Asset-Based Development 15.4 Retiring service assets 11.2.6, “Remove asset” on page 311 provides details about asset removal, including the considerations for removing and retiring an asset. It also shows how to retire an asset in Rational Asset Manager. Using the management features discussed in 11.2.7, “Report on asset” on page 313, you can discover services that are not being reused in your organization. These services can be retired and eventually removed from the asset Repository. You can use the WebSphere Service Registry and Repository life cycle management features to transition the service to a retired state. This indicates to WebSphere Service Registry and Repository users that the service cannot be reused anymore. You can use WebSphere Studio Asset Analyzer to identify assets that do not appear to have a means of invocation. These can be source code, documentation, and design models that are no longer used in your organization. If, after further examination, you determine that they are obsolete, you can remove these from your inventory and thereby reduce future non-productive analysis efforts. Having found the appropriate asset for reuse, you can begin to assess the impact that the proposed changes to this asset will have on the entire enterprise application. You assess this impact by determining which files use this class. 15.5 Service Integration Maturity Model Part 3, “Service Assets in an SOA” on page 333 of this book provides an Asset-Based Development perspective to services in an SOA. It gave you certain insights to producing, consuming, and managing services as reusable assets in an SOA. At any point of time during the life cycle of services, you might want to know the maturity of your organization with respect to the reuse of assets and the flexibility of your implementation of SOA with respect to the reuse of service assets. The reuse maturity models presented in Part 2, “Reusable Assets” on page 123 in this book help you access the reuse maturity. In SOA, the Service Integration Maturity Model helps you assess where an organizational subset resides in the area of service-orientation adoption. In addition to being used to access your organization’s current state in service integration and flexibility, this maturity model can also be used to assess how well the services in your organization are reused. The Service Integration Maturity Model is a paradigm developed by IBM that defines the extent to which various services are integrated in an SOA. In this context, a service is a component of an automated sub-process representing a unit of work done as part of a specific business function. Note: The Open Group Service Integration Maturity Model (OSIMM) is the industry’s first collaborative maturity model for SOA adoption. Spearheaded by members of The Open Group, including IBM, BEA, HP, EDS, and Capgemini, the initiative is working to provide an industry-recognized maturity model for advancing the adoption of SOA within and across businessesa. a. http://www.opengroup.org/sandiego2007/OSIMM.html The Service Maturity Model has seven maturity levels from silo to dynamically reconfigurable services. It also has seven domains, each of which has an increasing level of maturity. Figure 15-7 on page 446 shows the maturity levels and the characteristics of each of the domains at the various levels of maturity: the level of decoupling and the amount of flexibility achievable at each stage of maturity. Chapter 15. Managing service assets 445 Figure 15-7 Service Integration Maturity Model1 A brief description of the levels of maturity are: Level 1- Silo: In this data integration level, the organization starts from propriety and ad hoc integration, rendering the architecture brittle in the face of change. Level 2 - Integrate: In this application integration level, the organization moves toward a form of Enterprise Application Integration (EAI). The approaches that it uses are tailored to use existing systems. Level 3 - Componentized: This functional integration level allows the organization to componentize and modularize major or critical parts of its application portfolio. It refactors existing Java 2 Platform, Enterprise Edition (J2EE) or Microsoft .NET-based systems with clear component boundaries and scope, exposing functionality in a more modular fashion. Level 4 - Simple services: At this process integration level, the organization embarks on the early phases of SOA by defining and exposing services for consumption internally or externally for business partners. It acts as a service provider. Level 5 - Composite services: This supply-chain integration level allows the organization to extend its influence into the value chain and into the service ecosystem. Services form 1 https://w3.webahead.ibm.com/w3ki/download/attachments/733007/SIMM+Models+3.0+V2+-+July+6+2007.ppt?version=1 446 Strategic Reuse with Asset-Based Development a contract among suppliers, consumers, and brokers who can build their own ecosystem for on demand interaction. Level 6 - Virtualized services: In this virtual infrastructure level, the organization creates a virtualized infrastructure to run applications. It achieves this level after decoupling the application, its services, components, and flows. It externalizes its monitoring, management, and events (common event infrastructure). Level 7 - Dynamically reconfigurable services: The organization, in the ecosystem integration level, now creates a virtualized infrastructure to run applications. It achieves this level after decoupling the application, its services, components, and flows. It externalizes its monitoring, management, and events (common event infrastructure). Note: Refer to the article Increase flexibility with the Service Integration Maturity Model at this Web site for more information about the Service Integration Maturity Model: http://www-128.ibm.com/developerworks/webservices/library/ws-soa-simm/ 15.6 Case study: SOA service reuse at ZYX Electronics In this section, we revisit ZYX Electronics to see how they use the Rational Asset Manager and WebSphere Service Registry and Repository integration features to manage service assets. 15.6.1 Publish developed service to WebSphere Service Registry and Repository After Duncan Munchkin (the Development Manager at ZYX Electronics) approved the Eligibility service interface asset, it was available to other Repository users and ready to be published to the WebSphere Service Registry and Repository. As discussed earlier, the integration between both products allows us to publish to WebSphere Service Registry and Repository WSDL, XSD, XML, WS-Policy, and SCA Module file types attached as artifacts to service interface assets stored in Rational Asset Manager. Deon Adminio (the Rational Asset Manager Repository Administrator at ZYX Electronics) had already created a connection for each dedicated instance of the WebSphere Service Registry and Repository for the development, testing, and production environments. Note: Refer to Appendix A, “Rational Asset Manager: Installation and administration” on page 637 for more details about how to configure the Rational Asset Manager and WebSphere Service Registry and Repository connectivity. The steps to publish the Eligibility service interface to the WebSphere Service Registry and Repository are: 1. Duncan was the only user with permissions to publish the Eligibility service interface to the WebSphere Service Registry and Repository development instance, so he selected the asset and clicked Publish to service registry as shown in Figure 15-8 on page 448. Chapter 15. Managing service assets 447 Figure 15-8 Publish service interface to service registry 2. Rational Asset Manager knows which file types can be published to the WebSphere Service Registry and Repository so it only showed Duncan the WSDL file as the file to be published to the service registry (although the asset also had other artifacts, such as a Word document explaining the service interface) as shown in Figure 15-9. Figure 15-9 Select WSDL file to publish to WebSphere Service Registry and Repository 3. Duncan selected the EligibilityService.wsdl file. Duncan then clicked Next to go to the following windows where he selected the registry to which to add the asset and entered his user name and password as shown in Figure 15-10. Figure 15-10 Select WebSphere Service Registry and Repository connection 4. Duncan clicked Confirm to verify that the asset information and selected Repository were correct, and then clicked Publish as shown in Figure 15-11 on page 449. 448 Strategic Reuse with Asset-Based Development Figure 15-11 Confirmation page to publish WSDL file to WebSphere Service Registry and Repository 5. When Duncan clicked Publish, the publishing process began. It took a few minutes for Rational Asset Manager to communicate and publish the Eligibility Service Interface to the development WebSphere Service Registry and Repository. When completed, Duncan was presented with a message indicating that the publishing was successful, as shown in Figure 15-12. Figure 15-12 Confirmation message of successful publishing The publishing process from Rational Asset Manager to WebSphere Service Registry and Repository created: A new service metadata concept in WebSphere Service Registry and Repository as shown in Figure 15-13 on page 450. There was a link to the Rational Asset Manager asset as a custom property of the published concept in the WebSphere Service Registry and Repository. Chapter 15. Managing service assets 449 Figure 15-13 New service metadata concept in WebSphere Service Registry and Repository A new service document for the WSDL artifact was selected in Rational Asset Manager as shown in Figure 15-14. Figure 15-14 New service document concept in WebSphere Service Registry and Repository A custom relationship from the service metadata concept was established to the service document artifact as shown in Figure 15-15 on page 451. 450 Strategic Reuse with Asset-Based Development Figure 15-15 Custom relationship between service metadata concept and service document Upon execution of the Rational Asset Manager and WebSphere Service Registry and Repository synchronization process, a new asset was created in Rational Asset Manager representing the published artifact as shown in Figure 15-16. Figure 15-16 Rational Asset Manager published asset Chapter 15. Managing service assets 451 This new asset created in Rational Asset Manager: Had the same name as the Service Interface asset used for the publishing (Eligibility Service Interface) Was of the type “Published Asset” Had a link property “Link to WebSphere Service Registry and Repository” to go directly to the WebSphere Service Registry and Repository service metadata concept that was created as a result of the publishing process Had a relationship of the type “Publish by” with the Service Interface asset that was used for publishing (Eligibility Service Interface) Figure 15-17 summarizes the new assets that were created as a result of the publish and synchronization tasks between Rational Asset Manager and WebSphere Service Registry and Repository for the Eligibility Service. Figure 15-17 Rational Asset Manager and WebSphere Service Registry and Repository integration After the service was published to the service registry, Patricia Moon, the Product Manager at ZYX Electronics, received a notification that the Eligibility service had been published to the service registry and that it was ready for use in applications that need the service. She sent a notification to Irene Devin (the Service Assembler at ZYX Electronics) to inform Irene of the availability of the service. The browser-based portal applications that needed the account verification reused the Eligibility service. However, this service did not solve the reuse issue completely. Over a period of time, as ZYX Electronics was getting deeper into its SOA transformation, more and more processes needing the Eligibility service were identified. The Eligibility process needed to be accessed by other process automations similar to the Business to Business (B2B) channel interaction. These interactions posed security constraints on who was allowed to access the service through the B2B channel compared to the portal channel. In addition, according to ZYX Electronics’ business policies, the portal channel needs a higher priority of service than the B2B channel, because the portal channel runs in real time. 452 Strategic Reuse with Asset-Based Development To enhance the reusability of this service, ZYX Electronics decided to re-engineer the Eligibility service, which is a simple choreographed service, into a business service that can behave dynamically based on the context (in this case, the channel of access) of the request. Irene, the service assembler, sourced this service from WebSphere Service Registry and Repository into the Business Service Repository (that is part of WebSphere Business Services Fabric) by using the WebSphere Service Registry and Repository integration features in WebSphere Business Services Fabric. Irene then used the WebSphere Business Services Fabric Governance Manager to create the Eligibility business service. She then used the Composition Studio plug-in for Eclipse and created the necessary channel, role, and policy metadata for the business service. Multiple service implementations were coded for the Eligibility service to handle various levels of performance. The policies were designed to select high performance endpoints for the service requests that were made on the portal channel. The service was tested and deployed. The service artifacts were updated in Rational Asset Manager. Based on these updates, the Eligibility business service was made available with enhanced reusability. Consuming applications can easily configure the channels, roles, and policies associated with the service based on their requirement without having to write code. The business level metadata updates were controlled by governance mechanisms and were driven by visual tooling that eliminates the need for technical resources to change service metadata. Thus, ZYX Electronics moved one step ahead in reusability by bringing its IT into alignment with its business. 15.6.2 Conclusions and benefits for ZYX Electronics This sample scenario to produce, consume, and manage service assets related with the “Determine Applicant Eligibility” business task helped to demonstrate to ZYX Electronics that the SOA Model included in Rational Asset Manager was valid for them and that extending the asset reuse approach to manage SOA-based assets had reported benefits, such as: Change business systems dynamically, decreasing time to application availability Decrease time-to-market by developing applications more quickly Preserve existing IT assets by encapsulating them into dynamic business services Control IT costs and help make IT more efficient Enforce consistency of business and IT behavior across the company Chapter 15. Managing service assets 453 454 Strategic Reuse with Asset-Based Development Part 4 Part 4 Patterns In this part, we introduce a specific type of assets known as Patterns. As shown in Figure P-4, we will look at patterns as assets and then how we can produce, consume, and manage these assets. This section builds on the content that was described in Part 2, “Reusable Assets” on page 123. In addition, there is a relationship between the content in Part 3, “Service Assets in an SOA” on page 333 and in this part. Service assets can be generated by Patterns. In addition, we will use best practices in Services as the basis for creating Pattern assets for generating Services. Part 1: Introduction Part 2: Reusable Assets •Introduction to Asset-Based Development •Adopting Asset-Based Development •Process and Tooling •Configuring Asset Management •Case Study Overview •Produce, Consume, and Manage Assets •Impact and ROI Part 3: Services •Services as Assets •Produce, Consume, and Manage Service Assets Appendixes •Rational Asset Manager Installation and Administration •Process Integration Part 4: Patterns •Patterns as Assets •Produce, Consume, and Manage Pattern Assets Figure P-4 An overview of the structure of the book © Copyright IBM Corp. 2008. All rights reserved. 455 456 Strategic Reuse with Asset-Based Development 16 Chapter 16. Introduction to patterns This chapter introduces patterns, pattern-based engineering, and how they relate to Asset-Based Development. © Copyright IBM Corp. 2008. All rights reserved. 457 16.1 Improving productivity in software development It is a truism of software development that you can have any feature you want, as long as you have enough time and money. But, most projects work with both fixed time frames and budgets, so the real question is, “How can we get more features for the same time and money?” The generic answer lies in increasing productivity. Process, skills, quality, and automation all can play a role. All of the chapters in Part 4 discuss improving productivity by reliably sharing the knowledge of the most skilled software developers across an entire team. The goal is not only to document this knowledge, but to also create automation around it. We call this shared knowledge patterns and the approach to using it pattern-based engineering. 16.1.1 How to use this part of the book This part of the book presents both a practical approach to Asset-Based Development centered around patterns, specific information, and working examples of their implementation using tools in the Rational modeling platform (IBM Rational Software Architecture 7.0, IBM Rational Software Model 7.0, IBM Rational Systems Developer 7.0, and IBM Rational Application Developer 7.0). This part can be read independently of the rest of the book: This chapter describes a process for making pattern-based engineering cost-effective, even at the level of a project. Chapter 17, “Produce: Model-to-text pattern implementations” on page 469 describes JET, the pattern implementation technology that helps make pattern-based engineering cost-effective. Chapter 18, “Produce: Model-to-model” on page 529 describes model-to-model transformations, Uniform Modelling Language (UML) Patterns, and other IBM Rational technologies that enable the graphical representation of patterns. Chapter 19, “Produce: Packaging for deployment” on page 587 describes deployment of the pattern assets that are developed in Chapter 16, “Introduction to patterns” on page 457 and Chapter 17, “Produce: Model-to-text pattern implementations” on page 469. Chapter 20, “Consuming pattern implementations” on page 613 describes the use of pattern assets. Chapter 21, “Managing pattern implementation assets” on page 631 describes the management of pattern assets. If you are in a hurry for results, try the following path through this part: 16.2, “Patterns” on page 459 16.3, “Developing a pattern” on page 460 16.4, “Pattern-based engineering” on page 461 Chapter 17, “Produce: Model-to-text pattern implementations” on page 469 19.2, “Sharing JET projects” on page 588 16.5, “A process for pattern-based engineering” on page 462 From there, you can explore other aspects of patterns, as interest or necessity dictate. 458 Strategic Reuse with Asset-Based Development 16.2 Patterns A pattern is defined as a proven solution to a recurring problem. The concept was originally developed in architecture (of buildings), but it has been adapted to software development starting with Design Patterns: Elements of Reusable Object-Oriented Software, by Gamma et al. Gamma and the other authors describe each of their twenty-three (23) patterns by specifying a name, a problem description, a solution, and the consequences from use. We call this description a pattern specification. The solution that a pattern describes is abstracted from the reference solution. The value of using a pattern comes from reusing the object roles and interactions, rather than by reusing concrete algorithms or bodies of code. Concrete implementations can vary significantly. Implementation language, naming conventions, and the choice of algorithms and data structures can differ. As a result, considerable effort is still required to apply a pattern in a particular situation. When a particular design pattern is repeatedly applied in similar contexts, it has proven effective to create a tool that helps automate the application. We call this tool a pattern implementation. A pattern implementation typically predetermines a common number of aspects of the concrete solutions, but leaves other aspects of the pattern variable. This type of a variation is called a point of variability. As an example, a pattern implementation can generate Java code (fixing the language aspect of the solution), but leave the names of the key classes variable. The utility of a pattern implementation rests in whether the points of variability are sufficiently large to allow for frequent reuse, but not so large as to make reuse difficult or complex. Finally, the use of pattern implementations requires directions about how they must be used. We call these directions pattern recipes. A recipe can combine the use of multiple pattern implementations. To summarize, we have defined: Pattern A proven solution to a recurring problem in a given context Pattern specification A formal description of a design pattern, including name, problem description, solution, and consequences Pattern implementation A tool that automates or partially automates the application of a pattern in a particular solution Point of variability An aspect of a pattern or pattern implementation that varies from concrete application to concrete application Pattern recipe Directions about how to use one or more pattern implementations to implement a solution Patterns, or more properly, pattern specifications are clearly reusable assets. But, so are pattern implementations. This part is about pattern implementations as assets: How to create them, how to use them, and how to manage them. Chapter 16. Introduction to patterns 459 16.3 Developing a pattern Developing a pattern is inherently bottom-up. Pattern specifications are not developed from top-down requirements, but from careful observation of experience in solving problems. Figure 16-1 shows this process. g p p p ( p ) 10010011000100100100100 10010011000100100100100 10010011000100100100100 10010011000100100100100 10010011000100100100100 10010011000100100100100 10010011000100100100100 10010011000100100100100 10010011000100100100100 10010011000100100100100 10010011000100100100100 Problem Exemplar (Solution) Pattern Pattern Specification Implementation Pattern Recipe Figure 16-1 The pattern development process Pattern development starts with a problem and the creation of a solution to that problem. After encountering and solving a problem several times, a pattern is recognized, and a pattern specification can be created. Typically, the pattern specification is developed by reference to a solution that exemplifies the characteristics of the pattern. In this text, we call this solution an exemplar. An exemplar facilitates the development of pattern specification and of pattern implementations. 16.3.1 Roles in developing pattern implementations Five roles have been identified for pattern development: Pattern user A user pattern Pattern author An expert in the problem and solution domain Pattern specification author Writes pattern documentation (the pattern specification) Pattern implementation author Develops the tool that implements the pattern Asset librarian Maintains and archives assets for the organization Table 16-1 shows how these roles relate to those roles defined in Rational Method Composer plug-in for Asset-Based Development. Table 16-1 Pattern author roles and their corresponding Asset-Based Development roles Pattern authoring role Asset-Based Development role Pattern user Asset Consumer Pattern author Asset Producer Pattern specification author Asset Producer Pattern implementation author Asset Producer Asset librarian Any and all asset management roles A single person can, of course, fulfill more than one role. Typically, a pattern author’s primary job responsibilities are in areas other than pattern production. The pattern author’s time is valuable and limited. Because the creation of pattern specifications or pattern implementations requires specialized knowledge or tools, it can be more cost-effective to 460 Strategic Reuse with Asset-Based Development have those roles fulfilled by specialists rather than by the pattern author. If the pattern author also specifies and implements a pattern, close collaboration between the pattern author and the pattern specification and pattern implementation authors is required. 16.4 Pattern-based engineering Pattern-based engineering (PBE) unites three software engineering initiatives: Model-driven development (MDD) Patterns Pattern implementations MDD provides a version and conceptual framework for PBE. MDD has four key principles: Models expressed in a well-defined notation are key to understanding enterprise-scale systems. Transformations between models enable organization into a layered architectural framework. Metamodels facilitate meaningful integration and transformation and are the basis for tooling. Standards provide openness to consumers and foster healthy competition among vendors. Patterns provide the concepts to be modeled and transformed. The abstractions and points of variability of a pattern specification constitute a model. The realization of those abstractions by following the pattern constitutes a transformation. When applying patterns without the supporting tooling, the effort to realize solutions easily overwhelms the time spent to select patterns and model the solution in the abstract. The value of an artifact is often perceived as being equivalent to the time invested in creating it. As a result, applying a pattern manually leaves the perception that solutions are more valuable than developing their key abstractions, even though initial development typically constitutes the most intellectually valuable activity. Automated tooling dramatically changes this perception. Because most of a solution can be realized automatically from an abstraction, developers’ time investment is more clearly aligned with the important task of selecting the correct patterns and abstractions. Table 16-2 shows how the MDD principles map to the creation and use of pattern-based engineering. Table 16-2 Mapping pattern implementation to MDD principles MDD Principle Pattern implementation concept Models Pattern abstractions and points of variability Transformations Pattern implementations Metamodels Describe models using standardized technologies, such as XML Schema or UML Profiles Standards Metamodel technologies and pattern implementation technologies Chapter 16. Introduction to patterns 461 Pattern-based engineering is not only a process of pattern selection and application. It is also a process for pattern identification and for the development of pattern implementations. Tooling is an essential ingredient to making the development of pattern implementations cost-effective. Next, we assume that this tooling exists and describe the pattern-based engineering process. 16.5 A process for pattern-based engineering The success of pattern-based engineering depends on integrating pattern identification and the development of pattern implementations into the project life cycle. Experience has shown that successful pattern assets are those that were initially developed and profitably reused within a single project. We will describe the process for PBE in the context of the Rational Unified Process (RUP). Figure 16-2 shows the standard depiction of RUP, showing its four phases and typical activity level in the standard RUP disciplines. Figure 16-2 RUP Architecture showing projects phases plotted against disciplines The process for pattern-based engineering can be summarized as: During inception, identify key patterns based on candidate architectures, and build supporting pattern implementations: – Pattern identification is primarily a part of the Analysis & Design activity, but significant patterns can be identified in other disciplines. – Pattern implementation development is part of the Environment activity. 462 Strategic Reuse with Asset-Based Development Pattern identification and pattern implementation development continues throughout the project. Having a project resource dedicated to aiding in pattern identification and pattern implementation development facilitates reuse and continuous improvement. Test pattern solutions early and often to verify that requirements are being met. Figure 16-3 shows the primary activities of pattern-based engineering. We depict the primary activities as occurring during the RUP inception phase, but the activities are applicable to the development of a pattern-based solution in any phase. Figure 16-3 Inception activities for pattern-based engineering Each of the activities in Figure 16-3 is detailed in the following subsections. 16.5.1 Establish project constraints Knowing project constraints is an essential prerequisite to a successful project. Start with the current application characteristics as a baseline (assuming that the current project has similarities to previous ones). What do you like? What do you not like? These dislikes are your pain points. Are these pain points compelling reasons to change? Not every pain point is worth eliminating. Ultimately, you must balance resources among constraints for function, quality, and budget: Function The business processes that you need to support Quality The non-functional requirements, such as reliability, usability, efficiency, maintainability, and portability Budget Time, money, people, and other limited resources Chapter 16. Introduction to patterns 463 16.5.2 Identify representative use cases Use case development is the primary tool for understanding functional constraints. In pattern-based engineering, use cases are then examined to drive the identification of potential patterns: 1. Start with “mission critical” use cases. 2. Explore the ranges of variability that occur in the use cases. Considering both functional and non-functional requirements, group use cases with common characteristics together into what we call use case types. 3. Within each use case type, identify the characteristics that vary between the use cases. These are the points of variability. A use case type will have a fixed number of points of variability, although individual use cases will not manifest all of them. 4. Pick a representative use case from each use case type for further investigation. Make sure that your representative use case manifests all of the points of variability of the use case. 5. Gather the full set of functional and non-functional requirements for the representative use cases. At the end of this activity, you have a collection of use cases, each of which is representative of a class of related use cases in the system. 16.5.3 Develop candidate architecture The goal of this activity is to develop (conceive, code, and test) a candidate architecture for each representative use case that was defined. Much of this activity is no different than the standard RUP activity for developing candidate architectures. A candidate architecture demonstrates that an architecture can meet its requirements. Adopting several of the principles of extreme programming proves valuable in this context. In particular: Design the simplest thing that can possibly work for each representative use case. Reuse proven designs from previous projects where possible and look for simple variations on a theme. Employ “test first” (outside in) and “depth first” (small increments) approaches. That is, devise tests to verify requirements prior to implementing those requirements. And, favor full development of one representative use case over an incremental process on all of them. Prove that your candidate architecture meets the requirements, both functional and non-functional. Ensure that test cases for all requirements are created and executed regularly. Demonstrate (frequently) to your users and stakeholders to show progress and further validate the requirements. Capture end-to-end development time for planning and estimation purposes. The output of this activity is a collection of implementations that have been proven to meet the requirements of each use case type. These implementations serve as models for the realization of the remaining use cases. To put this into the language of patterns, the candidate architectures for each representative use case type are patterns; they are proven solutions to a recurring problem in a given context. 464 Strategic Reuse with Asset-Based Development 16.5.4 Customize the development process The goal of this activity is three-fold: Document the patterns identified. Where it appears cost-effective, create pattern implementations that automate the application of these patterns. Develop a customized process that leads developers through the use of these patterns and pattern implementations. This activity involves the following steps: 1. Start with the proven candidate architectures as reference solutions (also known as exemplars) for the remaining use cases. 2. For each reference solution, examine every artifact that must be touched by human hands: – Code, test cases, deployment descriptors, scripts, property files, data definition language (DDL), and so forth. – Do not forget artifacts, such as operations checklists, build scripts, and so forth. 3. Outline the steps to realize another use case using the reference solution as a model. Enumerate the inputs, tools used, and outputs of interest (many of these might have been produced by a tool rather than manually). 4. Look for opportunities to eliminate manual steps by automating them with custom tools based on JET, model-to-model transformations, UML patterns, and other automation technologies. 5. Document a project development cookbook for the remaining use cases in each use case type. (These are pattern recipes). Consider using Rational Method Composer as a tool-assisted cookbook. 6. Test the cookbook by having a representative project team member develop a different use case from the same use case type. 7. Measure results and develop a high-level plan for the remaining use cases to determine whether budget constraints can be met. Note that: – Time can be compared against the baseline captured in the architecture step to estimate the return on investment (ROI) for the customized process. – The team might want to do a head-to-head test (manually compared to tool-assisted) on comparable use cases. 8. Demonstrate with the stakeholder team to show progress and further validate the business requirements. At the end of this activity, you have: Tooling and a proven process to correctly implement all known use cases Data that will enable you to estimate the remaining development effort However, you must not expect this point to be the end of pattern identification. Requirement changes and clarifications can result in new or revised patterns. Also, new patterns can be discovered in a later project phase, particularly those unrelated to analysis, design, and construction. As project disciplines, such as test and deployment, become more active, more manual and repetitious activities might be discovered. These activities, too, constitute patterns and can be automated. Chapter 16. Introduction to patterns 465 16.5.5 Pattern harvesting The patterns identified during a project are potentially useful to future projects. The process of collecting, documenting, and distributing these patterns is called pattern harvesting. In a traditional development process, harvesting occurs late in the project and requires considerable effort by the project team in the form of documentation and perhaps tooling. There is typically little direct reward to the team for doing this harvesting. With pattern-based development, these late-in-the-project costs are largely avoided. The project team has already created the necessary material and tools to meet its own requirements. All that remains is the distribution of the project’s pattern assets to a shared Repository. An important part of pattern harvesting is the assessment of the pattern quality. Asset repositories, such as IBM Rational Asset Manager (RAM) make it easy for project teams to distribute their assets and to record their experiences. In order to avoid late-in-the-project costs associated with documenting asset quality, project teams must consider using tools, such as RAM, for managing their pattern assets throughout the project. This way, assessment can be a continuous process throughout the project. 16.6 Reality check: Does pattern-based engineering really work Can the pattern-based engineering process really work? The short answer is yes with the correct tools and in the right domains. Several factors must come into play in order to achieve success: The correct tools must exist to enable the rapid production of pattern implementations. Production and usage costs of a pattern implementation must be significantly better than the anticipated cost of implementing the use cases that the pattern addresses. Problems must recur if the project team is to see any benefit from tooling development. Fortunately, even in “one-off” projects, repetition is typically abundant. Consider how many: – Windows get developed in the average application – Database tables are accessed – “Statements” in a language interpreter or compiler are created – Times that you change your mind about implementation details The following subsections briefly describe pattern-based engineering successes. 16.6.1 Case study one: A large banking application Develop a user interface (UI) and services framework to minimize the learning curve required by the majority of the developers using Java 2 Platform, Enterprise Edition (J2EE). Results The results are: Pattern implementation tooling not only generated over 50% of the code, but it minimized the number of components needed in the framework: – Modeling was based on Rational XDE™. 466 Strategic Reuse with Asset-Based Development – Pattern implementation tooling was created with the Design Pattern Toolkit (DPTK) from alphaWorks®. DPTK is a precursor of JET. The team was enabled to make an aggressive schedule for showcasing the next generation system based on Java/J2EE: – Identified other opportunities for pattern tooling, such as test cases – Factored naming conventions to maximize maintainability of MDD tools Lessons learned Test extensively during inception: Bad news The testing was delayed due to schedule constraints; the architecture required extensive redesign after the rollout in order to meet non-functional requirements. Good news The platform-independent models insulated the analysts and the programmers from changes to the architecture. 16.6.2 Case study two: An IBM product development team Re-architect a large number of servlet-based commands into Web services so that the business application services can be separated from the presentation. The solution involved: Exposing approximately 130 operations via services Compiling with a complex data format specification. The documentation was 112 MB, and the schema contained 430 files. Results The results are: Identified a pattern and pattern specification, which was distributed to developers Ultimately, developed a pattern implementation that drastically reduced the work for developers, while increasing implementation consistency and product quality. The development team used Rational Application Developer 6.0. The pattern implementation was developed with Design Pattern Toolkit from alphaWorks. Lessons learned Documenting pattern specifications is sometimes not enough to ensure successful pattern usage: Good news One developer mastered the specification and developed a procedure (a pattern specification) for successful implementation. It was over 100 pages long. Bad news It took individual service developers four days to follow the instructions, and they often had difficulty following them faithfully. Errors early in the process were not caught until much later. Ultimately, developers demanded the help of the original expert, creating a heavy workload and a bottleneck. Good news An initial pattern implementation was developed during a two-day training course. The revised process was reduced to two pages. Service developers can automatically generate the complex infrastructure code and unit tests in minutes; they can then focus on implementing the service. Chapter 16. Introduction to patterns 467 16.6.3 Critical success factors The following list summarizes the factors that we believe are critical to the successful use of pattern-based engineering: Get buy-in from key practitioners (architect and development leads). Have domain experts available during the pattern development process. Build models that abstract the solution. Abstractions that too closely parallel physical artifacts do not provide value. Do not limit the pattern discovery to just the code. Other project phases and disciplines, such as testing, configuration management, and deployment, must be examined. 16.7 The next steps To learn about the creation of pattern implementations that generated text (including source code), read Chapter 17, “Produce: Model-to-text pattern implementations” on page 469. To learn about the creation of pattern implementations based on graphical models or to develop graphical front ends to the transformations produced in Chapter 17, read Chapter 18, “Produce: Model-to-model” on page 529. 468 Strategic Reuse with Asset-Based Development 17 Chapter 17. Produce: Model-to-text pattern implementations This chapter describes the production of pattern implementations that create text-based artifacts, such as language source code, configuration files, and documentation. © Copyright IBM Corp. 2008. All rights reserved. 469 17.1 Case study: Identifying a recurring problem Deb Devak, a developer at ZYX Electronics (ZYX), has learned about the asset reuse initiative and is eager to learn how it can positively impact her work. Deb recently attended a presentation by an IBM consultant about patterns and automation. Although Deb had been distracted by several important e-mails, she had taken the following information away from the presentation: Patterns are a proven solution to a recurring problem. New tooling in the IBM Rational modeling platform 7.0 family of products makes it easy to turn a proven solution to a problem into an tool (the consultant had called it a “pattern implementation”). The pattern implementation automates much of the drudgery of applying the pattern to a particular situation. This pattern tooling is lightweight enough that a positive return on investment can be achieved in a single project without significant investment in asset management infrastructure. (The consultant did indicate that asset management software is essential to share assets between projects). The new tooling was best at producing text (such as source code), rather than complex things, such as diagrams. To be successful with the tooling (the consultant kept repeating this remark), you need to start from a proven solution to a problem and work “bottom-up” to create an automated tool. Armed with this admittedly sketchy knowledge, Deb has decided to give the pattern tooling and pattern-based engineering a try. She considered her current efforts and decided to focus on a very simple problem: Java beans. Java beans In just about every project on which Deb has worked, she sees Java beans. A Java bean is a simple Java object with a number of properties that are accessed by getter methods and updated by setter methods. Example 17-1 illustrates a typical Java bean. Example 17-1 A typical Java bean representing information about a book package com.zyx.exemplar.beans.library; /** * Define a Book Java bean * */ public class Book { private String author; private int numberOfPages; private String title; /** * Package private constructor prevents instantiation except through factory */ Book() { } 470 Strategic Reuse with Asset-Based Development /** * Return the book author * @return the author the author */ public String getAuthor() { return author; } /** * Return tne book number of pages * @return the numberOfPages the number of pages */ public int getNumberOfPages() { return numberOfPages; } /** * Return the book title * @return the title the title */ public String getTitle() { return title; } /** * Set the book author * @param author the author to set */ public void setAuthor(String author) { this.author = author; } /** * Set the book number of a pages * @param numberOfPages the number of pages to set */ public void setNumberOfPages(int numberOfPages) { this.numberOfPages = numberOfPages; } /** * Set the book title * @param title the title to set */ public void setTitle(String title) { this.title = title; } } Deb is frustrated about Java beans, because: They are numerous. They result in little intellectual value in return for the time that is invested to create them. No two developers at ZYX manage to produce exactly the same results. Chapter 17. Produce: Model-to-text pattern implementations 471 This latter point is a particularly sore point for Deb, because she had carefully produced a ten page document discussing how Java beans were to be used at ZYX for the other developers. Java bean factories According to Deb’s standard, a Java bean must be instantiated by a factory. This factory isolates users of the bean from its actual implementation. Example 17-2 shows a typical Java bean factory, which creates the related beans: Library and Book. Example 17-2 A Java bean factory package com.zyx.exemplar.beans.library; /** * Factory class for beans in the ‘library’ package */ public class LibraryFactory { /** * Singleton instance of the LibraryFactory */ public static final LibraryFactory INSTANCE = new LibraryFactory(); /** * Private constructor prevents instantiation. */ private LibraryFactory() { } /** * Create a new book instance * @return the new Book object */ public Book createBook() { return new Book(); } /** * Create a new library instance * @return the new Library object */ public Library createLibrary() { return new Library(); } } Relationships between beans One last aspect of Deb’s Java bean standard was that beans can refer to each other. For example, a Library might have a collection of Books. The variety of ways that developers can find to implement a simple feature still amazes Deb. Example 17-3 on page 473 illustrates how Deb wants these references implemented. 472 Strategic Reuse with Asset-Based Development Example 17-3 Implementation of reference from one bean to another bean package com.zyx.exemplar.beans.library; import java.util.ArrayList; import java.util.List; /** * Implement a Java bean representing a Library * */ public class Library { private final List books = new ArrayList(); ... other fields removed /** * Return the list of books in the library * @return a list of Book objects. Will not be <code>null</code> */ public List getBooks() { return books; } ... other methods removed... } Reference solution Recalling the consultant’s admonitions, Deb put together a representative Java bean solution. With the solution, Deb started IBM Rational Software Architect 7.0 and got to work. 17.2 Model-to-text pattern tooling The consultant to whom Deb listened was referring to the forced expansion Java Emitter Templates (JET). This section introduces JET, the IBM tools for developing JET-based pattern implementations, and techniques for using these tools effectively. Pattern implementations that create text-based artifacts, such as source code and configuration files, are known as model-to-text patterns or model-to-text transformations. 17.2.1 What is JET JET is an open source technology developed by IBM. It is included in several IBM Rational Modeling Platform 7.0 products: IBM Rational Application Developer 7.0 IBM Rational Software Modeler 7.0 IBM Rational Software Architect 7.0 IBM Rational Systems Developer 7.0 These products are based on the open source Eclipse platform. Eclipse was developed by the Eclipse Foundation. IBM is a member of the Eclipse foundation and contributes Chapter 17. Produce: Model-to-text pattern implementations 473 significantly to Eclipse development. JET is built on and for the Eclipse platform. In the rest of this chapter, any reference to Eclipse includes all of the previously mentioned IBM products. JET is a template language. A template is a sequence of text interspersed with special annotations that are interpreted by the template language. When a template is expanded, these annotations are interpreted and typically turned into content. An example of a template is a form letter created in a work processor. A form letter contains special annotations to draw names and addresses from a database into the form letter. When the word processor expands the template against a particular set of database rows, a number of customized instances of the form letter are produced. The form letter example illustrates an important element of template languages. Templates are expanded in a certain context. Form letters are expanded in the context of a word processor and a backing database. JavaServer Pages (JSP), which are templates, are expanded in the context of a Web browser’s request to a Web application, and that applications response to the browser. JET templates are also expanded in a context. In the case of JET, the context is an Eclipse workspace and an input model. The term input model is a sophisticated term for a form of structured data. JET’s prototypical data model is an eXtensible Markup Language (XML) document, but JET can be adapted to many other data structures. In this chapter, however, we will stick with XML. JET templates are typically not invoked in isolation. Instead, they are grouped together into a transformation, which evaluates related templates against a single input model. The results of these template evaluations are then written to the Eclipse workspace. A lot of JET’s appeal is that it lets developers create transformations without much knowledge of Eclipse, its extension mechanisms, or its application program interfaces (APIs). In fact, JET solutions can be developed even without knowledge of Java, the language in which Eclipse is typically extended. JET: A tale of too many acronyms The official name for JET is the Eclipse Modeling Framework Technologies Java Emitter Templates (EMFT JET). Getting to a complex name is no easy task. Here, briefly, is the story of JET (and its acronym): JET began as a tool included in the Eclipse Modeling Framework (EMF). This initial version of JET supported template annotation only via Java code and required a significant amount of additional Java code and knowledge of Eclipse APIs to produce model-to-text transformations in Eclipse. To avoid confusion, we will refer to this version of JET as JET1. In 2005, a new version of JET was started, which was called JET2. The goal for JET2 was to create a template engine that can produce artifacts without requiring any Java programming at all. The IBM alphaWorks Design Pattern Toolkit (DPTK) had demonstrated that producing artifacts without requiring any Java programming was both possible and valuable. DPTK significantly reduced the skills and time required to produce model-to-text transformations in the Eclipse environment. The development of JET2 took place in the Eclipse Modeling Framework Technologies (EMFT) project, which is an open source project sponsored by the Eclipse Foundation. This version of JET was not compatible with JET1. The IBM Eclipse-based products that include JET2 also include JET1. To distinguished the technologies, JET2 officially became EMFT JET. You will see the string EMFT JET in several places in IBM products. The EMFT project is dedicated to developing new technologies related to modeling. When these technologies reach maturity, they move on to other projects. This is the case with JET. In early 2007, JET moved to the Model to Text (M2T) subproject of the Eclipse 474 Strategic Reuse with Asset-Based Development Modeling Project. The M2T goal is to support the development and use of model-to-text languages within Eclipse. In spite of this move, the EMFT JET name has been retained (the potential for confusion with JET1 remains). The M2T project plans to “graduate” in 2008. At that point, EMFT JET will completely support the original JET1. Then, the EMFT prefix will be dropped from the name and the integrated product will be called simply JET. But, this integrated version of JET is not likely to make its way into IBM products until late 2008. This book uses EMFT JET (JET2) exclusively. As a result, the book refers to EMFT JET simply as JET. In screen captures and instructions, however, you will often see the text EMFT JET. Getting more information The Eclipse foundation Web site is: http://www.eclipse.org You can get more information about the Model to Text (M2T) project and JET at: http://www.eclipse.org/modeling/m2t You can get more information about the Eclipse Modeling Project at: http://www.eclipse.org/modeling 17.2.2 IBM tools for creating JET-based solutions The productivity tools to which Deb’s consultant referred are called the JET Authoring Tools, and are part of the Rational modeling platform products. These tools are not open source, but they do produce JET transformations that require only the open source components to execute. Important: The tools discussed in this section are not included in default installations of the Rational modeling platform 7.0 products. These tools are included in the optional Transformation authoring component. If your installation does not include the tools referenced in the section, start the IBM Installation Manager, click Modify Packages and follow the wizard instructions to add Transformation authoring. The JET authoring tools allow for rapid development of pattern implementations given an example of the desired output of the transformation. This example output is referred to as an exemplar or more simply as a reference solution. Figure 17-1 on page 476 illustrates this process. Chapter 17. Produce: Model-to-text pattern implementations 475 1. Jet Authoring Input Model Reference Solution (Exemplar) JET Transformation Figure 17-1 JET exemplar-based authoring: working backward from a reference solution This approach integrates with 16.5, “A process for pattern-based engineering” on page 462. The JET authoring tools permit the development of a pattern implementation from a candidate architecture (as described in 16.5.3, “Develop candidate architecture” on page 464 at a cost that is incremental to the cost of developing the candidate architecture initially). Figure 17-2 illustrates the value proposition of using JET authoring for pattern-based engineering. Timelines to Value Solve the problem, solve similar problems via manual pattern application Solve the problem, implement a pattern, solve similar problems via automatic pattern application Legend: Search asset repository for applicable assets Solve problem manually Author pattern implementation to automate solution Use pattern implementation to solve problem Figure 17-2 Time to value using JET authoring and pattern-based engineering Analogy: Writing a form letter Creating a JET transformation from an exemplar is analogous to creating a form letter in a word processor. To create a form letter: 1. Create or find a letter that will serve as a model for the form letter. This is the reference solution. 2. In your word processor, start the form letter by making a copy of the reference solution or exemplar. 3. Identify parts of the letter that must be replaced with data fields. Insert appropriate references to fields in the template letter. 476 Strategic Reuse with Asset-Based Development 4. If not already defined, define the database tables and columns. JET authoring follows a similar process with a number of differences: The reference solution (exemplar) with which you are working typically requires multiple templates. JET authoring is similar to creating a customized portfolio of documents rather than just a single document. The input model that you create is not a flat structure, such as a database table. Instead, the input model is hierarchical and includes several types of model elements. Think of the model as an XML document rather than a table. Authoring goals JET authoring has several goals: Define an input model structure that reveals the pattern’s abstractions and the desired points of variability in the pattern. Account for every file, folder, and project found in the reference solution (these are known as exemplar artifacts). For each exemplar artifact, either match it to a model element from which it is directly derived, or mark it as not-of-interest to the transformation. The JET authoring process The authoring process works iteratively toward achieving these authoring goals. The process is driven by the exemplar artifacts and the need to identify abstracts that account for their existence. At each step, a new abstraction is identified (which becomes a model element) that accounts for one or more of the exemplar artifacts. Figure 17-3 on page 478 illustrates the process for identifying a model element. Chapter 17. Produce: Model-to-text pattern implementations 477 Figure 17-3 The process for identifying a new model element In the next section, we will work with Deb Devak’s Java bean problem to illustrate this process in detail. Getting more information The best way to learn a process is to work through it with an example, which is shown in 17.3, “Developing a pattern implementation for Java beans” on page 479. If you are a visual learner, the 7.0.0.2 and later versions of the Rational modeling platform tools include a “watch and learn” tutorial. To view it, follow these steps: 1. Click Help → Tutorial Gallery. 2. In the tutorial gallery, click Watch and learn. 3. Click Create model-to-text transformations with JET. The full tutorial takes approximately 60 minutes to view, although individual sections are much shorter. 478 Strategic Reuse with Asset-Based Development 17.3 Developing a pattern implementation for Java beans In this section, we will work through the development of a JET pattern implementation using Deb Devak’s Java bean solution as the reference solution. 17.3.1 Create a JET authoring project Deb has created an Eclipse Java project that contains her reference bean solution or exemplar. The project is included in the supplemental materials that you can download. You can import it into your workspace by following these steps: 1. Click File → Import. 2. Type existing to filter the available choices. 3. Click General → Existing Projects into Workspace and click Next. 4. Click Select archive file, and then click Browse. 5. Find the ch16exemplar.zip file from Appendix C, “Additional material” on page 725 within the ABD-Part 4-Projects.zip file, and click OK. 6. Ensure that the project com.zyx.exemplar.beans is checked, and then click Finish. Figure 17-4 shows the contents of this project. Figure 17-4 The imported reference bean solution (exemplar) Chapter 17. Produce: Model-to-text pattern implementations 479 When the exemplar project is in the workspace, create a project to contain the pattern implementation by following these steps: 1. Click File → New → Project. 2. Enter jet to filter the available choices. 3. Click EMFT JET Project with Exemplar Authoring, and then click Next. 4. Enter a project name: com.zyx.patterns.beans and click Next. Note on project naming that JET transformations are extensions (plug-ins) to the Eclipse environment. Therefore, JET transformations must follow established naming conventions. The convention is to use reverse domain name order, starting with your organization’s internet domain name (in reverse order). Because ZYX Electronics’s internet domain is zyx.com, the project name starts with this name is reverse order, com.zyx. 5. Finally, select com.zyx.exemplar.beans (the reference bean solution) in the Exemplar Scope list, and click Finish. The wizard creates the JET transformation project and opens the JET transformation authoring editor. Figure 17-5 shows the editor. Figure 17-5 The newly created JET project and the JET transformation authoring editor The JET transformation authoring editor has three key components: The left pane, which is titled Exemplar shows all of the projects, files, and folders contained in the reference solution. Collectively, these projects, files, and folders are referred to as exemplar artifacts, or simply artifacts if the context is unambiguous. Note 480 Strategic Reuse with Asset-Based Development that the pane includes files and folders that are normally hidden by certain Eclipse view filters. (Notice the .project and .classpath files and the bin directory.) The right pane, which is titled Transformation Input Schema and Output Actions, declares the structure of the input model and the transformation actions. Transformation actions are responsible for the creation of files, folders, or projects. Finally, the Properties view provides detailed information about the current selection in the editor. With the JET transformation project created, Deb is ready to start the exemplar analysis process. 17.3.2 Identify an abstraction The first step in the analysis process is to identify an abstraction that represents one or more exemplar artifacts. This is the key step in the process. It requires expert knowledge of the reference solution domain. If the pattern implementation author does not have this knowledge, the pattern implementation author needs to work closely with the subject matter expert (SME) for this domain. By considering the remaining unassociated exemplar artifacts, the SME must look for the “next” abstraction that accounts for at least part of the artifacts. Using domain knowledge, the SME looks at artifacts and groups them into logical roles in the architecture. The pattern implementation author must be listening for comments, such as: These four projects constitute a XYZ type solution. (XYZ solution is an abstraction). These six Java classes constitute an Enterprise Java Bean. (Enterprise Java Bean is an abstraction.) This Java class controls the actions of all of these other classes that represent operations. (Controller is an abstraction, and operation appears to be a related, subordinate abstraction.) In Deb’s case, she notes that Book.java and Library.java are manifestations of Java beans, and the LibraryFactory.java file is a manifestation of a group of related Java beans, which Deb calls a “bean package”. Note that not every abstraction discovered must be exposed in the input model’s structure. Only abstractions that account for desired variability in the output count. In this step, the goal is to identify the most inclusive abstraction that manifests at least one point of variability. In Deb’s case, the “bean package” is more inclusive than “bean”, and so, Deb selects bean package as the top-level abstraction. Questions to ask When identifying abstractions, it is helpful to ask the following questions: Is this artifact a manifestation of an abstract concept? What other artifacts are manifestations of the same concept? Are aspects of this concept points of variation in the pattern? Is this concept a subsidiary to another concept that has not already been identified? Chapter 17. Produce: Model-to-text pattern implementations 481 17.3.3 Create a model element This step translates the abstraction identified in the previous 17.3.2, “Identify an abstraction” on page 481 section into a model element. Slightly different procedures are required, depending on whether this is the first identified abstraction. The first identified abstraction The first abstraction that you identify is a candidate for the top-level abstraction in your model. The top-level abstraction is representative of the pattern itself − there must be only one top-level abstraction. For the first identified abstraction, you can choose to implement it as the root element of the model or as a child element of a meaningless root element. Recall that we conceive of our model as an XML document. XML documents can have only one root element. If the top-level abstraction is implemented as the root element, a model instance can only describe one instance of the pattern. However, using a child element of a meaningless root element allows a single input model to describe multiple pattern instances. In general, a model that allows multiple instances of its top-level abstraction allows more flexibility at little cost, so we recommend the second approach. Best Practice: Create the top-level model abstraction as the child of a generic “root” element, which lets a model define multiple instances of your pattern. In Deb’s case, the first abstraction identified is “bean package”. Following best practices, Deb elects to have a meaningless root element (called root). Follow these steps to create the first model element: 1. Right-click root in the right pane and click New → Type. 2. Enter beanPackage as the element name. The editor enforces a naming convention where names start with a letter and contain only letters and numbers. If the text that you enter violates these conventions, the editor modifies the text that you entered to conform to the convention. Figure 17-6 shows the result. Figure 17-6 The JET authoring editor after the creation of the first abstraction called beanPackage 482 Strategic Reuse with Asset-Based Development All other abstractions For all abstractions other than the top-level abstraction, you must identify a parent abstraction. The parent abstraction serve as a container for the abstraction. For example, Deb’s bean abstraction has the “bean package” abstraction as its parent. The inability to identify a parent abstraction indicates one of several situations: There is an undiscovered abstraction that includes the current top-level abstraction and the new abstraction. There are two distinct patterns in your exemplar. In this case, create a second pattern implementation project. The existing top-level concept is a child of the new concept. In Deb’s case, the “bean” abstraction is a child of “beanPackage”. Deb creates another element type in her model by following these steps: 1. Right-click beanPackage in the right pane and click New → Type. 2. Enter bean as the element name. Figure 17-7 shows the result. Figure 17-7 The JET authoring editor after the bean abstraction has been defined You can read the model description on the right pane as: A model has a single “root” element. The root element has zero or more “beanPackage” elements. Each beanPackage element has zero or more “bean” elements. 17.3.4 Identify exemplar artifacts arising directly from the abstraction The newly defined abstractions arose from considering one of more exemplar artifacts. Now, you must consider how those artifacts arise from those abstractions and whether your pattern implementation generated them. Chapter 17. Produce: Model-to-text pattern implementations 483 What artifacts to consider During this activity, you consider only artifacts that are in a one-to-one relationship with an abstraction. That is, if you can say “This kind of artifact gets created one time for every instance of this model element,” the artifact must be considered. In Deb’s case, the LibraryFactory.java artifact is a direct manifestation of beanPackage. For every beanPackage, there must be exactly one factory class. The files Library.java and Book.java are direct manifestations of bean. For every bean, there must be exactly one bean class. So, LibraryFactory.java is associated with beanPackage, and Library.java and Book.java are associated with bean. Normally, JET transformations create any necessary folders automatically. Thus, you do not need to explicitly account for most exemplar folders. Exemplar files and projects, however, must be explicitly created. For each file and project artifact, you must decide: Will the artifact be generated by the pattern implementation? In this case, the artifact will be handled in the next step. Will the artifact not be generated by the pattern implementation? This can happen if the artifact is generated by another process, such as a compiler. In this case, the file’s artifacts can be deleted from the exemplar pane by right-clicking the artifact and clicking Delete. Folder and project artifacts must be deleted from the exemplar pane only if none of their contents is to be generated. Otherwise, they must be marked as ignored by right-clicking the artifact and clicking Ignore. For each folder identified as requiring generation, you must decide: Is the folder necessary for the structural integrity of the project? Java source folders are an example. Most other folders do not meet this criteria. Folders that meet this criteria will be handled in the next step. Is the folder part of the path to another identified artifact? In this case, the artifact can be marked as ignored. Right-click the folder, and click Ignore. In Deb’s case, there are a number of artifacts that Deb does not want her pattern implementation to generate: The bin directory and all of its contents are produced by the Java content. Delete the bin directory and all of its contents from the exemplar artifacts pane by right-clicking the bin folder, and then clicking Delete. Deb is uncertain about the .* files, so she right-clicks them, and clicks Ignore. She does the same for the chain of directories from src down to library. If she changes her mind, she can always right-click them again, and click Unignore. Figure 17-8 on page 485 shows the resulting editor. 484 Strategic Reuse with Asset-Based Development Figure 17-8 The exemplar view with bin deleted and the other files ignored 17.3.5 Create actions Artifacts that are produced by the pattern implementation are created by the execution of a transformation action. JET authoring includes the following types of actions: File actions, which create a file by expanding a JET template Folder actions, which create a folder Project actions, which create an Eclipse project Copy file actions, which copy a file (no template expansion occurs). Copy file actions are useful for binary files, such as images. Actions are contained within model elements. Each time that a model element is encountered in an input model, that actions that it contains are executed. The artifacts identified in the previous 17.3.4, “Identify exemplar artifacts arising directly from the abstraction” on page 483 section represent the output of required transformation actions. These actions must now be defined. Actions can be defined by dragging an exemplar artifact onto an model element. Deb has determined that LibraryFactory.java is a manifestation of the “beanPackage” abstraction, so she drags the file from the left pane and drops it on beanPackage. Figure 17-9 on page 486 shows the result. Chapter 17. Produce: Model-to-text pattern implementations 485 Figure 17-9 The action created by dragging LibraryFactory.java to beanPackage Dragging LibraryFactory.java to beanPackage results in a new child of beanPackage called Create File: LibraryFactory.java. This is a file action. JET authoring has created a suggested name for the action, but in many cases, you will want to change it to a name that describes the purpose of the artifacts that are produced. Note also, that JET authoring has placed a check mark on LibraryFactory.java in the Exemplar pane to indicate that it is associated with a transformation action. In Deb’s case, a purpose of the new action is to create a factory Java class. Change the name to factory.java by following these steps: 1. Double-click Create File: LibraryFactory.java. The text LibraryFactory.java will be selected. 2. If the text LibraryFactory.java is not selected, select it. Then, replace the text with factory.java. Ultimately, JET authoring will create a JET template called factory.java.jet for this action. The template will be evaluated to produce the factory class’ contents. The convention is to include the ultimate content extension in the file action’s name (hence, the name factory.java). Figure 17-10 on page 487 shows the updated action name. 486 Strategic Reuse with Asset-Based Development Figure 17-10 The renamed action for creating the bean factory class Deb next considers the artifacts Book.java and Library.java. These are both manifestations of a single concept, bean. They both represent the Java class that implements the bean. Therefore, only one action is required to create them. Create the action: 1. Drag Library.java onto bean in the right pane. Name the action bean.java. 2. Drag Book.java onto the Create File: bean.java action. Figure 17-11 shows the resulting input action. Figure 17-11 The bean.java action with Book.java and Library.java associated with it Chapter 17. Produce: Model-to-text pattern implementations 487 The tree in the right pane now indicates that the transformation has two actions: For each bean instance, Create File: bean.java will be executed. The reference solution includes two artifacts that must be produced by this action: Book.java and Library.java. For each beanPackage instance, Create File: factory.java is executed. The reference solution includes one artifact, LibraryFactory.java, that must be produced by this action. 17.3.6 Parameterize actions After transformation actions have been defined, they must be parameterized so that they respond to values in the input model. This task involves several changes to the input model and output actions: Attributes will be added to model elements to represent values required as input. Action properties will be modified to reference these attributes where required. Repeated calculations will be encapsulated in derived attributes, which appear to be normal attributes, but which are calculated rather than specified as input. Parameterizing actions makes use of the Properties view. Figure 17-12 shows the properties for the action Create File: factory.java. Figure 17-12 Properties of the Create File: factory.java Each action has a number of action parameters. JET authoring has set several of these values based on the properties of the exemplar artifact that is used to define the action. Typically, the pattern implementation author must examine each of these parameters to determine whether any part of the parameter must derive from the input model or a calculation based on the input model. Parameterize the factory.java action In the case of the Create File: factory.java action, the parameter path needs parameterization. The following changes through parameterization must be made: Do not hard code com.zyx.exemplar.beans/src as the Java source folder. Deb decides that users will provide this information directly. This will be a point of variability of the pattern implementation. Do not hard code the folder com/zyx/exemplar/beans/library. The folder corresponds to the Java package containing the factory java class. The directory name is derived from the package name com.zyx.exemplar.beans.library. Deb composed of a name for the bean package (library) and a base package that is a common prefix for many packages in the project (com.zyx.exemplar.beans). Deb decides to represent these values as separate attributes in the input model: a base package and a bean package name. 488 Strategic Reuse with Asset-Based Development Do not hard code the factory class name as LibraryFactory. Deb decides that this class name derives from the already identified name for the bean package with the text Factory appended. Create the new attributes: 1. Right-click beanPackage in the right pane, click New → Attribute, and enter srcFolder. 2. Right-click beanPackage again, click New → Attribute, and enter basePackage. 3. Right-click beanPackage a final time, click New → Attribute, and enter name. Figure 17-13 shows the results of these actions. Figure 17-13 Attributes defined for beanPackage Modify the path parameter of Create File: factory.java: 1. Click Create File: factory.java in the right pane. 2. In the Properties view, select the text com.zyx.exemplar.beans/src in the path field. Right-click the selection and click Replace with Model Reference. Figure 17-14 shows the resulting dialog. Figure 17-14 The Replace with Model References dialog The dialog lets you select a model attribute and insert it in place of the selected text. Expand beanPackage, select srcFolder and click OK. Figure 17-15 on page 490 shows the resulting value for the path parameter. Chapter 17. Produce: Model-to-text pattern implementations 489 Figure 17-15 The XPath expression inserted by the Replace with Model References dialog The string {$beanPackage/@srcFolder} has replaced the original selection. This is an XML Path (XPath) expression. JET uses XPath to reference data in the input model. The expression is interpreted as: – The braces delimit the expression from the surrounding text. – $beanPackage is a reference to the XPath variable beanPackage. JET authoring defines a variable for each element type. By default, the variable name is the same as the element type. You can view and change the variable name in the Properties view for each element type. – The slash (/) separates the steps in the expression, similar to a file system path. – @srcFolder references the srcFolder attribute of the beanPackage element. You can learn more about XPath in 17.5, “An XPath primer” on page 518. 3. Define the derived attribute for the directory to contain the generated factory and bean classes. Select the text com/zyx/exemplar/beans/library, right-click it, and click Replace with Model Reference. 4. Expand and select beanPackage in the dialog. There is no attribute representing the directory for the bean classes. To create one, ensure beanPackage is selected, and then click New. Figure 17-16 shows the resulting Create new derived attribute dialog. Figure 17-16 The Create new derived attribute dialog The dialog lets you define an attribute whose value is derived from a calculation. It shows the attribute’s name, the text that you selected to create in step 3 (the exemplar text), and the calculation of the value. The calculation is initially the same as the exemplar text. For the time being, we will leave the calculation unchanged. 5. Enter dirBeans in the Attribute Name field and click OK. Click OK again in the Replace with Model References dialog. Figure 17-17 on page 491 shows the resulting path value. 490 Strategic Reuse with Asset-Based Development Figure 17-17 The path parameter after replacing the beans directory (dirBeans) 6. Define a derived attribute for the factory class name. Select LibraryFactory, right-click it and click Replace with Model Reference. 7. Expand and select beanPackage and click New. 8. Enter clsFactory as the Attribute Name. 9. In the Calculation field, select Library, and then click Insert Model Reference. 10.Expand beanPackage, click name, and click OK. Figure 17-18 shows the Create New Derived Attribute dialog. Figure 17-18 The definition of the clsFactory derived attribute 11.Prior to closing this dialog, modify the XPath expression $beanPackage/@name so that it ensures that the name is properly formatted for Java names by calling the XPath function camelCase. Enter camelCase($beanPackage/@name) in place of the original XPath expression. Remember to retain the braces. Figure 17-19 shows the final result. Figure 17-19 The clsFactory derived attribute calculation using the XPath camelCase function 12.Click OK to close the dialog, and click OK again to close the Insert Model References Dialog. The final value of the path parameter is shown in Figure 17-20 on page 492. Chapter 17. Produce: Model-to-text pattern implementations 491 Figure 17-20 The final value of the path parameter The action Create File: factory.java is now completely parameterized. However, the calculation of the derived attribute dirBeans is not complete. In order to complete it, create another derived attribute representing the Java package into which the bean classes will be written. Follow these steps: 1. Right-click beanPackage in the right pane, and click New → Derived Attribute. 2. Enter pkgBeans as the Attribute Name. 3. Enter com.zyx.exemplar.beans.library as the Exemplar Text and as the Calculation (we will modify the calculation in the next step). 4. Select com.zyx.emplar.beans in the Calculation field, click Insert Model Reference, expand beanPackage, select the basePackage attribute, and click OK. 5. Select library in the Calculation field, click Insert Model Reference, expand beanPackage, select the name attribute, and click OK. 6. Modify the XPath expression $beanPackage/@name by calling the lower-case function, and creating the XPath expression lower-case($beanPackage/@name). Figure 17-21 shows the final calculation. Figure 17-21 The definition of the pkgBeans derived attribute 7. Next, update the calculation for the dirBeans calculation. Click dirBeans in the right tree. 8. In the Properties view, look at the Calculation parameter. Replace the value with: {translate( $beanPackage/@pkgBeans, ‘.’, ‘/’ )} This value uses the XPath function translate to replace the dots in the package name with the slash character (/). Figure 17-22 on page 493 shows the final calculation. 492 Strategic Reuse with Asset-Based Development Figure 17-22 The calculation for the derived attribute dirBeans Finally, the derived attribute calculation for dirBeans depends on the calculated value for pkgBeans. It is important to ensure that the calculations occur in the correct order. 1. Click the Sort on Calculation Order icon in the JET authoring editor. Figure 17-23 shows this icon circled. Figure 17-23 The Sort on Calculation Order icon in the JET authoring editor 2. Right-click pkgBeans and click Move → Up. Repeat until pkgBeans is listed higher than dirBeans in the tree. 3. Click the Sort Alphabetically icon (to the left of the Sort on Calculation Order icon). Parameterize the bean.java action Next, the action Create File: bean.java must be parameterized, which is a similar task to the parameterization of the factory action. The bean.java action will reuse the srcFolder and dirBeans derived attributes. In addition, a name is required for the bean class itself. This suggests that each bean element must have a name attribute. Create the name attribute and parameterize the bean.java action: 1. Expand bean in the rightmost tree of the JET authoring editor. Chapter 17. Produce: Model-to-text pattern implementations 493 2. Right-click bean and click New → Attribute. Type name and press Enter. 3. Click Create file: bean.java. 4. In the Properties view, select com.zyx.exemplar.beans/src (the Java source folder), right-click and click Replace with Model Reference. 5. The Replace with Model Reference dialog appears with the srcFolder derived attribute already selected. (This was the last value that replaced the selected text). 6. Click OK to insert the reference. 7. Select com/zyx/exemplar/beans/library, right-click and click Replace with Model Reference. The dirBeans derived attribute is automatically selected. Click OK to insert the reference. 8. Select Library, right-click and click Replace with Model Reference. This time, a new derived attribute will need to be created to represent the bean class name. Expand the tree to reveal bean, select it, and then click New. 9. Enter clsBean as the Attribute Name. 10.In the Calculation field, select Library, and click Insert Model Reference. Expand the tree to reveal bean and its contents, and select the name attribute underneath bean. Click OK. 11.Surround the XPath expression $bean/@name with a call to the XPath function camelCase. Figure 17-24 shows the final calculation. Figure 17-24 The calculation for derived attribute clsBean 12.Click OK to create the derived attribute. Click OK again to insert the reference into the path parameter. Figure 17-25 shows the final value for the bean.java action’s path parameter. Figure 17-25 The completed path parameter for the Create File: bean.java action The parameterization of actions is now complete. 494 Strategic Reuse with Asset-Based Development 17.3.7 Update templates Up to this point, Deb has been describing her transformation in the JET authoring editor. Now that all of the actions are described, she is ready to parameterize the templates that create the content for the file actions. JET authoring uses a transformation (a JET transformation, of course) to convert the transformation model into appropriate JET templates. To invoke this transformation, right-click any element in the rightmost tree and click Update Project. A JET transformation project will be updated to reflect any changes made in the JET authoring editor. Updating a JET project affects the following files: The templates/main.jet file, which is responsible for coordinating the transformation’s execution. It computes derived attribute values and executes the actions defined in the JET authoring editor. The schema.xsd file, which is an XML Schema (XSD) that can be used in conjunction with an XSD-aware XML editor to produce well formed input for the JET transformation. Templates corresponding to JET actions. These templates are created if they do not exist. They are not overwritten by subsequent project updates. When a template is created, its content is set to the content of the exemplar file that is used to create the output action. The first time Deb updates the JET project, the following files are updated: templates/main.jet schema.xsd templates/beanPackage/factory.java.jet templates/bean/bean.java.jet Subsequent updates will only update the first two files, unless new actions are created, or one of the action templates is removed or renamed. 17.3.8 Parameterize templates The final step is to modify the templates created by JET authoring to include appropriate annotations to customize the template output to the model. Annotations in JET templates are done via XML tags, called custom tags or JET tags. The most common types of annotations done in a JET template are: The JET tag <c:get> gets a value from the input model (or a derived attribute). The JET tag <c:iterate> repeats a block of template text by iterating over part of the input model. The JET tag <c:if> conditionally includes a block of template text by evaluating a condition. All of these tags reference the input model using XPath expressions. You will see examples of each tag as you work through parameterizing the templates in Deb’s transformation. Parameterizing the factory.java.jet template The template factory.java.jet created by the update project command is a copy of the exemplar file LibraryFactory.jet. The text must be parameterized to refer to model elements where appropriate. In parameterizing the template, the task is to identify text that can be replaced by information in the model. Chapter 17. Produce: Model-to-text pattern implementations 495 Replacing text with model references JET authoring helps identify this text by remembering previous text replacements. Each model attribute and derived attribute has associated “Exemplar Text”. Each time that the text is replaced by a reference to an attribute or derived attribute, JET authoring remembers the original text. When you edit a template, JET authoring highlights any occurrences of these remembered text strings and displays special annotations on the text. Figure 17-26 shows the contents of the template factory.java.jet as it was created by the JET authoring project update. Figure 17-26 The JET template factory.java.jet showing editor annotations of replaceable text Note that the text com.zyx.exemplar.beans.library is highlighted. It was referenced as exemplar text when the derived attribute pkgBeans was defined in Figure 17-21 on page 492. The JET editor highlights this text in three ways: It is underlined with a blue wavy line. A blue “information” icon appears in the left margin next to the line containing the text. A yellow file position bar appears in the right margin. (The total height of the right margin represents the length of the template. The yellow marks represent the relative position of the text in the template.) In addition to annotations in the editor, the Problems view includes an Information message associated with the line. Figure 17-27 on page 497 shows the message for the first line in the template. 496 Strategic Reuse with Asset-Based Development Figure 17-27 The Problems view shows the information marker for replaceable text To replace highlighted text with a model reference, you can use the editor’s quick fix command: 1. Click anywhere in the text. 2. Press Ctrl-1. Figure 17-28 shows the pop-up list quick fix actions. Figure 17-28 Quick fix choices for com.zyx.exemplar.beans.library 3. Click Replace “com.zyx.exemplar.beans.library” with “$beanPackage/@pkgBeans”, and press Enter. The resulting template line is: package <c:get select="$beanPackage/@pkgBeans" />; The c:get tag evaluates the XPath expression specified in its select attribute and writes the expression value to the expanded template. In certain cases, a single text selection has multiple possible replacements. In this case, the quick fix list will show them all. The replacements are sorted first by length of the replaceable text (longest text is listed first) and then by the replacement XPath expression. Moving between replaceable text annotations Most templates have many replaceable text annotations. You can navigate quickly between them by using the editor’s navigation capabilities. Pressing Ctrl-. moves you forward to the next annotation. Pressing Ctrl-, will move you backward to the previous annotation. These commands are shortcuts for the menu commands Navigate → Next Annotation and Navigate → Previous Annotation, respectively. Chapter 17. Produce: Model-to-text pattern implementations 497 To finish replacing text, use the navigation and quick fix commands to replace each highlighted text string with the first proposed fix. There is one exception: the string Library when it is embedded in the longer string createLibrary, and it is desirable to create a derived attribute representing the entire string. Identifying new replaceable text Create a new derived attribute to calculate the text createLibrary. The original template line is: public Library createLibrary() { It is a good practice in templates to only replace whole language tokens. If part of a token is flagged as replaceable, it is best to create a derived attribute to represent the entire token. Following this practice means that the language token (in this case, a method name) is encapsulated, which allows you to quickly implement name convention changes. To create a new derived attribute for the method name, follow these steps: 1. Select the text createLibrary. 2. Right-click it, and click Find/Replace with JET Model Reference. The dialog in Figure 17-29 appears. Figure 17-29 The Find/Replace with model reference dialog 3. Create a new derived attribute representing the name of the method that instantiates a bean. One method is required for each bean, so the derived attribute must be defined on bean. Expand the tree to find and select bean, and click New. 4. Enter mthdCreate for the Attribute Name. 5. Select Library in the Calculation field, and click InsertModelReference. 6. Click clsBean, and then click OK. Figure 17-30 on page 499 shows the resulting derived attribute dialog. 498 Strategic Reuse with Asset-Based Development Figure 17-30 The definition of the derived attribute mthdCreate 7. Click OK to create the attribute, click Replace, and then click Close to insert the model reference and close the Find/Replace dialog. Inserting a repeating block of text The role of the factory class is to provide a create method for each bean, which suggests the template will require a repeating block that generates each create method. The template contains a block of text that is already parameterized to produce a create method for a bean. All that remains is to include annotations to repeat the block for each bean. Example 17-4 shows the factory template as it is now. The parameterized create method is highlighted in bold. Example 17-4 The factory.java.jet template before defining a repeating block package <c:get select="$beanPackage/@pkgBeans" />; /** * */ public class <c:get select="$beanPackage/@camelCase" /> { /** * Singleton instance of the <c:get select="$beanPackage/@camelCase" /> */ public static final <c:get select="$beanPackage/@camelCase" /> INSTANCE = new <c:get select="$beanPackage/@camelCase" />(); /** * Private constructor prevents instantiation. */ private <c:get select="$beanPackage/@camelCase" />() { } /** * Create a new book instance * @return the new Book object */ public Book createBook() { return new Book(); } Chapter 17. Produce: Model-to-text pattern implementations 499 /** * Create a new library instance * @return the new <c:get select="$bean/@clsBean" /> object */ public <c:get select="$bean/@clsBean" /> <c:get select="$bean/@mthdCreate" />() { return new <c:get select="$bean/@clsBean" />(); } } Follow these steps to make the block repeating: 1. Just prior to the Java doc comment for the parameterized create method, insert a JET c:iterate tag: <c:iterate select=”$beanPackage/bean” var=”bean”> 2. At the end of the parameterized method, insert a closing c:iterate tag: </c:iterate> 3. Remove the method createBook and its Java doc comment. It is not needed in the template. Example 17-5 shows the modified template with the iterate block highlighted in bold. Example 17-5 The factory.java.jet template with a repeated block. package <c:get select="$beanPackage/@pkgBeans" />; /** * */ public class <c:get select="$beanPackage/@clsFactory" /> { /** * Singleton instance of the <c:get select="$beanPackage/@clsFactory" /> */ public static final <c:get select="$beanPackage/@clsFactory" /> INSTANCE = new <c:get select="$beanPackage/@clsFactory" />(); /** * Private constructor prevents instantiation. */ private <c:get select="$beanPackage/@clsFactory" />() { } <c:iterate select="$beanPackage/bean" var="bean"> /** * Create a new library instance * @return the new <c:get select="$bean/@clsBean" /> object */ public <c:get select="$bean/@clsBean" /> <c:get select="$bean/@mthdCreate" />() { return new <c:get select="$bean/@clsBean" />(); } </c:iterate> } 500 Strategic Reuse with Asset-Based Development One final change is required. The Java doc comment in the create method block still references the text library. Replace it with a reference to the bean name: 1. Select the text library. Right-click and click Find/Replace with Model Reference. 2. Expand the tree to expose bean and its attributes. Select the attribute name. 3. Click Replace and then Close. The factory template is now complete. Save and close the editor. Click File → Save and then File → Close. Update the JET project In the process of parameterizing the factory template, a derived attribute was defined. In order that this definition be reflected in the generated main.jet file, the JET project must be updated. Follow these steps: 1. If the JET authoring editor is not open, open it by double-clicking transform.tma. 2. Right-click any element in the rightmost tree, and click Update Project. Parameterizing the bean.java.jet template Parameterization of the bean template follows a similar process to that of parameterizing the factory template. In the interest of brevity, we do not provide detailed steps. Instead, we will review the key issues that must be addressed. The complete JET transformation is available as additional material for this book. Refer to Appendix C, “Additional material” on page 725 and look inside the ABD-Part 4-Projects.zip file for ch16transform.zip. Representing bean properties in the input model The input model structure has been driven observing workspace artifacts. Java bean properties do not manifest themselves as artifacts, so they have not yet been included in the input model description. You must define: A new element type property contained by bean A new attribute name on property A new attribute type on property Representing list properties in the input model Recall that the case study requires that beans are able to reference other beans. These list properties must be represented in the input model. Deb has chosen to implement them as: A new element type listProperty contained by bean A new attribute name on listProperty A new attribute containedBeanName on listProperty Derived attributes on property During the parameterization of the bean.java.jet template, the following derived attributes were identified and defined for property: mthdGetter The name of the get method for the property mthdSetter The name of the set method for the property varField The name of the Java field containing the property value varLocal The name of a Java local variable that will contain the value Chapter 17. Produce: Model-to-text pattern implementations 501 Derived attributes on listProperty During the bean parameterization of the bean.java.jet template, the following derived attributes were identified and defined for listProperty: mthdGetter The name of the get method for the listProperty varField The name of the Java field containing the list contents The completed bean.java.jet template Example 17-6 shows the final text of the bean.java.jet template. JET comments (<%-- --%>) have been added to explain several of the tags. The only new tag is c:if which is used to create a conditional block; the block is expanded only if the bean has list properties. Example 17-6 The completed bean.java.jet template package <c:get select="$beanPackage/@pkgBeans" />; <%-- only generate list imports if list properties are defined --%> <c:if test="$bean/listProperty"> import java.util.ArrayList; import java.util.List; </c:if> /** * Implement bean <c:get select="$bean/@name"/> */ public class <c:get select="$bean/@clsBean" /> { <%-- define fields for 'property' elements --%> <c:iterate select="$bean/property" var="property"> private <c:get select="$property/@type" /> <c:get select="$property/@varField" />; </c:iterate> <%-- define fields for 'listProperty' elements --%> <c:iterate select="$bean/listProperty" var="listProperty"> private final List <c:get select="$listProperty/@varField" /> = new ArrayList(); </c:iterate> /** * Package private constructor prevents instantiation except through factory */ <c:get select="$bean/@clsBean" />() { } <%-- define getter and setter methods for 'property' elements --%> <c:iterate select="$bean/property" var="property"> /** * Return the <c:get select="$beanPackage/@name" /> <c:get select="$property/@name" />. * @return the <c:get select="$property/@name" /> */ public <c:get select="$property/@type" /> <c:get select="$property/@mthdGetter" />() { return <c:get select="$property/@varField" />; } 502 Strategic Reuse with Asset-Based Development /** * Set the <c:get select="$beanPackage/@name" /> <c:get select="$property/@name" /> * @param <c:get select="$property/@varLocal" /> the new <c:get select="$property/@name" /> */ public void <c:get select="$property/@mthdSetter" />(<c:get select="$property/@type" /> <c:get select="$property/@varLocal" />) { this.<c:get select="$property/@varField" /> = <c:get select="$property/@varLocal" />; } </c:iterate> <%-- define getter methods for 'listProperty' elements --%> <c:iterate select="$bean/listProperty" var="listProperty"> /** * Return the list of <c:get select="$listProperty/@name" /> in the <c:get select="$beanPackage/@name" /> * @return a list of <c:get select="$beanPackage/bean[@name = $listProperty/@containedBeanName]/@clsBean" /> objects. Will not be <code>null</code> */ public List <c:get select="$listProperty/@mthdGetter" />() { return <c:get select="$listProperty/@varField" />; } </c:iterate> } 17.3.9 Running the JET transformation With the transformation complete, it is time for Deb to test it. These are the instructions Deb wrote for using her transformation: 1. Create a Java project: a. Click File → New → Project. b. Click Java → Java Project, then click Next. c. Enter a project name, and specify a source folder, such as src. d. Click Finish. 2. Ensure that the XML capability is enabled. IBM Rational System Developer (RSD) and IBM Rational Software Modeler (RSM™) do not include the XML capability: a. Click Windows → Preferences. b. Click General → Capabilities. c. Check XML Developer, and click OK. 3. In the root of the Java project, create a file named beans.xml: a. Click File → New → Other. b. Select XML → XML. With RSD and RSM, you must select General → File. Click Next. c. Click Create XML file from an XML schema file and click Next. (Skip this step for RSD and RSM.) Chapter 17. Produce: Model-to-text pattern implementations 503 d. Enter the file name beans.xml and specify a location in the root folder of the project created in step 1. Click Next. (With RSD and RSM, click Finish, and skip the next step). e. Click Select file from workbench and select com.zyx.patterns.beans/schema.xsd as the XML schema. Click Next, and then click Finish. 4. Enter data. Example 17-7 models a simple archive. Note that the XML Editor (not available in RSD and RSM) has two tabs: Design and Source. Click the Source tab to enter the example text. Example 17-7 Test input describing a simple archive <<?xml version="1.0" encoding="UTF-8"?> <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../com.zyx.patterns.beans/schema.xsd"> <beanPackage basePackage="test.bean.proj.base" name="my archive" srcFolder="test.bean.proj/src"> <bean name="building"> <property name="location" type="String"/> <property name="name" type="String"/> <listProperty name="artifacts" containedBeanName="artifact"/> </bean> <bean name="artifact"> <property name="catalog number" type="int"/> <property name="description" type="String"/> <property name="date entered" type="java.util.Calendar"/> </bean> </beanPackage> </root> 5. Save and close beans.xml. 6. Configure the JET transformation to run: a. Select beans.xml in the Package Explorer, Navigator, or Project Explorer view. Click Run → Run. b. Select JET Transformation, and click the New icon (the first icon on the tool bar). c. For Name, enter Generate beans for project name, where project name is the name of the project that you created in step 1. d. For Transformation Input, ensure that the beans.xml file is listed. If not, click Browse to select it. e. For ID, select com.zyx.patterns.beans. Figure 17-31 on page 505 shows the completed field values. 504 Strategic Reuse with Asset-Based Development Figure 17-31 The Run dialog defining the test launch of the zyx beans transformation f. Click Run. As the JET transformation executes, it produces progress information in the Console view. Figure 17-32 shows the console output. Figure 17-32 JET Console output The transformation ran, and the Java beans were created, just the way that Deb liked them. Can these instructions be another pattern Just as Deb was about to declare victory, something the IBM consultant said came back to her: “Long lists of instructions are often a sign of an undiscovered pattern.” Chapter 17. Produce: Model-to-text pattern implementations 505 Deb wondered if these setup instructions can be automated with JET, too. The answer is yes, and a pattern com.zyx.patterns.beans.setup has been included in the Appendix C, “Additional material” on page 725 inside the ABD-Part 4-Projects.ZIP for the ch16transform.setup.zip file. 17.4 Enabling iterative development Most software development is iterative. That is, software artifacts are designed, created, tested, evaluated, and then revised (often repeatedly). If a pattern implementation is used, in most cases, it must accommodate this iteration. Typically, this means that pattern implementations cannot destroy valuable artifacts created by a previous invocation of the pattern, nor can they destroy user-created artifacts. This section discusses when and how a pattern implementation must support iterative development. 17.4.1 Case study: Adding derived properties to beans The bean pattern created in the case study overwrites the generated Java files each time that it is run. So far, this is not a problem. Developers can use the generated beans “as is”. But, in many pattern implementations, things are not so simple. When Deb showed her bean pattern to other developers, they were generally positive. However, a number of developers noted that sometimes it is desirable to have properties on a bean that derive their value from other properties. Deb thinks this is a good idea, but Deb cannot imagine being able to succinctly model the calculations using JET authoring. The most obvious thing to do is to have the bean transformation generate a stub implementation of the property getter method, and let the bean developer provide the implementation. Deb quickly updates her reference solution with a derived property. Example 17-8 shows a typical derived property solution. Example 17-8 An implementation of a derived property /** * Return the library years open (derived) * @return the years open */ public int getYearsOpen() { return java.util.Calendar.getInstance().get(java.util.Calendar.YEAR) - getYearFounded(); } But, Deb still has the problem of how to integrate this into the bean.java.jet template. A straightforward modification of the template means that each time that the pattern was run on the same input, any custom code previously entered is lost. What Deb needs is a strategy for dealing with aspects of a reference solution that are too complex (or too inconvenient) to capture in the transformation’s abstraction. We call this problem an incomplete abstraction. Another term is a leaky abstraction. 506 Strategic Reuse with Asset-Based Development 17.4.2 Reapply strategies: Handling incomplete abstractions Incomplete abstractions occur frequently when creating pattern implementations. The goal of a pattern implementation is to reliably reproduce the common aspects of a proven solution. But interesting pattern applications usually have unique characteristics (otherwise, the pattern has been bundled up into a standard application programming interface (API) long ago). The pattern author must accept that their pattern abstractions will usually be incomplete and learn techniques that integrate pattern-generated artifacts with the user-created artifacts. We call these techniques reapply strategies, because they come into effect when a transformation is applied repeatedly on the same input. There are three ways that a pattern implementation can deal with an incomplete abstraction: Complete the abstraction. Let the user edit the generated solution to introduce the to-be-completed aspects. Re-factor the generated solution to separate the to-be-completed aspects from generated ones. In the second case, identifying and protecting user changes to the generated solution becomes a concern of the pattern author. However, in any case, it is important that a pattern implementation establish a contract with the user regarding generated artifacts. Pattern implementation contracts Every pattern implementation must document a contract with its users specifying (the names are appropriate from the users’ perspective): Non-modifiable files Files that the transformation owns and that users must not modify User files Files that the users own and that the transformation will not modify Shared files Files that both users and the transformation can modify Shared files require additional contract terms, indicating how and when users and the transformation can modify a file, how their changes will be identified, and how conflicts will be resolved. Tip: Avoid having shared files in your transformations, if at all possible. Case study: Implementation choices for derived properties Deb has come up with several approaches for supporting derived properties in the bean pattern. Capture the calculations in the model (that is, complete the abstraction) Generate stub methods for derived attributes, and have users complete them (that is, generated shared files.) Refactor the generated solution so that the derived attribute calculations are stored separately (in user files) from the rest of the bean and factory classes (non-modifiable files). Chapter 17. Produce: Model-to-text pattern implementations 507 Deb has rejected the first option as impractical. While the calculations can be included in the model simply as strings, this approach leads to a significantly degraded editing environment for the derived property calculations. She has identified four other approaches: Shared file approaches: – Use JETs generic “user region” tags to protect user-entered calculations in the bean classes. – Use JETs Java-specific “jmerge” tags to implement a more sophisticated mechanism to protect user-entered code in the bean classes. User file approaches: – Modify the bean class to delegate the derived property calculation to a utility class. The utility class is a user file, while the bean class remains a non-modifiable file. – Modify the bean class to declare the getter method derived property as abstract, and modify the factory to instantiate a concrete class that implements the abstract method. The concrete class is a user file. Exemplar appropriate for JET’s user region tags JET’s user region tags preserve user code so long as it is entered in predefined document regions. These regions are identified by unique-to-the-file begin and end patterns. This approach can be used for any text file. Example 17-9 shows an exemplar bean with the appropriate markup text highlighted in bold. The user calculation is between the marker text: //begin getYearsOpen() and //end getYearsOpen() Example 17-9 A derived property implementation with user region markers package com.zyx.exemplar.beans.library; /** * */ public class UserRegionLibrary { ... other text removed for clarity /** * Return the library years open (derived) * @return the years open */ public int getYearsOpen() { //Place your custom code between the begin/end comments below //begin getYearsOpen() return java.util.Calendar.getInstance().get(java.util.Calendar.YEAR) - getYearFounded(); //end getYearsOpen() } } Exemplar appropriate for JMerge WIth JMerge, a Java class can be marked up to indicate which class members are user-owned and which class members are transformation-owned. This markup is via the 508 Strategic Reuse with Asset-Based Development @generated Javadoc™ annotation. The transformation will overwrite any class member that has an @generated tag. The transformation will not modify any member that does not have the tag or where the tag has been modified. Example 17-10 shows an exemplar bean with appropriate @generated markup. Note that the derived property getter getYearsOpen does not have the @generated markup. Example 17-10 A typical implementation compatible with the java:merge tag package com.zyx.exemplar.beans.library; /** * @generated */ public class JMergeLibrary { /** * @generated */ private int yearFounded; /** * Package private constructor prevents instantiation except through factory * @generated */ JMergeLibrary() { } /** * Return the library year founded * @return the year founded * @generated */ public int getYearFounded() { return yearFounded; } /** * Set the library year founded * @param yearFounded the new year founded * @generated */ public void setYearFounded(int yearFounded) { this.yearFounded = yearFounded; } /** * Return the library years open (derived) * @return the years open */ public int getYearsOpen() { return java.util.Calendar.getInstance().get(java.util.Calendar.YEAR) - getYearFounded(); } } Chapter 17. Produce: Model-to-text pattern implementations 509 Exemplar appropriate for a utility class Example 17-11 shows the typical implementation of a utility class. The bean class (which will be a non-modifiable file) delegates to this utility class for the derived property calculation. The utility class is a user file. The bean class is not shown. Example 17-11 A typical utility class implementation package com.zyx.exemplar.beans.library.derived; import com.zyx.exemplar.beans.library.UtilityLibrary; /** * */ public class UtilityLibraryUtil { /** * Utility method to calculate years open (derived) * @param library the library * @return the years open */ public static int getYearsOpen(UtilityLibrary library) { return java.util.Calendar.getInstance().get(java.util.Calendar.YEAR) - library.getYearFounded(); } } Exemplar appropriate for an abstract method implementation Example 17-12 shows a typical implementation of an abstract method. The class DerivedAbstractLibrary is a concrete class that extends an abstract bean implementation (AbstractLibrary, which is a non-modifiable file) to calculate the derived property. The concrete subclass is a user file. The abstract bean class and the modified factory class are not shown. Example 17-12 A typical abstract method implementation package com.zyx.exemplar.beans.library.derived; import com.zyx.exemplar.beans.library.AbstractLibrary; /** * */ public class DerivedAbstractLibrary extends AbstractLibrary { /* * (non-Javadoc) * * @see com.zyx.exemplar.beans.library.AbstractLibrary#getYearsOpen() */ public int getYearsOpen() { return java.util.Calendar.getInstance().get(java.util.Calendar.YEAR) - getYearFounded(); } 510 Strategic Reuse with Asset-Based Development } We will look at implementing each of these approaches in the following sections. 17.4.3 Reapply strategies: Implementation This section discusses the implementation of each of the reapply strategies just identified: Using JET user regions Using JMerge for Java code Generating a user-owned concrete class Generating a user-owned utility class Complete solutions for each reapply strategy are included in the additional materials described in Appendix C, “Additional material” on page 725 inside the ABD-Part 4-Projects.zip file for the ch16transform.derived.zip file. The zip file contains the following projects: com.zyx.exemplar.beans An updated exemplar project that includes implementations of examples of each of the reapply strategies com.zyx.patterns.beans.derived.userregion The zyx beans pattern that uses JET user regions com.zyx.patterns.beans.derived.jmerge The zyx beans pattern that uses JMerge com.zyx.patterns.beans.derived.utility The zyx beans pattern that generates user-owned utility classes com.zyx.patterns.beans.derived.subclass The zyx beans pattern that generates user-owned concrete subclasses com.zyx.patterns.tests A project containing test inputs for each of the previous patterns In this next section, we discuss the highlights of these implementations. Common characteristics of all solutions Each solution uses the identical input model structure to describe the derived properties. They each define: derivedProperty A model element representing a derived property name An attribute of derivedProperty defining the name of the property type An attribute of derivedProperty defining the type of the property mthdGetter A derived attribute of derivedProperty that calculates the name of the property getter method Using JET user regions Example shows the additional JET template code that is necessary to include derived property getters inside the bean class. Example specifically shows the JET template code creating a derived property getter method (highlighted in bold) with a user region to protect the implementation. Chapter 17. Produce: Model-to-text pattern implementations 511 Example 17-13 JET template code creating a derived property getter method <c:iterate select="$bean/derivedProperty" var="dp"> /** * Return the <c:get select="$beanPackage/@name" /> <c:get select="$dp/@name" />. * @return the <c:get select="$dp/@name" /> */ public <c:get select="$dp/@type" /> <c:get select="$dp/@mthdGetter" />() { //Place your custom code between the begin/end comments below <c:userRegion>//begin <c:get select="$dp/@mthdGetter" />()<c:initialCode> // TODO Implement this method throw new UnsupportedOperationException(); </c:initialCode>//end <c:get select="$dp/@mthdGetter" />()</c:userRegion> } </c:iterate> The user region is defined by the JET tags <c:userRegion> and its child tag <c:initialCode>. The tags use the text before <c:initialCode> and after </c:initialCode> as markers for the user region. No two user regions in a file must have the same markers. The template ensures this does not happen by including the getter method name in the markers. The <c:initialCode> element contains the content to be written into the template output when the user region is first created. Each time that the <c:userRegion> tag executes, JET calculates the begin and end tags and attempts to find them in the previous version of the file being written. If found, the existing content is used instead of the content within the <c:initialCode> tag. Tip: JET does a literal search for the begin and end markers. White space (blanks, tabs, and new lines) as well as the case of letters (uppercase or lowercase) matter. A best practice is to include as little white space as possible in the markers by placing the <c:userRegion> and <c:initialCode> tags on the same line in the template. Similarly, the closing </c:initialCode> and </c:userRegion> tags must be on a single line. Note that JET user regions have the following disadvantages: User text can only be added in predefined regions. For example, Java code entered in a method body user region might require additional import statements elsewhere in the file. The template must anticipate this situation, and the transformation user must understand this constraint. User regions that are no longer generated by the template will be removed from the template output. Thus, there is a risk that user-entered code can be lost, which is particularly likely in the case where a model element was renamed. Using JMerge for Java code Example 17-14 shows the modified bean template that protects user-entered code via a JETs <java:merge> tag. Example 17-14 The bean template modified to use JMerge to protect user code <%-- Mark this template as requiring a merge with existing content --%> <java:merge/> package <c:get select="$beanPackage/@pkgBeans" />; 512 Strategic Reuse with Asset-Based Development <%-- only generate list imports if list properties are defined --%> <c:if test="$bean/listProperty"> import java.util.ArrayList; import java.util.List; </c:if> /** * Implement bean <c:get select="$bean/@name"/> * @generated */ public class <c:get select="$bean/@clsBean" /> { <%-- define fields for 'property' elements --%> <c:iterate select="$bean/property" var="property"> /** * @generated */ private <c:get select="$property/@type" /> <c:get select="$property/@varField" />; </c:iterate> <%-- define fields for 'listProperty' elements --%> <c:iterate select="$bean/listProperty" var="listProperty"> /** * @generated */ private final List <c:get select="$listProperty/@varField" /> = new ArrayList(); </c:iterate> /** * Package private constructor prevents instantiation except through factory * @generated */ <c:get select="$bean/@clsBean" />() { } <%-- define getter and setter methods for 'property' elements --%> <c:iterate select="$bean/property" var="property"> /** * Return the <c:get select="$beanPackage/@name" /> <c:get select="$property/@name" />. * @return the <c:get select="$property/@name" /> * @generated */ public <c:get select="$property/@type" /> <c:get select=