Code reviews (or peer reviews) are a good way of identifying bugs and possible improvement approaches. They also enable you to follow any guidelines and meet the necessary standards.
Unit tests ensure the functionality of the individual components of the software. They also drastically simplify the debugging and help to improve the efficiency of the entire development process.
Combining well-tested units into modules and components poses new requirements for the testing process and requires different methods to ensure safety and correct functionality.
A fully integrated system needs to meet the requirements without any security vulnerabilities and satisfy the user at the same time. System tests ensure this and thoroughly check the overall design.