Sunday, November 6, 2011

Software Testing

Software Testing is a process of identifying defects in a software; verifying the functionality of the application against requirement specification.

Types of Software testing:

  1. White Box Testing also known as
    • Unit testing
    • Structural testing
    • Glass Box testing
    • Open box testing
    • Transparent testing

    Developer writes the program and he himself tests every line of the code i.e. each and every unit of the program is tested in White Box Testing.

  2. Black Box Testing also known as
    • Functional Testing
    • Product Testing
    • Behavioral Testing
    • Requirements Testing
    • Closed box Testing
    • Opaque Testing

    Tester opens the application and checks whether the application is working according to the requirement specification. If any bugs are found prepare a report and send it to the developer. Here the tester does not open the source code and check for bugs.

  3. Grey Box Testing – is a combination of White Box Testing and Black Box Testing. In Grey Box Testing the tester has some knowledge about the internal working of the software. Here the tester applies limited number of tests on the internal workings of the software and in the remaining part of Grey Box testing, one takes a black box approach (applying inputs and observing outputs).

V-MODEL

V model is an extension of Waterfall model. Instead of moving down in a linear way, it follows both a 'top-down' as well as a 'bottom-up' approach.

As the development team goes about its requirement analysis activities, the testing team simultaneously begins with its acceptance testing activities. By following this approach, time delays are minimized and optimum utilization of resources is assured.

Once the CRS is ready the customer sends a copy to both DT and Testing Team.

  1. Development Team goes ahead with preparing SRS for the CRS. Testing Team begins with Acceptance testing i.e. Reviews the CRS which means Testing Team checks for contradictory requirements, missing requirements and wrong requirements. Once the mistakes are identified the Testing Team discusses them with Development Team. Together they go the customer, here the customer resolves the issues and gives a new CRS. Testing Team goes ahead with writing Test Plan and Test Case for this CRS. Development Team at the meantime updates the prepared SRS or if the SRS is not already created then they begin the preparing of the SRS wrt the new CRS.
  2. Once the SRS is ready the Development Team sends the copy to Testing Team and begin with HLD. Testing Team now starts the System testing i.e. Reviews the SRS against CRS ( checks whether every CRS is converted to SRS; validates the converted SRS and checks for missing SRS). Once the mistakes are identified the Testing Team discusses them with Development Team. Development Team rectifies them and sends the new SRS to Testing Team. Testing Team now writes Test Plan and Test Case for them. Development Team meanwhile updates the HLD as per the new SRS.
  3. Once the HLD is ready, Development Team sends it to Testing Team and begins with LLD. Testing Team now starts the Integration testing i.e. Reviews the HLD, writes Test Plan and Test Case. If the Test Engineer is new to the domain the Developer explains the design to Test Engineer. Test Engineer now understands the design and comes up with his own strategies.
  4. Once the LLD is ready, Development Team sends it to Testing Team and begins with Coding. Testing Team now starts the Functional testing Reviews the LLD, writes Test Plan and Test Case.
  5. Once the developer starts coding he also tests them. Testing every line of code is called Unit testing. This is done by the Development Team itself, as they have written the code it’s easier for them to fix it.
  6. Once the Development Team finishes with Unit testing they send the product to Testing Team for Functional testing. Here every feature/component is tested thoroughly wrt the Test Case written earlier by Testing Team. When Testing Team is doing Functional testing and comes across bugs they send them to Development Team. Development Team fixes the bug and sends the product to Testing Team for Integration testing.
  7. Now Integration testing is done. If Testing Team comes across bugs they send them to Development Team. Development Team fixes them and sends the product for System Testing.
  8. Once Integration testing is complete, Acceptance testing is done.
  9. Once Acceptance testing is complete the product is sent to the customer.

Depending on the bug you repeat the testing process. In some projects Functional testing, Integration testing, System Testing should be done and is some just Integration testing, System Testing or just System Testing.

Friday, August 5, 2011

Software Development Life Cycle (SDLC)

SDLC (System Development Life Cycle), just as the name implies, is defined as the process of developing system or software to meet certain requirements or in other words it is defined as the standard procedure / structured methodology to develop a system or software. It covers many activities: gathering the requirements, understanding and analyzing the requirements, studying the project feasibility, choosing the system design and architecture, implementing/coding and testing it, up to the delivery of the product to the customer.

The Phases involved in SDLC are:

Requirement Collection: In this phase the Business Analyst or the Product Analyst gathers the requirements from the software company (customer). In Service based organizations the person who gathers the requirements are called Business Analysts and in Product Based Organizations they are called as Product Analyst.

Feasibility Study: This phase involves analyzing the requirements and checking whether the project is feasible to develop or not i.e., checking whether the project is feasible from technical, financial and resource point of views.

Designing: The initial structure of the entire project is created in this phase.

  • High level designing: Building the entire architecture of the project. This involves Architect and Senior Developers.
  • Low level designing: Deciding how each and every feature should work. This involves Senior Developers.

Coding: This phase includes coding of the project and involves all the developers assigned to the project (senior, junior, fresher).

Testing: Initially the developer used to develop the project and test it himself. This was the biggest drawback because, he may not have time to test it or may not test the product correctly. For this reason we have software test engineers today. Their main objective is to break the developed project i.e. to find as many bugs as possible.

Installation: Once the product is developed the Senior Developer / Installation Engineers goes to the customer’s place and installs the software whenever it is required.

Maintenance: Maintenance is necessary after the development of a successful project. It is obvious that changes occur once the project is handed over to the end user. The developers must develop the project in such a way that it is adaptable to those changes.  It is also necessary for handling any issues (bugs) once the product is being used by the customer.