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.
(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