<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Alakshm3</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Alakshm3"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Alakshm3"/>
	<updated>2026-06-16T04:23:01Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_15_ms&amp;diff=26277</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 15 ms</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_15_ms&amp;diff=26277"/>
		<updated>2009-10-15T02:39:48Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: /* Definition of Abstraction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
&amp;quot;Object-oriented programming is a method of implementation in which programs are organized as cooperative collections of objects, each of which repressents an instance of some class, and whose classes are all members of a hierarchy of classes united via inheritance relationships.&amp;quot;&amp;lt;i&amp;gt;taken from Object-Oriented Analysis and Design by Grady Booch&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
For all the things that we define as object oriented, the main framework is the object model. An object model can be defined as the collection of principles that form the foundation of object oriented design. The main elements of an object model are -:&lt;br /&gt;
*Abstraction&lt;br /&gt;
*Encapsulation&lt;br /&gt;
*Modularity&lt;br /&gt;
*Hierarchy&lt;br /&gt;
&lt;br /&gt;
The goal of this article is to describe how abstraction relates to object oriented languages.&lt;br /&gt;
&lt;br /&gt;
=Definition of Abstraction=&lt;br /&gt;
Abstraction (from the Latin abs, meaning away from and trahere, meaning to draw) is the process of taking away or removing characteristics from something in order to reduce it to a set of essential characteristics.&amp;lt;i&amp;gt;[taken from [http://www.tutorialspoint.com/ruby/ruby_modules.htm what is abstraction?]]&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An alternate definition given in the book object oriented analysis and design,states that-:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;An abstraction denotes the essential characteristics of an object that distinguish it from all other kinds of objects and thus provide crisply defined conceptual boundaries,relative to the perceptive of the viewer.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The gist is that abstraction is a concept wherein all but the relevant information about an object is hidden in order to reduce complexity and increase the efficiency. This concept even applies in the field of arts wherein an object or a piece of art created by an artist is a representation of the original model with all the unwanted details removed.&lt;br /&gt;
In other words it is nothing but recognizing the similarities between objects and ignoring for some time their differences. It focuses on the outside view of the object and separate it's behavior from it's implementation. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;table  BORDER=3&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[Image:Abstraction.jpg]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 '''Abstraction focuses on the essential characteristics of some object, relative to perspective of the viewer.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
 The above picture shows a car which is being viewed by two people. One of them is a mechanic and the other is a layman. Now when &lt;br /&gt;
 mechanic thinks of a car, what comes to his mind are it's parts, mileage etc. When a layman thinks about a car, what comes to &lt;br /&gt;
 his mind is color of the car, the look etc. Hence each person sees the same object in a different light.&lt;br /&gt;
&lt;br /&gt;
=Types of abstractions=&lt;br /&gt;
There are different types of abstractions as suggested by Seidewitz and Stark  of which some closely model problem domain entities These are as following (mentioned in the order of their usefulness) -:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Entity abstraction - Object represents a useful model of a problem domain or solution domain entity.&lt;br /&gt;
&lt;br /&gt;
* Action abstraction - Object provides a generalized set of operations, all of which perform the same kind of function.&lt;br /&gt;
&lt;br /&gt;
* Virtual Machine abstraction - This is where an object groups together operations that are all used by some superior level of control, or operations that all use some junior-level set of operations.&lt;br /&gt;
&lt;br /&gt;
* Conincidental abstraction - An object that packages a set of operations that have no relation to each other.&lt;br /&gt;
&lt;br /&gt;
Entity abstractions is what is used widely because it directly parallels a given problem domain.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Definitions taken from object oriented analysis and design  by Grady Booch&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Key Abstractions==&lt;br /&gt;
&lt;br /&gt;
A abstraction which describes the system is referred as a '''key abstraction'''. They give boundaries to our problem.They highlight things that are more relevant to our system and hence to the design and suppress the things that are outside the system. There are two important steps in identifying the key abstractions. These are -:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Discovery : Discovery is the process of recognizing the abstraction used in the design of the system.&lt;br /&gt;
 For example, a customer doing a bank transaction speaks in terms of accounts,deposits and withdrawals; &lt;br /&gt;
 these works are part of the vocabulary of the problem domain.&lt;br /&gt;
&lt;br /&gt;
* Invention : Through invention, we can create new classes and objects that are not necessarily part of the problem domain, but are useful in design and implementation. &lt;br /&gt;
 For example A developer of such a system uses these same abstractions, but must also introduce new ones, such as databases, screen  &lt;br /&gt;
 mangers, lists, queues and so on. These key abstractions are artifacts of the particular design, not of the problem domain.&lt;br /&gt;
&lt;br /&gt;
= Abstraction in Different O-O languages =&lt;br /&gt;
&lt;br /&gt;
== Java ==&lt;br /&gt;
Java implements abstraction using Abstract classes and methods. Any class which cannot be instantiated and contains one or more abstract methods in referred as an '''Abstract class''' in JAVA. Such class can only be inherited.&lt;br /&gt;
&lt;br /&gt;
The code shown below is an implementation of the picture example given previously. Here, there is an abstract class called 'Car' which contains an abstract method called 'thingsILookFor()'. Classes 'Mechanic' and 'LayMan' extent the class 'Car'.&lt;br /&gt;
&lt;br /&gt;
 ''' Example :  Java code for the above figure.'''&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green &amp;gt;&lt;br /&gt;
 /* The abstract class car is extended by both the classes Mechanic and LayMan.         */&lt;br /&gt;
 /* They implement the abstract method thingsILookFor                                   */&lt;br /&gt;
 /* according to what they consider important in a car                                  */&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = brown&amp;gt;&lt;br /&gt;
 public abstract class Car {&lt;br /&gt;
 &lt;br /&gt;
 abstract void thingsILookFor();&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public class Mechanic extends Car {&lt;br /&gt;
 &lt;br /&gt;
 private int enginePower;&lt;br /&gt;
  &lt;br /&gt;
 private int carMileage;&lt;br /&gt;
 &lt;br /&gt;
  void thingsILookFor() {&lt;br /&gt;
  &lt;br /&gt;
  enginePower = 1000;&lt;br /&gt;
  &lt;br /&gt;
  carMileage = 32; &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public class LayMan extends Car {&lt;br /&gt;
  &lt;br /&gt;
 private string color;&lt;br /&gt;
 &lt;br /&gt;
 private int seats;&lt;br /&gt;
 &lt;br /&gt;
  void thingsILookFor() {&lt;br /&gt;
 &lt;br /&gt;
  color = &amp;quot;yellow&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
  seats = 4; &lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== C++ ==&lt;br /&gt;
'''Abstract classes:''' These classes can be used as a framework to build new classes that provide new functionality. These class have one or more virtual function.  &lt;br /&gt;
Functions of the base class whose functionality can be overridden by functions of the derived class at run time are called '''virtual functions'''. &lt;br /&gt;
&lt;br /&gt;
In the code below the Class 'Car' has a virtual function 'things_I_like'. This method is implemented by the Class Mechanic and LayMan according the perspective of the class.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color = red&amp;gt;&lt;br /&gt;
 class Car&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
       virtual void things_I_like()&lt;br /&gt;
       {&lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot; No method implementation \n&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 class Mechanic:public car&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
       virtual void things_I_like()&lt;br /&gt;
       {&lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot; I like the car to have a powerful engine\n&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
 }&lt;br /&gt;
 class LayMan:public car&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
       virtual void dump()&lt;br /&gt;
       {&lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot; I like the car to be spacious and have bright colors\n&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ruby ==&lt;br /&gt;
Ruby has no Abstract classes like in Java or Virtual function like in C++, but the same functionality can be implemented as follows.&lt;br /&gt;
&lt;br /&gt;
In this example the class 'Car' has not implemented the method 'thingsILike()'. Suppose the class 'Mechanic' and 'LayMan' were not defined and now if we call Car.new.thingsILike, it will raise an error. Hence this method needs to be implemented by the subclasses as shown in the example.&lt;br /&gt;
&lt;br /&gt;
In the code below the method 'thingsILike' is implemented differently by the class Mechanic and LayMan. They implement the method according to the context in which they see the class 'Car'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color = blue&amp;gt;&lt;br /&gt;
 class Car&lt;br /&gt;
  def thingsILike()&lt;br /&gt;
   raise NotImplementedError.new(&amp;quot;no implementation found \n&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 class Mechanic &amp;lt; Car&lt;br /&gt;
  def thingsILike()&lt;br /&gt;
   puts &amp;quot; I like the horse power of the engine and the mileage \n&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 class LayMan &amp;lt; Car&lt;br /&gt;
  def thingsILike()&lt;br /&gt;
   puts &amp;quot; I like the color \n&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
 &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
* [http://www.amazon.com/Object-Oriented-Analysis-Design-Applications-2nd/dp/0805353402 Object oriented Analysis and design by Grady Booch]&lt;br /&gt;
&lt;br /&gt;
* [http://searchcio-midmarket.techtarget.com/sDefinition/0,,sid183_gci343038,00.html Definition of Abstraction]&lt;br /&gt;
* [http://epf.eclipse.org/wikis/openup/core.tech.common.extend_supp/guidances/concepts/key_abstractions_1474DBF2.html Key Abstraction]&lt;br /&gt;
* [http://www.mymindleaks.com/blog/programming/object-oriented-programming-abstraction/ Object Oriented Programming - Abstraction]&lt;br /&gt;
* [http://www.madsci.org/posts/archives/apr2001/987192403.Eg.r.html What is meant by abstraction?]&lt;br /&gt;
* [http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#Generalization What is abstraction?]&lt;br /&gt;
* [http://www.answers.com/topic/object-oriented-programming A discussion on object oriented programming]&lt;br /&gt;
* [http://computer-programming-tutorials.suite101.com/article.cfm/a_brief_introduction_to_objectoriented_design An example on Anstraction]&lt;br /&gt;
* [http://delivery.acm.org/10.1145/30000/25315/p54-seidewitz.pdf?key1=25315&amp;amp;key2=8831215521&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=55753397&amp;amp;CFTOKEN=61066169 A paper on &amp;quot;Toward a general object-oriented software development methodology&amp;quot;]&lt;br /&gt;
* [http://www.research.att.com/~bs/abstraction-and-machine.pdf An article on Abstraction by Bjarne Stroustrup]&lt;br /&gt;
&lt;br /&gt;
=Further Reading=&lt;br /&gt;
* [http://developer.apple.com/iphone/library/documentation/cocoa/Conceptual/OOP_ObjC/Articles/ooObjectModel.html iphone reference library - The object model]&lt;br /&gt;
* [http://java.sun.com/docs/books/tutorial/java/concepts/ Lesson: Object-Oriented Programming Concepts]&lt;br /&gt;
* [http://computing.southern.edu/halterman/OOPJ/ A textbook on Object oriented programming using Java]&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_15_ms&amp;diff=26276</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 15 ms</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_15_ms&amp;diff=26276"/>
		<updated>2009-10-15T02:38:33Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: /* C++ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
&amp;quot;Object-oriented programming is a method of implementation in which programs are organized as cooperative collections of objects, each of which repressents an instance of some class, and whose classes are all members of a hierarchy of classes united via inheritance relationships.&amp;quot;&amp;lt;i&amp;gt;taken from Object-Oriented Analysis and Design by Grady Booch&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
For all the things that we define as object oriented, the main framework is the object model. An object model can be defined as the collection of principles that form the foundation of object oriented design. The main elements of an object model are -:&lt;br /&gt;
*Abstraction&lt;br /&gt;
*Encapsulation&lt;br /&gt;
*Modularity&lt;br /&gt;
*Hierarchy&lt;br /&gt;
&lt;br /&gt;
The goal of this article is to describe how abstraction relates to object oriented languages.&lt;br /&gt;
&lt;br /&gt;
=Definition of Abstraction=&lt;br /&gt;
Abstraction (from the Latin abs, meaning away from and trahere, meaning to draw) is the process of taking away or removing characteristics from something in order to reduce it to a set of essential characteristics.&amp;lt;i&amp;gt;[taken from [http://www.tutorialspoint.com/ruby/ruby_modules.htm what is abstraction?]]&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An alternate definition given in the book object oriented analysis and design,states that-:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;An abstraction denotes the essential characteristics of an object that distinguish it from all other kinds of objects and thus provide crisply defined conceptual boundaries,relative to the perceptive of the viewer.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The gist is that abstraction is a concept wherein all but the relevant information about an object is hidden in order to reduce complexity and increase the efficiency. This concept even applies in the field of arts wherein an object or a piece of art created by an artist is a representation of the original model with all the unwanted details removed.&lt;br /&gt;
In other words it is nothing but recognizing the similarities between objects and ignoring for some time their differences. It focuses on the outside view of the object and separate it's behavior from it's implementation. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;table  BORDER=3&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[Image:Abstraction.jpg]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 '''Abstraction focuses on the essential characteristics of some object, relative to perspective of the viewer.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above picture shows a car which is being viewed by two people. One of them is a mechanic and the other is a layman. Now when mechanic thinks of a car, what comes to his mind are it's parts, mileage etc. When a layman thinks about a car, what comes to his mind is color of the car, the look etc. Hence each person sees the same object in a different light.&lt;br /&gt;
&lt;br /&gt;
=Types of abstractions=&lt;br /&gt;
There are different types of abstractions as suggested by Seidewitz and Stark  of which some closely model problem domain entities These are as following (mentioned in the order of their usefulness) -:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Entity abstraction - Object represents a useful model of a problem domain or solution domain entity.&lt;br /&gt;
&lt;br /&gt;
* Action abstraction - Object provides a generalized set of operations, all of which perform the same kind of function.&lt;br /&gt;
&lt;br /&gt;
* Virtual Machine abstraction - This is where an object groups together operations that are all used by some superior level of control, or operations that all use some junior-level set of operations.&lt;br /&gt;
&lt;br /&gt;
* Conincidental abstraction - An object that packages a set of operations that have no relation to each other.&lt;br /&gt;
&lt;br /&gt;
Entity abstractions is what is used widely because it directly parallels a given problem domain.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Definitions taken from object oriented analysis and design  by Grady Booch&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Key Abstractions==&lt;br /&gt;
&lt;br /&gt;
A abstraction which describes the system is referred as a '''key abstraction'''. They give boundaries to our problem.They highlight things that are more relevant to our system and hence to the design and suppress the things that are outside the system. There are two important steps in identifying the key abstractions. These are -:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Discovery : Discovery is the process of recognizing the abstraction used in the design of the system.&lt;br /&gt;
 For example, a customer doing a bank transaction speaks in terms of accounts,deposits and withdrawals; &lt;br /&gt;
 these works are part of the vocabulary of the problem domain.&lt;br /&gt;
&lt;br /&gt;
* Invention : Through invention, we can create new classes and objects that are not necessarily part of the problem domain, but are useful in design and implementation. &lt;br /&gt;
 For example A developer of such a system uses these same abstractions, but must also introduce new ones, such as databases, screen  &lt;br /&gt;
 mangers, lists, queues and so on. These key abstractions are artifacts of the particular design, not of the problem domain.&lt;br /&gt;
&lt;br /&gt;
= Abstraction in Different O-O languages =&lt;br /&gt;
&lt;br /&gt;
== Java ==&lt;br /&gt;
Java implements abstraction using Abstract classes and methods. Any class which cannot be instantiated and contains one or more abstract methods in referred as an '''Abstract class''' in JAVA. Such class can only be inherited.&lt;br /&gt;
&lt;br /&gt;
The code shown below is an implementation of the picture example given previously. Here, there is an abstract class called 'Car' which contains an abstract method called 'thingsILookFor()'. Classes 'Mechanic' and 'LayMan' extent the class 'Car'.&lt;br /&gt;
&lt;br /&gt;
 ''' Example :  Java code for the above figure.'''&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green &amp;gt;&lt;br /&gt;
 /* The abstract class car is extended by both the classes Mechanic and LayMan.         */&lt;br /&gt;
 /* They implement the abstract method thingsILookFor                                   */&lt;br /&gt;
 /* according to what they consider important in a car                                  */&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = brown&amp;gt;&lt;br /&gt;
 public abstract class Car {&lt;br /&gt;
 &lt;br /&gt;
 abstract void thingsILookFor();&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public class Mechanic extends Car {&lt;br /&gt;
 &lt;br /&gt;
 private int enginePower;&lt;br /&gt;
  &lt;br /&gt;
 private int carMileage;&lt;br /&gt;
 &lt;br /&gt;
  void thingsILookFor() {&lt;br /&gt;
  &lt;br /&gt;
  enginePower = 1000;&lt;br /&gt;
  &lt;br /&gt;
  carMileage = 32; &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public class LayMan extends Car {&lt;br /&gt;
  &lt;br /&gt;
 private string color;&lt;br /&gt;
 &lt;br /&gt;
 private int seats;&lt;br /&gt;
 &lt;br /&gt;
  void thingsILookFor() {&lt;br /&gt;
 &lt;br /&gt;
  color = &amp;quot;yellow&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
  seats = 4; &lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== C++ ==&lt;br /&gt;
'''Abstract classes:''' These classes can be used as a framework to build new classes that provide new functionality. These class have one or more virtual function.  &lt;br /&gt;
Functions of the base class whose functionality can be overridden by functions of the derived class at run time are called '''virtual functions'''. &lt;br /&gt;
&lt;br /&gt;
In the code below the Class 'Car' has a virtual function 'things_I_like'. This method is implemented by the Class Mechanic and LayMan according the perspective of the class.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color = red&amp;gt;&lt;br /&gt;
 class Car&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
       virtual void things_I_like()&lt;br /&gt;
       {&lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot; No method implementation \n&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 class Mechanic:public car&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
       virtual void things_I_like()&lt;br /&gt;
       {&lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot; I like the car to have a powerful engine\n&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
 }&lt;br /&gt;
 class LayMan:public car&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
       virtual void dump()&lt;br /&gt;
       {&lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot; I like the car to be spacious and have bright colors\n&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ruby ==&lt;br /&gt;
Ruby has no Abstract classes like in Java or Virtual function like in C++, but the same functionality can be implemented as follows.&lt;br /&gt;
&lt;br /&gt;
In this example the class 'Car' has not implemented the method 'thingsILike()'. Suppose the class 'Mechanic' and 'LayMan' were not defined and now if we call Car.new.thingsILike, it will raise an error. Hence this method needs to be implemented by the subclasses as shown in the example.&lt;br /&gt;
&lt;br /&gt;
In the code below the method 'thingsILike' is implemented differently by the class Mechanic and LayMan. They implement the method according to the context in which they see the class 'Car'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color = blue&amp;gt;&lt;br /&gt;
 class Car&lt;br /&gt;
  def thingsILike()&lt;br /&gt;
   raise NotImplementedError.new(&amp;quot;no implementation found \n&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 class Mechanic &amp;lt; Car&lt;br /&gt;
  def thingsILike()&lt;br /&gt;
   puts &amp;quot; I like the horse power of the engine and the mileage \n&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 class LayMan &amp;lt; Car&lt;br /&gt;
  def thingsILike()&lt;br /&gt;
   puts &amp;quot; I like the color \n&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
 &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
* [http://www.amazon.com/Object-Oriented-Analysis-Design-Applications-2nd/dp/0805353402 Object oriented Analysis and design by Grady Booch]&lt;br /&gt;
&lt;br /&gt;
* [http://searchcio-midmarket.techtarget.com/sDefinition/0,,sid183_gci343038,00.html Definition of Abstraction]&lt;br /&gt;
* [http://epf.eclipse.org/wikis/openup/core.tech.common.extend_supp/guidances/concepts/key_abstractions_1474DBF2.html Key Abstraction]&lt;br /&gt;
* [http://www.mymindleaks.com/blog/programming/object-oriented-programming-abstraction/ Object Oriented Programming - Abstraction]&lt;br /&gt;
* [http://www.madsci.org/posts/archives/apr2001/987192403.Eg.r.html What is meant by abstraction?]&lt;br /&gt;
* [http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#Generalization What is abstraction?]&lt;br /&gt;
* [http://www.answers.com/topic/object-oriented-programming A discussion on object oriented programming]&lt;br /&gt;
* [http://computer-programming-tutorials.suite101.com/article.cfm/a_brief_introduction_to_objectoriented_design An example on Anstraction]&lt;br /&gt;
* [http://delivery.acm.org/10.1145/30000/25315/p54-seidewitz.pdf?key1=25315&amp;amp;key2=8831215521&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=55753397&amp;amp;CFTOKEN=61066169 A paper on &amp;quot;Toward a general object-oriented software development methodology&amp;quot;]&lt;br /&gt;
* [http://www.research.att.com/~bs/abstraction-and-machine.pdf An article on Abstraction by Bjarne Stroustrup]&lt;br /&gt;
&lt;br /&gt;
=Further Reading=&lt;br /&gt;
* [http://developer.apple.com/iphone/library/documentation/cocoa/Conceptual/OOP_ObjC/Articles/ooObjectModel.html iphone reference library - The object model]&lt;br /&gt;
* [http://java.sun.com/docs/books/tutorial/java/concepts/ Lesson: Object-Oriented Programming Concepts]&lt;br /&gt;
* [http://computing.southern.edu/halterman/OOPJ/ A textbook on Object oriented programming using Java]&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_15_ms&amp;diff=26272</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 15 ms</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_15_ms&amp;diff=26272"/>
		<updated>2009-10-15T02:34:34Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: /* Ruby */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
&amp;quot;Object-oriented programming is a method of implementation in which programs are organized as cooperative collections of objects, each of which repressents an instance of some class, and whose classes are all members of a hierarchy of classes united via inheritance relationships.&amp;quot;&amp;lt;i&amp;gt;taken from Object-Oriented Analysis and Design by Grady Booch&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
For all the things that we define as object oriented, the main framework is the object model. An object model can be defined as the collection of principles that form the foundation of object oriented design. The main elements of an object model are -:&lt;br /&gt;
*Abstraction&lt;br /&gt;
*Encapsulation&lt;br /&gt;
*Modularity&lt;br /&gt;
*Hierarchy&lt;br /&gt;
&lt;br /&gt;
The goal of this article is to describe how abstraction relates to object oriented languages.&lt;br /&gt;
&lt;br /&gt;
=Definition of Abstraction=&lt;br /&gt;
Abstraction (from the Latin abs, meaning away from and trahere, meaning to draw) is the process of taking away or removing characteristics from something in order to reduce it to a set of essential characteristics.&amp;lt;i&amp;gt;[taken from [http://www.tutorialspoint.com/ruby/ruby_modules.htm what is abstraction?]]&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An alternate definition given in the book object oriented analysis and design,states that-:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;An abstraction denotes the essential characteristics of an object that distinguish it from all other kinds of objects and thus provide crisply defined conceptual boundaries,relative to the perceptive of the viewer.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The gist is that abstraction is a concept wherein all but the relevant information about an object is hidden in order to reduce complexity and increase the efficiency. This concept even applies in the field of arts wherein an object or a piece of art created by an artist is a representation of the original model with all the unwanted details removed.&lt;br /&gt;
In other words it is nothing but recognizing the similarities between objects and ignoring for some time their differences. It focuses on the outside view of the object and separate it's behavior from it's implementation. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;table  BORDER=3&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[Image:Abstraction.jpg]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 '''Abstraction focuses on the essential characteristics of some object, relative to perspective of the viewer.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above picture shows a car which is being viewed by two people. One of them is a mechanic and the other is a layman. Now when mechanic thinks of a car, what comes to his mind are it's parts, mileage etc. When a layman thinks about a car, what comes to his mind is color of the car, the look etc. Hence each person sees the same object in a different light.&lt;br /&gt;
&lt;br /&gt;
=Types of abstractions=&lt;br /&gt;
There are different types of abstractions as suggested by Seidewitz and Stark  of which some closely model problem domain entities These are as following (mentioned in the order of their usefulness) -:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Entity abstraction - Object represents a useful model of a problem domain or solution domain entity.&lt;br /&gt;
&lt;br /&gt;
* Action abstraction - Object provides a generalized set of operations, all of which perform the same kind of function.&lt;br /&gt;
&lt;br /&gt;
* Virtual Machine abstraction - This is where an object groups together operations that are all used by some superior level of control, or operations that all use some junior-level set of operations.&lt;br /&gt;
&lt;br /&gt;
* Conincidental abstraction - An object that packages a set of operations that have no relation to each other.&lt;br /&gt;
&lt;br /&gt;
Entity abstractions is what is used widely because it directly parallels a given problem domain.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Definitions taken from object oriented analysis and design  by Grady Booch&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Key Abstractions==&lt;br /&gt;
&lt;br /&gt;
A abstraction which describes the system is referred as a '''key abstraction'''. They give boundaries to our problem.They highlight things that are more relevant to our system and hence to the design and suppress the things that are outside the system. There are two important steps in identifying the key abstractions. These are -:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Discovery : Discovery is the process of recognizing the abstraction used in the design of the system.&lt;br /&gt;
 For example, a customer doing a bank transaction speaks in terms of accounts,deposits and withdrawals; &lt;br /&gt;
 these works are part of the vocabulary of the problem domain.&lt;br /&gt;
&lt;br /&gt;
* Invention : Through invention, we can create new classes and objects that are not necessarily part of the problem domain, but are useful in design and implementation. &lt;br /&gt;
 For example A developer of such a system uses these same abstractions, but must also introduce new ones, such as databases, screen  &lt;br /&gt;
 mangers, lists, queues and so on. These key abstractions are artifacts of the particular design, not of the problem domain.&lt;br /&gt;
&lt;br /&gt;
= Abstraction in Different O-O languages =&lt;br /&gt;
&lt;br /&gt;
== Java ==&lt;br /&gt;
Java implements abstraction using Abstract classes and methods. Any class which cannot be instantiated and contains one or more abstract methods in referred as an '''Abstract class''' in JAVA. Such class can only be inherited.&lt;br /&gt;
&lt;br /&gt;
The code shown below is an implementation of the picture example given previously. Here, there is an abstract class called 'Car' which contains an abstract method called 'thingsILookFor()'. Classes 'Mechanic' and 'LayMan' extent the class 'Car'.&lt;br /&gt;
&lt;br /&gt;
 ''' Example :  Java code for the above figure.'''&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green &amp;gt;&lt;br /&gt;
 /* The abstract class car is extended by both the classes Mechanic and LayMan.         */&lt;br /&gt;
 /* They implement the abstract method thingsILookFor                                   */&lt;br /&gt;
 /* according to what they consider important in a car                                  */&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = brown&amp;gt;&lt;br /&gt;
 public abstract class Car {&lt;br /&gt;
 &lt;br /&gt;
 abstract void thingsILookFor();&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public class Mechanic extends Car {&lt;br /&gt;
 &lt;br /&gt;
 private int enginePower;&lt;br /&gt;
  &lt;br /&gt;
 private int carMileage;&lt;br /&gt;
 &lt;br /&gt;
  void thingsILookFor() {&lt;br /&gt;
  &lt;br /&gt;
  enginePower = 1000;&lt;br /&gt;
  &lt;br /&gt;
  carMileage = 32; &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public class LayMan extends Car {&lt;br /&gt;
  &lt;br /&gt;
 private string color;&lt;br /&gt;
 &lt;br /&gt;
 private int seats;&lt;br /&gt;
 &lt;br /&gt;
  void thingsILookFor() {&lt;br /&gt;
 &lt;br /&gt;
  color = &amp;quot;yellow&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
  seats = 4; &lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== C++ ==&lt;br /&gt;
'''Abstract classes:''' These classes can be used as a framework to build new classes that provide new functionality. These class have one or more virtual function.  &lt;br /&gt;
Functions of the base class whose functionality can be overridden by functions of the derived class at run time are called '''virtual functions'''. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color = red&amp;gt;&lt;br /&gt;
 class debugger&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
       virtual void dump()&lt;br /&gt;
       {&lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot; No method implementation \n&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 class X:public debugger&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
       virtual void dump()&lt;br /&gt;
       {&lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot; dump method implementation for class X\n&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
 }&lt;br /&gt;
 class Y:public debugger&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
       virtual void dump()&lt;br /&gt;
       {&lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot; dump method implementation for class Y\n&amp;quot;;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ruby ==&lt;br /&gt;
Ruby has no Abstract classes like in Java or Virtual function like in C++, but the same functionality can be implemented as follows.&lt;br /&gt;
&lt;br /&gt;
In this example the class 'Car' has not implemented the method 'thingsILike()'. Suppose the class 'Mechanic' and 'LayMan' were not defined and now if we call Car.new.thingsILike, it will raise an error. Hence this method needs to be implemented by the subclasses as shown in the example.&lt;br /&gt;
&lt;br /&gt;
In the code below the method 'thingsILike' is implemented differently by the class Mechanic and LayMan. They implement the method according to the context in which they see the class 'Car'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color = blue&amp;gt;&lt;br /&gt;
 class Car&lt;br /&gt;
  def thingsILike()&lt;br /&gt;
   raise NotImplementedError.new(&amp;quot;no implementation found \n&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 class Mechanic &amp;lt; Car&lt;br /&gt;
  def thingsILike()&lt;br /&gt;
   puts &amp;quot; I like the horse power of the engine and the mileage \n&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 class LayMan &amp;lt; Car&lt;br /&gt;
  def thingsILike()&lt;br /&gt;
   puts &amp;quot; I like the color \n&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
 &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
* [http://www.amazon.com/Object-Oriented-Analysis-Design-Applications-2nd/dp/0805353402 Object oriented Analysis and design by Grady Booch]&lt;br /&gt;
&lt;br /&gt;
* [http://searchcio-midmarket.techtarget.com/sDefinition/0,,sid183_gci343038,00.html Definition of Abstraction]&lt;br /&gt;
* [http://epf.eclipse.org/wikis/openup/core.tech.common.extend_supp/guidances/concepts/key_abstractions_1474DBF2.html Key Abstraction]&lt;br /&gt;
* [http://www.mymindleaks.com/blog/programming/object-oriented-programming-abstraction/ Object Oriented Programming - Abstraction]&lt;br /&gt;
* [http://www.madsci.org/posts/archives/apr2001/987192403.Eg.r.html What is meant by abstraction?]&lt;br /&gt;
* [http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#Generalization What is abstraction?]&lt;br /&gt;
* [http://www.answers.com/topic/object-oriented-programming A discussion on object oriented programming]&lt;br /&gt;
* [http://computer-programming-tutorials.suite101.com/article.cfm/a_brief_introduction_to_objectoriented_design An example on Anstraction]&lt;br /&gt;
* [http://delivery.acm.org/10.1145/30000/25315/p54-seidewitz.pdf?key1=25315&amp;amp;key2=8831215521&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=55753397&amp;amp;CFTOKEN=61066169 A paper on &amp;quot;Toward a general object-oriented software development methodology&amp;quot;]&lt;br /&gt;
* [http://www.research.att.com/~bs/abstraction-and-machine.pdf An article on Abstraction by Bjarne Stroustrup]&lt;br /&gt;
&lt;br /&gt;
=Further Reading=&lt;br /&gt;
* [http://developer.apple.com/iphone/library/documentation/cocoa/Conceptual/OOP_ObjC/Articles/ooObjectModel.html iphone reference library - The object model]&lt;br /&gt;
* [http://java.sun.com/docs/books/tutorial/java/concepts/ Lesson: Object-Oriented Programming Concepts]&lt;br /&gt;
* [http://computing.southern.edu/halterman/OOPJ/ A textbook on Object oriented programming using Java]&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20962</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20962"/>
		<updated>2009-09-21T07:21:29Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and Integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
=== '''Big Bang Testing Approach''' ===&lt;br /&gt;
As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. This approach is more useful in smaller systems because integration of smaller systems are easier.&lt;br /&gt;
* Advantages:&lt;br /&gt;
** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
* Disadvantages:&lt;br /&gt;
**  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
** Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
** Writing test cases are also non-trivial.&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== '''Incremental Testing Approach''' ===&lt;br /&gt;
Testing is done after integration of one module at a time. After finishing the unit testing of each module or sub-system they are integrated and tested. Stubs are used for modules in the system which are not integrated till now.&lt;br /&gt;
* Advantages:&lt;br /&gt;
** Problems detection is early compared to the Big Bang approach&lt;br /&gt;
** No need to wait till the unit testing of all the modules have finished&lt;br /&gt;
** Debugging is much simpler&lt;br /&gt;
* Disadvantages:&lt;br /&gt;
** This approach is a time taking process because the integration tests have to run multiple times&lt;br /&gt;
** Stubs have to be developed to substitute the missing modules&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[Image:Incremental testing.jpg]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Various Approach can be taken for Incremental Testing&lt;br /&gt;
* '''Top-Down Approach''': In this approach the system is tested according to the work flow or code flow. The Top level module is tested first then each lower level module is integrated and tested.Top level modules are modules which call other modules and lower level modules are the ones which are called by other modules. Terminal modules are modules which do not call any other module. &lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[Image:Topdown testing.jpg]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the above figure Module A is the top most module in the system then B,C,D are lower level modules. Generally module A is the user interface and stubs for each interface are used.  Then each module is integrated and the tested. &lt;br /&gt;
* Advantages:&lt;br /&gt;
** The testing flow follows the architecture of the system so any bug in the top level design or implementation could be found at early stages&lt;br /&gt;
** If the top level modules call multiple lower modules then the testing can be done in various combinations&lt;br /&gt;
 For example in the figure A calls B and C. The testing can be done as follows&lt;br /&gt;
 A-B-C-D &lt;br /&gt;
 A-C-B-D&lt;br /&gt;
* Disadvantage :&lt;br /&gt;
** The main problem with this approach is the use of stub. Mostly stubs are written to print out some trace statement based on the output of module A after running the test. Now if multiple scenarios have to be tested then different version of Stub B have to written, which is an extra overhead&lt;br /&gt;
&lt;br /&gt;
* '''Bottom-Up Approach''': The bottom-up approach is the opposite of the top-down approach. In this approach the terminal approaches are tested first, then the higher modules and finally the top-most one. Drivers are used in this approach. &lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[Image:Bottomup testing.jpg]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the above figure E,D are the terminal modules which are tested first. Then the higher level modules B,C are tested and finally the topmost module is tested&lt;br /&gt;
*Advantages:&lt;br /&gt;
** No need to write stubs&lt;br /&gt;
** If the terminal modules does the main work in the system then they will be tested first&lt;br /&gt;
*Disadvantages:&lt;br /&gt;
** Need to write drivers&lt;br /&gt;
** The testing is not according to the architecture of the system&lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
 For example, suppose we are to develop the software for an elevator. For designing the test cases for this software, &lt;br /&gt;
 all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the&lt;br /&gt;
 elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and &lt;br /&gt;
 odd floors separately).The elevator should stop at the desired floor.&lt;br /&gt;
&lt;br /&gt;
Generally Functional testing is '''Black Box''' testing. In this method the SUT (System under Test) is considered as a Black box. In this phase of testing the internals of the SUT like the design or algorithm are not considered by the tester. Inputs are provided to the black box and the outputs are validated to the expected output specified in the design document.&lt;br /&gt;
&lt;br /&gt;
2 approaches can be taken for writing the functional tests&lt;br /&gt;
* '''Requirement based approach''': In this approach the specification for the system or software design is used as the base to write functional test.  &lt;br /&gt;
* '''Business process based approach''':  Business process refer to the day-to-day use of the system. This knowledge is used to do functional testing of the system.&lt;br /&gt;
&lt;br /&gt;
Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20961</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20961"/>
		<updated>2009-09-21T07:19:26Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and Integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
=== '''Big Bang Testing Approach''' ===&lt;br /&gt;
As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. This approach is more useful in smaller systems because integration of smaller systems are easier.&lt;br /&gt;
* Advantages:&lt;br /&gt;
** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
* Disadvantages:&lt;br /&gt;
**  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
** Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
** Writing test cases are also non-trivial.&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== '''Incremental Testing Approach''' ===&lt;br /&gt;
Testing is done after integration of one module at a time. After finishing the unit testing of each module or sub-system they are integrated and tested. Stubs are used for modules in the system which are not integrated till now.&lt;br /&gt;
* Advantages:&lt;br /&gt;
** Problems detection is early compared to the Big Bang approach&lt;br /&gt;
** No need to wait till the unit testing of all the modules have finished&lt;br /&gt;
** Debugging is much simpler&lt;br /&gt;
* Disadvantages:&lt;br /&gt;
** This approach is a time taking process because the integration tests have to run multiple times&lt;br /&gt;
** Stubs have to be developed to substitute the missing modules&lt;br /&gt;
[[Image:Incremental testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Various Approach can be taken for Incremental Testing&lt;br /&gt;
* '''Top-Down Approach''': In this approach the system is tested according to the work flow or code flow. The Top level module is tested first then each lower level module is integrated and tested.Top level modules are modules which call other modules and lower level modules are the ones which are called by other modules. Terminal modules are modules which do not call any other module. &lt;br /&gt;
[[Image:Topdown testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the above figure Module A is the top most module in the system then B,C,D are lower level modules. Generally module A is the user interface and stubs for each interface are used.  Then each module is integrated and the tested. &lt;br /&gt;
* Advantages:&lt;br /&gt;
** The testing flow follows the architecture of the system so any bug in the top level design or implementation could be found at early stages&lt;br /&gt;
** If the top level modules call multiple lower modules then the testing can be done in various combinations&lt;br /&gt;
 For example in the figure A calls B and C. The testing can be done as follows&lt;br /&gt;
 A-B-C-D &lt;br /&gt;
 A-C-B-D&lt;br /&gt;
* Disadvantage :&lt;br /&gt;
** The main problem with this approach is the use of stub. Mostly stubs are written to print out some trace statement based on the output of module A after running the test. Now if multiple scenarios have to be tested then different version of Stub B have to written, which is an extra overhead&lt;br /&gt;
&lt;br /&gt;
* '''Bottom-Up Approach''': The bottom-up approach is the opposite of the top-down approach. In this approach the terminal approaches are tested first, then the higher modules and finally the top-most one. Drivers are used in this approach. &lt;br /&gt;
[[Image:Bottomup testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the above figure E,D are the terminal modules which are tested first. Then the higher level modules B,C are tested and finally the topmost module is tested&lt;br /&gt;
*Advantages:&lt;br /&gt;
** No need to write stubs&lt;br /&gt;
** If the terminal modules does the main work in the system then they will be tested first&lt;br /&gt;
*Disadvantages:&lt;br /&gt;
** Need to write drivers&lt;br /&gt;
** The testing is not according to the architecture of the system&lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
 For example, suppose we are to develop the software for an elevator. For designing the test cases for this software, &lt;br /&gt;
 all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the&lt;br /&gt;
 elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and &lt;br /&gt;
 odd floors separately).The elevator should stop at the desired floor.&lt;br /&gt;
&lt;br /&gt;
Generally Functional testing is '''Black Box''' testing. In this method the SUT (System under Test) is considered as a Black box. In this phase of testing the internals of the SUT like the design or algorithm are not considered by the tester. Inputs are provided to the black box and the outputs are validated to the expected output specified in the design document.&lt;br /&gt;
&lt;br /&gt;
2 approaches can be taken for writing the functional tests&lt;br /&gt;
* '''Requirement based approach''': In this approach the specification for the system or software design is used as the base to write functional test.  &lt;br /&gt;
* '''Business process based approach''':  Business process refer to the day-to-day use of the system. This knowledge is used to do functional testing of the system.&lt;br /&gt;
&lt;br /&gt;
Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20960</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20960"/>
		<updated>2009-09-21T07:17:50Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and Integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
=== '''Big Bang Testing Approach''' ===&lt;br /&gt;
As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. This approach is more useful in smaller systems because integration of smaller systems are easier.&lt;br /&gt;
* Advantages:&lt;br /&gt;
** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
* Disadvantages:&lt;br /&gt;
**  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
** Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
** Writing test cases are also non-trivial.&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== '''Incremental Testing Approach''' ===&lt;br /&gt;
Testing is done after integration of one module at a time. After finishing the unit testing of each module or sub-system they are integrated and tested. Stubs are used for modules in the system which are not integrated till now.&lt;br /&gt;
* Advantages:&lt;br /&gt;
** Problems detection is early compared to the Big Bang approach&lt;br /&gt;
** No need to wait till the unit testing of all the modules have finished&lt;br /&gt;
** Debugging is much simpler&lt;br /&gt;
* Disadvantages:&lt;br /&gt;
** This approach is a time taking process because the integration tests have to run multiple times&lt;br /&gt;
** Stubs have to be developed to substitute the missing modules&lt;br /&gt;
[[Image:Incremental testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Various Approach can be taken for Incremental Testing&lt;br /&gt;
* '''Top-Down Approach''': In this approach the system is tested according to the work flow or code flow. The Top level module is tested first then each lower level module is integrated and tested.Top level modules are modules which call other modules and lower level modules are the ones which are called by other modules. Terminal modules are modules which do not call any other module. &lt;br /&gt;
[[Image:Topdown testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the above figure Module A is the top most module in the system then B,C,D are lower level modules. Generally module A is the user interface and stubs for each interface are used.  Then each module is integrated and the tested. &lt;br /&gt;
* Advantages:&lt;br /&gt;
** The testing flow follows the architecture of the system so any bug in the top level design or implementation could be found at early stages&lt;br /&gt;
** If the top level modules call multiple lower modules then the testing can be done in various combinations&lt;br /&gt;
 For example in the figure A calls B and C. The testing can be done as follows&lt;br /&gt;
 A-B-C-D &lt;br /&gt;
 A-C-B-D&lt;br /&gt;
* Disadvantage :&lt;br /&gt;
** The main problem with this approach is the use of stub. Mostly stubs are written to print out some trace statement based on the output of module A after running the test. Now if multiple scenarios have to be tested then different version of Stub B have to written, which is an extra overhead&lt;br /&gt;
&lt;br /&gt;
* '''Bottom-Up Approach''': The bottom-up approach is the opposite of the top-down approach. In this approach the terminal approaches are tested first, then the higher modules and finally the top-most one. Drivers are used in this approach. &lt;br /&gt;
[[Image:Bottomup testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the above figure E,D are the terminal modules which are tested first. Then the higher level modules B,C are tested and finally the topmost module is tested&lt;br /&gt;
*Advantages:&lt;br /&gt;
** No need to write stubs&lt;br /&gt;
** If the terminal modules does the main work in the system then they will be tested first&lt;br /&gt;
*Disadvantages:&lt;br /&gt;
** Need to write drivers&lt;br /&gt;
** The testing is not according to the architecture of the system&lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
 For example, suppose we are to develop the software for an elevator. For designing the test cases for this software, &lt;br /&gt;
 all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the&lt;br /&gt;
 elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and &lt;br /&gt;
 odd floors separately).The elevator should stop at the desired floor.&lt;br /&gt;
&lt;br /&gt;
Generally Functional testing is '''Black Box''' testing. In this method the SUT (System under Test) is considered as a Black box. In this phase of testing the internals of the SUT like the design or algorithm are not considered by the tester. Inputs are provided to the black box and the outputs are validated to the expected output specified in the design document.&lt;br /&gt;
&lt;br /&gt;
2 approaches can be taken for writing the functional tests&lt;br /&gt;
* '''Requirement based approach''': In this approach the specification for the system or software design is used as the base to write functional test.  &lt;br /&gt;
* '''Business process based approach''':  Business process refer to the day-to-day use of the system. This knowledge is used to do functional testing of the system.&lt;br /&gt;
&lt;br /&gt;
Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20958</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20958"/>
		<updated>2009-09-21T07:01:48Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and Integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
=== '''Big Bang Testing Approach''' ===&lt;br /&gt;
As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. This approach is more useful in smaller systems because integration of smaller systems are easier.&lt;br /&gt;
* Advantages:&lt;br /&gt;
** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
* Disadvantages:&lt;br /&gt;
**  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
** Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
** Writing test cases are also non-trivial.&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== '''Incremental Testing Approach''' ===&lt;br /&gt;
Testing is done after integration of one module at a time. After finishing the unit testing of each module or sub-system they are integrated and tested. Stubs are used for modules in the system which are not integrated till now.&lt;br /&gt;
* Advantages:&lt;br /&gt;
** Problems detection is early compared to the Big Bang approach&lt;br /&gt;
** No need to wait till the unit testing of all the modules have finished&lt;br /&gt;
** Debugging is much simpler&lt;br /&gt;
* Disadvantages:&lt;br /&gt;
** This approach is a time taking process because the integration tests have to run multiple times&lt;br /&gt;
** Stubs have to be developed to substitute the missing modules&lt;br /&gt;
[[Image:Incremental testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Various Approach can be taken for Incremental Testing&lt;br /&gt;
* '''Top-Down Approach''': In this approach the system is tested according to the work flow or code flow. The Top level module is tested first then each lower level module is integrated and tested.Top level modules are modules which call other modules and lower level modules are the ones which are called by other modules. Terminal modules are modules which do not call any other module. &lt;br /&gt;
[[Image:Topdown testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the above figure Module A is the top most module in the system then B,C,D are lower level modules. Generally module A is the user interface and stubs for each interface are used.  Then each module is integrated and the tested. &lt;br /&gt;
* Advantages:&lt;br /&gt;
** The testing flow follows the architecture of the system so any bug in the top level design or implementation could be found at early stages&lt;br /&gt;
** If the top level modules call multiple lower modules then the testing can be done in various combinations&lt;br /&gt;
 For example in the figure A calls B and C. The testing can be done as follows&lt;br /&gt;
 A-B-C-D &lt;br /&gt;
 A-C-B-D&lt;br /&gt;
* Disadvantage :&lt;br /&gt;
** The main problem with this approach is the use of stub. Mostly stubs are written to print out some trace statement based on the output of module A after running the test. Now if multiple scenarios have to be tested then different version of Stub B have to written, which is an extra overhead&lt;br /&gt;
&lt;br /&gt;
* '''Bottom-Up Approach''': The bottom-up approach is the opposite of the top-down approach. In this approach the terminal approaches are tested first, then the higher modules and finally the top-most one. Drivers are used in this approach. &lt;br /&gt;
[[Image:Bottomup testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Bottom Up Approach&lt;br /&gt;
In the above figure E,D are the terminal modules which are tested first. Then the higher level modules B,C are tested and finally the topmost module is tested&lt;br /&gt;
*Advantages:&lt;br /&gt;
** No need to write stubs&lt;br /&gt;
** If the terminal modules does the main work in the system then they will be tested first&lt;br /&gt;
*Disadvantages:&lt;br /&gt;
** Need to write drivers&lt;br /&gt;
** The testing is not according to the architecture of the system&lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
 For example, suppose we are to develop the software for an elevator. For designing the test cases for this software, &lt;br /&gt;
 all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the&lt;br /&gt;
 elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and &lt;br /&gt;
 odd floors separately).The elevator should stop at the desired floor.&lt;br /&gt;
&lt;br /&gt;
Generally Functional testing is '''Black Box''' testing. In this method the SUT (System under Test) is considered as a Black box. In this phase of testing the internals of the SUT like the design or algorithm are not considered by the tester. Inputs are provided to the black box and the outputs are validated to the expected output specified in the design document.&lt;br /&gt;
&lt;br /&gt;
2 approaches can be taken for writing the functional tests&lt;br /&gt;
* '''Requirement based approach''': In this approach the specification for the system or software design is used as the base to write functional test.  &lt;br /&gt;
* '''Business process based approach''':  Business process refer to the day-to-day use of the system. This knowledge is used to do functional testing of the system.&lt;br /&gt;
&lt;br /&gt;
Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20956</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20956"/>
		<updated>2009-09-21T06:57:54Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and Integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
=== '''Big Bang Testing Approach''' ===&lt;br /&gt;
As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. This approach is more useful in smaller systems because integration of smaller systems are easier.&lt;br /&gt;
* Advantages:&lt;br /&gt;
** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
* Disadvantages:&lt;br /&gt;
**  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
** Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
** Writing test cases are also non-trivial.&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== '''Incremental Testing Approach''' ===&lt;br /&gt;
Testing is done after integration of one module at a time. After finishing the unit testing of each module or sub-system they are integrated and tested. Stubs are used for modules in the system which are not integrated till now.&lt;br /&gt;
* Advantages:&lt;br /&gt;
** Problems detection is early compared to the Big Bang approach&lt;br /&gt;
** No need to wait till the unit testing of all the modules have finished&lt;br /&gt;
** Debugging is much simpler&lt;br /&gt;
* Disadvantages:&lt;br /&gt;
** This approach is a time taking process because the integration tests have to run multiple times&lt;br /&gt;
** Stubs have to be developed to substitute the missing modules&lt;br /&gt;
[[Image:Incremental testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Various Approach can be taken for Incremental Testing&lt;br /&gt;
* '''Top-Down Approach''': In this approach the system is tested according to the work flow or code flow. The Top level module is tested first then each lower level module is integrated and tested.Top level modules are modules which call other modules and lower level modules are the ones which are called by other modules. Terminal modules are modules which do not call any other module. &lt;br /&gt;
[[Image:Topdown testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the above figure Module A is the top most module in the system then B,C,D are lower level modules. Generally module A is the user interface and stubs for each interface are used.  Then each module is integrated and the tested. &lt;br /&gt;
* Advantages:&lt;br /&gt;
** The testing flow follows the architecture of the system so any bug in the top level design or implementation could be found at early stages&lt;br /&gt;
** If the top level modules call multiple lower modules then the testing can be done in various combinations&lt;br /&gt;
 For example in the figure A calls B and C. The testing can be done as follows&lt;br /&gt;
 A-B-C-D &lt;br /&gt;
 A-C-B-D&lt;br /&gt;
* Disadvantage :&lt;br /&gt;
** The main problem with this approach is the use of stub. Mostly stubs are written to print out some trace statement based on the output of module A after running the test. Now if multiple scenarios have to be tested then different version of Stub B have to written, which is an extra overhead&lt;br /&gt;
&lt;br /&gt;
* '''Bottom-Up Approach''': The bottom-up approach is the opposite of the top-down approach. In this approach the terminal approaches are tested first, then the higher modules and finally the top-most one. Drivers are used in this approach. &lt;br /&gt;
[[Image:Bottomup testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Bottom Up Approach&lt;br /&gt;
In the above figure E,D are the terminal modules which are tested first. Then the higher level modules B,C are tested and finally the topmost module is tested&lt;br /&gt;
*Advantages:&lt;br /&gt;
** No need to write stubs&lt;br /&gt;
** If the terminal modules does the main work in the system then they will be tested first&lt;br /&gt;
*Disadvantages:&lt;br /&gt;
** Need to write drivers&lt;br /&gt;
** The testing is not according to the architecture of the system&lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
 For example, suppose we are to develop the software for an elevator. For designing the test cases for this software, &lt;br /&gt;
 all the senarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the&lt;br /&gt;
 elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and &lt;br /&gt;
 odd floors separately).The elevator should stop at the desired floor.&lt;br /&gt;
&lt;br /&gt;
Generally Functional testing is '''Black Box''' testing. In this method the SUT (System under Test) is considered as a Black box. In this phase of testing the internals of the SUT like the design or algorithm are not considered by the tester. Inputs are provided to the black box and the outputs are validated to the expected output specified in the design document.&lt;br /&gt;
&lt;br /&gt;
2 approaches can be taken for writing the functional tests&lt;br /&gt;
* '''Requirement based approach''': In this approach the specification for the system or software design is used as the base to write functional test.  &lt;br /&gt;
* '''Business process based approach''':  Business process refer to the day-to-day use of the system. This knowledge is used to do functional testing of the system.&lt;br /&gt;
&lt;br /&gt;
Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20955</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20955"/>
		<updated>2009-09-21T06:55:58Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
=== '''Big Bang Testing Approach''' ===&lt;br /&gt;
As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. This approach is more useful in smaller systems because integration of smaller systems are easier.&lt;br /&gt;
* Advantages:&lt;br /&gt;
** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
* Disadvantages:&lt;br /&gt;
**  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
** Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
** Writing test cases are also non-trivial.&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== '''Incremental Testing Approach''' ===&lt;br /&gt;
Testing is done after integration of one module at a time. After finishing the unit testing of each module or sub-system they are integrated and tested. Stubs are used for modules in the system which are not integrated till now.&lt;br /&gt;
* Advantages:&lt;br /&gt;
** Problems detection is early compared to the Big Bang approach&lt;br /&gt;
** No need to wait till the unit testing of all the modules have finished&lt;br /&gt;
** Debugging is much simpler&lt;br /&gt;
* Disadvantages:&lt;br /&gt;
** This approach is a time taking process because the integration tests have to run multiple times&lt;br /&gt;
** Stubs have to be developed to substitute the missing modules&lt;br /&gt;
[[Image:Incremental testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Various Approach can be taken for Incremental Testing&lt;br /&gt;
* '''Top-Down Approach''': In this approach the system is tested according to the work flow or code flow. The Top level module is tested first then each lower level module is integrated and tested.Top level modules are modules which call other modules and lower level modules are the ones which are called by other modules. Terminal modules are modules which do not call any other module. &lt;br /&gt;
[[Image:Topdown testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the above figure Module A is the top most module in the system then B,C,D are lower level modules. Generally module A is the user interface and stubs for each interface are used.  Then each module is integrated and the tested. &lt;br /&gt;
* Advantages:&lt;br /&gt;
** The testing flow follows the architecture of the system so any bug in the top level design or implementation could be found at early stages&lt;br /&gt;
** If the top level modules call multiple lower modules then the testing can be done in various combinations&lt;br /&gt;
 For example in the figure A calls B and C. The testing can be done as follows&lt;br /&gt;
 A-B-C-D &lt;br /&gt;
 A-C-B-D&lt;br /&gt;
* Disadvantage :&lt;br /&gt;
** The main problem with this approach is the use of stub. Mostly stubs are written to print out some trace statement based on the output of module A after running the test. Now if multiple scenarios have to be tested then different version of Stub B have to written, which is an extra overhead&lt;br /&gt;
&lt;br /&gt;
* '''Bottom-Up Approach''': The bottom-up approach is the opposite of the top-down approach. In this approach the terminal approaches are tested first, then the higher modules and finally the top-most one. Drivers are used in this approach. &lt;br /&gt;
[[Image:Bottomup testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Bottom Up Approach&lt;br /&gt;
In the above figure E,D are the terminal modules which are tested first. Then the higher level modules B,C are tested and finally the topmost module is tested&lt;br /&gt;
*Advantages:&lt;br /&gt;
** No need to write stubs&lt;br /&gt;
** If the terminal modules does the main work in the system then they will be tested first&lt;br /&gt;
*Disadvantages:&lt;br /&gt;
** Need to write drivers&lt;br /&gt;
** The testing is not according to the architecture of the system&lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
 For example, suppose we are to develop the software for an elevator. For designing the test cases for this software, &lt;br /&gt;
 all the senarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the&lt;br /&gt;
 elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and &lt;br /&gt;
 odd floors separately).The elevator should stop at the desired floor.&lt;br /&gt;
&lt;br /&gt;
Generally Functional testing is '''Black Box''' testing. In this method the SUT (System under Test) is considered as a Black box. In this phase of testing the internals of the SUT like the design or algorithm are not considered by the tester. Inputs are provided to the black box and the outputs are validated to the expected output specified in the design document.&lt;br /&gt;
&lt;br /&gt;
2 approaches can be taken for writing the functional tests&lt;br /&gt;
* '''Requirement based approach''': In this approach the specification for the system or software design is used as the base to write functional test.  &lt;br /&gt;
* '''Business process based approach''':  Business process refer to the day-to-day use of the system. This knowledge is used to do functional testing of the system.&lt;br /&gt;
&lt;br /&gt;
Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20932</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20932"/>
		<updated>2009-09-21T05:58:23Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: /* '''Integration testing''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
=== '''Big Bang Testing Approach''' ===&lt;br /&gt;
As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. This approach is more useful in smaller systems because integration of smaller systems are easier.&lt;br /&gt;
* Advantages:&lt;br /&gt;
** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
* Disadvantages:&lt;br /&gt;
**  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
** Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
** Writing test cases are also non-trivial.&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
=== '''Incremental Testing Approach''' ===&lt;br /&gt;
Testing is done after integration of one module at a time. After finishing the unit testing of each module or sub-system they are integrated and tested. Stubs are used for modules in the system which are not integrated till now.&lt;br /&gt;
* Advantages:&lt;br /&gt;
** Problems detection is early compared to the Big Bang approach&lt;br /&gt;
** No need to wait till the unit testing of all the modules have finished&lt;br /&gt;
** Debugging is much simpler&lt;br /&gt;
* Disadvantages:&lt;br /&gt;
** This approach is a time taking process because the integration tests have to run multiple times&lt;br /&gt;
** Stubs have to be developed to substitute the missing modules&lt;br /&gt;
[[Image:Incremental testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Various Approach can be taken for Incremental Testing&lt;br /&gt;
* '''Top-Down Approach''': In this approach the system is tested according to the work flow or code flow. The Top level module is tested first then each lower level module is integrated and tested.Top level modules are modules which call other modules and lower level modules are the ones which are called by other modules. Terminal modules are modules which do not call any other module. &lt;br /&gt;
[[Image:Topdown testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the above figure Module A is the top most module in the system then B,C,D are lower level modules. Generally module A is the user interface and stubs for each interface are used.  Then each module is integrated and the tested. &lt;br /&gt;
* Advantages:&lt;br /&gt;
** The testing flow follows the architecture of the system so any bug in the top level design or implementation could be found at early stages&lt;br /&gt;
** If the top level modules call multiple lower modules then the testing can be done in various combinations&lt;br /&gt;
 For example in the figure A calls B and C. The testing can be done as follows&lt;br /&gt;
 A-B-C-D &lt;br /&gt;
 A-C-B-D&lt;br /&gt;
* Disadvantage :&lt;br /&gt;
** The main problem with this approach is the use of stub. Mostly stubs are written to print out some trace statement based on the output of module A after running the test. Now if multiple scenarios have to be tested then different version of Stub B have to written, which is an extra overhead&lt;br /&gt;
&lt;br /&gt;
* '''Bottom-Up Approach''': The bottom-up approach is the opposite of the top-down approach. In this approach the terminal approaches are tested first, then the higher modules and finally the top-most one. Drivers are used in this approach. &lt;br /&gt;
[[Image:Bottomup testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Bottom Up Approach&lt;br /&gt;
In the above figure E,D are the terminal modules which are tested first. Then the higher level modules B,C are tested and finally the topmost module is tested&lt;br /&gt;
*Advantages:&lt;br /&gt;
** No need to write stubs&lt;br /&gt;
** If the terminal modules does the main work in the system then they will be tested first&lt;br /&gt;
*Disadvantages:&lt;br /&gt;
** Need to write drivers&lt;br /&gt;
** The testing is not according to the architecture of the system&lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20892</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20892"/>
		<updated>2009-09-21T05:11:08Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* '''Big Bang Testing Approach''' As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. This approach is more useful in smaller systems because integration of smaller systems are easier.&lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
***  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
*** Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
*** Writing test cases are also non-trivial.&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* '''Incremental Testing Approach''' Testing is done after integration of one module at a time. After finishing the unit testing of each module or sub-system they are integrated and tested. Stubs are used for modules in the system which are not integrated till now.&lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Problems detection is early compared to the Big Bang approach&lt;br /&gt;
*** No need to wait till the unit testing of all the modules have finished&lt;br /&gt;
*** Debugging is much simpler&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
*** This approach is a time taking process because the integration tests have to run multiple times&lt;br /&gt;
*** Stubs have to be developed to substitute the missing modules&lt;br /&gt;
[[Image:Incremental testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Various Approach can be taken for Incremental Testing&lt;br /&gt;
* '''Top-Down Approach''': In this approach the system is tested according to the work flow or code flow. The Top level module is tested first then each lower level module is integrated and tested.Top level modules are modules which call other modules and lower level modules are the ones which are called by other modules. Terminal modules are modules which do not call any other module. &lt;br /&gt;
[[Image:Topdown testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the above figure Module A is the top most module in the system then B,C,D are lower level modules. Generally module A is the user interface and stubs for each interface are used.  Then each module is integrated and the tested. &lt;br /&gt;
* Advantages:&lt;br /&gt;
** The testing flow follows the architecture of the system so any bug in the top level design or implementation could be found at early stages&lt;br /&gt;
** If the top level modules call multiple lower modules then the testing can be done in various combinations&lt;br /&gt;
 For example in the figure A calls B and C. The testing can be done as follows&lt;br /&gt;
 A-B-C-D &lt;br /&gt;
 A-C-B-D&lt;br /&gt;
* Disadvantage :&lt;br /&gt;
** The main problem with this approach is the use of stub. Mostly stubs are written to print out some trace statement based on the output of module A after running the test. Now if multiple scenarios have to be tested then different version of Stub B have to written, which is an extra overhead&lt;br /&gt;
&lt;br /&gt;
* '''Bottom-Up Approach''': The bottom-up approach is the opposite of the top-down approach. In this approach the terminal approaches are tested first, then the higher modules and finally the top-most one. Drivers are used in this approach. &lt;br /&gt;
[[Image:Bottomup testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Bottom Up Approach&lt;br /&gt;
In the above figure E,D are the terminal modules which are tested first. Then the higher level modules B,C are tested and finally the topmost module is tested&lt;br /&gt;
*Advantages:&lt;br /&gt;
** No need to write stubs&lt;br /&gt;
** If the terminal modules does the main work in the system then they will be tested first&lt;br /&gt;
*Disadvantages:&lt;br /&gt;
** Need to write drivers&lt;br /&gt;
** The testing is not according to the architecture of the system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20891</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20891"/>
		<updated>2009-09-21T05:10:45Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* '''Big Bang Testing Approach''' As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. This approach is more useful in smaller systems because integration of smaller systems are easier.&lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
***  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
*** Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
*** Writing test cases are also non-trivial.&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* '''Incremental Testing Approach''' Testing is done after integration of one module at a time. After finishing the unit testing of each module or sub-system they are integrated and tested. Stubs are used for modules in the system which are not integrated till now.&lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Problems detection is early compared to the Big Bang approach&lt;br /&gt;
*** No need to wait till the unit testing of all the modules have finished&lt;br /&gt;
*** Debugging is much simpler&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
*** This approach is a time taking process because the integration tests have to run multiple times&lt;br /&gt;
*** Stubs have to be developed to substitute the missing modules&lt;br /&gt;
[[Image:Incremental testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Various Approach can be taken for Incremental Testing&lt;br /&gt;
* '''Top-Down Approach''': In this approach the system is tested according to the work flow or code flow. The Top level module is tested first then each lower level module is integrated and tested.Top level modules are modules which call other modules and lower level modules are the ones which are called by other modules. Terminal modules are modules which do not call any other module. &lt;br /&gt;
[[Image:Topdown testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the above figure Module A is the top most module in the system then B,C,D are lower level modules. Generally module A is the user interface and stubs for each interface are used.  Then each module is integrated and the tested. &lt;br /&gt;
* Advantages:&lt;br /&gt;
** The testing flow follows the architecture of the system so any bug in the top level design or implementation could be found at early stages&lt;br /&gt;
** If the top level modules call multiple lower modules then the testing can be done in various combinations&lt;br /&gt;
 For example in the figure A calls B and C. The testing can be done as follows&lt;br /&gt;
 A-B-C-D &lt;br /&gt;
 A-C-B-D&lt;br /&gt;
* Disadvantage :&lt;br /&gt;
** The main problem with this approach is the use of stub. Mostly stubs are written to print out some trace statement based on the output of module A after running the test. Now if multiple scenarios have to be tested then different version of Stub B have to written, which is an extra overhead&lt;br /&gt;
&lt;br /&gt;
* '''Bottom-Up Approach''': The bottom-up approach is the opposite of the top-down approach. In this approach the terminal approaches are tested first, then the higher modules and finally the top-most one. Drivers are used in this approach. &lt;br /&gt;
[[Image:TBottomup testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Bottom Up Approach&lt;br /&gt;
In the above figure E,D are the terminal modules which are tested first. Then the higher level modules B,C are tested and finally the topmost module is tested&lt;br /&gt;
*Advantages:&lt;br /&gt;
** No need to write stubs&lt;br /&gt;
** If the terminal modules does the main work in the system then they will be tested first&lt;br /&gt;
*Disadvantages:&lt;br /&gt;
** Need to write drivers&lt;br /&gt;
** The testing is not according to the architecture of the system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20888</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20888"/>
		<updated>2009-09-21T05:10:08Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* '''Big Bang Testing Approach''' As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. This approach is more useful in smaller systems because integration of smaller systems are easier.&lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
***  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
*** Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
*** Writing test cases are also non-trivial.&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* '''Incremental Testing Approach''' Testing is done after integration of one module at a time. After finishing the unit testing of each module or sub-system they are integrated and tested. Stubs are used for modules in the system which are not integrated till now.&lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Problems detection is early compared to the Big Bang approach&lt;br /&gt;
*** No need to wait till the unit testing of all the modules have finished&lt;br /&gt;
*** Debugging is much simpler&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
*** This approach is a time taking process because the integration tests have to run multiple times&lt;br /&gt;
*** Stubs have to be developed to substitute the missing modules&lt;br /&gt;
[[Image:Incremental testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Various Approach can be taken for Incremental Testing&lt;br /&gt;
* '''Top-Down Approach''': In this approach the system is tested according to the work flow or code flow. The Top level module is tested first then each lower level module is integrated and tested.Top level modules are modules which call other modules and lower level modules are the ones which are called by other modules. Terminal modules are modules which do not call any other module. &lt;br /&gt;
[[Image:Topdown testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the above figure Module A is the top most module in the system then B,C,D are lower level modules. Generally module A is the user interface and stubs for each interface are used.  Then each module is integrated and the tested. &lt;br /&gt;
* Advantages:&lt;br /&gt;
** The testing flow follows the architecture of the system so any bug in the top level design or implementation could be found at early stages&lt;br /&gt;
** If the top level modules call multiple lower modules then the testing can be done in various combinations&lt;br /&gt;
 For example in the figure A calls B and C. The testing can be done as follows&lt;br /&gt;
 A-B-C-D &lt;br /&gt;
 A-C-B-D&lt;br /&gt;
* Disadvantage :&lt;br /&gt;
** The main problem with this approach is the use of stub. Mostly stubs are written to print out some trace statement based on the output of module A after running the test. Now if multiple scenarios have to be tested then different version of Stub B have to written, which is an extra overhead&lt;br /&gt;
&lt;br /&gt;
* '''Bottom-Up Approach''': The bottom-up approach is the opposite of the top-down approach. In this approach the terminal approaches are tested first, then the higher modules and finally the top-most one. Drivers are used in this approach. &lt;br /&gt;
[[Image:Topdown testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Bottom Up Approach&lt;br /&gt;
In the above figure E,D are the terminal modules which are tested first. Then the higher level modules B,C are tested and finally the topmost module is tested&lt;br /&gt;
*Advantages:&lt;br /&gt;
** No need to write stubs&lt;br /&gt;
** If the terminal modules does the main work in the system then they will be tested first&lt;br /&gt;
*Disadvantages:&lt;br /&gt;
** Need to write drivers&lt;br /&gt;
** The testing is not according to the architecture of the system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Bottomup_testing.jpg&amp;diff=20883</id>
		<title>File:Bottomup testing.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Bottomup_testing.jpg&amp;diff=20883"/>
		<updated>2009-09-21T04:55:09Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: Bottom up testing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bottom up testing&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20865</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20865"/>
		<updated>2009-09-21T04:25:27Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* '''Big Bang Testing Approach''' As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. This approach is more useful in smaller systems because integration of smaller systems are easier.&lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
***  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
*** Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
*** Writing test cases are also non-trivial.&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* '''Incremental Testing Approach''' Testing is done after integration of one module at a time. After finishing the unit testing of each module or sub-system they are integrated and tested. Stubs are used for modules in the system which are not integrated till now.&lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Problems detection is early compared to the Big Bang approach&lt;br /&gt;
*** No need to wait till the unit testing of all the modules have finished&lt;br /&gt;
*** Debugging is much simpler&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
*** This approach is a time taking process because the integration tests have to run multiple times&lt;br /&gt;
*** Stubs have to be developed to substitute the missing modules&lt;br /&gt;
[[Image:Incremental testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Various Approach can be taken for Incremental Testing&lt;br /&gt;
* '''Top-Down Approach''': In this approach the system is tested according to the work flow or code flow. The Top level module is tested first then each lower level module is integrated and tested.&lt;br /&gt;
[[Image:Topdown testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the above figure Module A is the top most module in the system then B,C,D are lower level modules. Generally module A is the user interface and stubs for each interface are used.  Then each module is integrated and the tested. &lt;br /&gt;
* Advantages:&lt;br /&gt;
** The testing flow follows the architecture of the system&lt;br /&gt;
* Disadvantage :&lt;br /&gt;
** The main problem with this approach is the use of stub. Mostly stubs are written to print out some trace statement based on the output of module A after running the test. Now if multiple scenarios have to be tested then different version of Stub B have to written, which is an extra overhead&lt;br /&gt;
&lt;br /&gt;
* '''Bottom-Up Approach''': &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Topdown_testing.jpg&amp;diff=20864</id>
		<title>File:Topdown testing.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Topdown_testing.jpg&amp;diff=20864"/>
		<updated>2009-09-21T04:23:25Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: TOP DOWN TESTING&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TOP DOWN TESTING&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20862</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20862"/>
		<updated>2009-09-21T04:15:11Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* '''Big Bang Testing Approach''' As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. This approach is more useful in smaller systems because integration of smaller systems are easier.&lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
***  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
*** Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
*** Writing test cases are also non-trivial.&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* '''Incremental Testing Approach''' Testing is done after integration of one module at a time. After finishing the unit testing of each module or sub-system they are integrated and tested. Stubs are used for modules in the system which are not integrated till now.&lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Problems detection is early compared to the Big Bang approach&lt;br /&gt;
*** No need to wait till the unit testing of all the modules have finished&lt;br /&gt;
*** Debugging is much simpler&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
*** This approach is a time taking process because the integration tests have to run multiple times&lt;br /&gt;
*** Stubs have to be developed to substitute the missing modules&lt;br /&gt;
&lt;br /&gt;
Various Approach can be taken for Incremental Testing&lt;br /&gt;
* '''Top-Down Approach''': In this approach the system is tested according to the work flow or code flow. The Top level module is tested first then each lower level module is integrated and tested.&lt;br /&gt;
[[Image:Incremental testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the above figure Module A is the top most module in the system then B,C,D are lower level modules. Generally module A is the user interface and stubs for each interface are used.  Then each module is integrated and the tested. &lt;br /&gt;
** Advantages:&lt;br /&gt;
*** The testing flow follows the architecture of the system&lt;br /&gt;
** Disadvantage :&lt;br /&gt;
*** The main problem with this approach is the use of stub. Mostly stubs are written to print out some trace statement based on the output of module A after running the test. Now if multiple scenarios have to be tested then different version of Stub B have to written, which is an extra overhead&lt;br /&gt;
*** &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20832</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20832"/>
		<updated>2009-09-21T03:11:32Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* '''Big Bang Testing Approach''' As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
***  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
*** Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
*** Writing test cases are also non-trivial.&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* '''Incremental Testing''' &lt;br /&gt;
Testing is done after integration of one module at a time. After finishing the unit testing of each module or sub-system they are integrated and tested.&lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Problems detection is early compared to the Big Bang approach&lt;br /&gt;
*** No need to wait till the all the unit testing of all the modules have finished&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
*** This approach is a time taking process&lt;br /&gt;
[[Image:Incremental testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20829</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20829"/>
		<updated>2009-09-21T03:10:00Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
***  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
*** Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
*** Writing test cases are also non-trivial.&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Big Bang Testing Approach'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. After finishing the unit testing of each module or sub-system they are integrated and tested.&lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Problems detection is early compared to the Big Bang approach&lt;br /&gt;
*** No need to wait till the all the unit testing of all the modules have finished&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
*** This approach is a time taking process&lt;br /&gt;
[[Image:Incremental testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Incremental Testing'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20828</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20828"/>
		<updated>2009-09-21T03:09:08Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
***  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
*** Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
*** Writing test cases are also non-trivial.&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
'''Big Bang Testing Approach'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. After finishing the unit testing of each module or sub-system they are integrated and tested.&lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Problems detection is early compared to the Big Bang approach&lt;br /&gt;
*** No need to wait till the all the unit testing of all the modules have finished&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
*** This approach is a time taking process&lt;br /&gt;
 [[Image:Incremental testing.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Incremental Testing'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Incremental_testing.jpg&amp;diff=20825</id>
		<title>File:Incremental testing.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Incremental_testing.jpg&amp;diff=20825"/>
		<updated>2009-09-21T03:08:07Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: Incremental Testing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Incremental Testing&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20796</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20796"/>
		<updated>2009-09-21T02:48:31Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
** Advantages:&lt;br /&gt;
**# Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**#  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
**# Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
**# Writing test cases are also non-trivial.&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
'''Big Bang Testing Approach'''&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. After finishing the unit testing of each module or sub-system they are integrated and tested.&lt;br /&gt;
** Advantages:&lt;br /&gt;
**# Problems detection is early compared to the Big Bang approach&lt;br /&gt;
**# No need to wait till the all the unit testing of all the modules have finished&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**# This approach is a time taking process&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20792</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20792"/>
		<updated>2009-09-21T02:47:15Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
'''Big Bang Testing Approach'''&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
** Advantages:&lt;br /&gt;
**# Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**#  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
**# Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
**# Writing test cases are also non-trivial.&lt;br /&gt;
&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. After finishing the unit testing of each module or sub-system they are integrated and tested.&lt;br /&gt;
** Advantages:&lt;br /&gt;
**# Problems detection is early compared to the Big Bang approach&lt;br /&gt;
**# No need to wait till the all the unit testing of all the modules have finished&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**# This approach is a time taking process&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20791</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20791"/>
		<updated>2009-09-21T02:46:30Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
'''Big Bang Testing Approach'''&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
** Advantages:&lt;br /&gt;
**# Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**#  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
**# Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
**# Writing test cases are also non-trivial.&lt;br /&gt;
&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. After finishing the unit testing of each module or sub-system they are integrated and tested.&lt;br /&gt;
** Advantages:&lt;br /&gt;
**# Problems detection is early compared to the Big Bang approach&lt;br /&gt;
**# No need to wait till the all the unit testing of all the modules have finished&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**# This approach is a time taking process&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20788</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20788"/>
		<updated>2009-09-21T02:45:19Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
'''Big Bang Testing Approach'''&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
** Advantages:&lt;br /&gt;
**# Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**#  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
**# Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
**# Writing test cases are also non-trivial.&lt;br /&gt;
&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. After finishing the unit testing of each module or sub-system they are integrated and tested.&lt;br /&gt;
** Advantages:&lt;br /&gt;
**# Problems detection is early compared to the Big Bang approach&lt;br /&gt;
**# No need to wait till the all the unit testing of all the modules have finished&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**# This approach is a time taking process&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20784</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20784"/>
		<updated>2009-09-21T02:43:46Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
** Advantages:&lt;br /&gt;
**# Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**#  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
**# Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
**# Writing test cases are also non-trivial.&lt;br /&gt;
&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. After finishing the unit testing of each module or sub-system they are integrated and tested.&lt;br /&gt;
** Advantages:&lt;br /&gt;
**# Problems detection is early compared to the Big Bang approach&lt;br /&gt;
**# No need to wait till the all the unit testing of all the modules have finished&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**# This approach is a time taking process&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20780</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20780"/>
		<updated>2009-09-21T02:41:41Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
** Advantages:&lt;br /&gt;
**# Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**#  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
**# Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
**# Writing test cases are also non-trivial.&lt;br /&gt;
&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. After finishing the unit testing of each module or sub-system they are integrated and tested.&lt;br /&gt;
** Advantages:&lt;br /&gt;
**# Problems detection is early compared to the Big Bang approach&lt;br /&gt;
**# No need to wait till the all the unit testing of all the modules have finished&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**# This approach is a time taking process&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20775</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20775"/>
		<updated>2009-09-21T02:38:41Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
[[Image:Bigbang.jpg]]&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
** Advantages:&lt;br /&gt;
**# Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**#  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
**# Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
**# Writing test cases are also non-trivial.&lt;br /&gt;
&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. After finishing the unit testing of each module or sub-system they are integrated and tested.&lt;br /&gt;
** Advantages:&lt;br /&gt;
**# Problems detection is early compared to the Big Bang approach&lt;br /&gt;
**# No need to wait till the all the unit testing of all the modules have finished&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**# This approach is a time taking process&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Bigbang.jpg&amp;diff=20774</id>
		<title>File:Bigbang.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Bigbang.jpg&amp;diff=20774"/>
		<updated>2009-09-21T02:38:00Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: Big Bang Testing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Big Bang Testing&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20755</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20755"/>
		<updated>2009-09-21T02:24:38Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**#  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
**# Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
**# Writing test cases are also non-trivial.&lt;br /&gt;
&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. This solves the disadvantages of the Big-Bang. &lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**# This approach is a time taking process. &lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20721</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20721"/>
		<updated>2009-09-21T01:33:58Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: /* ''' Functional and integration testing and beyond''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==''' Functional and integration testing and beyond''' == &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**#  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
**# Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
**# Writing test cases are also non-trivial.&lt;br /&gt;
&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. This solves the disadvantages of the Big-Bang. &lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**# This approach is a time taking process. For a large system&lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20678</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20678"/>
		<updated>2009-09-21T00:57:19Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=''' Functional and integration testing and beyond''' = &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
** Advantages:&lt;br /&gt;
*** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**#  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
**# Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
**# Writing test cases are also non-trivial.&lt;br /&gt;
&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. This solves the disadvantages of the Big-Bang. &lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**# This approach is a time taking process. For a large system&lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20677</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20677"/>
		<updated>2009-09-21T00:55:05Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: /* ''' Functional and integration testing and beyond''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=''' Functional and integration testing and beyond''' = &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Driver: Supporting code or data used for testing the whole or part of the software system &lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
# Stub: Dummy procedure or module that can be used to simulate or substitute an actual portion of a system&lt;br /&gt;
# Test: Sequence of steps to validate the system design and implementation&lt;br /&gt;
# Usecase :Scenario that describing an interaction between a user and a system&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
Integration is a systematic approach to build the complete software structure specified in the design from unit-tested &lt;br /&gt;
modules.Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems. So the main focus of integration tests is not the functionality of individual modules but the interaction between these modules like interaction with operating system, interaction between client and server&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
** Advantages:&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
*** Since all the modules are combined and all are tested at the same time, this approach of integration is less time consuming&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
** Disadvantages:&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
**#  Debugging and solving a fault is not that trivial. Because in this type of testing many modules are integrated one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
**# Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
**# Writing test cases are also non-trivial.&lt;br /&gt;
&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. This solves the disadvantages of the Big-Bang. &lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**# This approach is a time taking process. For a large system&lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20649</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20649"/>
		<updated>2009-09-21T00:14:50Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: /* '''Functional testing''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=''' Functional and integration testing and beyond''' = &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
&lt;br /&gt;
Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems.&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**#  Debugging and solving a fault is not that trivial. Because since this type of testing is done for the first time one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
**# Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
**# Writing test cases are also non-trivial.&lt;br /&gt;
&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. This solves the disadvantages of the Big-Bang. &lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**# This approach is a time taking process. For a large system&lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed to ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Regression testing is another form of functional testing where you test the earlier features and functionality of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20638</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20638"/>
		<updated>2009-09-20T22:56:13Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=''' Functional and integration testing and beyond''' = &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
&lt;br /&gt;
Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems.&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**#  Debugging and solving a fault is not that trivial. Because since this type of testing is done for the first time one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
**# Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
**# Writing test cases are also non-trivial.&lt;br /&gt;
&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. This solves the disadvantages of the Big-Bang. &lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**# This approach is a time taking process. For a large system&lt;br /&gt;
&lt;br /&gt;
== '''Functional testing''' ==&lt;br /&gt;
Functional testing is designed o ensure the system requirements and specifications are achieved. It can start with testing of the requirements and whether the application compiles with the organizational policies and procedures. Regression testing is another form of functional testing where you test the earlier features and functionalities of the module which were working on the desired lines but have to be tested currently after some changes have been in the system. The changes might not be in the particular module but it can be affected due to inter dependencies. During the design phase, after knowing the functionality of the module/modules and the system, some errors can be predicted in advance. A functional test should incorporate such type of scenarios too. In this case the erroneous transactions/ applications are deliberately introduced and the system should be able to correctly find them. In general, all the use cases in the user’s requirements become the functional test cases.&lt;br /&gt;
As an example, suppose we are to develop the software for an elevator. For designing the test cases for this software, all the scenarios and operations that can take place in the elevator need to be analyzed. To begin from the basic operations, the elevator should be bidirectional and it should stop at each floor (unless we have two elevators in the requirement for even and odd floors separately).The elevator should stop at the desired floor.&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20637</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20637"/>
		<updated>2009-09-20T22:53:57Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=''' Functional and integration testing and beyond''' = &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Terms''' ==&lt;br /&gt;
# Sub-system: Component or Module of a software system&lt;br /&gt;
# System Under Test: The software system which has to be tested&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
&lt;br /&gt;
Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems.&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**#  Debugging and solving a fault is not that trivial. Because since this type of testing is done for the first time one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
**# Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
**# Writing test cases are also non-trivial.&lt;br /&gt;
&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. This solves the disadvantages of the Big-Bang. &lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**# This approach is a time taking process. For a large system&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20632</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20632"/>
		<updated>2009-09-20T22:47:28Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=''' Functional and integration testing and beyond''' = &lt;br /&gt;
Recognition of software test engineering as a specialty area has increased during the last twenty years. Testing is one of the key focus areas in software engineering. It is an essential activity that observes the functionality of a software system validates its intended behavior and identifies the potential malfunctions. Testing is also the primary way to improve software reliability. &lt;br /&gt;
&lt;br /&gt;
The test cases should be carefully designed to cover many aspects in the SDLC such as possible aberrations from user’s requirements, system behavior upon malicious inputs, and robustness to extensive load conditions and so on. As more and more software is used in critical applications, the time and cost involved in testing is also increasing owing to the higher quality required. Although test automation saves a lot of time and can be used for regression load tests, manual testing is still widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
&lt;br /&gt;
Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems.&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**#  Debugging and solving a fault is not that trivial. Because since this type of testing is done for the first time one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
**# Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
**# Writing test cases are also non-trivial.&lt;br /&gt;
&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. This solves the disadvantages of the Big-Bang. &lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**# This approach is a time taking process. For a large system&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20629</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20629"/>
		<updated>2009-09-20T22:46:09Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=''' Functional and integration testing and beyond''' = &lt;br /&gt;
&lt;br /&gt;
== '''Integration testing''' ==&lt;br /&gt;
&lt;br /&gt;
Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems.&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**#  Debugging and solving a fault is not that trivial. Because since this type of testing is done for the first time one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
**# Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
**# Writing test cases are also non-trivial.&lt;br /&gt;
&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. This solves the disadvantages of the Big-Bang. &lt;br /&gt;
** Disadvantages:&lt;br /&gt;
**# This approach is a time taking process. For a large system&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20626</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 4 xy</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_4_xy&amp;diff=20626"/>
		<updated>2009-09-20T22:38:02Z</updated>

		<summary type="html">&lt;p&gt;Alakshm3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Integration testing:''' Integration testing is the next phase of unit testing. Generally in software development complete software is divided into various sub-systems mostly developed by different teams. More often than not each sub-system works very well individually but when they are integrated then lot of problems.&lt;br /&gt;
&lt;br /&gt;
There are many approaches that can be followed for Integration Testing&lt;br /&gt;
&lt;br /&gt;
* Big-Bang: As the name suggests all the components are integrated at once. After all the integration is completed a set of tests are run which not only validate a single component of sub-system but also test and validate the interaction between different components. &lt;br /&gt;
** Disadvantages:&lt;br /&gt;
Debugging and solving a fault is not that trivial. Because since this type of testing is done for the first time one cannot be sure whether the bug found was present in any sub-system or interaction between different sub-systems.&lt;br /&gt;
Testing process cannot be started until all the sub-systems have finished their development.&lt;br /&gt;
Writing test cases are also non-trivial.&lt;br /&gt;
&lt;br /&gt;
* Incremental Testing: As the name suggests testing is done after integration of one sub-system at a time. This solves the disadvantages of the Big-Bang. &lt;br /&gt;
** Disadvantages:&lt;br /&gt;
This approach is a time taking process. For a large system&lt;/div&gt;</summary>
		<author><name>Alakshm3</name></author>
	</entry>
</feed>