Se Unit5
Se Unit5
Se Unit5
responsibilities are not satisfied. You should understand the role QA plays throughout the
development lifecycle whether you manage software development or run a software business.
Quality assurance is the process of evaluating a system by applying proper testing procedures
to provide confidence to achieve an appropriate level of quality. Quality Assurance helps the
software development team to recognize the problems early by performing rigorous testing, to
The software quality analyst is an individual who is responsible for applying the principles
and best practices of software quality assurance throughout the software development life
cycle.
QA is an essential part of the Software development process, as they test and assess the
Quality assurance (QA) roles are responsible for creating and performing tests, identifying
errors, and providing feedback to verify that a final product meets a company’s quality
requirements. This profession has become more common in the technology sector depending
on the kind of work a company does, it frequently calls for various levels of extensive
Because they ensure users enjoy a seamless, error-free experience while using a product, QA
jobs are crucial. A company that hires these people can consistently create high-quality
The QA analyzes and executes the products in all possible logical ways for a quality product,
As the Software testers do not make software; they make them better. So a QA
performs software testing where they evaluate the functionality of a software application to
requirements, and functionality offering an easy and secure user interface that facilitates
During a deployment, QA typically needs to be on call. These occur frequently late at night
(most probably) when users are less likely to be affected. QA is on standby during a
deployment. As soon as the release goes live, QA gets to work, undergoing smoke testing to
Bugs do occasionally slip through, even the best automation or manual testing cannot find all
the bugs on browser plugins all of the time. QA can be on hand to test the feature updates or
bug fixes.
The following is a list of important QA positions to hire if you want to develop a functional
software testing team, along with the various responsibilities and abilities each role typically
handles:
QA Engineer
Quality assurance engineers examine programs to identify bugs and defects, especially when
they appear unexpectedly. To evaluate the effectiveness of various product functionalities and
aspects, they frequently use a variety of tests. Senior QA engineers perform some tests
Test Analyst
Test analysts support the test engineer by developing test plans and reviewing the most
crucial features and functionalities to test. Usually, they document the testing process. To
support the entire QA team, they record the goals, progress, and outcomes of tests.
QA Lead
The QA lead is a team leader who is in charge of overseeing the testing process. They plan to
make sure testing is efficient and completed on schedule. Additionally, QA team leads may
define the single project specifications, supervise engineers and quality assurance analysts,
QA Manager
QA test managers manage the communication between the customers and the QA team. In
addition to working with the customer to produce standards and specifications, they would
deliver reports and updates. They might also collaborate with analysts or account managers to
Test Architect
The tests used by the QA team are designed and built by test architects. Typically, their goals
are to create tests that the team may reuse on future projects and to create automation
frameworks that define the best quality assurance process for automated tests. Test architects
can also need analysis to ensure that the tests they create address organizational priorities and
concerns.
The role of quality assurance (QA) in testing may appear obvious. But during the testing
phase, QA performs more than just testing. A tester’s time is mostly spent on specific tasks,
such as writing test cases and bug reports. Of course, QA will (or should) test the app or
• Test planning – Which involves activities of defining the objectives of testing and the
• Test Strategy – Create a test strategy based on project requirements and schedules.
• Early testing to eliminate defects at an early stage reduces the bug fixing cost and time.
• Executing tests with appropriate techniques (manually or by using test execution tools) and
• Troubleshoot defects, such that it does not affect the product quality.
• Report defects to software developers by recording software defects with a bug-tracking
• Interact with BA, project manager, development team, and client as per need.
• Conduct different test procedures, report issues, and follow up on the status of the issues.
• Collaborate with the software testing team to assess or diagnose problems and suggest
possible solutions.
• Monitor and analyze the performance using tools for efficient and problem-free operations.
• Uncover vulnerabilities in the system and determine that its data and resources are protected
from intruders.
• Provides a test summary report that reflects the software under the test’s top-notch quality.
• Manage the entire testing activity with different test management tools. (eg. QA Touch)
1. During the FTR, the reviewer actively records all issues that have been raised.
2. At the end of the meeting all these issues raised are consolidated and a review list is
prepared.
3. Finally, a formal technical review summary report is prepared.
below:
3. Suppose after some changes, the version of the configuration object changes from 1.0
to 1.1. Minor corrections and changes result in versions 1.1.1 and 1.1.2, which is followed
by a major update that is object 1.2. The development of object 1.0 continues through 1.3
and 1.4, but finally, a noteworthy change to the object results in a new evolutionary path,
version 2.0. Both versions are currently supported.
4. Change control – Controlling changes to Configuration items (CI). The change
control process is explained in Figure below:
A change request (CR) is submitted and evaluated to assess technical merit, potential side
effects, the overall impact on other configuration objects and system functions, and the
projected cost of the change. The results of the evaluation are presented as a change
report, which is used by a change control board (CCB) —a person or group who makes a
final decision on the status and priority of the change. An engineering change Request
(ECR) is generated for each approved change. Also, CCB notifies the developer in case
the change is rejected with proper reason. The ECR describes the change to be made, the
constraints that must be respected, and the criteria for review and audit. The object to be
changed is “checked out” of the project database, the change is made, and then the object
is tested again. The object is then “checked in” to the database and appropriate version
control mechanisms are used to create the next version of the software.
5. Configuration auditing – A software configuration audit complements the formal
technical review of the process and product. It focuses on the technical correctness of the
configuration object that has been modified. The audit confirms the completeness,
correctness, and consistency of items in the SCM system and tracks action items from the
audit to closure.
6. Reporting – Providing accurate status and current configuration data to developers,
testers, end users, customers, and stakeholders through admin guides, user guides, FAQs,
Release notes, Memos, Installation Guide, Configuration guides, etc.
System Configuration Management (SCM) is a software engineering practice that focuses on
managing the configuration of software systems and ensuring that software components are
properly controlled, tracked, and stored. It is a critical aspect of software development, as it
helps to ensure that changes made to a software system are properly coordinated and that the
system is always in a known and stable state.
SCM involves a set of processes and tools that help to manage the different components of a
software system, including source code, documentation, and other assets. It enables teams to
track changes made to the software system, identify when and why changes were made, and
manage the integration of these changes into the final product.
Importance of Software Configuration Management
1. Effective Bug Tracking: Linking code modifications to issues that have been reported,
makes bug tracking more effective.
2. Continuous Deployment and Integration: SCM combines with continuous processes
to automate deployment and testing, resulting in more dependable and timely software
delivery.
3. Risk management: SCM lowers the chance of introducing critical flaws by assisting
in the early detection and correction of problems.
4. Support for Big Projects: Source Code Control (SCM) offers an orderly method to
handle code modifications for big projects, fostering a well-organized development
process.
5. Reproducibility: By recording precise versions of code, libraries, and dependencies,
source code versioning (SCM) makes builds repeatable.
6. Parallel Development: SCM facilitates parallel development by enabling several
developers to collaborate on various branches at once.
Why need for System configuration management?
1. Replicability: Software version control (SCM) makes ensures that a software system
can be replicated at any stage of its development. This is necessary for testing, debugging,
and upholding consistent environments in production, testing, and development.
2. Identification of Configuration: Source code, documentation, and executable files are
examples of configuration elements that SCM helps in locating and labeling. The
management of a system’s constituent parts and their interactions depend on this
identification.
3. Effective Process of Development: By automating monotonous processes like
managing dependencies, merging changes, and resolving disputes, SCM simplifies the
development process. Error risk is decreased and efficiency is increased because of this
automation.
Key objectives of SCM
1. Control the evolution of software systems: SCM helps to ensure that changes to a
software system are properly planned, tested, and integrated into the final product.
2. Enable collaboration and coordination: SCM helps teams to collaborate and
coordinate their work, ensuring that changes are properly integrated and that everyone is
working from the same version of the software system.
3. Provide version control: SCM provides version control for software systems,
enabling teams to manage and track different versions of the system and to revert to
earlier versions if necessary.
4. Facilitate replication and distribution: SCM helps to ensure that software systems
can be easily replicated and distributed to other environments, such as test, production,
and customer sites.
5. SCM is a critical component of software development, and effective SCM practices
can help to improve the quality and reliability of software systems, as well as increase
efficiency and reduce the risk of errors.
The main advantages of SCM
1. Improved productivity and efficiency by reducing the time and effort required to
manage software changes.
2. Reduced risk of errors and defects by ensuring that all changes were properly tested
and validated.
3. Increased collaboration and communication among team members by providing a
central repository for software artifacts.
4. Improved quality and stability of software systems by ensuring that all changes are
properly controlled and managed.
The main disadvantages of SCM
1. Increased complexity and overhead, particularly in large software systems.
2. Difficulty in managing dependencies and ensuring that all changes are properly
integrated.
3. Potential for conflicts and delays, particularly in large development teams with
multiple contributors.
Want to learn Software Testing and Automation to help give a kickstart to your career? Any
student or professional looking to excel in Quality Assurance should enroll in our
course, Complete Guide to Software Testing and Automation, only on GeeksforGeeks. Get
hands-on learning experience with the latest testing methodologies, automation tools, and
industry best practices through practical projects and real-life scenarios. Whether you are a
beginner or just looking to build on existing skills, this course will give you the competence
necessary to ensure the quality and reliability of software products. Ready to be a Pro in
Software Testing? Enroll now and Take Your Career to a Whole New Level!
Baseline items
In software development, baseline items are important factors that serve as reference factors
throughout the project lifecycle. These objects, including requirements, layout documents,
and code variations, help to ensure consistency and traceability. Establishing baselines
enables effective project management, permitting teams to monitor progress and manage
adjustments systematically.
IEEE
(IEEE Std. No. 610.12-1990) defines baseline as an agreed description and review of product
attributes, that afterwards serve as the basis for further development and defining change, and
this changing can be done only through formal change control procedures”. A baseline is a
milestone and a reference point in software development marked by completion or delivery of
one or more software configuration items and formal approval of a set of predefined products
is obtained through formal technical review. The baseline is a shared project database. It is the
task of Software Configuration Management (SCM) that is used to maintain the integrity of a
set of products. The main aim of the baseline is to reduce and control vulnerability i.e.
Weakness of projects that can easily affect projects and lead to uncontrollable changes. This
can be achieved by fixing and changing configuration items (various key deliverables) in
the product’s development life cycle at some critical points. Each element that is associated
with the baseline needs to be kept under formal change control.
Process :
1. Elements need to be documented properly and reviewed to find if there is an issue
with the design model. If any error or defect is found, then these errors and defects are
corrected and fixed.
2. All parts of the model are being reviewed properly and all problems found are being
fixed and approved.
3. The design base model is now the Baseline.
4. Any further changes in the program architecture that are documented in the design
model can be allowed to be done only after each has been evaluated and approved.
Baseline Components :
A typical baseline includes the following components :
1. Functional Baseline – Operation Document, System Requirements.
2. Allocated Baseline – High-level document, Preliminary Design, Interface control
documents.
3. Design Baseline – Detailed design documents.
4. Product Baseline – Source and executable code units, final system specifications,
user and maintenance manuals, Hardware and software specifications,
5. Operational Baseline – Source and executable code units, final system specifications,
user and maintenance manuals, acceptance test plans, test procedures, site integration test
cases and data sets and test reports
6. Acceptance Test – Source and executable code units, integration test plans, test
procedures, test cases, and data sets and test reports
7. Integration Test – Source and executable code units, unit test plans, test procedures,
test cases, and data sets and test reports
8. Unit Test – Source and executable code modules
Example :
Version Control Systems
What is a “version control system”?
Version control systems are a category of software tools that helps in recording changes made
to files by keeping a track of modifications done in the code.
Why Version Control system is so Important?
As we know that a software product is developed in collaboration by a group of developers
they might be located at different locations and each one of them contributes to some specific
kind of functionality/features. So in order to contribute to the product, they made
modifications to the source code(either by adding or removing). A version control system is a
kind of software that helps the developer team to efficiently communicate and manage(track)
all the changes that have been made to the source code along with the information like who
made and what changes have been made. A separate branch is created for every contributor
who made the changes and the changes aren’t merged into the original source code unless all
are analyzed as soon as the changes are green signaled they merged to the main source code.
It not only keeps source code organized but also improves productivity by making the
development process smooth.
Basically Version control system keeps track on changes made on a particular software and
take a snapshot of every modification. Let’s suppose if a team of developer add some new
functionalities in an application and the updated version is not working properly so as the
version control system keeps track of our work so with the help of version control system we
can omit the new changes and continue with the previous version.
Benefits of the version control system:
Enhances the project development speed by providing efficient collaboration,
Leverages the productivity, expedites product delivery, and skills of the employees
through better communication and assistance,
Reduce possibilities of errors and conflicts meanwhile project development through
traceability to every small change,
Employees or contributors of the project can contribute from anywhere irrespective of
the different geographical locations through this VCS,
For each different contributor to the project, a different working copy is maintained
and not merged to the main file unless the working copy is validated. The most popular
example is Git, Helix core, Microsoft TFS,
Helps in recovery in case of any disaster or contingent situation,
Informs us about Who, What, When, Why changes have been made.
Use of Version Control System:
A repository: It can be thought of as a database of changes. It contains all the edits
and historical versions (snapshots) of the project.
Copy of Work (sometimes called as checkout): It is the personal copy of all the
files in a project. You can edit to this copy, without affecting the work of others and you
can finally commit your changes to a repository when you are done making your changes.
Working in a group: Consider yourself working in a company where you are asked
to work on some live project. You can’t change the main code as it is in production, and
any change may cause inconvenience to the user, also you are working in a team so you
need to collaborate with your team to and adapt their changes. Version control helps you
with the, merging different requests to main repository without making any undesirable
changes. You may test the functionalities without putting it live, and you don’t need to
download and set up each time, just pull the changes and do the changes, test it and merge
it back. It may be visualized as.
Types of Version Control Systems:
Local Version Control Systems
Centralized Version Control Systems
Distributed Version Control Systems
Local Version Control Systems: It is one of the simplest forms and has a database that kept
all the changes to files under revision control. RCS is one of the most common VCS tools. It
keeps patch sets (differences between files) in a special format on disk. By adding up all the
patches it can then re-create what any file looked like at any point in time.
Centralized Version Control Systems: Centralized version control systems contain just one
repository globally and every user need to commit for reflecting one’s changes in the
repository. It is possible for others to see your changes by updating.
Two things are required to make your changes visible to others which are:
You commit
They update
The benefit of CVCS (Centralized Version Control Systems) makes collaboration amongst
developers along with providing an insight to a certain extent on what everyone else is doing
on the project. It allows administrators to fine-grained control over who can do what.
It has some downsides as well which led to the development of DVS. The most obvious is the
single point of failure that the centralized repository represents if it goes down during that
period collaboration and saving versioned changes is not possible. What if the hard disk of the
central database becomes corrupted, and proper backups haven’t been kept? You lose
absolutely everything.
Distributed Version Control Systems: Distributed version control systems contain multiple
repositories. Each user has their own repository and working copy. Just committing your
changes will not give others access to your changes. This is because commit will reflect those
changes in your local repository and you need to push them in order to make them visible on
the central repository. Similarly, When you update, you do not get others’ changes unless you
have first pulled those changes into your repository.
To make your changes visible to others, 4 things are required:
You commit
You push
They pull
They update
The most popular distributed version control systems are Git, and Mercurial. They help us
overcome the problem of single point of failure.
In the case of Software Configuration Management (SCM) audits, three types of audits are
typically performed:
Parts 2 through 4 of this article will discuss the purpose of each of these three types of SCM
audits. They will also provide examples of checklist items that could be used during audit
evaluations and suggests evidence-gathering techniques for each item in those checklists.
At a minimum, FCA and PCA should be conducted just before the final Ready to Beta Test or
Ready to Ship review to provide input information into those reviews. In addition, these
audits can also be conducted at other major milestones throughout the software development
cycle as inputs into milestone reviews or other management oversite activities.
In traditional software development, as illustrated in Figure 1, the FCA and PCA activities
should be conducted as part of creating the Product Baseline. Depending on the level of rigor,
FCA and PCA activities could also be conducted at other major milestones (baselines),
including:
In agile software development, as illustrated in Figure 2, the FCA and PCA activities should
be conducted as part of the software release milestone. Depending on the level of rigor, FCA
and PCA activities could also be conducted at the end of each sprint (iteration).
Figure 2: FCA and PCA Audits in Agile Software Development
In-process SCM audits can be conducted throughout development as needed. Plans for any in-
process SCM audits should be specified in the Software Quality Assurance (SQA) plans.
Software Maintenance
What is Software Maintenance?
Software maintenance is a continuous process that occurs throughout the entire life cycle of
the software system.
The goal of software maintenance is to keep the software system working correctly,
efficiently, and securely, and to ensure that it continues to meet the needs of the users.
This can include fixing bugs, adding new features, improving performance, or
updating the software to work with new hardware or software systems.
It is also important to consider the cost and effort required for software maintenance
when planning and developing a software system.
It is important to have a well-defined maintenance process in place, which
includes testing and validation, version control, and communication with stakeholders.
It’s important to note that software maintenance can be costly and complex,
especially for large and complex systems. Therefore, the cost and effort of maintenance
should be taken into account during the planning and development phases of a software
project.
It’s also important to have a clear and well-defined maintenance plan that includes
regular maintenance activities, such as testing, backup, and bug fixing.
Several Key Aspects of Software Maintenance
1. Bug Fixing: The process of finding and fixing errors and problems in the software.
2. Enhancements: The process of adding new features or improving existing features
to meet the evolving needs of the users.
3. Performance Optimization: The process of improving the speed, efficiency, and
reliability of the software.
4. Porting and Migration: The process of adapting the software to run on new
hardware or software platforms.
5. Re-Engineering: The process of improving the design and architecture of the
software to make it more maintainable and scalable.
6. Documentation: The process of creating, updating, and maintaining the
documentation for the software, including user manuals, technical specifications, and
design documents.
Several Types of Software Maintenance
1. Corrective Maintenance: This involves fixing errors and bugs in the software
system.
2. Patching: It is an emergency fix implemented mainly due to pressure from
management. Patching is done for corrective maintenance but it gives rise to unforeseen
future errors due to lack of proper impact analysis.
3. Adaptive Maintenance: This involves modifying the software system to adapt it to
changes in the environment, such as changes in hardware or software, government
policies, and business rules.
4. Perfective Maintenance: This involves improving functionality, performance, and
reliability, and restructuring the software system to improve changeability.
5. Preventive Maintenance: This involves taking measures to prevent future
problems, such as optimization, updating documentation, reviewing and testing the
system, and implementing preventive measures such as backups.
Maintenance can be categorized into proactive and reactive types. Proactive maintenance
involves taking preventive measures to avoid problems from occurring, while reactive
maintenance involves addressing problems that have already occurred.
Maintenance can be performed by different stakeholders, including the original
development team, an in-house maintenance team, or a third-party maintenance provider.
Maintenance activities can be planned or unplanned. Planned activities include regular
maintenance tasks that are scheduled in advance, such as updates and backups. Unplanned
activities are reactive and are triggered by unexpected events, such as system crashes or
security breaches. Software maintenance can involve modifying the software code, as well
as its documentation, user manuals, and training materials. This ensures that the software is
up-to-date and continues to meet the needs of its users.
Software maintenance can also involve upgrading the software to a new version or platform.
This can be necessary to keep up with changes in technology and to ensure that the software
remains compatible with other systems. The success of software maintenance depends on
effective communication with stakeholders, including users, developers, and management.
Regular updates and reports can help to keep stakeholders informed and involved in the
maintenance process.
Software maintenance is also an important part of the Software Development Life Cycle
(SDLC). To update the software application and do all modifications in software
application so as to improve performance is the main focus of software maintenance.
Software is a model that runs on the basis of the real world. so, whenever any change
requires in the software that means the need for real-world changes wherever possible.
Need for Maintenance
Software Maintenance must be performed in order to:
Correct faults.
Improve the design.
Implement enhancements.
Interface with other systems.
Accommodate programs so that different hardware, software, system features, and
telecommunications facilities can be used.
Migrate legacy software.
Retire software.
Requirement of user changes.
Run the code fast
Challenges in Software Maintenance
The various challenges in software maintenance are given below:
The popular age of any software program is taken into consideration up to ten to
fifteen years. As software program renovation is open-ended and might maintain for
decades making it very expensive.
Older software programs, which had been intended to paint on sluggish machines
with much less reminiscence and garage ability can not maintain themselves tough in
opposition to newly coming more advantageous software programs on contemporary-
day hardware.
Changes are frequently left undocumented which can also additionally reason
greater conflicts in the future.
As the era advances, it turns into high prices to preserve vintage software programs.
Often adjustments made can without problems harm the authentic shape of the
software program, making it difficult for any next adjustments.
There is a lack of Code Comments.
Lack of documentation: Poorly documented systems can make it difficult to
understand how the system works, making it difficult to identify and fix problems.
Legacy code: Maintaining older systems with outdated technologies can be
difficult, as it may require specialized knowledge and skills.
Complexity: Large and complex systems can be difficult to understand and modify,
making it difficult to identify and fix problems.
Changing requirements: As user requirements change over time, the software
system may need to be modified to meet these new requirements, which can be difficult
and time-consuming.
Interoperability issues: Systems that need to work with other systems or software
can be difficult to maintain, as changes to one system can affect the other systems.
Lack of test coverage: Systems that have not been thoroughly tested can be
difficult to maintain as it can be hard to identify and fix problems without knowing how
the system behaves in different scenarios.
Lack of personnel: A lack of personnel with the necessary skills and knowledge to
maintain the system can make it difficult to keep the system up-to-date and running
smoothly.
High-Cost: The cost of maintenance can be high, especially for large and complex
systems, which can be difficult to budget for and manage.
To overcome these challenges, it is important to have a well-defined maintenance process
in place, which includes testing and validation, version control, and communication with
stakeholders. It is also important to have a clear and well-defined maintenance plan that
includes regular maintenance activities, such as testing, backup, and bug fixing.
Additionally, it is important to have personnel with the necessary skills and knowledge to
maintain the system.
Categories of Software Maintenance
Maintenance can be divided into the following categories.
Corrective maintenance: Corrective maintenance of a software product may be
essential either to rectify some bugs observed while the system is in use, or to enhance
the performance of the system.
Adaptive maintenance: This includes modifications and updations when the
customers need the product to run on new platforms, on new operating systems, or
when they need the product to interface with new hardware and software.
Perfective maintenance: A software product needs maintenance to support the
new features that the users want or to change different types of functionalities of the
system according to the customer’s demands.
Preventive maintenance: This type of maintenance includes modifications and
updations to prevent future problems with the software. It goals to attend to problems,
which are not significant at this moment but may cause serious issues in the future.