Uh-oh, it looks like your Internet Explorer is out of date.

For a better shopping experience, please upgrade now.

Trustworthy Systems Through Quantitative Software Engineering / Edition 1

Trustworthy Systems Through Quantitative Software Engineering / Edition 1

5.0 2
by Lawrence Bernstein, C. M. Yuhas

ISBN-10: 0471696919

ISBN-13: 9780471696919

Pub. Date: 10/05/2005

Publisher: Wiley

A benchmark text on software development and quantitative software engineering

"We all trust software. All too frequently, this trust is misplaced. Larry Bernstein has created and applied quantitative techniques to develop trustworthy software systems. He and C. M. Yuhas have organized this quantitative experience into a book of great value to make software


A benchmark text on software development and quantitative software engineering

"We all trust software. All too frequently, this trust is misplaced. Larry Bernstein has created and applied quantitative techniques to develop trustworthy software systems. He and C. M. Yuhas have organized this quantitative experience into a book of great value to make software trustworthy for all of us."
-Barry Boehm

Trustworthy Systems Through Quantitative Software Engineering proposes a novel, reliability-driven software engineering approach, and discusses human factors in software engineering and how these affect team dynamics. This practical approach gives software engineering students and professionals a solid foundation in problem analysis, allowing them to meet customers' changing needs by tailoring their projects to meet specific challenges, and complete projects on schedule and within budget.

Specifically, it helps developers identify customer requirements, develop software designs, manage a software development team, and evaluate software products to customer specifications. Students learn "magic numbers of software engineering," rules of thumb that show how to simplify architecture, design, and implementation.

Case histories and exercises clearly present successful software engineers' experiences and illustrate potential problems, results, and trade-offs. Also featuring an accompanying Web site with additional and related material, Trustworthy Systems Through Quantitative Software Engineering is a hands-on, project-oriented resource for upper-level software and computer science students, engineers, professional developers, managers, and professionals involved in software engineering projects.

An Instructor's Manual presenting detailed solutions to all the problems in the book is available from the Wiley editorial department.

An Instructor Support FTP site is also available.

Product Details

Publication date:
Quantitative Software Engineering Series , #1
Product dimensions:
6.30(w) x 9.50(h) x 1.05(d)

Table of Contents




1. Think Like an Engineer—Especially for Software.

1.1 Making a Judgment.

1.2 The Software Engineer's Responsibilities.

1.3 Ethics.

1.4 Software Development Processes.

1.5 Choosing a Process.

1.5.1 No-Method "Code and Fix" Approach.

1.5.2 Waterfall Method.

1.5.3 Spiral Method: Planned Risk Assessment-Driven Process.

1.5.4 Development Plan Approach.

1.5.5 Planned Incremental Development Process.

1.5.6 Agile Process, a Apparent Oxymoron.

1.6 Re-emergence of Model-Based Software Development.

1.7 Process Evolution.

1.8 Organization Structure.

1.9 Principles of Sound Organizations.

1.10 Short Projects-4 to 6 Weeks.

1.10.1 Project 1: Automating Library Overdue Book Notices.

1.10.2 Project 2: Ajax Transporters, Inc. Maintenance Project.

1.11 Problems.

2. People, Process, Product, Project-The Big Four.

2.1 People: Cultivate the Guru and Support the Majority.

2.1.1   How to Recognize a Guru.

2.1.2 How to Attract a Guru to Your Project.

2.1.3 How to Keep Your Gurus Working.

2.1.4 How to Support the Majority.

2.2 Product: "Buy Me!".

2.2.1 Reliable Software Products.

2.2.2 Useful Software Products.

2.2.3 Good User Experience.

2.3.Process: "OK, How Will We Build This?".

2.3.1 Agile Processes.

2.3.2 Object Oriented Opportunities.

2.3.3 Meaningful Metrics.

2.4 Project: Making It Work.

2.5 Problems.

2.6 Case Studies.


3. Software Requirements.

3.1 What Can Go Wrong With Requirements.

3.2 The Formal Processes.

3.3 Robust Requirements.

3.4 Requirements Synthesis.

3.5 Requirements Specification.

3.6 Quantitative Software Engineering Gates.

3.7 SQFD Technology.

3.8 ICED-T Metrics.

3.8.1 ICED-T Insights.

3.8.2 Using the ICED-T Model.

3.9 Development Sizing and Scheduling with Function Points.

3.9.1 Function Point Analysis Experience.

3.9.2 NCSLOC vs Function Points.

3.9.3 Computing Simplified Function Points (sFP).

3.10 Case Study: The Case of the No-Show Service.

3.11 Problems.

4. Prototyping.

4.1 Make It Work; Then Make It Work Right.

4.1.1 How to Get at the Governing Requirements.

4.1.2 Rapid Application Prototype.

4.1.3 What's Soft is Hard.

4.2 So What Happens Monday Morning?.

4.2.1 What Needs to Be Prototyped?.

4.2.2 How Do You Build a Prototype?.

4.2.3 How Is the Prototype Used?.

4.2.4 What Happens to the Prototype?.

4.3 It Works, But Will It Continue to Work?.

4.4 Case Study: The Case of the Driven Development.

4.4.1 Significant Results.

4.4.2 Lessons Learned.

4.4.3 Additional Business Histories.

4.5 Why is Prototyping So Important?.

4.6 Prototyping Deficiencies.

4.7 Iterative Prototyping.

4.8 Case Study: The Case of the Famished Fish.

4.9 Problems.

5. Architecture.

5.1 Architecture Is a System's DNA.

5.2 Pity the Poor System Administrator.

5.3 Software Architecture Experience.

5.4 Process and Model.

5.5 Components.

5.5.1 Components as COTS.

5.5.2 Encapsulation and Abstraction.

5.5.3 Ready or Not, Objects Are Here.

5.6 UNIX.

5.7 TL1.

5.7.1 Mission.

5.7.2 Comparative Analysis.

5.7.3 Message Formatting.

5.7.4 TL1 Message Formulation.

5.7.5 Industry Support of TL1.

5.8 Documenting the Architecture.

5.8.1 Diary or Log Document.

5.8.2 Debriefing Document.

5.8.3 Users of Architecture Documentation.

5.9 Architecture Reviews.

5.10 Middleware.

5.11 How Many Times Before We Learn?.

5.11.1 Comair Cancels 1,100 Flights on Christmas 2004.

5.11.2 Air Traffic Shutdown in September 2004.

5.11.3 NASA Misses Mars, 2004.

5.11.4 Case Study: The Case of the Preempted Priorities.

5.12 Financial Systems Architecture.

5.12.1 Typical Business Processes.

5.12.2 Product-Related Layer in the Architecture.

5.12.3 Finding Simple Components.

5.13 Design and Architectural Process.

5.14 Problems.

6. Estimation, Planning and Investment.

6.1 Software Size Estimation.

6.1.1 Pitfalls and Pratfalls.

6.1.2 Software Size Metrics.

6.2 Function Points.

6.2.1 Fundamentals of Function Point Analysis.

6.2.2 Brief History.

6.2.3 Objectives of Function Point Analysis.

6.2.4 Characteristics of Quality Function Point Analysis.

6.3 Five Major Elements of Function Point Counting.

6.3.1 External Input (EI).

6.3.2 External Output (EO).

6.3.3 External Inquiry EQ).

6.3.4 Internal Logical File (ILF).

6.3.5 External Interface Files (EIF).

6.4 Each Element Can Be Simple, Average or Complex.

6.5 Sizing an Automation Project with FPA.

6.5.1 Advantages of Function Point Measurement.

6.5.2 Disadvantages of Function Point Measurement.

6.5.3 Results Common to FPA.

6.5.4 FPA Accuracy.

6.6 SLOC Metric.

6.6.1 Company Statistics.

6.6.2 Reuse.

6.6.3 Wide Band Delphi.

6.6.4 Disadvantages of SLOC.

6.7 Production Planning.

6.7.1 Productivity.

6.7.2 Mediating Culture.

6.7.3 Customer Relations.

6.7.4 Centralized Support Functions.

6.8 Investment.

6.8.1 Cost Estimation Models.

6.8.2 COCOMO.

6.8.3 Scheduling Tools-PERT, Gantt.

6.8.4 Project Manager's Job.

6.9 Problems.

7. Design for Trustworthiness.

7.1 Built-in Trustworthiness.

7.2 Software Reliability Overview.

7.3 Design Reviews.

7.3.1 Topics for the Design Review.

7.3.2 Case Study.

7.3.3 Interfaces.

7.3.4 Software Structure Influences Reliability.

7.3.5 Components.

7.3.6 Open & Closed Principle.

7.3.7 The Liskov Substitution Principle.

7.3.8 Comparing Object Oriented Programming with Componentry.

7.3.9 Politics of Reuse. Qualified Successes. Conditions Fostering Reuse. Reuse "As Is".

7.4 Design Principles.

7.4.1 Strong Cohesion.

7.4.2 Weak Coupling.

7.4.3 Information Hiding.

7.4.4 Inheritance.

7.4.5 Generalization/Abstraction.

7.4.6 Separation of Concerns.

7.4.7 Removal of Context.

7.5 Documentation.

7.6 Design Constraints That Make Software Trustworthy.

7.6.1 Simplify the Design.

7.6.2 Software Fault Tolerance.

7.6.3 Software Rejuvenation.

7.6.4 Hire Good People and Keep Them.

7.6.5 Limit the Language Features Used.

7.6.6 Limit Module Size and Initialize Memory.

7.6.7 Check the Design Stability.

7.6.8 Bound the Execution Domain.

7.6.9 Have Performance Budgets and Engineer.

7.6.10 Reduce Algorithm Complexity.

7.6.11 Factor and Refactor.

7.7 Problems.


8. Identifying and Managing Risk.

8.1 Undesirable Events.

8.2 Risk Management Paradigm.

8.3 Functions of Risk Management.

8.4 Risk Analysis.

8.5 Calculating Risk.

8.6 Using Risk Assessment in Project Development: The Spiral Method.

8.7 Containing Risks.

8.7.1 Incomplete and Fuzzy Requirements.

8.7.2 Schedule Too Short.

8.7.3 Not Enough Staff.

8.7.4 Morale of Key Staff Is Poor.

8.7.5 Stakeholders Are Losing Interest.

8.7.6 Untrustworthy Design.

8.7.7 Feature Set Is Not Economically Viable.

8.7.8 Feature Set Is Too Large.

8.7.9 Technology Is Immature.

8.7.10 Late Planned Deliveries of Hardware and Operating System.

8.8 Manage the Cost Risk to Avoid Outsourcing.

8.8.1 Technology Selection.

8.8.2 Tools.

8.8.3 Software Manufacturing.

8.8.4 Integration, Reliability and Stress Testing.

8.8.5 Computer Facilities.

8.8.6 Human Interaction Design and Documentation.

8.9 Software Project Management Audits.

8.10 Running an Audit.

8.11 Risks with Risk Management.

8.12 Problems.

9. Human Factors in Software Engineering.

9.1 A Click in the Right Direction.

9.2 Managing Things, Managing People.

9.2.1 Knowledge Workers.

9.2.2 Collaborative Management.

9.3 FAA Rationale for Human Factors Design.

9.4 Reach Out and Touch Something.

9.5 System Effectiveness in Human Factors Terms.

9.5.1 What to Look for in COTS.

9.5.2 Simple Guidelines for Managing Development.

9.6 How Much Should the System Do?.

9.6.1 Screen Icon Design.

9.6.2 Short- and Long-Term Memory.

9.7 Emerging Technology.

9.8 Pleasing the Client by Pleasing the Developers.

9.9 The Bell Laboratories Philosophy.

9.10 So You Want to Be a Manager.

9.11 Problems.

10. Implementation Details.

10.1   Structured Programming.

10.2   Rational Unified Process and Unified Modeling Language.

10.3   Measuring Complexity.

10.4   Coding Styles.

10.4.1 Data Structures.

10.4.2 Team Coding.

10.4.3 Code Reading.

10.4.4 Code Review.

10.4.5 Code Inspections.

10.5   A Must Read for Trustworth Software Engineers.

10.6   Coding for Parallelism.

10.7   Threats.

10.8   Open Source Software.

10.9   Problems.

11. Testing, Manufacturing and Configuration Management.

11.1 The Price of Quality.

11.1.1 Unit Testing.

11.1.2 Integration Testing.

11.1.3 System Testing.

11.1.4 Reliability Testing.

11.1.5 Stress Testing.

11.2 Robust Testing.

11.2.1 Robust Design.

11.2.2 Prototypes.

11.2.3 Identify Expected Results.

11.2.4 Orthogonal Array Test Sets (OATS).

11.3 Testing Techniques.

11.3.1 One-Factor-at-a-Time.

11.3.2 Exhaustive.

11.3.3 Deductive Analytical Method.

11.3.4 Random/Intuitive Method.

11.3.5 Orthogonal Array-Based.

11.3.6 Defect Analysis.

11.4 Case Study: Web Time Charging System (TCS).

11.5 Cooperative Testing.

11.6 Graphic Footprint.

11.7 Testing Strategy.

11.7.1 Test Incrementally.

11.7.2 Test Under No Load.

11.7.3 Test Under Medium Load.

11.7.4 Test Under Heavy Load.

11.7.5 Test Under Overload.

11.7.6 Test the Error Recovery Code.

11.7.7 Diabolic Testing.

11.7.8 Reliability Tests.

11.7.9 Footprint.


11.7.11 Regression.

11.8 Software Hot Spots.

11.9 Software Manufacturing Defined.

11.10 Configuration Management.

11.11 Outsourcing.

11.11.1 Test Modules.

11.11.2 Faster Iteration.

11.11.3 Meaningful Test Process Metrics.

11.12 Problems.

12. The Final Project: By Students, For Students.

12.1 How to Make the Course Work for You.

12.2 Sample Call for Projects.

12.3 A Real Student Project.

12.4 The Rest of the Story.

12.5 Our Hope.


Customer Reviews

Average Review:

Post to your social network


Most Helpful Customer Reviews

See all customer reviews

Trustworthy Systems Through Quantitative Software Engineering 5 out of 5 based on 0 ratings. 2 reviews.
Guest More than 1 year ago
This book is about to deliver trustworthy systems through quantitative software engineering methodologies, which is unfortunately rare to be implemented well in the real world. I believe Professor Bernstein has placed 'trust' as the foremost aspect of this book is a landmark decision and it precisely describes the ultimate goal of software development--to make a system that is trusted by customers. As far as I can tell, all aspects and concerns in software development have been covered and provided with solutions and even real-life examples. The concepts of simplification, trustworthiness, risk assessment, and architecture are stressed. It is fun to read. Each aspect is clearly stated with background, objectives and how to achieve or avoid it. This book is well illustrated with graphs, charts and examples. Quantitative aspects are always easy to be mentioned but hard to be understood and implemented. Following this book, either developers or managers can analyze the project methodically throughout the full life-cycle of the software development to help to improve the system and project performance, especially, as emphasized in this book, at the planning and designing phase. This book is as well designed as it is well written. If there is anything that I think the author missed a bit, it would be the 'Magic Numbers', which is a writing trick for making important things stand out, by giving it a 'name' and putting it in a box. This is effective but when the quantity of 'Magic Numbers' gets accumulated, it makes it hard to find the ones that reader needs. However, this is only a minor issue. This book is written as a textbook. It is well suited for senior design semesters, as being used at Stevens Institute of Technology, for computer major students to gain experiences with teamwork skills, learn to tradeoff and communicate with other team members, learn to face conflicts and search for solutions. Most importantly, learn to find the good software engineering practice for their own project through quantitative analysis, which is provided in this book. It is also good for experienced software professionals and managers who's trying to understand software engineering technologies. I would very much recommend this book to everyone who is interested in Software Engineering.
Guest More than 1 year ago
This book is a must read for every professional having responsibility for some aspect of a software development project. It presents the tools and techniques necessary to develop software systems on time and within budget, using quantitative, well-defined techniques. These quantitative techniques are clearly described in the text. The information and insight that the authors ¿Magic Numbers¿ give us is worth the price of the book! ¿Magic Numbers¿ are rules of thumb (developed from analysis of many past software projects) that give numerical insight to many phases of the software development project. An additional important element is the discussion of ethical behavior in a variety of situations. The case studies presented serve as real life examples of the pressures and problems that can plague a software project. The several projects discussed with which I have first hand knowledge are perceptively and accurately portrayed. The writing is clear, to the point and engaging. This is the book I wish I had at the beginning of my career in software development. I feel it belongs in the library of all software professionals and students alike. I love this book!