You are on page 1of 10

Introduction

When dependency on software and computers became more important, software grew in size and
became a necessity for businesses and users all over the world. In the last 30 years, we have seen
an unparalleled explosion in the amount of software produced and used by our modern society.
There is now a need to set concrete objectives (or functional requirements), predict necessary
resources (like cost estimates) to attain those objectives, and manage customers' expectations. 

As you review the material in this unit, compare and contrast software engineering with
computer science. These two disciplines are closely related, but they have some differences. As
you work through this unit, spend some time reviewing the three commonly used methodologies
in software engineering: data-oriented, process-oriented, and object-oriented. You will the
central theme of these three methodologies repeated in software requirements and analysis as
well as software design.

Intended Learning Outcomes

 Upon successful completion of this unit, you will be able to:

 explain and define software engineering;

 identify the differences between software engineering and computer science;

 categorize software by characteristics, responsiveness, and type;

 describe the attributes of good software;

 interpret the three major methodologies in software engineering; and

 show an understanding of software engineering code of ethics in professional


practice.

Discussion

Notable definitions of software engineering include:

 "the systematic application of scientific and technological knowledge, methods, and


experience to the design, implementation, testing, and documentation of software"—The
Bureau of Labor Statistics—IEEE Systems and software engineering – Vocabulary
 "The application of a systematic, disciplined, quantifiable approach to the development,
operation, and maintenance of software"—IEEE Standard Glossary of Software Engineering
Terminology
 "an engineering discipline that is concerned with all aspects of software production"—Ian
Sommerville
 "the establishment and use of sound engineering principles in order to economically
obtain software that is reliable and works efficiently on real machines"—Fritz Bauer
 "a branch of computer science that deals with the design, implementation, and
maintenance of complex computer programs"—Merriam-Webster
The term has also been used less formally:

 as the informal contemporary term for the broad range of activities that were formerly
called computer programming and systems analysis;
 as the broad term for all aspects of the practice of computer programming, as opposed to
the theory of computer programming, which is formally studied as a sub-discipline
of computer science;
 as the term embodying the advocacy of a specific approach to computer programming,
one that urges that it be treated as an engineering discipline rather than an art or a craft, and
advocates the codification of recommended practices.

Differences between Software Engineering and Computer Science


What is software engineering?

Software engineering applies the standards and principles of engineering to design, develop,
maintain, test and evaluate computer software. A software engineer may also be referred to as a
computer programmer, software designer or software developer as the nature of software
engineering can require knowledge of programming languages, principles of software design and
building.

What is computer science?

Computer science encompasses the study of computers and computational systems. Computer
scientists may generally theorize and calculate aspects of software and software systems in the
design and development phases.

Additionally, computer scientists may study and work in areas of the field that focus on artificial
and machine intelligence, computer networks, security networks and monitoring systems,
database systems, user interaction, mathematical analysis, programming languages and theories
regarding computing and processes. While computer scientists may also study principles of
software engineering, this field of study is typically the only shared characteristic between
computer science and software engineering.
Key differences between computer science and software engineering

Even though there may be some shared qualities between computer science and software
engineering, there are a variety of key differences that make these two career fields separate from
one another. One of the biggest differences lies in the roles of these two positions. While
software engineers might develop, build, test and evaluate software and its applications,
computer scientists use computer languages, statistics and other mathematics to theorize on the
most effective ways to develop, program and apply software. The following aspects are other
ways that these two professions differ:

1. Core educational studies


Computer science and software engineering may share some overlapping core studies, however,
when studying computer science students may typically complete courses that focus on the
computing, analysis, storage and application of data and data systems of computer programs and
software. Software engineering focuses on taking these principles and applying them to the
product design, interplay, performance and other functional aspects of computer programs.
For instance, the key difference here is that computer science education program focuses on the
science behind making computers work, while software engineering applies those scientific and
mathematical principles to the building, designing and implementation of hardware and software
programs.
2. Career paths
Another key difference between a computer science degree and a software engineering degree is
the variety of options in career paths. Generally, computer science degrees may offer candidates
a broad range of job options in the informational technology industry, from computer
programming for website design and working in IT support roles to working as a game
developer. Conversely, a degree in software engineering can narrow a candidate's career path to
specialized roles in corporations, companies and even mid-sized businesses developing and
building applications and software programs.
3. Common tasks in the job
Typically, a computer scientist may complete daily tasks that analyze and monitor the processes
of new and developing computer applications, either working for a software firm or
independently contracting with different companies. Computer scientists may be responsible for
maintaining their company's security networks, data systems or other computing systems that the
business relies on to operate. A software engineer might be an employee of a similar company,
but may work to develop and design the specific software programs their organization might
need for its operations.
4. Hardware and software interaction
Computer science may deal with the interaction between software programs with computer
hardware. For instance, a computer scientist might determine ways to create software programs
that are compatible with computer hardware. A software engineer, however, deals only with
software programs, specifically creating, maintaining, testing and producing software products.
5. Software design
Software design is another aspect where computer science and software engineering can differ.
When approaching software design, a computer scientist may typically work with theories and
algorithms for how a program works, how it may be best designed and how to apply
programming languages to the application. When software engineers work with software design,
they may use a computer scientist's information and analyses to design the framework to build a
specific program.
Furthermore, a software engineer can be given specific program requirements to use when
building a software design, whereas a computer scientist works with the computer languages and
mathematical calculations to make decisions about how a program should be designed.
6. Programming and development
Another difference between computer science and software engineering is the application of
software programming and development. Computer science will focus on computing and
calculating the best ways to program software as well as finding calculations that allow engineers
and developers to build software programs that meet product requirements. Software engineers
essentially use the analysis and outlines from computer scientists to aid in the full development
and construction of new frameworks and software programs.
7. Engineering concepts
While computer science majors may study aspects of mathematical engineering as it applies to
computers and computing systems, engineering principles and concepts are generally paired with
software engineering studies. Computer science may require knowledge of engineering
principles, such as building entirely new frameworks for applications to run off of, however,
software engineering is where real-world engineering concepts are applied.
8. Scientific theories
Computer science is also different from software engineering because it focuses heavily on
scientific theories behind computer operations, computing and data systems as well as how
software is designed. Software engineering, however, can use these theories to aid in the design
and processes of building frameworks, hardware and software programs and applications. So
while computer science studies and develops theories behind computer operations, software
engineering applies these theories to build real-world computer applications.
9. Product management
Computer science may typically focus on the complexity and algorithms of software programs as
well as other analytics like the computational science of programming, structures of visuals and
graphics and user interaction. The approach an engineer takes in product management includes
the design process, application, evaluation, automation testing and quality assurance checks of a
software product.
10. Computer coding
Computer science and software engineering may both focus on computer coding and languages,
however, software engineering may focus more heavily on learning coding to use it when
developing and building software. Computer scientist may focus on coding as it relates to
computer languages, and they may also use various computer coding to calculate compatibility
between hardware and software applications.

APPLICATIONS
Software engineering is the building of applications. An application is the set of programs2 that
automate some business task. Businesses are made up of functions such as marketing,
accounting, manufacturing, and personnel. Each function can be divided into work processes for
which it is responsible. For instance, marketing is responsible for sales, advertising, and new
product development. Each process can be separated into its specific tasks. Sales, for instance,
requires maintaining customer relations, order processing, and customer service. Applications
could support each task individually. Conversely, one marketing application could perform all
tasks, integrating the information they have in common. All applications have some common and
some unique features. One problem is that there is no agreed upon way to discuss these
similarities and differences. In this book, we present three dimensions of applications to simplify
and clarify this discussion. The dimensions of applications are characteristics, responsiveness,
and type. Characteristics are common to all applications and include data, processes, constraints,
and interfaces. The section on application characteristics is first and should be a review.
Responsiveness defines the underlying time orientation of the application as batch, on-line, or
real-time. By knowing the time orientation of an application, we can define minimal technology
required to support the application. Type defines the business orientation of the application as
transactional, query, decision, or intelligent.
Application Characteristics
This section is about shared characteristics of applications: data, processes, constraints, and
interfaces).
All applications:
(1) act on data and require data input, output, storage and retrieval;
(2) imbed commands that transform data from one state to another state based on and constrained
by 2 A program is composed of instructions that perform some well-defined task. Sometimes
there are many tasks, composed of millions of instructions in an application. When there are
many tasks, they are split into programs. This decomposition into subtasks which relate to
programs is one topic in the chapters on application design. Applications 5 business rules; and
(3) have some human interfaces and may have one or more computer interfaces. Application
types vary in the extent to which these characteristics are known, defined, and understood. Each
of the characteristics is discussed below. Since this is review, if you can define the terms in bold
print, you might skip to the next section: Application Responsiveness.
Application Responsiveness
Application responsiveness is how long it takes the system to act on and respond to user actions.
Responsiveness of an application reflects the fundamental design approach as batch-oriented, on-
line, or real-time. Each of these approaches is defined in this section. Of course, in the real
world, any combination or permutation of these approaches are used in building applications.
Most applications designed in the 1990s are on-line with some batch processing. In the 21st
century, on-line applications will give way to more real-time applications.
Types of Applications
There are four types of business applications: transaction, data analysis, decision support, and
expert applications. Today, all four types are usually online although the application may use any
(or all) of the responsiveness types, even on a single application. In addition, a fifth type of
application: embedded, is defined briefly to distinguish computer science-software engineering
from IS-software engineering.
1. Transaction-oriented applications, also known as transaction processing systems
(TPS), support the day-to-day operation of a business and include order processing,
inventory management, budgeting, purchasing, payables, accounting, receivables,
payroll, and personnel. They are characterized as applications for which the requirements,
the data, and the processing are generally known and wellstructured.6 By known, we
mean that the function is repetitious, familiar and unambiguous. By well structured, we
mean that the problem is able to be defined completely and without ambiguity. The
requirements are identifiable by a development team.
2. Data analysis applications support problem solving using data that are accessible only
in read-only mode. Data analysis applications are also known as query applications. A
query is some question asked of the data. SQL, the standard query language for database
access, poses questions in such a way that the user asks what is desired but need not
know how to get it. The computer software figures out the optimal access and processing
methods, and performs the operations it selects.
3. Decision support applications (DSS) seek to identify and solve problems. The
difference between decision support and query applications is that query applications are
used by professionals and managers to select and summarize historical data like the
example above, while DSSs are used by professionals and managers to perform what-if
analysis, identify trends, or perform mathematical/statistical analysis of data to solve
unstructured problems. Data for DSSs usually are generated by transaction applications.
 Unstructured problems are ones for which not all information is known,
and if it is known, the users may not know all of the relationships between
data. An example of a structured problem is to answer the question: "What
is the cost of a 5% salary increase?"
 Executive information systems (EIS) are a spinoff from DSS. EIS
applications support executive decision making and provide automated
environmental scanning capabilities.
 Group decision support systems (GDSS) are a special type of DSS
applications. GDSS provide an historical memory of the decision process
in support of groups of decision makers who might be geographically
dispersed.

4. Expert systems applications (ES) are computer applications that automate the
knowledge and reasoning capabilities of one or more experts in a specific domain. ESs
analyze characteristics of a situation to give advice, recommend actions, or draw
conclusions by following automated reasoning processes. The four major components of
an ES are knowledge acquisition subsystem, the knowledge base, the inference engine (or
rule base as it is sometimes called), and explanation subsystem. Each of these
components are briefly explained here.
Software Quality
Quality models According to Wallmüller (1994) "one of the oldest and most frequently applied
[software quality] models is that of McCall et al. (1979). Other models such as that of Murine &
Carpenter (1984) or that of NEC (Azuma 1987) are derived from it. McCall's model is used in
the United States for very large projects in the military, space and public domain. It was
developed in 1976-7 by the US Airforce Electronic System Division (ESD), the Rome Air
Development Centre (RADC) and General Electric (GE) with the aim of improving the quality
of software products. One explicit aim was to make quality measurable. McCall started with a
volume of 55 quality characteristics which have an important influence on quality, and called
them "factors". For reasons of simplicity, McCall then reduced the number of characteristics to
the following eleven:
 efficiency
 integrity
 reliability
 usability
 accuracy
 maintainability
 testability
 flexibility
 interface
 facility
 re-usability
 transferability
". A second set of quality factors was defined by Boëhm (1978). Authors, too, have added to
McCall's original list to reflect recent thinking. Ghezzi et al. (1991) list sixteen factors. A full list
of both models is set out in table 2.1 Much has happened on the technology front since 1977 and
many authors have redefined some of the eleven factors while others have added even more to
better reflect recent advances in the technology. One commercial model taking this approach is
the SPARDAT quality model from Germany which classifies three significant characteristics -
applicability, maintainability and 8 adaptability. These characteristics are further sub-divided
giving twenty quality factors in all. This model was created for software development in the
banking environment.

The three major methodologies in software engineering


1. Process methodologies take a structured, top-down approach to evaluating problem
processes and the data flows with which they are connected. Process methods
developed during the 1970s in response to increasing complexity of application
processing, increased complexity of operating system environments (e.g., the IBM 360
generation of hardware), and the introduction of disk file processing with sequential,
indexed, and direct access methods.
2. Data methodologies begin analysis activities by first evaluating data and their
relationships to determine the underlying data architecture. When the data architecture
is defined, outputs are mapped onto inputs to determine processing requirements. The
most used data methodology is information engineering (IE) which was described by
Finkelstein and Martin.15 Documentation produced by the data approach discussed in
this text is that of information engineering.
3. Object-oriented methodology is an approach to system life-cycle development that
takes a top-down view of data objects, their allowable actions, and the underlying
communication requirement to define a system architecture. The data and action
components are encapsulated, that is, they are combined together, to form abstract
data types. Encapsulation means that if I know what data I want, I also know the
allowable processes against that data.

Software engineering code of ethics in professional practice.

By chance I have read this nice classical document any honest engineer must keep in mind. It
was written by the ACM (Association for Computing Machinery) on software engineering ethics
but I am afraid it can be extended to many other professional practices.

The short version is like this,

1. PUBLIC - Software engineers shall act consistently with the public interest.
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.
3. PRODUCT - Software engineers shall ensure that their products and related modifications
meet the highest professional standards possible.
4. JUDGMENT - Software engineers shall maintain integrity and independence in their
professional judgment.
5. MANAGEMENT - Software engineering managers and leaders shall subscribe to and
promote an ethical approach to the management of software development and maintenance.
6. PROFESSION - Software engineers shall advance the integrity and reputation of the
profession consistent with the public interest.
7. COLLEAGUES - Software engineers shall be fair to and supportive of their colleagues.
8. SELF - 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.

Activity
1. Define the following terms:
 application characteristics
 batch application
 constraint
 data methodology
 meta-data object
 on-line application
 project life cycle
 proto typing
 real-time application
 semantic methodology
 time constraint
 unstructured problem validation
2. Define how each methodology’s history is affected by technology.
3. What are the four application types and how do they differ?
4. What are the subtypes of decision support systems? How do they differ?
5. What is computer-aided software engineering?
6. What is an application?
7. How do real-time and on-line applications differ?
8. What is the range of artificial intelligence applications? What area do most expert systems
cover today?
9. What is the starting point for analysis in a process methodology? for a data methodology?
10. Why is it important to know the orientation of a methodology?
11. If most companies do not use methodologies, why should you learn how to use them?
12. Is some methodology better than none? Is some life cycle better than none? Discuss the
pros and cons of using and not using methodologies and life cycles.
13. What are the components of a feasibility study? What type of analysis is performed for
each?
14. What are the phases of a sequential development life cycle? How do they vary when you
use prototyping?
15. What are the five types of constraints? Give an example of each.

Exercises
1. Develop a table of application characteristics down the rows in the first column, and the
application responsiveness levels across the columns. How does each application
characteristic differ for each level of responsiveness?
2. Develop a table of application characteristics down the rows in the first column, and the
methodology classes across the columns. Begin to develop a comparative table of the way
each methodology prescribes documenting the requirements for each application
characteristic. You will not be able to complete the table at this point.

Suggested Readings

Sue Conger's The New Software Engineering: "Overview of Software Engineering"File

Jared King's "The History of Software"

The Scientific World Journal: Isabel M. del Águila et al.'s "Milestones in Software
Engineering and Knowledge Engineering History"URL

Tony Targonski's "6 Degrees of Computer Science"URL

Sue Conger's The New Software Engineering: "Applications"File

Dublin Institute of Technology: Ronan Fitzpatrick's "Software Quality: Definitions and


Strategic Issues"URL

Sue Conger's The New Software Engineering: "Professionalism and Ethics"File

You might also like