SOFTWARE ENGINEERING
Software Engineering introduces students to the systematic methods, principles, tools, and practices used to design, develop, test, deploy, and maintain high-quality software systems. The course covers the Software Development Life Cycle (SDLC), requirements engineering, software design, programming practices, testing, project management, Agile development, DevOps, software quality, maintenance, security, and professional software engineering practices.
Software Engineering is a comprehensive course unit designed to equip students with the knowledge, principles, methodologies, and practical skills required to plan, analyze, design, develop, test, deploy, maintain, and manage software systems in a systematic and professional manner.
The course introduces students to the fundamental principles of software engineering and examines the differences between simply writing computer programs and engineering complete software solutions that are reliable, secure, maintainable, scalable, usable, and capable of meeting organizational and user requirements.
Students study the Software Development Life Cycle (SDLC) and its major stages, including feasibility study and project planning, requirements gathering and analysis, system design, software development, testing, implementation, deployment, maintenance, and eventual system retirement.
A major component of the course is requirements engineering, where students learn how to identify stakeholders, investigate organizational problems, gather user requirements, distinguish between functional and non-functional requirements, prepare Software Requirements Specification (SRS) documents, and validate requirements before development begins.
The course examines major software development process models, including the Waterfall Model, V-Model, Prototyping Model, Incremental and Iterative Development, Spiral Model, Rapid Application Development (RAD), Agile methodologies, Scrum, and DevOps. Students learn to select an appropriate development methodology depending on the nature, size, risks, and requirements of a software project.
Students are introduced to software analysis and design, including system modelling, architectural design, database design, user-interface design, modularization, object-oriented design, and the use of modelling techniques such as Unified Modeling Language (UML). Common diagrams such as use-case diagrams, class diagrams, activity diagrams, sequence diagrams, and component diagrams are examined.
The course also emphasizes good software construction and programming practices, including modular programming, code readability, documentation, coding standards, version control, source-code management, code reviews, debugging, reusable components, APIs, and collaborative software development.
Considerable attention is given to software testing and quality assurance. Students study unit testing, integration testing, system testing, acceptance testing, regression testing, performance testing, security testing, and usability testing. They also learn the importance of verification, validation, defect management, and quality assurance throughout the development lifecycle.
The course introduces software project management, covering project planning, effort and cost estimation, scheduling, budgeting, team organization, resource allocation, risk management, project monitoring, documentation, and communication with stakeholders. Students examine why software projects fail and how effective project management can improve project success.
Modern software engineering practices including Git and version control, Continuous Integration and Continuous Deployment (CI/CD), DevOps, automated testing, containerization, cloud deployment, microservices, APIs, and collaborative development environments are also introduced.
Students examine software maintenance and evolution, including corrective, adaptive, perfective, and preventive maintenance. The course demonstrates why software engineering continues after a system has been deployed and why maintainability should be considered from the earliest stages of development.
The course also addresses secure software engineering, introducing students to secure coding, authentication and authorization, input validation, data protection, vulnerability management, backup and recovery, and the principle of integrating security throughout the Software Development Life Cycle.
Professional and ethical issues are incorporated throughout the course, including intellectual property, software licensing, privacy, professional responsibility, documentation, accessibility, user safety, data protection, and ethical decision-making in software development.
Through case studies, practical exercises, group projects, system modelling, documentation, programming, testing, and deployment activities, students gain experience in applying software engineering principles to the development of real-world software solutions.
By the end of the course, students should be able to analyze software problems, gather and document requirements, select appropriate development methodologies, design software architectures, develop and test software applications, manage software projects, apply quality and security principles, maintain existing systems, and work effectively as members of professional software development teams.
Course Outline (Weekly)
| Week | Topics |
|---|---|
| Course outline will be available soon. | |