Quality Assurance is an inherent part of the Software Delivery Life Cycle (SDLC). A well thought out QA approach performed by experts can help detect errors early on in the development process, or better yet, prevent them from happening in the first place – all to deliver outstanding value within the SDLC. Industry best practices dictate that the products we are developing are of high quality and satisfy the client’s requirements, meeting and exceeding expectations. A development team strives to deliver services and products devoid of errors in the shortest time possible. To do that, every company has its own approach and set of principles. By quality assurance standards, the testing should start early on in the development process. This is highly important, as introducing software testing as soon as possible allows us to save time and reduce the cost of fixing errors later on in a mostly done product. Symphony Solutions has embraced a comprehensive set of practices to ensure top-quality product delivery and client satisfaction. How to achieve excellent product delivery – main principles The end goal of every development team is to make sure that they are delivering an excellent product. This accounts for many criteria, software testing being an integral part of the process that brings about positive results. For example, establishing a QA system for Neo PLM helped our client to improve overall product quality and get new customers. So, what makes a good product in software and web development? Here are the principles that we firmly stand by in our commitment to achieve customer satisfaction and loyalty. Quality Objectives Every project starts with an idea. The trick is to get to what’s behind it to know what objectives the client is pursuing. The product not only has to do the job – it has to do it right. An excellent product will perform well in the long run, meet user expectations, bringing value to the end-user, and, what’s probably of most interest for the company developing the software, make a profit. The first step in the product design is engaging with the client in order to understand their quality expectations. All this helps establish proper processes and design adequate KPIs and metrics aligned with business needs. Team commitment and Agile Test strategy In the Agile philosophy, the whole team commits to producing a high-quality product and therefore bears responsibility for product quality. To achieve this, cross-functional teams are built that include QA engineers embedded within the Scrum feature team. Dedicated teams focus on automation, functional and non-functional or regression testing. This allows us to capture a broader scope of testing and ensure positive results in every instance. Team commitment is a necessary part of the process which puts individual responsibility on par with that of a whole team. Each one needs to be a team player and commit to one mutual goal to deliver the best product possible. Only in this way, the team can achieve the desired level of commitment and take on the responsibilities. Quality attributes One of the important points to consider is to have QA engineers involved in the SDLC as early as possible. This way, when working out backlog stories and architecture blueprints, the QA team will make sure to consider such product quality attributes as testability, usability, maintainability, performance, and security. Usually, this happens during the planning stage and is aimed mainly at assisting Technical Leads and Architects in making proper architectural and technical decisions. Involving QA at an early stage enables significant savings on redevelopment or refactoring efforts due to design issues later on. Defect management The whole of the testing process can be boiled down to two instances: defect prevention and defect detection in already existing products. Defect prevention may be achieved by measuring different KPIs, analyzing results, taking improvement actions, as well as assessing the process on a regular basis. Aiming at preventing defects from the very start of the development process helps significantly reduce the cost of defects. At this stage, defect preventive actions are performed by developers and QA engineers. For instance, developers perform unit testing and code review as an important software engineering practice. QA engineers are involved in requirements and review sessions to make sure those are clear and testable. On the side of QA engineers, defect prevention is achieved by setting clear and testable requirements. The next stage would be defect detection in an already implemented product. Testing pyramid Test automation is another way to help maximize the effectiveness of the QA process. This involves writing scripts for executing repetitive tasks that are tedious or difficult to perform manually but still necessary for ensuring the overall quality of the software. The approach to automation depends on the product specifics, duration and complexity. Automation strategy is based on the test automation pyramid concept that originated from “Succeeding with Agile” by Mike Cohn. The pyramid model is divided into levels based on how much time and effort goes into implementing a certain test and generally looks like shown in the graph. The bulk of all automation tests should be unit tests made by developers. A regular approach is to automate regression scenarios because they are less frequently changed and require less maintenance. Automation is, however, necessary as regression scenarios are very time-consuming to run manually every sprint. Generally, the QA Manager identifies the most time-consuming test-sets in order to understand the effort needed to automate them. Those that are giving best time/cost savings with less automation effort are the best candidates for automation. Some automation testing should be devoted to component/integration/API tests, and very little UI/E2E tests as they are most frequently changed and the cost of maintenance could be high. Such a testing system is beneficial to build, especially for a complex solution, as in the case when we developed the QA process for Vivino cloud-based application that included backend (API) testing, frontend, and UI testing, mobile testing for Android and iOS. The results of such analysis are then presented to the client with clear ROI outlined. Upon the delivery of the automation pack, a retrospective is conducted to see if the goal was reached within the estimated budget, and the results are presented back to the client. Quality control process Quality control is aimed at detecting and rectifying defects before the release to production and is performed mostly by QA engineers. Usually, it’s a combination of manual and automated testing activities that cover both functional and non-functional (usability, performance, load, security, etc.) requirements of the product in development. In quality control, a huge focus is on defects retesting and performing regression testing after the product has been debugged. This is to make sure that the existing stable functionality hasn’t been broken and new defects didn’t appear as a result of fixing previous defects. Root cause analysis An important part of the software testing approach is conducting a retrospective analysis of the development bugs and production incidents. Testing team analyses failed releases and other issues which might give valuable insights and pinpoint an area for improvement of the processes and documentation. Runbooks are prepared and updated in order to minimize the impact in the future. Exploratory testing Alongside classic regression and in-sprint quality control tests, exploratory testing is infused into software testing flow to avoid pesticide paradox. With exploratory testing testers discover those bugs that survived previous runs of testing before they will be seen by the end-users. Time-boxed exploratory testing session approach is applied to help manage cost and maximize return. Risk-based testing Risk-based testing approach is utilized when there is a high need to prioritize tasks based on the risk of failure and its possible impact. It is frequently used for projects with hard deadlines and limited time for QC. The QA Manager defines the testing scope based on analyzed risks, highlights the probability of risks occurrence and prioritizes QC activities based on it. This type of testing approach allows the best test coverage in a limited time for testing. In risk-based testing, the QA Manager and Service Delivery Manager are responsible for risks mitigation and contingency plans. Quality gates Well-documented and strictly followed quality gates allow for quick decision-making, ensure high quality, and prevent rework. Usually, all stakeholders take part in defining the quality gates. Once those are approved, all the parties involved commit to following the defined policies. Quality gates are the milestone that makes it possible for the development process to move forward. The transition between phases cannot happen unless the quality gates are met. Example of a process with defined quality gates: QA process monitoring QA process is continuously monitored and assessed by the QA Manager. Moreover, all team members are encouraged to suggest enhancements. The test strategy document specifies the types of metrics that are used for tracking the QA process which are considered when correcting and improving the process. This is done on a regular basis to ensure that the QA process corresponds to the client’s quality requirements and expectations. Action items are agreed on team retrospective meetings. Quality assistance Approach A move from quality assurance to quality assistance has a positive impact on the overall efficiency and independence of the team, as well as shows improvement in quality. This approach is aimed at preventing rather than detecting defects in the software. Best results can be achieved when functions in the Scrum team have a good understanding of all processes. With a quality assistance approach, developers go an extra mile and do more testing at the ‘design and build’ stage to ensure that more bugs have been captured before the code goes to testers. This requires a paradigm shift and some time, as developers will have to pay more attention to the quality of their work. Project Audits Regular internal audits are an integral part of the overall software development process. It ensures that: all processes and practices are successfully implemented and followed by everyone in the teams. all communications and information sharing are timely and efficient. delivery outputs correspond to SDLC standards. We explore every function and interview all key team members, as well as recently onboarded engineers to see if their understanding of processes is similar. It’s essential for the team to understand the business needs and translate them into quality indicators. It’s also investigated if the team members put all possible and reasonable efforts to achieve the highest possible quality. This internal service is provided by the functional office, Service Delivery Organization. To conclude In a race for maximum client satisfaction, as an inherent part of our QA services, we apply software testing methodologies and effectively use QA best practices that have proven to drive real and imminent results. We take on a comprehensive look at the software development process and strive to introduce software testing practices early on in the SDLC. This allows to ensure the quality of the product that is in development on every step of the process.