<< Chapter < Page
  Software engineering     Page 1 / 15
Chapter >> Page >
This module provides an introduction to software testing. Topics covered include basic definitions of testing, validation and verification; the levels of testing from unit testing through to acceptance testing; the relationship with requirements and design specifications; and test documentation.

Introduction

Software Testing is the process of executing a program or system with the intent of finding errors. Or, it involves any activity aimed at evaluating an attribute or capability of a program or system and determining that it meets its required results. Software is not unlike other physical processes where inputs are received and outputs are produced. Where software differs is in the manner in which it fails. Most physical systems fail in a fixed (and reasonably small) set of ways. By contrast, software can fail in many bizarre ways. Detecting all of the different failure modes for software is generally infeasible.

Unlike most physical systems, most of the defects in software are design errors, not manufacturing defects. Software does not suffer from corrosion, wear-and-tear, generally it will not change until upgrades, or until obsolescence. So once the software is shipped, the design defects, or bugs, will be buried in and remain latent until activation.

Software bugs will almost always exist in any software module with moderate size: not because programmers are careless or irresponsible, but because the complexity of software is generally intractable, and humans have only limited ability to manage complexity. It is also true that for any complex systems, design defects can never be completely ruled out.

Discovering the design defects in software, is equally difficult, for the same reason of complexity. Because software and any digital systems are not continuous, testing boundary values are not sufficient to guarantee correctness. All the possible values need to be tested and verified, but complete testing is infeasible. Exhaustively testing a simple program to add only two integer inputs of 32-bits (yielding 2^64 distinct test cases) would take hundreds of years, even if tests were performed at a rate of thousands per second. Obviously, for a realistic software module, the complexity can be far beyond the example mentioned here. If inputs from the real world are involved, the problem will get worse, because timing and unpredictable environmental effects and human interactions are all possible input parameters under consideration.

A further complication has to do with the dynamic nature of programs. If a failure occurs during preliminary testing and the code is changed, the software may now work for a test case that it didn't work for previously. But its behavior on pre-error test cases that it passed before can no longer be guaranteed. To account for this possibility, testing should be restarted. The expense of doing this is often prohibitive.

An interesting analogy parallels the difficulty in software testing with the pesticide (known as the Pesticide Paradox): Every method you use to prevent or find bugs leaves a residue of subtler bugs against which those methods are ineffectual. But this alone will not guarantee to make the software better, because the Complexity Barrier principle states: Software complexity (and therefore that of bugs) grows to the limits of our ability to manage that complexity. By eliminating the (previous) easy bugs you allowed another escalation of features and complexity, but his time you have subtler bugs to face, just to retain the reliability you had before. Society seems to be unwilling to limit complexity because we all want that extra bell, whistle, and feature interaction. Thus, our users always push us to the complexity barrier and how close we can approach that barrier is largely determined by the strength of the techniques we can wield against ever more complex and subtle bugs.

Questions & Answers

how to start making a software?
Jerry Reply
books or teacher
Louis
both of
Hemant
both
ben
i prefer books and a reference teacher on side im self taught self learn everything
Louis
time is your best friend
Louis
I want learn more as well
Ogunrinde
well honestly it would be too large to explain everything in chat but, pick the programming language of choice your most comfortable with, learn that language, make it yours, use it as a primary language to learn in parallel any other language of object oriented programming,
Louis
also it wouldn't hurt to have a basic background in math
Louis
but be a scientist behind the machine(Computer)
Louis
have math be your way of translation of human to computer interaction because you can solve any problem in the universe with mathematics
Louis
good to know discrete topics embedded systems, electrical engineering
Louis
doesn't hurt to have a buddy to team up on project while your asleep to keep progressing
Louis
(Important!..) have real data to work on, the reason is because there have to be some goal to be achieved at some point.
Louis
Be alittle greedy to learn any and all about any language you use.
Louis
Another important thing is not to rush through learning
Louis
once you learn a concept try teaching the concept to someone else who is as interested as you are, that way. the concept will be stuck concretely in your mind.
Louis
slow but sure please guys.education is not like food.
Emmanuel
if you like graphics and games you can use a language that have graphics libraries such as C++, Python, or Java as an example
Louis
who can tell Why software is more important in computer science
Emmanuel
don't just learn alittle want the whole thing and want to know everything at your finger tips
Louis
grasp
Louis
because the hardware and software is useful depends on how useful your goal is
Louis
graphics is not about database management system.c++ is about programming.
Emmanuel
be an android who's drug is "addicted to information" related to the field.
Louis
and in need of the most complex algorithm update
Louis
learn console applications
Louis
how does your languge relate to databases
Louis
and web programming
Louis
i know just throwing some things your way to open mind
Louis
im certi at c++
Louis
it is a general programming language used to build many infrastructure
Louis
including database web and many other soft ware frameworks
Louis
excellent
Ogunrinde
Thanks
Louis
Suppose we are faced with developing a system that we expect to have 100000LOC. Compute the effort and the effort development time for each of the three development modes i.e. Organic, semi - detached and embedded .
yukta Reply
c++ or python or java
Louis
Discuss multi threading as used in windows, Linux and Unix
James Reply
what is software ?
Chirag Reply
Software is a general term for the various kinds of programs used to operate computers and related devices...
amjad
what is ergonomics.
amjad
er·go·nom·ics ˌərɡəˈnämiks/ noun the study of people's efficiency in their working environment
Louis
what is software integration?how can you integrate two different softwares with one single module?
strings Reply
Either type casting or template rogramming through STL
Louis
use c++
Louis
what is the STL?
abdo
STANDARD TEMPLATE LIBRARY
Louis
thanks louis
abdo
your welcome my friend
Louis
I have another question guy's.What's the HTML?
Zuheyp Reply
An HTML is  a standardized system for tagging text files to achieve font, colour, graphic, and hyperlink effects on World Wide Web pages.
Hemant
it is also a computer language devised to allow website creation
Hemant
you're clever Man
Zuheyp
i have a c++ question
Louis
C++ is a general-purpose, case-sensitive, free-form programming language that supports procedural, object-oriented, and generic programming. C++ is regarded as a middle-level language, as it comprises a combination of both high-level and low-level language features. C++ was deve
Zuheyp
what's the relationship Design Define Debug Development Development
Zuheyp Reply
sorry question is confusing
Louis
ok
Zuheyp
Define attached Design attached Development attached Debug attached Deployment attached Define
Zuheyp
Attach and deploy components to environments instead of directly to an Atom. Components can be attached and deployed to different environments with unique build versions and can include different deploy-time settings.
Hemant
is it same?
Zuheyp
and debug:If your app is already running on your device, you can start debugging without restarting 
Hemant
yeah that's cool
Zuheyp
Am mean that's right
Zuheyp
and select the debug target
Hemant
What is C language?
Bashir Reply
short note on software engineering
prachi Reply
am interested
marvellous
Explain human computer interaction
amjad
AI
Louis
Human computer interaction is the study of how people interact with computers and to what extent computers are or are not developed for successful interaction with human beings. 
Hemant
human needs for the computer[stated]
Louis
AI=Artificial Intelligence
Louis
all explained abstractingly
Louis
Please give me a Standard definition of the word *software*
marvellous
collection of program is called software
Hemant
what is sowftware?
rana Reply
please correct the spellings of software
majid
kk
Amissah
soft ware is the Application of principles used in field of engineering
Zuheyp
how do you compare c++ concepts with unity and directx pipeline
Louis
software is a collection of program.
Hemant
software engineering eligiblelity criteria for DAE civil students?
Engr Reply
what is software?
Abdullahi Reply
software means instructions or data that enable computers to work
majid
hi
Abdullahi
majid
Abdullahi
yes abdullahi
majid
how you
Abdullahi
i want to be software engineer ing
Abdullahi
I am fine
majid
software is a collection of program
Hemant
I want to learn software engineering what should I do
Emmanuel
googles your best friend, amazon books, barnes and noble etc..
Louis
software is the set of computer programs executing on computer ; they're made of instructions know as Algorithm. an Algorithm is a sequence of instructions designed to solve a particular problem. Software is all virtual parts of the computer ; computer programs. Software must be well designed.
Manuel
Emmanuel Adebayor. you need to investigate what university has a good level at teaching, this is the most important thing at University to become one the best professional software engineer on earth. You can either get information from public universities or consulting in particular Univesities
Manuel
I'm a software engineer student and I can tell you , you can learn a lot of interesting things about the career, I'm sure you won't regret it.
Manuel
What is design pattern in software engineering? Explain briefly...
amjad
thanks to allow
Hemant
what are the good books to read as a beginner of software engineer.
ben
hi everyone, I'm so happy that I found myself in the mist of knowledgeable people right here, I know that by following this conversation, and by putting it into practice I will an expert in software engineering
Ogunrinde
hi! how to start making a software?
Jerry
can i get more information about data structured centered design
Samir Reply
what is best course to get job
Eswar Reply
engineering
Abdullahi
Why do most computer sciences emphasize the technical foundations of software development?
Profneil Reply

Get the best Software engineering course in your pocket!





Source:  OpenStax, Software engineering. OpenStax CNX. Jul 29, 2009 Download for free at http://cnx.org/content/col10790/1.1
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Software engineering' conversation and receive update notifications?

Ask