Monday, April 28, 2008

Effective Software Testing (Cont)

To ensure software application reliability and project success Software Testing plays a very crucial role. Everything can and should be tested. Few steps below (as far as i know base on theory and implementation in my company) to make Software Testing Effective:

  1. Requirement Phase

    1. Involve Testers from the beginning

    2. Verify the Requirements

    3. Design Test Procedures as soon as Requirements are available

    4. Ensure that Requirement changes are communicated

    5. Beware of Developing and Testing based on an Existing System

  2. Test Planning

    1. Understand the task at hand and The Related Testing Goal

    2. Consider The Risks

    3. Base Testing efforts on a Prioritized feature schedule

    4. Keep Software issues in mind

    5. Acquire Effective Test Data

    6. Plan The Test Environment

    7. Estimate Test Preparation and Execution Time

  3. The Testing Team

    1. Define Roles and Responsibilities

    2. Require a Mixture of Testing skills, subject-matters expertise, and experience

    3. Evaluate The Testers effectiveness

  4. The System Architecture

    1. Understand the Architecture and Underlaying Components

    2. Verify that the System Supports Testability

    3. Use Logging to Increase System Testability

    4. Verify that the System Supports Debug and Release Execution Modes

  5. Test Design and Documentation

    1. Divide and Conquer

    2. Mandate the use of Test Procedure Template and other Test Design standards

    3. Derive Effective Test Cases from Requirements

    4. Treat Test Procedures as 'Living' Documents

    5. Utilize System Design and Prototypes

    6. Use proven Testing Techniques when designing Test Cases scenarios

    7. Avoid including constraints and detailed data elements within Test Procedures

    8. Apply Exploratory Testing

  6. Unit Testing

    1. Structure the Development Approach to support Effective Unit Testing

    2. Develop Unit Test in paralel or before the Implementation

    3. Make Uni-Test Execution Part of the Build Process

  7. Automated Testing Tools

    1. Know the different types of Testing Support Tools

    2. Consider building a Tool instead of buying one

    3. Know the impact of Automated Tools on The Testing Effort

    4. Focus on the needs of your organization

    5. Test the Tools on an Application Prototype

  8. Automated Testing

    1. Do not rely solely on capture/playback

    2. Develop Test Harness when necessary

    3. Use proven Test Script Development techniques

    4. Automate Regression Tests when feasible

    5. Implement Automated Builds and Smoke Tests

  9. Non Functional Testing

    1. Do not make Non Functional Testing an Afterthought

    2. Conduct Performance Testing with Production-Sized Databases

    3. Tailor usability Test to the intended audience

    4. Consider all aspects of Security for specific requirements and system-wide

    5. Investigate the System's Implementation to plan for concurrency Tests

    6. Set up an efficient environment for Compatibility Testing

  10. Managing Test Execution

    1. Clearly define the beginning and end of The Test Execution Cycle

    2. Isolate the Test Environment from the Development Environment

    3. Implement a Defect Tracking Life Cycle

    4. Track the execution of The Testing Program

For a few incoming posts next, i will explain one by one all the steps that explained before. And I will combine with my experienced as Software Tester in my company

Monday, April 21, 2008

Effective Software Testing

What is Effective Software Testing?

How do we measure ‘Effectiveness’ of Software Testing?
The effectiveness of Testing can be measured if the goal and purpose of the testing effort is clearly defined. Some of the typical Testing goals are:

  • Testing in each phase of the Development cycle to ensure that the “bugs”(defects) are eliminated at the earliest

  • Testing to ensure no “bugs” creep through in the final product

  • Testing to ensure the reliability of the software

  • Above all testing to ensure that the user expectations are met

The effectiveness of testing can be measured with the degree of success in achieving the above goals.

Steps to Effective Software Testing:

Several factors influence the effectiveness of Software Testing Effort, which ultimately determine the success of the Project.

A) Coverage:

The testing process and the test cases should cover

  • All the scenarios that can occur when using the software application

  • Each business requirement that was defined for the project

  • Specific levels of testing should cover every line of code written for the application

There are various levels of testing which focus on different aspects of the software application. The various levels of testing based on V-Model since we discussed are:

  • Unit Testing

  • Integration Testing

  • System Testing

  • User Acceptance Testing

The goal of each testing level is slightly different thereby ensuring the overall project reliability.

Each Level of testing should provide adequate test coverage.

  • Unit testing should ensure each and every line of code is tested

  • Integration Testing should ensure the components can be integrated and all the interfaces of each component are working correctly

  • System Testing should cover all the “paths”/scenarios possible when using the system

The system testing is done in an environment that is similar to the production environment i.e. the environment where the product will be finally deployed.

There are various types of System Testing possible which test the various aspects of the software application.

B) Test Planning and Process:

To ensure effective Testing Proper Test Planning is important
An Effective Testing Process will comprise of the following steps:

  • Test Strategy and Planning

  • Review Test Strategy to ensure its aligned with the Project Goals

  • Design/Write Test Cases

  • Review Test Cases to ensure proper Test Coverage

  • Execute Test Cases

  • Capture Test Results

  • Track Defects

  • Capture Relevant Metrics

  • Analyze

Having followed the above steps for various levels of testing the product is rolled.

It is not uncommon to see various “bugs”/Defects even after the product is released to production. An effective Testing Strategy and Process helps to minimize or eliminate these defects. The extent to which it eliminates these post-production defects (Design Defects/Coding Defects/etc) is a good measure of the effectiveness of the Testing Strategy and Process.




Tuesday, April 15, 2008

Certification in Software Testing and Software Quality Assurance

Several certification programs exist to support the professional aspirations of software testers and quality assurance specialists. No certification currently offered actually requires the applicant to demonstrate the ability to test software. No certification is based on a widely accepted body of knowledge. No certification board decertifies individuals.[verification needed][citation needed] This has led some to declare that the testing field is not ready for certification.[5] Certification itself cannot measure an individual's productivity, their skill, or practical knowledge, and cannot guarantee their competence, or professionalism as a tester.[6]

Certifications can be grouped into: exam-based and education-based. Exam-based certifications: For these there is the need to pass an exam, which can also be learned by self-study: e.g. for ISTQB or QAI. Education-based certifications are instructor-led sessions, where each course has to be passed, e.g. IIST (International Institute for Software Testing).

Software Testing Certification:
Software Quality Assurance Certification:

Testing Team Structure and Responsibilities

In my Company we have our own Testing Team as mentioned in previous post. Each positions have own Roles and Responsibilities. Below i described briefly the roles and responsibilities for each position:

1. Project Manager
Responsibilites:

  • Initiate Testing Project
  • Managing The Testing Project and Resource Allocation
  • Test Project Planning, Executing, Monitoring/Controlling, Reporting/Closing
2. Business Analyst
Responsibilities:
  • Analyze Business Process, Business Requirement, Functional Specifiation
  • Participate in Preliminary Planning
3. Developer
Responsibilites:
  • Develop system/application
  • Business Analyst and Test Leader Interaction
4. Testing Quality Assurance
Responsibilities:
  • Tracking and Ensuring The Test Team to comply with standard Test Process
  • Highlighting non compliance issues to test Management Team
5. Test Leader
Responsibilities:
  • Analyzing Test Requirement
  • Designing Test Strategy, and Test Methodology
  • Designing Tests Suites, Test Cases, Test Data
6. Tester (My Position)
Responsibilites:
  • Test Preparation
  • Test Execution
  • Raising and Tracking Defect
7. User
Responsibilities:
  • Initiate Project
  • Initiate Requirement
  • End User of the System/Application

Saturday, April 5, 2008

Roles in software testing

Software testing can be done by software testers. Until the 1950s the term software tester was used generally, but later it was also seen as a separate profession. Regarding the periods and the different goals in software testing (see D. Gelperin and W.C. Hetzel) there have been established different roles: test lead/manager, tester, test designer, test automater/automation developer, and test administrator.

Participants of testing team:

  1. Testers
  2. Developer
  3. Business Analyst
  4. Customer
  5. Information Service Management
  6. Test Manager
  7. Senior Organization Management
  8. Quality team

In my company, we have our own Organizational Structure for the Testing Team.



Participants of Testing Team in my company:


1. Unit Head (Project Manager)

2. Business Analyst

3. Developer

4. Testing Quality Assurance (QA)

5. Test Leader (Relationship Manager)

6. Tester (My Position)

7. User

Level of Testing

Unit testing

tests the minimal software component, or module. Each unit (basic component) of the software is tested to verify that the detailed design for the unit has been correctly implemented. In an Object-oriented environment, this is usually at the class level, and the minimal unit tests include the constructors and destructors.


Integration testing

exposes defects in the interfaces and interaction between integrated components (modules). Progressively larger groups of tested software components corresponding to elements of the architectural design are integrated and tested until the software works as a system.


Functional testing

tests at any level (class, module, interface, or system) for proper functionality as defined in the specification.


System testing

tests a completely integrated system to verify that it meets its requirements.


System integration testing

verifies that a system is integrated to any external or third party systems defined in the system requirements.


Performance Testing

validates whether the quality of service (sometimes called Non-functional requirements) parameters defined at the requirements stage is met by the final product.


Acceptance testing

can be conducted by the end-user, customer, or client to validate whether or not to accept the product. Acceptance testing may be performed as part of the hand-off process between any two phases of development.



But in my company, we simplify level of testing:

  1. Unit Testing
  2. Functional Testing
  3. System Integration Testing (SIT)
  4. User Acceptance Testing (UAT)