Software Development Engineer in Integration (Remote possible)
ANPC builds Transponder Landing Systems (TLS) and other products to assist in the tracking and landing of aircraft. Our products are safety-critical (DO-278) systems that include complex hardware/software interfaces using multiple technologies. System integration - Quality Assurance and testing - is a core part of our safety-critical development and includes involvement in all aspects of system design.
Position Summary
Our software integration engineer position is an independent growth track. Software developers early in their career work as our primary integration engineers as a path toward placement as a developer on our software team. As well as helping the developer integrate in our team, the role provides valuable training for the developer in test-driven development, the software development lifecycle, and complex system testing. The integration engineer will develop and perform test plans and run full system tests as well as document issues. They will also develop new software and features in the Continuous Integration (CI) pipeline and help build the next generation Integration features such as Continuous reporting and continuous delivery. The integration engineer is supported and mentored by software developers who previously worked in the integration engineer's role.
Software Environment
Our software environment is split into two areas: Development (C/C++) and Integration (C++ and Python). Both environments include:
- Desktop software running on the developer's laptop
- Virtualized systems that run in sets of VMs
- Physical systems running in the lab
- Fielded systems running at The Dalles airport (KDLS)
Development Environment
- Microsoft in Windows environment
- Visual Studio IDE
- Core code is written in C
- User interfaces in C++ using MFC
- Systems include Windows, QNX Real-time operating system, and digital signal processors (DSP)
- Complex hardware/software systems and interfaces
- DO-178 safety critical system
- Git with Gitlab as organization tool
Quality Assurance Environment
- Google Test (This C++ framework is used to test all C code)
- Python
- Gitlab CI/CD pipeline
Key Responsibilities
- Managing software version control
- Designing, developing and executing formal software testing
- Software quality assurance and tools
- Documentation, verbal communication and coordination
- Review requirements, specifications, and technical design documents to provide timely and meaningful feedback
- Liaise with internal teams (e.g. developers and product managers) to identify system requirements
- Test application (GUI) software in conjunction with networked audio/media systems running embedded software
- Test interaction scenarios with finished hardware devices
- Develop and document strategies for efficient testing of our products
- Create and execute detailed, comprehensive, and well-structured test plans and test cases
- Develop and apply testing processes for new and existing products to meeting client needs
- Maintain internal QA-specific information systems to track quality assurance metrics (bug tracking, test servers)
- Verify defect fixes, including testing of appropriate related areas
- Stay up-to-date with new testing tools and test strategies
- Other duties as assigned by Supervisor
Required
- BS in Software Engineering or equivalent experience
- A minimum of 3 years of software engineering experience within a validated software quality environment
- Ability to read, write and interpret technical documents such as training manuals, corporate documents, and contracts.
- Ability to communicate effectively with management, customers and employees in a positive manner.
- Provide proof of Covid-19 Vaccination on your first day of employment and agree to follow CDC, Oregon state and ANPC coronavirus guidelines.
Preferred
- At least 2 years' experience in a safety-critical software development environment
- Ability to read, write and interpret technical mechanical drawings
- Advanced knowledge of Microsoft software
- Ability to develop software and hardware architectures/partitioning, including definition of interfaces and use cases.