Thoughts about Software Testing

Software testing is process of testing the correctness of executable code which does operation on data. Tester will provide various data to executable code to see if that works as expected or if that handles all possible errors on various environments. Few keywords to remember here are Executable code, Data and Conditions in code.

Data can be a hard coded data inside the code or it can be accepted through input either from input devices or from other program. Testers are going to concentrate more on the dynamic data which they are going to input from input devices.

Executable code is a code which uses the data to perform various operations. Each and every condition we need to satisfy and check the code during the runtime to see if that gives expected result or not. There are lots of text books, standards, methods, etc… which make most testers to think complex instead of simple. Primary goal of testing executable code is to check all possible conditions which exist in a code.

“Microsoft in terms of this quality stuff–we have as many testers as we have developers. And testers spend all their time testing, and developers spend half their time testing. We’re more of a testing, a quality software organization than we’re software organizations”

By Bill gates, 2002 – Q&A: Bill Gates on Trustworthy Computing

In early days of software development, there was not separate profession of testing. Developers itself used to identify the bugs, debug and fix it. Beginning in the early 1970’s software testing as professionalism has gained the mileage. This has gained importance due to the cost of software failure has increased and the importance of testing grew, establishment of test positions, inauguration of national meetings, increase in test publication and development of national standards.

In reality both programmers and testers must be good at testing the software to prevent the run-time errors in a product. Good programmer’s means he must also know to test his code well before shipping to testing team. Good tester means he must be well versed with Tool usage, scripting language and Programming skills (in some cases) or else he cannot become “Good tester”. Tester need to have all these skills since, you are going to own a partial responsibility of a programmer which once upon a time was done by programmer itself.

Mind-set of QA Professionals

  1. Putting down yourself: Often, testers think that they are less skilled then programmers and they will put themselves down. Testing software is more complex than development. They have equal opportunities to increase their skills and become equally important like a programmer.
  2. No need to have coding skills: Most testers think, if they don’t have any kind of programming skill, they can test the software. It is not true again. If you don’t have skills in using tools, scripting knowledge and programming skills, you cannot become a good tester.
  3. Increasing bugs count: Most testers believe by increasing bug count they are doing good for product. They don’t even do pre-check if any existing bugs are already reported. This is due to lack of understanding of the product as overall. Different headings will make different bug count. One of the responsibilities of the tester is that they are acting like end-user; they should keep this clearly in mind. Some managers will be happier if they see more bugs count and this makes testers to increase the bug count too. This is just like a fooling each other and loss for everyone. If your manager gauges your performance based on count, oppose it, try to make him understand or leave that team.
  4. Co-operating with development team: Often fight happens between these two teams and they work like a two different companies. Both have to co-operate each other to mitigate the runtime errors in a product. Blind testing of a product is only a loss for testing team, development team and company. Discussing with a programmer about the bug or functionality in a product to understand better and then filing bugs will be more helpful.
  5. No need to learn further: Testers must learn all the time about the various technologies same like a programmer. They cannot sit with outdated technologies or thoughts about software testing. More innovation has yet to happen in testing software and by having various innovative ideas about testing will make product success in market better. Most important is, you must be a quick learner based on situations.
  6. No need to attend product meeting: From beginning of a product development, each and every team of a tester should involve in all meetings, they must understand what product must do and what it should not do. If you don’t have up-to-date about the product, you may not know complete context of the product and result in less understanding about the product. Managers must encourage whole testing team in involving in all discussions. Development team must invite testing team where ever is necessary when they are doing changes to the product or else testing team will miss the context.

Skill sets QA Professionals need to perform the task better

  1. Tools: These tools are dependent on the operating system. They need to have good knowledge about the commands which can be used in command line including the additional tools provided by 3rd party. More knowledge about tool usage, they can perform their task faster and better.
  2. Code coverage: These tools will identify which parts of software have been executed by test case and which part has not executed. This helps to test most possible conditions exists in an executable code. If you don’t have these tools, don’t expect yourself to do all types of testing, it is not possible. With the help of this tool, you can guaranty to cover that most code has been tested.
  3. GUI Automation tools: These tools helpful in testing GUI based application, although these tools are not improved yet, like if you write a script, you cannot execute in any machine of the same operating system. This tool identifies the GUI object on a screen either based on coordinates or object based. Coordinates will be static and it works as long as screen of an application appears in the same location on the screen. Object based it can identify even if a GUI object moves from one location to another on screen, but it cannot identify all the object on screen since, Windows will not allow to identify all objects on screen. But, this helps in automating certain functionality of a product.
  4. Performance tools: Once you test all functionality of the product, then you have to proceed to do performance of an application. If your product runs on a server, generally you have to do this testing and make sure you don’t affect the performance of the whole server. Normally, ignoring in testing performance of an application on desktop is still OK.
  5. Stress testing tools: This type of test will be helpful how an application work in a stress condition like low memory in system. If it crashes, that means code is not handling all error conditions.
  6. Scripting language: You have to know scripting language which runs on the operating system where you are testing the product; this will help you to perform your job faster. Instead of doing manual work all the time, you can automate using shell script of VB-script and finish the task faster where ever is possible.
  7. Programming language: If you are testing any system product, if you got a programming knowledge on the same operating system, you can guess easily to give more info or clue to programmer to debug the bug faster. If u understand how programmers do and there mistakes, your job will be easier as a tester to provide comprehensive data to programmer.
  8. Operating system concepts: You have to know operating system concepts if you really want to make the product better and explain the problems properly to a programmer. At least you must know these concepts very high-level. When programmer does a mistake, he himself may not know much about operating system and you need to education him. This applies even for programmer and they need to educate testers. So, co-ordination should be there between these groups.
  9. Keep end-user in mind: This is not a skill, but your mind set should not be an increasing count of bugs, you just need to target end-user and test the whole product. To justify that something is not good for end-user mean, you must have knowledge about, how end-user is going to use the product, this you can talk to various people who are using the product. This will help you to take better decisions to explain someone why some functionality is not good for end-user. Without understand end-user, if you try to make your case, it may not stand. This applies for programmer too.
  10. Breaking software: You need to have mind set of breaking the software by understanding what software must do and what it should not. Play a constructive role in improving quality of software. Must find a ways to crash the product and also try to remember the steps to reproduce the same.