5
Summary
These six practices, and their adaptation to apply to the engineering of software
products, is the main focus of this book. Section 2 provides
the detailed definition
of these practices as they apply to software engineering. The titles of these practices
have been modified slightly to distinguish them from the systems engineering prac-
tices. This enables the same practices to be applied while acknowledging the differ-
ence in their application to solve a different design problem.
Summary
The chapters in this section provide a framework within which the software engi-
neering principles and practices are founded. The vocabulary used to present these
software engineering principles and practices has been carefully chosen to avoid con-
fusion. However, the language quagmire that exists in the software industry coupled
with potential conflicts in other engineering disciplines may impair the applicability
of the precise terms used to express these software engineering concepts. For the sake
of
comprehending this manuscript, accept the terms used within the book as a means of
expressing underlying philosophies. Once they have served their usefulness, the terms
themselves may be discarded and replaced with more pleasing words and expressions.
Software development should be conducted in a project context. This estab-
lishes a relationship between the technical endeavor to design, implement, and test
a software product, and management and control mechanisms intended to ensure
that
project expenditures, resources, and schedule milestones are satisfied. This
highlights the fact that all products must be designed to be manufactured and sup-
ported throughout their life cycle to achieve established cost and schedule objec-
tives. Terms like
design-to-cost
,
design-to-support
, and
life-cycle costs
denote that
a product has a perceived value, and the engineering of the product must ensure
that its value, as expressed in purchase price, operational costs, etc., is in line with
the benefits it offers its customers and stakeholders. Therefore,
architectural design
decisions must account for the impact a design solution bears on project resources,
as well as the customer or consumer.
Architectural decisions will ultimately have the most substantial impact on soft-
ware development costs, as well as the effectiveness of the product throughout its
life cycle. Software is easy to modify, thereby stakeholders believe that there are
low costs to adding new features, functionality, or improved user interface mecha-
nisms. Architectural decisions affect the structure of the software product that facil-
itates its ability to be modified, extended, and enhanced. Therefore,
it is essential to
understand what a software architecture looks like, how it is developed, and how it
is analyzed to facilitate shrewder design decisions. Architectural decisions establish
a structural framework for the software product that makes it resilient to elementary
changes. This resilience enables the software product to evolve during the software
development effort, as well as throughout its operational life cycle.
Furthermore, software engineering must embrace an integrated product and pro-
cess (IPPD) philosophy. IPPD development addresses the consideration of software