本书主要介绍了基于重用的软件工程的实践模型和其他有关的基础问题,全面分析了基于重用的软件工程挡前状态和未来发展,重点讨论了软件重用的关键技术、管理和组织问题,详细论述了这些理论知识在基于组件的软件开发生命周期和产品线工程中的运用问题。全书的结构清晰,内容全面,并且提供了相关练习,可以使读者对软件开发有更深刻的认识。\r\n 本书适用于计划推进本单位软件重用实践的管理和技术人员,同时对计算机应用专业的研究生和高年级本科生也有很好的参考价值。
PART1 INTRODUCTION\r\n\r\n1 Software Reuse and Software Engineering\r\n\r\n1.1 Concepts and Terms\r\n1.1.1 A Definition of Software Reuse\r\n1.1.2 Software Reuse:Potentials and Pitfalls\r\n1.1.3 Exercises\r\n1.2 Software Reuse Products\r\n1.2.1 Reusable Assets\r\n1.2.2 Reuse Libraries:Vertical versus Horizontal Sets\r\n1.2.3 Exercises\r\n1.3 Software Reuse Processes\r\n1.3.1 Organizational Structures\r\n1.3.2 Domain Engineering\r\n1.3.3 Application Engineering\r\n1.3.4 Corporate Oversight\r\n1.3.5 Exercises\r\n1.4 Software Reuse Paradigms\r\n1.4.1 Paradigms for Software Retrieval\r\n1.4.2 Paradigms for Software Adaptation\r\n1.4.3 Paradigms for Software Composition\r\n1.4.4 Exercises\r\n1.5 Further Reading\r\n\r\n2 State of the Art and the Practice\r\n\r\n2.1 Software Reuse Management\r\n2.1.1 State of the Art\r\n2.1.2 State of the Practice\r\n2.1.3 Perspectives\r\n2.1.4 Exercises\r\n2.2 Software Reuse Techniques\r\n2.2.1 State of the Art\r\n2.2.2 State of the Practice\r\n2.2.3 Perspectives\r\n2.2.4 Exercises\r\n2.3 Software Reuse Initiatives\r\n2.3.1 Software Reuse Libraries\r\n2.3.2 Software Reuse methodologies\r\n2.3.3 Software Reuse Standards\r\n2.3.4 Exercises\r\n2.4 Further Reading\r\n\r\n3 Aspects of Software Reuse\r\n\r\n3.1 Organizational Aspects\r\n3.1.1 Managerial Intrastructure\r\n3.1.2 Technological Infrastructure\r\n3.1.3 Reuse Introduction\r\n3.1.4 Exercises\r\n3.2 Technical Aspects\r\n3.2.1 Domain Engineering Aspects\r\n3.2.2 Component Engineering Aspects\r\n3.2.3 Application Engineering Aspects\r\n3.2.4 Exercises\r\n3.3 Economic Aspects\r\n3.3.1 Software Reuse Metrics\r\n3.3.2 Software Reuse Cost Estimation\r\n3.3.3 Software Reuse Return on Investment\r\n3.4 Further Reading\r\n\r\nPART II ORGANIZATIONAL ASPECTS\r\n\r\n4 Software Reuse Organizations\r\n\r\n4.1 Software Reuse Team Structures\r\n4.1.1 Characteristic Features\r\n4.1.2 Software Reuse Team Strustures\r\n4.1.3 Determining Factors\r\n4.1.4 Exercises\r\n4.2 Reuse Skills\r\n4.2.1 Librarian\r\n4.2.2 Reuse Manager\r\n4.2.3 Domain Engineer\r\n4.2.4 Application Engineer\r\n4.2.5 Component Engineer\r\n4.2.6 Exercises\r\n4.3 Further Reading\r\n\r\n5 Support Services\r\n\r\n5.1 Configuration Management\r\n5.2 Quality Assurance\r\n5.3 Testing\r\n5.4 Verification and Validation\r\n5.4.1 Domain-Level Tasks\r\n5.4.2 Correspondence Tasks\r\n5.4.3 Communicating Results\r\n5.5 Risk Management\r\n5.6 Certification\r\n5.7 Exercises\r\n5.8 Further Reading\r\n\r\n6 Institutionalizing Reuse\r\n\r\n6.1 Organizational Readiness\r\n6.2 Barriers to Reuse\r\n6.2.1 Cultural\r\n6.2.2 Managerial\r\n6.2.3 Technological\r\n6.2.4 Infrastructural\r\n6.3 Overcoming the Barriers to Reuse\r\n6.3.1 Executive Support\r\n6.3.2 Training\r\n6.3.3 Incentives\r\n6.3.4 Incremental Approach\r\n6.4 Exercises\r\n6.5 Further Reading\r\n\r\nPART III DOMAIN ENGINEERING:BUILDING FOR REUSE\r\n\r\n7 Building Reusable Assets:An Overview\r\n\r\n7.1 Reusability\r\n7.1.1 Usability\r\n7.1.2 Usefuless\r\n7.2 Acquiring Reusable Assets\r\n7.2.1 Build Versus Buy\r\n7.2.2 Building Reusable Assets in House\r\n7.2.3 Building Application Generators\r\n7.3 Domain Engineering Lifecycles\r\n7.3.1 Issues\r\n7.3.2 A Sample of Domain Engineering Lifecycles\r\n7.3.3 Summary\r\n7.4 Summary and Discussion\r\n\r\n8 Domain Analysis\r\n\r\n8.1 Basic Concepts\r\n8.1.1 A Domain\r\n8.1.2 Domain Analysis\r\n8.1.3 Domain Models\r\n8.1.4 Exercises\r\n8.2 Domain Scoping\r\n8.2.1 Scoping Criteria\r\n8.2.2 Over-and Underscoping\r\n8.2.3 Exercises\r\n8.3 Domain versus Application Requirements\r\n8.4 Anatomy of a Domain Component\r\n8.4.1 A Model for Component Families\r\n8.4.2 Concerns in Designing Component Families\r\n8.4.3 Exercises\r\n8.5 Abstraction and Domain Analysis\r\n8.5.1 Abstraction and Commonality Analysis\r\n8.5.2 Abstraction Dimensions\r\n8.5.3 Exercises\r\n8.6 Domain Analysis Methods\r\n8.6.1 Feature-Oriented Domain Analysis(FODA)\r\n8.6.2 OrganizationDomain Modeling(ODM)\r\n8.6.3 Joint Object-Oriented Domain Analysis(JODA)\r\n8.6.4 Reuse Library Proess Model(RLPM)\r\n8.6.5 DomainAnalysis and Design Process(DADP)\r\n8.6.6 Domain-Specific Software Architecture(DSSA)\r\n8.6.7 The SYNTHESIS Domain Analysis Method\r\n8.6.8 Reuse Business Methodology\r\n8.6.9 Comparison\r\n8.6.10 Exercises\r\n8.7 Domain Analysis Tools\r\n8.7.1 KAPTUR,a Knowledge-Based Tool\r\n8.7.2 Genesis,a Builder for Database Management Systems\r\n8.7.3 Exercises\r\n8.8 Further Reading\r\n\r\n9 Programming Paradigms and Reusability\r\n\r\n9.1 Usability Attributes\r\n9.1.1 Reusability-Abstraction Boundaries\r\n9.1.2 Abstraction and Composability\r\n9.2 Representation and Modeling Paradigms\r\n9.2.1 Declarative versus Procedural Representations\r\n9.2.2 Object-Oriented Modeling\r\n9.3 Abstraction and Composition in Development Paradigms\r\n9.3.1 Declarative Representations:The Case of Logic Programming\r\n9.3.2 Procedural(Functional)Programming\r\n9.3.3 Object-Oriented Development\r\n9.4 Toward Multiparadigm Development\r\n\r\nPART IV OBJECT-ORIENTED DOMAIN ENGINEERING\r\n\r\n10 A Pragmatic Introduction to Object Orientation\r\n\r\n10.1 Introduction\r\n10.1.1 Overview\r\n10.1.2 The Financial Domain\r\n10.2 The Tenets of Object-Oriented Programming\r\n10.2.1 A Sample Program\r\n10.2.2 Encapsulation and Information Hiding\r\n10.2.3 Overloading and Genericity\r\n10.2.4 Subtyping and Class Inheritance\r\n10.2.5 Method Resolution,Late Binding,and Polymorphism\r\n10.3 The Language Wars\r\n10.4 Discussion\r\n\r\n11 Abstraction and Parameterization Techniques in Object Orientation\r\n\r\n11.1 Abstraction Techniques in Object-Oriented Modeling\r\n11.1.1 An Ontology of Objects\r\n11.1.2 Inheritance in Knowledge Representation\r\n11.1.3 Inheritance in Object-Oriented Analysis\r\n11.1.4 Metamodeling\r\n11.1.5 Understanding Metamodeling\r\n11.1.6 In Practice-a Summary\r\n11.2 Abstraction Techniques in Object-Oriented Programming Languages\r\n11.2.1 Abstract Classes\r\n11.2.2 Generic Classes\r\n11.3 Metaprogramming\r\n11.3.1 Building an Interpreter\r\n11.3.2 Computational Reflection and Metaclasses\r\n11.3.3 Implementing Powertypes\r\n11.4 Design Patterns\r\n11.4.1 Structural Abstraction Patterns\r\n11.4.2 Behavioral Abstraction Patterns\r\n11.5 Conclusion\r\n\r\n12 Composition Techniques in Object Orientation\r\n\r\n12.1 Issues\r\n12.1.1 Composability Requirements\r\n12.1.2 Structural and Behavioral Composition\r\n12.1.3 Abstraction and Granularity\r\n12.1.4 Binding Time\r\n12.2 Linguistic Approaches\r\n12.2.1 Constraint and Logic-Based Programming\r\n12.2.2 Functional Composition\r\n12.2.3 Hybrid Object-Oriented and Decclarative Approaches\r\n12.3 Modularization and Packaging Approaches\r\n12.3.1 Aspect-Oriented Programming\r\n12.3.2 Subject-Oriented Programming\r\n12.3.3 View-Oriented Programming\r\n12.3.4 Other Approaches\r\n12.4 Design-Based Approaches\r\n12.4.1 Event-Based Composition\r\n12.4.2 Simulated Reflection\r\n12.4.3 Composition Design Patterns\r\n12.5 Summary and Discussion\r\n\r\n13 Application Frameworks\r\n\r\n13.1 What Is in a Framework\r\n13.1.1 A First Definition\r\n13.1.2 The Anatomy of a Framework\r\n13.1.3 The Framework Reuse Lifecycle\r\n13.2 Fulfilling the Framework Contract\r\n13.2.1 Component Substitutability\r\n13.2.2 Composition Issues\r\n13.3 Building Frameworks\r\n13.3.1 Frameworks as Products of Domain Engineering\r\n13.3.2 Frameworks as Planned Byproducts of Application Development\r\n13.4 The SWING Framework\r\n13.4.1 Overview\r\n13.4.2 The Event-Handling Framework\r\n13.4.3 The Pluggable Look and Feel Framework\r\n13.5 Conclusion\r\n\r\n14 Architectural Frameworks\r\n\r\n14.1 What Is and Architecture\r\n14.1.1 Definition\r\n14.1.2 Quality Attributes of Architectures\r\n14.1.3 Architectural Styles and Connectors\r\n14.2 Architecuture and Reuse\r\n14.2.1 The Development Lifecycle of a Software Architecture\r\n14.2.2 Dimensions of Reusability\r\n14.2.3 Issues in Architectural Frameworks\r\n14.3 CORBA\r\n14.3.1 The Problem\r\n14.3.2 The Core Architecture\r\n14.3.3 Handling Method Calls\r\n14.3.4 Implementing Application Objects\r\n14.4 Java-Based Technologies\r\n14.4.1 Java RMI\r\n14.4.2 The EJB Architecture\r\n14.5 The COM Family\r\n14.6 Summary and Discussion\r\n14.7 Further Reading\r\n\r\nPART V APPLICATION ENGINEERING\r\n\r\n15 Application Engineering\r\n\r\n15.1 Application Engineering Paradigms\r\n15.2 Application Engineering Lifecycles\r\n15.3 Application Engineering Development Tasks and Heuristics\r\n\r\n16 Component Storage and Retrieval\r\n\r\n16.1 An Introductin to Software Libraries\r\n16.1.1 Terminology for Storage and Retrieval\r\n16.1.2 Assessment Criteria\r\n16.1.3 Characterizing a Storage-Retrieval Method\r\n16.1.4 Exercises\r\n16.2 Classifying Software Assets for Storage and Retrieval\r\n16.2.1 Obstacles to Software Assets Classification\r\n16.2.2 Issues in Software Storage and Retrieval\r\n16.2.3 Classifying Software Libraries\r\n16.2.4 Exercises\r\n16.3 Further Reading\r\n\r\n17 Reusable Asset Integration\r\n\r\n17.1 Asset Instantiation Paradigms\r\n17.1.1 Component Selection\r\n17.1.2 Component Generation\r\n17.1.3 Component Specialization\r\n17.2 Asset Composition Paradigms\r\n17.2.1 Composability Scenarios\r\n17.2.2 Composability Media\r\n17.3 Issues in Integrating Components\r\n17.3.1 Component Issues\r\n17.3.2 Process Issues\r\n17.3.3 Quality Issues \r\n\r\nPART VI MANAGERIAL ASPECCTS OF SOFTWARE REUSE \r\n\r\n18 Software Reuse Metrics\r\n18.1 Software Engineering Metrics\r\n18.1.1 Attributes and Metrics\r\n18.1.2 Structural Metrics\r\n18.1.3 Functional Metrics\r\n18.1.4 Exercises\r\n18.2 Component Engineering Metrics\r\n18.2.1 Concept\r\n18.2.2 Content\r\n18.2.3 Context\r\n18.2.4 Exercises\r\n18.3 Application Engineering Metrics\r\n18.3.1 Project-Level Functions\r\n18.3.2 Exercises\r\n18.4 Domain Engineering Metrics\r\n18.4.1 Reuse Means:Software Library Metrics\r\n18.4.2 Exercises\r\n18.5 Organization Level Metrics\r\n18.5.1 Reuse Impacts:Productivity Gains\r\n18.5.2 Exercises\r\n18.6 Further Reading \r\n\r\n19 Software Reuse Cost Estimation\r\n\r\n19.1 Software Engineering Economics:COCOMO\r\n19.1.1 Basic COCOMO\r\n19.1.2 Intermediate COCOMO\r\n19.1.3 Detailed COCOMO\r\n19.1.4 Exercises\r\n19.2 Component Engineering Economics\r\n19.2.1 Development for Reuse\r\n19.2.2 Quality Gains\r\n19.2.3 Productivity Gains\r\n19.2.4 Time-to-Market Gains\r\n19.2.5 Exercises\r\n19.3 Application Engineering Economics\r\n19.3.1 Development with Reuse\r\n19.3.2 Productivity Gains\r\n19.3.3 Quality Gains\r\n19.3.4 Time-to-Market Gains\r\n19.3.5 Exercises\r\n19.4 Further Reading \r\n\r\n20 Software Reuse Return on Investment\r\n\r\n20.1 Modeling Investment Decisions\r\n20.1.1 Investment Cost Factors\r\n20.1.2 Economic Functions\r\n20.1.3 Exercises\r\n20.2 Software Reuse Investment Decisions\r\n20.2.1 Component Engineering Investment Cycle\r\n20.2.2 Application Engineering Investment Cycle\r\n20.2.3 Domain Engineering Investment Cycle\r\n20.2.4 Corporate Investment Cycle\r\n20.2.5 Exercises\r\n20.3 Further Reading \r\n\r\nPart VII Software Reuse Technologies \r\n\r\n21 Component-Based Software Engineering(CBSE)\r\n\r\n21.1 Components\r\n21.1.1 What Is a Component\r\n21.1.2 The Anatomy of a Component\r\n21.1.3 What Makes a Good Component\r\n21.2 Component Models\r\n21.2.1 What Is a Component Model\r\n21.2.2 Things that Component Models Should Address\r\n21.2.3 Example Component Models\r\n21.3 Component-Based System Development(CBSD)\r\n21.3.1 CBSD Process\r\n21.3.2 Component Granularity\r\n21.4 Issues in Developing with Components\r\n21.4.1 Technical Issues\r\n21.4.2 Business Issues\r\n21.5 Further Reading \r\n\r\n22 Product-Line Engineering(PLE)\r\n\r\n22.1 PLE and Software Reuse\r\n22.1.1 Exercises\r\n22.2 PLE Lifecycle\r\n22.2.1 Domian and Application Engineering Aspects\r\n22.2.2 Attributes of a PLE Lifecycle\r\n22.2.3 Success Factors\r\n22.2.4 Exercises\r\n22.3 Product-Line Architectures\r\n22.3.1 Software Architectures and Product-Line Architectures\r\n22.3.2 Conformance and Synchronization in PLAs\r\n22.3.3 Evaluating Architectures\r\n22.3.4 Exercises\r\n22.4 PLE Approaches\r\n22.4.1 The SYNTHESIS Approach\r\n22.4.2 The Product-Line Practice\r\n22.4.3 Product-Line Approaches\r\n22.5 Further Reading \r\n\r\n23 COTS Based Development\r\n\r\n23.1 Commercial Off the Shelf Software\r\n23.1.1 Definition and Background\r\n23.1.2 COTS and CBSD\r\n23.1.3 Exercises\r\n23.2 A Lifecycle for COTS Based Development\r\n23.2.1 COTS Selection\r\n23.2.2 COTS Integration\r\n23.2.3 Verification and Validation of COTS Based Systems\r\n23.2.4 Maintenance of COTS Based Systems\r\n23.2.5 Cost Estimation for COTS Development\r\n23.2.6 Exercises\r\n23.3 Developing COTS Certification Criteria\r\n23.3.1 Certification Categories\r\n23.3.2 COTS Certification Levels\r\n23.3.3 COTS Worthiness\r\n23.3.4 Domain Pervasiveness\r\n23.3.5 Architecture Conformance\r\n23.3.6 Application Adequacy\r\n23.4 Further Reading \r\n\r\nAPPENDIXES\r\n\r\nAppendix A Software Reuse Resources\r\n\r\nA.1 Texbooks\r\nA.2 Web Sites\r\nA.3 Conference Series\r\nA.4 Software Reuse Surveys\r\n\r\nAppendix B Term Projects\r\n\r\nB.1 Simulation of Waiting Queues\r\nB.1.1 Domain Engineering\r\nB.1.2 Application Engineering\r\nB.2 Library Systems\r\nB.2.1 Domain Engineering\r\nB.2.2 Application Engineering\r\n\r\nBibliography\r\n\r\nIndex\r\n
无封面