Page 218 -
P. 218
Chapter 7 Key points 201
component that was valid at the time the component was used. Licenses may
change so you need to know the conditions that you have agreed to.
2. Be aware of the different types of licenses and understand how a component is
licensed before it is used. You may decide to use a component in one system but
not in another because you plan to use these systems in different ways.
3. Be aware of evolution pathways for components. You need to know a bit about
the open source project where components are developed to understand how
they might change in future.
4. Educate people about open source. It’s not enough to have procedures in place
to ensure compliance with license conditions. You also need to educate develop-
ers about open source and open source licensing.
5. Have auditing systems in place. Developers, under tight deadlines, might be
tempted to break the terms of a license. If possible, you should have software in
place to detect and stop this.
6. Participate in the open source community. If you rely on open source products,
you should participate in the community and help support their development.
The business model of software is changing. It is becoming increasingly difficult
to build a business by selling specialized software systems. Many companies prefer
to make their software open source and then sell support and consultancy to software
users. This trend is likely to accelerate, with increasing use of open source software
and with more and more software available in this form.
KEY POINTS
Software design and implementation are interleaved activities. The level of detail in the design
depends on the type of system being developed and whether you are using a plan-driven or
agile approach.
The process of object-oriented design includes activities to design the system architecture,
identify objects in the system, describe the design using different object models, and document
the component interfaces.
A range of different models may be produced during an object-oriented design process. These
include static models (class models, generalization models, association models) and dynamic
models (sequence models, state machine models).
Component interfaces must be defined precisely so that other objects can use them. A UML
interface stereotype may be used to define interfaces.
When developing software, you should always consider the possibility of reusing existing
software, either as components, services, or complete systems.