Development Methods
This unit builds the foundation for core concepts in the Software Engineering knowledge area, most notably in the Software Processes, Software Design and Software Evolution knowledge units.
SDF/Development Methods
Topics:
Program comprehension
Program correctness
Types of errors (syntax, logic, run-time)
The concept of a specification
Defensive programming (e.g. secure coding, exception handling)
Code reviews
Testing fundamentals and test-case generation
The role and the use of contracts, including pre- and post-conditions
Unit testing
Simple refactoring
Modern programming environments
Code search
Programming using library components and their APIs
Debugging strategies
Documentation and program style
Learning Outcomes:
Trace the execution of a variety of code segments and write summaries of their computations. [Assessment]
Explain why the creation of correct program components is important in the production of high-quality software. [Familiarity]
Identify common coding errors that lead to insecure programs (e.g., buffer overflows, memory leaks, malicious code) and apply strategies for avoiding such errors. [Usage]
Conduct a personal code review (focused on common coding errors) on a program component using a provided checklist. [Usage]
Contribute to a small-team code review focused on component correctness. [Usage]
Describe how a contract can be used to specify the behavior of a program component. [Familiarity]
Refactor a program by identifying opportunities to apply procedural abstraction. [Usage]
Apply a variety of strategies to the testing and debugging of simple programs. [Usage]
Construct, execute and debug programs using a modern IDE and associated tools such as unit testing tools and visual debuggers. [Usage]
Construct and debug programs using the standard libraries available with a chosen programming language. [Usage]
Analyze the extent to which another programmer’s code meets documentation and programming style standards. [Assessment}
Apply consistent documentation and program style standards that contribute to the readability and maintainability of software. [Usage]