Friday, November 27, 2015

आहिस्ता आहिस्ता

आहिस्ता आहिस्ता मेरी सांसो को पनाह मिले |
सोचता हूँ, मुझे खुसिओ भरा इक जॅहा मिले |
अश्क बह जाए अब कोई गम नही मुझको |
अब थक गया हूँ, थोड़ा मुस्कराना चाहता हूँ ||

Saturday, May 21, 2011

What testers can do apart from doing testing and reporting bugs?

1. Apart from providing inputs to requirements (as mentioned by Aliona above) testers can also provide inputs to Designs and Architecture of product and by giving inputs to design test team can help improve quality of product upfront.

2. Testers can work towards mastering the domain knowledge and understand standards, regulations and upcoming trends in industry and particular domains, they are working.

3. Understanding and taking initiatives in process definition, implementation and improvements.

4. Spreading awareness about testing techniques and importance of testing to other groups.

5. Contribute in project/product planning and ensuring all required tasks/work are 'accounted for' in the plan with adequate time and duration. Doing right planning is key to success.

6. Implementing best practices in testing group and also sharing knowledge with other groups like Dev, PMG etc.

7. Participate in customer interaction, help debugging and troubleshooting customer reported defects, participate in acceptance testing etc.

8. Converting intermittent defects to confirm defects by analyzing steps required to reproduce the defects.

9. Conducting Root Cause Analysis for all customer reported defects and try to fill the open gaps.

10. Keeping right Attitude and Discipline and enjoying testing :)



Thursday, January 13, 2011

How to Transform Your Team into a High Performance Team

Do you think your team is not performing well, lacks attitude and discipline to follow you, hesitates in taking new initiatives and new challenges, lacks confidence, doesn’t work well in a team settings or some of these related problems? 

Well if these are some of the problems exists, then you certainly needs to revisit your strategy to manage and you need to work towards transforming your team into a high performance teams. 
  1. Building right attitude – Attitude is the foremost trait of any successful individual, team or organization to be successful in long term. With right attitude and approach anybody can achieve success and work in a right direction in minimal timeframe. Attitude is about how you do things, how you perceive any problem and solve them, how you admit your mistakes and works towards improving yourself. You should inculcate the right attitude and at the same time, mentor your team to work with open and positive attitude.
  2. Team work – You should not be working with the strangers in the same team, right?. You should try to create bonding with the team. Go together, discuss different topics of interests, have small breaks, lunch etc together often. Have brainstorming session with team members on identifying problems and identifying the solution. Create a friendly environment, enable team members to interact and work with each other. Everyone should respect each other opinions, views and thoughts.  
  3. Communication – Communicate effectively with your team. Provide visibility and details of tasks assigned to individuals. Ask them if they are able to understand the tasks and in case of any doubts or query, clarify the same immediately. Keep your team inform about the updates. At the same time you need to be cautious of the fact that you should review what information is suitable for the team. Share goals of each individual, explain each goal and help them understand what they are supposed to do. Explain the expectations of your management, let them think about it and come up with ideas on how can they meet or exceed the set expectations.  
  4. Treat each member differently – Do not impose philosophy of ‘One rule applies to all’. Do not try to create comparisons between different individuals as each individual have their own strengths and weaknesses. Help them improve their weakness and motivate them to keep up building on their strength. Assess the tasks, skills and interest of each individual and allocate work accordingly. Let them choose what they want to do and what they can deliver best. If you give them tasks which do not excite them, they are not going to give their 100%.
  5. Balance of Direction and Support – You should assess the competency and commitment level of each resource on each assigned tasks. In case you find any gaps in competency or commitment then you should provide adequate Direction or Support respectively. You need to be careful of the fact on how much direction or support you should provide to individuals.
  6. Motivation – Motivate your team, encourage them to work towards new initiatives, appreciate when someone does a good job, guide them when they make any mistake, help them understand new things, let them be fearless of taking any new challenges and support them whenever needed. This will help you motivate your team and will help them take a leap faster and work in a more efficient way.
  7. Learn from mistakes – It is rightly said that ‘There is no problem in making mistake rather problem is with making same mistake twice’. Do not hesitate in allowing your team to make mistakes, let them try things and if they make mistakes, guide them on how best these things can be done. Mentor them so that they not repeat mistakes. Nobody should be fearful of trying new things. When somebody tries new things then guide them and help them make the right move.
  8. Challenge your team – Identify how you can transform ‘Routine Work’ into something ‘Challenging and Interesting’. Bring your team out from their comfort zone and let them use their competencies to do better work in a faster time cycles. Give them new assignment that challenges their existing knowledge, skills and helps them learn new things. Bring healthy competition among the team members, recognize and appreciate good work.
  9. Constant Feedback – Provide constructive, regular and timely feedback to each individual on their progress. Tell them what they did right and what they did wrong and how they can correct things. Be open with individual and if possible setup one on one with each individuals on a frequent basis. It can be quarterly or monthly depending on the team size
  10. Importance of Quality – Make your team aware that quality should be part of system, process, mindset and thinking. Quality should be a way of life. Help them understand the importance of doing right thing first time. Help them understand how they can reduce probability of reworks and deliver high quality outputs on a consistent basis.

Tuesday, October 19, 2010

A good Test Strategy.

A good Test Strategy is one that increases the probability of finding a defect in a application with minimal number of tests and utilizing minimal number of resources required to test the application.

To start with Test strategy should be planned in a way so that it aligns with the goal of the project and corroborate to the organizational vision. Some of the traits a good Test strategy should have are (but not limited to) context driven, robustness, flexible, modular, scalable, measurable, easy to maintain and easy to use.

As test strategy for different tests may varied significantly due to the differences to the context, I’m listing some of the generic steps that may be used to define an effective test strategy:

  1. Identify Goals of the project and align test strategy accordingly
  2. Consider success criteria for a test strategy
  3. Define test strategy considering the context of test e.g. a test strategy for a BI application will differ from a transactional system or an embedded system
  4. Identify key areas for defining test strategy (with some specific questions answered by them)
       a. Identifying scope (what you need to test?)
       b. Test approach needed (how you would test application effectively?)
       c. Identify test environment (where you will test?)
       d. Identify tool required to test (how effective you can test?)
       e. Identify test data to be used (how much coverage you can ensure through test?)
       f. Identify test techniques to be used (how you can optimize your test?)
       g. Identify dependencies (what can delay or hamper your test?)
       h. Identify review strategy (Have you included everything that you intend to test?)
       i. Identify Entry/Exit Criteria (when you will start and stop the test?)
      (This might be more related to a test plan but it is an important aspect we should considered for test.)
       j. Any other specific test you want to add

  5. Review test strategy frequently to check if any update needed
  6. Execute tests according to defined test strategy

Following are the some of the problems that may occur and respective actions that can be taken to mitigate them:

1. Lack of support from management – Most of the time you may face this issue when either you are not provided enough bandwidth or tools to execute the agreed test strategy. You should communicate regularly with management and keep them in loop with the progress and highlight issues as and when they occur.

2. Lack of resource to execute the test strategy – Most of the time while defining test strategy you may have budgeted resource which are not available during the execution. Before committing on a test strategy you should have management agreement on required resources. If the resources are not available on time, you should escalate them immediately. This should also be added as a risk to make it visible in front of management.

3. Test strategy becomes obsolete – If you do not keep you test strategy updated with the new findings and changes you test strategy may become obsolete and will bring lack of interest in the team. It is very important you go through test strategy frequently and if you find any update is needed then you should update the same and communicate back to the team.

4. Incomplete Test strategy – If test strategy is not thought out well then it may be incomplete and may result in incomplete tests and wrong or inappropriate test result. You should keep this mind before circulating a test strategy.

Tuesday, July 6, 2010

What You See is What You Test!

Testing is a skill and just like any other skill you learn it by practicing time to time. You practice it while you conduct testing on the job, offline when you are not testing, by visualizing different problem and thinking about how to solve them (or find defects) or by learning any technique and tool to enhance your knowledge areas.


Testing includes high level of observing skill. If you are a good observer then you can be a good tester (Off course you will also require other skills in addition!). When you test you observe:
    #1 You observe the behavior of the application
    #2 You observe the process and workflow in which application works
    #3 You observe what's going in and what's coming out
    #4 You observe how application behaves when induced with negative inputs
    #5 You observe how application manage error handling
    #6 You observe how application responds to a failover
    #7 You observe how application works under high load and stress


The key difference between an average and good testers lies in their ability and capability to observe what is being presented to them in a product. You observe based on what you understood from requirement specification or a design document or based on how a application is built and presented to you.


I have seen many times that good testers will find more defects as compared to average testers even if they are provided with same test scripts. The key difference lies in the ability of a good tester to visualize and observe the behavior of the application in addition to just exercising the steps mentioned in the test script. Good testers see more than average testers and they are able to test more conditions and increase their chances of finding more defects.


You can observe and practice following things while testing:
    #1 Observe the behavior of the function. Think whether the behavior of application is appropriate and as required?
    #2 Before executing any step think what are the possible states in which application can move and then check all of them one by one. Once you move between different states then compare the data to see if it is as required.
    #3 Monitor logs and identify any error generated by system. Read and try to understand the error as it may help you identify the cause and check other related scenarios.
    #4 Observe the trend of issues reported. This will help you identify weak areas of the application and help you focus on potential areas around which you may find more defects. 
    #5 While conducting testing whenever you are taken to a new window or screen quickly scan through and identify any other problems in addition to the function tested by you. Even though this may de-focus you from testing your key function at that particular moment but with some practice you can improve this skill area.


What You See is What You Test. It's all depends on you on how far you want to see...

Friday, July 2, 2010

Six Sigma - DMAIC Explained.

Six Sigma is a Performance goal, representing a quality level that meets standards for 3.4 defects per million opportunities.

It uses series of tools and methods used to improve existing processes (DMAIC) or design products, processes and/or services (DMADV). The principle of Six Sigma involves around improving the processes, using statistical measure indicating the number of standard deviations, to a quality level so as to meet and maintain quality standard requirement of 3.4 defects per million opportunities.

The core principle of Six Sigma revolves around discipline and fact-based approach to manage business and its surrounding process framework. In this post I'm mentioning details about DMAIC methodologies which can be used to improve existing processes in a organization.

DMAIC stands for Define, Measure, Analyze, Improve and Control. This is one of the key methodology followed in Six Sigma. I'm trying to explain briefly the key areas covered in the cycle for easier understanding.


#1 Define - This process group is used to:
      1. Define the problem statement
      2. Preparing the charter and goals
      3. Voice of the customer (Pain areas)
      4. Understanding customer expectations e.g. Kano model
      5. Define Process Maps
      6. SIPOC (Supplier Input Process Output Customer) definition



# 2 Measure - This process group is primarily used to measure data for data capturing processes:
       1. Identify key aspects of the current process
       2. Identify Critical to Quality (CTQ) tree 
       3. Stratification of data
       4. Identifying data to be captured
       5. Collect relevant data for analysis


# 3 Analyze - This process group is used to analyze data and identify any findings, trends and causes
       1. Investigate the data collected
       2. Determine what dependencies and relationship between various parameters
       3. Seek out root cause of the defect under investigation (Normal causes Vs. Special causes)
       4. Analyzing data using tools of Six Sigma i.e. Flow charts, Histogram, Pareto chart,Run chart, Scatter Plot, Control charts and Cause and Effect diagram


# 4 Improve - This is used to improve and/or optimize the current process:
       1. Data analysis using techniques such as design of experiments, mistake proofing
       2. Standard work to create a new or future state process
       3. Proof of concept (POC) to establish any changes
       4. Set up pilot runs to establish process capability
       5. Removing Delays, Decisions points and Overheads from the existing processes


# 5 Control - This process group is used to define control parameters and then monitor data based on the parameters:
       1. Define control parameters
       2. Defining and monitoring of thresholds
       3. Continuously monitor data using control charts
       4. Prevention mechanisms implementations
       5. Define contingency and/or Action plan

Tuesday, June 29, 2010

I believe I can fly...I believe I can touch the sky.

This nice song by R. Kelly is one of my favourite song
I believe I can fly...I believe I can touch the sky.
I think about it every night and day..
spread my wings and fly away...

Listening songs is one of my hobby and good thing is that you can listen to the music while doing any other stuff. right? (Gyming...walking...reading... relaxing...you name it. BTW I'm listening Waka Waka (This time from Africa) from Shakira right now, while I write this article :) ). Ever since I heard this song, I had felt that we should believe in ourselves, our thoughts and follow our dreams. If you can believe in something, you can definitely get it. You just need to believe in you..

When I started my career, as many of software graduates does, thought programming is the only elite job in software industry, but when I got experience, got interactions with several customers, understood importance of quality and understood pros and cons of programming (and testing as well), I realized that I'm more inclined for a testing role and I enjoyed it more than anything else:

#1 The scope for testing is very dynamic, technology independent, platform independent and that means you can try much more
#2 If you still enjoy programming, you can do coding, create tools that may help you do better job in testing, work on automation and still enjoy testing.
#3 Testing is a very analytical job that I always liked this since my college times
#4 Testing requires you to plan and execute tests tactically (using methods and techniques) and requires quizzing yourself all the time that makes it challenging and fun at the same time
#5 I wanted to be associated with Quality somehow, as I got more interested in quality field, after working in various areas QC, SQA, SEPG groups, part of CMM assessment team, Six sigma etc and I found testing as most interesting among all of these
#6 Every day comes pretty interesting for me while designing, defining and doing testing on different platforms, technologies and projects and I enjoy doing this all day long, every day

I believed in me and I do not regret a bit of my decision of selecting Testing as my career. I would convey this message to anyone who is working as tester and want to consider testing as their future career prospects. Testing as a career has way to go in future, just believe in yourself and go ahead with it...

I strongly believe that we should identify our interest areas and do something around the same area. You can deliver your best if you enjoy it. If you can believe in yourself, you can definitely fly and yes, sky is the limit.

  And like Kelly sings...Hey, cause I believe in me...

Thursday, June 24, 2010

Prevention is a Cure - A Quality Perspective

For any product (and project) based enterprise software solution organizations, a lot of time is spent on Quality Inspection (Quality Control e.g. testing) and Quality Correction (e.g. debugging and fixing issues). The cost of these two areas can be moderate to huge, depending upon the size, diversity and usage of software applications in the respective business industry.

If we need to reduce this cost of overall quality, one of the better measures is by reducing and minimizing the total cost incurred on Quality Inspection and Quality Correction. With greater focus on Quality Prevention we can reduce the cost incurred on the overall product development and maintenance lifecycle and can produce increased level of quality.

Lets understand this with an example given below:

Cost of overall Quality = Cost of Quality Prevention + (Cost of Quality Inspection + Cost of Quality Correction)

With every small unit cost increase in Prevention method, we can reduce the cost of Quality Inspection and Correction to significant levels. In other words we can say that Total Cost of Quality Prevention is inversely proportionate to Total Cost of Quality Inspection plus Total Cost of Quality Correction. In other words:

Cost of Quality Prevention α 1 / (Cost of Quality Inspection + Cost of Quality Correction)

Prevention helps in reducing the probability of finding defect in production and enables some of the following benefits for any organization and not limiting to:

    #1 Cost of prevention is much lesser then Cost of Correction as the defect is fixed at the initial phase itself
    #2 Defects are found and fixed in earlier phases of development cycles and enables high quality products
    #3 Cost of rework is reduced to a greater extent as number of defects is reduced to significant levels
    #4 Product companies can focus on implementing more new requirements and innovations in product rather than focusing energy on maintenance, hot fixes and rework. With good quality there are always positive responses from customers who are happy and can be delighted as a result in longer run
   #5 Happy and delighted customers provides return business and also are good references in market place resulting in more business opportunities to an organization


Paradigm shift

In software development life cycle, if we put more focus, energy and time on Quality Prevention area then it will significantly reduce the Total Cost of Inspection and Correction. There are few measures that we can take to make this happen. (Example below)




Investments (Preventions)




Benefits


Requirements

1. Detailed Requirements with use cases and case studies

2. Better and focused reviews

3. Involvements of customers


1. Lesser time in understanding the

requirements
2. Lesser time in architecture and design


Design

1. Detail level of architecture and design

2. Proof of Concepts (POC)

3. Multiple design considerations

4. Detail level of design reviews




1. Lesser time to complete coding
  2. Better reuse of code and integration

3. More option to build better designs
4. Higher scalability of design


Coding

1. Coding standards and guidelines
2. Reusable frameworks

3. Detailed Unit test strategy

4. Code Reviews




1. Less time to reuse

2. Person independent and lesser dependencies

3. Less time to complete Unit testing

4. Less time to complete Integration testing


Testing

1. Detailed level of test strategy, test

scenario

2. Usage of testing techniques
3. Detailed test data preparation

4. Detailed coverage of Regression test




1. Less time to complete Functional testing

2. Less time to complete System testing

3. Increased ability to find defects before customer release


Test Automation

1. Automation of repeated tasks

2. Automation of high priority modules



1. Less time to complete tests
  2. Less resources required to test


Analysis of Production Defects

1. Analysis of Key trends in defects

2. Analysis of gaps in regression scripts

3. Improvements in regression test
4. Improvement in other development processes


 
  1. Timely fixing of common issues

2. Lesser time to complete Regression testing

3. Reduction in number of defects in future product releases

Success Criteria
Though prevention is a good method to improve overall benefits to organization, there are important areas that should be in place to enable the overall success in a longer run:

    #1 Commitment of Management – Management should be committed to this goal. Management team should also provide their time to review the progress and to manage any identified risk. Without commitment from management, it is not possible to improve quality through Prevention methods as it may require significant level of investments initially.
   
    #2 Support of Management – Quality focus should be followed in a top to down approach and must be supported by management on regular basis. This support should be extended to the team so that they are motivated and get adequate resources and tools to perform their work.
   
    #3 Trainings – Everyone in the team should be trained adequately on the required processes. As the change may require significant alteration, in the way people work. Training needs should be evaluated frequently to help team understand on usage of various processes, tools and techniques.

    #4 Attitude and Discipline – Everyone in the team must understand and agree to the common goal and should be motivated to carry the same level of standards. After all it’s the attitude and discipline that makes any improvement process successful.

    #5 Continuous improvements – Prevention is part of continuous improvement process. It should be frequently evaluated by the teams and any required change should be adopted. Though change is good to follow but one also needs to be careful and should not apply changes too frequently. This may divert and distract the focus of the teams. It’s all about striking the right balance.

    #6 Feedback from Customers – Though it is good to learn from internal processes and procedures, it is equally important to collect frequent feedbacks from customer. Also analysis of all defects reported by customers can be helpful in providing a good direction on where we should focus for improvements. Most of the successful software product organizations enables customer to provide their feedbacks through various forums, regular interaction sessions, user groups meetings, seminar, webinar etc.

Tuesday, June 22, 2010

How much quality is good enough?

Imagine if somebody says 'The quality of a product is 99% defect free'. Seems like WOW!! isn't it?

Think again. In term of deviation this (99% accuracy) stands at around 4 Sigma which means around 6000 defects per million opportunities. Now consider this:

3 Sigma is 93.3% accuracy - 66807 defects per million opportunities
4 sigma is 99.38% accuracy - 6210 defects per million opportunities
5 sigma is 99.97% accuracy - 233 defects per million opportunities
6 sigma is 99.99966% accuracy - 3.4 defects per million opportunities
7 sigma is 99.9999981% accuracy - 0.019 defects per million opportunities

Now let's compare some data:
  1. If we send 3 Million letters to the users that means
    1. With 4 sigma we will lose 3000 letters
    2. With 6 sigma we will lose only 1
  2. For every week of TV broadcasting per channel
    1. With 4 sigma 1.7 hours of dead air broadcast
    2. With 6 sigma 1.8 seconds of dead air broadcast
  3. Out of every 500,000 computer restarts
    1. With 4 sigma around 4000 system crashes
    2. With 6 sigma Less than 2 system crashes 
  4. Total flight canceled in US every 3 weeks
    1. With 3 sigma 964 flights cancellations in a day
    2. With 4 sigma 30 flights cancellations
    3. With 6 sigma 1 flight cancellations
Many of the spaceship and medical advancement projects runs at more than 7+ sigma quality standard as there are no scope whatsoever, for errors, due to the level of cost, time and importance surrounding those projects.

Amazingly, mumbai dabbawalas stands at a whopping 7+ sigma (only 1 defect in 6 Million opportunities). This is a really amazing, considering that most of the workers (5000 workers and 170 thousand lunch boxes a day) are uneducated and uses only a color code system to identify lunch boxes. Who says to be high quality processes it needs to be complex. Instead it just needed to be simple and effective!! Isn't it?

Currently we do not see many IT organizations implementing Six Sigma level processes and only very few organizations implementing this practice. In future we might see such level of quality implemented in IT projects but that may be some time, from now. Many organizations desist from this practice as short term investment might be high and returns are primarily long term only.

BTW, you can also get sigma values for some of the things around you e.g.: 'Number of defects per million line of code' or 'Number of defect you found per thousand test steps' and check the sigma value for the same...Have fun.

Friday, June 18, 2010

What are the effective (and efficient) ways to acquire vast knowledge in a particular domain?

One of my friend, Inder Pal, posted a very good question on how to acquire knowledge in a particular domain. This is very important aspect for a tester as vast knowledge on a particular domain gives a big edge to the tester. This will help you become Subject Matter Expert (SME) within your organization and increases your overall credibility. 


Here are my thoughts on this:


1. Getting involved in Business process testing - Getting involved during business process test helps understand the way business is done and is a effective way to learn a particular domain

 2. Attending workshops with the customers and consulting groups - Attending workshops with the customers help understand various key configurations required to run the business. Given an opportunity this will help any tester. But these opportunities are not available to everyone and those who gets this opportunity should use to the fullest.


3. Participation in Alpha, Beta and UAT with customers - What else can give you a better exposure than working and participating in the testing done by any customer? You should observe and learn the key tests customers are exercising. Also try if you can get these acceptance scripts that you can use to improve your test repository.


4. Understanding of regulatory guideline (if existing on a particular domain) - If there are any regulations application on your domain and product then it is a must for a tester. The severity of any bug from a regulatory perspective will be much higher and it can have big impact on your organization and your customer business. Due attention should be given to learn regulations and guidelines. Any product that have good compliances to the regulatory processes get higher credibility in the industry. 


5. Learning by doing specific degree, course, training, seminar, certifications etc - Check if there is any degree, course, training or seminar that can help you understand the domain well. Also you can do certain certifications if applicable to your domain. At the same time you need to research on the credibility of particular course and it is not effective and recognized in the industry then it will cost you both money and time, so you need to be careful if you are planning to go for one. 


6. Internal or external trainings - There are many time organizations provide training to the employees. You should lookout for any possible opportunities to attend the same. Also there are external trainings that you can attend, but as I told earlier, you should be careful and should always check the cost, benefits and ROI from such investments.


7. Going through the knowledge base (past projects artifacts) available in a organization - Almost all organizations have some sort of knowledge base available within organization and you should make good usage of available resources. E.g. Test plans, good test cases, learning from past are some of the assets that you may use.


8. Interacting with your friends, relatives, blogs and forums - If there are friends and relatives who are also working in similar domain then try to seek information that may be useful to you. You can also subscribe to various blogs and forums related to your domain as these are very effective ways to learn and get clarifications to your questions and queries.

 9. Attending conferences, seminars, webinars related to the domains and listening to the thought leaders - Try to see if you can attend any related conferences, seminars, webinars as these are very good source of getting valuables inputs for you to learn related knowledge.


10. Understanding and learning new researches, trends, advancements and regulations in a particular domain - This is a very important area that you should continuous and consistently follow. Learn new trends and advancement in domain will help you earn credibility within your organization and industry.