How is Regression testing different from Retesting? - ACCELQ
1537 words •
00:00
Errors, bugs, and fallacies are all a part of the software delivery process. It’s the presence of these inefficiencies that ultimately paves the way for an improved release. However, that’s only possible when a sound testing plan is in place, and understandably so.
The term “sound testing plan,” however, fuels a separate discussion around the best testing practices for a particular scenario and application – Should it be a test-driven approach? A load-driven scenario? And what about retesting?
In this blog, we will understand
What is regression testing?
What is retesting?
When is regression testing done?
When is retesting done?
Overview of differences between regression testing and retesting
What is Regression Testing?
Regression testing is the process of analyzing the program code and data files and executing its related tests to ensure that any changes made to the application or software do not break existing features or functionality. It’s an important practice in software testing.
The primary goal of regression testing is to maintain a bug-free environment for users and developers by blocking unwanted regressions when new features are introduced into an application. As such, regression testing should be done periodically even if no bugs were found during earlier stages of development, especially after supplementing any significant new functionality.
Why is regression testing important?
Regression testing becomes vital since it ensures that a new code in one part of a system does not create unwanted side effects in other parts of the system. Furthermore, this helps ensure that new changes do not introduce new bugs in previously tested and bug-free software.
Updates, upgrades, changes in functionality, etc., have become a mainstay in the software development landscape. Much of that is attributed to constantly shifting customer demands. As software begins to touch multiple parts of the organization and becomes business-impacting, it becomes crucial to ensure that new changes do not bring about disruption. Let us understand this with an example.
An Example
Let us run through a scenario here –
An organization discovers a bug in the financial system and creates a task.
The developer creates the fix and runs a unit test. The test proves beyond doubt that the bug fix has worked.
They then release the fix into production, and everything seems to be in order.
Soon after, the organization finds itself unable to run the P&L statements. And the system times out every time they try to run an Aging report.
On deeper exploration of the task when it was first created and the subsequent steps taken, they discover quite a few things. While the unit test worked, this test ran against a small test database that was only sufficient to replicate the error for bug fixing and show a positive unit test result.
The code, however, was not tested using the production data.
The new code thereby created side effects in the system. This problem could have been easily avoided had the fix been incorporated into a system-wide regression test employing a copy of the production data.
Regression testing prevents degradation of the system quality with functionality growth and reduces the defects during release. It enhances software quality, anticipates errors before an update rollout or product deployment, and ensures happy end-users.
What is Retesting?
what is retesting
Contrary to regression testing, retesting is done to test whether a particular feature or functionality that has been developed, tested, and released is working as expected. It’s generally carried out after significant modifications to the code or software are made.
When running retests, your goal is to determine whether any known bugs have re-emerged or whether new bugs have appeared.
When Is Regression Testing Done?
A variety of cases entail the application of regression testing. This includes after installing a new feature, upgrading or patching, and releasing a new product.
The most common types of regression tests can be summarized as follows:
Implementation of a new feature – For example, when there has been a refactoring that may have removed some code, which was required but no longer exists – regression testing, in such case, would address the assumption that all the code needed for the new feature will still function properly.
Updates and patches application – Regression testing can be done before or after installation to ensure that the changes are compatible with the existing software. Likewise, a regression test can be run after deploying a new release to ensure no unintended consequences were associated with the same.
When is Retesting Done?
The most common types of retest cases are summarized as follows
Retesting is done when there are bugs in the software, problems with the reports, or re-emergence of other issues. A re-test ensures that these issues no longer appear.
Changes in the business logic – The numbers of a report may have changed, a new field has been added to a database table, or some other notable change has been made that would affect the overall functioning.
Regression v/s retesting - The difference
These are similar-sounding terms but not interchangeable. Retesting ascertains that a specific code fix works as expected.
Regression testing, on the contrary, ensures that the entire system works as designed after changes. Regression tests, as such, have a much wider scope of activity when compared to retesting.
Retesting usually takes place near the time of code development. Contrarily, regression testing is further along the development lifecycle. These tests need more time for execution as compared to retests. Complete regression testing demands testing for all aspects of the system and needs adequate, system-wide monitoring.
Types of regression testing
There are three primary types:
Unit regression testing
These tests are independent of aspects outside of the unit as they test only the specific unit. During the test, other system functionalities are blocked.
Partial regression testing
This tests the updated unit and the units that interact with it to evaluate if the changes applied to the updated unit affect the software functions and how. This test is applied when:
There are slight changes to the software
The developers are sure that new codes will not affect any other part of the system.
Complete regression testing
Tests and ensures that the system works as intended despite tweaks and updates. This testing comes to the fore when the updates affect the foundation of the code. That’s when the updates significantly affect the codebase and/or when multiple changes are added to the code.
This testing matters as software updates and upgrades become mainstays that ensure that the program is up secure, stable, and up to date in accordance with the latest technological developments.
Regression testing techniques
It includes functional and non-functional tests and thoroughly investigates the software in search of flaws. Some of the techniques used include:
Retest All
This technique checks every test case to confirm if all software parts are working as intended. This is the most accurate and all-around method of regression testing. But it’s also the hardest and the most expensive technique.
Regression Test Selection
This technique does not run all the tests in the test suite. However, it divides all tests into three categories – reusable test cases, retestable test cases, and obsolete test cases. The tests have specific coverage criteria. Only relevant test cases of the software are tested. The testers can also use a minimization technique and select a minimum set of cases that they feel will do the job.
Test Case Prioritization
This technique assigns a priority to every test case, guaranteeing priority in their execution. General prioritization and Version Specific prioritization are two paths for Test Case Prioritization.
Hybrid Testing
This technique combines Regression Test Selection and Test Case Prioritization. It allows testers and QA teams to choose only the re-executed test cases based on their priority.
When to perform regression testing?
Given its importance, regression testing should become a regular process for developers and business owners to undertake. Here are the main instances for performing this type of testing:
The development phase and as early as the pre-deployment stages of software development
Before releasing new updates. Regression testing should become a part of the regular functionality tests if updates are very frequent and the time between two updates is short
After any bug or error, fix
When updating new features or adding new ones to the system
When making significant changes to the codebase or the system
The challenge with regression testing
Regression testing can begin to get complicated with every session with the introduction of software updates. It can also take up time and resources and is less than optimal when done manually.
Manual regression testing is effort-intensive and can be error-prone as checking the software’s overall functionality each time while conducting tests can lead testers to overlook other aspects of the system, especially during rapid testing.
Automating regression testing emerges as the perfect antidote to this challenge. Organizations can reduce the time and resources expended on this testing, expand test coverage and enable comprehensive, reliable, and faster testing.
Final Thoughts
Regression testing is more involved than retesting, and the benefits of proceeding with this type of testing are considerable. However, there’s no denying that a coalition of retesting and regression testing is helpful in the long run because the thoroughness of the process considerably extends.
API Testing – What, Why, and How? - ACCELQ
1656 words •
00:00
Application Programming Interface (API) enables two or more computer programs to interact with each other and exchange data between them without any user intervention.
To ensure that the APIs work without any bottlenecks, the QA teams perform API testing.
What are the Benefits of API Testing?
By now, it has been established that API testing is an integral part of the testing cycle. It helps to validate and qualitatively measure the success of business requirements through a defined test case process. More specifically, it helps with:
Early Evaluation: It evaluates the API early on and measures its success against a test suite. This prevents a lot of loss of time during the development cycle and over-engineering that might be necessary to address minor issues during the later stages.
CI/CD Compliance: Because API testing can be automated, validating the business requirements through continuous integration and a continuous delivery pipeline is smooth. The end-to-end testing cycle is thus more efficient and relevant, as is the quality of the application.
Tight Security: Considering the combined prowess of fuzz, penetration, and security testing that API testing brings to the table, it becomes a robust and authoritative testing method against both the functional and the security anomalies that the API might face.
Time and Cost Reduction: The automation of API testing ensures that the time and resources invested in API testing are well-spent. Besides, the direct impact of API testing in quicker delivery, compliance to standards, better security, and a controlled scope is visible across every phase of development, making for a well-rounded testing strategy.
Platform Agnosticism: API testing ensures that the API can be deployed and tested across multiple technologies, regardless of the platform used. With the advantage of testing on different platforms and keeping the availability of both automated and manual testing continuous, API testing becomes a viable option for cross-development frameworks.
All these aspects serve as examples of the relevance of API testing, especially in reducing the risk of delivering an application that is not yet ready for the market.
Challenges in API Testing
1. Initial Setup of API Testing
Setting up the testing infrastructure is a challenging process in itself, not because it's difficult, but because it's a time-consuming process:
1. It's different from other software testing environments as there's no GUI available. 2. The database and server must be configured per the application's requirements. 3. The QA team has to get access to the testing system, get security approvals, and overcome the developer's resistance to performing testing.
Sometimes the setting up process could go on for one or more days. Once the initial setup is completed, the QA team can complete the API testing process.
2. Sequencing of API Calls
The API calls must appear in a specific sequence to achieve the desired result. But sometimes, the API calls may not appear in the sequence expected. This is especially a problem with multi-threaded apps. Haphazard call sequencing could lead to confusion as the tester will not be able to check if the system is working correctly.
3. Selecting, Testing, and Validating the Parameter Combinations
APIs assign data values to parameters. These parameters pass through the data requests to manage communication between the systems. Sometimes the API would assign two different values to the same parameter. The QA team has to test all the possible parameter combinations in API to check for any issues in the specific configurations. They also need to check if it passes the validation criteria.
For example, the team has to check if all the parameter data use the correct strings or numerical data type and if they fit within the value range.
4. Updating the Schema of API Testing
The schema of API testing (or data formatting and storage) should be maintained throughout the testing lifecycle as it contains the requests and responses of the API. The QA team needs to ensure that any change in the program that creates an additional parameter for API calls reflects in the schema configuration.
How To Approach API Testing?
1. Define the Scope of Testing
The QA team must start by defining the scope of testing. This includes asking critical questions like what endpoints are available for testing, what should the error message display in the event of an unsuccessful request, what is the workflow of the application, etc. Document all the testing requirements to plan and implement API tests successfully. Determine who will execute the API tests and how frequently they will execute them.
2. Set Up the Environment and Integrate Application Data
Once the scope is defined, set up the testing environment, configure the database and server according to the application requirements, and integrate application data with the API tests to test the API against all configurations.
3. Apply Various Testing Techniques
Perform various testing techniques such as functionality testing, load testing, and security testing to ensure that the API works efficiently. Each serves a specific purpose, so test thoroughly before sending to production. Before starting the testing, make an API call to check if the API is operational and try all the input combinations to check if it delivers the expected results.
4. Choose the Right API Testing Tool
Pick tools that can execute API testing efficiently. Discuss the different tools with developers and the QA team, analyze their pros and cons, check the programing language they are based on, and evaluate if they fit the budget. Consider using codeless API test automation tools to automate API testing and empower the business users to perform testing without writing a single line of code.
5. Develop Test Cases and Analyze the Results
Write and execute test cases and check if the actual results match the expected results. For example, check the behavior of the API in the system when there's no return value in response or check if the response time is within the agreeable limit. Check if the API can handle the expected user load and work seamlessly across different browsers and devices.
6. Document Maintenance
When the test cases are executed, document the results for future reference. Also, make it a point to update the document regularly in case there are changes in endpoints or the backend impacting the API.
What is API Testing?
API testing involves testing or checking the application programming interfaces (API) against the expectations, use cases, and functionality needed. As a direct testing approach and a part of the integration testing paradigm, it proves to be integral for validating and understanding the functionality of the API and giving context to API's quality, security, and usability.
Lately, with the advent of DevOps and the associated continuous delivery practices, API testing has become a breeding ground for test automation, and rightly so. Test cases, which are a part of the automated test suite, now help validate the functionality of an API quickly, regardless of its intricacy. Furthermore, the execution of these test cases, which might span multiple iterations, ensure that the API is working as expected and against the business requirements.
At present, the scope of API testing is immense, and the magnified market potential affirms it. According to Global Industry Analytics Inc., the API testing market is projected to close in on the $2 billion market value by the end of 2026. This growth is attributed to the higher dependency on aptness APIs and their ubiquity in the digital world.
Best Practices of API Testing
Here are a few best practices that the QA team can follow for successful testing:
Develop a flowchart to help the QA team visualize the API calls and enable developers to build calls that correspond with the flowchart. This will help in building successful call sequencing.
Test for both positive and negative results. In fact, testing experts recommend testing the API till it produces a negative outcome. This will help the QA team to identify the problems.
Perform API testing for all API input combinations to widen the scope of test coverage.
Use data that would reflect the conditions the API would face in the production phase. This makes API testing more accurate.
Use service virtualization to create a simulated environment and test as many test cases, scenarios, and endpoints as possible. This will enable the QA team to confirm that the application provides an acceptable level of security.
Perform both manual and automated API tests to produce more trustworthy results.
Automate the documentation creation process to ensure that all the test cases are documented and updated in a standardized format.
Examples of API Testing
1. Testing if a mobile app can pull out the necessary information about the user from Google or Facebook
A user gets two options on installing a mobile app - they could either manually enter their details to sign-up or use the login credentials of Facebook or Google to sign-up. The QA team can do API testing to check if the app is able to work in collaboration with Facebook and Google and pull out the necessary information that's required to access the account.
2. Testing the payment integration in a mobile app
A user may want to use their bank account or PayPal account to pay for the products they have purchased from an eCommerce website. The QA team can do API testing to check if the eCommerce website is able to communicate with the banks or PayPal to process the payment and if it can safeguard the user's details throughout the process.
Why ACCELQ for API Test Automation?
Speed up the continuous delivery cycle by reducing the dependency on manual testing
Facilitate end-to-end API validation through chain API tests
Empower testing engineers to make more informed decisions on the run
Maintain your standards and respond to business requirements rapidly
Reduce the cost of development and maintenance of the codebase with a lean testing strategy
Do all that and more with ACCELQ's codeless and automated API testing. We believe in striking a balance between speed and quality.
What is Unit Testing? Importance & Best Practices - ACCELQ
1010 words •
00:00
If you were to prioritize different automated testing initiatives, unit testing would be in the top five spots. It is a central component of modern digital application QA initiatives. Unit testing ensures granular stability and resilience for any large digital application by validating the performance of its component modules.
However, over the years, software testing teams have adopted several different approaches. The diversity in approaches may prove to be confusing and challenging for enterprises when they decide on a unit testing strategy today.
Hence, it is important to know in detail about the best practices for unit testing in detail. But before going into the best practices, it is important to have a clear understanding of itself and ensure that all stakeholders within the enterprise are on the same page while discussing and agreeing upon the best practices.
What is Unit Testing?
In simple terms, unit testing refers to the testing of modular or functional units of a larger software application, done in isolation from other modules.
It tests the resilience, performance, and capacity of individual functional units in real-life conditions. The primary aim of unit testing is to ensure that their actual behavior aligns with their expected behavior.
QA teams conduct this testing without connecting the module to other external entities like databases, libraries, and file systems. In other words, each module is considered a small program that can run on its own and exhibits a diverse set of behavior for every operational scenario. With unit testing, developers get a clear idea of how their individual code blocks perform. It allows them to make quick adjustments in the event of any unexpected behavior.
Why is Unit Testing Important?
As the digital economy expands, the traditional focus on software testing and quality assurance is no longer an acceptable standard for enabling the best customer experience.
Every strategic approach in software testing needs to be given its due share of importance and allocated resources, both manpower, and tools, to facilitate seamless execution. While many leaders may stress giving more priority to areas like acceptance testing, the reality is that every test approach deserves a special focus as any let-downs may impact overall application quality.
Since more businesses are opt for cloud-based microservices architecture for their applications, there is an increased focus on the granular stability of the application. Testing cloud-based apps with microservices architecture are important, and unit testing finds a very crucial role in this regard.
With unit testing, developers can have more control over their individual code block quality before integrating different components and then sent for regression testing. Also, it is easier to identify and rectify mistakes or defects at the code level. This helps enterprises save costs significantly when compared to discovering defects later in the development cycle.
What Are the Best Practices for ServiceNow Test Management?
Now that you have a clear idea of what is unit testing and why enterprises need to focus on implementation, it is time to learn about the best practices.
We have outlined six major best practices for unit testing that will guarantee better results and ensure profitable and sustainable testing coverage for your application development projects.
Create reliable and clear unit tests
The first step to building a great unit testing practice is to write reliable unit tests. The test suite must be able to report the unexpected or suspicious behavior observed during testing. It should not be considered to simply report the stage at which the these test succeeds in delivering an expected output or outcome.
Mandate automation in unit testing
Manual bias may often create unsatisfactory test results. It can lead to future complications if defects detection isn’t in the early stages. It is important to mandate automated testing strategies in your technology operations to prevent this situation. Automated unit testing delivers faster feedback and provides significantly higher code coverage and controlled parallel processing of test cases. It allows test engineers to work more efficiently with less time.
Prioritize attention to use cases
One of the critical aims of unit testing is to ensure that the code is easily maintainable. Moreover, ensure that new developers can understand it without any issues. By focusing on a single use case at a time and prioritizing the rest in sequence, it is easier to validate outcomes against expected results.
Speed up tests with better isolation
You should carry out Unit tests should in isolation without depending on other tests and mocking external dependencies. Making them simpler and independent modules can help in faster code coverage. Automation can boost it further. All these measures help to speed up the test activity. This is a critical factor that makes unit testing more appealing for developers. If it consume too much time, it will be tough to convince developers to wait long to push their code into the next stage.
Integrate unit testing into the build process
While developers following a Test Driven Development (TDD) model will provide sufficient coverage for unit testing, it is always best to make it a part of the build process for additional safety. While going in for end-to-end test automation,the build process will ensure that all unit tests are executed. And will also notify the respective stakeholders about any failure when any test fails.
Follow distinguishable and simple test nomenclature
Test activities are also a stage for documentation of process workflows. If every unit test is named in a standard convention that explains the scenario being tested, it will be easier to document. The further use of these cases across the organization when different stakeholders are trained on applications also becomes easy. The naming convention also enables better identification of defect causes for other test approaches like integration testing, acceptance testing, etc.
Conclusion
Unit testing will be a critical component of modern application quality assurance initiatives. Facilitating a seamless execution of unit testing is what many enterprises will find hard to achieve. This is where automation of test activities can be a lifesaver.
Book a demo to know how ACCELQ can help you automate your end-to-end test initiatives.
How to have constructive conversations
1384 words •
00:00
Three planes, 25 hours, 10,000 miles. My dad gets off a flight from Australia with one thing in mind and it's not a snack or a shower or a nap. It's November 2016 and Dad is here to talk to Americans about the election. Now, Dad's a news fiend, but for him, this is not just red or blue, swing states or party platforms. He has some really specific intentions. He wants to listen, be heard and understand.
00:35
And over two weeks, he has hundreds of conversations with Americans from New Hampshire to Miami. Some of them are tough conversations, complete differences of opinions, wildly different worldviews, radically opposite life experiences. But in all of those interactions, Dad walks away with a big smile on his face and so does the other person. You can see one of them here. And in those interactions, he's having a version of what it seems like we have less of, but want more of -- a constructive conversation.
01:13
We have more ways than ever to connect. And yet, politically, ideologically, it feels like we are further and further apart. We tell pollsters that we want politicians who are open-minded. And yet when they change their point of view, we say that they lacked conviction. For us, when we're confronted with information that challenges an existing worldview, our tendency is not to open up, it's to double down. We even have a term for it in social psychology. It's called belief perseverance. And boy, do some people's beliefs seem to persevere.
01:53
I'm no stranger to tough conversations. I got my start in what I now call productive disagreement in high school debate. I even went on to win the World Schools Debate Championship three times. I've been in a lot of arguments, is what I'm saying, but it took watching my dad on the streets of the US to understand that we need to figure out how we go into conversations. Not looking for the victory, but the progress.
02:22
And so since November 2016, that's what I've been doing. Working with governments, foundations, corporations, families, to uncover the tools and techniques that allow us to talk when it feels like the divide is unbridgeable. And constructive conversations that really move the dialogue forward have these same three essential features.
02:46
First, at least one party in the conversation is willing to choose curiosity over clash. They're open to the idea that the discussion is a climbing wall, not a cage fight, that they'll make progress over time and are able to anchor all of that in purpose of the discussion. For someone trained in formal debate, it is so tempting to run headlong at the disagreement. In fact, we call that clash and in formal argumentation, it's a punishable offense if there's not enough of it. But I've noticed, you've probably noticed, too, that in real life that tends to make people shut down, not just from the conversation, but even from the relationship. It's actually one of the causes of unfriending, online and off.
03:43
So instead, you might consider a technique made popular by the Hollywood producer Brian Grazer, the curiosity conversation. And the whole point of a curiosity conversation is to understand the other person's perspective, to see what's on their side of the fence. And so the next time that someone says something you instinctively disagree with, that you react violently to, you only need one sentence and one question: “I never thought about it exactly that way before. What can you share that would help me see what you see?” What's remarkable about curiosity conversations is that the people you are curious about tend to become curious about you. Whether it's a friendly Australian gentleman, a political foe or a corporate rival, they begin to wonder what it is that you see and whether they could see it to.
04:46
Constructive conversations aren't a one-shot deal. If you go into an encounter expecting everyone to walk out with the same point of view that you walked in with, there's really no chance for progress. Instead, we need to think about conversations as a climbing wall to do a variant of what my dad did during this trip, pocketing a little nugget of information here, adapting his approach there. That's actually a technique borrowed from formal debate where you present an idea, it's attacked and you adapt and re-explain, it's attacked again, you adapt and re-explain. The whole expectation is that your idea gets better through challenge and criticism.
05:35
And the evidence from really high-stakes international negotiations suggests that that's what successful negotiators do as well. They go into conversations expecting to learn from the challenges that they will receive to use objections to make their ideas and proposals better. Development is in some way a service that we can do for others and that others can do for us. It makes the ideas sharper, but the relationships warmer. Curiosity can be relationship magic and development can be rocket fuel for your ideas.
06:16
But there are some situations where it just feels like it's not worth the bother. And in those cases it can be because the purpose of the discussion isn't clear. I think back to how my dad went into those conversations with a really clear sense of purpose. He was there to learn, to listen, to share his point of view. And once that purpose is understood by both parties, then you can begin to move on. Lay out our vision for the future. Make a decision. Get funding. Then you can move on to principles.
06:56
When people shared with my dad their hopes for America, that's where they started with the big picture, not with personality or politics or policies. Because inadvertently they were doing something that we do naturally with outsiders and find it really difficult sometimes to do with insiders. They painted in broad strokes before digging into the details.
07:28
But maybe you live in the same zip code or the same house and it feels like none of that common ground is there today. Then you might consider a version of disagreement time travel, asking your counterpart to articulate what kind of neighborhood, country, world, community, they want a year from now, a decade from now. It is very tempting to dwell in present tensions and get bogged down in practicalities. Inviting people to inhabit a future possibility opens up the chance of a conversation with purpose.
08:10
Earlier in my career, I worked for the deputy prime minister of New Zealand who practiced a version of this technique. New Zealand's electoral system is designed for unlikely friendships, coalitions, alliances, memoranda of understanding are almost inevitable. And this particular government set-up had some of almost everything -- small government conservatives, liberals, the Indigenous people's party, the Green Party. And I recently asked him, what does it take to bring a group like that together but hold them together? He said, "Someone, you, has to take responsibility for reminding them of their shared purpose: caring for people.” If we are more focused on what makes us different than the same, then every debate is a fight. If we put our challenges and our problems before us, then every potential ally becomes an adversary.
09:15
But as my dad packed his bags for the three flights, 25 hours, 10,000 miles back to Australia, he was also packing a collection of new perspectives, a new way of navigating conversations, and a whole set of new stories and experiences to share. But he was also leaving those behind with everyone that he'd interacted with. We love unlikely friendships when they look like this. We've just forgotten how to make them. And amid the cacophony of cable news and the awkwardness of family dinners, and the hostility of corporate meetings, each of us has this -- the opportunity to walk into every encounter, like my dad walked off that plane, to choose curiosity over clash, to expect development of your ideas through discussion and to anchor in common purpose. That's what really world-class persuaders do to build constructive conversations and move them forward. It's how our world will move forward too.
10:28
Thank you.