One of the best ways that we have discovered through this class is the use of unit testing. Unit testing is an excellent way of narrowing down your code into the smallest chunks and rigorously testing those chunks to see if they work as intended. There are many different methods to do this such as test driven development, equivalance partitioning, and boundary analysis. There are even more techniques as well such as white / black box testing however these are the techniques that I used in this project.
When it comes to users needs for the software, I like to write out comments of the expected needs as psuedo code the then be filled in. Along with that and using test driven development techniques I can write tests that indicate exactly what the user needs and write my code to match my comments and ensure that the tests succeed.
Software design is a very complex and large undertaking requiring many iterative steps to collect requirements, understand user needs, design documents as a reference, understand security needs, develop the software, test the software and then finally deploy the software. Each of these steps will almost certainly occur more than once and at any point during the software development life cycle and as such require a lot of time and diligence. The main concern from this course is designing of secure and functional software and as such using automated tools may help to achieve these goals, as well as having the discipline to create the unit tests to ensure that software is fully functional.