Page 131 - DCAP305_PRINCIPLES_OF_SOFTWARE_ENGINEERING
P. 131

Unit 6: Functional Design



            features, should be discarded in the name of simplicity. Indeed, the more elegant designs are   Notes
            usually the more simple ones. Simple also does not mean “quick and dirty.” In fact, it often
            takes a lot of thought and work over multiple iterations to simplify. The payoff is software that
            is more maintainable and less error-prone.

            Maintain the Vision
            A clear vision is essential to the success of a software project. Without one, a project almost
            unfailingly ends up being “of two [or more] minds” about itself. Without conceptual integrity,
            a system threatens to become a patchwork of incompatible designs, held together by the wrong
            kind of screws. The most important consideration in system design, Stroustrup also notes: Having
            a clean internal structure is essential to constructing a system that is understandable, can be
            extended and reorganized, and is maintainable and testable. From which Brooch summarizes: It
            is only through having a clear sense of systems architecture that it becomes possible to discover
            common abstractions and mechanisms. Exploiting this commonality ultimately leads to systems
            that are simpler, and therefore smaller and more reliable. Compromising the architectural vision
            of a software system weakens and will eventually break even the most well designed systems.
            Having an empowered Architect who can hold the vision and enforce compliance helps ensure
            a very successful software project.

            What You Produce, Others Will Consume
            Seldom is an industrial-strength software system constructed and used in a vacuum. In some
            way or other, someone else will use, maintain, document, or otherwise depend on being able to
            understand your system. So, always specify, design, and implement knowing someone else will
            have to understand what you are doing. The audience for any product of software development
            is potentially large. Specify with an eye to the users. Design, keeping the implementers in mind.
            Code with concern for those that must maintain and extend the system. Someone may have to
            debug the code you write, and that makes them a user of your code. Making their job easier
            adds value to the system.
            The Fifth Principle: Be Open to the Future
            A system with a long lifetime has more value. In today’s computing environments, where
            specifications change on a moment’s notice and hardware platforms are obsolete when just a
            few months old, software lifetimes are typically measured in months instead of years. However,
            true “industrial-strength” software systems must endure far longer. To do this successfully, these
            systems must be ready to adapt to these and other changes. Systems that do this successfully
            are those that have been designed this way from the start. Never design yourself into a corner.
            Always ask “what if “, and prepare for all possible answers by creating systems that solve
            the general problem, not just the specific one. This could very possibly lead to the reuse of an
            entire system.

            Plan Ahead for Reuse
            Reuse saves time and effort. Achieving a high level of reuse is arguably the hardest goal
            to accomplish in developing a software system. The reuse of code and designs has been
            proclaimed as a major benefit of using object-oriented technologies. However, the return on this
            investment is not automatic. There are many techniques to realize reuse at every level of the
            system development process. Those at the detailed design and code level are well known and
            documented. New literature is addressing the reuse of design in the form of software patterns.
            However, this is just part of the battle. Communicating opportunities for reuse to others in the
            organization is paramount. How can you reuse something that you do not know exists? Planning
            ahead for reuse reduces the cost and increases the value of both the reusable components and
            the systems into which they are incorporated.
            Think!
            This last Principle is probably the most overlooked. Placing clear, complete thought before action
            almost always produces better results. When you think about something, you are more likely


                                             LOVELY PROFESSIONAL UNIVERSITY                                   125
   126   127   128   129   130   131   132   133   134   135   136