Saturday, June 16, 2012

Chapter 4. Software Design

Loading
Software Design Process
Design is a meaningful engineering representation of something that is to be built. It can be traced to a customer’s requirements and at the same time assessed for quality. In the software engineering context, design focuses on four major areas of concern: data, architecture, interfaces, and components.
Good design is the key to effective engineering. Design is a creative process requiring insight and flair on the part of the designer. It must be practical and learnt by experience and study of existing systems. The design process is a sequence of steps that enable the designer to describe all aspects of the software to be built.
Software designers do not arrive at a finished design graph immediately but develop the design iteratively through a number of different versions. The starting point is an informal design which is refined by adding information to make it consistent and complete.
Any design problem must be tackled in three stages:
(i) Study and understand the problem Without this understanding, effective software design is impossible. The problem should be examined from a number of different angles or viewpoints as these provide different insights into the design requirements.
(ii) Identify gross features of at least one possible solution It is often useful to identify a number of solutions and to evaluate them all. The choice of solution depends on the designer's experience, the availability of reusable components, and the simplicity of the derived solutions. Designers usually prefer familiar solutions even if these are not optimal, as they understand their advantages and disadvantages.
(iii) Describe each abstraction used in the solution Before creating formal documentation, the designer may write an informal design description. This may be analysed by developing it in detail. Errors and omissions in the high-level design will probably discover during this analysis. These are corrected before the design is documented.

User Interface Design
Computer system design encompasses a spectrum of activities from hardware design to user interface design. Electronic engineers have always been responsible for hardware design. However, few organizations employ specialist interface designers. Software engineers must often take responsibility for user interface design as well as the design of the software to implement that interface.
If information is presented in a confusing or misleading way, the user may misunderstand the meaning of an item of information.
The Graphical User Interface (GUI) is easier and good then the Character User Interface (CUI) or text-based interface. The advantages of GUIs are:
(i) They are relatively easy to learn and use. Users with no computing experience can learn to use the interface after a brief training session.
(ii) The user has multiple screens (windows) for system interaction. Switching from one task to another is possible without losing sight of information generated during the first task.
(iii) Fast, full-screen interaction is possible with immediate access to anywhere on the screen.


Software Design Principles
User interface design must take into account the needs, experience and capabilities of the system user. Potential users should be involved in the design process. Designers must take into account the physical and mental limitations of the humans who use computer systems. Users should not force to adapt to an interface because it is convenient to implement. The interface should use terms familiar to the user and the objects manipulated by the system should have direct analogues in the user's environment.
Basic software design principles are:
(i) User Familiarity - The interface should use terms and concepts which are drawn from the experience of the anticipated class of user.
(ii) Consistency - The interface should be consistent in that comparable operations should be activated in the same way. Interface consistency means that system commands and menus should have the same format, parameters should be passed to all commands in the same way, and command punctuation should be familiar. Consistent interfaces reduce user learning time. Knowledge learnt in one command or application is applicable in other parts of the system.
(iii) Minimal Surprise - Users should never be surprised by the behaviour of a system.
(iv) Recoverability -  The interface should include mechanisms to allow users to recover from their errors.
(v) User Guidance - The interface should incorporate some form of context-sensitive user guidance and assistance.


Design with Reuse
Software design reuse involves reusing existing components rather than developing them especially for an application. Systematic reuse can improve reliability, reduce management risk and reduce development costs.
Software development with reuse is an approach to development which tries to maximize the reuse of existing software components. An obvious advantage of this approach is that overall development costs should be reduced.
Systematic reuse in the development process offers further advantages:
(1)   System reliability is increased Reused components, which have been exercised in working systems, should be more reliable than new components. These components have been tested in operational systems and have therefore been exposed to realistic operating conditions.
(2)   Overall process risk is reduced If a component exists; there is less uncertainty in the costs of reusing that component than in the costs of development.
(3)   Effective use can be made of specialists Instead of application specialists doing the same work on different projects; these specialists can develop reusable components which encapsulate their knowledge.
(4)   Organizational standards can be embodied in reusable components Some standards, such as user interface standards, can be implemented as a set of standard components. For example, reusable components may be developed to implement menus in a user interface. All applications present the same menu formats to users. The use of standard user interfaces improves reliability as users are less likely to make mistakes when presented with a familiar interface.
(5)   Software development time can be reduced Bringing a system to market as early as possible is often more important than overall development costs. Reusing components speeds up system production because both development and validation time should be reduced.


Architectural Design
Architectural design represents the structure of data and program components that are required to build a computer-based system.
Large systems can be decomposed into sub-systems that provide some related set of services. The initial design process of identifying these sub-systems and establishing a framework for sub-system control and communication is called architectural design.
The output of the architectural design process is an architectural design document. This consists of a number of graphical representations of the system models along with associated descriptive text. It should describe how the system is structured into sub-systems.
Architectural design may be based on a particular architectural model or style. An awareness of these models, their applications, strengths and weaknesses is important.
The first phase of the architectural design activity is usually concerned with decomposing a system into a set of interacting sub-systems. At its most abstract level, an architectural design may be depicted as a block diagram in which each box represents a sub-system. Boxes within boxes indicate that the sub-system has itself been decomposed to sub-systems. Arrows mean that data and/or control is passed from sub-system to sub-system in the direction of the arrows.


Client-Server Model
The client-server architectural model is one of the standard architectural models. It is a distributed system model which shows how data and processing is distributed across a range of processors. The major components of this model are:
(1)   A set of stand-alone servers which offer services to other sub-systems. Examples of servers are print servers which offer printing services, file servers which offer file management services and a compile server which offers language translation services.
(2)    A set of clients that call on the services offered by servers. These are normally sub-systems in their own right. There may be several instances of a client program executing concurrently.
(3)   A network which allows the clients to access these services. In principle, this is not really necessary as both the clients and the servers could run on a single machine

Clients must know the names of the available servers and the services that they provide. However, servers need not know either the identity of clients or how many clients there are. Clients access the services provided by a server through remote procedure calls.

The most important advantage of the client-server model is that distribution is straightforward. Effective use can be made of networked systems with many distributed processors. It is easy to add a new server and integrate it gradually with the rest of the system or to upgrade servers transparently without affecting other parts of the system.

No comments:

Post a Comment