CSE 201 Intro to Software Engineering (3 credits)

Catalog description:

Principles of software engineering: Introduction to all phases of the software development life cycle and associated tools and engineering methods including the unified modeling language (UML).


CSE 271 (Object Oriented Programming)

Required topics (approximate weeks allocated):

  • Course Introduction (1.0)
    • The need for a software engineering and management processes
  • Introduction to software life-cycle phases and engineering processes, and alternatives (1.0)
  • Modeling with UML (2.0)
    • Use case diagrams, sequence diagrams, class diagrams, state charts
  • Requirements elicitation and specification  (2.0)
  • Design concepts  (4.0)
    • Design concepts: Architecture, detail design, frameworks, APIs
    • Design principles and patterns
  • Implementation concepts and tools  (1.0) 
    • Frameworks, APIs
    • Design to code
  • Testing concepts, activities, and management  (1.0)
    • Validation, verification, strategies, and tools
    • Defect analysis and tracking
  • Management concepts (1.0)
    • Change and configuration management
    • Project and team management (roles, organization, decision making)
    • Project management metrics and measures
  • Mid-term test and final exam (1.0)
  • Student Presentations (2.0)

Learning Outcomes

1: Explain and use the foundational aspects of software engineering.

1.1: Explain the role of a software engineer and software engineering as an engineering discipline.

1.2: Apply a contemporary analysis and design approach, such as object-oriented analysis and design to a case study.

1.3: Describe the software development life-cycle and need for associated processes: the life-cycle phases, engineering and management processes, and relationships between the phases and processes.

1.4: Describe and compare alternative software process standards and processes (e.g. waterfall, incremental, spiral, prototyping, empirical and agile methods)

1.5: Explain roles and responsibilities in a software team, and management issues of teams.

2: Develop clear, concise, and sufficiently formal life-cycle artifacts including requirements, design, implementation, and test documentation for software systems based on needs of users and stakeholders.

2.1: Explain the motivation for defining sufficiently explicit requirements.

2.2: Analyze and create a requirements specifications using scenarios, use cases, and use case diagrams from a set of customer needs.

2.3: Brainstorm alternative solutions, select from alternatives, and create designs and appropriate documentation using UML class and sequence diagrams and other appropriate methods for the problem domain.

3: Explain the value of construction technologies such as version control and design tools to assist the software development practice.

3.1: Explain the purpose of version control and apply it to manage software design or code artifacts.

3.2: Apply software tools to create design artifacts such as UML diagrams.

4: Explain software design concepts and apply them.

4.1: Describe concepts and strategies in software design including architectural design, detailed design, and user interface design.

4.2: Create UML class diagrams that represent a problem domain from a requirement specification.

4.3: Create UML sequence diagrams to express class behavior.

4.4: Evaluate alternative designs at an introductory level through reviews (e.g. review of class diagrams).

4.5: Describe general design principles: coupling, cohesion, portability, design by responsibility, etc.

4.6: Describe several design patterns (GoF, etc).

5: Demonstrate the ability to work in a team and to communicate, orally and in writing, a software design to various audiences

5.1: Work in a team to experience a portion of the software development lifecycle.

5.2: Make oral presentations of system design artifacts to users or peers.

5.3: Compile well-written design artifacts for presentation to users, peers, or the instructor.

5.4: Document a project plan, document progress, and communicate progress to users,

peers, or the instructor.

6: Explain testing and quality assurance strategies.

6.1: Distinguish between program validation and verification.

6.2: Distinguish among the different types and levels of testing (unit, integration, systems, acceptance, regression, black box, white box).

6.3: Use abuse cases to identify potential security requirements.

6.4: Describe test-driven design.