Unit - 1: What Is Software?
Unit - 1: What Is Software?
What is software?
Software is set of instruction to acquire inputs and to manipulate them to produce the desired output in
terms of function and performance as determined by the user of the software. Today’s software comprises
the source code, executables, design documents, operations and system manuals and installation and
implementation manuals.
The software is:-
1. Computer programs and associated documentation
2. Software products may be developed for a particular customer or may be developed for a general
market
3. Softwares are software system delivered to customer with the documentation that describes how to
install and use the system.
4. Instruction (computer program) that when executed provide desired function and performance.
5. Data structures that enable the programs to adequately manipulate information.
Importance of software
It affects nearly every aspect of our lives and has become pervasive in our
commerce, our culture, and our everyday activities. Computer software has
become a driving force.
It is engine that drives business decision –making.
It serves as the basis for modern scientific investigation and
engineering problem solving.
It is embedded in all kinds of system like transportation, medical,
telecommunications, military, industrial process , entertainment ,office
product etc.
System Software:- This software includes operating system and all utilities that enable
the computer to function.
Application Software:- These consists of programs that do real work for users .
For example:- word processers, spread sheets, and database management
systems fall under the category of application software.
Software
Classes of software
Software is classified into the following two classes:
1. Generic Software
2. Customized Software
Generic Software:- Generic software is designed for a broad customer
market whose requirement are very common ,fairly stable and well understood by
the software engineer .These products are sold in the open market , and there could
be several competitive products in the market .
For Example:-the database products, browser, ERP/CRM and CAD/CAM
packages, operating system software.
• Customized software:- Customized products are those that are develop for a customer
where domain , environment and requirements being unique to that customer cannot be
satisfied by generic products. Developed for a single customer according to their
specification
Software Characteristics
Time
Failure curve for hardware
The failure rate as a function of time for hardware as shown in ‘bath tub’ curve but the software is not
suscepectible to the environmental melodies that cause hardware to wear out, so the failure rate curve for
software should take the form of the ‘idealized curve’. Another aspect of wear illustrates the difference
between h/w and s/w when an h/w component is wear out, it is replaced by spare part, and there are no
spare parts in software.
Every software failures indicate an error in design or in the process through which design was translated
into machine executable code. So software maintenance involves considerably more complexity than h/w
maintenance.
Although the industry is moving toward component-based assembly, most software continues to
be custom built.
Software is flexible.
We all feel that software is flexible. A program can develop to do almost anything .sometimes
.this characteristics may be the best and may help us to accommodate any kind of change. Reuse
of components from the libraries help in reduction of effort. Now days, we reuse not only
algorithm but also data structures.
Reliability
Improvement
Predictability
Maintainability
Effectiveness
Software Application
Software may be applied in any situation for which a pre –specified set of procedural steps has been
defined .It is somewhat difficult to develop meaningful generic catagories for software applications.
The following software areas indicate the breadth of potential applications:
1. System Software
2. Real time software
3. Business software
4. Embedded software
5. Personal computer software
6. Web based software
7. Artificial intelligence software
8. Engineering and scientific software
1) system software:- it is a collection of programs written to service
other programs. Some system software process complex, but
determinate, information structures.
Example: - compilers, editors and file management utilities.
The system software area is characterized by heavy interaction with computer hardware, heavy uses by
multiple users, concurrent operation that requires scheduling, resources sharing and process management.
2) Real time software:- software that monitor analyze and control real
world events as they occur is called real time. Elements of real time
software include a data –gathering components that collects and
formats information from an external environment.
3) Business software:- Business information processing is the largest
ssingle software application area . In addition to conventional data
processing application business software applications also encompass
interactive computing.
4) Embedded software:- It resides in read only memory and is used to
control products and systems for the consumer and industrial markets.
5) Personal computer software:- the personal computer software
market has burgeoned over the past two decades .word processing
,spreadsheets, computer graphics, multimedia and business financial
applications.
6) Web based software:- The web page retrieved by a browser are
software that incorporates instruction(i.e.:- CGI, HTML) and data.
7) Artificial intelligent software:- It makes use of non-numerical
algorithm to solve complex problem that are not amenable or
straightforward analysis.
8) Engineering and scientific software:- It has been characterized by
number crunching algorithm. Computer aided design; system
simulation and other interactive application have begun to take on real
time and even system software characteristics.
Software Problems
Software is expensive: - over the past decades, with the advancement and technology,
the cost of hardware has been consistently decreased, but the cost of software is increased
.The main reason for high cost of software is that software development is still labor –
intensive. Delivered lines of code (DLOC) is by far the most commonly used measure of
software size in the industry.
100
hardware
80
60
Percentage
Of Cost
40
Software development
20
Software Maintenance
Late , costly and unreliable:-There are many instances quoted about software
projects that are behind schedule and have heavy cost over runs.The software
industry has gained reputations of not been able to deliver on time and within
budgets.
For example: US Airforce Command and Control Software Projects.
Initial estimate given by the winning contractor was $4lakh subsequently.The
cost was renegotiated as $7lakh to $25lakh and finally $32lakh.The final
completion cost was almost 10 times the original estimate.
Problem of change and rework:-The software is delivered and deployed. it
enters the maintenance phase. Software needs to be maintained not because some
of its components wear out and need to be replaced, but because there need to be
replaced, but because there are often some residual errors remaining in the system
that must be removed as they were discovered.
Software costs
1. Software costs often dominate system costs. The costs of software on a PC are often
greater than the hardware cost
2. Software costs more to maintain than it does to develop. For systems with a long life,
maintenance costs may be several times development costs
3. Software engineering is concerned with cost-effective software development
The various factors, which influence the software, are termed as software factors. They can be
broadly divided into two categories. The classification is done on the basis of measurability. The
first category of the factors is of those that can be measured directly such as number of logical
errors and the second category clubs those factors which can be measured only indirectly for
example maintainability but the each of the factors are to be measured to check for the content
and the quality control. Few factors of quality are available and they are mentioned below.
Correctness - extent to which a program satisfies its specification and fulfills the client's
objective.
Reliability - extent to which a program is supposed to perform its function with the
required precision.
Integrity - extent to which access to software and data is denied to unauthorized users.
Usability- labor required to understand, operate, prepare input and interpret output of a
program
Portability- effort required to run the program from one platform to other or to different
hardware.
Reusability- extent to which the program or it’s parts can be used as building blocks or
as prototypes for other programs.
Now as you consider the above-mentioned factors it becomes very obvious that the measurements
of all of them to some discrete value are quite an impossible task. Therefore, another method was
evolved to measure out the quality. A set of matrices is defined and is used to develop expressions
for each of the factors as per the following expression
Fq = C1*M1 + C2*M2 + …………….Cn*Mn
where Fq is the software quality factor, Cn are regression coefficients and Mn is metrics that
influences the quality factor. Metrics used in this arrangement is mentioned below.
Expandability- degree to which one can extend architectural, data and procedural
design.
Hardware independence- degree to which the software is de-coupled from its operating
hardware.
Instrumentation- degree to which the program monitors its own operation and identifies
errors that do occur.
Security- control and protection of programs and database from the unauthorized users.
There are various ‘checklists’ for software quality. One of them was given by Hewlett-Packard
that has been given the acronym FURPS – for Functionality, Usability, Reliability, Performance
and Supportability.
Functionality is measured via the evaluation of the feature set and the program capabilities, the
generality of the functions that are derived and the overall security of the system.
Considering human factors, overall aesthetics, consistency and documentation assesses usability.
Reliability is figured out by evaluating the frequency and severity of failure, the accuracy of
output results, the mean time between failures (MTBF), the ability to recover from failure and the
predictability of the program.
Performance is measured by measuring processing speed, response time, resource consumption,
throughput and efficiency. Supportability combines the ability to extend the program,
adaptability, serviceability or in other terms maintainability and also testability, compatibility,
configurability and the ease with which a system can be installed.
Software Myths
Software myths propagated myth information and confusion. They had a
number of attributes that made them insidious; for instance they appeared to be
regional facts. There are basically three myths such as:
Management Myths
Customer Myths
Practitioner’s Myths
By today’s definition, a "large" software system is a system that contains more than
50,000 lines of high-level language code. It’s those large systems that bring the software
crisis to light. If you’re familiar with large software development projects, you know that
the work is done in teams consisting of project managers, requirements analysts, software
engineers, documentation experts, and programmers. With so many professionals
collaborating in an organized manner on a project, what’s the problem? Why is it that the
team produces fewer than 10 lines of code per day over the average lifetime of the
project? And why are sixty errors found per every thousand lines of code? Why is one of
every three large projects scrapped before ever being completed? And why is only 1 in 8
finished software projects considered "successful?"
But wait–there’s more!
The cost of owning and maintaining software in the 1980’s was twice as
expensive as developing the software.
During the 1990’s, the cost of ownership and maintenance increased by 30% over
the 1980’s.
Three quarters of all large software products delivered to the customer are failures
that are either not used at all, or do not meet the customer’s requirements.
Software projects are notoriously behind schedule and over budget. Over the last twenty
years many different paradigms have been created in attempt to make software
development more predictable and controllable. While there is no single solution to the
crisis, much has been learned that can directly benefit today's software projects. It
appears that the Software Crisis can be boiled down to two basic sources:
Software development is seen as a craft, rather than an engineering discipline.
Software engineering
1. Software engineering is an engineering discipline which is concerned with all aspects of software
production
2. Software engineers should adopt a systematic and organised approach to their work and use
appropriate tools and techniques depending on the problem to be solved, the development
constraints and the resources available.
3. Software engineering is the practical application of scientific knowledge in the
design and construction of computer programs and the associated
documentation required to develop, operate and maintain them.
4. Software engineering is the branch of computer science that creates practical,
cost-effective solutions to computing and information processing problems,
preferentially by applying scientific knowledge, developing software systems in
the service of mankind.
5. Software Engineering is a discipline concerned with the practical problems of
developing large-scale software systems. Software engineers are the architects of
the software components of a computer-based system, providing several levels of
representations or blueprints leading to specifications through which programmers
build the subsystems and modules of the systems. Software development
methodologies and management techniques combine with theories from
mathematics and computer science in a cost-effective manner to solve real-world
system development problems.
6. Software is everywhere and affects every facet of our life. Unfortunately, there is
a gap between the “state of the art” and the “state of the practice” of Software
engineering. Consequently, the software design, development and integration are
often plagued by schedule delays, cost overruns, defects and performance
problems.
7. Software engineering is the application of a systematic, disciplined, quantifiable
approach to the development, operation, and maintenance of software and the
study of these approaches; that is, the application of engineering to software.
8. Software Engineering is an approach to developing software that attempts to treat
it as a formal process more like traditional engineering than the craft that many
programmers believe it is. We talk of crafting an application, refining and
polishing it, as if it were a wooden sculpture, not a series of logic instructions.
The problem here is that you cannot engineer art. Programming falls somewhere
between an art and a science.
9. Software engineering (SE) is concerned with developing and maintaining
software systems that behave reliably and efficiently, are affordable to develop
and maintain, and satisfy all the requirements that customers have defined for
them. It is important because of the impact of large, expensive software systems
and the role of software in safety-critical applications. It integrates significant
mathematics, computer science and practices whose origins are in engineering.
10. The term Software Engineering encompasses a set of methods, techniques and
tools used in the production of an application beyond the primary activity of
programming.
Goals of software engineering
1. Maintainability
2. Dependability
3. Efficiency
4. Usability
5. Integrity
6. Portability
7. Reusability
8. Testability
9. Interoperability
10. Availability
1>Maintainability:-
However good the programmer, things will still go wrong with the software.
Requirements often change between versions. In any case, we may want to reuse
elements of the software in other products. None of this is made any easier if, when a
problem is discovered, everybody stands around scratching their heads saying "Oh dear,
the person that wrote this left the company last week" or worse, "Does anybody know
who wrote this code?" One of the goals of a good process is to expose the designers' and
programmers' thought processes in such a way that their intention is clear. Then we can
quickly and easily find and remedy faults or work out where to make changes.
2> Dependability:-
Software dependability has a range of characteristics, including reliability, security, and
safety. Dependability software should not cause physical and economic damage in the
event of system damage.
3> Efficiency:-
Software should not make wasteful use of system resources such as memory and
processor cycles. Efficiency includes responsiveness, processing time, memory
utilization, etc.
4> Usability:-
The ease of use and of training the end users of the system .Sub qualities: learn ability
.efficiency, affect, helpfulness, control. labor required to understand, operate, prepare
input and interpret output of a program.
5>Integrity:-Extent to which access to software and data is denied to unauthorized users.
6>Portability: - Effort required running the program from one platform to other or to
different hardware.
7>Reusability: - Extent to which the program or it’s parts can be used as building blocks
or as prototypes for other programs.
8>Testability- Effort required to test the programs for their functionality.
9>Interoperability- Effort required to couple one system to another.
10>Availability:-The measure of time that the system is up and running correctly; the
length of time between failures and the length of time needed to resume operation after a
failure.
Small
project
Informal Formal
Informal development methods
Cost Schedule and quality:
Engineering discipline almost by definition is driven by practical
parameter of cost, Schedule and quality. The cost of developing for the system, which, in
the case of software, are the manpower, hardware, software, and other support resources.
Schedule is an important factor in many projects. One of the major factors driving any
production discipline is quality. The quality of a software product having three
dimensions:
Product Operation
Product Transition
Product revision
Maintainability portability
Flexibility reusability
Testability Interoperability
Product operation
Correctness
Reliability
Efficiency
Integrity
Usability
Product operation deals with quality factors such as correctness, reliability and efficiency.
Product transition deals with quality factors like portability and inters operability.
Product revision is concerned with those aspects related to modification of program,
including factors such as maintainability and testability.
Problem of consistency:
Though high quality, low cost and small cycle time are the primary
objectives of any projects, for an organization there is another goal: consistency i.e. a
software development organization would like to produce consistent quality with
consistent productivity. It allows an organization to predict the outcome of a project with
reasonable accuracy and to improve its processes to produce higher quality products and
to improve its productivity.
Each phase produces deliverables required by the next phase in the life cycle.
Requirements are translated into design. Code is produced during implementation that is
driven by the design. Testing verifies the deliverable of the implementation phase against
requirements.
Requirements
Business requirements are gathered in this phase. This phase is the main focus of the
project managers and stake holders. Meetings with managers, stake holders and users are
held in order to determine the requirements. Who is going to use the system? How will
they use the system? What data should be input into the system? What data should be
output by the system? These are general questions that get answered during a
requirements gathering phase. This produces a nice big list of functionality that the
system should provide, which describes functions the system should perform, business
logic that processes data, what data is stored and used by the system, and how the user
interface should work. The overall result is the system as a whole and how it performs,
not how it is actually going to do it.
Design
The software system design is produced from the results of the requirements phase.
Architects have the ball in their court during this phase and this is the phase in which
their focus lies. This is where the details on how the system will work is produced.
Architecture, including hardware and software, communication, software design (UML is
produced here) are all part of the deliverables of a design phase.
Implementation
Code is produced from the deliverables of the design phase during implementation, and
this is the longest phase of the software development life cycle. For a developer, this is
the main focus of the life cycle because this is where the code is produced.
Implementation my overlap with both the design and testing phases. Many tools exists
(CASE tools) to actually automate the production of code using information gathered and
produced during the design phase.
Testing
During testing, the implementation is tested against the requirements to make sure that
the product is actually solving the needs addressed and gathered during the requirements
phase. Unit tests and system/acceptance tests are done during this phase. Unit tests act
on a specific component of the system, while system tests act on the system as a whole.
So in a nutshell, that is a very basic overview of the general software development life
cycle model.
Attributes of good software?
1>The software should deliver the required functionality and performance to the user and
should be maintainable, dependable and usable
2>Maintainability
3>Dependability
4>Efficiency
5>Usability
Software lifecycle
The term software lifecycle describes the development of an application,
from the concept phase right up to the retirement phase. The purpose of
such a plan is to define the various intermediate phases required to
validate the development of the application, i.e. to ensure the software
conforms to the requirements for the application and verification of
development procedures, i.e. to make sure the methods employed are
appropriate.
Such plans originate from the fact that errors detected late in the
implementation phase can end up being costly to rectify. The lifecycle
allows for errors to be detected at as early a stage as possible and therefore
enable developers to concentrate on the quality of the software,
implementation time frames and associated costs.
The basic software lifecycle involves the following procedures:
Defining goals defining the outcome of the project, and its role in a
global strategy.
Analysis of requirements and feasibility, i.e. gathering, examining
and formulating the customer's requirements and examining any
restrictions that may apply.
General design General architectural requirements of the application.
Detailed design, precise definition of each application sub-set.
Programming (programming and implementation) is the implementation of a
programming language to create the functions defined during the design stages.
Unit testing, individual testing of each application sub-set to ensure they are
implemented according to specifications.
Integration, to ensure that the different modules integrate with the application. This
is the purpose of the integration testing which is carefully documented.
Beta Testing (or debugging), to ensure that the software conforms to original
specifications.
Documentation serves to document necessary information for software users and for
future development.
Implementation,
Maintenance, all corrective procedures (corrective maintenance) and minor software
updates (ongoing maintenance).
Lifecycle models
To facilitate a common methodology for both the client and the software
company, lifecycle models have been updated to reflect the development
stages involved and the documentation required, so that each stage is
validated before moving on to the next stage.
The workflow model shows the sequence of activities in the process along
with their inputs, outputs and dependencies. The activities in the model represent
human actions.
The dataflow model represents the process as a set of activities each of which
carries out some data transformation. It shows how the input to the process such
as specification is transformed to an output such as design. The activities here
maybe lower than in a workflow model. They may represent transformations
carries out by people or computers.
The role model represents the roles of people involved in the software process
and the activities for which they are responsible.
Questions asked in UPTU Exams:-
2006-2007
2007-2008
2008-2009
1. What do you mean by a software process model? What is
the difference between a software process model and a
software process?
2. Describe any software process model which is helpful in
identifying possible process improvements.
3. Explain the term software crisis.
4. Write short notes on the following:
(i) The evolving role of software
(ii) Software characteristics