CSCI 420

Software Engineering

Coordinator: David Hutchens

Credits: 4.0

Description

Overview of software engineering concentrating on phases of the software development life cycle including waterfall model, iterative enhancement, prototyping, axiomatic and algebraic specifications, user interface design, and object-oriented design, testing, quality assurance and reliability. Team project provides students with practical experience applying techniques. Offered in spring.

Prerequisites

C- or higher in CSCI 330 and CSCI 362.

Sample Textbooks

Course Outcomes

  1. have experience in software development activities from specification to testing and maintenance.
  2. have experienced the difficulties of working in teams and investigated techniques for overcoming those difficulties.
  3. have presented technical material to a group.
  4. have created precise and informative documents for each stage of software development.
  5. be aware of various approaches to software development such as waterfall, iterative enhancement, and prototyping.
  6. be familiar with formal specification notations such as axiomatic and algebraic specifications.
  7. have applied several approaches to software design such as data flow oriented, data structure oriented, and object oriented techniques.
  8. have examined programs formally and understand how such an examination aids our understanding of any program's function.
  9. understand the purpose and effectiveness of various testing strategies such as black box, operational, and structural testing.
  10. understand the importance of quality assurance and reliability of software systems.
  11. understand professional responsibilities and the software engineering code of ethics.
  12. have written a paper analyzing a situation using the SE code of ethics.

Major Topics Covered

  1. The Software Life Cycle.
    1. The Software Life Cycle
    2. The Waterfall Model
      1. Requirements
      2. Specification
      3. Design
      4. Coding
      5. Testing
      6. Maintenance
    3. Iterative Enhancement
    4. Spiral Model
    5. Agile Development
  2. Software Management.
    1. Team organization
      1. Chief Programmer Team
      2. Democratic Team
      3. Manager Team
    2. Planning and Scheduling
      1. Milestones
      2. PERT Charts
      3. Activity Charts
      4. Staff Allocation
    3. Cost Estimation
      1. Project Size Estimation
      2. Cost Models
  3. Specifications.
    1. System Modeling
    2. Functional (I/O) Specifications
    3. Non-Functional Specifications
    4. Prototyping
    5. Formal Specifications
      1. Axiomatic Specifications
      2. Functional Specifications
      3. Algebraic Specifications
  4. Design.
    1. Design Goals
    2. Object Oriented Design
    3. Design Patterns
    4. Architectural Design
    5. User Interface Design
  5. Verification and Validation.
    1. Specification based testing
    2. Code based testing 
      1. Statement Coverage
      2. Path Coverage
      3. Branch Coverage
      4. Expression Coverage
      5. All-Uses Coverage
    3. Formal Verification 
      1. Functional Based Correctness
      2. Axiomatic Based Correctness
    4. Code Reading
  6. Software Life Cycle Management Issues.
    1. Maintenance
    2. Configuration Management
    3. Quality Assurance
    4. Measurement and Evaluation
  7. Project Feasibility
    1. Financial
    2. Technical
    3. Ethical

Sample Laboratory Projects

  1. Introduction to lab. Generate a schedule for the completion of your team project. Include team leaders, and other major assignments. (The team project lasts all semester.)
  2. Develop a DFD (Data Flow Diagram) and structure chart describing your project. (1 week)
  3. Develop OMT (Object Modeling Technique) diagrams to describe your project. (1 week)
  4. Test your project using the monitoring tools supplied with the compiler on the system. (2 weeks)
  5. Profile your project using the monitoring tools supplied with the compiler on the system. Note the portions of code where the most execution time is spent. Try to optimize those portions of the code (without destroying the design). (2 weeks)
  6. Use a formal specification technique to specify an appropriate portion of your project. (2 weeks)