ESOF 322

Software Engineering

3 Cr. (Hrs.:3 Lec.)

Studies the process of engineering software applications and systems. Topics include process models, metrics, requirements engineering, design, testing, quality assurance, configuration management and software inspections. Students gain experience in these areas by working on a software project. Prerequisites: CSCI 332 & Junior standing. (1st)

Course generally offered fall (1st) semester.


E1. Students have a basic understanding of object-oriented programming and can create multi-class programs in C++. (CSCI 232)

E2. Students know basic error-handling, and debugging techniques. (CSCI 135, 136, 232)

Course Outcomes:

R1. Understand what it means to “engineer” software. (CS: 1, 2; SE: 1, 2)

R2. Understand standard life-cycle process models such as the Waterfall, Incremental, Spiral and Agile models. Know the properties of these models, and given a development environment and project goals can select an appropriate development process model.(SE: 1, 2, 7)

R3. Understand security and social issues and responsibilities and be able to analyze the local and global impact of computing on individuals, organizations, and society. (SE: 4, 7)

R4. Understand quality issues such as usability, reliability, availability, maintainability, portability, and performance, and how these must be considered throughout the life cycle. (SE: 1, 2, 7)

R5. When given the description of a small program, be able to write a consistent and complete set of concise and verifiable requirements for that program that conforms to a small program standard. (CS: 1, 2, 3; SE: 1, 2, 3)

R6. When a given set of requirements for a small program that conforms to the requirements satisfying R5, be able to write a design for that program that conforms to a design standard. (CS: 2, 3; SE: 1, 2, 3)

R7. When given the requirements and design for a small module, be able to specify test conditions and test files/scenarios and scripts that provide a complete functional test of the program. For C++ programs students can obtain and explain the test coverage measures for these tests.(CS: 2, 3; SE: 1, 2, 3)

R8. When given the requirements and design for a small module be able to write a random test file generator. (CS: 2; SE: 1, 2, 3)

R9. Appreciate the need for and can adhere to a coding standard. (CS: 2; SE: 1)

R10. When given the requirements and design, be able to write low-defect (by inspection) correctness arguments for the design algorithm that conform to a module development standard. (CS: 3; SE: 1, 2, 3)

R11. When given code that conforms to a source file standard and is documented by proceeding sections of its standard, construct an argument that the code correctly implements the algorithm statements. (CS: 3; SE: 1, 2, 3)

R12. Understand the importance of software inspections throughout the life cycle, and will have performed several such reviews and inspections according to the documented procedures for such reviews and inspections. (CS: 2; SE: 1, 2)

R13. Understand the difference between ethics and morals and the purpose of ethical codes. Students are familiar with the joint ACM/IEEE Software Engineering Code of Ethics and can use it to analyze the impact of computing and engineering solutions on individuals, organizations, and society. (CS: 4; SE: 4)

5-a-1 - Substantial coverage of algorithms and complexity, computer science theory, concepts of programming languages, and software development

III-1-2-1 - Computing fundamentals, software design and construction, requirements analysis, security, verification, and validation
III-1-2-2 - Software engineering processes and tools appropriate for the development of complex software systems