In this Module, we look at
• what we mean by software engineering
• software engineering’s track record
• what we mean by “good software”
• why systems approach is important
• how software engineering has changed since
Typical formal definitions of software engineering are:
- "the application of a systematic, disciplined,
quantifiable approach to the development,
operation, and maintenance of software".
- "an engineering discipline that is concerned with
all aspects of software production”
- "the establishment and use of sound engineering
principles in order to economically obtain
that is reliable and works efficiently on real
- “ is a theory and practice that an individual or a
group of software developers or software
engineers having the knowledge of computer
computing to help solve problems especially
problems with which are related to a computer
Other meanings of software engineering:
an existing computer system".
As Dijkstra pointed out, the terms software
engineering and software engineer have, at times,
also been misused in a much wider sense,
particularly in America. The term has been used less
- as the informal contemporary term for the broad
range of activities that was formerly called
programming and systems analysis
- as the broad term for all aspects of the practice
computer programming, as opposed to the theory
of computer programming, which is called
- as the term science; the advocacy of a specific
approach to computer programming, one that urges that
be treated as an engineering discipline rather than an art
or a craft, and advocates the codification of recommended
practices in the form of software engineering
The discipline of software engineering
encompasses knowledge, tools, and methods for
defining software requirements, and performing
software design, software construction, software
testing, and software maintenance tasks.
Software engineering also draws on knowledge
from fields such as computer engineering, computer
science, management, mathematics, project
management, quality management, software
ergonomics, and systems engineering.
As of 2004, the U. S. Bureau of Labor Statistics
counts 760,840 software engineers holding jobs in
the U.S.; for comparison, in the U.S. there are some
1.4 million practitioners employed in all other
engineering disciplines combined. The term software
engineer is used very liberally in the corporate world.
Very few of the practicing software engineers
actually hold engineering degrees from accredited
There are estimated to be about 1.5 million
practitioners in the E.U., Asia, and elsewhere SE
pioneers include Barry Boehm, Fred Brooks, C. A. R.
Hoare, and David Parnas.
David Parnas has said that software engineering is, in fact, a
form of engineering.
Steve McConnell has said that it is not, but that it should be.
Donald Knuth has said that programming is an art and a
The U.S. Bureau of Labor Statistics classifies computer
software engineers as a subcategory of "computer
specialists", along with occupations such as computer
scientist, programmer, and network administrator. The BLS
classifies all other engineering disciplines, including computer
hardware engineers, as "engineers".
The U.K. has seen the alignment of the Information
Technology Professional and the Engineering
Professionals. Software engineering in Canada has
seen some contests in the courts over the use of the
title "Software Engineer
Software is often found in products and
situations where very high reliability is expected,
even under demanding conditions, such as
monitoring and controlling nuclear power plants, or
keeping a modern airliner aloft. Such applications
contain millions of lines of code, making them
comparable in complexity to the most complex
modern machines. For example, a modern airliner
has several million physical parts (and the space
shuttle about ten million parts), while the software
for such an airliner can run to 4 million lines of
Software engineers advocate many different
technologies and practices, with much
disagreement, which has originated a debate that
has gone on for over 60 years. Software engineers
use a wide variety of technologies: compilers, code
repositories, text editors. They also use a wide
variety of practices to carry out and coordinate their
efforts: pair programming, code reviews and daily
stand up meetings. In spite of the enormous
economic growth and productivity gains enabled by
software, persistent complaints about the quality of
Most software engineers work as employees or
contractors. Software engineers work with
businesses, government agencies (civilian or
military), and non-profit organizations. Some
software engineers work for themselves as
freelancers. Some organizations have specialists to
perform each of the tasks in the software
development process. Other organizations required
software engineers to do many or all of them. In
large projects, people may specialize in only one
role. In small projects, people may fill several or all
roles at the same time.
Specializations include: in industry (analysts,
architects, developers, testers, technical support,
managers) and in academia (educators, researchers
There is considerable debate over the future
employment prospects for Software Engineers and
other IT Professionals. For example, an online
futures market called the
Future of IT Jobs in America attempts to answer
whether there will be more IT jobs, including
software engineers, in 2012 than there were in 2002
Certification of software engineers is a
contentious issue. Some see it as a tool to improve
Most successful certification programs in the
software industry are oriented toward specific
technologies, and are managed by the vendors of
these technologies. These certification programs are
tailored to the institutions that would employ people
who use these technologies.
The ACM had a professional certification
program in the early 1980s, which was discontinued
due to lack of interest. As of 2006, the IEEE had
certified over 575 software professionals.
In Canada the
Canadian Information Processing Society has
developed a legally recognized professional
certification called Information Systems Professional
Many students in the developed world have
avoided degrees related to software engineering
because of the fear of offshore outsourcing
(importing software products or services from other
countries) and of being displaced by
foreign visa workers. Although government statistics
do not currently show a threat to software
engineering itself; a related career,
computer programming does appear to have been
affected. Often one is expected to start out as a
computer programmer before being promoted to
Thus, the career path to software engineering may
be rough, especially during recessions.
Some career counselors suggest a student
also focus on "people skills" and business skills
rather than purely technical skills because such "soft
skills" are allegedly more difficult to offshore. It is
the quasi-management aspects of software
engineering that appear to be what has kept it from
being impacted by globalization.
Software engineering has evolved steadily from
its founding days in the 1940s until today in the
2000s. Applications have evolved continuously.
- The ongoing goal to improve technologies and
practices, seeks to improve the productivity of
practitioners and the quality of applications to
- Hardware vendors gave away systems software
for free as hardware could not be sold without
software. A few companies sold the service of
building custom software but no software
companies were selling packaged software.
1945 TO 1965: THE ORIGINS
- The term software engineering first appeared in
the late 1950s and early 1960s.
- NATO Science Committee sponsored conferences
in 1968 and 1969 that marked the official start of
the profession of SE.
1965 TO 1985: THE SOFTWARE CRISIS
- The software crisis was originally defined in terms
of productivity, but evolved to emphasize quality.
- Some used the term software crisis to refer to
their inability to hire enough qualified
programmers causing over budget and schedules,
property damage and loss of life.
Cost and Budget Overruns:
The OS/360 operating system was a classic
example. This decade-long] project from the 1960s
eventually produced one of the most complex
software systems at the time. OS/360 was one of
the first large (1000 programmers) software
projects. Fred Brooks claims in
The Mythical Man Month that he made a multi-
million dollar mistake of not developing a coherent
architecture before starting development.
Software defects can cause 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
catastrophically that they administered lethal doses
of radiation to patients.
1985 TO 1989: NO SILVER BULLET
- From 1970s to 1990s researchers and companies
produced software tools as a “silver bullet” to
solve the software crisis.
Especially emphasized were tools:
object-oriented programming, CASE tools, Ada, Java
, documentation, standards, and
Unified Modeling Language were touted as silver
Some pundits argued that the software crisis was due
to the lack of discipline of programmers.
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
Many advocated the use of defined processes and
methodologies like the Capability Maturity Model.
This led to work on a code of ethics, licenses, and
1990 TO 1999: THE INFORMATION
- Rise of the Internet
- The growth of Browser usage running on the
- Search engines system
- Human multi-language translation system
2000 TO PRESENT: LIGHTWEIGHT
- With the expanding demand for software in many
smaller organizations, the need for inexpensive
software solutions led to the growth of simpler,
faster methodologies that developed running
software, from requirements to deployment,
quicker & easier.
- The use of rapid-prototyping evolved to entire
lightweight methodologies, such as Extreme
Programming (XP), which attempted to simplify
many areas of software engineering, including
requirements gathering and reliability testing for
the growing, vast number of small software
• Emergence as a Profession
• Role of Women
• Processes and Methodology
• Cost of Hardware
Aspects help software engineers deal with -
ilities by providing tools to add or remove boilerplate
code from many areas in the source code. Aspects
describe how all objects or functions should behave
in particular circumstances. For example, aspects
can add debugging, logging, or locking control into
all objects of particular types. Researchers are
currently working to understand how to use aspects
to design general-purpose code. Related concepts
include generative programming and templates.
Agile software development guides
software development projects that evolve rapidly
with changing expectations and competitive
markets. Proponents of this method believe that
heavy, document-driven processes (like TickIT, CMM
and ISO 9000) are fading in importance. Some
people believe that companies and agencies export
many of the jobs that can be guided by heavy-
weight processes. Related concepts include
Extreme Programming and
Lean software development
Experimental software engineering is a branch
of software engineering interested in devising
experiments on software, in collecting data from the
experiments, and in devising laws and theories from
this data. Proponents of this method advocate that
the nature of software is such that we can advance
the knowledge on software through experiments
Model Driven Software Development uses
(both textual and graphical) models as primary
development artifacts. By means of
model transformation and code generation a part or
complete applications are generated.
SOFTWARE PRODUCT LINES
Software Product Lines is a systematic way to
produce families of software systems, instead of
creating a succession of completely individual
products. This method emphasizes extensive,
systematic, formal code reuse, to try to industrialize
the software development process.
In 2006, Money Magazine and Salary.com
rated software engineering as the best job in
America in terms of growth, pay, stress levels,
flexibility in hours and working environment,
creativity, and how easy it is to enter and advance
in the field.
The biggest and oldest conference devoted to
software engineering is the International Conference
on Software Engineering. This conference meets
every year to discuss improvements in research,
education, and practice.
The Annual International Computer Software
and Applications Conference was first held in
Chicago in 1977 and is designated as the IEEE
Computer Society signature conference on software
technology and applications.
The European Software Engineering Conference.
The Foundations of Software Engineering
conference is held every year, alternating between
Europe and North America. It emphasizes
theoretical and foundational issues.
Conferences dedicated to inform undergraduate
students like the annual
Canadian University Software Engineering Conference
are also very promising for the future generation.
The annual Software Engineering Process Group
conference, sponsored by the Carnegie Mellon
Software Engineering Institute (SEI), is a conference
and exhibit showcase for systems and software
engineering professionals. The four-day event
emphasizes systematic improvement of people,
processes, and technology.
The annual Canadian information technology, data
processing and software engineering symposium,
sponsored by the
Canadian Information Processing Society. First held
International Conference on Accelerator and Large
Experimental Physics Control Systems Conference.
Biennial conference covering software engineering
for large scale scientific control systems. First held
Asia Pacific Software Engineering Conference.
National Software Engineering Symposium (in
Turkish: Ulusal Yazilim Muhendisligi Sempozyumu)
(not available in English). Biennial symposium first
held in İzmir, Turkey in 2003.
• Association for Computing Machinery (ACM)
• Australian Computer Society (ACS)
• British Computer Society (BCS)
• Canadian Information Processing Society (CIPS) -
Information Systems Professional certification.
• IEEE Computer Society
• Lero, the Irish Software Engineering Research Centre
• Russian Software Developers Association (RUSSOFT)
• Software Engineering Institute (SEI)
• Software Industry Professionals
• The Safety and Reliability Society
Software engineers shall commit
themselves to making the analysis, specification,
design, development, testing and maintenance
of software a beneficial and respected
profession. In accordance with their commitment
to the health, safety and welfare of the public,
software engineers shall adhere to the following
Software engineers shall act consistently with the
2. CLIENT AND EMPLOYER
Software engineers shall act in a manner that is in
the best interests of their client and employer
consistent with the public interest.
Software engineers shall ensure that their
products and related modifications meet the
highest professional standards possible.
Software engineers shall maintain integrity and
independence in their professional judgment.
Software engineering managers and leaders shall
subscribe to and promote an ethical approach to
the management of software development and
Software engineers shall advance the integrity
and reputation of the profession consistent with
the public interest.
Software engineers shall be fair to and supportive
of their colleagues.
Software engineers shall participate in lifelong
learning regarding the practice of their profession
and shall promote an ethical approach to the
practice of the profession.
Problem solving technique must have two parts:
Solving problems must begin investigating it
by analyzing it, that it, by breaking the problem into
pieces to determine its nature
Synthesis is putting together of a large
structure from small building blocks.
To use efficient and productive approaches to
generate effective solutions to problems, SE may
employ the use of:
Method or technique is a formal procedure for
producing some result.
Paradigm represents a particular approach or
philosophy for building software.
Tool is the instrument or automated system
for accomplishing something in a better way. The
“BETTER WAY” can mean that the tool makes us
accurate, more efficient, or more productive or that
it enhances the quality of the resulting product.
A combination of tools and techniques that, in
concert, produce a particular product.
QUALITY – degree of excellence; high standard
Five different perspectives of quality (Garvin 1984)
1. The Transcendental View
Where the quality is something we can
recognize but not define
2. The User View
Where the quality is fitness for purpose
3. The Manufacturing View
Where the quality is conformance to the
4. The Product View
Where the quality is tied to inherent product
5. The Value-Based View
Where the quality depends on the amount the
customer is willing to pay for it
Software Quality must be consider in at least 3 ways
1. QUALITY OF THE PRODUCT
- Users judge software to be of high quality if it is
easy to use and easy to learn
- number of failures and type of failures
- must be judge according who are designing and
writing the code and who maintain the program
after they are written
2. THE QUALITY OF THE PROCESS
- One of the advantages of modeling the process is
we can examine it and look for ways to improve
- “Where and when are we likely to find a
particular kind of fault?
- “How can we find faults earlier in the
- “How can we build in fault tolerance so that we
minimize the like hood that a fault became a
- “Are there alternative activities that can make
our process more effective or efficient at
3. THE QUALITY IN THE CONTEXT OF BUSINESS
- Quality is viewed in terms of the products and
services being provided by the business in which
the software is embedded.
- Technical value of the product rather than the
- Improving technical quality will automatically
translate into business value.
- Return of Investment (ROI) derived from financial
community, describes the investment in terms of
what is given up for other purposes. That is, the
“investment must not only return the original
capital but enough more to at least equal what the
funds would have earn elsewhere, plus the
allowance of risk.”
- ROI includes training, schedule, risk, quality,
productivity, process, customer, cost and
- ROI Business models such as
“Accounting-Rate of Return Model”,
“Discounted Cash Flow Model”
• Boundaries – what is included in the project and
what is not.
• Elements of a System
1. Activities are something that happens in the
2. Objects or entities are the element involve
in the activities
4. The System Boundary
• System is a collection of things, a set of entities, a
set of activities, a description of relationships
among entities and activity and a definition of a
• Interrelated System
• Incremental Development Approach may
incorporated a series of stages, each of which frees
the previous system from another such constraint
• Two different ways to view the system
Static view tells us how the system is
Dynamic view shows us how the system
is changing into what it will eventually
• A popular collection of programming tools is called
the Programmer’s Workbench
• Software projects progress in a way similar to the
Building a House Building a System
Determining & analyzing Requirement analysis &
the requirements definition
Producing & documenting System Design
the overall design of the
Producing detailed Program Design
specifications of the house
Identifying & designing Writing the programs
the components (Program implementation)
Building each component Unit Testing / Module
of the House Testing
Building a House Building a System
Testing each component Integration Testing
of the house
Integrating the System Testing
Making final modifications System Delivery
after the residents have
Continuing maintenance Maintenance
by the residents of the