{"id":13272,"date":"2023-11-22T09:48:31","date_gmt":"2023-11-22T08:48:31","guid":{"rendered":"https:\/\/www.linphone.org\/?post_type=actualites&#038;p=13272"},"modified":"2025-09-01T15:17:28","modified_gmt":"2025-09-01T13:17:28","slug":"step-behind-the-scenes-of-our-quality-strategy","status":"publish","type":"actualites","link":"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/","title":{"rendered":"Step behind the scenes of our quality strategy"},"content":{"rendered":"<img decoding=\"async\" src=\"https:\/\/linphone.org\/sites\/default\/files\/4_4.png\" \/>\n<p>The source code for\u00a0<span style=\"color: #ff5e00;\"><a style=\"color: #ff5e00;\" href=\"https:\/\/www.linphone.org\/technical-corner\/linphone\"><u><em><strong>Linphone<\/strong><\/em><\/u><\/a>\u00a0<\/span>and\u00a0<span style=\"color: #ff5e00;\"><a style=\"color: #ff5e00;\" href=\"https:\/\/www.linphone.org\/technical-corner\/flexisip\"><u><em><strong>Flexisip<\/strong><\/em><\/u><\/a><\/span>\u00a0is evolving quickly. Every few months, new features are added, and every day or so, patch releases are pushed to fix issues reported by our customers via our support service. Source code is regularly refactored to enable further progress in terms of compactness, readability and performance optimisation.<\/p>\n<p>Doing all this while avoiding the risk of introducing a regression or a new defect represents major challenge.<\/p>\n<p>We estimate that about one third of our developers\u2019 efforts are focused solely on enhancing our non-regression procedures and maintaining our test infrastructure to ensure it is reliable and efficient.<\/p>\n<p>In this article, we present an overview of\u00a0<span style=\"color: #ff5e00;\"><strong>our company strategy in terms of non-regression testing and quality procedures<\/strong><\/span>, which can be divided into the following categories:<\/p>\n<ol>\n<li>Low-level, per component automated testing<\/li>\n<li>Sophisticated (integration) automated testing (for our Linphone SDK and Flexisip products)<\/li>\n<li>UI automated testing (for applications)<\/li>\n<li>Manual testing (by real humans \ud83d\ude42 for Linphone applications and server products.<\/li>\n<\/ol>\n<p>All automated tests are conducted using\u00a0<u><em><strong><a href=\"https:\/\/gitlab.linphone.org\/\"><span style=\"color: #ff5e00;\">Gitlab<\/span><\/a><\/strong><\/em><\/u>\u00a0each time a developer makes a modification to the source, via a &#8220;Merge request&#8221; process, which also includes a code review by a peer developer.<\/p>\n<p>We give a bit more detail on each category below.<\/p>\n<p><u><strong>1. Low level, per component, automated tests<\/strong><\/u><\/p>\n<p><span style=\"color: #ff5e00;\"><strong>Linphone SDK<\/strong><\/span>\u00a0and\u00a0<span style=\"color: #ff5e00;\"><strong>Flexisip<\/strong><\/span>\u00a0are made from several software components that are assembled together. For example,\u00a0<strong>oRTP<\/strong>\u00a0is our library for implementation of the Real Time Transport protocol, belr is a small library used for parsing protocol languages, and\u00a0<strong>mediastreamer2<\/strong>\u00a0is our library for streaming audio and video over the network. These software components have their own test suites as part of their source code, which are designed and maintained by developers to assert that their basic functionality is achieved. When networking is involved, we use a local loopback network, which is simple to understand for anyone familiar with software development.<\/p>\n<p><u><strong>2. Sophisticated automated tests<\/strong><\/u><\/p>\n<p><span style=\"color: #ff5e00;\"><a style=\"color: #ff5e00;\" href=\"https:\/\/www.linphone.org\/technical-corner\/liblinphone\"><u><em><strong>Liblinphone<\/strong><\/em><\/u><\/a><\/span>\u00a0is a library whose purpose is to realise\u00a0<strong>VoIP calls, conferences and IM<\/strong>. A real-world VoIP call involves many different aspects, such as signalling protocols, media streaming, network, routers\/firewall, and servers. Our objective is to create\u00a0<strong>automated tests<\/strong>\u00a0that match the real-world usage of Liblinphone as far as possible, which is why we built not only tests on top of the Liblinphone API, but also a complete infrastructure comprising our server products, dedicated to automated testing. This test infrastructure includes:<\/p>\n<ul>\n<li><span style=\"color: #ff5e00;\"><strong>Flexisip Account Manager<\/strong><\/span>, which allows the test suites to register their own randomised SIP users;<\/li>\n<li><span style=\"color: #ff5e00;\"><strong>Flexisip Proxy<\/strong><\/span>, which allows test suites to make calls that are actually authenticated and routed through the network.<\/li>\n<li><span style=\"color: #ff5e00;\"><strong>Flexisip Conference Server<\/strong><\/span>, which allows the test suites to create group chats and audio\/video conferences.<\/li>\n<\/ul>\n<p>The test server infrastructure is deployed based on\u00a0<strong>Ansible scripts<\/strong>.<\/p>\n<p>We developed\u00a0<strong>specific tools together with the Liblinphone test suites<\/strong>\u00a0to assess the performance and quality of the calls\/conference\/IM flows:<\/p>\n<ul>\n<li><strong>A network conditioner component<\/strong>, which simulates packet loss, jitter, and network transmission delay;<\/li>\n<li><strong>An audio file comparison tool<\/strong>, which allows us to ensure that audio content is streamed from one virtual participant to another without perceptible degradation.<\/li>\n<\/ul>\n<p><strong>The Liblinphone test suite<\/strong>\u00a0runs approximately<span style=\"color: #ff5e00;\">\u00a0<strong>1700 tests<\/strong><\/span>, which include real calls, conference and IM flows in real time, and which cover both typical end-user usage and more advanced usage such as call transfer and customer-specific SIP flows.<br \/>\nSince a call typically lasts between five and 10 seconds, tests are parallelised over multiple threads to prevent the suite from taking too much time. The full test suite can be executed in around 20 minutes, which is compatible with our strategy of agile development.<\/p>\n<p>The test results for each release (including minor ones) are published on our download page (for example,\u00a0<span style=\"color: #ff5e00;\"><u><em><strong><a style=\"color: #ff5e00;\" href=\"https:\/\/download.linphone.org\/snapshots\/allure-tests-reports\/release_5.2\/5.2.111-1452237\/linux-centos7\/liblinphone\/allure-report\/\">see\u00a0one of our latest Liblinphone version 5.2 reports<\/a><\/strong><\/em><\/u><\/span>).<\/p>\n<p>The principle of the Flexisip test suite is similar: SIP call flows generated by Liblinphone are passed to the Flexisip instance under test, which allows Flexisip to be tested in scenarios that include the entire network stack. In addition, the test suite models the use of Flexisip in a real system comprising the MariaDb and Redis databases, so that Flexisip can be tested automatically in scenarios that are very similar to real-world deployments.<\/p>\n<p>Our testing infrastructure is constantly evolving: for example, a compilation with an\u00a0<strong>address sanitiser\u00a0<\/strong>is in the process of being added, which will mean that the test results can immediately highlight memory faults or leaks.<\/p>\n<p><u><strong>3. UI automated tests<\/strong><\/u><\/p>\n<p>Our UI team has developed a framework for the automation of application-level tests by simulating taps on real or emulated Android &amp; iOS devices, and\u00a0making asserts on the rendered user interface. The\u00a0<strong>test scenarios represent typical<\/strong>\u00a0user scenarios, and involve creating or configuring a SIP account, making a call, receiving a call, sending an IM, etc.<\/p>\n<p><u><strong>4. Manual tests<\/strong><\/u><\/p>\n<p>Although most things can potentially be automated, at some point the cost of automation exceeds the cost of manual testing. Our app release process also includes a two-day intense testing program using multiple devices: iPhones, Android phones from various manufacturers, laptops with the Mac, Windows and Linux operating systems, and Bluetooth peripherals.<\/p>\n<p><u><strong>Conclusion<\/strong><\/u><\/p>\n<p>The extremely large\u00a0combinatory\u00a0inherent to communications scenarios means that automated test procedures are required for all of our products. Over the years, our company has built a\u00a0<strong>complete test infrastructure<\/strong>, which enables an impressive number of test cases that reproduce real-world conditions and usage to be executed in less than half an hour. This test infrastructure is the key to ensuring strong quality assessment and quick delivery of our releases, especially in the context of our support service.<\/p>\n<p>Don\u2019t hesitate to\u00a0<a href=\"http:\/\/linphone.typeform.com\/to\/RRDfNq?typeform-source=linphone.org\"><u><strong><span style=\"color: #ff5e00;\">contact our team<\/span><\/strong><\/u><\/a>\u00a0for more information!<\/p>\n<p class=\"rtecenter\"><a href=\"https:\/\/linphone.typeform.com\/to\/RRDfNq?typeform-source=linphone.org\"><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/linphone.org\/sites\/default\/files\/nous_contacter_31_x_11_cm_26_x_11_cm-2.png\" alt=\"\" width=\"132\" height=\"56\" \/><\/a><\/p>\n","protected":false},"author":10,"featured_media":13274,"parent":0,"template":"","meta":{"_acf_changed":false,"inline_featured_image":false},"actualites-category":[42],"class_list":["post-13272","actualites","type-actualites","status-publish","has-post-thumbnail","hentry","actualites-category-tech"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.3.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Step behind the scenes of our quality strategy - Linphone<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Step behind the scenes of our quality strategy - Linphone\" \/>\n<meta property=\"og:description\" content=\"The source code for\u00a0Linphone\u00a0and\u00a0Flexisip\u00a0is evolving quickly. Every few months, new features are added, and every day...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/\" \/>\n<meta property=\"og:site_name\" content=\"Linphone\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-01T13:17:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/linphone.gtec.pro\/wp-content\/uploads\/2023\/11\/4_4.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"347\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/\",\"url\":\"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/\",\"name\":\"Step behind the scenes of our quality strategy - Linphone\",\"isPartOf\":{\"@id\":\"https:\/\/linphone.gtec.pro\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/linphone.gtec.pro\/wp-content\/uploads\/2023\/11\/4_4.png\",\"datePublished\":\"2023-11-22T08:48:31+00:00\",\"dateModified\":\"2025-09-01T13:17:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/#primaryimage\",\"url\":\"https:\/\/linphone.gtec.pro\/wp-content\/uploads\/2023\/11\/4_4.png\",\"contentUrl\":\"https:\/\/linphone.gtec.pro\/wp-content\/uploads\/2023\/11\/4_4.png\",\"width\":1200,\"height\":347},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/linphone.gtec.pro\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Actualit\u00e9s\",\"item\":\"https:\/\/linphone.gtec.pro\/en\/actualites-archives\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Step behind the scenes of our quality strategy\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/linphone.gtec.pro\/en\/#website\",\"url\":\"https:\/\/linphone.gtec.pro\/en\/\",\"name\":\"Linphone\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/linphone.gtec.pro\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Step behind the scenes of our quality strategy - Linphone","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Step behind the scenes of our quality strategy - Linphone","og_description":"The source code for\u00a0Linphone\u00a0and\u00a0Flexisip\u00a0is evolving quickly. Every few months, new features are added, and every day...","og_url":"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/","og_site_name":"Linphone","article_modified_time":"2025-09-01T13:17:28+00:00","og_image":[{"width":1200,"height":347,"url":"https:\/\/linphone.gtec.pro\/wp-content\/uploads\/2023\/11\/4_4.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/","url":"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/","name":"Step behind the scenes of our quality strategy - Linphone","isPartOf":{"@id":"https:\/\/linphone.gtec.pro\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/#primaryimage"},"image":{"@id":"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/#primaryimage"},"thumbnailUrl":"https:\/\/linphone.gtec.pro\/wp-content\/uploads\/2023\/11\/4_4.png","datePublished":"2023-11-22T08:48:31+00:00","dateModified":"2025-09-01T13:17:28+00:00","breadcrumb":{"@id":"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/#primaryimage","url":"https:\/\/linphone.gtec.pro\/wp-content\/uploads\/2023\/11\/4_4.png","contentUrl":"https:\/\/linphone.gtec.pro\/wp-content\/uploads\/2023\/11\/4_4.png","width":1200,"height":347},{"@type":"BreadcrumbList","@id":"https:\/\/linphone.gtec.pro\/en\/news\/step-behind-the-scenes-of-our-quality-strategy\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/linphone.gtec.pro\/en\/"},{"@type":"ListItem","position":2,"name":"Actualit\u00e9s","item":"https:\/\/linphone.gtec.pro\/en\/actualites-archives\/"},{"@type":"ListItem","position":3,"name":"Step behind the scenes of our quality strategy"}]},{"@type":"WebSite","@id":"https:\/\/linphone.gtec.pro\/en\/#website","url":"https:\/\/linphone.gtec.pro\/en\/","name":"Linphone","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/linphone.gtec.pro\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/linphone.gtec.pro\/en\/wp-json\/wp\/v2\/actualites\/13272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linphone.gtec.pro\/en\/wp-json\/wp\/v2\/actualites"}],"about":[{"href":"https:\/\/linphone.gtec.pro\/en\/wp-json\/wp\/v2\/types\/actualites"}],"author":[{"embeddable":true,"href":"https:\/\/linphone.gtec.pro\/en\/wp-json\/wp\/v2\/users\/10"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linphone.gtec.pro\/en\/wp-json\/wp\/v2\/media\/13274"}],"wp:attachment":[{"href":"https:\/\/linphone.gtec.pro\/en\/wp-json\/wp\/v2\/media?parent=13272"}],"wp:term":[{"taxonomy":"actualites-category","embeddable":true,"href":"https:\/\/linphone.gtec.pro\/en\/wp-json\/wp\/v2\/actualites-category?post=13272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}