Discpline of design, building and maintaining software.
Software engineering is the discipline that encompasses all aspects of creating software and encompasses:
- Requirements engineering: determine what the future owners and users of a software system expect.
- Software Design: design the global architecture as well as as the technical details.
- Software Construction: build software according to its specification.
- Software Testing: test that software works according to its specifications.
- Software Deployment: distribute software to its users.
- Software Maintenance: maintain software after it has been deployed.
There are various models to organize the above activities. The classical waterfall model organizes them sequentially. Variations are more iterative and allow to go back to earlier phases. Waterfall-based methods follow solid engineering practices but may lead to much bureacracy and an inflexible process that cannot easily cope with changing requirements.
Other approaches promote agile development and are characterized by very short iterations that include all the above activities. Agile methods aim to produce prototypes as early as possible and this makes it easier for future users to assess the prototype and suggest changes.