As the world moves towards digital economy, the path way is littered with failures that could have been avoided if the software is tested earlier. Be it hackers targeting the debit cards or an error in a thermostat app keeps residences hot — the underlining reason is a glitch in software. It is very important to thoroughly test the software before it goes into the hands of our customers. Failure to abide by this contract can not only result in financial losses, but also negatively impacts our company's reputation, brand and business. With social media more often than not focusing on the negativity — our companies may also face user migration.

“Automation does not do what testers used to do, unless one ignores most things a tester really does. Automated testing is useful for extending the reach of the testers work, not to replace it.”— James Bach

It is very important for us to strictly adhere to testing early and testing often.

What is Functional Testing?

Functional testing is part of the quality assurance process. It is a form of black box testing — the test cases being based on the specifications of the application under test. Functional testing is based on What an application does, rather than how the task is performed.

Functional tests often include (but not limited to) various user actions and scenarios, user interface screens, business requirements and external system interfaces. The tests are created using the available artifacts like specifications, user stories, acceptance criteria.

Creating Functional Tests

Functional tests are created using the specifications and typically follow the below steps:

  1. Identifying the functions that the application is expected to perform and convert them into scenarios.
  2. The creation of input data and corresponding expected output.
  3. Execution of the test case.
  4. Comparison of expected and actual results.
  5. Collation of results.

Importance of Automation in Functional Testing

Automated functional testing, when planned and performed well, can improve the quality and stability of the application. Simultaneously it strengthens the feedback loop between testing and development providing significant time savings.

Automating functional tests that differ only on the input and expected outputs greatly reduces effort in running tests. These type of tests also offer us an oppurtunity to validate many more data points than what is possible with manual testing.

Most of us deliver software on multiple platforms. An automated test suite allows great benefits to run the tests on multiple platforms with little or no modifications to the test scripts.

Strategising Functional Test Automation

“Strategy without tactics is the slowest route to victory, tactics without strategy is the noise before defeat.” —Sun Tsu, Ancient Chinese Military strategist

Creating a strategy is the first step in creating a succesful functional test automation. Keep the following in mind when you create a test strategy.

  1. Right Team A combination of test automation experts, product experts and people with authority who can align the team with the business goals is what you should look for in the team. A right team will go a long way for the success of the project.
  2. Automation Tool Selecting a right tool goes a long way in ensuring the success. The tool should support not only the platform, but also should be flexible enough for us to extend and enhance the functionality if so required.
  3. Test Environment and Test Data Aligning the environment with the production system and using realistic data that we access from a production system (maybe after masking) helps in creating robust tests.
  4. Test Execution Define the way tests are executed, what the status of tests will be like pass, fail, differed etc., upfront. Whether the test execution is based on a schedule (every day a 6PM) or integrates with a Continuous Integration (CI) server or manually executed — all these options effect the way our teams work and are utmost importance for project success.
  5. Maintenance As the time goes by the product functionalities gets modified, new functionalities gets added. Plan for maintenance of the test suite during these periods. An unmaintained test suite will not be useful and soon will be abandoned.

Ensuring Success

We need to focus on the right things for ensuring the success of the functional test automation.

  1. Application Knowledge The team should have the knowledge about the application and domain. To create a robust test suite the team should be equipped with people with deep understanding of the application functionality.
  2. Selecting Tests to Automate It is not possible to achieve 100% test automation for any moderately complex application. Alternatively, focus on the critical paths of the applications and select the scenarios and functionalities that lie in this path. In most applications the functionalities in the critical path are more stable and hence also helps in creating a stable test suite.
  3. Testing Early and Testing Often To ensure the success of test automation and to maximize the benefits, start the automation during the development and continue it during the maintenance phase. All said and done, a test automation project is also a type of development project – Plan it as one.

    “Here is the dilemma in software development: defects are expensive, but eliminating defects is also expensive.” writes Kent Beck and Cynthia Andres in Extreme Programming Explained: Embrace Change “However, most defects end up costing more than it would have cost to prevent them.”