Software development
With the perfect blend of experience, talent and rigour, we will put together a team that’s tailored to your project and manage every aspect of your software project through to delivery.
DCA's software capability
The art of writing efficient, reliable, maintainable code is a challenging one that requires the right balance of discipline, experience, creativity and diligence.
Underpinned by our ISO 9001 and ISO 13485 approved software development procedures, we relish software challenges ranging from early-stage prototypes through to final production-ready systems. Software for high-integrity medical devices is developed according to our IEC 62304 and ISO 14971 aligned processes.
We are as comfortable with bit-bashing ports on a small ARM microcontroller as we are with developing Linux drivers, user interfaces (GUIs) and applications – even extending to proof-of-concept mobile Apps and web pages to complete the system.
Software specification and architecture
The majority of software bugs and functional defects can be traced to inadequate, ambiguous or simply incorrect requirements capture. Establishing the software specification and developing the architecture at the beginning of a project is critical to effective risk management and project planning and allows the functionality to be partitioned into areas that can be developed in parallel.
We use tools such as UML to trace requirements, prototype programme flow, identify data flows and define interfaces so that interactions can be managed efficiently.
At this stage we will also decide whether to use an RTOS, which could be FreeRTOS, Keil RTX, CMX or even Linux or Android.
Coding
Once the software architecture and design are in place, coding can begin. This will be undertaken against DCA’s in-house coding standard.
We have years of experience in various languages, from C and C++ through to C# and Java, and even Assembler if the need arises. We are comfortable with many development environments, including Eclipse, Gnu, Keil µVision, IAR Embedded Workbench, Kinetis Design Studio (KDS), Code Composer Studio (CCS), DAVE and more.
Software re-use
Increasing system complexity means that software engineers now often face the choice of whether to “make, buy or use open source” for software building blocks.
We take the time to properly evaluate the code in question and the integrity and traceability requirements of the intended application before deciding whether code re-use is a viable option. In so doing, we can minimise the project risk, maximise the re-use of trusted code and focus on your specific application requirements.
Integrated software and hardware
Combining off-the-shelf development kits with prototype boards allows us to begin developing software on representative hardware as early as possible.
The software and the hardware designs are developed and cross-checked in tandem to ensure a smooth migration to the final hardware solution as it becomes available.
We can also call upon expertise from our other in-house skill areas including User Experience (UX), human factors and mechanical engineering to provide a truly integrated approach to delivering persuasive multi-faceted products.
Real-time control
Correctly prioritising tasks in a real-time environment ensures time-critical operations such as motor control run smoothly, while maintaining a responsive user interface.
We are comfortable with partitioning these operations across multi-core or multiple microprocessors if required, with or without operating systems such as Embedded Linux, Android and FreeRTOS.
Medical software
Software is ever increasingly at the heart of successful medical devices, improving the lives of patients and providing important data to clinicians and healthcare providers. At DCA we have the people, the experience, the processes and the passion to design and develop high quality, compliant medical device software to deliver success.
Our experienced software team will work with you to develop a tailored plan for your product that effectively navigates the regulatory requirements. We will bring our attention-to-detail and intelligent approach to the development and support you in making informed decisions, managing safety and cybersecurity risks and developing a great user experience.
Our approach is founded on our ISO 13485 certified Quality Management System and our transparent evidence based philosophy. This is complemented by our mature development methods and processes, which are underpinned by the IEC 62304, ISO 14971, ISO 62366 standards and FDA regulation.
Wireless connected devices
Understanding how smart devices, wearables, home systems and industrial automation can interact productively – and securely – with each other and their users is the key to making a rational and realistic choice when looking at how to add connectivity to your products, systems and services. Our expertise in resolving the contradictory challenges of user experience, data security, battery life, cost and mechanical robustness allows us to design highly novel and innovative products for our clients.
With our experience of Bluetooth Low Energy (BLE), Zigbee, Z-Wave and more, we can work with you to architect and implement your smart system securely.
Internet of Things
With everyone jumping on the “Internet of Things” bandwagon, sometimes it’s hard to see who the experts actually are.
We pride ourselves in cutting through the hype and adding connectivity to products only in ways that are genuinely useful and beneficial to the design. We can integrate smart functionality into your product without adding unnecessary cost or complexity for the user.
Supporting apps and infrastructure
For many new product offerings, interaction with the end user will be through an Android or iOS App, or through a web-based, cloud-hosted dashboard.
Working closely with our User Experience (UX) and human interaction team, we can create proof-of-concept Apps and websites in parallel with the electronics and embedded software, offering an optimised experience across all the platforms you need to support. We can then provide advice on taking these through to fully supported commercial-quality systems.
Process and procedures
All projects are different and have their own project management and documentation requirements.
These can be driven by the regulatory and approvals demands of your industry, the safety critical nature of the application you are targeting or the needs of your own specific development systems.
DCA has evolved a software development process that can be tailored to your needs, whether working towards producing your design history file for a medical device or managing the investment in development appropriately for less safety critical applications.
Agile development
We are capable of adopting an Agile approach to software development, enabling adaptive planning, evolutionary development, early delivery and continuous improvement as well as risk reduction and a rapid and flexible response to change.
Our iterative and incremental development process allows for the evolution of requirements whilst maintaining the appropriate level of documentation for traceability, risk management, high-integrity operation and regulatory compliance. We can tailor our process to your application and market, be it consumer, industrial, commercial, automotive or medical.
Software test cycle
Testing software is an iterative process, carried out at multiple levels from the lowest level drivers through to high level user interfaces. We employ the right test tools and techniques, including validated build server environments, to ensure that our test results are reproducible.
Testing individual software modules independently and repeatably, then verifying the integration of these modules at higher levels is the key to achieving a thoroughly tested system.
Identifying the appropriate level of testing for each module is vital to efficient project delivery. So we tailor our testing rigour to match the project requirements from creating basic proof-of-concept demonstrators through to delivering fully traceable, unit tested and verified code for high integrity systems. We can then support you through the final validation of the software for production.
Test planning
Defining how we will test the software helps us to plan and structure the software architecture, as well as providing a definition of project deliverables and milestones.
Our software processes allow us to plan a tailored software test programme that applies an appropriate degree of rigour for your product application and market in order to verify the correct operation of the software.
We take a proactive approach to software testing and plan for it to take place throughout the project as an integral way of improving quality.
Software verification
We test your software in accordance with the agreed test plan to establish whether its performance is in line with the software specification.
We verify that the software functions as planned at an individual module level before engaging in system-level testing to prove that the integrated software system behaves correctly and consistently.
System integration and testing
Our multidisciplinary approach to system engineering allows us to tailor our testing to ensure that all aspects of the design – from software to electronics to mechanics – mesh together effectively.
Planning for integration testing as part of our development process ensures sufficient time from all the relevant skill areas is assigned to these critical stages.
Test tools
By using the right test tools in the most efficient way we can make testing a day-to-day part of our approach to software development, improving the quality of our software output.
We can make use of unit testing tools such as TESSY to provide thorough MC/DC code coverage and code metrics, if required. Integrating static analysis tools such as Lint at build time provides for methodical and qualitative code analysis, with code reviews and both black-box and white-box testing completing the approach.
User interfaces
DCA’s multidisciplinary expertise allows our User Experience (UX) team to work in tandem with the electronics and software teams to deliver the complete user interface your system deserves and your users will value.
This requires a careful balance to be struck. By implementing detailed, thoughtful design of the individual graphical elements and the menu structures that comprise the UX solution, we are able to deliver a highly sophisticated end result using a relatively low volume of highly efficient software code. This in turn means that the user interface can be built upon lower capacity and cost hardware without any compromise in the user experience.
UI development tools
We have developed bespoke internal tools for the rapid development and evaluation of user interfaces.
We use systems such as Qt together with our internally-developed rapid prototyping system for UIs so that you can review HTML proofs generated directly from the real code early in the project. When you are happy with the results, one click of the mouse generates source code for the target.