? QA Design Gurus

Mar 30, 2016

Performance Testing - Introduction



Performance Testing - Introduction

Performance testing is performed to determine product behaviour under various workload conditions and identify feature improvement over previous versions. Its main purpose is to monitor product responsiveness, scalability and throughput under different workload environment.

Why to do Performance Testing?
Goal of performance testing is not to find defects in the application, its main goal is to set benchmark and standard behaviour for the application.
More reasons for conducting performance testing:
  • Identify throughput of the application
  • Identify system tuning for better performance
  • Find the source of performance problems
  • Identify application behavior under multiple systems or in different system configurations


Different performance testing techniques:
  • Performance Test- A performance test is any test that measures stability, performance, scalability and/or throughput of application.
  • Load testing - Testing conducted to understand the behavior of the application under a specific load.
  • Stress testing - It is executed to find the upper limit capacity of the system.
  • Capacity Testing - This tests how many users/concurrent transactions your application can handle without losing performance benchmark.
  • Soak/Endurance testing - It is performed to determine the system performance under continuous expected load. During soak tests the parameters such as memory utilization is monitored to detect memory leaks or other performance issues.
  • Spike testing - In this testing number of concurrent users using application is increased suddenly by a very large amount and measuring the performance of the system. Aim of this testing is to find if the system will be able to sustain the workload.
  • Smoke Testing - This testing is done to determine application behavior under very low load. If the test fails and no further testing is necessary until the simplest test passes successfully.


Performance Testing Tools:
  • Apache Jmeter
  • HP LoadRunner
  • Web Load
  • Rational Performance Tester
  • NeoLoad
  • CloudTest
  • LoadUI






Image Reference:

Releasing a product?

Today is the day to release the product, the team worked hard spending countless hours engineering the new features. But are the things ready?

Do we know the product that is being released is ready to be shipped? Who calls out that we are ready? And what all we did prior to release?

Improving the product and means improving the quality of product and also improving the release process of the product.

Having a improved release process will produce best quality of engineering and thus reduces the headaches for customers. In current world, the releases are fast, which is great however, releasing fast does not mean releasing with quality. Important areas of product could be missed.

Team members with various roles and skill set have various perceptions about the features and usage of features in the product. The product might be tested thoroughly, however, considering the views of various members in the team before release is important. To make the point simple, there are lot more things to consider before releasing the product than just developing, testing and releasing.

Few things to keep in mind as you are coming closer to a release.
  • Have we communicated everything? Any ambiguity? Did we follow best practices and processes? 
  • Testing criteria should be detailed, specified and communicated that what and how we tested and what and why we did not test. 
  • Are the views and perceptions related usability and user experience has been taken into consideration?
  • Any external factors such as events, holidays been considered?
  • Has the Technical support team prepared and had experienced the new features.
Customers and Engineering both should be happy to make a successful release.

Teamwork means more work

We all know that “Teamwork means more work’. Teamwork is the key factor for software engineers especially for the QA engineers. As most of us all into the agile process, there is a demand for ‘Teamwork’. Teamwork enables the teammates to work together to achieve fruitful results under hard circumstances.

Theoretically, we can define teamwork as ‘A group of individuals with different personality traits, who can contribute to diverse point of views and better approach to the problems at hand. The team members know the strengths and weaknesses and they understand how to work with each other”. It will be always good if the theory is exactly implemented and followed by every team member including the team head. When it comes to the real world, obviously the deviations will take place. And it does not mean that every team is deviated. There are many teams who are already proven with their great teamwork. Still few teams fail because of these deviations. Unless these deviations are identified and corrected, there will be an apparent struggle for entire team and ultimately the key factor that will be effected is ‘Productivity’.

I would like to discuss what should be there and what should not be there while we are working as a team.

What effects Teamwork:

Key player: Well this is good to have the key players in the team, but having a single key player often effects the team. Few great things may be done with good quality with such kind of players. But entire work cannot be done by a single person. Obviously every team player should show his/her caliber to achieve that stardom, at the same time knowledge must be shared across to bring out the key players. Team should always have the ‘Key players’ not a single or few key players.

Transparency: As we are working in a team, each and every task should always be transparent to the whole team. Miscommunicating or not communicating the things may disturb the positive health of the team. As soon as this lack of transparency is observed that must immediately intimated to the team to avoid it from next time on wards.

Dependency on team members: All the tasks and the responsibilities should be equally distributed among the team. So in case of any team member’s sudden absence, the productivity will not be effected.

What motivates Teamwork:

Recognition: As it’s a human tendency  that a simple praise can fetch many things, praising is obvious to improve the productivity.  In order to make the team members perform at their best ‘Recognitions’ are must and they must be announced loudly to the maximum number of audience. It builds the ownership responsibility from inside. The team-head is responsible enough for identifying the deserved persons.

Equal distribution of the work: At any cost the work should be distributed across the team. Sometimes the tasks must be assigned based on the team members interest. If the interested person is not fully familiar with the task, at least he/she must be partially involved into that task which brings the enthusiasm in the team member. The team-head must be more responsible in this area and also the team member should let the team know about his/her area of interest. Otherwise if the same kind of tasks are assigned to the same person it leads to Monotony.

Respect: Again it’s a human tendency that ‘Respect’ gives more encouragement to any kind of person. As a team player everyone should value others ideas. It is not always good to consider a single/few person’s thoughts. Rejection of ideas should be very graceful with proper explanation.

Friendliness:  As it’s a team with different personalities, every person’s capability is different. As a team, the inabilities can be overcome. That is the beauty of the teamwork. Every team member must be equally friendly to the other in order to not show any discrepancies. It results in building the best professionalism.

Criticism: Again I am stressing on human tendency. As we are not robots there are more chances to make mistakes. And it does not mean that we have to bear with that mistakes. There will always be a proper way to point out on one’s own mistakes. The criticism at open places are not always encouraged. It cause the people to burst out at some point. So the ‘Recognition’ must be public and the ‘Criticism’ must be private.

Conclusion: As a team our final goal is to improve ourselves and contribute for the growth of our company. By identifying and by correcting our own deviations, we can give our best in achieving the results.
                                 



Be a QA


Quality Assurance (QA) ensures the quality of the product and focus on giving confidence for the release. As a person, it is good to have a few qualities which will help us to excel in our job.
Let me give my version of QA.

QA means Questions & Answers:
Questioning is very important in our life. If we want to buy a product, we ask a lot of questions and will know about the product completely and then take the decision. And, if you are a seller, providing proper answers are also equally important to sell the product.
In the same way, QA has to ask questions whenever there is a feature discussion or in any meetings. And, as a QA provide various kinds of answers when a customer asks questions.

The best way to achieve this is to be active in Community/Forum where we get to know various kinds of questions as well as answers.
Bottom Line: Ask as many questions as possible, provide as many answers as possible

QA means Quick & Automate:
In this busy life, we have to take decisions quickly to resolve issues. For example, if we have a problem in our family, we have to work on it as soon as possible before it gets bigger.

In the same way, if we found any issue in the product or process then raise it immediately without any delay. And, learning the things quickly will give us ample time to look into other activities. If you pay attention in whatever you do, then quick learning will automatically happen.

Software testing has a huge scope and it contains a lot of testing types. It is not easy to say ‘We are ready for Production’ without doing enormous work. We have to take care of each and every testing type and ensure that everything is working fine.
How can we test all testing types within a given period of time to certify a build?
The only way to achieve this is using a weapon called ‘Automation’.
Automation helps us to do our existing tasks quickly and it allows us to explore new things.

Let me give an example to illustrate the same.
We want to travel from a source to destination.
We decide to take a vehicle based on the distance that is there in between. For example, if we want to travel to the USA, we catch the flight. If we want to travel within India, we have a few more options along with flight.
So, we use a vehicle to reach our destinations quickly.

In the same way, if we use a vehicle called automation in our software testing then we can reach our destinations called deadlines successfully without any issues. And, we can save a lot of time and effort if we do automation. As a QA person, we have to take a decision on which tool we need to use based on our testing category.
Bottom Line: Be quick in every action and try to automate everything that is coming in your way
So, what are you waiting for?
Be a QA person in both personal and professional life!!!

I am a Web Application; How I can stay safe?

We all are well cognizant that day by day our generation is being solicitous for the world of internet. To accommodate them, IT industries are launching plenty of web application and endeavoring to magnetize them with their own special features of application.

Now with the revolution of web applications, one news very often we auricularly discern is “leak of personal information over internet”. It could be credit card information, utilizer denomination, password or even your personal image.
  
Now safety of web applications has become one of the overheads for IT companies. We can reduce it or overcome to an astronomically immense extent by following simple tips:

Update all software at regular intervals:

It doesn’t matter application has been developed from scratch or any third party plugin has been used to develop your application, it’s owner responsibility to bulwark it and ascertain that it’s all data is courant.

  • Update your code with security fixes at regular basis
  • If third party plugin, always keep an eye whenever they release their update, perform update on your application
  • Clean all unused third party plugin, old and non-updated plugins. 
Figure 1 : http://cdn.ttgtmedia.com/digitalguide/images/Misc/white_hat_hacker_cartoon.jpg



Develop security layer to application:

Develop Firewall for your application. It is first door for any incoming input for application which performs a defensive action against any suspected data. The firewall should provide the solution for the followings:
  • Brute force attack
  • Scrub and filter malicious request
  • Provide a shield from injection flow, X site scripting (may be all OWASP) 

Shift to HTTPS:

HTTPS is used to deal with sensitive information over web application and web server. HTTPS enables to add an extra encryption layer of Transport layer security or Secure sockets layer which,  ascertain that sensitive data are more secure over a network. 

HTTPS is peculiarly used for online transaction applications.  Albeit it should be adopted for those applications withal who don’t deal with online transaction


Figure2 : 
https://s-media-cachak0.pinimg.com/736x/c1/9b/b2/c19bb2394b737f0e0a10c7ffaf057d1e.jpg


Strong Password (most recommendable):

                One of the most recommendable solution to strengthen your password is to use a ‘Strong Password’. It is a very effective way to inhibit the attacks like Brute force or Dictionary. Ascertain that your password is a coalescence of special character, alphanumeric, upper and lower case and minimum contains 12 characters to prevent from brute force.



Figure 3: https://goo.gl/VYjoqE


Change Password Regularly:

                Application should ask users to change their password at regular intervals. If required, it is advisable to make it a mandatory practice to change passwords over fixed intervals of time.

Two-Factor Authentication:

                With the recent security trend, two-factor authentication has become the most adoptable approach to prevent application from security breach. Application can adopt OTP, captcha etc. mechanism to apply two factor authentication.

Install Security Plugins:

                To improve the safety of applications it is advisable to install security plugins. There are various commercial plugins available.  If budget is an obstacle then there are few good open source security plugins also available like  Better WP Security or BulletProof.

Always double check security configuration:

               The infrastructure that supports web application with all the connectivity of Database, firewall, devices and software, OS etc. These all components need to be securely configured and maintained. Never forget to cross check all the security configuration with the perspective of loopholes.

 If required, there should be proper training to make awareness about security loopholes. Prioritize security and privacy testing throughout all the phase of development phases.


Perform Penetration testing:

                Penetration testing must be performed for web applications for those who deal with sensitive data. This testing is one of the proactive action which should be taken to finding vulnerabilities afore a hacker does.

To conclude

All above tips are to secure web applications from security breaches and hackers. All above tips are neither new nor can they plenarily eliminate the security breaches. However, if we follow them there will be a great fight between hackers and application.  Adopt above tips to make our application robust in terms of security or stop being a soft target for malevolent hackers.





Installing a new habit can improve software testing

In today's cloud world, and agile world, we are doing more releases than earlier. Organizations are working towards short goals and expecting more revenue. Due to all these QA engineers are getting more work than earlier. In the waterfall model, we used to write detailed test strategies and test plans. We used to get time for everything like feature testing, regression testing and automation. But now we are not getting time to complete all QA cycles. If you are working on a complex product/project, you can do only manual testing and you cannot complete automation in any case. Unit tests can help you but if you don't have unit tests in place then it is a tough time for QA engineers. Maybe you can consider UI automation but in these days UI also changing very frequently. UI automation requires regular maintenance and required more resources depending on the complexity of the product.

Assume that you love software testing, you love to find defects, you love to do automation and testing is your passion. You are perfectly suitable for this cloud and agile world. After few years, you may work overtime to complete schedules. As you are an experienced person you should complete the testing quickly and need to achieve other goals, so maybe a lack of sleep and time can prevent doing things you enjoy outside work. You stretch yourself beyond acceptable limits because you love to do the work. If it continues for a long time, it affects your health. You may easily miss the defects on the screen.
    
In these days, doctor's first question is "Are you a software engineer?" :)


What can we do here? We cannot change organization goals. We need to achieve more than last year to grow in the organization. Increasing the budget for the product/project or allocating more resources are not in our hands.

Install a new habit can help you in this case. A hobby should not be your passion and you should not make a profession as your main hobby. For example, professional athletes often play another sport in their spare time that they enjoy and that will help them do better in their primary sport. Enjoying hobbies help to bring a fresh boost of energy to get you going in your daily job. Everyone should have a hobby that can take them away periodically from what they do for a living, without constraints, goals, or targets, as you balance your job and your hobby.

According to scientists, to install a new habit It takes 66 days. Having a habit can definitely improve the software testing quality.

API Testing best practices

As information systems become more and more distributed and systems and devices become ever more interconnected, the use of APIs has seen exponential growth in the past couple of years. Where traditional (or old-fashioned) computer systems were monolithic in nature, nowadays they are often made up of reusable components that communicate and exchange information with one another through various APIs.
Below diagram depicts the growth in number of publicly accessible APIs,





Best Practices of API Testing:
Structuring tests:
An API usually consists of several methods or operations that can be tested individually as well as through the setup of test scenarios. These test scenarios are usually constructed by stringing together multiple API calls. I suggest a three step approach to testing any API:
1.   Perform syntax testing of individual methods or operations
2.   Perform functional testing of individual methods or operations
3.   Construct and execute test scenarios
Syntax testing
This type of testing is performed to check whether the method or operation accepts correct input and rejects incorrect input. For example, syntax testing determines whether:
·         Leaving mandatory fields empty results in an error
·         Optional fields are accepted as expected
·         Filling fields with incorrect data types (for example, putting a text value into an integer field) results in an error
Functional testing of individual operations or methods
This type of testing is performed to check whether the method or operations performs its intended action correctly. For example:
·         Is calculation X performed correctly when calling operation / method Y with parameters A, B and C?
·         Is data stored correctly for future use when calling a setter method?
·         Does calling a getter method retrieve the correct information?
Test scenarios
Finally, when individual methods or operations have been tested successfully, method cals can be strung together to emulate business processes, For example:



You see that this approach is not unlike user interface-based testing, where you first test individual components for their correct behaviour before executing end-to-end test scenarios.
API virtualization:
When testing systems of interconnected components, the availability of some of the components required for testing might be limited at the time of testing (or they might not be available at all). Reasons for limited availability of a component might be:
·         The component itself is not yet developed
·         The component features insufficient or otherwise unusable test data
·         The component is shared with other teams and therefore cannot be freely used
In any of these cases, virtualization of the API can be a valuable solution, enabling testing to continue as planned. Several levels of API virtualization exist:
·         Mocking – This is normally done for code objects using a framework such as Mockito
·         Stubbing – this is used to create a simple emulation of an API, mostly used for SOAP and REST web services
·         Virtualization – This is the most advanced technique of the three, enabling the simulation of behaviour of complex components, including back-end database connectivity and transport protocols other than HTTP

Non-functional testing
As with all software components, APIs can (and should!) be tested for characteristics other than functionality. Some of the most important nonfunctional API test types that should at least be considered are:
·         Security testing – is the API accessible to those who are allowed to use it and inaccessible to those without the correct permissions?
·         Performance – Especially for web services: are the response times acceptable, even under a high load?
·         Interoperability and connectivity – can be API be consumed in the agreed manner and does it connect to other components as expected?

Most of the high-end API testing tools offer solutions for execution of these (and many other types of) nonfunctional test types