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 274
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
- Explain and use the foundational aspects of software engineering.
- Explain the role of a software engineer and software engineering as an engineering discipline.
- Apply a contemporary analysis and design approach, such as object-oriented analysis and design to a case study.
- 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.
- Describe and compare alternative software process standards and processes (e.g. waterfall, incremental, spiral, prototyping, empirical and agile methods)
- Explain roles and responsibilities in a software team, and management issues of teams.
- 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.
- Explain the motivation for defining sufficiently explicit requirements.
- Analyze and create a requirements specifications using scenarios, use cases, and use case diagrams from a set of customer needs.
- 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.
- Explain the value of construction technologies such as version control and design tools to assist the software development practice.
- Explain the purpose of version control and apply it to manage software design or code artifacts.
- Apply software tools to create design artifacts such as UML diagrams.
- Explain software design concepts and apply them.
- Describe concepts and strategies in software design including architectural design, detailed design, and user interface design.
- Create UML class diagrams that represent a problem domain from a requirement specification.
- Create UML sequence diagrams to express class behavior.
- Evaluate alternative designs at an introductory level through reviews (e.g. review of class diagrams).
- Describe general design principles: coupling, cohesion, portability, design by responsibility, etc.
- Describe several design patterns (GoF, etc).
- Demonstrate the ability to work in a team and to communicate, orally and in writing, a software design to various audiences
- Work in a team to experience a portion of the software development lifecycle.
- Make oral presentations of system design artifacts to users or peers.
- Compile well-written design artifacts for presentation to users, peers, or the instructor.
- Document a project plan, document progress, and communicate progress to users, peers, or the instructor.
- Explain testing and quality assurance strategies.
- Distinguish between program validation and verification.
- Distinguish among the different types and levels of testing (unit, integration, systems, acceptance, regression, black box, white box).
- Use abuse cases to identify potential security requirements.
- Describe test-driven design.