During a presentation of the ROM2, the importance of good process construction, proper testing and continuous service improvements was frequently highlighted without going into the detail of how this was achieved.
Thus, when developing BluePrism processes, it is critical to invest in increasing process quality and an efficient testing process in terms of both cost and time investment.
When it comes to process development, there are a number of important factors to consider. One of the most important factors is process quality. This refers to the extent to which the process meets the specified requirements and has the ability to function safely and reliably. Another important factor is process complexity. The more complex the process, the more chance of errors and problems and the more difficult to test. When complexity increases the possibility for introducing errors and the difficulty to test escalates. It is important to reduce implementation complexity by choosing simple workflows, using business logic and reducing redundant actions. A general rule adopted is that the more paths through a piece of code, the more complex it is.
To my opinion, BluePrism implementations also have cyclomatic complexity that depend on the size and complexity of the processes, sub-processes and object actions and the amount of decision points in these components. A BluePrism implementation with high cyclomatic complexity can lead to problems such as poor performance, higher costs and errors. That is why It is important to reduce cyclomatic complexity to ensure the quality of the implementation. Several scientific papers have shown that there is a positive correlation between cyclomatic complexity and the probability of errors in software programs (e.g., Jones, 1986). Another study has shown that reduced cyclomatic complexity contributes to improved readability, maintainability and testability of software programs (e.g., McCabe, 1976). Cyclomatic complexity is a also an important factor in the quality of a BluePrism RPA implementation. Reducing complexity can prevent problems and ensure the quality of the implementation.
Cyclomatic complexity could be an indicator of the quality of BluePrism process / object implementations. This indicator aims to measure and quantify the complexity of a process. The higher the cyclomatic complexity, the more difficult it is to understand and maintain the process. McCabe's Cyclomatic Complexity can also identify the points that generate the complexity. These points are also called "cyclomatic paths" and can be found by analyzing the graphical representation. Each decision point (decision stage, choice stage, loops, etc.) potentially generates a new cyclomatic path, increasing the complexity of the flow in the process and/or object. By identifying these cyclomatic paths, the flow can be optimized to reduce complexity and improve readability and maintainability.
Some studies that can help in this regard are the following:
"Cyclomatic Complexity and Software Maintenance" by Thomas J. McCabe - This 1976 article introduced cyclomatic complexity as a measure of software complexity.
"An Empirical Study of the Relationship Between Cyclomatic Complexity and Software Maintenance" by Jaroslav Pokorný and Petr Baudiš - This 2014 article presents a study examining the relationship between cyclomatic complexity and software maintenance.
"An Efficient Algorithm for Computing Cyclomatic Complexity of Programs in java" by Surya Narayan Sharma and Suresh Kumar - This 2017 article describes an efficient algorithm for computing the cyclomatic complexity of Java programs.
In addition to cyclomatic complexity, there are other measurable factors that can affect the quality of BluePrism RPA implementations.
Some important factors are:
Duplication in processes and objects: When a piece of implementation is used in multiple places, it can lead to problems in maintaining and extending processes and/or objects. Duplication should therefore be minimized.
Test coverage: To ensure that the BluePrism RPA implementation works properly, it is important to write tests that cover all functionality of the process/object flows. The more tests that are written, the better the quality of the implementation. Test coverage is the extent to which a test suite covers all possible paths in the process /object under test. A cyclomatic path is a sequence of steps through a process /object flow that touch each logical path or decision point in the program once. To determine test coverage based on the given test suite and cyclomatic paths, each path in the test suite must be analyzed to determine if it corresponds to a cyclomatic path. If a given cyclomatic path is not covered by the test suite, more test cases must be added to the suite to cover the path. Test coverage can then be calculated as the percentage of all possible cyclomatic paths in the program that are covered by the test suite. The ultimate goal is to achieve high test coverage so that there is sufficient assurance that the software program is functioning correctly and meeting customer expectations. So if we know the cyclomatic paths of a process/object, we can derive a desired dataset that maximizes test coverage. This dataset is often referred to as a "test suite." The purpose of a test suite is to ensure that each test performed contributes to testing a unique path in the flows. The process of deriving a test suite is quite cumbersome and can be done manually or automated. It involves going through each path in the flow and identifying the requirements for the inputs of each function and each condition to be considered. This requires in-depth knowledge of the flows in the process/object and the ability to identify "corner cases" that may lead to errors in the flows. In addition to manually deriving a test suite, tools can also be used to automate the testing process. These tools could take the cyclomatic complexity of the flow as input and generate the test cases that test each line and branch of the flow. This results in a test suite that comprehensively tests the flows and would provide maximum coverage. In short, knowing the cyclomatic paths of a process/object can lead to deriving a test suite that maximises test coverage. This can be done manually, but should also be possible with tools to automate the process. The purpose of a test suite is to ensure that each test performed contributes to testing a unique path in the flows, which is important to ensure software quality.
Readability: A good implementation is easy to understand, even for people who are not directly involved. Readability can be improved by using meaningful variable names and clear process/object formatting.
Process testing does not stop at one test. It is important to conduct regular regression testing to ensure that any changes to the process and environment do not have unexpected side effects. Test suites with associated test data that ensure high coverage can be used to detect regressions in advance. This also helps to detect any errors and problems quickly and efficiently.
There is also the continuous service improvement component which is an important aspect of process development. This means that continuous improvements are made to increase efficiency and improve quality. This is achieved by constantly monitoring the performance of the process and addressing problems immediately. Efficiency is essential in process testing. Efficiency means using minimal time and resources to complete the testing process without compromising the quality of the tests. By having proper test suites, test coverage, regression testing and continuous improvement, you can ensure that the processes and objects are of high quality and tested efficiently.
It is important to consider these factors when designing and implementing BluePrism processes and/or objects. Scientific articles that offer more information on these topics include "The Relationship Between Cyclomatic Complexity Metrics and Software Quality: A Controlled Experiment" by D.R. Kuhn and "Agile vs Traditional Methods: A Meta-Analysis of The State of The Art" by A. Subramanian et al.
Perhaps a study topic for a graduate student to measure the quality of BluePrism processes and objects?
... View more