What are Good Testing Practices?

There is no perfect definition for best practices for the software testing. Below could be written down as best practices for software testing:
1.  Clear cut requirements should be there and testing team should be able to define and understand the requirements before starting the project/software testing. This will always help in yielding better results. 
2.  Based on the software/project, the tester should have good domain knowledge or engineer should be able to gain the knowledge for the same. With domain knowledge, engineer would be able to create the quality test cases and report usability defects. 
3. Clear communication with Dev Team: There should be transparent communication with Dev team and there should be process defined like weekly call/daily call. 
4. Defining timelines and release cycles: Plan should be there for the Dev and QA timelines so that software testing should be conducted in the timelines and appropriate time should be provided to QA staff.
5. Automation Testing: Atleast smoke test cases should be automated that will help in quick regression cycle. 
Here are few other best practices –

  1. Ensure that customer will get what could meet their needs or could solve their problems. System will be delivered will be useless if it can’t serve these.
  2. Provide adequate information to stakeholders regarding quality. We will have to make decision but it must base on the fact and number which is reliable.
  3. Continuous Improvement on Effectiveness and Efficient. Work which is not finished does not count. So we need to do it well within reasonable time. Then we need to be able to do more with less and work more smarter because resources and time are always not enough to do the work. 
  4. Determine which tests to run based on risk because you can’t test EVERYTHING. What things can you not afford to test? 
  5. Share knowledge with your fellow testers at work including what worked well for you and what hasn’t. 
  6. Don’t save testing for the end, test as early as possible. 
  7. Understanding Scope/purpose of the project will help to judge the degree/level of testing required. 
  8. The test cases should be updated immediately once the client gives new requirement or changes the requirements. 
  9. Testers should go thro’ the requirements in detail without missing any points given by the client before writing test cases.
  10. Finalize and try to freeze the identified test cases and expected result before execution and ready with Pre – test data if needs. 
  11. Once done with happy flows of testing try to get an approval from product/design managers by walk-through flows in front of them

Testing Throughout the Software Lifecycle

Testing Throughout software lifecycle is necessary in fact, because testing starts should the early stage of the product life cycle. it starts from requirements phase where testers would be understanding and discussing requirements with business analyst.
In Design phase, testers would be creating test scenarios and test scripts.
once the product is deployed, testers would execute the scripts to uncover the defects.
post deployment, they might be supporting the production defects testing. So yes in every phase QA team is involved.
In waterfall model, testing was the last phase in development life cycle but since it was costly to fix the bug or any feature changes at the end of life cycle, new software models were developed.
When the development team gets the Requirement spec, the testing team also gets the same requirement spec. The testing team should go thorough the spec and decide on how the approach should be towards testing the spec, what all features to be testing and how? Is it possible to automate any of the tasks and if yes, then which tool to use and check whether the team requires any training for it.

Even developers do some testing once they have the initial draft of the product, it is called Unit testing.

When you go into Agile models this becomes more intense, as our Anonymous contributor mentions. Developers are empowered to drive the quality of their product, but this empowerment comes together with the responsibility to make that real. In each phase of each iteration in the process.
Comments are welcome.

Software Testing Life Cycle (STLC)

STLC (Software Testing Life Cycle), is the software testing process which is systematic & well planned. Let’s Quickly have a look on various stage involved in Software Testing Life Cycle (STLC) 
STLC Process contains below phases, those are,
1.    Requirement Analysis
2.    Test Planning
3.    Test Design (Test Scenario & Test case Development)
4.    Environment Setup
5.    Test Execution (Test Execution, Test Results, Defect Reporting, Defect tracking till closure)
 6.    Test Closure
STLC Phases
We will see in details in below Power point.
Requirement Analysis:
         This is the first step of Software testing life cycle. In this step Quality Assurance (QA) team understands the requirement in terms of what we will testing & figure out the testable requirements.
From very first step QA involved in the where STLC which helps to prevent the introducing defects into Software under test.
Test Planning:
         Test Plan describes about testing activities to performs on particular Software brief about Workflow of Testing.
Test Plan Contains – Overview of the Test Plan, Scope of the Test Plan, Related Documents, Customers details, Testing Strategy, Testing Scope, Risks, Deliverables, Test Scenarios and Test Cases, Testing Team Roles and Responsibilities, Resource Plan, Testing Schedules, Test Environment, Defect Reporting
Test Design:
        Test Design phase consist of Test Scenario & Test case writing.
Test scenarios are to identify what are the possible functionalities to be tested in software or any applications.
Test Scenarios will prepare once the design documents are finalized.
A test case describes what has to test in the software or application in order to verify all client requirements are working properly or not.
Test Execution & Defect Reporting –
           In this phase Testers executing the test cases on given build where build note contains.
  1. Requirements Covered.
  2. Build ftp path with credentials
  3. Server details
  4. DB Queries to add in QA environment.
       Once above details are received from development team then we will start executing the test cases. According to test cases execution status (pass/fail) we will update the same in Test Cases document and reports the defects in Test, Management Tools such as HP QC, ALM, Jira, Bugzilla etc.
Defect Reporting:
        As per finding the defects in Test results phase, testers have to log a defect in defect management tools.
For example, HP QC/ALM tool.
Each defect should be send to particular developers with proper details and attachments. Try to check the defect in another tester system also.
Defect Tracking:
        Once the defects are reported in Test management tools then developer will fix the defect and change the status as fixed.
You will receive email from development team that defect has been fixed, please verify once with new build.
Testers will retest the same reported defect in given new build and mark the status as Close in case defect is fixed and in case still exist then the status will change as Re open.
In this phase testers, will track the defect with status in reports parts, version controls with different versions.
You need to track reported, fixed, closed and re open defects in test management tools.
Defect Closure:
       Once all reported defects are retested and closed then testers will prepare defect closure note with following details
  1. Open Defects
  2. Fixed defects
  3. Re open defects
  4. Rejected Defects
  5. Closed defects
  6. Total Defects
Test Closure Report:
        Once the Testing completed with regression testing then Tester has to prepare Test Summary Report, it will contain below details.
  1. Application details.
  2. Resource Details.
  3. Functionality Tested.
  4. Functionality not tested.
  5. Defect Found with Number of Test Cycles, Regression Testing.
  6. What are the Open Defects still not fixed?
  7. Pre-conditions before roll out in production.
Your Suggestions & Comments are Welcome.

Next Topic: Testing Throughout theSoftware Life cycle

Software Development Life Cycle

Every software or project have to pass some phases Like Requirement Gathering, Planning, Risk Management, Coding, Testing and Release.
           This are some fundamental point that are needed to be understand when we have to work with Software development or Project development.
          Basically, SDLC Process provides better Software Products, and Faster development.
          Software Development Life Cycle (SDLC), (or sometimes Systems Development Life Cycle) is a structural approach used for developing particular software products. We may say that SDLC is a subset of PDLC (Project Development Life Cycle).
The primary objective of SDLC is to ensure that software built is of good quality.
The life-cycle of SDLC is typically divided into five phases and each phase has its own specific process as well as deliverables.
Software Development Life Cycle is the phases that a typical software project goes through:
  1. Requirements: Understanding the customer needs and defining the technical requirements, ensuring correctness and understanding
  2. System Analysis: In depth study of the existing system to determine what the new system should do.
  3. System Design: Modeling the requirements and the environment the software goes in, including prototyping
  4. System Development: Writing code and producing the distributed packages
  5. System Testing / Debugging: Ensuring that the software you wrote is correct
  6. System Implementation: Installing and configuring the software on the target environment
  7. System Maintenance: Fixing errors, providing updates, and ensuring the software continues to work as expected
SDLC Models:
       A framework that describes the activities performed at each stage of a software development project. 
       There are Various Model, with the help of which projects are running. The various Software Development Life Cycle models are –
  1. Waterfall model < Link>
  2. V model   < Link>
  3. Incremental model <Link>
  4. RAD model
  5. Agile model <Link>
  6. Iterative model
  7. Spiral model
  8. Prototype model
We will study them in next articles.
Suggestions & Comments are welcome.

What knowledge does a tester need to test a software?

There are several ways you can test a software or any product. Required knowledge is depends on what testing you do.
1. Is the product is easy to use? This kind of testing tests how a customer will use the product.
2. Will the product work faster if thousands of customers accessing it? This is performance/load/stress testing
3. Is the product is working as expected? Normal functional testing. Either by clicking/checking/automation etc.

          All the above needs different kind of understanding to test the software. If testers don’t know any programming or underlying code, it is not possible to do load testing but they can do acceptance testing.

In order to meet above requirements, tester need to know few things like-
  1. Functional knowledge of the product.
  2. Design and business rules
  3. Need to know manual and automated testing tools/frameworks to test product.
  4. Write automated test cases to automate most of the testing.
  5. Need to know boundaries of the product he/she testing where other products are integrated. Need to know dependencies.
  6. Pre-optimization is mostly avoided at inception phases. Hence later the tester might have to perform load testing to verify performance.
  7. Should be vigilant to check all the edge cases which developers can/may miss.
  8. Should be able to reproduce issues and document steps.
  9. You need logical and analytical skills
        If you are doing software testing manually than you don’t need the knowledge of any programming language…  The only thing you need is the domain knowledge. The knowledge of domain for a taster is most important. We often say “technology changes but domain knowledge will last forever”.
Your Comments & suggestions are welcome

What knowledge does a tester need to test a software?

There are several ways you can test a software or any product. Required knowledge is depends on what testing you do.
1. Is the product is easy to use? This kind of testing tests how a customer will use the product.
2. Will the product work faster if thousands of customers accessing it? This is performance/load/stress testing
3. Is the product is working as expected? Normal functional testing. Either by clicking/checking/automation etc.

          All the above needs different kind of understanding to test the software. If testers don’t know any programming or underlying code, it is not possible to do load testing but they can do acceptance testing.

In order to meet above requirements, tester need to know few things like-
  1. Functional knowledge of the product.
  2. Design and business rules
  3. Need to know manual and automated testing tools/frameworks to test product.
  4. Write automated test cases to automate most of the testing.
  5. Need to know boundaries of the product he/she testing where other products are integrated. Need to know dependencies.
  6. Pre-optimization is mostly avoided at inception phases. Hence later the tester might have to perform load testing to verify performance.
  7. Should be vigilant to check all the edge cases which developers can/may miss.
  8. Should be able to reproduce issues and document steps.
  9. You need logical and analytical skills
        If you are doing software testing manually than you don’t need the knowledge of any programming language…  The only thing you need is the domain knowledge. The knowledge of domain for a taster is most important. We often say “technology changes but domain knowledge will last forever”.
Your Comments & suggestions are welcome

Next Topic: Software DevelopmentLife Cycle (SDLC)

What knowledge does a tester need to test a software?

There are several ways you can test a software or any product. Required knowledge is depends on what testing you do.
1. Is the product is easy to use? This kind of testing tests how a customer will use the product.
2. Will the product work faster if thousands of customers accessing it? This is performance/load/stress testing
3. Is the product is working as expected? Normal functional testing. Either by clicking/checking/automation etc.

          All the above needs different kind of understanding to test the software. If testers don’t know any programming or underlying code, it is not possible to do load testing but they can do acceptance testing.

In order to meet above requirements, tester need to know few things like-
  1. Functional knowledge of the product.
  2. Design and business rules
  3. Need to know manual and automated testing tools/frameworks to test product.
  4. Write automated test cases to automate most of the testing.
  5. Need to know boundaries of the product he/she testing where other products are integrated. Need to know dependencies.
  6. Pre-optimization is mostly avoided at inception phases. Hence later the tester might have to perform load testing to verify performance.
  7. Should be vigilant to check all the edge cases which developers can/may miss.
  8. Should be able to reproduce issues and document steps.
  9. You need logical and analytical skills
        If you are doing software testing manually than you don’t need the knowledge of any programming language…  The only thing you need is the domain knowledge. The knowledge of domain for a taster is most important. We often say “technology changes but domain knowledge will last forever”.
Your Comments & suggestions are welcome

Next Topic: Software DevelopmentLife Cycle (SDLC)

What is Difference Between Quality Assurance And Quality Control?

Are QA and QC same terms? No, this both the terms are different. Most of the time we use both terms randomly, Let us understand both here –
What is Quality Assurance:
Quality Assurance is process oriented and focuses on defect prevention. Quality Assurance is a set of activities for ensuring quality in the processes by which products are developed.
Quality Assurance focuses on Quality Assurance aims to prevent defects with a focus on the process used to make the product. It is a proactive quality process. It identifies weakness in processes to improve them.
Goal of Quality Assurance The goal of Quality Assurance is to improve development and test processes so that defects do not arise when the product is being developed.
Responsible for QA Everyone on the team involved in developing the product is responsible for Quality Assurance.
What is Quality Control:
Quality Control is product oriented and focuses on defect identification. Quality Control is a set of activities for ensuring quality in products. The activities focus on identifying defects in the actual products produced.
Quality Control focuses on Quality Control aims to identify and correct defects in the finished product. It is a reactive process.
Goal of Quality Control The goal of Quality Control is to identify defects after a product is developed and before it’s released.
Responsible for QC Quality Control is usually the responsibility of a specific team that tests the product for defects.
Your suggestions & comments are welcome

What are the Seven Testing Principles?

Any technology has its own fundamental principles which have been proven right as the time elapsed. ‘Software Testing’ is no different – it also has a set of 7 fundamental principles that are proven right over the time.
1.Testing shows the presence of defects
Testing can show the defects are present, but cannot prove that there are no defects. Even after testing the application or product thoroughly we cannot say that the product is 100% defect free
2) Exhaustive testing is impossible:
Testing everything including all combinations of inputs and preconditions is not possible. So, instead of doing the exhaustive testing we can use risks and priorities to focus testing efforts.
3) Early testing:
In the software development life cycle testing activities, should start as early as possible and should be focused on defined objectives.
4) Defect clustering:
A small number of modules contains most of the defects discovered during pre-release testing or shows the most operational failures.
5) Pesticide paradox:
If the same kinds of tests are repeated again and again, eventually the same set of test cases will no longer be able to find any new bugs. To overcome this “Pesticide Paradox”, it is really very important to review the test cases regularly and new and different tests need to be written to exercise different parts of the software or system to potentially find more defects.
6) Testing is context depending: Testing is basically context dependent. Different kinds of sites are tested differently. For example, safety – critical software is tested differently from an e-commerce site.
7) Absence – of – errors fallacy: If the system built is unusable and does not fulfil the user’s needs and expectations then finding and fixing defects does not help.

Next Topic: Difference between QA & QC

Who does the Testing?

Software testing is not a one-person job. It takes a team, but the team may be larger or smaller depending on the size and complexity of the application being tested.
The programmer who wrote the application should have a reduced role in the testing if possible. The concern here is that they’re already so intimately involved with the product and “know” that it works that they may not be able to take an unbiased look at the results of their labors.
Testers must be cautious, curious and good communicators. One part of their job is to ask questions that the developers (or Business Analyst) might find not be able to ask themselves or are awkward, irritating, insulting or even threatening to the developers.
♦ How well does it work?
 ♦ What does it mean to you that “it works”?
♦ How do you know it works? What evidence do you have?
♦ In what ways could it seem to work but still have something wrong?
♦ In what ways could it seem to not work but really be working?
♦ What might cause it to not to work well?
 A good developer does not necessarily make a good tester and vice versa, but testers and developers do share at least one major trait—they itch to get their hands on the keyboard
Testers are the only IT people who will use the system as heavily an expert user on the business side. User testing almost invariably recruits too many novice business users because they’re available and the application must be usable by them. The problem is that novices don’t have the business experience that the expert users have and might not recognize that something is wrong. Testers from IT must find the defects that only the expert users will find because the experts may not report problems if they’ve learned that it’s not worth their time or trouble.
Key Players and Their Roles 
Business sponsor(s) and partners
♦ Provides funding
♦ Specifies requirements and deliverables
♦ Approves changes and some test results
 Project manager Plans and manages the project Software developer(s)
♦ Designs, codes, and builds the application
♦ Participates in code reviews and testing
♦ Fixes bugs, defects, and shortcomings
Testing Coordinator(s)
♦ Creates test plans and test specifications based on the requirements and functional, and technical documents Tester(s)
♦ Executes the tests and documents results 

Next Topic: Seven Testing Principles