{"id":404,"date":"2021-04-01T10:53:53","date_gmt":"2021-04-01T10:53:53","guid":{"rendered":"https:\/\/www.newburyelectronics.co.uk\/innovation\/?page_id=404"},"modified":"2021-04-28T12:28:27","modified_gmt":"2021-04-28T12:28:27","slug":"software-development","status":"publish","type":"page","link":"https:\/\/www.newburyelectronics.co.uk\/innovation\/software-development\/","title":{"rendered":"Software Development"},"content":{"rendered":"<p>[vc_row full_width=&#8221;stretch_row&#8221; css=&#8221;.vc_custom_1617274358467{background-image: url(https:\/\/www.newburyelectronics.co.uk\/innovation\/wp-content\/uploads\/sites\/2\/2021\/04\/firmware.jpg?id=392) !important;}&#8221; el_class=&#8221;page-header&#8221;][vc_column width=&#8221;1\/2&#8243;][vc_column_text]<\/p>\n<div id=\"docs-title-widget\" class=\"docs-title-widget goog-inline-block\">\n<h1 class=\"docs-title-input-label\"><span id=\"docs-title-input-label-inner\" class=\"docs-title-input-label-inner\">Software Development <\/span><\/h1>\n<\/div>\n<div class=\"docs-titlebar-badges goog-inline-block\">\n<div class=\"docs-templates-badge-container goog-inline-block\"><\/div>\n<div class=\"docs-titlebar-badge-container docs-star-container goog-inline-block\">\n<div id=\"docs-star\" class=\"docs-titlebar-badge goog-inline-block goog-control\" tabindex=\"0\" role=\"checkbox\" aria-hidden=\"false\" data-tooltip=\"Star\" aria-label=\"Star\" aria-disabled=\"false\" aria-checked=\"false\">\n<div class=\"docs-icon goog-inline-block \">\n<div class=\"docs-icon-img-container docs-icon-img docs-icon-star-border\" aria-hidden=\"true\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"docs-titlebar-badge-container docs-folder-container goog-inline-block\">\n<div id=\"docs-folder\" class=\"docs-titlebar-badge goog-inline-block goog-control\" tabindex=\"0\" role=\"button\" aria-hidden=\"false\" aria-label=\"Add shortcut to Drive\" data-tooltip=\"Add shortcut to Drive\">\n<div class=\"docs-icon goog-inline-block goog-control-icon\" aria-hidden=\"true\">\n<div class=\"docs-icon-img-container docs-icon-img docs-icon-add-to-drive\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"docs-titlebar-badge-container docs-info-container goog-inline-block\">\n<div id=\"docs-info\" class=\"docs-titlebar-badge goog-inline-block goog-flat-button\" tabindex=\"0\" role=\"button\" aria-live=\"polite\" aria-hidden=\"false\" aria-disabled=\"false\" data-tooltip=\"Document details\" aria-label=\"Document details\">\n<div class=\"docs-icon goog-inline-block \">\n<div class=\"docs-icon-img-container docs-icon-img docs-icon-info\" aria-hidden=\"true\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"docs-titlebar-badge-container docs-save-indicator-container goog-inline-block\">\n<div class=\"goog-control\" tabindex=\"0\" role=\"button\" aria-hidden=\"false\" aria-disabled=\"false\" data-tooltip=\"See document status\" aria-label=\"Document status: Saved to Drive.\">\n<div class=\"docs-titlebar-badge docs-save-indicator\">\n<div id=\"docs-save-indicator-id\" class=\"docs-save-indicator-icon goog-inline-block\">\n<div class=\"docs-icon goog-inline-block \">\n<div class=\"docs-icon-img-container docs-icon-img docs-icon-cloud-check\" aria-hidden=\"true\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"docs-activity-indicator-container goog-inline-block\">\n<div id=\"docs-activity-indicator\" class=\"goog-inline-block\" aria-live=\"polite\"><\/div>\n<\/div>\n<\/div>\n<p>[\/vc_column_text][\/vc_column][vc_column width=&#8221;1\/2&#8243;][\/vc_column][\/vc_row][vc_row][vc_column]<div class=\"templatera_shortcode\"><div class=\"vc_row wpb_row vc_row-fluid breadcrumb\"><div class=\"wpb_column vc_column_container vc_col-sm-12\"><div class=\"vc_column-inner\"><div class=\"wpb_wrapper\">\n\t<div class=\"wpb_text_column wpb_content_element \" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<span><span><a href=\"https:\/\/www.newburyelectronics.co.uk\/innovation\/\">Home<\/a><\/span>\n\n\t\t<\/div>\n\t<\/div>\n<\/div><\/div><\/div><\/div><\/div>[\/vc_column][\/vc_row][vc_row css=&#8221;.vc_custom_1617273433747{margin-bottom: 33px !important;background-color: #eef0ef !important;}&#8221;][vc_column css=&#8221;.vc_custom_1618992219894{padding-left: 20px !important;background-color: #4cbe99 !important;}&#8221; el_class=&#8221;whitetext corner-lines&#8221;][vc_column_text css=&#8221;.vc_custom_1618992255183{padding-right: 20px !important;padding-left: 20px !important;}&#8221;]<span style=\"font-weight: 400;\">It is increasingly common for modern electronic designs to incorporate some level of computational processing capability. A driving factor behind this trend is the expectation for products to operate intelligently, connect to the Internet, operate with mobile devices and implement sophisticated user interfaces. Even when such features are not required, it is often more cost effective and energy efficient to implement the majority of a product\u2019s functionality in software rather than hardware.<\/span><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Typically, the means by which a hardware design gains computational capability is via the inclusion of a component called a microcontroller. This is essentially a complete computer, incorporating CPU, memory and input\/output interfaces on a single chip, sometimes referred to as a system-on-chip (SoC). A program that runs on a microcontroller is referred to as firmware &#8211; software tightly coupled to the hardware it runs on.<\/span><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Many of the designs we have helped clients bring to market required supporting software to be developed including apps for interacting with products via iOS and Android mobile devices, backend services for Internet-of-Things (IoT) devices and Windows\/Linux\/Web applications for control and data visualization.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In addition to the experience and knowledge we have accrued through developing firmware and software for a wide range of industries, we have invested time in implementing a number of code libraries and systems in-house to enable us to develop code for new applications quickly and efficiently.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">We develop firmware primarily in C targeted at ARM Cortex-M (STM32, nrf51\/52, SAM), AVR and PIC microcontroller architectures. Typically we build firmware using GNU GCC and CMake but adapt easily to other toolchains and architectures when a project mandates doing so.<\/span><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Depending on the target platform, we develop software in a wide range of languages including Swift, Java, Javascript (for both browser and backend via NodeJS), C++ and C#. We also have experience embedding Javascript, Lua and TCL into software and firmware when applications require scripting capability.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">All firmware and software we develop is version controlled using Git and maintained in repositories via Atlassian BitBucket. This enables us to track changes made to source code throughout its lifecycle and assists in the management of firmware\/software deployment.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Most software and firmware developments involve writing many thousands of lines of code, so it is important that the code is well structured and documented to facilitate its long term maintenance. Beyond documenting the features and behaviours required of a piece of firmware\/software, at the specification stage of a project, we make extensive use of inline documentation (using tools such as DOxygen and Javadoc) to ensure every module and every function we write is accompanied by a description of what it does.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To ensure the software and firmware we develop functions as expected and continues to do so as new features are added or existing features are modified, we make use of a number of regression testing techniques. For software testing, we use various well established unit testing,\u00a0 and integration testing frameworks (JUnit, Mockito, XCTest, Mocha, Google Test) depending on the programming language being used for a particular project and the target platform.<\/span><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">It is fairly typical for us to begin developing firmware for a product before a prototype of the hardware it is to run on exists. We use abstraction and emulation frameworks, developed in-house, to allow us to run firmware tests and simulate the external stimuli to which the firmware must react without us having hardware to hand. Unit testing and early integration testing are performed using this method. Once we have prototype hardware for a project, we are able to run these same tests on the target hardware. In both cases, testing is automated using Expect and various utility programs developed in-house.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">As part of our deployment strategy we use Atlassian Bamboo, integrated with BitBucket to enforce how and when a piece of firmware or software can be released for production. Whenever we commit new or modified code to a repository held by BitBucket, Bamboo automatically builds and tests the code, generating a report to indicate the success or failure of any tests. Rules are set up so that it is only possible to mark a version of code for release once all of its associated tests pass. To ensure the effectiveness of this strategy, we strive to ensure the tests we develop for a project achieve a high level functionality coverage.<\/span><\/p>\n<p><a class=\"button\" href=\"\/get-a-quote\/\">Enquire Now<\/a><\/p>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row full_width=&#8221;stretch_row&#8221; css=&#8221;.vc_custom_1617273420705{background-color: #eef0ef !important;}&#8221;][vc_column]<div class=\"templatera_shortcode\"><div class=\"vc_row wpb_row vc_row-fluid\"><div class=\"footer-contact-tmlt wpb_column vc_column_container vc_col-sm-8\"><div class=\"vc_column-inner\"><div class=\"wpb_wrapper\">\n\t<div class=\"wpb_text_column wpb_content_element \" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<div role=\"form\" class=\"wpcf7\" id=\"wpcf7-f58-o1\" lang=\"en-US\" dir=\"ltr\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/innovation\/wp-json\/wp\/v2\/pages\/404#wpcf7-f58-o1\" method=\"post\" class=\"wpcf7-form init online-quote\" novalidate=\"novalidate\" data-status=\"init\">\n<div style=\"display: none;\">\n<input type=\"hidden\" name=\"_wpcf7\" value=\"58\" \/>\n<input type=\"hidden\" name=\"_wpcf7_version\" value=\"5.4.1\" \/>\n<input type=\"hidden\" name=\"_wpcf7_locale\" value=\"en_US\" \/>\n<input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f58-o1\" \/>\n<input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/>\n<input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/>\n<input type=\"hidden\" name=\"_wpcf7_recaptcha_response\" value=\"\" \/>\n<\/div>\n<div class=\"title\">Enquire Now<\/div>\n<div class=\"row no-gutters\">\n  <div class=\"col-6\">\n    <span class=\"wpcf7-form-control-wrap your-name\"><input type=\"text\" name=\"your-name\" value=\"\" size=\"40\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" \/><\/span>\n    <label for=\"your-name\">Name <\/label>\n  <\/div>\n  <div class=\"col-6\">\n    <span class=\"wpcf7-form-control-wrap your-company\"><input type=\"text\" name=\"your-company\" value=\"\" size=\"40\" class=\"wpcf7-form-control wpcf7-text\" aria-invalid=\"false\" \/><\/span>\n    <label for=\"your-company\">Company<\/label>\n  <\/div>\n  <div class=\"col-6\">\n    <span class=\"wpcf7-form-control-wrap your-email\"><input type=\"email\" name=\"your-email\" value=\"\" size=\"40\" class=\"wpcf7-form-control wpcf7-text wpcf7-email wpcf7-validates-as-required wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" \/><\/span>\n    <label for=\"your-email\">Email<\/label>\n  <\/div>\n  <div class=\"col-6\">\n    <span class=\"wpcf7-form-control-wrap your-tel\"><input type=\"tel\" name=\"your-tel\" value=\"\" size=\"40\" class=\"wpcf7-form-control wpcf7-text wpcf7-tel wpcf7-validates-as-tel\" aria-invalid=\"false\" \/><\/span>\n    <label for=\"your-tel\">Tel<\/label>\n  <\/div>\n  <div class=\"col-12\">\n    <span class=\"wpcf7-form-control-wrap your-message\"><textarea name=\"your-message\" cols=\"40\" rows=\"10\" class=\"wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\"><\/textarea><\/span>\n    <label for=\"your-message\">What you need<\/label>\n  <\/div>\n  <div class=\"col-12\">\n    <input type=\"submit\" value=\"Enquire Now\" class=\"wpcf7-form-control wpcf7-submit button cta\" \/>\n  <\/div>\n<\/div><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div><\/form><\/div>\n\n\t\t<\/div>\n\t<\/div>\n<\/div><\/div><\/div><\/div><\/div>[\/vc_column][\/vc_row][vc_row][vc_column][vc_empty_space height=&#8221;1px&#8221;][\/vc_column][\/vc_row]<\/p>\n","protected":false},"excerpt":{"rendered":"Software Development Home It is increasingly common for modern electronic designs to incorporate some level [...]","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.6.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<meta name=\"description\" content=\"We have experience developing software for a range of industries. In-house code libraries &amp; systems enable us to efficiently develop code for applications.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.newburyelectronics.co.uk\/innovation\/software-development\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Software Development | Newbury Innovation\" \/>\n<meta property=\"og:description\" content=\"We have experience developing software for a range of industries. In-house code libraries &amp; systems enable us to efficiently develop code for applications.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.newburyelectronics.co.uk\/innovation\/software-development\/\" \/>\n<meta property=\"og:site_name\" content=\"Newbury Innovation\" \/>\n<meta property=\"article:modified_time\" content=\"2021-04-28T12:28:27+00:00\" \/>\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=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.newburyelectronics.co.uk\/innovation\/#website\",\"url\":\"https:\/\/www.newburyelectronics.co.uk\/innovation\/\",\"name\":\"Newbury Innovation\",\"description\":\"Just another Newbury Electronics site\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.newburyelectronics.co.uk\/innovation\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.newburyelectronics.co.uk\/innovation\/software-development\/#webpage\",\"url\":\"https:\/\/www.newburyelectronics.co.uk\/innovation\/software-development\/\",\"name\":\"Software Development | Newbury Innovation\",\"isPartOf\":{\"@id\":\"https:\/\/www.newburyelectronics.co.uk\/innovation\/#website\"},\"datePublished\":\"2021-04-01T10:53:53+00:00\",\"dateModified\":\"2021-04-28T12:28:27+00:00\",\"description\":\"We have experience developing software for a range of industries. In-house code libraries & systems enable us to efficiently develop code for applications.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.newburyelectronics.co.uk\/innovation\/software-development\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.newburyelectronics.co.uk\/innovation\/software-development\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.newburyelectronics.co.uk\/innovation\/software-development\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.newburyelectronics.co.uk\/innovation\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Software Development\"}]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/www.newburyelectronics.co.uk\/innovation\/wp-json\/wp\/v2\/pages\/404"}],"collection":[{"href":"https:\/\/www.newburyelectronics.co.uk\/innovation\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.newburyelectronics.co.uk\/innovation\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.newburyelectronics.co.uk\/innovation\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.newburyelectronics.co.uk\/innovation\/wp-json\/wp\/v2\/comments?post=404"}],"version-history":[{"count":3,"href":"https:\/\/www.newburyelectronics.co.uk\/innovation\/wp-json\/wp\/v2\/pages\/404\/revisions"}],"predecessor-version":[{"id":461,"href":"https:\/\/www.newburyelectronics.co.uk\/innovation\/wp-json\/wp\/v2\/pages\/404\/revisions\/461"}],"wp:attachment":[{"href":"https:\/\/www.newburyelectronics.co.uk\/innovation\/wp-json\/wp\/v2\/media?parent=404"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}