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.
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.
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.
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 device development
Developing software for medical devices brings with it many additional challenges and requirements, including higher levels of procedural control, traceability and documentation.
Our ISO 13485 approved processes allow us to develop medical products incorporating software to IEC62304 and IEC13485. We are also experienced in development to IEC60601 and IEC62366 and can pro-actively support you through the entire medical device development cycle, including the application of risk management according to ISO 14971.
We have externally approved processes and procedures in place for developing high integrity software for various product categories, including medical devices and scientific instruments.
Our software team also has first-hand experience of implementing automotive systems to ISO26262 as well as other high integrity development areas, such as military and aerospace (DO178B).
Our quality procedures and software integrity management system provide comprehensive lifecycle traceability whether we are applying Agile, iterative or traditional development methodologies. This in turn means we can provide you with the appropriate documentation pack to support certification.
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.
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.
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.
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.
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.
Connecting disparate and ostensibly incompatible systems in factories, commercial premises and office space has quite different requirements to connected systems in the home.
Our experience of protocols such as PROFIBUS, CAN, PROFINET, MODBUS, EnOcean, Z-Wave and Zigbee allows us to adapt and integrate systems with confidence. And because we appreciate the importance of data security and system reliability we will incorporate appropriate controls to ensure your system behaves correctly even in adverse conditions.
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.