{"id":3374,"date":"2021-08-20T12:55:16","date_gmt":"2021-08-20T12:55:16","guid":{"rendered":"https:\/\/devexperts.com\/blog\/?p=3374"},"modified":"2022-07-29T11:16:48","modified_gmt":"2022-07-29T11:16:48","slug":"capital-markets-software-risk-based-testing-challenges","status":"publish","type":"post","link":"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/","title":{"rendered":"Capital Markets Software: Risk-Based Testing Challenges"},"content":{"rendered":"\n<div class=\"wp-block-devexperts-custom-thumbnail\"><figure><picture><source media=\"(max-width: 639px)\" data-srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/1148x1148-574x574.png 2x, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/1148x1148-300x300.png 1x\"\/><source media=\"(min-width: 640px) and (max-width: 767px)\" data-srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/2336x1314-1168x657.png 2x, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/2336x1314-600x338.png 1x\"\/><source media=\"(min-width: 768px) and (max-width: 1023px)\" data-srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/2336x1314-1168x657.png 2x, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/2336x1314-728x410.png 1x\"\/><source media=\"(min-width: 1024px) and (max-width: 1279px)\" data-srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/2336x1314-1168x657.png 1x, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/2336x1314-690x388.png 1x\"\/><source media=\"(min-width: 1280px)\" data-srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/2336x1314-1752x986.png 2x,\n\t\t\t\thttps:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/2336x1314-1752x986.png 1.5x,\n\t\t\t\thttps:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/2336x1314-870x489.png 1x\"\/><img decoding=\"async\" class=\"singleThumbnail lazyload\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/2336x1314-1024x576.png\" data-src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/2336x1314-870x489.png\"\/><\/picture><\/figure><\/div>\n\n\n\n<p>Watch Dmitry\u2019s talk on risk-based testing challenges at the recent QA Financial Forum.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"The QA Financial Forum 2021: Risk-based testing challenges by Devexperts\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/kuch3qeehi0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-introduction\">Introduction<\/h2>\n\n\n\n<p><br>There are four main challenges teams usually face while implementing automation testing \u2014 or any testing in general:<br>\u2022 Coverage \u2014 ability to <em>track<\/em> amount of requirements being verified<br>\u2022 Test data \u2014 ability to <em>prepare<\/em> valid data assets to test with<br>\u2022 Configuration \u2014 ability to <em>identify and provide<\/em> required testing setup and environment and make sure execution goes as designed<br>\u2022 Reporting \u2014 ability to <em>articulate<\/em> testing results for decision making<br>The industry is in really good shape when it comes to dealing with these challenges. There are plenty of great tools available to help us build our test management system, so a typical software pipeline is a superposition of these tools.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"219\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-1024x219.png\" alt=\"Fairly typical QA automation stack\" class=\"wp-image-3375\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-1024x219.png 1024w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-300x64.png 300w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-70x15.png 70w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-454x97.png 454w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-574x123.png 574w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-861x184.png 861w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-290x62.png 290w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-277x59.png 277w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-354x76.png 354w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-531x113.png 531w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-600x128.png 600w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-690x147.png 690w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-728x155.png 728w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-870x186.png 870w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-928x198.png 928w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-1168x249.png 1168w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-1752x374.png 1752w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-768x164.png 768w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-1536x328.png 1536w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-2048x437.png 2048w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-320x68.png 320w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-382x82.png 382w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-578x123.png 578w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-1366x292.png 1366w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-1680x359.png 1680w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/qa_stack-1920x410.png 1920w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><\/figure>\n\n\n\n<p>But as our products and processes mature, new challenges arise, such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Coverage \u2014 is it possible to apply dynamic risk-based testing?<\/li><li>Test data \u2014 how to operate shared test assets and system states?<\/li><li>Configuration \u2014 how to manage an ever-growing number of unique execution pipelines and operate them effectively?<\/li><\/ul>\n\n\n\n<p>Let\u2019s dive in and try to answer these questions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-risk-based-testing\">Risk-based testing<\/h2>\n\n\n\n<p><em>Risk<\/em> is the probability of an unforeseen event that can negatively affect the behavior of a software product and, therefore, the entire business. Risk identification, assessment, and mitigation are thus vital parts of any SDLC. These activities play key roles in product release planning, especially for businesses offering 24\/7 service, like our clients, who are stock or forex brokers and cryptocurrency exchanges.<\/p>\n\n\n\n<p><em>Risk-based testing<\/em> is a technique that uses risk assessment to select and prioritize test suites and test the most critical and risk-prone blocks first.<\/p>\n\n\n\n<p>Risk-based testing is essential for Agile teams working in intensive sprints, as it is the best way to get the highest possible quality within a given timeframe. And most importantly for automation teams: <em>risk-based testing is applicable to expensive types of test automation<\/em>.<\/p>\n\n\n\n<p>To understand that, let\u2019s look into the \u2018expensive\u2019 part, as some may say \u2014 &#8216;<em>automation is free, it costs nothing to run once written\u2019<\/em>. Well, it costs <em>something<\/em> \u2014 let\u2019s do the simple maths.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-combinatory-overdose-problem\">Combinatory overdose problem<\/h3>\n\n\n\n<p>In a relatively common trading system, there are two <em>account types<\/em> (Cash and Margin). One can use <em>order types<\/em> (Market, Limit, or Stop) with five time in force<sup><a href=\"#footnote_1_3374\" id=\"identifier_1_3374\" class=\"footnote-link footnote-identifier-link\" title=\"Investopedia, Time in Force, https:\/\/www.investopedia.com\/terms\/t\/timeinforce.asp\">1<\/a><\/sup> instructions to <em>buy<\/em> or <em>sell<\/em> <em>assets<\/em> (stocks, bonds, funds, metals, futures, options, Forex, CFDs or Crypto). Orders are <em>placed<\/em> so as to be <em>triggered<\/em> by price, and you can <em>edit<\/em> or <em>cancel<\/em> them, while, depending on the current market situation, the system can <em>expire<\/em>, <em>reject<\/em> or <em>fill<\/em> them, or <em>fill<\/em> <em>them<\/em> <em>partially.<\/em><\/p>\n\n\n\n<p>Therefore, exhaustive testing of such a simple system would require<\/p>\n\n\n\n<p><em>2&nbsp;&nbsp; \u00d7 3 \u00d7 5 \u00d7 2 \u00d7 9 \u00d7 8 = 4320 combinations<\/em><\/p>\n\n\n\n<p>Let\u2019s assume we have perfectly stable, predictable and bug-free UI automation giving us 30 seconds per combination. In this case, running these tests in 10 threads will take 3.6 hours for full execution. And that\u2019s not even counting in other use-cases, like registration, position management, account statement and reporting activities, etc. Obviously, 3.6 hours is not acceptable for any CI\/CD process, and produces more CO<sub>2<\/sub> than sense.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-solution\">Solution<\/h3>\n\n\n\n<p>To balance benefits and expenses, execute only a selected subset of automated tests. Query cases through the test management system and programmatically fetch them from the codebase to create a custom execution batch.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"728\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-1024x728.png\" alt=\"Selective execution algorithm\" class=\"wp-image-3378\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-1024x728.png 1024w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-238x169.png 238w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-70x50.png 70w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-300x213.png 300w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-454x323.png 454w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-574x408.png 574w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-861x612.png 861w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-290x206.png 290w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-277x197.png 277w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-354x252.png 354w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-531x378.png 531w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-475x338.png 475w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-546x388.png 546w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-577x410.png 577w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-688x489.png 688w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-734x522.png 734w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-924x657.png 924w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-1387x986.png 1387w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-768x546.png 768w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-1536x1092.png 1536w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-2048x1456.png 2048w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-320x228.png 320w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-382x272.png 382w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-578x411.png 578w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-1366x971.png 1366w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-1680x1195.png 1680w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/execution_algorithm-1920x1365.png 1920w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><\/figure>\n\n\n\n<p>For each sprint, based on the product backlog, you can semi-automatically tune up execution batches to cover the most critical scenarios.<\/p>\n\n\n\n<p>This way, you not only integrate tighter along the risk-based delivery pipeline \u2014 which is practically almost every commercial pipeline out there today anyway \u2014 but also spend time debugging only meaningful failures. In addition, you utilize your computational force in the most eco-friendly way!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-more-to-read\">More to read<\/h3>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\"><li>JIRA API<sup><a href=\"#footnote_2_3374\" id=\"identifier_2_3374\" class=\"footnote-link footnote-identifier-link\" title=\"JIRA API, https:\/\/developer.atlassian.com\/cloud\/jira\/platform\/rest\/v3\/api-group-jql\/#api-rest-api-3-jql-autocompletedata-get\">2<\/a><\/sup>, XRay API((XRay API, <a rel=\"noreferrer noopener\" href=\"https:\/\/docs.getxray.app\/display\/XRAY\/REST+API\" target=\"_blank\">https:\/\/docs.getxray.app\/display\/XRAY\/REST+API<\/a>)), TestRail API<sup><a href=\"#footnote_3_3374\" id=\"identifier_3_3374\" class=\"footnote-link footnote-identifier-link\" title=\"TestRail API, http:\/\/docs.gurock.com\/testrail-api2\/start\">3<\/a><\/sup>, HP ALM QC API<sup><a href=\"#footnote_4_3374\" id=\"identifier_4_3374\" class=\"footnote-link footnote-identifier-link\" title=\"HP ALM QC API, https:\/\/admhelp.microfocus.com\/alm\/api_refs\/REST\/Content\/REST_API\/Overview.htm\">4<\/a><\/sup><a href=\"https:\/\/admhelp.microfocus.com\/alm\/api_refs\/REST\/Content\/REST_API\/Overview.htm\"><\/a><\/li><li>JUnit5 launcher<sup><a href=\"#footnote_5_3374\" id=\"identifier_5_3374\" class=\"footnote-link footnote-identifier-link\" title=\"JUnit5 launcher, https:\/\/junit.org\/junit5\/docs\/current\/user-guide\/#running-tests-console-launcher\">5<\/a><\/sup> and tags<sup><a href=\"#footnote_6_3374\" id=\"identifier_6_3374\" class=\"footnote-link footnote-identifier-link\" title=\"JUnit5 tags, https:\/\/junit.org\/junit5\/docs\/current\/user-guide\/#running-tests-tag-expressions\">6<\/a><\/sup> NUnit TSL<sup><a href=\"#footnote_7_3374\" id=\"identifier_7_3374\" class=\"footnote-link footnote-identifier-link\" title=\"NUnit TSL, https:\/\/docs.nunit.org\/articles\/nunit\/running-tests\/Test-Selection-Language.html\">7<\/a><\/sup>, SpecFlow Filter, Cucumber tags and run options<sup><a href=\"#footnote_8_3374\" id=\"identifier_8_3374\" class=\"footnote-link footnote-identifier-link\" title=\"Cucumber run options, https:\/\/cucumber.io\/docs\/cucumber\/api\/#options\">8<\/a><\/sup><\/li><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-test-data-management\">Test data management<\/h2>\n\n\n\n<p>To properly execute test, you have to feed it with prepared data and configuration.<\/p>\n\n\n\n<p>Static data is relatively easy to prepare. For example, virtualized instances of a system, each supplied with an in-memory database and predefined data sets, are pretty good for component and integration testing.<\/p>\n\n\n\n<p>But when it comes to system or end-to-end testing, things get complicated. Certain types of tests may require dynamic control over data or changing the state of a running system.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-resource-distribution-and-mutability-problem\">Resource distribution and mutability problem<\/h3>\n\n\n\n<p>In Fintech, we have multiple types of test entities which have to be, on one hand, thread-safe and lockable, and on the other hand, controllable by tests. Examples include account portfolios, trading instrument configurations, or schedules.<\/p>\n\n\n\n<p><em>Safety<\/em>. Using the same critical entity in two parallel test threads usually results in unexpected behavior and cascade failures.To control test flow, you should avoid two parallel tests using the same entity.<\/p>\n\n\n\n<p><em>Control<\/em>. For many trading activities, the system has to change its state or the state of an entity. The simplest example is trading order activation when a specific market quote should pass through.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-solution-1\">Solution<\/h3>\n\n\n\n<p>Utilize the architectural pattern which we call <em>Test Service<\/em> pattern. It is a backend component that:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\"><li>interacts directly with system entities;<\/li><li>handles resource locking and distribution;<\/li><li>provides simple REST API for top layer testing frameworks.<\/li><\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"612\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-1024x612.png\" alt=\"Test service pattern implementation\" class=\"wp-image-3381\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-1024x612.png 1024w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-283x169.png 283w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-70x42.png 70w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-300x179.png 300w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-454x271.png 454w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-574x343.png 574w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-861x515.png 861w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-290x173.png 290w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-277x166.png 277w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-354x212.png 354w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-531x317.png 531w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-565x338.png 565w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-649x388.png 649w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-686x410.png 686w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-818x489.png 818w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-873x522.png 873w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-1099x657.png 1099w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-1650x986.png 1650w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-768x459.png 768w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-1536x918.png 1536w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-2048x1224.png 2048w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-320x191.png 320w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-382x228.png 382w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-578x346.png 578w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-1366x817.png 1366w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-1680x1004.png 1680w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/implementation-1-1920x1148.png 1920w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><\/figure>\n\n\n\n<p>Test service is <em>built using system APIs<\/em> and usually is an integral part of system delivery. This approach eases maintenance between system versions. &nbsp;<\/p>\n\n\n\n<p>Test service also handles distributed cache for resource locking using technologies like Hazelcast. Every testing framework running against a system explicitly registers its resource usage, so system entities are distributed evenly and safely.<\/p>\n\n\n\n<p>Test Service REST API enables top-level frameworks to perform significantly complex test scenarios and <em>standardizes system interaction<\/em> among all software stacks.<\/p>\n\n\n\n<p><em>The main downside<\/em> is that Test Service becomes a rather powerful backdoor. It&#8217;s critical to handle it with extra care and not expose it to production.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-more-to-read-1\">More to read<\/h3>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\"><li>Hazelcast documentation<sup><a href=\"#footnote_9_3374\" id=\"identifier_9_3374\" class=\"footnote-link footnote-identifier-link\" title=\"Hazelcast documentation, https:\/\/circleci.com\/docs\/api\/v2\/\">9<\/a><\/sup><a rel=\"noreferrer noopener nofollow\" href=\"https:\/\/circleci.com\/docs\/api\/v2\/\"><\/a><\/li><li>Distributed locks with Redis<sup><a href=\"#footnote_10_3374\" id=\"identifier_10_3374\" class=\"footnote-link footnote-identifier-link\" title=\"Distributed locks with Redis, https:\/\/redis.io\/topics\/distlock\">10<\/a><\/sup><\/li><li>Building REST services with Spring<sup><a href=\"#footnote_11_3374\" id=\"identifier_11_3374\" class=\"footnote-link footnote-identifier-link\" title=\"Building REST services with Spring, https:\/\/spring.io\/guides\/tutorials\/rest\/\">11<\/a><\/sup><\/li><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-configuration\">Configuration<\/h2>\n\n\n\n<p>Another challenge that can appear on our multi-platform, multi-targeted testing journey is the pipelines maintenance problem. To illustrate it, let&#8217;s go through an example.<\/p>\n\n\n\n<p>Tests are usually split into independent classes called <em>functional areas<\/em>. Every functional area of a product requires its own <em>unique set of preconditions<\/em> and can be tested relatively <em>independently from other areas<\/em>. During automated execution, tests from the same functional area are usually batched together first and then split into smaller subsets if needed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-pipelines-maintenance-problem\">Pipelines maintenance problem<\/h3>\n\n\n\n<p>For trading systems, examples of functional areas include authentication, trading activities, reporting, or third-party integrations (such as liquidity providers, payment systems or other institutional partners). In the most advanced modern systems, the number of FAs can go up to 30.<\/p>\n\n\n\n<p>If we multiply this by the average number of 20 patches per release and apply riskbased strategy, we get 20 \u00d7 30 = 600 unique execution configurations per release. &nbsp;<\/p>\n\n\n\n<p>It&#8217;s virtually impossible to manually maintain any pipeline configuration that supports this type of process.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-solution-2\">Solution<\/h3>\n\n\n\n<p>This problem can be solved by even tighter integration of existing solutions and automation of operational routines.<\/p>\n\n\n\n<p>It&#8217;s a good idea to start with automating our build scheduling. Check what your CI server provides as API. Chances are you can use it to manage your executions. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"948\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-1024x948.png\" alt=\"Risk-based automated pipeline\" class=\"wp-image-3382\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-1024x948.png 1024w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-182x169.png 182w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-70x65.png 70w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-300x278.png 300w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-454x420.png 454w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-574x532.png 574w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-861x797.png 861w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-235x218.png 235w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-225x208.png 225w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-287x266.png 287w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-430x398.png 430w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-365x338.png 365w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-419x388.png 419w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-443x410.png 443w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-528x489.png 528w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-564x522.png 564w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-709x657.png 709w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-1065x986.png 1065w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-768x711.png 768w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-1536x1423.png 1536w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-2048x1897.png 2048w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-320x296.png 320w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-382x354.png 382w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-578x535.png 578w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-1366x1265.png 1366w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-1680x1556.png 1680w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/automated_pipelane-1-1920x1778.png 1920w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><\/figure>\n\n\n\n<p>In our case, we\u2019ve created a custom TeamCity API scheduler allowing us to split, parameterize and execute custom execution tasks in a fully automatic way.<\/p>\n\n\n\n<p>If builds are orchestrated automatically, so shall the execution results. There are a few challenges to solve along the way:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\"><li>Parallel builds can have somewhat unpredictable execution times. To collect results properly, one needs to determine when all executions finally stop. It may be required to design some listener to monitor the status of the generated executions.<\/li><li>Well-thought logic is required at the result aggregation stage. If any of the test scenarios are split into multiple threads, check if the aggregated result reflects the system state. &nbsp;<\/li><\/ol>\n\n\n\n<p>Our solution: after splitting and generating, a test launcher marks all generated builds with a unique tag. The launcher registers this tag in a standalone watcher. The watcher uses TeamCity API to poll and aggregate the status of all executions registered per tag. Once all executions under a certain tag have been completed, the watcher triggers result collection. Collector gets all artifacts for a given tag, then applies hierarchical logic to compose the aggregated test report.<\/p>\n\n\n\n<p>As a result, the overall execution algorithm is practically one-button-runs-all, while under the hood it can include up to 200+ generated parallel TeamCity builds.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-more-to-read-2\">More to read<\/h3>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\"><li>TeamCity REST API, Jenkins Remote API<sup><a href=\"#footnote_12_3374\" id=\"identifier_12_3374\" class=\"footnote-link footnote-identifier-link\" title=\"Jenkins Remote API, https:\/\/www.jenkins.io\/doc\/book\/using\/remote-access-api\/\">12<\/a><\/sup>, GitLab API<sup><a href=\"#footnote_13_3374\" id=\"identifier_13_3374\" class=\"footnote-link footnote-identifier-link\" title=\"GitLab API, https:\/\/docs.gitlab.com\/ee\/api\/\">13<\/a><\/sup>, CircleCI API<sup><a href=\"#footnote_14_3374\" id=\"identifier_14_3374\" class=\"footnote-link footnote-identifier-link\" title=\"CircleCI API, https:\/\/circleci.com\/docs\/api\/v2\/\">14<\/a><\/sup><\/li><li>Devexperts Switchboard<sup><a href=\"#footnote_15_3374\" id=\"identifier_15_3374\" class=\"footnote-link footnote-identifier-link\" title=\"Devexperts Switchboard, https:\/\/github.com\/devexperts\/switchboard\">15<\/a><\/sup><\/li><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion<\/h2>\n\n\n\n<p>With the industry shifting more and more left and software markets becoming more and more demanding, risk-based testing has already become the most commonly used test planning technique for many Agile teams.<\/p>\n\n\n\n<p>While getting the great benefits this method brings, it&#8217;s important to find elegant solutions for challenges arising along the way.<\/p>\n\n\n\n<p><a rel=\"noreferrer noopener\" href=\"https:\/\/careers.devexperts.com\/\" target=\"_blank\">Join us to start finding ones together.<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-references\">References<\/h2>\n<ol class=\"footnotes\"><li id=\"footnote_1_3374\" class=\"footnote\">Investopedia, Time in Force, <a rel=\"noreferrer noopener\" href=\"https:\/\/www.investopedia.com\/terms\/t\/timeinforce.asp\" target=\"_blank\">https:\/\/www.investopedia.com\/terms\/t\/timeinforce.asp<\/a><span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_1_3374\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_2_3374\" class=\"footnote\">JIRA API, <a rel=\"noreferrer noopener\" href=\"https:\/\/developer.atlassian.com\/cloud\/jira\/platform\/rest\/v3\/api-group-jql\/#api-rest-api-3-jql-autocompletedata-get\" target=\"_blank\">https:\/\/developer.atlassian.com\/cloud\/jira\/platform\/rest\/v3\/api-group-jql\/#api-rest-api-3-jql-autocompletedata-get<\/a><span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_2_3374\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_3_3374\" class=\"footnote\">TestRail API, <a rel=\"noreferrer noopener\" href=\"http:\/\/docs.gurock.com\/testrail-api2\/start\" target=\"_blank\">http:\/\/docs.gurock.com\/testrail-api2\/start<\/a><span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_3_3374\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_4_3374\" class=\"footnote\">HP ALM QC API, <a rel=\"noreferrer noopener\" href=\"https:\/\/admhelp.microfocus.com\/alm\/api_refs\/REST\/Content\/REST_API\/Overview.htm\" target=\"_blank\">https:\/\/admhelp.microfocus.com\/alm\/api_refs\/REST\/Content\/REST_API\/Overview.htm<\/a><span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_4_3374\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_5_3374\" class=\"footnote\">JUnit5 launcher, <a rel=\"noreferrer noopener\" href=\"https:\/\/junit.org\/junit5\/docs\/current\/user-guide\/#running-tests-console-launcher\" target=\"_blank\">https:\/\/junit.org\/junit5\/docs\/current\/user-guide\/#running-tests-console-launcher<\/a><span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_5_3374\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_6_3374\" class=\"footnote\">JUnit5 tags, <a rel=\"noreferrer noopener\" href=\"https:\/\/junit.org\/junit5\/docs\/current\/user-guide\/#running-tests-tag-expressions\" target=\"_blank\">https:\/\/junit.org\/junit5\/docs\/current\/user-guide\/#running-tests-tag-expressions<\/a><span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_6_3374\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_7_3374\" class=\"footnote\">NUnit TSL, <a href=\"https:\/\/docs.nunit.org\/articles\/nunit\/running-tests\/Test-Selection-Language.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/docs.nunit.org\/articles\/nunit\/running-tests\/Test-Selection-Language.html<\/a><span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_7_3374\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_8_3374\" class=\"footnote\">Cucumber run options, <a href=\"https:\/\/cucumber.io\/docs\/cucumber\/api\/#options\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/cucumber.io\/docs\/cucumber\/api\/#options<\/a><span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_8_3374\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_9_3374\" class=\"footnote\">Hazelcast documentation, <a rel=\"noreferrer noopener\" href=\"https:\/\/circleci.com\/docs\/api\/v2\/\" target=\"_blank\">https:\/\/circleci.com\/docs\/api\/v2\/<\/a><span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_9_3374\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_10_3374\" class=\"footnote\">Distributed locks with Redis, <a rel=\"noreferrer noopener\" href=\"https:\/\/redis.io\/topics\/distlock\" target=\"_blank\">https:\/\/redis.io\/topics\/distlock<\/a><span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_10_3374\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_11_3374\" class=\"footnote\">Building REST services with Spring, <a rel=\"noreferrer noopener\" href=\"https:\/\/spring.io\/guides\/tutorials\/rest\/\" target=\"_blank\">https:\/\/spring.io\/guides\/tutorials\/rest\/<\/a><span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_11_3374\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_12_3374\" class=\"footnote\">Jenkins Remote API, <a rel=\"noreferrer noopener\" href=\"https:\/\/www.jenkins.io\/doc\/book\/using\/remote-access-api\/\" target=\"_blank\">https:\/\/www.jenkins.io\/doc\/book\/using\/remote-access-api\/<\/a><span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_12_3374\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_13_3374\" class=\"footnote\">GitLab API, <a href=\"https:\/\/docs.gitlab.com\/ee\/api\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/docs.gitlab.com\/ee\/api\/<\/a><span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_13_3374\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_14_3374\" class=\"footnote\">CircleCI API, <a rel=\"noreferrer noopener\" href=\"https:\/\/circleci.com\/docs\/api\/v2\/\" target=\"_blank\">https:\/\/circleci.com\/docs\/api\/v2\/<\/a><span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_14_3374\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_15_3374\" class=\"footnote\">Devexperts Switchboard, <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/devexperts\/switchboard\" target=\"_blank\">https:\/\/github.com\/devexperts\/switchboard<\/a><span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_15_3374\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><\/ol>","protected":false},"excerpt":{"rendered":"<p>Watch Dmitry\u2019s talk on risk-based testing challenges at the recent QA Financial Forum. Introduction There are four main challenges teams &hellip; <\/p>\n","protected":false},"author":32,"featured_media":3436,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2020],"tags":[25],"class_list":["post-3374","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fintech","tag-qa"],"acf":{"nifty_post_card_image":4554,"nifty_post_card_index_big":4555,"nifty_post_inner_image":4556,"nifty_post_card_banner":4557},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Capital Markets Software: Risk-Based Testing Challenges \u2014 Blog<\/title>\n<meta name=\"description\" content=\"Risk-based testing has become the most commonly used test planning technique for many Agile teams. Find out about its challenges and how to deal with them\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Capital Markets Software: Risk-Based Testing Challenges\" \/>\n<meta property=\"og:description\" content=\"Risk-based testing has become the most commonly used test planning technique for many Agile teams. Find out about its challenges and how to deal with them\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/\" \/>\n<meta property=\"og:site_name\" content=\"Devexperts Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/devexperts\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-08-20T12:55:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-07-29T11:16:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/rope_walker_linkedin.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Dmitry Gorbunov\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/rope_walker_twitter.png\" \/>\n<meta name=\"twitter:creator\" content=\"@devexperts\" \/>\n<meta name=\"twitter:site\" content=\"@devexperts\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dmitry Gorbunov\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/\"},\"author\":{\"name\":\"Dmitry Gorbunov\"},\"headline\":\"Capital Markets Software: Risk-Based Testing Challenges\",\"datePublished\":\"2021-08-20T12:55:16+00:00\",\"dateModified\":\"2022-07-29T11:16:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/\"},\"wordCount\":1641,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/devexperts.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/Rope_walker_3840x700-1.png\",\"keywords\":[\"QA\"],\"articleSection\":[\"Fintech\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/\",\"url\":\"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/\",\"name\":\"Capital Markets Software: Risk-Based Testing Challenges \u2014 Blog\",\"isPartOf\":{\"@id\":\"https:\/\/devexperts.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/Rope_walker_3840x700-1.png\",\"datePublished\":\"2021-08-20T12:55:16+00:00\",\"dateModified\":\"2022-07-29T11:16:48+00:00\",\"description\":\"Risk-based testing has become the most commonly used test planning technique for many Agile teams. Find out about its challenges and how to deal with them\",\"breadcrumb\":{\"@id\":\"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/#primaryimage\",\"url\":\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/Rope_walker_3840x700-1.png\",\"contentUrl\":\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/Rope_walker_3840x700-1.png\",\"width\":3840,\"height\":700,\"caption\":\"risk-based testing challenges\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devexperts.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Capital Markets Software: Risk-Based Testing Challenges\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/devexperts.com\/blog\/#website\",\"url\":\"https:\/\/devexperts.com\/blog\/\",\"name\":\"Devexperts Blog\",\"description\":\"We make complex finance ideas on technology, innovation and business simple\",\"publisher\":{\"@id\":\"https:\/\/devexperts.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/devexperts.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/devexperts.com\/blog\/#organization\",\"name\":\"Devexperts LLC\",\"url\":\"https:\/\/devexperts.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/devexperts.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/devexperts.com\/blog\/app\/uploads\/2019\/08\/DX-logo.png\",\"contentUrl\":\"https:\/\/devexperts.com\/blog\/app\/uploads\/2019\/08\/DX-logo.png\",\"width\":167,\"height\":30,\"caption\":\"Devexperts LLC\"},\"image\":{\"@id\":\"https:\/\/devexperts.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/devexperts\/\",\"https:\/\/x.com\/devexperts\",\"https:\/\/www.linkedin.com\/company\/devexperts\",\"https:\/\/www.youtube.com\/channel\/UCF3FRmes2KrcVsTXQ1aAB5w\/featured\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Capital Markets Software: Risk-Based Testing Challenges \u2014 Blog","description":"Risk-based testing has become the most commonly used test planning technique for many Agile teams. Find out about its challenges and how to deal with them","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/","og_locale":"en_US","og_type":"article","og_title":"Capital Markets Software: Risk-Based Testing Challenges","og_description":"Risk-based testing has become the most commonly used test planning technique for many Agile teams. Find out about its challenges and how to deal with them","og_url":"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/","og_site_name":"Devexperts Blog","article_publisher":"https:\/\/www.facebook.com\/devexperts\/","article_published_time":"2021-08-20T12:55:16+00:00","article_modified_time":"2022-07-29T11:16:48+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/rope_walker_linkedin.png","type":"image\/png"}],"author":"Dmitry Gorbunov","twitter_card":"summary_large_image","twitter_image":"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/rope_walker_twitter.png","twitter_creator":"@devexperts","twitter_site":"@devexperts","twitter_misc":{"Written by":"Dmitry Gorbunov","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/#article","isPartOf":{"@id":"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/"},"author":{"name":"Dmitry Gorbunov"},"headline":"Capital Markets Software: Risk-Based Testing Challenges","datePublished":"2021-08-20T12:55:16+00:00","dateModified":"2022-07-29T11:16:48+00:00","mainEntityOfPage":{"@id":"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/"},"wordCount":1641,"commentCount":0,"publisher":{"@id":"https:\/\/devexperts.com\/blog\/#organization"},"image":{"@id":"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/#primaryimage"},"thumbnailUrl":"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/Rope_walker_3840x700-1.png","keywords":["QA"],"articleSection":["Fintech"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/","url":"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/","name":"Capital Markets Software: Risk-Based Testing Challenges \u2014 Blog","isPartOf":{"@id":"https:\/\/devexperts.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/#primaryimage"},"image":{"@id":"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/#primaryimage"},"thumbnailUrl":"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/Rope_walker_3840x700-1.png","datePublished":"2021-08-20T12:55:16+00:00","dateModified":"2022-07-29T11:16:48+00:00","description":"Risk-based testing has become the most commonly used test planning technique for many Agile teams. Find out about its challenges and how to deal with them","breadcrumb":{"@id":"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/#primaryimage","url":"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/Rope_walker_3840x700-1.png","contentUrl":"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/08\/Rope_walker_3840x700-1.png","width":3840,"height":700,"caption":"risk-based testing challenges"},{"@type":"BreadcrumbList","@id":"https:\/\/devexperts.com\/blog\/capital-markets-software-risk-based-testing-challenges\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devexperts.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Capital Markets Software: Risk-Based Testing Challenges"}]},{"@type":"WebSite","@id":"https:\/\/devexperts.com\/blog\/#website","url":"https:\/\/devexperts.com\/blog\/","name":"Devexperts Blog","description":"We make complex finance ideas on technology, innovation and business simple","publisher":{"@id":"https:\/\/devexperts.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devexperts.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/devexperts.com\/blog\/#organization","name":"Devexperts LLC","url":"https:\/\/devexperts.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/devexperts.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/devexperts.com\/blog\/app\/uploads\/2019\/08\/DX-logo.png","contentUrl":"https:\/\/devexperts.com\/blog\/app\/uploads\/2019\/08\/DX-logo.png","width":167,"height":30,"caption":"Devexperts LLC"},"image":{"@id":"https:\/\/devexperts.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/devexperts\/","https:\/\/x.com\/devexperts","https:\/\/www.linkedin.com\/company\/devexperts","https:\/\/www.youtube.com\/channel\/UCF3FRmes2KrcVsTXQ1aAB5w\/featured"]}]}},"_links":{"self":[{"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/posts\/3374","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/users\/32"}],"replies":[{"embeddable":true,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/comments?post=3374"}],"version-history":[{"count":47,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/posts\/3374\/revisions"}],"predecessor-version":[{"id":4715,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/posts\/3374\/revisions\/4715"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/media\/3436"}],"wp:attachment":[{"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/media?parent=3374"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/categories?post=3374"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/tags?post=3374"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}