{"id":3212,"date":"2021-07-16T10:13:30","date_gmt":"2021-07-16T10:13:30","guid":{"rendered":"https:\/\/devexperts.com\/blog\/?p=3212"},"modified":"2024-03-05T08:07:32","modified_gmt":"2024-03-05T08:07:32","slug":"the-basics-of-quality-assurance-in-financial-applications","status":"publish","type":"post","link":"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/","title":{"rendered":"The Basics of Quality Assurance in Financial Applications"},"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\/07\/The-Basics-of-Quality-Assurance-in-Financial-Applications-600x338.png 2x, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/07\/The-Basics-of-Quality-Assurance-in-Financial-Applications-300x169.png 1x\"\/><source media=\"(min-width: 640px) and (max-width: 767px)\" data-srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/07\/The-Basics-of-Quality-Assurance-in-Financial-Applications-1168x657.png 2x, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/07\/The-Basics-of-Quality-Assurance-in-Financial-Applications-600x338.png 1x\"\/><source media=\"(min-width: 768px) and (max-width: 1023px)\" data-srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/07\/The-Basics-of-Quality-Assurance-in-Financial-Applications-1168x657.png 2x, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/07\/The-Basics-of-Quality-Assurance-in-Financial-Applications-728x410.png 1x\"\/><source media=\"(min-width: 1024px) and (max-width: 1279px)\" data-srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/07\/The-Basics-of-Quality-Assurance-in-Financial-Applications-1168x657.png 1x, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/07\/The-Basics-of-Quality-Assurance-in-Financial-Applications-690x388.png 1x\"\/><source media=\"(min-width: 1280px)\" data-srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/07\/The-Basics-of-Quality-Assurance-in-Financial-Applications-1752x986.png 2x,\n\t\t\t\thttps:\/\/devexperts.com\/blog\/app\/uploads\/2021\/07\/The-Basics-of-Quality-Assurance-in-Financial-Applications-1752x986.png 1.5x,\n\t\t\t\thttps:\/\/devexperts.com\/blog\/app\/uploads\/2021\/07\/The-Basics-of-Quality-Assurance-in-Financial-Applications-870x489.png 1x\"\/><img decoding=\"async\" class=\"singleThumbnail lazyload\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/07\/The-Basics-of-Quality-Assurance-in-Financial-Applications-1024x576.png\" data-src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/07\/The-Basics-of-Quality-Assurance-in-Financial-Applications-870x489.png\"\/><\/picture><\/figure><\/div>\n\n\n\n<p>Testing trading system performance is a fairly new quality assurance practice that is rapidly developing and gradually taking shape. However, here and there, it still lacks common strategies and terminology, making it hard to seek help for testers who often face its subtle aspects.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-let-s-talk-theory\">Let\u2019s talk theory<\/h2>\n\n\n\n<p>Here at Devexperts, we develop all kinds of software for financial institutions, depending on their needs. But, the main product remains the same \u2014 trading platforms. So how do we approach them in terms of performance testing? What is the process and the associated difficulties?<\/p>\n\n\n\n<p>For starters, let\u2019s clarify what performance testing is. It\u2019s a practice that tests software applications under a particular workload. This measures its speed, response time, stability, scalability, and resource usage. Financial software usually means top-tier architecture that experiences heavy load, supports multiple integrations with third-party venues, and demands high throughput. Performance testing considers all these parameters and has practices applicable to each aspect.<\/p>\n\n\n\n<p>Performance testing involves a series of different tests. Here\u2019s a list of these tests:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Load tests<\/strong>. We load a system to an expected extent to see its reaction.<\/li>\n\n\n\n<li><strong>Stress tests<\/strong>. Here, we go a step further. What if we increase the load to a stressful extent? At what point will the system lose its ability to cope? This test is beneficial for understanding what will happen with the production release and if the system will successfully handle an influx of users.<\/li>\n\n\n\n<li><strong>Soak\/Endurance\/Stability tests<\/strong>. As opposed to others, this test takes a long time. Here, we load a system for a prolonged time to see how it behaves.<\/li>\n\n\n\n<li><strong>Capacity tests<\/strong>. These are the most interesting tests for businesses. They show the system\u2019s capacity to handle a certain number of users.<\/li>\n\n\n\n<li><strong>Scalability tests<\/strong>. They test a system&#8217;s scalability and how it goes through dynamic scaling in real-time.<\/li>\n\n\n\n<li><strong>Volume tests<\/strong>. They help answer the question: what happens if the system has a large amount of data and users try to access them through numerous requests?<\/li>\n\n\n\n<li><strong>Performance searches<\/strong>. These could be a lot of things. The aim is to find out as much info about the system\u2019s behavior as possible. What is the system\u2019s configuration? What will happen if we deliberately break something? How will the system restore itself?<\/li>\n<\/ul>\n\n\n\n<p>This is a basic set for testing the performance of financial applications.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-time-to-practice\">Time to practice<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-the-architecture-of-trading-systems\">The architecture of trading systems<\/h3>\n\n\n\n<p>The systems are quite complex: there are numerous types of clients (front, middle, and back offices), all customers use different functionalities, and all apps are heterogeneous. A single system might have a whole package of products each configured individually and all systems always require integrations with numerous venues.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Different client types (front office, middle office, back office)<\/li>\n\n\n\n<li>Variety of client apps (desktop, web, mobile)<\/li>\n\n\n\n<li>Variety of products (FX, equities, futures, options, cryptocurrencies, etc)<\/li>\n\n\n\n<li>Variety of modules (risk monitoring, alerts, charting, reporting, etc.)<\/li>\n\n\n\n<li>Integrations (liquidity providers, B2B, STP)<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"672\" height=\"492\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading.jpg\" alt=\"trading system architecture\" class=\"wp-image-3218\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading.jpg 672w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading-70x51.jpg 70w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading-300x220.jpg 300w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading-454x332.jpg 454w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading-574x420.jpg 574w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading-290x212.jpg 290w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading-277x203.jpg 277w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading-354x259.jpg 354w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading-531x389.jpg 531w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading-462x338.jpg 462w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading-530x388.jpg 530w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading-560x410.jpg 560w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading-668x489.jpg 668w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading-320x234.jpg 320w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading-382x280.jpg 382w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-trading-578x423.jpg 578w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><figcaption class=\"wp-element-caption\">Trading system architecture<\/figcaption><\/figure>\n<\/div>\n\n\n<p>What gives more edge to trading systems is their environment with its sophisticated architecture and most of its components capable of horizontal scaling.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Horizontally scalable front- and back-end components<\/li>\n\n\n\n<li>Middleware<\/li>\n\n\n\n<li>Databases<\/li>\n\n\n\n<li>Hybrid Infrastructure<\/li>\n<\/ul>\n\n\n\n<p>So, long story short, testers of financial systems have their hands full. We are constantly involved in a variety of exciting projects. Check out our vacancies at <a href=\"https:\/\/careers.devexperts.com\/\">Devexperts Career<\/a> if you would like to join us \u2014 we have offices worldwide and offer remote options.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-three-approaches-to-performance-testing\">Three approaches to performance testing<\/h3>\n\n\n\n<p>There are three common approaches to testing systems. Let\u2019s review them from the simplest to the most complex.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-1-component-testing\">1. Component testing<\/h4>\n\n\n\n<p>The motto: why complicate? Let\u2019s test each component individually. Functionality and tools are reduced to a minimum, making this testing austere \u2014 cheap and quick. This practice is attractive because it is really cheap, making it perfect for agile approaches. Component testing can help us in building tests, continuously integrating them, taking the measurements, and identifying possible issues.<\/p>\n\n\n\n<p>Of course, it has cons. As we take a module out of a system, there is a great possibility for incorrect testing of functionality. Thus, this approach has nothing to do with real life. It is purely synthetic, giving unreliable results.<\/p>\n\n\n\n<div class=\"prosAndCons row\">\n        <div class=\"prosAndConsCol\">\n            <div class=\"prosAndConsHeader isPros\">\n                Pros\n            <\/div>\n            <div class=\"prosAndConsInner isPros\">\n                <ul class=\"prosAndConsList\">\n                    <li>Easy to deploy<\/li>\n                    <li>Simple environment<\/li>\n                    <li>Simple testing tools<\/li>\n                    <li>Fast delivey of results<\/li>\n                <\/ul>\n            <\/div>\n        <\/div>\n        <div class=\"prosAndConsCol\">\n            <div class=\"prosAndConsHeader isCons\">\n                Cons\n            <\/div>\n            <div class=\"prosAndConsInner\">\n                <ul class=\"prosAndConsList\">\n                    <li>Mere simulation<\/li>\n                    <li>Synthetic load profiles<\/li>\n                    <li>Unreliable results<\/li>\n                <\/ul>\n            <\/div>\n        <\/div>\n    <\/div>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-2-subsystem-testing\">2. Subsystem testing<\/h4>\n\n\n\n<p>OK, we get it. Testing single components cut out of a system is not very efficient. What if we divide a system into logically related subsystems (say, an order processing module without charting) and test them?<\/p>\n\n\n\n<p>It is relatively inexpensive because you don\u2019t have to deploy an entire system. It\u2019s similar to the previous practice but with a little bit more functions to test.<\/p>\n\n\n\n<p>It\u2019s possible to lack resources. So, maybe you\u2019ll need a specific testing environment. From a loading issues viewpoint, this practice does not provide enough insights into how the system will behave in production. The simulation is not close enough to the real system\u2019s use.<\/p>\n\n\n\n<div class=\"prosAndCons row\">\n        <div class=\"prosAndConsCol\">\n            <div class=\"prosAndConsHeader isPros\">\n                Pros\n            <\/div>\n            <div class=\"prosAndConsInner isPros\">\n                <ul class=\"prosAndConsList\">\n                    <li>Relatively easy to deploy<\/li>\n                    <li>Relatively simple environment<\/li>\n                    <li>Simple testing tools<\/li>\n                    <li>Fast delivey of results<\/li>\n                <\/ul>\n            <\/div>\n        <\/div>\n        <div class=\"prosAndConsCol\">\n            <div class=\"prosAndConsHeader isCons\">\n                Cons\n            <\/div>\n            <div class=\"prosAndConsInner\">\n                <ul class=\"prosAndConsList\">\n                    <li>Not realistic enough load profile<\/li>\n                    <li>Unreliable results<\/li>\n                <\/ul>\n            <\/div>\n        <\/div>\n    <\/div>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-3-multichannel-end-to-end-testing\">3. Multichannel end-to-end testing<\/h4>\n\n\n\n<p>This one is the most interesting practice: testing everything! Multichannel <a href=\"https:\/\/devexperts.com\/end-to-end-testing\/\">end-to-end testing<\/a> is the sole mentioned approach that simulates the load similar to one that a system experiences in production. This practice provides the most true-to-life results. Still, it requires systems matching to production ones as closely as possible. This practice is costly, though, due to the complex script simulation and the large data array generated that requires analysis.<\/p>\n\n\n\n<div class=\"prosAndCons row\">\n        <div class=\"prosAndConsCol\">\n            <div class=\"prosAndConsHeader isPros\">\n                Pros\n            <\/div>\n            <div class=\"prosAndConsInner isPros\">\n                <ul class=\"prosAndConsList\">\n                    <li>Close to real-life load profile<\/li>\n                    <li>Production data set<\/li>\n                    <li>System layout<\/li>\n                    <li>Realistic data flow<\/li>\n                    <li>Reliable results<\/li>\n                <\/ul>\n            <\/div>\n        <\/div>\n        <div class=\"prosAndConsCol\">\n            <div class=\"prosAndConsHeader isCons\">\n                Cons\n            <\/div>\n            <div class=\"prosAndConsInner\">\n                <ul class=\"prosAndConsList\">\n                    <li>High environmental cost<\/li>\n                    <li>High system maintenance cost<\/li>\n                    <li>Complicated testing toolset<\/li>\n                    <li>Complicated results analysis<\/li>\n                <\/ul>\n            <\/div>\n        <\/div>\n    <\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-performance-testing-process\">Performance testing process<\/h2>\n\n\n\n<p><em>How should this process be facilitated and what stages it has. Important points.<\/em><\/p>\n\n\n\n<p>The process is relatively easy: a customer comes to us and we start developing a test plan. After confirming the plan with the customer, we start implementing it: we configure an environment and do the testing. After this, we analyze the test results. That can be followed by any number of iterations of adjusting the test plan and additional testing.<\/p>\n\n\n\n<p>Stress and load tests are usually rather expensive because they require a substantial workforce and resources, including testing and development engineers.<\/p>\n\n\n\n<p><em>What is worth paying attention to when creating a test plan?<\/em><\/p>\n\n\n\n<p>Usually, standard sections comprise a test plan representing testing intentions: what we need to test, covered features, test load profile, measured parameters, KPIs, overall system behavior, and metrics that help us understand if we\u2019ve reached our goals.<\/p>\n\n\n\n<p>Each test aims to provide us with an answer to a precise and narrow question. And, it is not always possible to combine part of our testing aspirations with real-life situations. That\u2019s why it makes sense to go for quality assurance services from experienced vendors that work in the same business field as you. They have already racked their brains and know the software and industry\u2019s ins and outs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-kpis-nbsp\">KPIs&nbsp;<\/h2>\n\n\n\n<p>These are usually derived from the project requirements. What are the usual non-functional requirements? Most popular options: no requirements at all, \u201cthe system must be fast\u201d, and \u201con average, an operation should take N microseconds\u201d.<\/p>\n\n\n\n<p>In the case of non-functional requirements, we should always be very careful with providing absolute numbers. It is obligatory to make the system handle the absolute majority of users\u2019 operations within a defined time. The system must also respond at a certain speed. However, it is critical to understand the number of users, how they are distributed across the interface, and other test parameters because it drastically impacts the test results.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-load-profiles-nbsp\">Load profiles&nbsp;<\/h2>\n\n\n\n<p>The perfect case would be to get load profiles from the current system version. But, that\u2019s not possible when the system is still in development, so what\u2019s left is to look up an SLA and look back at the past experience with similar systems or synthetic options\u2014there\u2019s no silver bullet here. It is always important to talk through all goals in detail with your customer so you don\u2019t miss anything like operation interdependence, that can strongly impact testing results.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"649\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-1024x649.png\" alt=\"Load profiles\" class=\"wp-image-3220\" style=\"width:768px;height:487px\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-1024x649.png 1024w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-70x44.png 70w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-300x190.png 300w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-454x288.png 454w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-574x364.png 574w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-861x546.png 861w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-290x184.png 290w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-277x176.png 277w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-354x224.png 354w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-531x336.png 531w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-533x338.png 533w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-612x388.png 612w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-647x410.png 647w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-772x489.png 772w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-824x522.png 824w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-1037x657.png 1037w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-768x487.png 768w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-320x203.png 320w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-382x242.png 382w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example-578x366.png 578w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/an-example.png 1201w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><figcaption class=\"wp-element-caption\">An example of a mid-sized European CFD broker\u2019s load profiles<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-test-implementation\">Test implementation<\/h2>\n\n\n\n<p>There are many performance testing products. If we dive deep into each one, we\u2019ll find out that they are mostly concentrated on testing web environments and their functionality is not very different from each other. Some offer graphic interfaces while others don\u2019t. They all differ in price from zero to eternity. There are cloud services and turnkey solutions. Some sell licenses and cloud hosting separately. So, it\u2019s really hard to judge them altogether. Each testing team chooses the tool that fits them the most.<\/p>\n\n\n\n<p>We chose to develop our own framework both to generate load and analyze the results. Although we have an in-house solution, we sometimes use JMeter or Gatling to test some web applications.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"836\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-1024x836.png\" alt=\"platform of a mid-sized European FX broker\" class=\"wp-image-3223\" style=\"width:512px;height:418px\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-1024x836.png 1024w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-70x57.png 70w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-300x245.png 300w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-454x371.png 454w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-574x469.png 574w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-861x703.png 861w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-267x218.png 267w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-255x208.png 255w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-326x266.png 326w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-487x398.png 487w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-414x338.png 414w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-475x388.png 475w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-502x410.png 502w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-599x489.png 599w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-639x522.png 639w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-805x657.png 805w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-768x627.png 768w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-320x261.png 320w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-382x312.png 382w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example-578x472.png 578w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/non-functional-requirements-example.png 1057w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><figcaption class=\"wp-element-caption\">An example of requirements for a platform of a mid-sized European FX broker<br><\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-analysis-of-test-results\">Analysis of test results<\/h2>\n\n\n\n<p>Before analyzing, you need to collect the results. The parameter that interests us is the consumption of resources. There is no unified standard; each case needs its own tuning. This stage is very important because metrics must be collected according to clauses that had been discussed when the test plan was created.<\/p>\n\n\n\n<p>Besides this, there are also time parameters. How much time does the operation take to be performed at the user\u2019s end? How much time does it take at each stage?<\/p>\n\n\n\n<p>To elude any confusion with metrics, it is worth asking developers to factor them in at the very beginning of the project.<\/p>\n\n\n\n<p>What can be analyzed?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Current system behavior<\/li>\n\n\n\n<li>Comparison with previous versions<\/li>\n\n\n\n<li>Long-term trend analysis<\/li>\n\n\n\n<li>Comparison to production systems<\/li>\n<\/ul>\n\n\n\n<p>It\u2019s also important to compare metrics when plotting a chart: how resource consumption depends on the load, what happens to the network at certain times, etc.\u2014there are numerous combinations, so you need to know precisely what is important in your case.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"223\" src=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-1024x223.png\" alt=\"Analysis of test results\" class=\"wp-image-3214\" srcset=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-1024x223.png 1024w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-70x15.png 70w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-300x65.png 300w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-454x99.png 454w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-574x125.png 574w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-861x187.png 861w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-290x63.png 290w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-277x60.png 277w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-354x77.png 354w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-531x116.png 531w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-600x131.png 600w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-690x150.png 690w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-728x158.png 728w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-870x189.png 870w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-928x202.png 928w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-1168x254.png 1168w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-768x167.png 768w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-1536x334.png 1536w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-320x70.png 320w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-382x83.png 382w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-578x126.png 578w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme-1366x297.png 1366w, https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/scheme.png 1641w\" sizes=\"auto, (max-width: 959px) calc(100vw - 30px), 870px\" \/><\/a><figcaption class=\"wp-element-caption\">Test results analysis process<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-some-bits-to-conclude\">Some bits to conclude<\/h2>\n\n\n\n<p>Paying special attention to the testing environment is crucial too. Sometimes it could be a bad idea to place load generators in a corporate network if your testing system is not part of it. It could lead not only to difficulties for the current operations of your company\u2019s employees because an external network channel ran dry but to an entire corporate network failure.<\/p>\n\n\n\n<p>And never forget to mask user data and integrations. Are you testing an SMS mailing service? Masking will help you avoid awkward situations like sending an SMS to real clients about a spontaneous margin call on a weekend. On the bright side, this situation will test your customer service that will get many calls from your perplexed clients (wink-wink).<\/p>\n\n\n\n<p>You can get in-depth information about our expertise and projects at <a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/devexperts.com\/qa-services\/explore-full-spectrum-qa-and-testing-services\/\">Explore Full-Spectrum QA and Testing Services<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Testing trading system performance is a fairly new quality assurance practice that is rapidly developing and gradually taking shape. However, &hellip; <\/p>\n","protected":false},"author":32,"featured_media":3234,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2020],"tags":[25],"class_list":["post-3212","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fintech","tag-qa"],"acf":{"nifty_post_card_image":4525,"nifty_post_card_index_big":"","nifty_post_inner_image":4765,"nifty_post_card_banner":""},"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>Quality Assurance in Financial Applications \u2014 Devexperts Blog<\/title>\n<meta name=\"description\" content=\"Testing trading system performance means testing multilayered architecture experiencing heavy load, integrated to 3rd-party venues, and its high throughput.\" \/>\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\/the-basics-of-quality-assurance-in-financial-applications\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Basics of Quality Assurance in Financial Applications\" \/>\n<meta property=\"og:description\" content=\"Testing trading system performance means testing multilayered architecture experiencing heavy load, integrated to 3rd-party venues, and its high throughput.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/\" \/>\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-07-16T10:13:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-05T08:07:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/testing-fb.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Andrey Klochkov\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/testing-tw.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=\"Andrey Klochkov\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/\"},\"author\":{\"name\":\"Andrey Klochkov\"},\"headline\":\"The Basics of Quality Assurance in Financial Applications\",\"datePublished\":\"2021-07-16T10:13:30+00:00\",\"dateModified\":\"2024-03-05T08:07:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/\"},\"wordCount\":1837,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/devexperts.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/3840_600.png\",\"keywords\":[\"QA\"],\"articleSection\":[\"Fintech\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/\",\"url\":\"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/\",\"name\":\"Quality Assurance in Financial Applications \u2014 Devexperts Blog\",\"isPartOf\":{\"@id\":\"https:\/\/devexperts.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/3840_600.png\",\"datePublished\":\"2021-07-16T10:13:30+00:00\",\"dateModified\":\"2024-03-05T08:07:32+00:00\",\"description\":\"Testing trading system performance means testing multilayered architecture experiencing heavy load, integrated to 3rd-party venues, and its high throughput.\",\"breadcrumb\":{\"@id\":\"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/#primaryimage\",\"url\":\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/3840_600.png\",\"contentUrl\":\"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/3840_600.png\",\"width\":3840,\"height\":699,\"caption\":\"Testing financial applications\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devexperts.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Basics of Quality Assurance in Financial Applications\"}]},{\"@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":"Quality Assurance in Financial Applications \u2014 Devexperts Blog","description":"Testing trading system performance means testing multilayered architecture experiencing heavy load, integrated to 3rd-party venues, and its high throughput.","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\/the-basics-of-quality-assurance-in-financial-applications\/","og_locale":"en_US","og_type":"article","og_title":"The Basics of Quality Assurance in Financial Applications","og_description":"Testing trading system performance means testing multilayered architecture experiencing heavy load, integrated to 3rd-party venues, and its high throughput.","og_url":"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/","og_site_name":"Devexperts Blog","article_publisher":"https:\/\/www.facebook.com\/devexperts\/","article_published_time":"2021-07-16T10:13:30+00:00","article_modified_time":"2024-03-05T08:07:32+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/testing-fb.png","type":"image\/png"}],"author":"Andrey Klochkov","twitter_card":"summary_large_image","twitter_image":"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/testing-tw.png","twitter_creator":"@devexperts","twitter_site":"@devexperts","twitter_misc":{"Written by":"Andrey Klochkov","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/#article","isPartOf":{"@id":"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/"},"author":{"name":"Andrey Klochkov"},"headline":"The Basics of Quality Assurance in Financial Applications","datePublished":"2021-07-16T10:13:30+00:00","dateModified":"2024-03-05T08:07:32+00:00","mainEntityOfPage":{"@id":"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/"},"wordCount":1837,"commentCount":0,"publisher":{"@id":"https:\/\/devexperts.com\/blog\/#organization"},"image":{"@id":"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/#primaryimage"},"thumbnailUrl":"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/3840_600.png","keywords":["QA"],"articleSection":["Fintech"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/","url":"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/","name":"Quality Assurance in Financial Applications \u2014 Devexperts Blog","isPartOf":{"@id":"https:\/\/devexperts.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/#primaryimage"},"image":{"@id":"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/#primaryimage"},"thumbnailUrl":"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/3840_600.png","datePublished":"2021-07-16T10:13:30+00:00","dateModified":"2024-03-05T08:07:32+00:00","description":"Testing trading system performance means testing multilayered architecture experiencing heavy load, integrated to 3rd-party venues, and its high throughput.","breadcrumb":{"@id":"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/#primaryimage","url":"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/3840_600.png","contentUrl":"https:\/\/devexperts.com\/blog\/app\/uploads\/2021\/06\/3840_600.png","width":3840,"height":699,"caption":"Testing financial applications"},{"@type":"BreadcrumbList","@id":"https:\/\/devexperts.com\/blog\/the-basics-of-quality-assurance-in-financial-applications\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devexperts.com\/blog\/"},{"@type":"ListItem","position":2,"name":"The Basics of Quality Assurance in Financial Applications"}]},{"@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\/3212","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=3212"}],"version-history":[{"count":35,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/posts\/3212\/revisions"}],"predecessor-version":[{"id":7535,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/posts\/3212\/revisions\/7535"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/media\/3234"}],"wp:attachment":[{"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/media?parent=3212"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/categories?post=3212"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devexperts.com\/blog\/wp-json\/wp\/v2\/tags?post=3212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}