My Principles of test engineering
- Always test to fulfill a specific objective. Even exploratory testing has its objectives.
- Use software testing as an information gathering and communications tool.
- Aim to gain confidence in a software release; and/or software while in operation.
- Engineer tests to discover defects.
- Engineer tests to prevent defects.
Risk Based Testing - My go-to approach for test engineering
I assess technical, and business risk of software change. I use various techniques to get this done. Requirement analysis, code reviews, and risk matrix are some of them. Then I assess probability of said risks. Probability analysis could be tricky; but plays a key role in assessing the test effort to be dispensed.
Using the information gathered above, I'd generate risk-scores. These will be used to guide the team on:
- Test coverage requirements (how much testing is required)
- Resource allocation (how much time needs to be spent / how many people)
- Test priority management (when to test, what)
I track and manage test projects monitoring risk coverage. Risk coverage is also used for answering critical questions about software quality and test coverage.
Managing test environments
I find this being one of the most basic testing requirements that is neglected by team. The availability of a Production-like test environment(s) is key for software testing effectiveness and efficiency. The software test environment is quite similar to a well run chemist's test lab. It needs to be: access controlled; and sanitary. Some of my other techniques are listed below:
- Use of ‘known’ data-sets that are readily available; and, represents all known permutations of data scenarios.
- Repeatable processes to create and demolish test environments.
- Return test lab to known start state after tests
- Create visibility in test environment content (build version, data version, owner, status).
My go-to techniques in test design
- Boundary value analysis
- Branch coverage
- Decision tables
- State transition
- Data flow
- Process flow
- Experience based
- Requirement, risk, acceptance criteria, based
My principles in Test Automation
- Automate repeated tests (regression tests)
- Automate where it makes sense
- Choose an automation framework that satisfies the requirement; not the one that you're used to
- Human-independent automated test execution and reporting
- Complete configurability
- Integrated with test management software, and other communication tools, such as Slack
- Automate tests to manage CI health
- Maintain scripts regularly; with dedicated resources
Managing defects
Perhaps, one of the most exciting areas of software testing is defect detection and management. Here are some of my go-to techniques and basic guidelines I follow:
- Start with impact
- Prioritize and triage often
- Generate urgency scores where necessary
- Communicate defects to stakeholders. Over communicate if necessary
- Predict defects and be proactive (predictive analysis)