Sunday, 18 September 2011

SOFTWARE

In 1970, less than 1 percent of the public could have intelligently described what
"computer software" meant. Today, most professionals and many members of the
public at large feel that they understand software. But do they?
A textbook description of software might take the following form: Software is (1)
instructions (computer programs) that when executed provide desired function and per-
formance,  (2) data structures that enable the programs to adequately manipulate infor-
mation, and (3) documents that describe the operation and use of the programs. There
is no question that other, more complete definitions could be offered. But we need
more than a formal definition.
1.2.1 Software Characteristics
To gain an understanding of software (and ultimately an understanding of software
engineering), it is important to examine the characteristics of software that make it
different from other things that human beings build. When hardware is built, the
human creative process (analysis, design, construction, testing) is ultimately trans-
lated into a physical form. If we build a new computer, our initial sketches, formal
design drawings, and breadboarded prototype evolve into a physical product (chips,
circuit boards, power supplies, etc.).
Software is a logical rather than a physical system element. Therefore, software
has characteristics that are considerably different than those of hardware:
1. Software is developed or engineered, it is not manufactured in the classical
sense.
Although some similarities exist between software development and hardware man-
ufacture, the two activities are fundamentally different. In both activities, high qual-
ity is achieved through good design, but the manufacturing phase for hardware can
introduce quality problems that are nonexistent (or easily corrected) for software.
Both activities are dependent on people, but the relationship between people applied
and work accomplished is entirely different (see Chapter 7). Both activities require
the construction of a "product" but the approaches are different.
Software costs are concentrated in engineering. This means that software proj-
ects cannot be managed as if they were manufacturing projects.
2. Software doesn't "wear out."
Figure 1.1 depicts failure rate as a function of time for hardware. The relationship,
often called the "bathtub curve," indicates that hardware exhibits relatively high fail-
ure rates early in its life (these failures are often attributable to design or manufac-
turing defects); defects  are corrected and the failure rate drops to a steady-state level
(ideally, quite low) for some period of time. As time passes, however, the failure rate
rises again as hardware components suffer from the cumulative affects of dust, vibra-
tion, abuse, temperature extremes, and many other environmental maladies. Stated
simply, the hardware begins to wear out.
Software is not susceptible to the environmental maladies that cause hardware to
wear out. In theory, therefore, the failure rate curve for software should take the form of
the “idealized curve” shown in Figure 1.2. Undiscovered defects will cause high failure
rates early in the life of a program. However, these are corrected (ideally, without intro-
ducing other errors) and the curve flattens as shown.The idealized curve is a gross over-
simplification of actual failure models (see Chapter 8 for more information) for software.
However, the implication is clear—software doesn't wear out. But it does deteriorate!
This seeming contradiction can best be explained by considering the “actual curve”
shown in Figure 1.2. During its life, software will undergo change (maintenance). As
changes are made, it is likely that some new defects will be introduced, causing the
failure rate curve to spike as shown in Figure 1.2. Before the curve can return to the
original steady-state failure rate, another change is requested, causing the curve to
spike again. Slowly, the minimum failure rate level begins to rise—the software is
deteriorating due to change.
Another aspect of wear illustrates the difference between hardware and software.
When a hardware component wears out, it is replaced by a spare part. There are no
software spare parts. Every software failure indicates an error in design or in the
process through which design was translated into machine executable code. There-
fore, software maintenance involves considerably more complexity than hardware
maintenance.
3. Although the industry is moving toward component-based assembly, most
software continues to be custom built.
Consider the manner in which the control hardware for a computer-based product
is designed and built. The design engineer draws a simple schematic of the digital
circuitry, does some fundamental analysis to assure that proper function will be
achieved, and then goes to the shelf where catalogs of digital components exist. Each
integrated circuit (called an IC or a chip) has a part number, a defined and validated
function, a well-defined interface, and a standard set of integration guidelines. After
each component is selected, it can be ordered off the shelf.
As an engineering discipline evolves, a collection of standard design components
is created. Standard screws and off-the-shelf integrated circuits are only two of thou-
sands of standard components that are used by mechanical and electrical engineers
as they design new systems. The reusable components have been created so that the
engineer can concentrate on the truly innovative elements of a design, that is, the
parts of the design that represent something new. In the hardware world, component
reuse is a natural part of the engineering process. In the software world, it is some-
thing that has only begun to be achieved on a broad scale.
A software component should be designed and implemented so that it can be
reused in many different programs. In the 1960s, we built scientific subroutine libraries
that were reusable in a broad array of engineering and scientific applications. These
subroutine libraries reused well-defined algorithms in an effective manner but had a
limited domain of application. Today, we have extended our view of reuse to encom-
pass not only algorithms but also data structure. Modern reusable components encap-
sulate both data and the processing applied to the data, enabling the software engineer
to create new applications from reusable parts. For example, today's graphical user
interfaces are built using reusable components that enable the creation of graphics
windows, pull-down menus, and a wide variety of interaction mechanisms. The data
structure and processing detail required to build the interface are contained with a
library of reusable components for interface construction.
1.2.2 Software Applications
Software may be applied in any situation for which a prespecified set of procedural
steps (i.e., an algorithm) has been defined (notable exceptions to this rule are expert
system software and neural network software). Information content and determinacy
are important factors in determining the nature of a software application. Content
refers to the meaning and form of incoming and outgoing information. For example,
many business applications use highly structured input data (a database) and pro-
duce formatted “reports.”  Software that controls an automated machine (e.g., a
numerical control) accepts discrete data items with limited structure and produces
individual machine commands in rapid succession.
Information determinacy refers to the predictability of the order and timing of infor-
mation. An engineering analysis program accepts data that have a predefined order,
executes the analysis algorithm(s) without interruption, and produces resultant data
in report or graphical format.  Such applications are determinate. A multiuser oper-
ating system, on the other hand, accepts inputs that have varied content and arbi-
trary timing, executes algorithms that can be interrupted by external conditions, and
produces output that varies as a function of environment and time.  Applications with
these characteristics are indeterminate.
It is somewhat difficult to develop meaningful generic categories for software appli-
cations.  As software complexity grows, neat compartmentalization disappears.  The
following software areas indicate the breadth of potential applications: 
System software. System software is a collection of programs written to service
other programs.  Some system software (e.g., compilers, editors, and file manage-
ment utilities) process complex, but determinate, information structures.  Other sys-
tems applications (e.g., operating system components, drivers, telecommunications
processors) process largely indeterminate data.  In either case, the system software
area is characterized by heavy interaction with computer hardware; heavy usage by
multiple users; concurrent operation that requires scheduling, resource sharing, and
sophisticated process management; complex data structures; and multiple external
interfaces.
Real-time software. Software that monitors/analyzes/controls real-world events
as they occur is called real time. Elements of real-time software include a data gath-
ering component that collects and formats information from an external environ-
ment, an analysis component that transforms information as required by the
application, a control/output component that responds to the external environment,
and a monitoring component that coordinates all other components so that real-time
response (typically ranging from 1 millisecond to 1 second) can be maintained.
Business software.  Business information processing is the largest single software
application area. Discrete "systems" (e.g., payroll, accounts receivable/payable, inven-
tory) have evolved into management information system (MIS) software that accesses
one or more large databases containing business information.  Applications in this
area restructure existing data in a way that facilitates business operations or man-
agement decision making. In addition to conventional data processing application,
business software applications also encompass interactive computing (e.g., point-
of-sale transaction processing).
Engineering and scientific software. Engineering and scientific software have
been characterized by "number crunching" algorithms. Applications range from astron-
omy to volcanology, from automotive stress analysis to space shuttle orbital dynam-
ics, and from molecular biology to automated manufacturing.  However, modern
applications within the engineering/scientific area are moving away from conven-
tional numerical algorithms.  Computer-aided design, system simulation, and other
interactive applications have begun to take on real-time and even system software
characteristics.
Embedded software. Intelligent products have become commonplace in nearly
every consumer and industrial market. Embedded software resides in read-only mem-
ory and is used to control products and systems for the consumer and industrial mar-
kets. Embedded software can perform very limited and esoteric functions (e.g., keypad
control for a microwave oven) or provide significant function and control capability
(e.g., digital functions in an automobile such as fuel control, dashboard displays, and
braking systems).
Personal computer software. The personal computer software market has bur-
geoned over the past two decades. Word processing, spreadsheets, computer graph-
ics, multimedia, entertainment, database management, personal and business financial
applications, external network, and database access are only a few of hundreds of
applications.
Web-based software. The Web pages retrieved by a browser are software that
incorporates executable instructions (e.g., CGI, HTML, Perl, or Java), and data (e.g.,
hypertext and a variety of visual and audio formats). In essence, the network becomes
a massive computer providing an almost unlimited software resource that can be
accessed by anyone with a modem.
Artificial intelligence software.  Artificial intelligence (AI) software makes use
of nonnumerical algorithms to solve complex problems that are not amenable to
computation or straightforward analysis. Expert systems, also called knowledge-
based systems, pattern recognition (image and voice), artificial neural networks,
theorem proving, and game playing are representative of applications within this
category.


No comments:

Post a Comment