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.