The role of software in critical missions continues to expand. As new technologies evolve that depend on the flexibility of software, attack surfaces increase and new vulnerabilities emerge. This talk explores the expanding landscape of vulnerabilities that accompanies the increasing reliance on software and examines key steps to help mitigate the increased risk. Topics include the development of appropriate requirements for the mission, system, and software; development and testing practices for increasing confidence in software assurance; and evaluation approaches for existing systems. The talk will conclude with a view of emerging approaches to further improve the delivery and sustainment of mission critical software.