Difference between revisions of "Chapter 13: Computing Foundations"

From SWEBOK
Jump to: navigation, search
Line 133: Line 133:
 
Foundations KA is shown in Figure 13.1.}}
 
Foundations KA is shown in Figure 13.1.}}
 
[[File:Breakdown of Topics for the Computing Foundations KA.jpg|thumb|400px|frame|Figure 13.1: Breakdown of Topics for the Computing Foundations KA]]
 
[[File:Breakdown of Topics for the Computing Foundations KA.jpg|thumb|400px|frame|Figure 13.1: Breakdown of Topics for the Computing Foundations KA]]
 +
==Problem Solving Techniques==
 +
{{RightSection|{{referenceLink|number=2|parts=s3.2, c4}} {{referenceLink|number=3|parts=c5}}}}
 +
The concepts, notions, and terminology introduced
 +
here form an underlying basis for understanding
 +
the role and scope of problem solving techniques.
 +
===Definition of Problem Solving===
 +
Problem solving refers to the thinking and activities
 +
conducted to answer or derive a solution to
 +
a problem. There are many ways to approach a
 +
problem, and each way employs different tools
 +
and uses different processes. These different
 +
ways of approaching problems gradually expand
 +
and define themselves and finally give rise to different
 +
disciplines. For example, software engineering
 +
focuses on solving problems using computers
 +
and software.
 +
 +
While different problems warrant different
 +
solutions and may require different tools and
 +
processes, the methodology and techniques used
 +
in solving problems do follow some guidelines
 +
and can often be generalized as problem solving
 +
techniques. For example, a general guideline for
 +
solving a generic engineering problem is to use
 +
the three-step process given below [2*].
 +
 +
* Formulate the real problem.
 +
* Analyze the problem.
 +
* Design a solution search strategy.
 +
 +
===Formulating the Real Problem===
 +
Gerard Voland writes, “It is important to recognize
 +
that a specific problem should be formulated
 +
if one is to develop a specific solution” [2*].
 +
This formulation is called the problem statement,
 +
which explicitly specifies what both the problem
 +
and the desired outcome are.
 +
 +
Although there is no universal way of stating
 +
a problem, in general a problem should be
 +
expressed in such a way as to facilitate the development
 +
of solutions. Some general techniques
 +
to help one formulate the real problem include
 +
statement-restatement, determining the source
 +
and the cause, revising the statement, analyzing
 +
present and desired state, and using the fresh eye
 +
approach.
 +
 +
===Analyze the Problem===
 +
Once the problem statement is available, the next
 +
step is to analyze the problem statement or situation
 +
to help structure our search for a solution.
 +
Four types of analysis include ''situation analysis'',
 +
in which the most urgent or critical aspects of a
 +
situation are identified first; ''problem analysis'', in
 +
which the cause of the problem must be determined;
 +
''decision analysis'', in which the action(s)
 +
needed to correct the problem or eliminate its
 +
cause must be determined; and ''potential problem
 +
analysis'', in which the action(s) needed to prevent
 +
any reoccurrences of the problem or the development
 +
of new problems must be determined.

Revision as of 17:49, 27 August 2015

Acronyms
AOP
Aspect-Oriented Programming
ALU
Arithmetic and Logic Unit
API
Application Programming Interface
ATM
Asynchronous Transfer Mode
B/S
Browser-Server
CERT
Computer Emergency Response Team
COTS
Commercial Off-The-Shelf
CRUD
Create, Read, Update, Delete
C/S
Client-Server
CS
Computer Science
DBMS
Database Management System
FPU
Float Point Unit
I/O
Input and Output
ISA
Instruction Set Architecture
ISO
International Organization for Standardization
ISP
Internet Service Provider
LAN
Local Area Network
MUX
Multiplexer
NIC
Network Interface Card
OOP
Object-Oriented Programming
OS
Operating System
OSI
Open Systems Interconnection
PC
Personal Computer
PDA
Personal Digital Assistant
PPP
Point-to-Point Protocol
RFID
Radio Frequency Identification
RAM
Random Access Memory
ROM
Read Only Memory
SCSI
Small Computer System Interface
SQL
Structured Query Language
TCP
Transport Control Protocol
UDP
User Datagram Protocol
VPN
Virtual Private Network
WAN
Wide Area Network
Introduction

The scope of the Computing Foundations knowledge area (KA) encompasses the development and operational environment in which software evolves and executes. Because no software can exist in a vacuum or run without a computer, the core of such an environment is the computer and its various components. Knowledge about the computer and its underlying principles of hardware and software serves as a framework on which software engineering is anchored. Thus, all software engineers must have good understanding of the Computing Foundations KA.

It is generally accepted that software engineering builds on top of computer science. For example, “Software Engineering 2004: Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering” [1] clearly states, “One particularly important aspect is that software engineering builds on computer science and mathematics” (italics added).

Steve Tockey wrote in his book Return on Software:

Both computer science and software engineering deal with computers, computing, and software. The science of computing, as a body of knowledge, is at the core of both. … Software engineering is concerned with the application of computers, computing, and software to practical purposes, specifically the design, construction, and operation of efficient and economical software systems. Thus, at the core of software engineering is an understanding of computer science.

While few people will deny the role computer science plays in the development of software engineering both as a discipline and as a body of knowledge, the importance of computer science to software engineering cannot be overemphasized; thus, this Computing Foundations KA is being written.

The majority of topics discussed in the Computing Foundations KA are also topics of discussion in basic courses given in computer science undergraduate and graduate programs. Such courses include programming, data structure, algorithms, computer organization, operating systems, compilers, databases, networking, distributed systems, and so forth. Thus, when breaking down topics, it can be tempting to decompose the Computing Foundations KA according to these often-found divisions in relevant courses.

However, a purely course-based division of topics suffers serious drawbacks. For one, not all courses in computer science are related or equally important to software engineering. Thus, some topics that would otherwise be covered in a computer science course are not covered in this KA. For example, computer graphics—while an important course in a computer science degree program—is not included in this KA.

Second, some topics discussed in this guideline do not exist as standalone courses in undergraduate or graduate computer science programs. Consequently, such topics may not be adequately covered in a purely course-based breakdown. For example, abstraction is a topic incorporated into several different computer science courses; it is unclear which course abstraction should belong to in a course-based breakdown of topics.

The Computing Foundations KA is divided into seventeen different topics. A topic’s direct usefulness to software engineers is the criterion used for selecting topics for inclusion in this KA (see Figure 13.1). The advantage of this topic-based breakdown is its foundation on the belief that Computing Foundations— if it is to be grasped firmly—must be considered as a collection of logically connected topics undergirding software engineering in general and software construction in particular.

The Computing Foundations KA is related closely to the Software Design, Software Construction, Software Testing, Software Maintenance, Software Quality, and Mathematical Foundations KAs.

Breakdown of Topics for Computing Foundations

The breakdown of topics for the Computing Foundations KA is shown in Figure 13.1.

Figure 13.1: Breakdown of Topics for the Computing Foundations KA

1 Problem Solving Techniques

[2, s3.2, c4] [3, c5]

The concepts, notions, and terminology introduced here form an underlying basis for understanding the role and scope of problem solving techniques.

1.1 Definition of Problem Solving

Problem solving refers to the thinking and activities conducted to answer or derive a solution to a problem. There are many ways to approach a problem, and each way employs different tools and uses different processes. These different ways of approaching problems gradually expand and define themselves and finally give rise to different disciplines. For example, software engineering focuses on solving problems using computers and software.

While different problems warrant different solutions and may require different tools and processes, the methodology and techniques used in solving problems do follow some guidelines and can often be generalized as problem solving techniques. For example, a general guideline for solving a generic engineering problem is to use the three-step process given below [2*].

  • Formulate the real problem.
  • Analyze the problem.
  • Design a solution search strategy.

1.2 Formulating the Real Problem

Gerard Voland writes, “It is important to recognize that a specific problem should be formulated if one is to develop a specific solution” [2*]. This formulation is called the problem statement, which explicitly specifies what both the problem and the desired outcome are.

Although there is no universal way of stating a problem, in general a problem should be expressed in such a way as to facilitate the development of solutions. Some general techniques to help one formulate the real problem include statement-restatement, determining the source and the cause, revising the statement, analyzing present and desired state, and using the fresh eye approach.

1.3 Analyze the Problem

Once the problem statement is available, the next step is to analyze the problem statement or situation to help structure our search for a solution. Four types of analysis include situation analysis, in which the most urgent or critical aspects of a situation are identified first; problem analysis, in which the cause of the problem must be determined; decision analysis, in which the action(s) needed to correct the problem or eliminate its cause must be determined; and potential problem analysis, in which the action(s) needed to prevent any reoccurrences of the problem or the development of new problems must be determined.