Friday, 20 March 2020

Fitting QA and Sec in DevOps



Traditional QA is woefully short in tackling the challenges of modern software applications. This is due to the fact that today’s software applications have interfaces with several digital elements and third-party sites to function and deliver the right outcomes. And to ensure that they do so seamlessly, DevOps QA must replace traditional QA.
So, why did DevOps QA slowly assume salience in the new digital scheme of things?
In a traditional software development lifecycle, QA exists as a distinct group along with Dev. It has different job roles, responsibilities, and management. The bottom line, both Dev and QA exist as separate entities catering to different objectives. However, from the operations perspective, both development and QA are considered to be part of the same ecosystem.
With quality, or should we say customer experience, taking precedence over everything else as far as acquiring a competitive edge in the market is concerned, enterprises are adopting DevOps as a methodology. Here, development and operations are combined in a cultural web where ensuring quality is not a one-off thing but a continuous process to be adhered to. So, when development and operations merge, how does QA fare in the scheme of things? DevOps is all about enhancing the quality of software applications throughout the SDLC and beyond. It incorporates test automation, security, and quality engineering while delivering continuous integration and deployment.
Why DevOps?
Enterprises are adopting this model to create a build ecosystem where quality software is developed quickly – on a weekly, daily, or even hourly basis. Here, the traditional concept of software release gives way to the continuous improvement of products or services. DevOps is the culmination of agile wherein all bottlenecks to delivering a superior quality application are removed. Through DevOps test automation, enterprises can achieve objectives like faster time to market, high-quality applications, instant responsiveness to customer queries or feedback, and preventing the ingress of glitches, among others.
How to incorporate Security into DevOps
As the security of applications becomes a cause of concern due to the rising incidents of cybercrime, customers have become wary of trying out new applications or even using the established ones. Are the concerns of end-customers valid or are they overreacting? The answer to the validity of concerns is a resounding yes. Unfortunately, even when the spectre of cybercrime is on-the-face, many enterprises have not yet woken up to the challenge. There is often a mistaken belief that cybercriminals would only target big and established players, and smaller players can get away without incorporating security into their build pipeline. Since security is such an important part of DevOps, let us understand how to weave awareness about the same in the SDLC.
How to introduce security into DevOps and make it DevSecOps?
The best practices to incorporate security into the DevOps model are as follows:
Create a DevSecOps culture: Every member of an organization should be made aware of the consequences of a security breach, especially on the brand and business. A heightened level of security awareness can help companies in situations where there is pressure to come out with a large number of software applications in lesser time. All-encompassing security culture will prevent developers to take shortcuts and instead insist on making way for DevOps quality assurance. To ensure the incorporation of DevOps QA in the SDLC, the culture for security awareness should be driven from the top. The executives and various stakeholders in the value chain should be made responsible for overseeing the introduction of security into the DevOps model.
Inculcate security awareness: This continues from the above wherein every new hire in the organization should be trained in the basics of security. It could be about writing a secure piece of code or identifying the most common attack vectors. The senior developers and DevOps testing specialists could be tasked with preparing training courses on secure coding protocols or common mistakes. Thus, the senior developers take ownership of these issues, especially when it comes to the daily grind of reviews, builds, and deployments.
Security processes should be compulsory but minimal: People, by and large, dislike lengthy protocols and can be at the end of their tether when the security processes are elaborate. So, it makes sense to lay down short and robust security mechanisms when it comes to dealing with passwords, encryption keys, or ciphers, among others. However, the types of authentication that are required should not be left to guesswork but made mandatory.
Conclusion
As DevOps picks up momentum and becomes the de-facto model for software development, QA and security should be made an integral part of the value chain. The latter two will ensure the effectiveness of the model when it comes to developing quality software applications.

Thursday, 12 March 2020

The QA imperative of a DevOps cycle



With customers taking the lead in determining the success of a software product in the market, enterprises have their task cut out. They can no longer afford to give short shrift to quality while focusing on faster releases alone. In traditional QA, siloed departments often work at cross purposes to each other and render the overall quality of a product less effective. So, to transform the whole QA value chain and deliver outcomes like speeding time to market, increased collaboration, and the delivery of a quality product, DevOps QA takes center-stage. The latter helps to streamline the functioning of silo- driven departments by driving a culture of collaboration.

What is DevOps and what are its benefits?

DevOps combines Development and Operations wherein the thrust is on automating the processes between the two teams. DevOps QA facilitates the development, testing, and release of software, quickly, reliably, and cost effectively. It is underpinned on building a culture of collaboration between the traditionally silo-driven teams. Here, three distinct elements in the whole ecosystem viz., people, processes, and products are integrated to deliver value to the end customers. With DevOps testing services, the entire SDLC is streamlined and accelerated to release applications or services within quick turnarounds.

The various benefits of a DevOps driven build-test-deliver pipeline are as follows:
As enterprises root for digital transformation to stay competitive and deliver the best user experiences, DevOps specialists are looking into the end-to-end product cycle. They do so with the aim of enhancing the quality of software at a lower cost.

·         Quick fixing of glitches: In the shift-left scheme of development and testing, a code does not move beyond a point until it is tested for various parameters. This results in quick identification of vulnerabilities or glitches and their resolution/mitigation. Thus, the clean code is passed on to the next module or cycle for integration.

·         Streamlined processes including automation: As DevOps quality assurance goes about breaking silos around teams and streamlines their processes, the quality and speed receive a boost. DevOps test automation stays central to the entire activity as codes are put through automated test scripts for validation. Also, automation can run repetitive processes iteratively leading to the quick identification of glitches.

·         Better engaged workforce: With DevOps test automation taking up the load of running iterative tests, testers can be deployed elsewhere. The testers can better utilize their skills in activities where there is a scope for innovation. The engaged workforce can ultimately benefit the organization with activities that can keep it competitive.

·         Collaboration: In traditional QA, teams across the organization generally do not go beyond their remit. This approach often results in ignoring issues, glitches, or vulnerabilities when the product module moves across the pipeline. Since glitches can get into the software at any point in the SDLC, everyone in the organization should be made accountable. There should be a change in culture wherein every member cutting across departments or processes should ensure the product moving through their part of the pipeline is devoid of glitches. Such collaboration can lead to the identification and removal of glitches thereby improving the overall quality of the product.

·         Continuous integration and delivery: Arguably the ultimate outcome of DevOps where a product can be upgraded based on the feedback from customers or the market. In the real world, customers may come across issues in a product, which did not find traction during development. The operations team must keep their ears to the ground and listen to the feedback. The same should be passed on to the development team for correction. The product pipeline should have a loop of continuous integration and delivery to ensure the quality of the product remains top-notch.

Since the ultimate aim of DevOps is to render the development and delivery of a product glitch-free, QA should be an integral part of the cycle. In other words, DevOps without QA is a recipe for failure. Let us understand this with an example. With faster time to market being one of the objectives of DevOps, enterprises may release a product without proper QA. Since a comprehensive round of QA testing involves checking the usability, functionality, security, and other aspects of a product, the overall quality suffers.

So, even if the customer receives a product quicker than others in the market, its lack of quality can mar the user experience. The quality issues again force the product to be fed into the development pipeline. This entails additional cost, time, and effort on the part of the team. So, on one hand, the product does not receive any goodwill in the market, on the other, it leads to the accrual of additional expenses for the organization. In the competitive world of business, these shortcomings can prove to be the undoing of enterprises.

QA is everyone’s responsibility

In DevOps software testing, ensuring the quality of software is treated as everyone’s responsibility. This does not, in any way, imply that the QA team becomes redundant. Rather, it underlines that quality has to be ensured at every point of the SDLC and beyond. Every team and individual within the team should take responsibility for the quality and stability of the product. QA should assume a more strategic role of establishing a robust testing architecture or/and offering an oversight of QA.

Conclusion

To ensure QA remains an integral part of the whole DevOps-led SDLC, it should sit at the core of the build rather than being treated as an afterthought. To be at the top of your game and make the product stay clear of the competition, DevOps should be implemented across the SDLC.

The Inevitability of Regression Testing



When it is all about staying competitive and earning revenues, enterprises are going all out to develop new applications with better user experiences. With users becoming choosy, enterprises are constrained to offer features and functionalities that are different from their competitors. However, there is a catch when it comes to adding new features in an application - regression! Yes, the unintended consequence of any code change, which instead of enhancing the user experience can, at times, act as a bummer.
Let us understand the same with an example. You take your car to the mechanic to fix an issue with its heating function. But after receiving the car with its heating function fixed, you find another function, say its fog lights not working. This turns out to be an unintended consequence, which you never imagined would hit you from nowhere.
To make it further easier to understand, let us relate it to software. For example, an application adding a photo-sharing service ends up nixing its loading speed upon delivery. So, to ensure such unintended changes do not hamper the user experience, testers need to implement a robust regression testing strategy.

So, what is regression testing and why is it needed?
It is aimed at ensuring the seamless functioning of an application in-spite of any addition/modification to its feature(s). This is important as regression testing can identify issues and fix them arising out of any code change. It is different from retesting and ensures the entire application to work in accordance with the expectations post changes. In retesting, on the other hand, only the specific code change is tested for its expected outcome. Hence, any comprehensive software regression testing can be quite complex and time-consuming.

Checklist for regression testing in software testing
A change in one part can create an unintended change in another part of the software. And unless the entire software is monitored post introducing the change, the consequences can impact the software’s functionality and user experience. The below-mentioned scenarios or test cases can be fit cases for conducting software regression testing.
·         Functionalities to have undergone changes
·         Cases related to integration
·         Cases with boundary values
·         Functionalities most visible to the users
·         All core features
·         Scenarios facing frequent defects

Should regression testing be automated?
Since regression testing services are often iterative, they are good candidates for automation. The test cases for automated regression testing should be easy-to-maintain, stable, and frequently repeated. As this type of testing checks the quality of an existing functionality, it needs to be repeated for various parameters. Automated regression testing frees up testers and allows them to further explore the production environment for any unusual responses. Further, not all software regressions are a result of code change. For example, some may be the result of updates to databases or browser versions.

Challenges to regression testing
The quality of an existing functionality can be ensured with more automation. However, it also requires testers to maintain such test suites for their prolonged usage. So, the test suites need to be flexible to incorporate any future changes. Let us discuss some challenges associated with regression testing services.
·         Expensive: As the same function is tested repeatedly, there is no immediate ROI to speak of but mainly expenses.
·         Not adequate time for testing: Since a project needs to be completed in a timebound manner, it is not possible to let the iterative regression testing to continue for a longer duration. So, testers often execute critical regression tests only and skip others. This can leave a few quality issues to remain unchecked.
·         Maintenance and optimization: The automated test suites should be optimized and maintained to meet the rigors of any new testing requirement.

How to manage regression testing
Given the inevitability of such testing in preempting the ingress of any unintentional quality issues during a code change, the tests should be managed well. The steps to ensure the same are:
·         Executing smoke test and automation
·         Analyzing the test requirements
·         Preparing to deal with the impact of changes
·         Prioritizing tests
·         Choosing the right automation tools
·         Analyzing the final glitch report in detail
·         Optimizing and maintaining the test suites
·         Creating criteria for entry or exit of regression testing
·         Executing testing randomly
·         Keeping the testers motivated

Conclusion
The rapidly changing digital landscape owing to the addition of new features and versions of software applications, browsers, and operating systems requires businesses to set up a robust regression testing strategy. So, even though the testing per se is expensive and time-consuming, it should be taken to its logical conclusion.

This article is originally published on dev.to.

Thursday, 5 March 2020

Why you should never cut corners with Software Quality Assurance?



The rapidly changing world of Information Technology can be observed in many dimensions. These include the advent of new technologies, changing customer preferences, the proliferation of new devices and operating platforms, the growing menace of cybercrime, and the increasing role of regulators. Enterprises, aware of these dimensions, are adopting digital transformation in a big way to stay up the ladder of competition. And one of the salient features of digital transformation is adopting or building new software tools or platforms to deliver great user experiences.

This is because customers with access to new product choices are not satisfied with run-of-the-mill products or services. Their growing appetite for quality products displaying attributes such as high usability, security, navigability, and functionality, has hit the proverbial death knell for companies continuing with legacy systems, methodologies, and policies. This has brought into sharp focus the critical importance of following software quality assurance. The plethora of devices, operating systems, browsers, and networks has meant the software delivered to the customers should be functional across the digital ecosystem.

However, notwithstanding the critical importance of upholding software quality assurance, many enterprises in a bid to release products quickly and take advantage of being the first mover, are cutting corners with software quality assurance testing. This results in the delivery of below-par products leading to unforeseen and unwarranted consequences (especially with financial software). Let us find out why enterprises developing software should never compromise with following a robust software quality assurance strategy.

Pitfalls of not undertaking software quality assurance

With software becoming the critical requirement in driving the digital ecosystem, ensuring its quality is of supreme importance. In case, companies do not pay heed to this dictum, they (including the end-customers) are bound to pay the price. The pitfalls are as following:

Poor quality product or service: Today, when software products are having interfaces to financial and personal information of customers, any glitches or vulnerabilities can play havoc. Cybercriminals may exploit these to steal information. Think of using an application with built-in glitches or malware that results in the siphoning off personal and financial data. Apart from causing losses to the customers, these glitches can destroy your brand equity. Citing another example of software being used in diagnostic devices in the healthcare industry.

If the software malfunctions owing to the presence of glitches, the result delivered by the device can be erroneous. The treatment protocol followed thereafter by the medical professional by taking inputs from such readings can worsen the condition of the patient even leading to his or her death. To avoid such an eventuality, any QA testing services company worth its salt should ensure the glitches or vulnerabilities present in the software are identified and removed forthwith.

An additional cost of reworking: The software quality assurance services help businesses to spend less on reworking, retesting, replacing, or remarketing of faulty software. Remember, any enterprise sets a budget for product development depending on the demand, technology used, the complexity of the process, and viability. If the software development pipeline does not incorporate software assurance techniques the chances of that product to have an uninterrupted run in the market can be cut short. Customers, on being frustrated with the quality of such a product, can disown or send it for replacement. The company has to rework on the product, which is both time and cost-intensive.

Fall in brand equity: People do not always buy products on a whim. They usually follow a brand after being convinced of its quality and price advantage. However, this can take a beating if the product is delivered to the market without following software quality assurance. But how? The product may come unstuck when the customer needed it the most or fail to give accurate information, slow to function, or lead to a data breach. Customers fed up with such products can disown them, influence others not to buy, and seek compensation for the loss. In each of the cases, the company is going to pay a heavy price. This is because building a brand is a time-consuming process involving strategizing, running campaigns, and spending money. However, such assiduously built brand equity can bite the dust in no time.

Conclusion

In the Agile and DevOps scheme of things, following a software quality assurance strategy is critical for outcomes like continuous integration and continuous delivery. When software has become increasingly critical in running and sustaining the digital landscape, especially with the arrival of IoT, giving short shrift to QA is a recipe for disaster.

Role of Cloud in your Digital Transformation Journey



In our technology-driven times, organizations that do not have an online presence risks going obsolete or lose credibility. Going digital has become a necessity for enterprises to remain viable, provide good customer experiences, and stay up the competition curve. Since success is generally measured in terms of customer experience, digital transformation becomes a key business requirement. And among the many proven technologies driving digital transformation and offering great customer experiences subsequently is cloud computing. This technology enables enterprises to have robust vision for the future, accelerate digital transformation services, and provide better experiences to the customers.
Businesses have begun to realize the inevitability and benefits of going the cloud way. In a technology-driven world with growing competition, the focus is on garnering transformational benefits rather than settling for the incremental ones. To achieve this, businesses require to set up a robust technology infrastructure. However, for any enterprise digital transformation initiative, the focus should be on remaining flexible and embracing the industry trends.

What is cloud computing?
The process involves the storage, maintenance, management, analytics, processing, and security of data by leveraging a network of internet-based servers. It is in sharp contrast to the data stored on a personal computer or a local server. The distributed storage and management of data help enterprises to make more informed and accurate decisions. Further, this helps them to improve productivity, streamline processes, save costs, innovate, accelerate time to market, enhance customer experiences, and achieve ROI.


Types of cloud computing
The cloud consists of three types of services viz., Software-as-a-Service (SaaS), Infrastructure-as-a-Service (IaaS), and Platform-as-a-Service (PaaS). In SaaS, a third-party cloud provider hosts software applications and delivers them on demand to customers over the World Wide Web. Some examples of SaaS are Google Apps, Dropbox, Salesforce, BigCommerce, MailChimp, Hubspot, and DocuSign, among others.
In PaaS, the third-party provider delivers software and hardware tools, operating environments, database, or computing platforms that are needed to develop applications, over the internet. The examples include Windows Azure, Force.com, Apache Stratos, AWS Elastic Beanstalk, and Heroku, among others.
Similarly, in IaaS, a third-party vendor offers access to computing resources viz., storage, data centre space, security, scaling, network components, or servers, among others. The examples include Linode, DigitalOcean, and Rackspace, among others.

How the cloud can play a role in digital business transformation
To disrupt the status quo and stay competitive, enterprises embrace digital transformation services wherein they need to upgrade their legacy IT infrastructure. Also, to enable digital disruption, enterprises, besides streamlining their business processes, need to leverage advanced technologies. These include Augmented Reality, AI and ML, Big Data Analytics, and the Internet of Things (IoT), among others. Since these technologies demand heavy computer power and storage space, cloud computing comes as a savior. The benefits to be accrued from cloud during the digital transformation process are as follows:
Flexibility: To ensure the success of any digital transformation strategy, the business processes of enterprises can be changed many times. The cloud allows any organization to save costs by not investing in setting up and maintaining costly IT resources in-house such as software or hardware. This way the organization can remain flexible and agile as it can leverage cloud-based resources based on its requirements. For example, if a project needs greater computing and storage power, the organization can scale up its on-demand cloud requirement by paying an extra amount. The reverse can also hold true leading to the optimization of resources and cost savings.
Security: Any information stored in-house can be vulnerable to situations like security breaches, unexpected system downtime, and natural or man-made disasters. Since all data including backup are contained within a singular IT system, any security-related issue can wipe it clean. On the other hand, cloud hosting can maintain multiple backups of data in a distributed system. So, even if one node gets affected, the data in other nodes can remain unaffected. In cases of big data analysis where big chunks of data are involved, any system failure or security breach can have devastating consequences.
Quick prototyping: Any digital transformation implementation entails continuous innovation, testing, and delivery of products or services. This is where the cloud can help enterprises with platforms to build, test, and deliver/deploy applications bypassing the need for a complex IT architecture. So, if an enterprise builds multiple products, then the cloud platform can allow quick prototyping of such applications, saving cost and time in the process.
Seamless collaboration: Implementing digital transformation solutions would require every stakeholder in the organization to embrace a culture of collaboration. This is congruous to the requirements of DevOps that aim at breaking hierarchies or silos to achieve creativity, quality, innovation, efficiency, and glitch-free delivery. With cloud computing, different teams can work seamlessly in parallel to develop, test, and deliver applications. It allows access to computing resources, anywhere and anytime. Also, the optimal delegation of authority can be assured by controlling the level of user authority.
Cost-effective: Cloud services are highly flexible to user requirements. They offer a scalable model wherein enterprises only pay for services that have been used. Thus, there is no need to set up and maintain a costly IT infrastructure (hardware and software) thereby saving CapEx in the process.

Conclusion
The need to enable digital transformation has become imperative given the cost of setting up and maintaining a robust and functioning IT infrastructure. As business processes become agile with the inclusion of new technologies and the need to uphold greater user experiences, migrating to the cloud environment becomes a necessity. It helps enterprises to bypass the challenges of legacy systems and build-test-deliver quality software applications consistently.

How Test Automation helps Agile to be successful?



To meet the stringent quality requirements of complex applications, the Software Development Life Cycle has changed. If earlier, the waterfall was the preferred model with testing done at the end of development, it has given way to Agile today. This is because the waterfall model suffered from a lot of inconsistencies and did not deliver the right results. Also, it increased the cost of software development and testing for businesses. The need for Agile was felt due to the growing complexity of software applications. As the new software applications come with endpoints that interface with third-party databases, servers, or sites, the quantum of vulnerabilities has increased. If not plugged in time, once these applications are out in the market, they can be exploited by hackers leading to severe consequences for the users.
With Agile, it has become easy to detect glitches and vulnerabilities early on in the software development pipeline. Also, to keep pace with shorter release cycles, enterprises are adopting Agile test automation. This is to ensure the software conforms to the exacting standards of quality. Further, with plenty of features being added to the software in every sprint, developers need to ensure they do not affect the existing functionalities. Also, as the sprint is of a shorter duration, it is not possible to test and execute the entire software suite every time a feature is added. This is where Agile test automation can help by running the codes iteratively.

Why Agile development needs automation?
The Agile model entails the development, testing, and delivery of glitch-free software products within fast turnarounds. Since the process can involve repeated changes, a robust test automation strategy should be put in place. For Agile testers, there are several challenges to be addressed with Agile test automation.

Challenges for Agile testing
Even though adopting an Agile testing framework delivers a string of positive outcomes, it can entail some challenges too. These include
Inadequate test coverage: During the later sprints when a number of features are added to the build, the testers get lesser time to test them and analyze their impact. In such conditions, a few user stories are left untested with the hope that they would not affect the release. However, by automating the Agile application testing process, the build can be put through a regression testing exercise to achieve assured quality.
Frequent build leading to cracked code: In Agile, there can be instances of frequent code changes due to the addition of features to the build. These changes can lead to cracked codes, especially during the integration phase. Further, to implement a continuous integration and deployment pipeline (CI/CD), the Agile testing experts ought to implement test automation.
Performance issues: It can often be the case when improving the functionality of an app can end up complicating it further. Since every change can lead to an increase in the volume of codes, the performance of the app can take a hit. However, conducting Agile performance testing using automation tools can identify the performance issues.
Compatibility issues: Any software of the day should be checked for its compatibility across devices, operating platforms, browsers, and networks. Ideally, testers should ensure the seamless run of software across devices. An automated test run can check for glitches or vulnerabilities in the endpoints and APIs, and make sure the compatibility issues are sorted.
API testing: A web or mobile app involves the implementation of complex APIs, the quality of which is often overlooked. Automation testing tools such as LambdaTest can help Agile testers to overcome such issues.

Things to automate in Agile
When it comes to introducing automation in testing, areas like regression testing or smoke testing take the cake. However, these are just the top layers of the build, which can be insufficient as far as ensuring the quality of the software is concerned. The other areas where test automation can be implemented are
·         Builds and deployments
·         Unit tests
·         Non-functional testing
·         API testing
·         GUI testing
·         Repetitive tasks like data comparisons

Benefits of test automation
Agile development can be benefited from automated testing in a number of ways related to performance, portability, versioning, reliability, usability, and speed, among others. The benefits include
·         Enhanced quality
·         Quick turnaround
·         Repeat execution
·         Seamless performance
·         Better collaboration

Conclusion
The Agile testing approach can lead enterprises to create a better software development pipeline. Its success is underpinned on the level of implementing test automation. The automation-led Agile methodology combined with DevOps has the potential to improve the quality of software and deliver great user experiences.