0% found this document useful (0 votes)
13 views

CSC 407 Soft Eng Chapt 1 To 3

The document discusses different types of software including system software like operating systems and language translators, as well as application software. It covers topics such as compilers, interpreters, assemblers, utility programs, specialist application software, and application packages.

Uploaded by

Emmanuel Abams
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views

CSC 407 Soft Eng Chapt 1 To 3

The document discusses different types of software including system software like operating systems and language translators, as well as application software. It covers topics such as compilers, interpreters, assemblers, utility programs, specialist application software, and application packages.

Uploaded by

Emmanuel Abams
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 22

SOFTWARE ENGINEERING METHODOLOGY

CHAPTER ONE
INTRODUCTION TO COMPUTER SOFTWARE

1.1 INTRODUCTION
Without software it will be impossible for the computer system to perform its function. In this
section the roles played by software and the different classes of software available shall be
discussed in details.

1.2 SOFTWARE
The term software can be defined as the series of instructions that controls the operation of a
computer system. Without software, the hardware cannot perform any task associated with the
computers.

Also, software can further be described as program that makes the hardware to function
effectively. And program on the other hand is a series of statements or set of instructions written
in a specialized language, which when executed controls the operation of the computer to
perform some tasks.

Types of Software
Software can be classified into two categories as shown in figure 5.1. The two types of software
are:
(i). System Software
(ii). Application Software

Software

System Software Application Software

Operating Language Utility Application Specialist


System Translator Programs Packages Application
Software

Figure 1.1 Breakdown of Software

The structure represents the breakdown of software to different classifications.

1.3 SYSTEM SOFTWARE


These are the programs that controls the various parts of the computer system and allows the
users to gain access to the computer, without which computer cannot function logically.
Examples of system software are:

1
(i) Operating system (O/S)
(ii) Language translators
(iii) Utility program

1.3.1 Operating System (O/S)


This is system software made up of suite of programs that controls and manages the resources of
the computer. The operations of the hardware and software application package are dependent on
the operating system without which they cannot function at all. Functions of an Operating
System
(i). It controls the hardware resources i.e. input and output devices.
(ii).It performs loading and unloading of programs e.g. application package.
(iii). Operating system implements the use of passwords.
(iv). It manages the resources of the computer e.g. storage management.
(v). It handles errors when they occur and uses corrective routines where possible.

Types of Operating System


1. Single User Operating System
As the name implies, this type of operating system makes provision for only one user at a time
with the computer system. Examples are Microsoft Disk Operating System (MS-DOS) or IBM’s
PC-DOS.

2. Multi-User Operating System


This operating system permits several users to run programs at the same time which is usually
through several terminals. A terminal consists of the monitor and keyboard. A multi user
operates on the principle of multiprogramming (a method of executing two or more programs
concurrently using the same computer. The operating systems of mainframe and minicomputer
are multi-user systems. Examples are: UNIX and XENIX.

3. Networking Operating System


With this type of operating system, computers can be linked together thereby allowing the users
to have access to the resources of one another.

1.3.2 Language Translators


A language translator is another type of system software that converts or translates programs
written in high level language or source code to machine language or object code. Before
computer can execute program written in high level languages such as BASIC, COBOL and
FORTRAN, these languages have to be translated into machine understandable form.

The term source code refers to program written in a high level language which is in a human
understandable form while object code as used in the text is the program that has already been
translated into machine language.

2
Types of Language Translators
1. Compiler
This is a language translator that translates the whole of the high level program which is the
source code into machine language code (i.e. object code), and can be saved, executed
immediately or later. That is to say compiler accepts the source program as an input and
generates its object program. Compiler language translator runs faster than an interpreter once
the object code has been obtained. Examples of some well known compilers are COBOL, C++
and FORTRAN.

Functions of Compiler
(i). It translates the source program into machine code.
(ii). To allocate main storage area.
(iii). It produces the object program on disk or magnetic tape.
(iv). It produces a printed copy of the source and object programs.
(v). It produces a list of errors found during compilation e.g. the use of words or violation of
the rules of syntax.

SOURCE COMPILER OBJECT CODE


CODE

Figure 1.2 Process of Translation of Source Code to Object Code

2. Interpreter
This is a special program that converts the source program one instruction or statement by
statement at a time, that is it completely translates and execute each instruction before it goes on
to the next instruction. Unlike compiler, no object code is stored since there is no compilation.
An example of interpreter is BASIC language which translates each source code statement one at
a time into machine and provides immediate feedback to the program if a mistake is made.

Some advantages of interpreter are that it handles user commands in an interactive system, and
debugs program as it runs. Debugging means detecting and removing errors in program.

Functions of Interpreters
(i). It handles user commands in an interactive system.
(ii). It debugs programs as they run

3. Assembler
It is a computer program that translate low level language (source) written in a symbolic
language or mnemonics into a machine language called the object program or object code.
Mnemonics are used to represent instructions instead of numeric machine e.g. STO for STOP,
SUB for Subtraction, DIV for DIVISION.

3
Functions of an Assembler
(i). It translate symbolic operational codes into machine codes and symbolic address into
machine address
(ii). It allocates main storage areas.
(iii). It indicates invalid source language instructions.
(iv). It produces the object program on disk or tape.
(v). It produces a printed list of the object program together with comments.

1.3.3 Utility Program


These are special programs designed to perform specific task of a routine nature and which can
be shared by many computer users. Common types of utility programs are: Sort/ merge utilities,
editors, debugger, file maintenance etc.

1. Sort/Merge Utility Program: These are programs used in arranging records in a file in a
particular order, either in ascending or descending sequence of unique attribute of the
records. While the merging program is used for joining related records in a file.

2. Editors: These are programs used for updating, correcting or altering the records in a file.

3. Debugger/File Management Utilities: This program is designed to help detect and


correct errors, and to solve specific problem.

4. Formatting Utilities: These programs are specifically designed to prepare the secondary
storage devices for use.

5. Dump Utilities: They are programs used mostly when errors occur in the execution of a
program.

1.4 APPLICATION SOFTWARE


Application software can be described as programs developed to solve specific tasks or
applications known to the user. This can be subdivided into two namely:
(i). Specialist Application Software
(ii). Application Packages

1.4.1 Specialist Application Software


This type of application software is designed for the specific needs of an organization. This
program may be written in house if the organization is big enough to have its own programming
team, or may be contracted to the software developers. The copyright is usually owned by the
organization. This type of software is often referred to as bespoke application software (or
tailormade/purpose-written software).

Advantages of Specialist or Bespoke Software


1. It specifically meets the information capture and processing needs of the organization.

4
2. The copyright is usually owned by the organization thereby making it to have a full
control over the software.
3. The software can be modified to fit the changing needs of the organization.
4. The unique nature may offer competitive advantage.
5. It can be integrated with other applications packages within the organization.

Disadvantages of Specialist or Bespoke Software


1. The development of this software takes time which causes the delay in the
implementation.
2. It is costly to develop and test.
3. It is always expensive to update because there is no one to share the cost with.

1.4.2 Application Packages


Application packages are pre-written and pre-recoded suites of programs which are commercially
made available for individuals and organizations to carry out their business functions, thereby
eliminating the need for them to write their own software program. For example a payroll
package may be mass produced in a form that will enable different companies to produce their
payrolls. Application packages can also be referred to Off-the-shelf packages. This may be
classified as:
(a) Application Specific
(b) General Purpose

(a). Application Specific: This consists of programs designed to carry out just one specific task
such as payroll and stock control

(b). General Purpose: A general purpose application package is the one that provides a
completely general set of facilities that might be useful in a wide variety of business application
problems. Examples are: Spreadsheet packages, word-processing packages and file management
system.

Types of Application Packages


1. Database Management System (DBMS)
This system is used for constructing and processing a database. A database is a collection of
related data. Examples are: Data perfect, D-Base, FoxBASE, MS- Access and Super Base.

2. Desktop Publishing Packages


This application is used for desktop publishing and its examples are: Aldus PageMaker, Adobe
PageMaker, MS-Publisher, Jet Page and Ventura.

3. Spreadsheet Packages
This is electronic software that provides computerized version of traditional book keeping. An
electronic spreadsheet is organized into a grid of numbered columns and rows intersecting in

5
cells. A typical spreadsheet can contain a large numbers of cells e.g. 256 columns, labeled A, B,
C… IV, and numerous rows. A cell can contain either text or numerical values.

Spreadsheets are valuable for application in which numerous calculations of data must be related
to one another. Spreadsheet is applicable in budget preparations, financed record keeping,
statistical analysis and pictorial representation of facts. It also provides a wide range of facilities
for creating and manipulating formatted tables and charts of values. Examples of spreadsheet
packages are: Microsoft Excel and Lotus 1-2-3.

4. Word Processing Packages


As the names implies, this package is used for processing word like creating and editing a text.
Examples are: Word Perfect, Word Star, Right Writer, Word for Word Pro, Professional Writer
and MS- Word.

5. Presentation Packages: Examples are Microsoft PowerPoint and Microsoft FrontPage


Benefits of Application Packages
1. Cost: The major benefits derived from application package are that it saves the effort of
the programmer and cost on the part of the user. The cost of the development of the
software spreads among many users’ thereby lowering the cost to procurers.

2. Tried and Tested Package: The user of application package is sure of getting a well
tried and tested program which can be used with assurance.

3. New Versions: Newly improved versions of these tested and tried packages are released
from time to time.

4. Speed of Implementation: The rate at which the use of application package is


implemented is faster compared with specialist application software that requires more
time to be written and debugged.

5. There is always a standard approach to common applications.

Limitations of Application Packages


1. Lack of Satisfaction of User Requirement: There is lack of satisfaction on the part of
the user, which is the major drawback often experienced with application packages since
the package would have been developed to meet general needs and may therefore not be
ideal for a particular customer.

2. The user does not have direct control over this package in the same way as it would have
been if the software were produced in-house.

3. The use of the package may result in inefficiency because of the addition of some certain
features that may not be pertinent to every application.

6
4. There is lack of competitive edge as the same software is always available to all
businesses.

1.5 FACTORS FOR SELECTING APPLICATION SOFTWARE


In selecting software for an organization, some important factors must be put into consideration
these include:

(i) Appropriateness: The software to be selected should be rich enough to meet the need of
the organization.

(ii) Compatibility: The software must be able to run on the organization existing hardware
and operating system platform. Also the company’s operating system must be compatible
with the software it requires for its business application.

(iii) Support: The programming team of the organization should be able to understand the
programming language used for the software easily. And the end user should have
sufficient knowledge of the software in order to provide for all the systems based on that
software.

(iv) Maintainability: The software should be easy to change or modify whenever the need
arises. And it should be flexible enough to grow with the organization.

(v) Cost: The software should be affordable by the organization.

1.6 PHASES OF SOFTWARE DEVELOPMENT


The various steps involved in software development are as follows:
1. Definitions of the Problem: The first step in software development is to define the
problem. This provides an overview for the programmer on the type of input data needed
and what must be done to provide the expected output.

2. Developing the Algorithm: A clear understanding of the defined problem is very crucial
in order to develop the most efficient algorithm which may takes the form of
mathematical relationship.

3. Program Design: At this phase, design tools are employed for proper planning and
reduction in processing time. Some of the design tools often used in computer program
are: flowcharts, pseudo code and decision tables.

4. Coding the Statement: The next phase after program design is writing of the program
statement.

5. Compilation: This phase involves translating the source program into machine code
through the use of assembler or compiler.

7
6. Debugging: This is the process of testing and correcting any error in a program.

7. Documentation: It is an act of keeping all the details involved in writing program e.g.
Purpose of the program, sources of data, cost and algorithm.

REVIEW QUESTIONS ON CHAPTER ONE 1.


(a) Define the term software.
(b) List and explain the various classification of software.

2. (a) What is an application software package?


(b) What factors will you consider in purchasing application software to be used for
learning procedures?

3. (a) A software is used to be user-friendly, explain what this implies.


(b) Differentiate between a system software and application software and give two
examples each.

4. (a) Define software and give two examples to illustrate your definitions.
(b) As a computer student of your company prepares a checklist of five points you
would wish to discuss with the computer bureau on selecting an application
package for stock control and stock ledger work.
(c) Outline three “cost” advantages ensued to an organization from the purchase of
software packages rather than writing software in-house.

5. Generally, there are software’s for various purposes. Explain to a novice what you
understand about the following software:
(i) Utility Programs (ii) Diagnostic Software (iii) Compilers
(iv) Word Processing.
(v) Application Software

6. (a) What does the term "software" mean in computer system?


(b) Distinguish between the following pairs with illustrative examples:
(i) System and Application Software.
(ii) Compilers and Interpreter
(iii) Word Processing and Spreadsheet Packages

7. A small accounting firm is about to purchase a microcomputer as a first time user and
you have been asked to act as an adviser to the firm.
You are required to:
(a) List the hardware factors which prior to the firm prior to selecting and installing a
microcomputer system you would consider.

8
(b) List the software factors which prior to the firm prior to selecting and installing a
microcomputer system you would consider.
(c) Advise the user on why microcomputers are better than mainframes.
(d) Identity the generation of technology to which microcomputer belong and state its
features.

CHAPTER TWO
HISTORY OF SOFTWARE ENGINEERING

2.1 OVERVIEW OF SOFTWARE ENGINEERING


In the 1968, software engineering originated from the NATO Software Engineering Conference.
It came at the time of software crisis. The field of software engineering has since then been
growing gradually as a study dedicated to creating qualified software. In spite of being around
for a long time, it is a relatively young field compared to other fields of engineering. Though
some people are still confused whether software engineering is actually engineering because
software is more of invisible course. Although it is disputed what impact it has had on actual
software development over the last more than 40 years, the field's future looks bright according
to Money Magazine and Salary.com who rated "software engineering" as the best job in America
in 2006.

The early computers had their software wired with the hardware thereby making them to be
inflexible because the software could not easily be upgraded from one machine to another. This
problem necessitated the development. Programming languages started to appear in the 1950s
and this was also another major step in abstraction. Major languages such as FORTRAN,
ALGOL, and COBOL were released in the late 1950s to deal with scientific, algorithmic, and
business problems respectively. E.W. Dijkstra wrote his seminal paper, "Go To Statement
Considered Harmful", in 1968 and David Parnas introduced the key concept of modularity and

9
information hiding in 1972 to help programmers deal with the ever increasing complexity of
software systems. A software system for managing the hardware called an operating system was
also introduced, most notably by Unix in 1969. In 1967, the Simula language introduced the
object-oriented programming paradigm.

The technological advancement in software has always been driven by the ever changing
manufacturing of various types of computer hardware. The more the new technologies upgrade,
from vacuum tube to transistor, and to microprocessor were emerging, the more the necessity to
upgrade and even write new software. In the mid 1980s software experts had a consensus for
centralised construction of software with the use of software development Life Cycle from
system analysis. This period gave birth to object-oriented programming languages. Open-source
software started to appear in the early 90s in the form of Linux and other software introducing
the "bazaar" or decentralized style of constructing software. Then the Internet and World Wide
Web hit in the mid 90s changing the engineering of software once again. Distributed Systems
gained sway as a way to design systems and the Java programming language was introduced as
another step in abstraction having its own virtual machine. Programmers collaborated and wrote
the Agile Manifesto that favored more light weight processes to create cheaper and more timely
software.

2.2 Evolution of Software Engineering


There are a number of areas where the evolution of software engineering is notable:
• Professionalism: The early 1980s witnessed software engineering becoming a full-
fledged profession like computer science and other engineering fields.

• Impact of women: In the early days of computer development (1940s, 1950s, and1960s,),
the men were found in the hardware sector because of the mental demand of hardwaring
heavy duty equipment which was too strenuous for women. The writing of software was
delegated to the women. Some of the women who were into many programming jobs at
this time include Grace Hopper and Jamie Fenton. Today, many fewer women work in
software engineering than in other professions, this reason for this is yet to be
ascertained.

• Processes: Processes have become a great part of software engineering and re praised for
their ability to improve software and sharply condemned for their potential to narrow
programmers.

• Cost of hardware: The relative cost of software versus hardware has changed
substantially over the last 50 years. When mainframes were costly and needed large
support staffs, the few organizations purchasing them also had enough to fund big, high-
priced custom software engineering projects. Computers can now be said to be much
more available and much more powerful, which has a lot of effects on software. The
larger market can sustain large projects to create commercial packages, as the practice of
companies such as Microsoft. The inexpensive machines permit each programmer to
have a terminal capable of fairly rapid compilation. The programs under consideration
can use techniques such as garbage collection, which make them easier and faster for the
10
programmer to write. Conversely, many fewer organizations are concerned in employing
programmers for large custom software projects, instead using commercial packages as
much as possible.

2.3 The Pioneering Era


The most key development was that new computers were emerging almost every year or two,
making existing ones outdated. Programmers had to rewrite all their programs to run on these
new computers. They did not have computers on their desks and had to go to the "computer
room" or
“computer laboratory”. Jobs were run by booking for machine time or by operational staff. Jobs
were run by inserting punched cards for input into the computer’s card reader and waiting for
results to come back on the printer.

The field was so new that the idea of management using schedule was absent. Guessing the
completion time of project predictions was almost unfeasible Computer hardware was
applicationbased. Scientific and business tasks needed different machines. High level languages
like FORTRAN, COBOL, and ALGOL were developed to take care of the need to frequently
translate old software to meet the needs of new machines. Systems software was given out for
free by the vendors since it must to be installed in the computer before it is sold. Custom
software was sold by a few companies but no sale of packaged software. Organisation such as
like IBM's scientific user group SHARE gave out software free and as a result reuse was order of
the day. Academia did not yet teach the principles of computer science. Modular programming
and data abstraction were already being used in programming.

2.3 1945 to 1965: The Origins


The term software engineering came into existence in the late 1950s and early 1960s.
Programmers have always known about civil, electrical, and computer engineering but found it
difficult to marry engineering with software. In 1968 and 1969, two conferences on software
engineering were sponsored by the NATO Science Committee. This gave the field its initial
boost. It was widely believed that these conferences marked the official start of the profession of
software engineering.
2.4 1965 to 1985: The software crisis
Software engineering was prompted by the software crisis of the 1960s, 1970s, and 1980s. It was
the crisis that identified many of the problems of software development. This era was also
characterised by: run over budget and schedule, property damage and loss of life caused by poor
project management. Initially the software crisis was defined in terms of productivity, but
advanced to emphasize quality.
• Cost and Budget Overruns: The OS/360 operating system was a classic example. It was
a decade-long project from the 1960s and eventually produced one of the most complex
software systems at the time.
• Property Damage: Software defects can result in property damage. Poor software
security allows hackers to steal identities, costing time, money, and reputations.
• Life and Death: Software defects can kill. Some embedded systems used in radiotherapy
machines failed so disastrously that they administered poisonous doses of radiation to
patients. The most famous of these failures is the Therac 25 incident.
11
2.5 1985 to 1989: No silver bullet
For years, solving the software crisis was the primary concern for researchers and companies
producing software tools. Apparently, they proclaim every new technology and practice from the
1970s to the 1990s as a silver bullet to solve the software crisis. Tools, discipline, formal
methods, process, and professionalism were published as silver bullets:
• Tools: Particularly underline tools include: Structured programming, object oriented
programming, CASE tools, Ada, Java, documentation, standards, and Unified Modeling
Language were touted as silver bullets.
• Discipline: Some pundits argued that the software crisis was due to the lack of discipline
of programmers.
• Formal methods: Some believed that if formal engineering methodologies would be
applied to software development, then production of software would become as
predictable an industry as other branches of engineering. They advocated proving all
programs correct.
• Process: Many advocated the use of defined processes and methodologies like the
Capability Maturity Model.
• Professionalism: This led to work on a code of ethics, licenses, and professionalism.

Fred Brooks (1986), No Silver Bullet article, argued that no individual technology or practice
would ever make a 10-fold improvement in productivity within 10 years. Debate about silver
bullets continued over the following decade. Supporter for Ada, components, and processes
continued arguing for years that their favorite technology would be a silver bullet. Skeptics
disagreed. Eventually, almost everyone accepted that no silver bullet would ever be found. Yet,
claims about silver bullets arise now and again, even today.

” No silver bullet” means different things to different people; some take” no silver bullet” to
mean that software engineering failed. The pursuit for a single key to success never worked.
All known technologies and practices have only made incremental improvements to productivity
and quality. Yet, there are no silver bullets for any other profession, either. Others interpret no
silver bullet as evidence that software engineering has finally matured and recognized that
projects succeed due to hard work.

However, it could also be pointed out that there are, in fact, a series of silver bullets today,
including lightweight methodologies, spreadsheet calculators, customized browsers, in-site
search engines, database report generators, integrated design-test coding-editors with
memory/differences/undo, and specialty shops that generate niche software, such as information
websites, at a fraction of the cost of totally customized website development. Nevertheless, the
field of software engineering looks as if it is too difficult and different for a single "silver bullet"
to improve most issues, and each issue accounts for only a small portion of all software
problems.

12
2.6 1990 to 1999: Importance of the Internet
The birth of internet played a major role in software engineering. With its arrival, information
could be gotten from the World Wide Web speedily. Programmers could handle illustrations,
maps, photographs, and other images, plus simple animation, at a very fast rate. It became easier
to display and retrieve information as a result of the usage of browser on the HTML language.
The widespread of network connections brought in computer viruses and worms on MS
Windows computers. These new technologies brought in a lot good innovations such as e-
mailing, webbased searching, e-education to mention a few. As a result, many software systems
had to be redesigned for international searching. It was also required to translate the information
flow in multiple foreign languages. Many software systems were designed for multi-language
usage, based on design concepts from human translators.

2.7 2000 to Present: Lightweight Methodologies


This era witnessed increasing demand for software in many smaller organizations. There was
also the need for inexpensive software solutions and this led to the growth of simpler, faster
methodologies that developed running software, from requirements to deployment. There was a
change from rapid-prototyping to entire lightweight methodologies. For example, Extreme
Programming (XP), tried to simplify many areas of software engineering, including requirements
gathering and reliability testing for the growing, vast number of small software systems.

2.8 What is it today?


Software Engineering as a profession is now being defined as a field of human experts in
boundary and content. Software Engineering is rated as one of the best job in developed
economies in terms of growth, pay, and flexibility and so on.

2.9 Important figures in the history of software engineering Listed


below are some renowned software engineers:
• Charles Bachman (born 1924) is particularly known for his work in the area of databases.
• Fred Brooks (born 1931)) best-known for managing the development of OS/360.
• Peter Chen, known for the development of entity-relationship modeling.
• Edsger Dijkstra (1930-2002) developed the framework for proper programming.
• David Parnas (born 1941) developed the concept of information hiding in modular
programming.

CHAPTER THREE BASIC CONCEPT OF SOFTWARE ENGINEERING

3.1 INTRODUCTION
This chapter introduces some basic concepts that the student needs to be familiar with before
attempting to develop any software. It describes software and software engineering methodology,
explaining the attributes of good software. The unit introduces you to the fundamental notions of

13
software engineering methodology, thus guiding you through and facilitating your understanding
of the subsequent units.

3.2 Software Engineering Methodology


The body of methods, rules, postulates, procedures, and processes that are used to manage a
software project are collectively referred to as a software engineering methodology.

3.2.1 Definitions of Software Engineering.


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. In
other words, it is the application of engineering to software.

Software engineering is an engineering discipline that is concerned with all aspects of software
production. 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.2.2 Sub-disciplines of Software engineering


Software engineering can be divided into ten sub-disciplines. They are as follows:
• Software requirements: The elicitation, analysis, specification, and validation of
requirements for software.

• Software design: Software Design consists of the steps a programmer should do before
they start coding the program in a specific language. It is usually done with
ComputerAided Software Engineering (CASE) tools and use standards for the format,
such as the Unified Modeling Language (UML).

• Software development: It is construction of software through the use of programming


languages.

• Software testing Software Testing is an empirical investigation conducted to provide


stakeholders with information about the quality of the product or service under test.

• Software maintenance: This deals with enhancements of Software systems to solve the
problems they may have after being used for a long time after they are first completed.
• Software configuration management: is the task of tracking and controlling changes in
the software. Configuration management practices include revision control and the
establishment of baselines.

• Software engineering management: The management of software systems borrows


heavily from project management.

• Software development process: A software development process is a structure


imposed on the development of a software product. There are several models for such

14
processes, each describing approaches to a variety of tasks or activities that take place
during the process.

• Software engineering tools, (CASE which stands for Computer Aided Software
Engineering) CASE tools are a class of software that automates many of the activities
involved in various life cycle phases. CASE tools are software systems which are
designed to support routine activities in the software process such as editing design
diagrams, checking diagram consistency and keeping track of program tests which have
been run.

• Software quality: The totality of functionality and features of a software product that
bear on its ability to satisfy stated or implied needs.

3.3 Software Engineering Goals and Principles


3.3.1 Goals
Software Engineering as the application of engineering to software has overall goal to easily
support changes to software requirements over the system's life. Stated requirements when they
are initially specified for systems are usually incomplete. Apart from accomplishing these stated
requirements, a good software system must be able to easily support changes to these
requirements over the system's life. Therefore, a major goal of software engineering is to be able
to deal with the effects of these changes.

The software engineering goals include:


• Maintainability: Changes to software without increasing the complexity of the original
system design should be possible.

• Reliability: The software should be able to prevent failure in design and construction as
well as recover from failure in operation. In other words, the software should perform its
intended function with the required precision at all times.

• Efficiency: The software system should use the resources that are available in an optimal
manner.

• Understand ability: The software should accurately model the view the reader has of the
real world. Since code in a large, long-lived software system is usually read more times
than it is written, it should be easy to read at the expense of being easy to write, and not
the other way around.

15
3.3.2 Principles
Sounds engineering principles must be applied throughout development, from the design phase to
final fielding of the system in order to attain a software system that satisfies the above goals.
These include:
• Abstraction: The purpose of abstraction is to bring out essential properties while
omitting inessential detail. The software should be organized as a ladder of abstraction in
which each level of abstraction is built from lower levels. The code is sufficiently
conceptual so the user need not have a great deal of technical background in the subject.
The reader should be able to easily follow the logical path of each of the various modules.
The decomposition of the code should be clear.

• Information Hiding: The code should include no needless detail. Elements that do not
affect other segment of the system are inaccessible to the user, so that only the intended
operations can be performed. There are no "undocumented features".

• Modularity: The code is purposefully structured. Components of a given module are


logically or functionally dependent.

• Localization: The breakdown and decomposition of the code is rational. Logically


related computational units are collected together in modules.

• Uniformity: The notation and use of comments, specific keywords and formatting is
consistent and free from unnecessary differences in other parts of the code.

• Completeness: Nothing is deliberately missing from any module. All important or


relevant components are present both in the modules and in the overall system as
appropriate.

• Confirm ability: The modules of the program can be tested individually with adequate
rigor. This gives rise to a more readily alterable system, and enables the reusability of
tested components.

3.4 Software Engineering vs. Computer Science


Computer science is concerned with theory and fundamentals; software engineering is concerned
with the practicalities of developing and delivering useful software. Computer science theories
are still insufficient to act as a complete underpinning for software engineering (unlike e.g.
physics and electrical engineering).

3.5 Attributes of a Good Software


The software should deliver the required functionality and performance to the user and should be
maintainable, dependable and usable.
a. Maintainability: Software must evolve to meet changing needs
b. Dependability: Software must be trustworthy
c. Efficiency: Software should not make wasteful use of system resources

16
d. Usability: Software must be usable by the users for which it was designed
e. Robustness: Software should fail only under extreme conditions
f. Portability: Should be possible to move from one environment to another
3.6 Software Process
A software process is a set of activities and associated results whose goal is the development or
evolution of software product Generic activities in all software processes are:
Specification - what the system should do and its development constraints
Development - production of the software system
Validation - checking that the software is what the customer wants
Evolution - changing the software in response to changing demands

3.7 What is a Software Process Model?


A software process model is a simplified representation of a software process, presented from a
specific perspective. Examples of process perspectives are:
1. Workflow perspective - sequence of activities
2. Data-flow perspective - information flow
3. Role/action perspective - who does what

Generic process models include:


Waterfall
Evolutionary development
Formal transformation
Integration from reusable components

3.8 Software Engineering Methods


Software engineering methods refer to structured approaches to software development which
include system models, notations, rules, design advice and process guidance Model
descriptions: Descriptions of graphical models which should be produced
Rules: Constraints applied to system models
Recommendations: Advice on good design practice
Process guidance: What activities to follow

3.10 Professional and Ethical Responsibilities


Software engineering involves wider responsibilities than simply the application of technical
skills. Software engineers must behave in an honest and ethically responsible way if they are to
be respected as professionals. Ethical behaviour is more than simply upholding the law.

3.11 Issues of Professional Responsibility


Confidentiality: Engineers should normally respect the confidentiality of their employers or
clients irrespective of whether or not a formal confidentiality agreement has been signed.

Competence: Engineers should not misrepresent their level of competence. They should not
knowingly accept work which is not within their competence.

17
Intellectual property rights: Engineers should be aware of local laws governing the use of
intellectual property such as patents, copyright, etc. They should be careful to ensure that the
intellectual property of employers and clients is protected.

Computer misuse: Software engineers should not use their technical skills to misuse other
people’s computers. Computer misuse ranges from relatively trivial (game playing on an
employer’s machine, say) to extremely serious (dissemination of viruses).

3.12 Who is a Software Engineer?


A software engineer is an individual who applies the principles of software engineering to the
design, development, testing, and evaluation of the software and systems in order to meet with
client’s requirements. He/she fully designs software, tests, debugs and maintains it. Software
engineer needs knowledge of varieties of computer programming languages and applications; to
enable him cope with the varieties of works before him. In view of this, he can sometimes be
referred to as a computer programmer.

3.12.1 Functions of a Software Engineer


i). Analyses information to determine, recommend, and plan computer specifications and layouts,
and peripheral equipment modifications. ii). Analyses user needs and software requirements to
determine feasibility of design within time and cost constraints.
iii). Coordinates software system installation and monitor equipment functioning to ensure
specifications are met. iv). Designs, develops and modifies software systems, using scientific
analysis and mathematical models to predict and measure outcome and consequences of design.
v). Determines system performance standards. vi). Develops and direct software system testing
and validation procedures, programming, and documentation. vii). Modifies existing software to
correct errors; allow it to acclimatise to new hardware, or to improve its performance. viii).
Obtains and evaluates information on factors such as reporting formats required, costs, and
security needs to determine hardware configuration. ix). Stores, retrieves, and manipulates data
for analysis of system capabilities and requirements.

3.12.2 Technical and Functional Knowledge Requirements of a Software Engineer Most


employers commonly recognise the technical and functional knowledge statements listed below
as general occupational qualifications for Computer Software Engineers Although it is not
required for the software engineer to have all of the knowledge on the list in order to be a
successful performer, adequate knowledge, skills, and abilities are necessary for effective
delivery of service.

The Software Engineer should have Knowledge of:


• Circuit boards, processors, chips, electronic equipment, and computer hardware and
software, as well as applications and programming
• Practical application of engineering science and technology. This includes applying
principles, techniques, procedures, and equipment to the design and production of various
goods and services.
• Arithmetic, algebra, geometry, calculus, statistics, and their applications.
18
• Structure and content of the English language including the meaning and spelling of
words, rules of composition, and grammar.
• Business and management principles involved in strategic planning, resource allocation,
human resources modelling, leadership technique, production methods, and coordination
of human and material resources.
• Principles and methods for curriculum and training design, teaching and instruction for
individuals and groups, and the measurement of training effects.
• Design techniques, tools, and principles involved in production of precision technical
plans, blueprints, drawings, and models.
• Administrative and clerical procedures and systems such as word processing, managing
files and records, stenography and transcription, designing forms, and other office
procedures and terminology.
• Principles and processes for providing customer and personal services. This includes
customer needs assessment, meeting quality standards for services, and evaluation of
customer satisfaction.
• Transmission, broadcasting, switching, control, and operation of telecommunications
systems.

3.12.3 Occupational features of a software Engineer


Occupations have traits or characteristics which give important clues about the nature of the
work and work environment and offer you an opportunity to match your own personal interests
to a specific occupation.

Software engineer occupational characteristics or features can be categorised as: Realistic,


Investigative and Conventional as described below:
• Realistic — Realistic occupations frequently involve work activities that include
practical, hands-on problems and solutions. They often deal with plants, animals, and
real-world materials like wood, tools, and machinery. Many of the occupations require
working outside, and do not involve a lot of paperwork or working closely with others.

• Investigative — Investigative occupations frequently involve working with ideas, and


require an extensive amount of thinking. These occupations can involve searching for
facts and figuring out problems mentally.

3.13 What is Software Crisis?


The term software crisis was used in the early days of software engineering. It was used to
describe the impact of prompt increases in computer power and the difficulty of the problems
which could be tackled. In essence, it refers to the difficulty of writing correct, understandable,
and verifiable computer programs. The sources of the software crisis are complexity,
expectations, and change. Conflicting requirements has always hindered software development
process. For instance, while users demand a large number of features, customers generally want
to minimise the amount they must pay for the software and the time required for its development.

19
F. L. Bauer coined the term "software crisis" at the first NATO Software Engineering Conference
in 1968 at Garmisch, Germany. The term was used early in Edsger Dijkstra's 1972 ACM Turing
Award Lecture:
-The major cause of the software crisis is that the machines have become more powerful! This
implied that: as long as there were no machines, programming was no problem at all; when there
were few weak computers, programming became a mild problem, and now with huge computers,
programming has equally become a huge problem.

3.13.1 Manifestation of Software Crisis The


crisis manifested itself in several ways:
· Projects running over-budget.
· Projects running over-time.
· Software was very inefficient.
· Software was of low quality.
· Software often did not meet requirements.
· Projects were unmanageable and code difficult to maintain. ·
Software was never delivered.

3.13.2 Causes of Software Engineering Crisis


The challenging practical areas include: fiscal, human resource, infrastructure, and marketing..
The very causes of failure in software development industries can be from two areas twofold: 1)
Poor marketing efforts, and 2) Lack of quality products.

i) Poor marketing efforts


The problem of poor marketing efforts is more noticeable in the developing economies, where
consumers of software products prefers imported software to the detriment of locally developed
ones. This problem is compounded by poor marketing approaches and the fact that most of the
hardware was not manufactured locally. Though the use of software in our industries, service
providing organizations, and other commercial institutions is increasing appreciably, the demand
of locally developed software products is not going faster at the same rate.

ii). Lack of quality products


Since most of the systems are to be used in real time environment, quality assurance is of
primary concern. Presently our software companies are yet to be on ground as far as developing
quality software is concerned. It will be of interest to note that presently we have over 200
software developing firms and only 20 of them have earned ISO 9001 certification and not even
a single one has gotten CMM/CMM1 level 3. Even though certification is not important
yardstick for quality of software product, yet ISO certification is important because it focuses on
the general aspects of development to certify the quality. It must also be stated that if a software
product could pass at least level three of CMM/CMM1 then we can classify this as quality
product. The hindrances to achieving quality software on part of our software industries are
discussed below:

20
iii). Lack of expertise in producing sound user requirements
Allowing the developing firms to go through some defined software development steps as
suggested in software engineering discipline is a pathway to ensure the quality of software
products. The very first step is to analyze the users' requirement and designing of the system
vastly depends on defining users' requirement precisely. Ideally system analysts should do all
sorts of analysis to produce user requirement analysis documents. Regrettably, in Bangladesh, a
few firms do not pay much attention to producing sound user requirement documents. This
reveals lack of theoretical knowledge in system analysis and design. To produce high quality
requirement analysis documents there is needs for an in-depth theoretical knowledge in system
analysis and design. But many of local software development firms lack the expertise in this
field. In order to rectify this problem, academics in the field have to be consulted to give
necessary assistance that will gear towards producing sound user requirement analysis
documents.

iv). Lack of expertise in designing the system: Aside user requirement analysis, another
important aspect is the development process is the designing part of the software product. The
design of any system affects the effectiveness of any implemented software. Again, one of the
major problems confronting our software industries is non availability of expert software
designers. It is a fact to point out that out what we have on ground are programmers or coders but
the number of experienced and expert software engineers is till not many.

In fact, we rarely have resourceful persons who can guide large and complex software projects
properly our software industries. The result is that there are no quality end products It may be
mentioned here that sound academic knowledge in software engineering is a must for developing
a quality software system. A link between industries and academic institutions can improve this
situation. The utilisation of theoretical sound knowledge of academics in industrial software
project cannot be overlooked. Besides depending on the complexity of the project, software firms
may need to involve foreign experts for specific period to complete the project properly.

v). Lack of knowledge in developing model


There is need to follow some specific model in software development process. The practice in
many software development firms is not to follow any particular model, and this has so much
affected the quality of software product. It is mandatory for a software developer, therefore, to
select a model prior to starting a software project so as to have quality product.

vi). Absence of proper software testing procedure: For us to have quality software production
the issue of software testing should be taken with utmost seriousness and demands exhaustive
test to check its performance. Many theoretical testing methodologies abound to check the
performance and integrity of the software. It is rather unfortunate to note that many developing
firms go ahead to , hastily deliver the end products to their clients without performing extensive
test. The result of this is that many software products are not free from bugs. It should be pointed
here that fixing the bugs after is costlier than during the developing time. It is therefore important
for developers to perform the test phase of the development before delivering the end product to
the clients.

21
vii). Inconsistent documentation: Documentation is a very important aspect of software
development. Most of the time, the document produced by some software firms is either
incomplete or inconsistent. Since software is ever-growing product, documentation in coding
must be produced and preserved for the future possible enhancement of the software.

3.13.3Solution to Software Crisis


Various processes and methodologies have been developed over the last few decades to "tame"
the software crisis, with varying degrees of success. However, it is widely agreed that there is no
"silver bullet" ― that is, no single approach which will prevent project overruns and failures in
all cases. In general, software projects which are large, complicated, poorly-specified, and
involve unfamiliar aspects, are still particularly vulnerable to large, unanticipated problems

Tutorial Questions
1. Discus the various tasks of software engineer.
2. Who is a software engineer?
3. Explain the Technical and Functional Knowledge of a Software Engineer.
4 Discuss the occupational characteristic of a software engineer.
5. What are the attributes of good software?
6. What do you understand by methodology in software engineering?
7. Explain the concept of rules within the context of software engineering methods.
8. Describe a software process model.
9 What is software engineering?
10 Explain briefly the Sub-disciplines of Software engineering
11 Discuss the goals of software engineering
12 Discuss the principles of software engineering 13What is the situation of software
Engineering today?
14 Discuss the historical development of software engineering
15 What is the major cause software crisis 16 What is a
software crisis?
17 Discus how software crisis manifested itself in the early day of software engineering. 18
Explain the causes of software crisis.

22

You might also like