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).

Prerequisite:

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.