Sunteți pe pagina 1din 11

Software: Its nature and qualities

Engineering activity is to build something – an artifact or a product. Civil engineer


build a bridge, a mechanical engineer builds a machine, an aerospace engineer
builds an airplane and software engineers build software systems

Software is malleable and therefore people believe that it is easily modifiable.


But in practice it cannot be changed so easily. Any change in the software
should be viewed as a change in design rather than change in coding

• Software engineering (SE) is an intellectual activity and thus human-intensive


• Software is built to meet a certain functional goal and satisfy certain qualities
• Software processes also must meet certain qualities

Software product

• Different from traditional types of products


• Intangible - difficult to describe and evaluate
• malleable
• human intensive - involves only trivial “manufacturing”
processes

Classification of software qualities "ilities"

• External versus internal qualities


External qualities visible to users
Internal qualities concern developers

Users of software care about external qualities. The internal qualities, which
deals with the structure of software, help developers achieve external qualities.

• Product vs. process, our goal is to develop software products - The


process is how we do it

• Internal qualities affect external qualities


• Process quality affects product quality

The customer visible products like executables and user manual are termed as
end products. But the developers produce a number of intermediate products like
requirements, design, test data etc. These intermediate products can be called
as work products
Representative qualities.

Correctness, reliability and robustness


These collectively characterize quality which implies that the application performs
its functions as expected.

Correctness

• Software is correct if it satisfies the functional requirements


specifications assuming that specification exists!
• Correctness is a mathematical property that establishes equivalence
between the software and its specifications
• Correctness can be enhanced by using appropriate tools, standard
proven algorithm or libraries of standard modules and also by using
proven methodologies

The limits of correctness

• It is an absolute (yes/no) quality - there is no concept of “degree


of correctness” - there is no concept of severity of deviation

• What if specifications are wrong? - (e.g., they derive from


incorrect requirements or errors in domain knowledge)

Reliability

• informally, software is reliable if user can rely on it


• can be defined mathematically as “probability of absence of failures for a
certain time period” – statistical behavior
• if specs are correct, all correct software is reliable, but not vice-versa (in
practice, however, specs can be incorrect …)

In classic engineering products, products are released to the market after defects
are fully removed and tested. If these products fail in the market, it creates
headlines. But software products are commonly released with a list of bugs.
This is one of the symptoms of the immaturity of the software engineering field as
an engineering discipline.
Ideal situation

The figure illustrates the relationship between reliability and correctness. This is
under the assumption that the functional requirements specification captures all
desirable properties of the application and that no undesirable properties are
erroneously specified in it.

Figure shows that a set of all reliable program include set of correct programs,
but not vice versa

Robustness

A program is robust if it behaves “reasonably” even in unforeseen


circumstances (e.g., incorrect input, hardware failure)

The amount of code devoted for robustness depends on the application.


Robustness and correctness are strongly related without a sharp dividing line
between them. The boarder line between the two qualities is the specification of
the system.

The terms correctness, robustness and reliability can also be used to the
software production processes.
• A process is robust if it can accommodate unanticipated changes in the
environment
• A process is reliable if it consistently lead to high quality software products

Performance

Performance is often equated to efficiency, but both are not the same. Efficiency
is an internal quality and refers to how economically the software utilizes the
computer resources. Performance on the other hand is an external quality based
on user requirements

Performance is important as it effects usability and the productivity of the user. If


the software requires large disc space it is expensive to run. If it requires large
memory to run, the other applications are effected.

Reliabilit
Performance is also important because it effects the scalability of a
software system. A software which is resource hungry, may work
slower and slower when number of concurrent users use the system

There are several ways to evaluate the performance of software


systems e.g. :
• Analyze complexity of algorithms used in the system
• Measure the performance by means of hardware and software
monitors that collect data while the system is running
• Build a model of the system and analyze it
• Build a model that simulates the system

In some projects the performance issues are addressed after the initial
release of the software. But sometimes it requires redesign of software
to improve performance. However a prototype approach shall be
desirable if performance is to be judged before complete development
of software to select design choices.

The notion of performance also applies to development processes. This


is called productivity. Productivity is important to be treated as an
independent quality

Usability

A software system is usable or user-friendly if its users find it easy to use. .But
the term itself is subjective. It depends upon the type of users. The properties
that makes the system user-friendly for a novice user is different from that of an
expert user. Similarly a non-programmer user may use menus for running a
system whereas a programmer would prefer typing commands rather than
navigating through various menus

User interface is important to decide the user-friendliness of a system and the


same is designed keeping in mind the nature of users who would use the system.
But for those systems where there is no human interface like some embedded
systems, the user-friendliness is reflected in the ease of configuring the same
with hardware

Correctness and performance affect user-friendliness as, a software which gives


wrong answers is not user-friendly. Similarly, a software which is running very
slow is also not user-friendly

Ease of use in many engineering discipline is achieved by standardization of user


interfaces. There is trend in software application to add more uniform and
standard user interfaces like what we see in web browsers

Verifiability

A software system is verifiable if its properties can be verified easily. For


example, it is important to verify the correctness and performance of a software
system. Verification can be done through formal or informal methods and also
through testing. Software monitors are used commonly to verify the correctness
and performance of the software systems. Modular design, disciplined coding
practices and use of appropriate programming languages contribute to software
verifiability

Maintainability

Maintainability of a software system is related to the ease of its maintenance


after the first release. Unlike other engineering products, there is no wear and
tear for software products. The term maintenance is used for the activities done
on software either to correct the bugs or to improve the features or to update the
system incorporating additional features: The nature of maintenance done on
software can be classified into:
1. Corrective – for rectifying bugs – amounts 20% of maintenance costs
2. Adaptive – for adjusting the software due to change in environment – amounts
20% of the maintenance cost
3. Perfective – enhancement for improving some of the qualities – amounts 50%
of the maintenance cost

Legacy systems are the existing systems in an organization written in old


languages and consists of great amount of knowledge and data built into it over
a period of time. These systems have great value to the organizations. Legacy
systems are difficult to modify and maintain. Re-engineering and reverse
engineering techniques are used to uncover the structure of such legacy systems
for the reconstruction of the same

Maintainability can be viewed as two separate qualities – reparability and


evolvability. The distinction between reparability and evolvability is not always
very clear. For example if the requirements specifications are vague, it may not
be clear whether we are rectifying a defect or fulfilling a new requirements

Reparability

Reparability of software system is the ease of rectifying defects within reasonable


time. Replacement of standard parts and modules are the easiest way of
repairing most of the engineering products of low value. Since software does not
wear out, the use of standard program components and module help designer to
improve productivity in creating software products rather than rectifying defects.
However use of standard components will improve maintainability. Reparability
can be improved by the use of proper tools like high level languages for
programming. Tools such as debuggers can help in isolating and correcting
errors.

A product’s reparability affects it reliability.. On the other hand the need for
reparability decrease as the reliability increases
Evolvability

Software products are modified over time to add new functions or to modify the
existing functions. Since software is malleable, modifications can be done easily.
This is similar to other engineering products where enhancements or additions
are made after care feasibility study and design change. Such an organized
approach is missing commonly in the case of software systems. Even in radical
changes in application, people miss the feasibility study and design analysis.
Modification in implementation is done straight away even without properly
documenting the changes. Lack of such documentation makes further changes
difficult.

On the other hand, software system live long if modifications are done gracefully
after conducting feasibility study and design changes. The design of software
must facilitate evolvability as each release of a particular software system is a
step in the evolution of the system.

As the cost of software production and complexity increases, evolvability


becomes more and more important. As the hardware technology is fast
changing, the applications need to be modified to suit the new hardware
platforms. So the evolvability of system over a long period of time is essential for
incorporating rich function to run on latest hardware operating systems and
databases

Most software systems start out evolvable, but by introducing several


modifications, the system becomes saturated and further modifications on it
become risky and the existing functions may tend to break.

Therefore while designing and developing keep ease of evolvability in mind as it


has far reaching economic impact

Reusability

Reusability is similar to evolvability. Software systems are modified to release its


next version. In such cases, many of the components of earlier version are used
in the subsequent version as it is or with modifications. Reusability is more
applicable to software components rather than the whole product.
.
UNIX shell is a good example of reusable product. The command language
interpreter of UNIX accepts commands and executes either interactively or in
batches. Here we can write program in shell command language and execute
them as per requirement. This enables us building powerful utilities.

Another example is building of libraries for usage in application development.


User interfaces, standard routines etc can be built and maintained centrally so
that these reusable components can be used by any number of software
engineers working on a project.

Reusability applies to software processes as well. Various software


methodologies can be viewed as attempts to reuse the same process for
building multiple products.

Portability

Portability of software is its ability to run on different environment. The


environment can be hardware, operating systems, databases and interfaces.
Portability is economically important as the investment on systems can be
amortized across various environments and generations of these environments.
Many applications are portable across several hardware platforms as the
operating system of each hardware provides the portability.

Portability has assumed great importance with the proliferation of networked


systems as the applications have to run on much variety of computers and
operating systems. For example the internet browsers have to run not only on
desktops and laptops, but also on palm tops and even on mobile phones.

Understandability

Given task of inherently similar difficulty, guidelines can be followed to produce


more understandable design and to write more understandable programs. For
example abstraction and modularity enhances understandability. Software
maintenance is dominated by the sub activity of program understanding.
Software engineers spend a lot of time in understanding the logic and function in
the program and spend much less time in applying changes to programs

Understandability is an internal product quality and it helps in achieving many


other qualities such as evolvability and verifiability. From the external point of
view, user considers a system understandable if it has predictable behavior.
External understandability is factor in a product’s usability.

Interoperability

Interoperability refers to the ability of a system to coexist and cooperate with


other systems. With interoperability, a vendor can produce different products and
allow user to combine them if necessary. It makes easier for the vendor to
produce products and it gives the user the freedom deciding what function to pay
for and combine. Interoperability can be achieved through standardization of
interfaces.

An example of such interoperability is the web browser application that provide


plug-in interfaces for different applications. For example a new audio player
provided by one vendor can be added to the browser provided by another
vendor.

The open system which is becoming popular now, allow different applications
written by different organizations to interoperate

Typical process qualities

Productivity

Productivity is a quality of software production process referring to efficiency and


performance. An efficient process results in faster delivery of the products. The
software engineers individually have different rates of outputs. The management
organizes the team members and the processes in such a manner to capitalize
individual productivity of the members

Software reuse is a technique adopted for improving productivity of an


organization for producing a collection of products. But the cost of producing
reusable components can be amortized over large number products

As the productivity becomes more important due to the cost of producing


software, we need metric to measure the productivity and for that matter all
qualities to have the hope of comparing different processes for their productivity.
Modern software tools improve the productivity

Timeliness

Timeliness is a process related quality that refers to the delivery of a software


product on time. Timeliness requires careful scheduling, accurate estimation
and clearly specified and verifiable milestones. Due to abstract nature of
software and inherent difficulties in defining requirements, it is difficult to apply
the project management techniques used in other engineering discipline to
software. These difficulties in turn lead to the problem in measuring the amount
of work required for a given piece of software - problems in measuring
productivity of engineers or even having a dependable metric for productivity –
problems in defining verifiable milestones

Software timeliness shortfall


Often the development process does not follow the evolution of user
F u n c tio n
requirements
A mismatch occurs between U user
s e r requirements and status of the product
Timeliness: a visual description
n e e d s of the mismatch
A c tu a l
s y s te m
c a p a b ilitie s

t2 t T im e
t0 t1 3 t4
Visibility

A software development process is visible if all its steps and the current status
are documented. Another term used to characterize this property is transparency.
The idea is that the steps and the status of the project are available and easily
accessible for external examination.

Visibility allows the engineers to realize the impact of their actions and thus
guides them in making decisions. It allows all team members to work in the
same direction and achieve the common goal with full transparency.

Visibility is not an internal quality, it is also external. During the course of long
project development, request may come from project manager, organization
management, customers or any other party involved in the project to conduct
formal or informal presentation to know the exact status of project. Such a
presentation may not be possible if the visibility is poor. Visibility also helps the
new members of the project team to be quick to get familiar with the project
status.

Quality requirements in different application areas

Information systems

Information systems constitute one of the largest areas computers and involves
storage and retrieval of data. Information systems are data oriented and can be
characterized on the basis of the way they treat data. The following are some of
the qualities that characterize information systems:

• Data integrity
• Data Security
• Data availability
• Transaction performance.

These systems need to interact with the end users and therefore should possess
the following human- computer interface requirements:
• User-friendliness
• Menu based graphic interfaces
• Uniform design of menu and easy navigation
• Guard the application from being misused



Simple customization facilities
Simple report generation facilities
• End user computing

Real time systems

Real time systems are another large class of software systems. A factory
monitoring system for- say temperature control or an air plane software to control
the flight path depending upon the whether condition - are examples of real time
system. The simplest possible example is a mouse handing system in a
computer system that needs to respond to mouse click.

Distributed systems

Advances in processors and network technology have made it possible to build


so called distributed systems which consists of independent or semi independent
computers connected by a communication network. The high bandwidth, low
error rate network makes it possible to write distributed software applications
whose components run on different machines

The ability of components to be loaded and executed on different machines has


driven to the development of new languages such as java and C#. For example
java defines an intermediate language ( the java bitecode) that can be efficiently
interpreted on any computer of the distributed system. This allows the
components to be loaded from the network dynamically as needed.

Distributed system offer new opportunities for achieving some of the software
qualities. for example by replicating data on more than one computer we can
increase the system reliability and by distributing , we can increase the
performance and reliability of the system. Another interesting issue is whether
we can take advantage of technology that supports code mobility. - that is the
ability of code to migrate over the network during runtime. Java applets are a
simple example of mobile code

Embedded systems

Embedded software are systems in which the software is one of the many
components and have no user interface to end users: rather the software has
interfaces with other system components and probably controls them.
Embedded software is used in airplane, robots, microwave ovens, dish washers,
refrigerators, automobiles, cellular phones and other appliances. What
distinguishes embedded software from other kinds of software is that interface of
embedded software is with other devices rather than human

In practice

Although the above four areas of software are distinct, in practice many systems
exhibit characteristic that are common to several of these areas.

A hospital patient monitoring system is a good example of a system that may


exhibit multiple characteristics. It must maintain a database of patients history.
It can be a distributed system to enter and retrieve data from nurse’s station and
laboratories. It may have some real time characteristic for example to monitor
devices in the emergency room. Finally it may have some requirements of
embedded systems, because it may interact with laboratory devices in order to
update patients record automatically on the basis of test results.

Measurement of quality

Software qualities need to be measured. This activity is called quality assurance.


Although some qualities like performance can be measured easily, most of the
qualities have no universally accepted metrics. A lot of research is going on to
decide the metrics for measurement of software qualities

S-ar putea să vă placă și