
How to Engineer Software
Description
Alles über E-Books | Antworten auf Fragen rund um E-Books, Kopierschutz und Dateiformate finden Sie in unserem Info- & Hilfebereich.
How to Engineer Software is a practical, how-to guide that explores the concepts and techniques of model-based software engineering using the Unified Modeling Language. The author--a noted expert on the topic--demonstrates how software can be developed and maintained under a true engineering discipline. He describes the relevant software engineering practices that are grounded in Computer Science and Discrete Mathematics.
Model-based software engineering uses semantic modeling to reveal as many precise requirements as possible. This approach separates business complexities from technology complexities, and gives developers the most freedom in finding optimal designs and code. The book promotes development scalability through domain partitioning and subdomain partitioning. It also explores software documentation that specifically and intentionally adds value for development and maintenance. This important book:
* Contains many illustrative examples of model-based software engineering, from semantic model all the way to executable code
* Explains how to derive verification (acceptance) test cases from a semantic model
* Describes project estimation, along with alternative software development and maintenance processes
* Shows how to develop and maintain cost-effective software that solves real-world problems
Written for graduate and undergraduate students in software engineering and professionals in the field, How to Engineer Software offers an introduction to applying the theory of computing with practice and judgment in order to economically develop and maintain software.
More details
Other editions
Additional editions

Person
STEVE TOCKEY is Principal Consultant at Construx. Steve is an expert in software engineering practices including object-oriented development, distributed object computing, software project management, and software quality. He earned a Masters of Software Engineering degree from Seattle University and has served as an adjunct faculty member for the program. Prior to joining Construx, Tockey worked at Lawrence Livermore National Laboratory, Boeing, and Rockwell Collins.
Content
Foreword xi
Preface xvii
Acknowledgments xxv
Online Resources xxvii
Part I Introduction and Foundations 1
1 Introduction 3
2 The Nature of Code 39
3 Fundamental Principles 67
4 Functional and Nonfunctional Requirements 91
5 UML Overview 115
6 Partitioning Systems into Domains 125
Part II Semantic Modeling: Model-based Functional Requirements 151
7 Use Case Diagrams: Scope and Context 153
8 Class Models: Policies to Enforce 183
9 Interaction Diagrams: Process at a Mid-Level 237
10 State Models: Process at a Fine-Grained Level 261
11 Partitioning Domains into Subdomains 305
12 Wrapping Up Semantic Modeling 323
Part III Model-based Design and Code 369
13 Introduction to Design and Code 371
14 Designing Interfaces: Specifying Real-World Interaction 379
15 High-Level Design: Classes and Operations 407
16 High-Level Design: Contracts and Signatures 447
17 Detailed Design and Code 503
18 Formal Disciplines of Design and Code 539
19 Optimization 583
20 Model Compilation 633
21 Advanced Open Model Compilation 675
22 Wrapping Up Model-Based Design and Code 705
Part IV Related Topics 723
23 Estimation 725
24 Development and Maintenance Processes 759
25 Economics of Error Handling 787
26 Arguments Against Model-Based Software Engineering 815
Part V Summary 827
27 Closing Remarks 829
Part VI Appendices 843
Appendix A: Documentation Principles 845
Appendix B: WebBooks 2.0 Background 849
Appendix C: WebBooks 2.0 Domains 853
Appendix D: Semantic Model for Order fulfillment 857
Appendix E: (Pro Forma) Order fulfillment Design 885
Appendix F: Semantic Model for Payment 905
Appendix G: (Pro Forma) Payment Design 927
Appendix H: Semantic Model for Scalability 943
Appendix I: (Pro Forma) Scalability Design 969
Appendix J: Semantic Model for High availability 985
Appendix K: (Pro Forma) High availability Design 1001
Appendix L: Semantics of Semantic Modeling 1011
Appendix M: Sample Production Rules 1049
Appendix N: Software Structural Complexity Metrics 1061
References 1081
Index 1091
Foreword
Meilir Page-Jones
People often ask me:
"Would you say that software development is more an art or a science?"
I reply,
"Neither. It's a branch of the fashion industry."
Every couple of years the software industry is gripped by one hot fad or another. We've had "structured stuff," "relational stuff," "agile stuff," "RAD stuff," "Kanban stuff," "DevOps stuff," "cloud stuff," and so on. Each fad attracts its fanatical adherents, as well as its outraged opponents. Then, after a few years of heated passion, the fires die down on that particular fad. It becomes "old hat" and the fad's remaining adherents are called dinosaurs. (How's that for a mixed metaphor?) Then it's time to move on to the next craze.
I'm not saying that these fads are bad or useless. Most are effective in the right contexts. The problem is sociological. Software can never become a true engineering discipline if techniques are hailed as game changing at one time and decried as antiquated the next-for no reason other than that the fashion changed.
So it is with modeling. For the most part, software modeling arrived during the 1970s. It included (loosely speaking) approaches such as data flow diagrams, control flow diagrams, entity-relationship diagrams, state-transition diagrams, and code-structure diagrams. These diagrams were made more robust by standardized textual definitions of their components. Some were aimed at the elicitation of software requirements, and others more at the sound construction of code.
This was a healthy trend for a field that was supposedly seeking to become an engineering discipline. After all, other engineering disciplines (such as civil, mechanical, industrial, and electrical engineering) depend on diagrams of components with their relationships and specifications.
When software modeling arrived, three things happened. The first was that people found it intellectually more difficult than the code-and-fix approach. The second (stemming from the first) was that many people gave up before they mastered it. The third was that-in shops that persevered with modeling-software productivity, quality, and manageability all increased markedly-in other words, a mixed landscape where some made great advances through modeling . and unfortunately others did not.
It didn't help that in the 1970s software modeling was an experimental craft, which only a few dedicated early adopters could take to its full potential. It was immature and lacked solid standards and support tools. But the situation gradually improved so that by the mid-1980s software modeling was mature enough to be called mainstream.
Well, sort of. There was indeed a deeper understanding of modeling techniques, more conferences and seminars about it, further standardization, and some tool support. But there were still enough gaps to keep modeling from being universal in the software industry. Nevertheless, I naively thought that the progress would continue: modeling would remain mainstream and become more widely adopted, more sophisticated, and better supported by automated tools. The trend was certainly in that direction.
But I'd reckoned without the Forces of Fashion. By the 1990s, and definitely into the 2000s, software modeling had been dubbed "antiquated and only for the Triassic reptiles of the 1980s." More than once I heard comments such as:
"That modeling crap is just for structured stuff. We're an object-oriented shop."
It was into this world of the 1990s that the Unified Modeling Language (UML) entered. UML synthesized some of the modeling approaches of the 1970s and 1980s, along with object-oriented constructs and a couple of techniques from electrical engineering. UML both standardized modeling notation and embraced object-oriented concepts. Though not perfect, UML was a major step forward and also ushered in a new generation of robust and sophisticated modeling tools.
It was ironic timing. The fashion pendulum was already swinging against modeling. In the 2000s the agile movement pushed the pendulum further against modeling by-perhaps deliberately, perhaps inadvertently-decrying documentation, which apparently included models. (I have more to say about that below.)
Currently, we're in the bizarre situation where, in what should be a golden age for software modeling with stable notation and mature tools, fewer software engineers by proportion are practicing modeling than in the 1980s. Software modeling is in danger of becoming lost knowledge.
The previous paragraph makes a mockery of the term "software engineering." Do you know any serious branch of real engineering that does not use rigorous "talking" models of whatever they plan to build? ("Talking model" is my term for a predictive model-one that can answer within acceptable tolerance qualitative or quantitative questions about the subject to be built and maintained. For example, "What overall load and local pressure can this new bridge support?")
At this point, enters Steve Tockey. Because software modeling is probably now at its most retrograde phase, it's poised to swing back into favor. So Steve's book on software engineering comes at just the right time to give modeling a hefty shove in the right direction.
Steve, whom I've known for over 30 years, is also just the right person to write this book. He's an adept programmer and a remarkable teacher. More germanely, he's about the best modeler of the business world and of software systems that I know. And, to top it all, he's a fan of Bert Weedon.1
This book represents the confluence of all Steve's talents. He brings to bear his teaching ability, as well as his vast experience on all kinds of systems: large and small, embedded and business, noncritical and safety-critical. Some of that experience was as a programmer. Some was as an analyst. Most of it was as a modeler.
I have voluntarily and happily flown in planes whose test software was developed from models that Steve produced. I can't think of anyone better placed than Steve to write a comprehensive book on software modeling.
But why should you bother to read this book? Didn't I just say that software modeling is out of fashion? Maybe so, but from your perspective, that's not the point. If you're a true engineer, fashion doesn't matter. When I first learned modeling as a developer, the quality and quantity of my code took an immediate jump for the better. That's a very typical experience, by the way. I adopted this motto:
"I'm a software engineer. I don't need anyone else's permission to do modeling. I don't even care whether it's fashionable or not. It works."
This is even more true today: half a day's salary can buy you your own state-of-the-art (not a toy) software modeling tool. You really don't need anyone else's permission. So I expect that software modeling will swing back into fashion before long. Quietly, some of the top companies are already doing it-for several good reasons.
Modeling promotes better communication among teams well before code is written. After the code has been written is a bit late! Software modeling also embodies true engineering tenets. You'll find a lot of them in this book, but let me just call out one in particular, which is probably the best-kept secret in software engineering: domain separation (Chapter 6). Here's an illustration of what it means.
On the desk in front of me is a lamp with domain separation. Without that separation, in order to change the bulb, I'd need to unsolder the wires from the old bulb and resolder them on to the new bulb. But the domain of transporting electricity to my desk (including wires) is cleanly separated from the domain that turns electricity into light (the bulb). The screw-in socket is the well-defined bridge between the two domains.
That's just a small illustration; Steve will take you more deeply into how it applies to software. Without domain separation in software, code gets "soldered together" in ugly ways that degrade portability, optimization, debugging, and even team organization. In fact, modeling itself becomes difficult.
OK, domain separation is not very useful for tiny systems. But it's vital for the medium and large systems that most of us encounter now in commerce, industry, science, and the military. I know of several large-system efforts that produced unmaintainable code or collapsed altogether because they'd failed to appreciate domain separation.
I won't take any more space in this foreword to promote arguments for modeling-or the arguments against not modeling-because Steve himself makes those arguments so well in this book. But I'd better mention the "A" word again or you'll think I'm not agile enough for prime time. (You think I'm not Agile? Oh, the shame of it!)
A powerful myth has arisen that if you do any modeling at all then you're not agile. But it is just a myth. In fact, modeling is highly compatible with Agile. I've been on four significant agile projects. One was very successful, two turned out reasonably well, and...
System requirements
File format: ePUB
Copy protection: Adobe-DRM (Digital Rights Management)
System requirements:
- Computer (Windows; MacOS X; Linux): Install the free reader Adobe Digital Editions prior to download (see eBook Help).
- Tablet/smartphone (Android; iOS): Install the free app Adobe Digital Editions or the app PocketBook before downloading (see eBook Help).
- E-reader: Bookeen, Kobo, Pocketbook, Sony, Tolino and many more (not Kindle).
The file format ePub works well for novels and non-fiction books – i.e., „flowing” text without complex layout. On an e-reader or smartphone, line and page breaks automatically adjust to fit the small displays.
This eBook uses Adobe-DRM, a „hard” copy protection. If the necessary requirements are not met, unfortunately you will not be able to open the eBook. You will therefore need to prepare your reading hardware before downloading.
Please note: We strongly recommend that you authorise using your personal Adobe ID after installation of any reading software.
For more information, see our ebook Help page.