Requrement Enginerring and Testing
Requrement Enginerring and Testing
Engineering on the other hand, is all about developing products, using well-defined, scientific principles
and methods.
Software Evolution
The process of developing a software product using
software engineering principles and methods is referred to
as software evolution. This includes the initial development
of software and its maintenance and updates, till desired
software product is developed, which satisfies the expected
requirements.
Evolution starts from the requirement gathering process.
After which developers create a prototype of the intended
software and show it to the users to get their feedback at the
early stage of software product development. The users suggest changes, on which several consecutive
updates and maintenance keep on changing too. This process changes to the original software, till the
desired software is accomplished.
Software Development Paradigm
This Paradigm is known as software engineering paradigms where
all the engineering concepts pertaining to the development of
software are applied. It includes various researches and
requirement gathering which helps the software product to build. It
consists of –
Requirement gathering
Software design
Programming
Programming Paradigm
This paradigm is related closely to programming aspect of software development. This includes –
Coding
Testing
Integration
Software Design Paradigm
This paradigm is a part of Software Development and includes –
Design
Maintenance
Programming
Software requirements
The software requirements are description of features and functionalities of the target system.
Requirements convey the expectations of users from the software product. The requirements can be
obvious or hidden, known or unknown, expected or unexpected from client’s point of view.
Types of requirements
business
user
Software
o Functional requirements (what a software
system must do or not do) eg If an alarm is
received from a sensor, the system will report
the alarm and halt until the alarm is
acknowledged and cleared.
o Nonfunctional requirements (how the system
must operate or perform) eg The pages of this
web portal must load within 0.5 seconds.
o Domain requirements (Domain requirements can be functional or nonfunctional) eg military,
medical and financial industry sectors
Requirement Engineering
The process to gather the software requirements from client, analyze and document them is known as
requirement engineering. The goal of requirement engineering is to develop and maintain sophisticated
and descriptive ‘System Requirements Specification’ document.
Requirement Engineering Process includes
Feasibility Study
Requirement Gathering
Software Requirement Specification
Software Requirement Validation
Feasibility Study – (All types of feasibility)
When the client approaches the organization for getting the desired product developed, it comes up with
rough idea about what all functions the software must perform and which all features are expected from
the software.
Requirement Gathering (fact finding techniques)
If the feasibility report is positive towards undertaking the project, next phase starts with gathering
requirements from the user. Analysts and engineers communicate with the client and end-users to know
their ideas on what the software should provide and which features they want the software to include.
Requirement Elicitation Process (Extraction)
Requirements Elicitation is the process to find out the requirements for an intended software system by
communicating with client, end users, system users and others who have a stake in the software system
development.
Interviews
Surveys
Questionnaires
Task analysis
Domain Analysis
Brainstorming
Prototyping
Observation
Requirements elicitation Activities
In order to fully understand one’s project, it is very important that they come up with an SRS listing
out their requirements, how are they going to meet them and how will they complete the project.
It helps the team to save upon their time as they are able to comprehend how are going to go
about the project.
Doing this also enables the team to find out about the limitations and risks early on.
Characteristics of Good SRS
Correctness:
User review is used to ensure the correctness of requirements stated in the SRS. SRS is said to be
correct if it covers all the requirements that are actually expected from the system.
Completeness:
Completeness of SRS indicates every sense of completion including the numbering of all the pages,
resolving the to be determined parts to as much extent as possible as well as covering all the
functional and non-functional requirements properly.
Consistency:
Requirements in SRS are said to be consistent if there are no conflicts between any set of
requirements. Examples of conflict include differences in terminologies used at separate places,
logical conflicts like time period of report generation, etc.
Unambiguousness (clarity):
A SRS is said to be unambiguous if all the requirements stated have only 1 interpretation. Some of the
ways to prevent unambiguousness include the use of modelling techniques like ER diagrams, proper
reviews and buddy checks, etc.
Ranking for importance and stability:
There should a criterion to classify the requirements as less or more important or more specifically as
desirable or essential. An identifier mark can be used with every requirement to indicate its rank or
stability.
Modifiability:
SRS should be made as modifiable as possible and should be capable of easily accepting changes to
the system to some extent. Modifications should be properly indexed and cross-referenced.
Verifiability:
A SRS is verifiable if there exists a specific technique to quantifiably measure the extent to which
every requirement is met by the system. For example, a requirement starting that the system must be
user-friendly is not verifiable and listing such requirements should be avoided.
Traceability:
One should be able to trace a requirement to design component and then to code segment in the
program. Similarly, one should be able to trace a requirement to the corresponding test cases.
Design Independence:
There should be an option to choose from multiple design alternatives for the final system. More
specifically, the SRS should not include any implementation details.
Testability:
A SRS should be written in such a way that it is easy to generate test cases and test plans from the
document.
Understandable by the customer:
An end user maybe an expert in his/her specific domain but might not be an expert in computer
science. Hence, the use of formal notations and symbols should be avoided to as much extent as
possible. The language should be kept easy and clear.
Right level of abstraction:
If the SRS is written for the requirements phase, the details should be explained explicitly. Whereas,
for a feasibility study, fewer details can be used. Hence, the level of abstraction varies according to the
purpose of the SRS.
So new specification is
Software Testing:
Software testing is an empirical investigation conducted to provide stakeholders with information about the
quality of the product or service under test, with respect to the context in which it is intended to operate. It
is not limited to the process of executing a program or application with the intent of finding software bugs.
Software testing is set of activities that involve planning and preparation of what to test the software for and
executing the software with the intent of finding defects and validating the software against requirements. It
involves operations of a system or application under controlled conditions and abnormal conditions.
Software testing is conducted not only to check if the software meets the functional /technical/security
requirements but also to break the software with negative input or by incorrect usage.
The general testing process that starts with testing of individual program units like functions or objects and
then integrated to subsystem and system, again interaction of these units were tested finally. After delivery
of the system the customer may carry out a series of acceptance tests to check that the system perform as
specified. This model of the testing process is appropriate for large system development but for smaller
system, or for system that are developed through scripting or reuse, there are fewer distinct stages in the
process.
During system testing, the components are integrated to form subsystem or the complete system. At this
stage, system testing should focus on establishing that the system meets its functional and non-functional
requirements, and must not behave in unexpected ways. Defects in earlier testing are discovered during
system testing.
Level of testing
Client needs Acceptance testing
Unit Testing
In unit testing the analyst tests the programs making up a system. (For this reason unit testing is
sometimes called program testing.) The software units in a system are the modules and routines are
assembled and integrated to perform a specific function. In a large system, many modules at different levels
are needed.
Unit testing focuses first on the modules, independently of one another, to locate errors. This enables the
tester to detect errors in coding and logic that are contained within that module alone. Those resulting form
the interaction between modules are initially avoided.
For example, a hotel information system consists of modules to handle reservations; guest check-in and
checkout; restaurant, room service, and miscellaneous charges; convention activities; and accounts
receivable billing. For each, it provides the ability to enter, change, or retrieve data and respond to inquiries
or print reports. The test cases needed for unit testing should exercise each condition and option.
For example, test cases are needed to determine how the system handles attempts to check-in guests who
do and do not have reservations, as well as those instances involving changing the name on the reservation
when a person other than the one listed arrives. Also needed are test cases for the checkout situations of
paying the exact amount of the bill, only part of the bill, and more than the amount shown. Even checking
out without making any payment at all must be included in a test case.
Integration testing
The process of system integration involves building a system from its components and testing the
resultant system for problem that arise from component interactions. The components that are integrated
may be off the shelf components, reusable components or newly developed components. For many large
system all three types to be used. This testing checks that these components actually work together and
transfer right data at the right time across their interfaces
Using white box testing methods, the software engineer can derive test cases that do the following:
Guarantee that all independent paths Within a module have been exercised at least once
Exercise all logical decisions on their true and false sides
Execute all loops at their boundaries and within their operational bounds and
Exercise internal data structures to ensure their validity
Black Box Testing
Black box testing methods focus on the functional requirements of the software. It enables the software
engineer to derive sets of input conditions that will fully exercise all functional requirements for a program.
Black box testing is not an alternative to white box testing techniques. Rather, it is a complementary
approach that is likely to uncover a different class of errors than white box methods.
Black box testing method attempts to find errors in the following categories: