01
Course Information
Course Title: SEN2022 Principles Software Engineering
Semester: Fall 2024
Instructor: Dr. Günet Eroglu
Textbook Information
Title: Software Engineering
Author: Ian Sommerville
Edition: Tenth Edition
Publisher: Pearson (Always Learning)
Course Outcomes
Students who successfully complete this course will be able to:
Describe systems analysis and design concepts, and define the components of information systems.
Discuss the essential phases of systems development.
Explain project management tools and various systems analysis approaches for solving information system problems.
Define the scope of information system problems.
Identify the problems, opportunities, and directives that trigger the project.
Define functional and non-functional system requirements and apply fact-finding techniques.
Identify actors and use cases, and construct context and use case model diagrams.
Construct data models and UML diagrams.
Understand basic concepts and constructs of a process model, and construct context, data flow, event, and system diagrams.
Identify alternative system solutions, define six types of feasibility, prepare cost-benefit analyses, and develop system proposal reports.
Grading Policy
Midterm: 30%
Project: 30%
Final Exam: 40%
Course Outline
Preface: 3
Part 1: Introduction to Software Engineering
Chapter 1: Introduction
Chapter 2: Software Processes
Chapter 3: Agile Software Development
Chapter 4: Requirements Engineering
Chapter 5: System Modeling
Chapter 6: Architectural Design
Chapter 7: Design and Implementation
Chapter 8: Software Testing
Chapter 9: Software Evolution
Part 2: System Dependability and Security
Chapter 10: Dependable Systems
Chapter 11: Reliability Engineering
Chapter 12: Safety Engineering
Chapter 13: Security Engineering
Chapter 14: Resilience Engineering
Part 3: Advanced Software Engineering
Chapter 15: Software Reuse
Chapter 16: Component-Based Software Engineering
Chapter 17: Distributed Software Engineering
Chapter 18: Service-Oriented Software Engineering
Chapter 19: Systems Engineering
Chapter 20: Systems of Systems
Chapter 21: Real-Time Software Engineering
Part 4: Software Management
Chapter 22: Project Management
Chapter 23: Project Planning
Chapter 24: Quality Management
Chapter 25: Configuration Management
Introduction to Software Engineering
Definition:
Software engineering is a discipline distinct from mere programming.
It encompasses systematic approaches to software development.
Difference between Computer Science and Software Engineering
Computer Science:
Focuses on theoretical foundations of computation, algorithms, and programming languages.
Software Engineering:
Applies problem-solving tools and techniques to develop software solutions.
Involves both individual and team efforts in problem resolution.
Quality and Reliability of Software
Software Engineering Goals:
Aims to develop high-quality software products and methodologies to improve software development processes.
Necessity of Software:
Essential for national infrastructure, utilities, industrial manufacturing, education, and entertainment.
Challenges in Software Development
Characteristics of Software:
Intangible, changeable, and requires human involvement.
Quality Impact:
Average software products often contain bugs and security vulnerabilities.
Examples of Software Failures:
Errors in critical systems can lead to financial loss, safety compromises, and general dissatisfaction.
Case examples include the Year 2000 bug, airport delays due to software failures, and issues with medical software leading to severe consequences.
Understanding Failure in Software Development
Software Failures Include:
Over-budget projects, missed deadlines, failure to meet customer requirements, and cancellations before completion.
Average Project Success Rates:
36% succeed, 45% are challenged, 19% fail.
Challenges include meetings exceeding cost and time overruns.
Reasons behind Software Failures
Unrealistic project goals.
Poor communication among stakeholders.
Ineffective project management.
Inaccurate resource estimates.
Poorly defined system requirements.
Unmanaged risks and project complexities.
Inadequate software development processes.
Future of Software Engineering
Key Factors:
Increasing demand for faster, more complex systems.
Need for new engineering techniques beyond traditional methods.
Importance of proper software engineering education and methods to improve software reliability and cost efficiency.