Page 194 -
P. 194

Chapter 7   Design and implementation  177


                                       Software design and implementation is the stage in the software engineering process
                                       at which an executable software system is developed. For some simple systems, soft-
                                       ware design and implementation is software engineering, and all other activities are
                                       merged with this process. However, for large systems, software design and imple-
                                       mentation is only one of a set of processes (requirements engineering, verification
                                       and validation, etc.) involved in software engineering.
                                         Software  design  and  implementation  activities  are  invariably  interleaved.
                                       Software design is a creative activity in which you identify software components and
                                       their relationships, based on a customer’s requirements. Implementation is the
                                       process of realizing the design as a program. Sometimes, there is a separate design
                                       stage and this design is modeled and documented. At other times, a design is in the
                                       programmer’s head or roughly sketched on a whiteboard or sheets of paper. Design
                                       is about how to solve a problem, so there is always a design process. However, it
                                       isn’t always necessary or appropriate to describe the design in detail using the UML
                                       or other design description language.
                                         Design and implementation are closely linked and you should normally take
                                       implementation issues into account when developing a design. For example, using
                                       the UML to document a design may be the right thing to do if you are programming
                                       in an object-oriented language such as Java or C#. It is less useful, I think, if you are
                                       developing in a dynamically typed language like Python and makes no sense at all if
                                       you are implementing your system by configuring an off-the-shelf package. As I dis-
                                       cussed in Chapter 3, agile methods usually work from informal sketches of the
                                       design and leave many design decisions to programmers.
                                         One of the most important implementation decisions that has to be made at an
                                       early stage of a software project is whether or not you should buy or build the appli-
                                       cation software. In a wide range of domains, it is now possible to buy off-the-shelf
                                       systems (COTS) that can be adapted and tailored to the users’ requirements. For
                                       example, if you want to implement a medical records system, you can buy a package
                                       that is already used in hospitals. It can be cheaper and faster to use this approach
                                       rather than developing a system in a conventional programming language.
                                         When you develop an application in this way, the design process becomes con-
                                       cerned with how to use the configuration features of that system to deliver the sys-
                                       tem requirements. You don’t usually develop design models of the system, such as
                                       models of the system objects and their interactions. I discuss this COTS-based
                                       approach to development in Chapter 16.
                                         I assume that most readers of this book will have had experience of program
                                       design and implementation. This is something that you acquire as you learn to pro-
                                       gram and master the elements of a programming language like Java or Python. You
                                       will have probably learned about good programming practice in the programming
                                       languages that you have studied, as well as how to debug programs that you have
                                       developed. Therefore, I don’t cover programming topics here. Instead, this chapter
                                       has two aims:

                                       1.  To show how system modeling and architectural design (covered in Chapters 5
                                          and 6) are put into practice in developing an object-oriented software design.
   189   190   191   192   193   194   195   196   197   198   199