- University: Salahaddin University-Erbil
- Department: Electrical Engineering Dept.
- My Status: Lecturer
- Level: BSc
- Year: 2018-2020
Course Description
This course provides a comprehensive introduction to software engineering principles, methodologies, and practices. Software engineering is the systematic approach to developing, operating, and maintaining software systems, transforming coding activities into manageable, repeatable processes that can be effectively managed and transferred between development teams.
The curriculum covers the entire software development lifecycle, from initial requirements analysis through design, implementation, testing, deployment, and maintenance. Students will learn various software development methodologies, design patterns, and best practices that enable the creation of high-quality, maintainable software systems.
Through case studies, group projects, and hands-on exercises, students will gain practical experience in applying software engineering principles to real-world development scenarios, preparing them for professional software development careers.
Prerequisites
- Programming Fundamentals
- Data Structures and Algorithms
- Basic mathematics and logic
- Understanding of computer systems
- Teamwork and communication skills
Course Objectives
Upon completion of this course, students will be able to:
- Understand and apply software engineering principles and methodologies.
- Conduct comprehensive requirements analysis and specification.
- Design software systems using appropriate architectural patterns.
- Implement software development processes and methodologies.
- Apply testing strategies and quality assurance techniques.
- Manage software projects and development teams effectively.
- Maintain and evolve software systems throughout their lifecycle.
Course Outline
Week 1: Introduction to Software Engineering
- Software engineering fundamentals and principles
- Software development challenges and solutions
- Software quality attributes and characteristics
- Software engineering ethics and professional responsibility
- Current trends and future directions in software engineering
- Lab: Setting up development environment and tools
Week 2: Software Development Lifecycle Models
- Waterfall model and its variations
- Iterative and incremental development
- Spiral model and risk-driven development
- Agile methodologies (Scrum, Kanban, XP)
- Lab: Project management tools and methodologies
Week 3: Project Management and Planning
- Project planning and estimation techniques
- Risk management and mitigation strategies
- Resource allocation and team management
- Project monitoring and control
- Lab: Project planning and estimation exercises
Week 4: Requirements Engineering
- Requirements elicitation techniques
- Requirements analysis and specification
- Functional and non-functional requirements
- Requirements validation and verification
- Lab: Requirements gathering and documentation
Week 5: Software Design Principles
- Design principles and patterns
- Architectural design and system architecture
- Detailed design and component design
- Design quality and evaluation
- Lab: Software design and architecture modeling
Week 6: Software Implementation and Coding
- Coding standards and best practices
- Code organization and modularity
- Version control and configuration management
- Code review and quality assurance
- Lab: Version control and collaborative development
Week 7: Midterm Exam and Review
- Midterm Exam: Covers weeks 1-6 material
- Review of software engineering fundamentals
- Project management practice
- Lab: Exam review and case study analysis
Week 8: Software Testing and Quality Assurance
- Testing fundamentals and strategies
- Unit testing and integration testing
- System testing and acceptance testing
- Test-driven development (TDD)
- Lab: Testing frameworks and test case development
Week 9: Software Deployment and Delivery
- Deployment strategies and environments
- Release management and versioning
- Installation and configuration management
- Deployment automation and DevOps practices
- Lab: Deployment automation and CI/CD pipelines
Week 10: Software Documentation
- Documentation types and purposes
- Technical documentation standards
- User documentation and manuals
- API documentation and specifications
- Lab: Documentation tools and standards
Week 11: Software Maintenance and Evolution
- Maintenance types and activities
- Software evolution and reengineering
- Legacy system maintenance
- Performance optimization and tuning
- Lab: Maintenance planning and legacy system analysis
Week 12: Agile Development and Modern Practices
- Agile principles and values
- Scrum framework and practices
- Continuous integration and deployment
- DevOps culture and practices
- Lab: Agile project management and Scrum simulation
Week 13: Research and Emerging Trends
- Current research areas in software engineering
- Emerging technologies and methodologies
- Software engineering challenges and solutions
- Industry best practices and standards
- Lab: Research paper analysis and trend evaluation
Week 14: Final Exam Preparation and Review
- Comprehensive review of all course material
- Practice problems and sample questions
- Final Exam: Theoretical component
- Lab: Final exam practice and preparation
Week 15: Final Project and Course Wrap-up
- Final Exam: Practical software engineering project
- Course evaluation and feedback
- Future learning paths and advanced topics
- Lab: Final project presentation and evaluation
Textbooks
- [Recommended] “Software Engineering: A Practitioner’s Approach” by Roger S. Pressman
- [Optional] “Clean Code: A Handbook of Agile Software Craftsmanship” by Robert C. Martin
Assessment
- Group Projects (30%)
- Individual Assignments (25%)
- Case Study Analysis (20%)
- Midterm Exam (15%)
- Final Exam (10%)