Tuesday, September 4, 2007

Software Testing Basics

What is Software Quality Assurance?
The other technical terminology for Software Quality Assurance is Verification and Validation. To put in simple words, Verification speaks on "Are we building the right system?" and Validation speaks on "Are we building the system right?". SQA is an umbrella activity that is applied throughout the software process. Quality as the American Heritage Dictionary defines is, "A Characteristic or attribute of something..."

What is Software Testing by the way?
In general, testing is finding out how well something works. In terms of human beings, testing tells what level of knowledge or skill has been acquired. In computer hardware and software development, testing is used at key checkpoints in the overall process to determine whether objectives are being met. For example, in software development, product objectives are sometimes tested by product user representatives. When the design is complete, coding follows and the finished code is then tested at the unit or module level by each programmer; at the component level by the group of programmers involved; and at the system level when all components are combined together. At early or late stages, a product or service may also be tested for usability. At the system level, the manufacturer or independent reviewer may subject a product or service to one or more performance tests, possibly using one or more benchmarks. Whether viewed as a product or a service or both, a Web site can also be tested in various ways - by observing user experiences, by asking questions of users, by timing the flow through specific usage scenarios, and by comparing it with other sites.
The answer to the primary role of software testing is two fold:Determine whether the system meets specifications (Producer View), andDetermine whether the system meets business and user needs (Customer View)

Testing encompasses three concepts:
The demonstration of the validity of the software at each stage in the system development life cycle.Determination of the validity of the final system with respect to user needs and requirements. Examination of the behavior of a system by executing the system on sample test data.

Goal of Testing:
The primary Goal of Testing is to uncover requirement, design or coding errors in the programs. Let us look at some fundamental concepts of Software Testing. "Verification" is the process of determining whether or not the products of a given phase of software development fulfill the specifications established during the previous phase. The verification activities include proving, testing and reviews.
"Validation" is the process of evaluating the software at the end of the software development to ensure compliance with the software requirements. Testing is a common method of validation.
For high reliability we need to perform both activities. Together they are called the "V & V" activities.

Software Testing is an Art. A good tester can always be a good programmer, but a good programmer need not be a good tester.

Test Objectives:
The following can be described as test objectives as per Glen Mayer:Testing is a process of executing a program with the intent of finding an error.A good test case is one that has a high probability of finding an as-yet-undiscovered error.A successful test is one that uncovers an as-yet-undiscovered error.

Testing Principles:
The following can be described as testing principles: All tests should be traceable to customer requirements.Tests should be planned long before testing begins.The Pareto principle applies to testing. Testing should begin “in small” and progress toward testing “in large”. Exhaustive testing is not possible.To be most effective, testing should be conducted by an independent third party.

Verification Strategies:
The following can be categorized into Verification Strategies: Requirements Reviews.Design Reviews. Code Walkthrough. Code Inspection.
Validation StrategiesThe following can be described as the basic Validation Test strategies. 1. Unit Testing.2. Integration Testing.3. System Testing.4. Performance Testing.5. Alpha Testing.6. User Acceptance Testing (UAT)7. Installation Testing.8. Beta Testing.

SDLC


The stages of SDLC can be characterized and divided up in different ways, including the following:


· Project planning, feasibility study: Establishes a high-level view of the intended project and determines its goals.


· Systems analysis, requirements definition: Refines project goals into defined functions and operation of the intended application. Analyzes end-user information needs.


· Systems design: Describes desired features and operations in detail, including screen layouts, business rules, process diagrams, pseudocode and other documentation.


· Implementation: The real code is written here.


· Integration and testing: Brings all the pieces together into a special testing environment, then checks for errors, bugs and interoperability.


· Acceptance, installation, deployment: The final stage of initial development, where the software is put into production and runs actual business.


· Maintenance: What happens during the rest of the software's life: changes, correction, additions, moves to a different computing platform and more. This, the least glamorous and perhaps most important step of all, goes on seemingly forever.

SDLC - VModel


A software development life cycle is the process followed when developing information systems, from the initial stage of information gathering, all the way through to maintenance and support of the system.
UKSH believes firmly in user-involvement at every stage of the process - we feel this is integral to ensuring that the system is delivered 100% to the requirements of the user, and any decisions that may be required during the system building process can be resolved efficiently.
We develop using a process known as the "V" model of systems development. At each testing stage (see diagram, below), the corresponding planning stage is referred to, ensuring the system accurately meets the goals specified in the analysis and design stages.

How to get job in Software Testing quickly?

In recent days this is the most asked question to me by readers. How to get software testing job? How to come in software testing field? or Can I get job in testing?

All these questions are similar and I want to give also similar answer for this. I have written post on choosing software testing as your career where you can analyze your abilities and know which are the most important skills required for software testing.

I will continue mentioning that “know your interest before going into any career field”. Just going to software testing career or any other hot career is wrong and which may result into loss of your job interest as well as your job.

Now you know your abilities, skills, interests right? and you have made decision to go for software testing career as it is your favorite career and you suit most in this career. So here is a guideline for how to get a good job in software testing field.

If you are a fresher and just passed out from your college or passing out in coming months then you need to prepare well for some software testing methodologies. Prepare all the manual testing concepts. If possible have some hands-on on some automation and bug tracking tools like winrunner and test director. It is always a good idea to join any software testing institute or class which will provide you a good start and direction of preparation. You can join any 4 months duration software testing course or can do diploma in software testing which is typically of 6 months to 1 year. Keep the preparation going on in your course duration. This will help you to start giving interviews right after getting over your course.

If you have some sort of previous IT experience and want to switch to software testing then it’s somewhat simple for you. Show your previous IT experience in your resume while applying for software testing jobs. If possible do some crash course to get idea of software testing concepts like I mentioned for freshers above. Keep in mind that you have some kind of IT experience so be prepared for some tough interview questions here.

As companies always prefer some kind of relevant experience for any software job, its better if you have relevant experience in software testing and QA. It may be any kind of software testing tools hands-on or some testing course from reputed institutes.

Please always keep in mind- Do not add fake experience of any kind. This can ruin your career forever. Wait and try for some more days to get the job by your abilities instead of getting into trap of fake experience.

Last important words, Software testing is not ‘anyone can do career!’ Remove this attitude from your mind if someone has told such kind of foolish thing to you. Testing requires in depth knowledge of SDLF, out of box thinking, analytical skill and some programming language skill apart from software testing basics.

So best luck and start preparation for your rocking career! I will continue writing this career series and what you actually need to prepare for software testing interview.

How to be a good tester?

It’s a every testers question. How to be a good tester?
Apart from the technical knowledge, testing skills, tester should have some personal level skills which will help them to build a good rapport in the testing team.

What are these abilities , skills which make a tester as a good tester?
Well, I was reading Dave Whalen’s article “Ugly Baby Syndrome!” and found it very interesting. Dave compared software developers with the parents who deliver a baby (software) with countless efforts. Naturally the product managers, architectures, developers spent their countless time on developing application for the customer. Then they show it to us (testers) and asks: “ How is the baby (Application)? “ And testers tell them often that they have and ugly baby. (Application with Bugs!)

Testers don’t want to tell them that they have ugly baby, but unfortunately its our job. So effectively tester can convey the message to the developers without hurting them. How can be this done? Ya that is the skill of a good tester!

Here are the tips sated by Dave to handle such a delicate situation:
Be honest and Responsive:Tell developers what are your plans to attack their application.
Be open and available:If any dev ask you to have a look at the application developed by him before the release, then politely give feedback on it and report any extra efforts needed. Don’t log the bug’s for these notes.

Let them review your tests:
If you have designed or wrote some test cases from the requirement specifications then just show them those test cases. Let them know your stuff as you are going to critic on developers work!

Use of Bug tracker:
Some testers have habit to report each and everything publicly. This attitude hurts the developers. So if you have logged any bug then let the bug tracking system report it to respective developers and managers. Also don’t each time rely on bug tracker, talk personally to developers what you logged and why you logged?

Finally some good personal points:
Don’t take it personally:Do the job of messenger. You could be a close target always. So build a thick skin!

Be prepared:
A good message in the end, Be prepared for everything! If worst things might not happened till now but they can happen at any moment in your career. So be ready to face them.

Counts