1. CMP 3310 Software Engineering - Handouts
1 | P a g e
Chapter No 1
Introduction
1. Software:
Set of instructions given to computer is called Software. An alternate name of
software is Program. In other words, logical parts of computer are called software.
Software may be applied in any situation for which a pre-specified set of
procedural steps (i.e., an algorithm) has been defined. Information contents 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
produce 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.
Some examples of software are Microsoft Windows, Microsoft Word, Google
Chrome and many more.
When we write a program for computer we named it as software. But software is
not just a program; many things other than the program are also included in software.
Some of the constituted items of software are described below.
Program: The program or code itself is definitely included in the software.
Data: The data on which the program operates is also considered as part
of the software.
Documentation: Another very important thing that most of us forget is
documentation. All the documents related to the software are also considered
as part of the software.
So the software is not just the code written in Cobol, Java, Fortran or C++. It
also includes the data and all the documentation related to the program.
2. Why Software are Important:
Undoubtedly software is playing a vital role in all the field of life these days. We can
see many software applications being operated around us in our daily routine. Some of
the major areas in which software has played an important role are identified as under.
Business decision-making: Software systems have played a major role in
businesses where you have to analyze your data and on the basis of that analysis
you have to make business decisions. This process of data analysis and decision-
making has become very accurate and easy by the use of software.
Modern scientific investigation and engineering problem solving: Scientific
investigations and engineering problem solving require an intensive amount of
calculations and data analysis. The accuracy of these analyses is also very important in
scientific applications. This process has become very easy and accurate by the use of
software. For example software systems are becoming more involved in
bioinformatics and the process of DNA decoding is only possible by the use of
software systems. Similarly many astronomical observations are being recorded and
analyzed by the software systems these days.
2. CMP 3310 Software Engineering - Handouts
2 | P a g e
Games: We see many computer games these days that interests people of all ages.
All these games are drive through software systems.
Embedded systems: We see many kinds of gadgets being employed in our daily
used things, like small microcontrollers used in our cars, televisions, microwave ovens
etc. All these systems are controlled through the software.
Similarly in many other fields like education, office automation, Internet
applications, software are is being used. Due to its central importance and massive use
in many fields it is contributing a lot in terms of economic activity started by the
software products. Billions and trillions of dollars are being invested in this field
throughout the world every year.
3. CategorizationofSoftware:
Software is generally categorized into two main types.
1. General purpose software
2. Customized software
General purpose software is developed according to general needs of the customers
such as Microsoft Office whereas customized software is developed according to
specific needs of a particular customer.
4. Types ofSoftware:
There are eight main types of software applications.
System Software
Real-Time Software
Business Software
Engineering & Scientific Software
Embedded Software
Personal Computer Software
Artificial Intelligence Software
Network Based Software
Application Software
4.1 System Software:
A type of software that is required for system operations is called System
Software. Other definitions include:
System software is a type of computer program that is designed to run a
computer's hardware and application programs.
A software that is designed to operate and control the computer
hardware and to provide a platform for running application software.
These software provide services to other software programs. Some examples of
system software are Operating Systems, Device Drivers, Utility Programs, Compilers
and Server Software.
Server software is a host that manages the network resources and fulfils the
request of the clients such as Microsoft Windows 2000 server and Internet
Information Server (IIS). Operating system software provides an interface to the user
and manages the input and output resources of the computer such as Microsoft
Windows, LINUX, UNIX and MAC. Compiler is a program that converts a high level
language (such as C++ and VB) program into machine language. Computer
understandable language is called machine language and that is 0 and 1 also called
binary. It is necessary to execute a program to convert it into machine language. Every
OS has its own machine language. Interpreter does the same function, which is done by
the compiler. There are few main difference such as interpreter converts the high level
3. CMP 3310 Software Engineering - Handouts
3 | P a g e
language program line by line into machine language whereas compiler converts the
entire program in one shot and produce the executable code as well. Interpreter has to
run again and again to view the results. Editor is software used to create, edit and
modify the code. Drivers are used to install the programs and Assembler is used to
convert assembly language program into machine language.
4.2 Real-Time Software:
It responds to real world events such as alarm, sensor and chatting.
4.3 Business Software:
Business Software is developed according to business needs of a particular user
organization such as an inventory or payroll system for University of Sargodha Lyallpur
Campus, Faisalabad. It is also called application software.
4.4 Engineering and Scientific Software:
Engineering and Scientific software is used to develop engineering and scientific
applications such as Auto CAD, Visio, Mat Lab and Math Markup Language (MML).
4.5 Embedded Software:
Embedded Software is embedded into electronic devices such as car digital
dashboard displaying, microwave oven and missile control software.
4.6 Personal Software:
Personal software is developed purely for personal usage such as word
processing and spreadsheets. Spreadsheet software is a collection of rows and columns
such as Microsoft Excel.
4.7 Artificial Intelligence Software:
Artificial Intelligence software is developed in order to get intelligent solutions
such as games, diseases diagnostic and timetable scheduling.
4.8 Network Based Software:
Network based software is that resides on the network such as Hotmail
software, Skype, Yahoo Messenger and GoogleTalk.
4.9 Application Software:
A type of software that is used to perform various tasks on a computer system is
known as Application Software. In other words, Application software is a set of one or
more programs designed to carry out operations for a specific application. Application
software uses System Software for performing different sub tasks. Every application
software uses operating system as a base software. Similarly, printer drivers are used
by Microsoft Word for printing documents.
These software provide services to users. Some examples of applications software
are Microsoft Word, Google Chrome, WordPad, Internet Download Manager and Skype.
5. Engineering:
Before moving on to software engineering lets first discuss something about
engineering itself. If you survey some of the dictionaries then you will find the following
definition of engineering.
4. CMP 3310 Software Engineering - Handouts
4 | P a g e
“The process of productive use of scientific knowledge is called engineering.”
6. Difference Between Computer Science and Software Engineering:
The science concerned with putting scientific knowledge to practical use.
Webster’s Dictionary, There are many engineering fields like electrical,
mechanical and civil engineering. All these branches of engineering are based on
physics. Physics itself is not engineering but the use of physics in making
buildings, electronic devices and machines is engineering. When we use physics
in constructing buildings then it is called civil engineering. When we use physics in
making machines like engines or cars then it is called mechanical engineering.
And when we apply the knowledge of physics in developing electronic devices
then the process is called electrical engineering. The relation of computer science
with software engineering is similar as the relation of physics with the
electrical, mechanical or civil engineering or for that matter the relation of any
basic science with any engineering field. So in this context we can define software
engineering as:
”This is the process of utilizing our knowledge of computer science in
effective production of software systems.”
7. Difference Between Software and Other Systems:
Now let’s talk something about how a software system is different from
any other systems. For example, how software is different from a car, a TV or the
similar systems or what is the difference between software engineering and
other engineering like mechanical or electrical engineering. Let’s look at some of
the non-software systems like TV, Car or an Electric Bulb. The car may be
malfunctioned due to some problem in engine while driving. Similarly an
electric bulb may be fused while glowing and a TV could be dysfunctional while
working. So the major thing that distinguishes a software system from other
systems is that; “Software does not wear out!”
What does that mean?
As we have seen in above example that our non-software systems could be
malfunctioned or crash while working. That mean they are affected by the
phenomenon of wear and tear. They have a particular life and after that they could
have some problem and may not behave and perform as expected. But this is not the
case with software. Software systems does not affect by the phenomenon of wear
and tear. If a software has any defect then that defect will be there from the very
first day and that defect normally called bug. That means if a software is not
working then it should not work from the very first day. But this could not be
the case that at a particular point in time a software is functioning well and after
some time the same software is not performing the same task as required. So
software does not have the element of wear and tear. Let’s elaborate this point
further. We have just talked about software defects which we call bugs. If a part of a
car became wear out you just need to get a new one from market and replace
the damages one with the new one. And the car will start working properly as it
was working previously. Similarly if an electric bulb got fused then you just need to
get a new one and put into the socket in place of the fused one and your room will
again be illuminated. But the case of software is somewhat different. If a software
has a bug then the same process of replacing faulty part with the new one may not
work. You cannot remove the bug by just replacing the faulty part of software
with the new one. Or it will not be as simple that, you go to the concerned company,
5. CMP 3310 Software Engineering - Handouts
5 | P a g e
get a new CD of that software and it will start working properly. If the software has a
bug and that bug was present in the older CD then that will remain in the new one.
This is a fundamental difference between software and other systems.
8. Software Engineering:
Software engineering is the use of sound engineering principles to develop
economical, reliable and efficient software.
It is an abstract definition of software engineering. Let’s explore it.
“Software engineering is composed of processes, techniques and tools to
develop high quality software.”
Processes: Processes are also known as methodologies, such as Waterfall, Rapid
Application Development (RAD), Spiral, Rational Unified Process (RUP), and Agile. A
methodology is a standard process to analyze, design and develop software. Each
methodology has its own system development life cycle (SDLC). SDLC is a process
used in an organization to develop, maintain and replace software systems.
Programmer used processes to define framework to implement techniques and
tools to develop software.
Techniques: Techniques are different methods implemented during all phases of
SDLC, such as planning, requirement gathering, analysis, design, development,
testing and deployment.
Tools: Computer Aided Software Engineering (CASE) tools are available to
implement methods. There are three types of CASE tools.
Upper CASE tools used up to design phase such as MS Visio & Erwin.
Lower CASE tools used during implementation phase such as:
o Development tools VB 6.0 & Java
o Rule Master, level 5 and VP Expert
Cross life cycle CASE tools are used throughout the SDLC phases such
as Rational Rose, MS Access and MS Word.
9. Software Engineering by IEEE:
Let’s look at some of the definitions of software engineering. Software
Engineering as defined by IEEE (International institute of Electric and
Electronic Engineering). IEEE is an authentic institution regarding the computer
related issues.
“The application of a systematic, disciplined, quantifiable approach to the
development, operation, and maintenance of software; that is, the application of
engineering to software.”
Before explaining this definition lets first look at another definition of
Software Engineering given by Ian Somerville.
“All aspects of software production’ Software engineering is not just concerned
with the technical processes of software development but also with activities
such as software project management and with the development of tools, methods
and theories to support software production”. These definitions make it clear that
Software Engineering is not just about writing code.
Software Engineering is the set of processes and tools to develop software.
Software Engineering is the combination of all the tools, techniques, and
processes that used in software production. Therefore Software Engineering
encompasses all those things that are used in software production like:
Programming Language
Software Design Techniques
Tools
Testing
Maintenance
6. CMP 3310 Software Engineering - Handouts
6 | P a g e
Development
So all those thing that are related to software are also related to software
engineering.
10. Top Software Companies:
The primary revenue streams for a software company are sale of product
license, maintenance fee, consultation and provision of IT related services. Here is
the list of Top 10 Software Companies 2012.
i) Microsoft Corporation
Microsoft is the most powerful brand name in software industry. Established
in 1975 by Bill Gates, Microsoft has been the market leader in Computer Operating
System Market, Enterprise Solutions and Internet Media.
Headquarter: - Redmond, Washington United States of America.
Popular Products: - Microsoft Windows, Microsoft Office, MS DOS, Windows Phone 7.
Rating: - 9.4 out of 10
ii) IBM
Established in 1924, International Business Machine known with its brand
name IBM is one of the most innovative software technology and consulting
company with numerous patents under its belt.
Headquarter: - New York United States of America
Popular Products: - Webspere, DB 2, Lotus.
Rating: - 9 out of 10
iii) Oracle
Oracle is a fast growing software company that offers Enterprise Solutions
and Database Management Software.
Headquarter: - California United States of America
Popular Products: - Enterprise Manager, Oracle Database.
Rating: - 8.1 out of 10
iv) SAP
The German software giant SAP is one of the leading company offering
Enterprise Software Solutions. SAP could easily be called the pinnacle of Enterprise
Software Solutions.
Headquarter: - Waldorf Germany Europe
Popular Products: - Enterprise Resources Planning (ERP).
Rating: - 7.8 out of 10
v) Symantec Corporation
The leading computer security solutions provider Symantec Corporation
makes a place within the list of Top Software Companies 2012. The popular Norton
Antivirus has protected many computers from malware threats.
Headquarter: - Mountain View California
Popular Products: - Symantec Norton 360, Symantec EndPoint Protection.
Rating: - 7.3 out of 10
vi) Adobe
A well known brand among ordinary computer users Adobe is famous for its
handy user friendly software products. Adobe is probably the second most popular
software company after Microsoft. Imagine what internet would be without Adobe
Photoshop, Adobe Reader and Adobe Flash.
Headquarter: - California United States of America
Popular Products: - Adobe Acrobat Reader, Adobe Photoshop, Adobe Flash, Adobe In
Design.
7. CMP 3310 Software Engineering - Handouts
7 | P a g e
Rating: - 7.1 out of 10
vii) Ericsson
The Swedish company Ericsson is one of the largest Telecommunication and
Data Transfer Service Provider in the world. With numerous patents under its
name Ericsson stands out in the list being a top software development house.
Headquarter: - Stockholm Sweden
Popular Products: - Business Unit Networks, Business Unit Global Services, Business
Unit Support Solutions.
Rating: - 6.8 out of 10
viii) Nintendo
The famous video games development company “Nintendo” stands out in the
list of top 10 best software companies 2012. Hailing from Japan Nintendo is
immensely popular among the teenagers with its awesome and cool video games.
Headquarters: - Kyoto Japan
Popular Products: - Wii U, Nintendo DSi XL, Nintendo 3DS.
Rating: - 6.6 out of 10
ix) Activision Blizzard
Activision Blizzard is a famous American video games development
company. The software company was formed a few years back after a merger
between Activision and Blizzard two popular video games developers targeting US
markets and now based on revenue Activision Blizzard has made a place among top
software companies 2012.
Headquarters: - Santa Monica California United States of America
Popular Products: - Call of Duty, World of Warcraft, Guitar Hero.
Rating: - 6.3 out of 10
x) Salesforce.Com
Salesforce.Com is a prominent name in cloud based enterprise service
providers that offers enterprise software solutions. Although the company is still in
the growth phase but yet makes a place in the list of Top Software Companies
Ranking 2012.
Headquarter: - California United States of America.
Popular Products: - Customer Relationship Management Solution
Rating: - 6 out of 10
11. Well-EngineeredSoftware:
Let’s talk something about what is well-engineered software. Well-
engineered software is one that has the following characteristics.
It is reliable
It has good user-interface
It has acceptable performance
It is of good quality
It is cost-effective
Every company can build software with limited resources but well-
engineered software is one that conforms to all characteristics listed above.
Software has very close relationship with economics. Whenever we talk about
engineering systems we always first analyze whether this is economically feasible or
not. Therefore you have to engineer all the activities of software development while
keeping its economic feasibility intact. The major challenges for a software
engineer is that he has to build software within limited time and budget in a
8. CMP 3310 Software Engineering - Handouts
8 | P a g e
cost-effective way and with good quality. Therefore well-engineered software has
the following characteristics.
Provides the required functionality
Maintainable
Reliable
Efficient
User-friendly
Cost-effective
But most of the times software engineers ends up in conflict among all these
goals. It is also a big challenge for a software engineer to resolve all these conflicts.
12. Observations About Software Engineering:
These are main observations about software engineering practice.
i. About 80% software deals with change in existing software + Reengineering.
Examples:
a. NetSol - Lease Software
b. IT 24 - Invoice Management System
c. AdamSoft - Health Assurance
d. SQL Systems – Health Assurance
e. Descon Information System – Property Estate Business
f. NexGen – Financial Solutions
g. NextBridge – Financial Solutions
h. Tower Tech – Educational Systems
ii. Time to market is an important competitive edge – introduce successful
innovations quickly (Microsoft (MS) Vista). It applies to all engineering
industry. If you do not estimate that when product should be introduced it will
fail, such as Stallion was introduced when Nestle introduced mineral water,
good milk was introduced when Engro Food introduced Olpers.
iii. Software is/are developed to facilitate change that means easy removal and
addition of functionality. Upgradeability is easy.
iv. Size and complexity of Software are increasing day by day. Alan Kay creator of
SmallTalk said that most of developed software resemble like Egyptian
pyramid that was constructed with millions of bricks piled on top of each other
with no structural integrity examples MS Windows.
Complexity of Software increase as size increase.
v. Intelligent software are developed now days.
vi. Clients are more IT literate and quality conscious.
vii. Software industry is moving towards product oriented applications rather
than project oriented applications.
viii. Software is a trend setter for hardware industry.
ix. Software is a product itself but it becomes driver for other products.
1. MS Windows 3.1 = 3 Million Line of Code (LOC)
2. MS Windows NT = 4 Million Line of Code (LOC)
3. MS Windows 95 = 15 Million Line of Code (LOC)
4. MS Windows NT 4 = 17 Million Line of Code (LOC)
5. MS Windows 98 = 18 Million Line of Code (LOC)
6. MS Windows NT 5 = 20 Million Line of Code (LOC)
7. MS Windows 2000 = 35 Million Line of Code (LOC)
8. MS Windows XP = 40 Million Line of Code (LOC)
9. MS Vista > 70 Million Line of Code (LOC)
9. CMP 3310 Software Engineering - Handouts
9 | P a g e
x. Clients are no more interested to develop single application such as TPS. They
are more interested in ERP solutions.
Example:
a. NetSol developed an ERP system for the Pakistan military academy.
b. CONOCO is the largest oil refinery company in the world. The company is
using an ERP system which has 75 different applications for over 4000 users
in different parts of the world such as USA & Middle East.
13. Main Problems inSoftware Engineering:
Following are the main problems in software engineering.
i. High cost and longer development times. This is because of size of software is
increasing day by day, For example: NetSol has sold:
a. LeaseSoft software for 22 times at average costing of Rs. 10 millions.
b. An ERP system to Pakistan army at cost of Rs. 10 million.
The programmers need more time & cost to develop software due to its more size.
ii. It is almost impossible to remove all errors before and even after delivery to
customer (Pareto Principle: 80% of errors rose from 20% of code).
iii. Software cost and schedule estimation is an extremely difficult task. This is
because no one is sure that:
a. how much time is required to develop whole software?
b. how many errors will be raised before and after delivery to customer?
c. how much time will be required to remove all errors before delivery to
customer?
iv. Software is upgraded after delivery to customer. The team size of Lease Soft is
300 members. This is just to maintain it. Maintenance cost is highly increased
whenever we introduced a change in software.
v. Time to market should be reduced. For example:
a. Net Sol has developed software recently for banking sector. There is no
single bank ready to purchase it. Ultimately Net Sol has to freeze that
software. The team involved to develop that software is segregated up to the
time, the software will be sold.
b. The time to resale must be reduced.
vi. Single product becomes part of product family. (MS Office, ATM systems)
vii. Ambiguous, conflicting and changing requirements.
viii. Productivity Economics- Barry Boehm has reported that productivity of
software development is reduced because of two reasons:
a. When we have more number of people in a team then more time is required
to communicate with them.
b. When program size is increased ultimately complexity is increased.
Example:
A survey results are shown with different teams to find a coefficient of linear
regression between team sizes vs. productivity. The survey is based on the similar
projects completed within same time span e.g., 5 years.
Result
15-20 people team size resulted in 25 projects and their productivity was 13 FP/month
9-11 people team size resulted in 46 projects and their productivity was 13 FP/month
7-9 people team size resulted in 120 projects and their productivity was 16 FP/month
3-5 people team size resulted in 162 projects and their productivity was 16 FP/month
1.5-3 people team size resulted in 138 projects and their productivity was 16 FP/month
10. CMP 3310 Software Engineering - Handouts
10 | P a g e
Throwing more people at the problem reduces productivity.
14. The Balancing Act:
Software Engineering is actually the balancing act. You have to balance many
things like cost, user friendliness, Efficiency, Reliability etc. You have to analyze
which one is the more important feature for your software is it reliability, efficiency,
user friendliness or something else. There is always a trade-off among all these
requirements of software. It may be the case that if you try to make it more
user-friendly then the efficiency may suffer. And if you try to make it more cost-
effective then reliability may suffer. Therefore, there is always a trade-off between
these characteristics of software. These requirements may be conflicting. A Software
engineer is required to analyze these conflicting entities and tries to strike a
balance. For example, there may be tension among the following:
Cost vs. Efficiency
Cost vs. Reliability
Efficiency vs. User-interface
Software Engineers always confront with the challenge to make a good
balance of all these things depending on the requirements of the particular
software system at hand. He should analyze how much weight should all these
things get such that it will have acceptable quality, acceptable performance and
will have acceptable user-interface. In some software the efficiency is more
important and desirable. For example if we talk about a cruise missile or a
nuclear reactor controller that are droved by the software systems then
performance and reliability is far more important than the cost-effectiveness and
user-friendliness. In these cases if your software does not react within a
certain amount of time then it may result in the disaster like Chernobyl accident.
The major challenges for a software engineer is that he has to build software
within limited time and budget in a cost-effective way and with good quality.
Therefore software development is a process of balancing among different
characteristics of software described in the previous section. And it is an art to
come up with such a good balance and that art can be learned from experience.
15. Law of Diminishing Returns:
In order to understand this concept let’s take a look at an example.
Most of you have noticed that if you dissolve sugar in a glass of water then
the sweetness of water will increase gradually. But at a certain level of saturation
no more sugar will dissolved into water. Therefore at that point of saturation the
sweetness of water will not increase even if you add more sugar into it.
The law of diminishing act describes the same phenomenon. Similar is the
case with software engineering. Whenever you perform any task like improving
the efficiency of the system, try to improve its quality or user friendliness then all
these things involve an element of cost. If the quality of your system is not
acceptable then with the investment of little money it could be improved to a
higher degree. But after reaching at a certain level of quality the return on
investment on the system’s quality will become reduced. Meaning that the
return on investment on quality of software will be less than the effort or money we
invest. Therefore, in most of the cases, after reaching at a reasonable level of quality
we do not try to improve the quality of software any further. This phenomenon is
shown in the figure below.
11. CMP 3310 Software Engineering - Handouts
11 | P a g e
Figure 1. Law of Diminishing Returns
16. Software Background:
Caper Jones a renounced practitioner and researcher in the field of Software
Engineering, had made immense research in software team productivity,
software quality, software cost factors and other fields relate to software
engineering. He made a company named Software Productivity Research in which
they analyzed many projects and published the results in the form of books. Let’s
look at the summary of these results the table below. He divided software related
activities into about twenty-five different categories. These categories are listed
below:
Project Management
Requirement Engineering
Design
Coding
Testing
Software Quality Assurance
Software Configuration Management
Software Integration and
Rest of the activities
End of Chapter 1