Re: "We spend thousands of dollars reviewing every line of code,"
For certifiable development all the 'real work' is in the requirements definitions.
The code and the tests are written independently from these definitions.
The low-level requirements will cover less than (roughly) 6 lines of C code each.
Each requirement will be tested at functional (test the API), high-level (test the high-level requirements) and low-level (test the low-level requirements).
Reviewing starts with the API specifications. Only when they are correct, do the HLR get written and then reviewed against the API and each other for consistency. Then the LLRs are written, reviewed and traced all the way back through the HLR to the API or system specifications.
Test development follows a similar process from the API down to the tests of the HLR and LLR. All test cases are reviewed by humans as well as by automated methods.
The code is then written from the LLR. It is reviewed by humans against the LLR and coding standards, and passed through automated static and dynamic analysis tools. (The test code also uses SA and DA tools.)
The the code is tested by the low-level test cases (testing the LLR), high-level test cases (testing the HLR) and functionally test cases (testing the API/system requirements).
All the proofs of design, requirements, tests, test results and the reviews of all these, are given to the customer as part of the acceptance process, and from them passed onto the certification authority.