In here you will have the first introduction to software testing world. here you can read about the differences between QA and testing, why testing is important in our days, what you will do as a tester, with whom you will work with, your future in the testing world and other basic topics.
What is testing?
We define software testing as the operation of process/application/software under controlled conditions (or controlled environment) in order to evaluate its quality.
We evaluate the quality by evaluating and analyzing the test results. The controlled conditions should include normal and abnormal ones.
A generic example of testing:
- If the user is in screen A
- while using hardware B
- and does C
- Then D should happen
Testing targets are:
- Verify that the software behaves as specified in the specifications.
- Detect errors in the software.
- Validate that what is specified is what the user actually wants.
The difference between verification and validation might be confusing. I find it easy to remember it by the following definitions* :
- Verification – Are we building the system right?
- Validation – Are we building the right system?
* Those definitions can be found at http://www.csc.liv.ac.uk
What is quality assurance?
Quality Assurance (QA) involves the entire software development process, monitoring and improving the process by creating standards and procedures. Its main target is prevention – to prevent the occurrence of problems in the future.
QA uses testing in order to improve the quality of a process and monitoring it.
What is quality?
- Reasonably bug free.
- There isn't a software that is 100% free from bugs.
- The software is delivered on time.
- The software is within the project budget.
- Meets requirements – the software does what it should do and doesn't do what is shouldn't according to the requirements document.
We need to remember that quality is a subjective term; it depends on who is the ‘customer’.
The importance of testing
- Testing in the early stage makes software production cheaper in the long run.
- As the production cycle progresses, it becomes more expensive and it is more difficult to fix bugs.
- It is cheaper and faster to fix a sentence in a requirement document then in a written code.
- It is much more expansive to change a code written by a number of programmers.
- Today, the significant (for the customer) difference between companies is the quality of the product. Companies in the same filed differ from each other in minor features.
Testing gives the managers the confidence in the product and helps them take right decisions whether to release a product to the market or not.
The complexity of testing
Using the following example we can explain why testing is so complicated.
- You have a screen that contains one field only, named "username". The properties of the field are:
- The field can contain only 6 alpha numeric characters and you have a keyboard with only alpha numeric keys.
- The field is case sensitive.
Q: How many tests can you make in order to say that the screen is 100% bug free? Take a minute or two to answer this to yourself before you continue reading.
Well, the answer will be 56,800,235,586 (56 billion tests). Now, lets try to explain the answer:
The field contains:
The keyboard contains:
- 26 lower case chars
- 26 upper case chars
- 10 digits
We have 62 options for each place (the sum of keyboard options: 26 lower case chars + 26 upper case chars + 10 digits). But we have 6 places in the field so for each field we have 62 options and that means that the number of tests is:
- 62*62*62*62*62*62=62^6 = 56,800,235,584
Yes, this is the correct number of tests we need to perform in order to have 100% bugs free.
But we need to add 2 more tests:
- one test is not to insert any value to the field.
- the second test is to insert 7 chars to the field.
So the total number of tests is: 56,800,235,586.
If we will do 500 tests a day it will take us 311,234 years (if we will not jump from the window before).
Don't forget that in the real world, software contains many things to be tested: fields, logic, hardware and other software to communicate with.
We can't test everything, we need to prioritize and use methods to reduce the amount of tests without reducing the quality.
When to stop testing?
The following conditions might give us a reason to stop the testing efforts:
- Arriving deadlines
- When a certain percenatage of test cases completed successfully
- Test budget depleted
- Coverage of functionality and requirements reached a specified point
- Bug rate is under a certain level
Your co-workers?
Now, lets talk a little about our relationships between us and the PM (Project Manager), developers and other testers.
Project management
- Helps you understand the target of the project
- Give you schedules
- Needs you to update him/her on the quality status of the project
Developers
- Help you understand how the components work on the inside
- Help you know about “joint” points of the product
- Help you know about changes in the code
- Let you know the schedule of coding
- Let you know the status of bugs
- Need from you information about problems
- Need you to inform them on what will be tested and when
Testers
- Help you understand product functionality
- Tell you about known bugs
- Tell you about tools that can help you
Characters testers might need
- The ability to take the point of view of the customer
- A strong desire for quality
- Attention to details
- Tact and diplomacy
- Communication skills
- Judgment skills – assess high risk areas on which to focus the testing efforts when time is limited
- Curiousity
- Excitement by bugs
- The notion that there are always more bugs
- Picking his fights
- Know when to ask for help
- Make time for training
- Never stop testing
- A human being
Your job as a tester
- Requirements analysis
- Design test cases using test methodologies
- Write efficient test cases that will find the critical bugs Update test cases according to software changes
- Perform manual tests
- Find bugs and
- Log bugs to bug tracking system
- Bring bugs to the appropriate level of attention
- Develop test plans
- Write automatic tools
- Write scenarios for automatic tools
- Do tests without any written test cases in order to find bugs
- Approve or disapprove software quality
We always need to remember as testers that:
- We cannot and should not fix every bug because of cost effective aspects.
- Not all bugs can be found.
Our main target as testers is:
Assure that the software will ship on time and if the software has bugs, they will be low impact bugs.
Job opportunities in testing
Yes, we have a future in testing field and there are many job opportunities as testers such as:
- Proffesional testers
- Testing team leaders
- Automatic tools specialist
- Testing project managers
- Product managers
- Software project managers
- Marketing
- QA Vice president
- Consultant