CSC 407 Soft Eng Chapt 1 To 3
CSC 407 Soft Eng Chapt 1 To 3
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
1
(i) Operating system (O/S)
(ii) Language translators
(iii) Utility program
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.
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. 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.
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.
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.
(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.
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.
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.
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.
(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.
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.
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
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
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.
• 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.
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.
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.
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.
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.
• 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 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.
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.
• 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".
• Uniformity: The notation and use of comments, specific keywords and formatting is
consistent and free from unnecessary differences in other parts of the code.
• 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.
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
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).
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.
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.
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.
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