Posts

QA Metrics - Testing Progress Metrics

Quality Progress Metrics Start tracking before Test Execution User Stories, Features or Requirements Coverage Progress Are test cases being authored for all required stories, features or requirements? Are test cases for important features or requirements being targetted first? Are number of test cases (for stories, features or requirements) proportional to effort required for their development? Are there any features, stories or requirements being left over? Is team on target in covering all required features, stories or requirements? Test Case Readiness Progress When will all the test cases be ready to run? Will all the test cases be ready to run by the end of the iteration? How many test cases must the team still write and review? How many test cases are ready to run? Test Automation Progress How many test cases has been automated? How many test cases being automated on regular basis? Is the team on track in automating the test cases? Start tracking during Te

Manual Testing Core Activities

Manual Testing Core Activities What are the core activities of testing especially for manual testers? How should we plan testing efforts? Most of the time, I have seen effort of review activities and retesting of defects are being ignored heavily and schedule get hit because of that. Following are the core test activities should be considered while planning - Test Ideas (Not Reviewed): Test idea is a test case with only summary and no details Test Ideas (Reviewed L1): Test ideas reviewed by peer team member Test Ideas (Reviewed L2): Test ideas reviewed by Test Lead / Test Manager Test Ideas (Signed-off): Test ideas reviewed by client and signed-off Test Cases (Not Reviewed): Test case is extension of test idea, putting more details around test idea (descriptive, detailed, Clear steps for execution, Test Data information etc.) Test Cases (Reviewed L1): Test cases reviewed by peer team member Test Cases (Reviewed L2): Test cases reviewed by test lead / test manager. Review

Testing Metrics & Measurement

Metrics & Management You are conducting testing for a product and in middle of testing, Product Owner (PO) would like to know the quality of the product. What to answer? How to measure the quality of the product? If number of open defects are huge, especially the high severity defects, than it is easy to answer this question - "At a moment product sucks". But how about if number of open defects are very less in number, especially if no high severity defect exists? Is the quality of the product good? It depends on how long high severity defects are not being found and other important aspect is to check the coverage of testing. What percentage of requirements tested? What percentage of code has been covered during the testing? If coverage is less than quality of product can't be measured rather only quality of features can be explained. If number of high severity defects are less in number and not being raised for a longer time and coverage is also almost m

Integration of Testing Process in Sprint

Integration of Testing Process in Sprint 1. Understanding the stories context from testability perspective Phase: Sprint Planning Stories should be understood from end users perspective It should be clear for testers, what are the changes and the reasons behind those changes Missing test requirements (e.g. login / password, contest id, test environment accessibility, access to new features etc.) What should be done to overcome the requirements? Track missing requirements and make it available as soon as possible Features or requirements or part of requirements is not testable (e.g. not permissible to login to Salesforce etc.) 2. Create a running document, containing clarifications and its resolution Phase: Sprint Planning A document that contain history of all questions or concerns being raised A reference document for tester, when in doubt Document for product owner to know how well equipped his / her testers are 3. Add notes to testers, testing ideas or

Refactoring Methods

Refactoring List Composing Methods Properly Extract Method Turn the fragment into a method whose name explains the purpose of the method Benefit is that original method become shorter and easier to comprehend Inline Method A method's body is just as clear as its name Put the method's body into the body of its callers and remove the method Inline Temp You have a temp that is assigned to once with a simple expression and the temp is getting in the way of other refactorings Replace all references to that temp with the expression Replace Temp with Query You are using a temporary variable to hold the result of an expression Extract the expression into a method. Replace all references to the temp with the expression. The new method can then be used in other methods By replaceing the temp with a query method, any method in the class can get the information cleanly Introduce Explaining Variable Put the result of the complicated expression, or parts of the

List of Code Smells

Bad Smells in Code Duplicate Code Identical or very similar code exists in more than one location Can use 'Extract Method' refactoring Long Method A method, function or procedure that has grown too large Good naming of method is a key over here Instead of comment, add method with name explaining intention of the code Look for conditional and loops expressions Large Class When a class is trying to do too much, it often shows up as too many instance variables, sometimes call as 'God' object Check if few attributes can be segregated as another component or another subclass For GUI class, you may need to move data and behavior to a separate domain object Long Parameter List A long list of parameters in a procedure or function make readability and code quality worse In object oriented programs, parameters list tend to much smaller than procedural language If possible, remove parameter(s) and let receiver invoke method(s) to get values by

Refactoring - Replace Temp with Query

Motivation:  You are using a temporary variable to hold the result of an expression. public double GetDiscountedPrice() { double basePrice = _quantity * _itemPrice; double discountFactor; if (basePrice > 1000) discountFactor = 0.95; else discountFactor = 0.98; return basePrice * discountFactor; } Refactor as: public double GetDiscountedPrice() { return BasePrice() * DiscountFactor(); } private double BasePrice() { return _quantity * _itemPrice; } private double DiscountFactor() { if (BasePrice() > 1000) return 0.95; else return 0.98; }