0% found this document useful (0 votes)
5 views

ReportOnCodingTestingSWEFinal11

Uploaded by

almustaphaam2018
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views

ReportOnCodingTestingSWEFinal11

Uploaded by

almustaphaam2018
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 34

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/377530082

Report On Coding & Testing in Software Engineering

Technical Report · January 2024


DOI: 10.13140/RG.2.2.33051.44321

CITATIONS READS

0 579

1 author:

Pial Barua
Hubei University of Automotive Technology
8 PUBLICATIONS 0 CITATIONS

SEE PROFILE

All content following this page was uploaded by Pial Barua on 19 January 2024.

The user has requested enhancement of the downloaded file.


REPORT ON CODING & SOFTWARE TESTING

A Report

By

Pial Barua ; ID 202342029


Md.Al Amin ; ID 202342020
Md.Jahid Hassan Shawon ; ID 202342025
Shimu Akter ; ID 202342096
Benjamin Cham Semgbloh ; ID 202342023
Md.Shohel Rana ; ID 202342032
Md.Jahirul Islam ; ID 202342033
Shahidul Islam ; ID 202342054
Imran Khan Tanvir ; ID 202342026
Hagenimana Samuel ; ID 202342027

Course Teacher : Dr.Md Fazal Badshah


Associate Professor, Electrical & Information Engineering
Hubei University Of Automotive Technology

Submitted to the
SCHOOL OF ELECTRICAL & INFORMATION ENGINEERING
HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY
In partial fulfillment of the requirements for the course
of
Software Engineering

DECEMBER 2023
Acknowledgments

Firstly, We would like to register a note of thanks to our course teacher Dr.Md. Fazal Badshah
Associate Professor, School of Electrical & Information Engineering, Hubei University Of
Automotive Technology for all the guidance, help and interest regarding the present work.
We would like to dedicate this report for the all the engineers and scientists who have given their
precious time and effort for invention and building a better civilization. Also special thanks to the
authority of Hubei University Of Automotive Technology for giving us an opportunity to work
on applications of mechanical engineering.

1
Abstract

The present report is intended to study and understand software coding and testing , the most two
crucial stages for software development life-cycle. This report will give an intensive overview
software coding & testing in broader sense with practical example. Software engineering playing
a great role in this era for rapid technological development with its agile advancement. To keep
pace with this fast transition the overall software market has to be very sincere on coding and
software evaluation stage. Through the entire software engineering course we studied the essence
of software programming and testing in SDLC. This report will give a broader idea about these
two most important stage of software development.

Keywords: SDLC (Software Development Life-cycle) , Coding , software testing

2
Contents

Acknowledgments 01
Abstract 02
Contents 03-04

1 Coding
1.1 History Of Computer Programming 06-07
1.2 Coding Overview 07-08
1.3 Coding In Software Engineering 08
1.4 Coding Vs Programming 09
1.5 Goals Of Coding 09-10
1.6 Characteristics Of Programming Language 10-11
1.7 Coding Standards 11
1.7.1 Purpose Of Coding Standards 11
1.7.2 Coding Standards Representatives 12
1.7.2.1 Indentation 12
1.7.2.2 Inline Comments 12
1.7.2.3 Structured Programming 13
1.7.2.4 Use Of Global 13
1.7.2.5 Naming Conventions 13
1.7.2.6 Error & Expectations Handling 14

2 Software Testing
2.1 Software Testing Overview 14
2.2 Importance Of Software Testing 15
2.3 Types Of Software Testing 15-16
2.3.1 Functional Testing 16
2.3.1.1 Unit Testing 17-19
2.3.1.2 Integration Testing 19-24
2.3.1.3 System Testing 24-26
2.3.1.4 Acceptance Testing 27-28
2.3.2 Non Functional Testing 28-29

3
2.3.2.1 Security Testing 29
2.3.2.2 Performance Testing 29-30
2.3.2.3 Compatibility Testing 30
2.3.2.4 Usability Testing 31

3 Conclusions 32

4
This page is left blank intentionally

5
Chapter 1

Coding

1.1 History Of Computer Programming

The invention of internal combustion engine turned the whole world into a new phase with the
starting of second industrial revolution. It changed the way of transporting goods and generating
energy thus contributed to the advancement of human civilization. The invention of personal
computers lead to initiate the third industrial revolution and made our life fast , easy and more
convenient. It is almost impossible to unimaginable our life without computers. From daily life to
space research , application of computer is inevitable and unavoidable.
Behind all the functionality of a computer, it is the programming language which perform all the
things inside this magical machine. Computer performs task based on computing and computing
blocks are build on binary coding through programming language. Although coding makes our
computer works but it has been used even before the invention of computer. In 1703 German
mathematician and philosopher Gottfried Wilhelm Leibniz created the binary coding system.
In 1725 Basile Bouchon invented a loom could work on wove pattern as per the instructions in
the paper. It is believed that Basile Bouchon was the first person to punch holes into paper to
control a machine. The one represent punched hole and zero represent no hole at all. But this
machine was not entirely automated.

Fig 1.1: The binary punch card of Basile Bouchon

In 1801 Joseph Jacquard build the powered fabric loom. The loom can get instruction on how to
create complex textiles using a series of punch cards. Holes associated with the hook can raise or
lowered the needle and thus can create pattern as per instruction. Jacquard loom is significant in
the history of computer because it was the first machine which used interchangeable punch cards
to program a machine that is automated.

Fig 1.2: The Jacquard Loom

6
In 19th Century English mathematician Charles Babbage developed a mechanical computing
machine called analytical engine. It is believed that it was the first computing machine of the
history. The machine was to build for the purpose of calculating polynomial function using the
method of finite difference. The analytical engine was to be a general purpose fully program
controlled automatic mechanical digital computer.

Fig: 1.3: Analytical engine of Charles Babbage

Although the engine was designed by Charles Babbage but the algorithm for the machine was
developed by Ada Lovelace to compute Bernoulli number.It is believed to be the first
programming language in the history of computer technology.

Assembly language came to the scene in 1949 and soon used widely in electronic delay storage
automatic calculators. This was a low level computer language. In the beginning of the
development of computer programming language , there were many variants for computer
languages but all of these covered in one generic term called Auto-code. It could be directly
translated into machine code by a program called compiler.
Algol which stands for algorithmic language developed in 1958 and this was believed to be the
starting point of JAVA, C, C++ and Pascal.

1.2 Coding Overview

Our daily smart electronic devices such as: smartphones, tablets, laptop etc can function with
high accuracy and very fast. We can search a name in you-tube and can find many video also can
upload and store in the website. But how does computers listen to us as we instruct them through
input devices like mouse, keyboard, voice command? Human interacts and performs task as per
written or verbal instruction , computers also understand languages but no like as human we do.
The language that a device understand is called machine language. Machine can only understand
only 0 and 1 (Binary Numbers) but to write an instruction only 0 and 1 is not practical for a
computer programmer. That is where the coding plays a vital role. Coding is the process that
human write instruction for computers. A programmer write instruction in human language and
coding does this translation for the machine as by transforming the human language into binary
numerical algorithm .

7
Fig: 1.4 Translating assembly language to binary language

A group of certain amount of coding line creates a software and the software performs task in the
computer. For an example for a video player there are thousands of lines of codes that plays
video and thus the video player is a software.

1.3 Coding in Software Engineering

In software engineering the SDLC (Software development life cycle) plays a great role from the
scratch to a developed software. The SDLC includes 7 vital stage of software development such
as: Planning , Analyzing , Designing , Implementing, Testing , Deployment , Maintenance. A
software is build as per the requirements of stakeholders. The requirements of stakeholder formed
into a CRS(Customer Requirement Specifications) form and after that the the designer does the
low and high level designing and prepares SRS (Software Requirement Specifications). The
designer prepares UML design and pseudo code for the software and later the developers develop
the software as per the design by coding through computer programming languages. In software
engineering coding is the translating process from an SRS to source code or computer language
format. It is very critical and vital stage for any software development process. It is known as the
foundation block for software.

Fig: 1.5 (a) Software Requirements Specification

Fig: 1.5 (b) Source Code

8
1.4 Coding Vs Programming

Although this two words are used as a synonym to replicate each other but still there is thin layer
between coding and programming. As we have discussed in the previous sections coding is a
process to translate the software requirement specifications to actual source code , now the
question arises what does it mean by programming in this process of translation? A function that
computer performs through software has been instructed by lines of code and an accumulation of
these instructions is programming. To understand this in a visualized manner we can bring up an
example from anti lock braking system of car. The anti-lock braking system purpose is to prevent
wheel locking in emergency braking. The controlling software detects the speed of the car and
braking temptation from braking input, if the software understand by analyzing these factor then
it will command and drive actuator such as an ABS module to stop the wheel safely. In this
example we can call the whole ABS is programmed to perform in an emergency braking and to
build this program the instruction that has been fed to the ECU (Electronic Control Unit) ,
embedded software is through writing instruction. The process of writing instructions is coding.

Fig: 1.6 Data Flow Diagram Of Anti-lock Braking System

1.5 Goals Of Coding

The fundamental objective of coding is to write instruction for machines. But only writing
instruction is not enough in the perspective of software engineering. As coding is the
foundational block for software so any error or bug or any risk arises is mostly for coding fault.
So coding has to be very precise in terms of safety and reliability. Here’s are the three main goal
of coding as follows:-

A. To Translate the design of system into a computer language format : Coding is the process
of transforming the design into source code that the software can perform as per the coded
instruction.

B. To reduce the cost of later phase in SDLC : Software maintenance is not the same like other
machine or applications. In software engineering, maintenance is a process for continuation of
software development. A software does not wear and tear like hardware, over the course of time

9
As the demand of fast technical evolution the software needs to develop and this developing
happens through further coding. If the coding is not efficient than further development would be
much more costlier even risky.

C. Making the program more readable : Software program should be easy to read and
understand so that prior maintenance of software can be done efficiently.

1.6 Characteristics Of Programming Language

To build an efficient software , the following characteristics should have in a programming


language:-

Readability

Widely Available Generality

Modularity Portability
Programming
Language
Efficiency Brevity

Quick Translation Error Checking

Cost

Fig: 1.7 Characteristics of Programming Language

A. Readability: A good high level language can be written such a method that resemble a good
English description of the function that is underlying. A self documentation should be there to
done the coding for better readability.

B. Portability : High level languages are machine-independent. It should be easy so that can
develop portable software efficiently.

C. Generality: A vast collection of program should be allowed in a high level language thus an
expert is relieved to thrive for different diverse languages.

D. Brevity: Implementation of the algorithm with less amount of code is one of the key aspect
for a high level language.

E. Error Checking: A programmer is a human so it is obvious and natural that he or she may
make many errors during coding. High level languages should invoke a lot of bug checking both
at compile time and run time.

10
F. Cost: Programming languages characteristic lead to its ultimate cost.
G. Quick Translation: It should permit quick translation.

H. Efficiency: Creation of an efficient object code should be authorized.

I. Modularity: Several separately compiled modules accumulates to develop a language. It is


necessary to have the appropriate structure for ensuring self consistency among these modules.

J. Widely Available: A language should be available and feasible enough to provide translators
for all the major machines and the primary operating systems.

1.7 Coding Standards

In a software engineering project there are specific people who develops or code the software
from scratch. As the project time span depends on so many factors so the lead time sometime can
be long enough to be completed. Developers may change or replaced anytime , so if a developer
or coder has been coding for 3 months and than quit his job than a new coder will assigned at the
same project. If a new coder resume the coding that has been developing by the previous coder he
or she need to read codes again and again to avoid error. If there is no standardization for writing
the code lines than it would lead the project in high risk and inefficiency. The ratio of reading vs
writing code is 10:1 , that means reading code consume 10 time more than writing. So every
software organization use their own coding standard to lead the project in minimum risk and
higher efficiency. These standards are set of guideline or programming style that helps a coder to
code in a specific manner.

1.7.1 Purpose of Coding Standards

- Coding standards build uniform appearance of codes written by different engineers


- Coding standards reduces complexity of reading codes
- Coding standards makes a software well maintainable
- Error detection is easy using coding standards
- Increases efficiency of programmers

1.7.2 Coding Standards Representatives

These standards varies from organization to organization but here are some coding standards in
common practiced in general:-

Indentation

Inline Comments Structured Programming

Use of Global
Naming Conventions

Errors and Expectation Handling

Fig: 1.8 Coding Standards Representatives

11
1.7.2.1 Indentation

Indentation is very important in terms of readability of the code. It formats source code to make
the code readable. Some of the spacing conventions are given below:-

- There must be a space after giving a comma between two function arguments,
- Each nested block should be properly indented and spaced
- Proper indentation should be there at the beginning and at the end of each block in the
program.
- All braces should start from a line and the code following the end of braces also start from a
new line.

Fig: 1.9 Indentation (Spacing Convention)

1.7.2.2 Inline Comments

Comments are human readable descriptions inside of computer program that details what the
code is doing. To make code maintenance easier and finding bugs faster the commenting should
be in a proper manner. Commenting is also very important when writing functions that other
people will use. In line comments are those that are found in the general body of the program.
These are short comments making a note about what is going on.

Fig: 1.10 Commenting in computer program

12
1.7.2.3 Structured Programming

It is a programming approach in which the program is made as a single structure. The code
will execute instructions one after one. There is no possibility of jumping from one instruction to
another so the instructions will be executed in a structured manner in this approach. There are
languages that supports structured programming approach such as: C, C++, Java, C#, etc.

Advantages Of Structured Programming:

- Easier to read and understand


- User Friendly
- Easier to maintain
- Require less effort and time to develop
- Easier to debug
- Machine independent

1.7.2.3 Use of Global

The term use of global in computer programming refers to global variables which are declared
outside of any function of code block and can be accessed from anywhere within the program.

Fig: 1.11 Use of global variables in computer program

1.7.2.4 Naming Conventions

These are set of rules and guidelines to chose names for variables,functions, classes and other
Identifiers in computer program. Code readability, maintainability and collaboration among
developers depends on consistent and meaningful naming conventions.

Fig: 1.12 Naming conventions in computer program

13
1.7.2.5 Errors & Expectations Handling

This is a critical aspect of writing reliable computer program. It includes anticipating potential
issues that may arise during the execution of a program and implementing mechanisms to
gracefully handle these situations.

Fig: 1.13 Expectations handling in computer program

Chapter 2

Software Testing

2.1 Software Testing Overview

Software testing started its journey just after the world war 2. In that time software testing goal
was only limited to debugging and it continued for next two decades. Development team step to a
boarder area beyond only fixing bugs in 1980, and lead to quality assurance view of whole
software. In 1990 testing stepped into more quality control phase which affected the process of
planning , design , creation and execution of test cases. In this era of fast technological
development almost every aspect of human life has directly or indirectly impact of software.
Every organization has its own software system which can serve as management system or
customer service etc. The most important factor is agility and competition in the market is going
rapidly. In post COVID phase people are tend to be more interacting with software such as
education system is now integrated with E-learning system, online shopping, E commerce
websites. Therefore every most of the business organizations are shifting to agile development of
software. As the competition has increased to cope with the agile development of software lead
us to face a new problem and thrown us in the challenge of software validity. Therefore software
testing has become the most crucial factor for software industry.
Software development is an endless process because as the organization grow so the software has
to evolve as well. If the software is not build and verified as per the expected condition it will
lead complexity to further development and also in insecurity and unreliability. For that software
testing is the most top priority for any software developing organization for efficiency , security
and reliability. Software testing is directly connected to the human life and security as well. There
are a lot of brutal history and bad consequences for the failure of proper software verification. In
1985 Canada’s Therac-25 radiation therapy malfunctioned due to software bug and resulted in
lethal radiation doses to patients leaving 3 injured and 3 people dead. China Airlines Airbus
A300 crashed due to a software bug killing 264 people. Software testing is a process to verify and
validate the software as per the requirements of stakeholder or customer. It has two most
important aspect such as : Verification & Validation. Verification regards to the functional
aspects of the software and validation is to cross check if the software is meeting the expectations
from the stakeholders. The whole purpose of software testing is to identify the errors , faults or
missing requirements in contrast to actual requirements.

14
2.2 Importance of Software Testing

Software testing is an inevitable factor for any software developing organization now a days. No
organization can even survive without this process as it directly connected to the security,
reliability and efficiency of software. To build a robust, fault free software there are variety
number of testing in software industry. Although the primary objective of software testing is to
ensure a bug free and validated software for stakeholders but there more things to be counted
which shows its importance in the market.

 Early identification of defect: If there is any bug in the software it can be identified early and
can be fixed before the delivery of final product to customer.

 Quality Improvement: Software testing ensures the software is defect free thus it improves the
overall software functionality and performance.

 Increasing Customer Satisfaction: As the reliability , performance , security can be ensured


through software testing so it leads to increased customer satisfaction towards the software.

 Ensuring Scalability : Non functional type of testing helps to identify the scalability issues
and the point where and application might stop working.

 Increase Efficiency: As the defects and other issues can be detect before launching the
software so it will save cost and time of fixing issues with defects thus will increase
efficiency of the overall software.

Efficiency Security

Software Testing

Reliability

Fig: 2.1 Aspects of Software Testing Importance

2.3 Types Of Software Testing

As software testing is not only bounded to detect bugs in software but also it has impact on
overall SDLC (Software development life-cycle). So there are plenty of different software testing
methods in software testing practice in the industry. These are discussed in details in the

15
following part of this report.
Although there are many variant of software testing from different aspect but we can divide
software testing in the method of testing mainly two categories these are 1. Manual Testing & 2.
Automation Testing. Manual testing require a human testing engineer or developer who will
conduct the overall test according to test cases. Automation testing is nothing but certain test
script which will be performed automatically using AI to create a certain situation for a software
to simulate and test. All the manual and automation testing can be divided in largely two
categories such as : 1. Functional Testing 2. Non Functional Testing.

Fig: 2.2 Types Of Software Engineering

2.3.1 Functional Testing

Functional testing is a type of testing that validates a software from functional requirements. It is
performed to check whether the software is performing as per the software functional
requirements or not. There are various types of functional testing such as: Unit testing,
Integration Testing, System Testing, Smoke Testing and so on. Various types of functional
testings are discussed below:

Functionality
Technical
Aspects

Functional Testing

Performance Debugging

Fig: 2.3 Functional Testing Aspects

16
2.3.1.1 Unit Testing

Functional testing that validates a software from unit level is included in unit testing. There are
several methods for unit testing but we will discuss about two most used methods for unit level
testing such as : 1. White Box Testing 2. Gorilla Testing.

1. White Box Testing: White box testing is being conducted to verify the internal structures the
used data structures , internal design, code structure and working of the software. It is also called
transparent or open box testing. Because the test engineer not only verify the functionality of the
unit but also verify how the code is functioning behind the unit. It is also known as structural
testing or code based testing because it is used to test the software’s internal logic, flow and
structure.

Fig: 2.4 White Box Testing

To understand white box testing from practical point of view we can take an example from an E-
Learning website called “Bangla Automobile Skills” which aims to sale automobile engineering
courses in online.

Fig: 2.5 E-Learning Website for Automobile Engineering

To open an account , a student need to register their self and thus get the access to the website for

17
receiving further services. To register a student need to put 6 data such as : 1. First name 2. Last
name 3. User name 4. Email 5. Password 6. Confirm Password. After putting all these
information student need to tick the “I'm not a robot” option and then there is a register button
which will help a student to successfully complete the registration.

Unit

Fig: 2.6 Unit level of create account module

Code
Level
Structure

Fig: 2.7 Code level structure of units

Each requirement box including register button is a unit and a tester need to check whether every
unit working fine from code level structure. As a tester have access to test from code level so that
it is white box testing. White box testing can be conducted by both developer and a testing
engineer. Whoever conduct white box testing he/she need to understand the software code level
structure.

2. Gorilla Testing: Gorilla testing is a type of unit testing which is performed on particular

18
module on some random inputs repeatedly and checks the module’s functionalities and ensure no
bugs in that particular module. The distinguish feature of this type of testing directly inspired
from gorilla itself. We can see gorilla as a nature is very calm and quite but often it gets violent in
particular situation. In gorilla software testing a tester repeatedly test a particular module again
and again to ensure there is no defect. Usually those module which are very important and in top
priority of a software are being tested by this technique of software testing. It is not implemented
in every unit of a module. Rather the units of most important modules are being tested by this
method of software testing. Both developer and tester can conduct gorilla testing because it
require code level of understanding like white box testing. As it test any particular module giving
random input repeatedly that is why it is also known as torture testing, fault tolerance testing,
frustrating testing.
To understand gorilla testing from practical world we can take the example of E-learning website.
Where we have to check the payment option as it is one of the most important module for the
whole website. We will test the particular module “Payment” again and again by giving random
input to check how the module is behaving or either the module is showing any error or not. So
that we can get more confidence on this particular module.

Enroll
module to
enroll the
course

Fig: 2.8 Enroll module to enroll course

Code level
instruction of
payment module
Payment
module

Fig: 2.9 Payment module and its code level instructions

2.3.1.2 Integration Testing

Unlike unit testing , integration testing is tested in between more than one module to check
whether both modules can function properly together. Integration testing is done when more than
one unit has to perform together. For example in our previous real example of an E-learning
platform , a student need 6 data to register in the website. There are 6 modules which receives 6

19
different data, because to register these 6 module has to perform properly. If any of the module is
not working the registration will be incomplete. So to check weather the modules are performing
properly in integrated situation software tester conduct integration testing. There are four types of
integration testings such as: 1. Big Bang Testing 2. Top Down Testing 3. Bottom Up Testing 4.
Sandwich Testing.

1. Big Bang Testing:

Big bang testing is a type of integration testing where there is a tight deadline or when testing
every module in a piecemeal is not practical mean the project is too large or complex. In this
methodology the modules are tested all together in parallel. For an example lets consider in a
software we have several modules such as : A, B, C, D, E etc. As because the project schedule
may too tight or complex so we have to test the whole project in big bang approach that means
each of this module will be tested individually before the final integration. After the all modules
are tested than it proceeds to system level testing.

Module A Module C

System

Module B Module D

Fig: 2.10 Big Bang Testing Approach

1. A Big Bang Testing Features : The big bang testing has several benefits which is mentioned
below:

 All the modules are simulated and tested completely this means all the components are
integrated and tested at the same time.
 As all the components are modules are tested together, this allow all components to for the
testing interactions between components.
 For complete and parallel testing components are integrated and for that no components left
untested
 Early detection of error can be possible in big bang integration testing approach it can further
convenient to develop a robust software

2. Top Down Testing: Top down testing is an incremental method where the testing being
conducted from high level module to low level module. The high level modules are tested first
and then low level modules are tested. In the final stage integration is done to ensure the whole
system is working. There are some modules which are not ready to test but for the integration
approach tester also put those modules in the process, these incomplete modules are called stubs
or driver.

20
Module 1

M2 M3 M4 M5 M6

M7

Fig: 2.10 Top Down Testing Approach

For a practical understanding we can again take E-Learning website. Here in the website if any
student wants to purchase a course he/she may have to first click the “Courses” module to enter
the course list available for purchase. In this case this module is one of a high level module of the
whole system. So a tester will check if the “Courses” module is working or not and then as for
the top down approach it will further dive deep into the components of the whole module.

High Level
Module M1 Module
“Courses”

Fig: 2.10 High Level Module (Module M1)

After entering the M1 module (Courses) we can see the courses available for purchase. Every
courses are individual components of the module M1 such as we can denote four courses here as
M2 , M3, M5 & M6.

21
Fig: 2.11 Four courses are individual modules comes under M1

Now if we take a course for purchase we can see the interface of that individual course . Suppose
we want to purchase “Basic Automobile Engineering” course. After entering we have to enroll
the course by entering in “enroll module”. So we can level this module as M7.

22
Module 7

Fig: 2.12 Enrollment module (Module 7)

With this approach a tester can understand what will be the user experience with different
modules and its component. So if any bug or defect is detected it can be easily debugged or fix
before launching and also it can ensure the interactions of different modules together.

3.Bottom Up Testing: Bottom up testing is nothing but the reverse approach of top down testing.
In top down testing tester usually evaluate from higher module to low level modules. In which a
tester get to know what will be the user experience for different modules interaction. In contrast
bottom up approach starts from the low level module to higher level module. This testing allows
a tester to know the history of a user and what the user might have experienced in different
module interactions. If there is any defect found out so that it can easily debugged. As like our
previous example we can start from the most low level module of that E-learning website.

Module 1

M2 M3 M4 M5 M6

M7

Fig: 2.13 Bottom up testing approach

The most low level module for purchasing a course is the enrollment module( Fig: 2.12 Module
7) . We can start from module 7 and can check the history how a user have experienced to
purchase a course from start to end. Gradually we can approach to highest module that is module
1 (Fig: 2.10 Module 1).

3. Sandwich Testing : Sandwich testing is the combination of both top down bottom up testing.
Where the project layered in three level. Mostly 1. Main target level 2. Level above main target
level 3. Level below main target level. In this approach test need to use many stubs and drivers
because of the incomplete modules. Modules are being tested from both top down and bottom up
method simultaneously. Sandwich testing is used in very large project which requires lot of effort
and time.

23
Fig: 2.15 Sandwich testing approach

2.3.1.3 System Testing

System testing is done after the whole completion of integrated system to evaluate and check
whether it is meeting the stakeholder need. Modules which are tested and passed in integration
testing are taken as an input in system testing. System testing detects error both in whole
integrated module or whole system. Testing is carried out by an independent testing team. System
testing is performed after integration testing and before User acceptance testing. There are
varieties of system testing such as: End to End testing Black box testing, Smoke Testing, Sanity
Testing etc. These testings are discussed in detail below:

System Testing

Fig: 2.16 System Testing

1. End to End Testing : End to end testing is a type of system testing that allows a tester to
evaluate whole system from starting to end along with its integration with the external interfaces.
The main objective of end to end testing is to detect the system dependencies and to make sure
that the data integrity and communication with other systems, interfaces and databases to exercise
complete productions. It ensures that all components of an application work together as expected ,
thereby providing comprehensive testing coverage. It simulates realistic process with helps to
detect issues that may not be detected in other forms of testing. With the testing of entire system
end to end testing helps detects bugs and defects early in the software development life-cycle.

24
Fig: 2.17 End to end testing

2. Black Box Testing : Black box testing is done by testing engineer where a tester does not need
to know the code level structure of modules. It is a type of testing where a tester only test the
functionality of whole system. By conducting black box testing a tester can ensure the whole
functionality and performance are working as per stakeholders requirements or not. Usually there
is no need to add development team to perform black box testing. Only testing team can conduct
the test independently as there is no need of code level testing.

Fig: 2.18 Black box testing

3. Smoke Testing:

Smoke Testing comes into the picture at the time of receiving build software from the
development team. The purpose of smoke testing is to determine whether the build software is
testable or not. It is done at the time of "building software." This process is also known as "Day
0".It is a time-saving process. It reduces testing time because testing is done only when the key
features of the application are not working or if the key bugs are not fixed. The focus of Smoke
Testing is on the workflow of the core and primary functions of the application.
Testing the basic & critical feature of an application before doing one round of deep, rigorous
testing (before checking all possible positive and negative values) is known as smoke testing.
In the smoke testing, we only focus on the positive flow of the application and enter only valid
data, not the invalid data. In smoke testing, we verify every build is testable or not; hence it is
also known as Build Verification Testing.Backward Skip 10sPlay Video Forward Skip 10s
When we perform smoke testing, we can identify the blocker bug at the early stage so that the test
engineer won't sit idle, or they can proceed further and test the independent testable modules.

25
Fig: 2.19 Smoke Testing

4.Sanity Testing: It is a subset of regression testing. Sanity testing is performed to ensure that the
code changes that are made are working properly. Sanity testing is a stoppage to check whether
testing for the build can proceed or not. The focus of the team during the sanity testing process is
to validate the functionality of the application and not detailed testing. Sanity testing is generally
performed on a build where the production deployment is required immediately like a critical bug
fix. Sanity testing is limited in scope and typically focuses on critical functionality and does not
aim to uncover every possible error or bug in the system. It is a quick and lightweight way to
ensure that the software is functioning as expected before further testing is conducted.
For understanding the fundamental of the sanity testing techniques, we have to learn their
attribute and several other components. Hence, following are some of the important features of
Sanity testing:

1. Narrow and deep


2. A Subset of Regression Testing
3. Unscripted
4. Not documented
5. Performed by testers

Fig: 2.20 Sanity testing

26
2.3.1.4 Acceptance Testing

Acceptance testing is formal testing based on user requirements and function processing. It
determines whether the software is conforming specified requirements and user requirements or
not. It is conducted as a kind of Black Box testing where the number of required users involved
testing the acceptance level of the system. It is the fourth and last level of software testing.
User acceptance testing (UAT) is a type of testing, which is done by the customer before
accepting the final product. Generally, UAT is done by the customer (domain expert) for their
satisfaction, and check whether the application is working according to given business scenarios,
real-time scenarios.In this, we concentrate only on those features and scenarios which are
regularly used by the customer or mostly user scenarios for the business or those scenarios which
are used daily by the end-user or the customer.

Fig: 2.21 Acceptance Testing

1.Alpha Testing :Alpha Testing is a software testing type performed for identifying bugs before
releasing any product to any real user or the public. It is a type of user acceptance testing that
identifies all the possible issues in any product. Testers who are the internal employees of any
organization perform this type of testing. Their main goal is to identify and perform all possible
tasks that any random user might perform.
In simple words, alpha testing has such a name only because testers perform it early on- almost
near the end of software development just before beta testing. In alpha testing, the main focus is
simulating real users by making use of white box and black box techniques.

27
Fig: 2.22 Alpha Testing

2. Beta Testing:Beta testing is a type of testing performed by real users of any application or
software in a real environment. It is a type of User Acceptance testing (external testing)-
performed just before shipping a product to a customer. One of the main advantages of Beta
Testing is direct feedback from the customers. It helps a manufacturer test a product in a real
customer’s environment.
Developers release a Beta version of a product or software to a very limited number of end-users
of the concerned product so as to obtain honest feedback on the product’s quality. Beta testing
helps in reducing the risk of product failure. It also increases the quality of a product since
customer validation is always apt.

Fig: 2.23 Beta Testing


2.3.2 Non- Functional Testing

Non functional testing is performed to verify the non functional requirements of the application.
It helps to verify software behaviour from non functional aspects. All the things that are not
tested in functional testing comes under non functional testing. It checks and verify software
responsiveness , performance, security, compatibility , usability. There are different types of non
functional testing practices such as: Security Testing, Performance Testing, Compatibility
Testing, Usability Testing. These testings are discussed in details below:

28
Security
Performance

Non-Functional Testing

Compatibility Usability

Fig: 2.24 Non-Functional Testing

2.3.2.1 Security Testing

As because software has become the most vital part of our daily life so its security is one of the
major factor that software organization has to take with high responsibility. That is why it is
mandatory to verify and validates the security aspects of software. In security testing tester or
testing team verify whether the software is capable of handling vulnerabilities thus can protect
data from possible intruders. Through security testing testing team can ensure and gain
confidence that the software system or application are free from any threats or risk that can cause
a loss. For an example , a financial management system has to ensure high security in terms of
protection from hackers otherwise there will be huge risk to handle financial credentials.

Fig: 2.25 Security Testing

2.3.2.2 Performance Testing

Performance testing mainly focuses on evaluating software capabilities in terms of taking loads.
It ensures it working as per expected workload or not. It is a testing technique that determines
system performance in terms of responsiveness, sensitivity, reactivity and stability. There are
several types of performance testing such as : Load Testing , Stress Testing , Spike Testing, Soak
Testing. These testings are discussed below:

29
1. Load Testing: Load testing verifies and simulates a real world loads on a software. It checks
whether the software can handle maximum number of users in a certain amount of time.

2. Stress Testing: Stress testing unlike load testing verifies the crashing point of a software. It
determines the last limit of stress the software can persist. That’s how testing team can predict
what is the crucial point in terms of taking loads for that particular software.

3. Spike Testing: Spike testing verifies what is the capability of a software to handle sudden
spike of many traffics in a software. It identifies if a system is suddenly get too much traffic what
will be the consequences.

4. Soak Testing: Soak testing detects system ability to handle a sustained load over a long period
of time. It helps to identify any issue that can occur for a prolonged period in a particular
software.

Fig: 2.26 Performance Testing

2.3.2.3 Compatibility Testing

Compatibility testing is conducted to verify its compatibility on different platform /environments.


This testing is done only after the software is stable. This compatibility test is aims to check
whether the software functionality on various software, hardware , network and browser . In
product production it is one of the most important aspect of a software. It can detect the future
issues that can occur in terms of verify compatibility in different platforms.

Fig: 2.27 Compatibility Testing

30
2.3.2.3 Usability Testing

Usability testing is conducted to check the functionality of a software by observing real users as
they attempt to complete task on it. The goal of usability testing is to reveal the customer pain
point through whole software journey. Thus a robust software can be further developed.

Fig: 2.28 Usability Testing

31
Chapter 4

Conclusions

In conclusion this report highlights the crucial stages in software developing life-cycle in coding
and software testing phase ensuring the delivery of high quality software product. In software
coding phase includes translating the design specifications into reliable computer format
language which is very important for further software maintenance and development. It is also
responsible for ensuring software reliability and for efficient software production. The report also
focuses on software testing which is the most important factor in agile software development. As
the technological evolution is facing a transition , robust software development is a crying need
in software market. Software testing ensures the software is verified and validated to meet the
expectations from stakeholder customer/organization. It also ensures the safety and security of a
software product which is responsible for human life and civilization as well.

In summery the success of software project lied on efficient coding and rigorous testing. As the
software industry evolves software coding and testing is playing a great role and responsible
simultaneously.

32

View publication stats

You might also like