Software Engineering
Software Engineering Basics
- Software engineering is the application of engineering principles to the design, development, implementation and improvement of software.
- High-quality software is efficient, maintainable, reliable, usable, portable and testable.
- Core disciplines within software engineering include requirements analysis, software design, programming, testing and maintenance.
Software Development Life Cycle (SDLC)
- The Software Development Life Cycle (SDLC) is a structured process for developing high-quality software.
- Main stages of the SDLC include: requirements gathering, design, implementation, testing, deployment, and maintenance.
Software Design and Programming
- Software design involves planning how the software will meet specified requirements and detail the data structures, interfaces, and algorithms used in the code.
- Programming includes the actual writing of code, typically based on the software design plan.
Software Testing and Maintenance
- Software testing involves running the system under controlled conditions to find flaws and improve overall quality.
- Tests can be manual (executed by a person) or automated (run by a program).
- After the software is released, maintenance work involves making changes to the software to correct defects and improve performance.
Software Project Management
- Software project management entails activities related to planning, organising, and managing resources to successfully complete specific software goals and objectives.
- Key aspects of software project management include project scope, time, quality and cost management.
Agile and Waterfall Methodologies
- The waterfall model is a linear SDLC model where each phase is completed before moving on to the next.
- The agile approach is a set of practices based on iterative development, where requirements and solutions evolve over time due to the collaborative effort of self-organising cross-functional teams.
Ethics in Software Engineering
- Ethics in software engineering refers to the responsibility of software engineers to build products that are socially responsible, maintainable, reliable, and that respect privacy and security.
- Key ethical considerations include data protection, privacy, intellectual property rights, and the impact of automation on employment.