{"id":1228,"date":"2021-01-02T17:09:00","date_gmt":"2021-01-02T17:09:00","guid":{"rendered":"https:\/\/smart-robotics.io\/?p=1228"},"modified":"2025-07-16T18:34:54","modified_gmt":"2025-07-16T18:34:54","slug":"continuous-integration-to-ensure-software-quality","status":"publish","type":"post","link":"https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/","title":{"rendered":"Continuous integration to ensure software quality"},"content":{"rendered":"\r\n<section class=\"single-blog \" id=\"\">\r\n    <div class=\"container\">\r\n                            <div class=\"blog-row col-lg-10 mx-lg-auto\">\r\n                                <h1 class=\"title mb-3 mb-lg-5 \"> <strong class=\"title-blue\">Continuous integration<\/strong> to ensure pick &#038; place software quality<\/h1>\r\n                                <p class=\"bigtext\">When developing pick &amp; place solutions such as the <a href=\"https:\/\/smart-robotics.io\/smart-palletizer\/\">Smart Palletizer<\/a>, one needs to make sure that the software is stable, functional and releasable at the end of every sprint. To ensure the quality of a pick &amp; place solution during such an agile development process, a process is needed for quality control of the product. A common quality control process in software development is Continuous Integration. This blog discusses Continuous Integration and the different approaches to testing software.<\/p>\r\n\r\n                                <div class=\"blogmeta\"><span class=\"categories\">Blog<\/span> | <span class=\"date\">Date: 02-01-2021<\/span> | <span class=\"author\">Written by: \r\n                Bas Kooiker &#8211; Robotics Engineer                    <\/span>\r\n                <\/div>\r\n                <!-- social share -->\r\n                                <div class=\"row blog-social mb-0\">\r\n                    <div class=\"social-share-wrap\">\r\n                        <ul class=\"social-share\">\r\n                            <li class=\"social-share-title\">Share<\/li>\r\n                                                                                        <li class=\"social-share-item\"><a href=\"http:\/\/twitter.com\/home?status=https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/\"><i class=\"fab fa-twitter\"><\/i><\/a><\/li>\r\n                                                                                        <li class=\"social-share-item\"><a href=\"https:\/\/www.linkedin.com\/sharing\/share-offsite\/?url=https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/\"><i class=\"fab fa-linkedin\"><\/i><\/a><\/li>\r\n                                                                                        <li class=\"social-share-item\"><a href=\"https:\/\/wa.me\/?text=https%3A%2F%2Fsmart-robotics.io%2Fcontinuous-integration-to-ensure-software-quality%2F\"><i class=\"fab fa-whatsapp\"><\/i><\/a><\/li>\r\n                                                                                        <li class=\"social-share-item\"><a href=\"mailto:?subject=I wanted you to see this site&amp;body=Check out this site https%3A%2F%2Fsmart-robotics.io%2Fcontinuous-integration-to-ensure-software-quality%2F\"><i class=\"far fa-envelope\"><\/i><\/a><\/li>\r\n                                                    <\/ul>\r\n                    <\/div>\r\n                <\/div>\r\n                                <!-- end social share -->\r\n                \r\n                <div class=\"blog-content\">\r\n                    <h2>Continuous integration and automated testing<\/h2>\n<p>Within Continuous Integration (CI), automated tests are used to check different aspects of the software quality for every code change before this change is merged into the main code base. This means that no change to the code base should ever decrease the software quality.<\/p>\n<p>When testing software quality, regression tests are used to answer the question:\u00a0<i>\u2018When I add new functionality X, will all existing functionalities still be intact?\u2019<\/i>. The difficult part of this question is how to test all functionalities. In this blog we will consider different approaches to testing software code.<\/p>\n<p class=\"\">To explain the different test approaches, we will use the\u00a0<u><a href=\"https:\/\/smart-robotics.io\/palletizing\/\">Smart Palletizer<\/a><\/u> as an example. The Smart Palletizer picks up boxes from a specified location and places these boxes on a pallet using a specified stacking pattern. The behavior is defined as a set of actions, such as <em>\u2018move to pick position\u2019, \u2018pick up box\u2019, \u2018move to place position\u2019<\/em>, and so on. Based on the sensory input, a <a href=\"https:\/\/smart-robotics.io\/better-pick-and-place-performance\/\">Decision Engine<\/a> function decides what action to execute when.<\/p>\n<p>&nbsp;<\/p>\n<h2>Tests within Continuous Integration<\/h2>\n<h4>Unit testing<\/h4>\n<p>The testing of code functionality on the lowest level is called unit testing. When writing unit tests, different kinds of inputs are defined for a specific function and for each input, the desired output of the function is specified. It is important to not only test the regular use cases of the function, but to also make sure the function behaves properly in case of unexpected input.<\/p>\n<p>In unit testing, all interaction with other units of the software is abstracted by using Mocks. A Mock is a simplified object which acts as another object in the test case.<\/p>\n<p>When looking at the Smart Palletizer example, most actions are implemented as small functions. For such actions, different input\/output scenarios are specified. For the \u2018pick up box\u2019-action, there are several preconditions:<\/p>\n<ul>\n<li>The robot should be in the correct position<\/li>\n<li>The gripper should not be holding a box already<\/li>\n<li>The sensors should indicate that a box is ready<\/li>\n<\/ul>\n<p class=\"\">Test cases are written for all combinations of these preconditions, and if either one of these conditions is not met, the \u2018<em>pick up box\u2019<\/em>-action should fail. Only when all preconditions are met, the action should succeed. Mock functions are used to simulate the robot state, the gripper state, and the sensor state, so no actual robot is needed for testing.<\/p>\n<h4>Module testing<\/h4>\n<p>The second level of software testing is module testing. In module tests, the integration of functions within a module is tested. A module could be a class in object-oriented programming or any other set of functions that work together. For module testing, the same strategies are applied as with unit testing, but simply on a higher level:<\/p>\n<ul>\n<li>Specify a set of input values for the module\u2019s interface functions which cover all possible kinds of input the module may receive<\/li>\n<li>For each input, specify the expected output of the module and check whether the module indeed produces this output<\/li>\n<\/ul>\n<p class=\"\">For the <a href=\"https:\/\/smart-robotics.io\/smart-palletizer\/\">Smart Palletizer<\/a>, an extensively tested module is the motion planner. It consists of many sub functions for different aspects of motion planning, such as waypoint generation, reachability checking and collision checking. Module tests for motion planning consist of many combinations of different robot start positions, goal positions and world model states. For each of these scenario\u2019s the motion planning module should come up with a feasible motion plan.<\/p>\n<h4>Integration testing<\/h4>\n<p>The highest level of software testing is integration testing: testing the functionality of software when all software components are interacting as they would in an application. Testing expected results should not only include single actions, but also sequences of actions.<\/p>\n<ul>\n<li>The first cases to test are the so-called happy flow test cases: use-cases where the application flow is executed as expected and where the different system components interact as expected<\/li>\n<li>Next on the checklist are the unhappy flow test cases: testing all situations where either the application itself fails, the user cancels or aborts an action, any of the external components behave unexpectedly, connection is lost, components raise an error, etc. As you can imagine, the list of possible unhappy flow test cases is endless.<\/li>\n<\/ul>\n<p class=\"\">For the integration tests of the <a href=\"https:\/\/smart-robotics.io\/smart-palletizer\/\">Smart Palletizer<\/a>, simulated models of the actual robot and a simulation model for sensory input are used. For the happy flow tests, the application is initialized with two empty pallets and runs until both pallets are full. In this sequence, none of the actions should fail, otherwise, the integration test will fail. Some of the unhappy flow scenarios include recovery sequences from error states. The application is initialized for typical states where the error occurs. Then, the user input for robot recovery is simulated, and the application should continue like the regular, happy flow scenarios.<\/p>\n<h4>Performance testing<\/h4>\n<p class=\"\">A completely different kind of automated testing is performance testing. Performance testing can be applied to bigger modules or integral tests. Performance tests are all about the scalability of the software in terms of speed, bandwidth, load, etc. In case of the Smart Palletizer, the scalability of the motion planner is often tested. The motion planner receives many different stacking patterns for boxes of different sizes, on pallets of different sizes, with different types of robot setups. These scenarios are based on both theoretical limits of the system and actual situations that were encountered at customers. The motion planner should always be able to find a solution for each scenario. In addition, we also keep track of the computation and execution time for all robot motions.<\/p>\n<h4>Static code analysis<\/h4>\n<p class=\"\">The final type of automated testing to be discussed is the use of Static Code Analysis. It is not about the functionality of the code, but it can help a great deal in maintaining it. Different code checkers can identify different kinds of problems in the source code. For example, within Smart Robotics PyLint is used to detect coding and formatting violations within the Python code. More complex checkers like TICS can detect the amount of duplicated code, code complexity and analyze dependencies between modules.<\/p>\n<h2>Continuous integration for high quality robot software<\/h2>\n<p>Having a development process where Continuous Integration and automated testing are implemented has helped Smart Robotics to increase the level of code quality and the reliability of the software to the level where we are now. It allows for our solutions, such as the <a href=\"https:\/\/smart-robotics.io\/smart-palletizer\/\">Smart Palletizer<\/a>, to be implemented at various customers who all have different setups, environments and requirements. At the same time, Continuous Integration allows for new developments and improvements to be continuously integrated in the system. This way, our pick &amp; place solutions are flexible, innovative, easy to use and reliable.<\/p>\n<p>&nbsp;<\/p>\n                <\/div>\r\n                \r\n                            <\/div>  \r\n            <\/div>\r\n<\/section>\r\n\n\n    <div class=\"separator\" style=\"height: 150px;\">&nbsp;<\/div>\n  \n\n\r\n    <section class=\"cta-banner py-5\" style=\"background-color:#F5F5F5\">\r\n        <div class=\"container py-5 px-lg-5\">\r\n            <div class=\"col-12 text-center\">\r\n                <blockquote class=\"title mb-4 mb-lg-5\">Looking for a reliable, flexible and innovative pick &#038; place solution?<\/blockquote>\r\n                                <a href=\"\/contact\/\" class=\"btn btn-colorful\">Contact us<\/a>\r\n                            <\/div>\r\n        <\/div>\r\n    <\/section>\r\n\n\n    <div class=\"separator\" style=\"height: 150px;\">&nbsp;<\/div>\n  \n\n<section class=\"posts post-related \" id=\"\">\n    <div class=\"container\">\n                <div class=\"row justify-content-center align-items-center\">\n            <div class=\"col-12 mb-6\">\n                <h2 class=\"section-title text-center\">Also read<\/h2>\n            <\/div>\n        <\/div>\n                                                                        <div class=\"row justify-content-center align-items-stretch gy-5 gy-lg-0\">\n                                                                    <div class=\"col-12 col-md-6 col-lg-4\">\n                            <div class=\"card post-card\">\n                                <div class=\"card-header\">\n                                <a href=\"https:\/\/smart-robotics.io\/technology-trinity-task-planning\/\" class=\"text-decoration-none\">\n                                    <img decoding=\"async\" src=\"https:\/\/smart-robotics.io\/wp-content\/uploads\/2022\/12\/SIP-employees-4-e1608815928368-min.jpg\" alt=\"\" title=\"Technology Trinity: Smart Task Planning to improve robot efficiency\" width=\"2000\" height=\"757\" class=\"aligncenter size-full wp-image-2981 card-img-top\" srcset=\"https:\/\/smart-robotics.io\/wp-content\/uploads\/2022\/12\/SIP-employees-4-e1608815928368-min.jpg 2000w, https:\/\/smart-robotics.io\/wp-content\/uploads\/2022\/12\/SIP-employees-4-e1608815928368-min-300x114.jpg 300w, https:\/\/smart-robotics.io\/wp-content\/uploads\/2022\/12\/SIP-employees-4-e1608815928368-min-1024x388.jpg 1024w, https:\/\/smart-robotics.io\/wp-content\/uploads\/2022\/12\/SIP-employees-4-e1608815928368-min-768x291.jpg 768w, https:\/\/smart-robotics.io\/wp-content\/uploads\/2022\/12\/SIP-employees-4-e1608815928368-min-1536x581.jpg 1536w\" sizes=\"(max-width: 2000px) 100vw, 2000px\" \/>                                <\/a>\n                                                                                <div class=\"card-label-wrapper\">\n                                                                                                                                                            <p class=\"card-label\">Blog<\/p>\n                                                                                                                                                                                                    <\/div>\n                                                                                                            <\/div>\n                                <div class=\"card-body\">\n                                    <h5 class=\"card-title\"><a href=\"https:\/\/smart-robotics.io\/technology-trinity-task-planning\/\" class=\"text-decoration-none\">Technology Trinity: Smart Task Planning to improve robot efficiency<\/a><\/h5>\n                                    <p class=\"card-date\">17-11-2022<\/p>\n                                    <p class=\"card-text\">In this blog series, we will dive into the three pillars of our Technology Trinity. This third blog will focus on Task Planning and how our intelligent task planning algorithms improve the efficiency and reliability of our robots. <\/p>\n                                                                            <a href=\"https:\/\/smart-robotics.io\/technology-trinity-task-planning\/\" class=\"btn\">Read more<\/a>\n                                                                    <\/div>\n                            <\/div>\n                        <\/div>\n                                                                    <div class=\"col-12 col-md-6 col-lg-4\">\n                            <div class=\"card post-card\">\n                                <div class=\"card-header\">\n                                <a href=\"https:\/\/smart-robotics.io\/technology-trinity-motion\/\" class=\"text-decoration-none\">\n                                    <img decoding=\"async\" src=\"https:\/\/smart-robotics.io\/wp-content\/uploads\/2022\/04\/SIP-employees-2-ed-header.jpg\" alt=\"\" title=\"Motion planning\" width=\"1049\" height=\"700\" class=\"aligncenter size-full wp-image-2697 card-img-top\" srcset=\"https:\/\/smart-robotics.io\/wp-content\/uploads\/2022\/04\/SIP-employees-2-ed-header.jpg 1049w, https:\/\/smart-robotics.io\/wp-content\/uploads\/2022\/04\/SIP-employees-2-ed-header-300x200.jpg 300w, https:\/\/smart-robotics.io\/wp-content\/uploads\/2022\/04\/SIP-employees-2-ed-header-1024x683.jpg 1024w, https:\/\/smart-robotics.io\/wp-content\/uploads\/2022\/04\/SIP-employees-2-ed-header-768x512.jpg 768w\" sizes=\"(max-width: 1049px) 100vw, 1049px\" \/>                                <\/a>\n                                                                                <div class=\"card-label-wrapper\">\n                                                                                                                                                            <p class=\"card-label\">Blog<\/p>\n                                                                                                                                                                                                    <\/div>\n                                                                                                            <\/div>\n                                <div class=\"card-body\">\n                                    <h5 class=\"card-title\"><a href=\"https:\/\/smart-robotics.io\/technology-trinity-motion\/\" class=\"text-decoration-none\">Technology Trinity: intelligent motion planning to improve robot cycle time<\/a><\/h5>\n                                    <p class=\"card-date\">09-11-2022<\/p>\n                                    <p class=\"card-text\">In this blog series, we will dive into the three pillars of our Technology Trinity. This second blog focuses on Motion and how our smart motion planning algorithms improve the performance and reliability of our robots.<\/p>\n                                                                            <a href=\"https:\/\/smart-robotics.io\/technology-trinity-motion\/\" class=\"btn\">Read more<\/a>\n                                                                    <\/div>\n                            <\/div>\n                        <\/div>\n                                                                    <div class=\"col-12 col-md-6 col-lg-4\">\n                            <div class=\"card post-card\">\n                                <div class=\"card-header\">\n                                <a href=\"https:\/\/smart-robotics.io\/technology-trinity-vision\/\" class=\"text-decoration-none\">\n                                    <img decoding=\"async\" src=\"https:\/\/smart-robotics.io\/wp-content\/uploads\/2022\/12\/Smart-item-picker-reliable-item-picking-min-1-e1670939560366.jpg\" alt=\"\" title=\"Smart-item-picker-reliable-item-picking-min\" width=\"734\" height=\"1101\" class=\"aligncenter size-full wp-image-2281 card-img-top\" srcset=\"https:\/\/smart-robotics.io\/wp-content\/uploads\/2022\/12\/Smart-item-picker-reliable-item-picking-min-1-e1670939560366.jpg 734w, https:\/\/smart-robotics.io\/wp-content\/uploads\/2022\/12\/Smart-item-picker-reliable-item-picking-min-1-e1670939560366-200x300.jpg 200w, https:\/\/smart-robotics.io\/wp-content\/uploads\/2022\/12\/Smart-item-picker-reliable-item-picking-min-1-e1670939560366-683x1024.jpg 683w\" sizes=\"(max-width: 734px) 100vw, 734px\" \/>                                <\/a>\n                                                                                <div class=\"card-label-wrapper\">\n                                                                                                                                                            <p class=\"card-label\">Blog<\/p>\n                                                                                                                                                                                                    <\/div>\n                                                                                                            <\/div>\n                                <div class=\"card-body\">\n                                    <h5 class=\"card-title\"><a href=\"https:\/\/smart-robotics.io\/technology-trinity-vision\/\" class=\"text-decoration-none\">Technology Trinity: improved robot reliability with smart computer vision software<\/a><\/h5>\n                                    <p class=\"card-date\">11-11-2022<\/p>\n                                    <p class=\"card-text\">This blog focuses on how Smart Robotics&#8217; computer vision software improves the accuracy and reliability of our pick &#038; place robots.<\/p>\n                                                                            <a href=\"https:\/\/smart-robotics.io\/technology-trinity-vision\/\" class=\"btn\">Read more<\/a>\n                                                                    <\/div>\n                            <\/div>\n                        <\/div>\n                    \n                <\/div>\n                        <\/div>\n<\/section>","protected":false},"excerpt":{"rendered":"At Smart Robotics we are making sure that the item picking and palletizing software is stable, functional and continously tested.","protected":false},"author":9,"featured_media":2639,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"iawp_total_views":32,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-1228","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Continuous integration to ensure software quality - Smart Robotics<\/title>\n<meta name=\"description\" content=\"Continuous integration is used to test if the software of pick &amp; place robots is stable, functional and continuously tested.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Continuous integration to ensure software quality - Smart Robotics\" \/>\n<meta property=\"og:description\" content=\"Continuous integration is used to test if the software of pick &amp; place robots is stable, functional and continuously tested.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/\" \/>\n<meta property=\"og:site_name\" content=\"Smart Robotics\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-02T17:09:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-16T18:34:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/smart-robotics.io\/wp-content\/uploads\/2021\/01\/SIP-bin2bin-digital-twin-e1608815870543-min.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1334\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Laura Schilperoort\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@smartroboticsnl\" \/>\n<meta name=\"twitter:site\" content=\"@smartroboticsnl\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Laura Schilperoort\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Continuous integration to ensure software quality - Smart Robotics","description":"Continuous integration is used to test if the software of pick & place robots is stable, functional and continuously tested.","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:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/","og_locale":"en_US","og_type":"article","og_title":"Continuous integration to ensure software quality - Smart Robotics","og_description":"Continuous integration is used to test if the software of pick & place robots is stable, functional and continuously tested.","og_url":"https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/","og_site_name":"Smart Robotics","article_published_time":"2021-01-02T17:09:00+00:00","article_modified_time":"2025-07-16T18:34:54+00:00","og_image":[{"width":2000,"height":1334,"url":"https:\/\/smart-robotics.io\/wp-content\/uploads\/2021\/01\/SIP-bin2bin-digital-twin-e1608815870543-min.jpeg","type":"image\/jpeg"}],"author":"Laura Schilperoort","twitter_card":"summary_large_image","twitter_creator":"@smartroboticsnl","twitter_site":"@smartroboticsnl","twitter_misc":{"Written by":"Laura Schilperoort","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/#article","isPartOf":{"@id":"https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/"},"author":{"name":"Laura Schilperoort","@id":"https:\/\/smart-robotics.io\/#\/schema\/person\/1277d3bee0ccb8deec518a1ca96a98c4"},"headline":"Continuous integration to ensure software quality","datePublished":"2021-01-02T17:09:00+00:00","dateModified":"2025-07-16T18:34:54+00:00","mainEntityOfPage":{"@id":"https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/"},"wordCount":6,"publisher":{"@id":"https:\/\/smart-robotics.io\/#organization"},"image":{"@id":"https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/#primaryimage"},"thumbnailUrl":"https:\/\/smart-robotics.io\/wp-content\/uploads\/2021\/01\/SIP-bin2bin-digital-twin-e1608815870543-min.jpeg","articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/","url":"https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/","name":"Continuous integration to ensure software quality - Smart Robotics","isPartOf":{"@id":"https:\/\/smart-robotics.io\/#website"},"primaryImageOfPage":{"@id":"https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/#primaryimage"},"image":{"@id":"https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/#primaryimage"},"thumbnailUrl":"https:\/\/smart-robotics.io\/wp-content\/uploads\/2021\/01\/SIP-bin2bin-digital-twin-e1608815870543-min.jpeg","datePublished":"2021-01-02T17:09:00+00:00","dateModified":"2025-07-16T18:34:54+00:00","description":"Continuous integration is used to test if the software of pick & place robots is stable, functional and continuously tested.","breadcrumb":{"@id":"https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/#primaryimage","url":"https:\/\/smart-robotics.io\/wp-content\/uploads\/2021\/01\/SIP-bin2bin-digital-twin-e1608815870543-min.jpeg","contentUrl":"https:\/\/smart-robotics.io\/wp-content\/uploads\/2021\/01\/SIP-bin2bin-digital-twin-e1608815870543-min.jpeg","width":2000,"height":1334},{"@type":"BreadcrumbList","@id":"https:\/\/smart-robotics.io\/continuous-integration-to-ensure-software-quality\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/smart-robotics.io\/"},{"@type":"ListItem","position":2,"name":"Continuous integration to ensure software quality"}]},{"@type":"WebSite","@id":"https:\/\/smart-robotics.io\/#website","url":"https:\/\/smart-robotics.io\/","name":"Smart Robotics","description":"Your Pick &amp; Place Partner","publisher":{"@id":"https:\/\/smart-robotics.io\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/smart-robotics.io\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/smart-robotics.io\/#organization","name":"Smart Robotics","url":"https:\/\/smart-robotics.io\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/smart-robotics.io\/#\/schema\/logo\/image\/","url":"https:\/\/smart-robotics.io\/wp-content\/uploads\/2023\/01\/logo-colored.png","contentUrl":"https:\/\/smart-robotics.io\/wp-content\/uploads\/2023\/01\/logo-colored.png","width":261,"height":89,"caption":"Smart Robotics"},"image":{"@id":"https:\/\/smart-robotics.io\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/smartroboticsnl","https:\/\/www.instagram.com\/smartrobotics_\/","https:\/\/www.linkedin.com\/company\/smart-robotics\/"]},{"@type":"Person","@id":"https:\/\/smart-robotics.io\/#\/schema\/person\/1277d3bee0ccb8deec518a1ca96a98c4","name":"Laura Schilperoort","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/cb890040148bf54f8de5bb1bb0e126d5a836b6afbdeb3ca8c7373a37122cd158?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/cb890040148bf54f8de5bb1bb0e126d5a836b6afbdeb3ca8c7373a37122cd158?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cb890040148bf54f8de5bb1bb0e126d5a836b6afbdeb3ca8c7373a37122cd158?s=96&d=mm&r=g","caption":"Laura Schilperoort"},"url":"https:\/\/smart-robotics.io\/author\/laura\/"}]}},"_links":{"self":[{"href":"https:\/\/smart-robotics.io\/wp-json\/wp\/v2\/posts\/1228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/smart-robotics.io\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/smart-robotics.io\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/smart-robotics.io\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/smart-robotics.io\/wp-json\/wp\/v2\/comments?post=1228"}],"version-history":[{"count":32,"href":"https:\/\/smart-robotics.io\/wp-json\/wp\/v2\/posts\/1228\/revisions"}],"predecessor-version":[{"id":7564,"href":"https:\/\/smart-robotics.io\/wp-json\/wp\/v2\/posts\/1228\/revisions\/7564"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/smart-robotics.io\/wp-json\/wp\/v2\/media\/2639"}],"wp:attachment":[{"href":"https:\/\/smart-robotics.io\/wp-json\/wp\/v2\/media?parent=1228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/smart-robotics.io\/wp-json\/wp\/v2\/categories?post=1228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/smart-robotics.io\/wp-json\/wp\/v2\/tags?post=1228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}