Software Engineering is the study and application of engineering to the development of software. The first reference to the term is the 1968 NATO Software Engineering Conference and was meant to provoke thought regarding the perceived "software crisis" at the time. Software development, a much used and more generic term, does not necessarily subsume the engineering paradigm. The generally accepted concepts of Software Engineering as an engineering discipline have been specified in the Guide to the Software Engineering Body of Knowledge (SWEBOK). The SWEBOK has become an internationally accepted standard ISO/IEC TR 19759:2005.
Software engineering can be divided into ten subdisciplines. They are:
- Software requirements: The elicitation, analysis, specification, and validation of requirements for software.
- Software design: The process of defining the architecture, components, interfaces, and other characteristics of a system or component. It is also defined as the result of that process.
- Software construction: The detailed creation of working, meaningful software through a combination of coding, verification, unit testing, integration testing, and debugging.
- Software testing: The dynamic verification of the behavior of a program on a finite set of test cases, suitably selected from the usually infinite executions domain, against the expected behavior.
- Software maintenance: The totality of activities required to provide cost-effective support to software.
- Software configuration management: The identification of the configuration of a system at distinct points in time for the purpose of systematically controlling changes to the configuration, and maintaining the integrity and traceability of the configuration throughout the system life cycle.
- Software engineering management: The application of management activities planning, coordinating, measuring, monitoring, controlling, and reporting to ensure that the development and maintenance of software is systematic, disciplined, and quantified.
- Software engineering process: The definition, implementation, assessment, measurement, management, change, and improvement of the software life cycle process itself.
- Software engineering tools and methods: The computer-based tools that are intended to assist the software life cycle processes, see Computer Aided Software Engineering, and the methods which impose structure on the software engineering activity with the goal of making the activity systematic and ultimately more likely to be successful.
- Software quality: The degree to which a set of inherent characteristics fulfills requirements.
Some software engineering related fields:
- Computer-aided engineering - Computer-aided engineering (CAE) is the broad usage of computer software to aid in engineering analysis tasks. It includes Finite Element Analysis (FEA). Computational Fluid Dynamics (CFD), branch of fluid mechanics that uses numerical methods and algorithms to solve and analyze problems that involve fluid flows. Multibody Dynamics (MBD), and optimization. A multibody system is used to model the dynamic behavior of interconnected rigid or flexible bodies, each of which may undergo large translational and rotational displacements.
- Cryptographic Engineering - A complicated, multidisciplinary field. It encompasses mathematics (algebra, finite groups, rings, and fields), computer engineering (hardware design, ASIC, embedded systems, FPGAs) and computer science (algorithms, complexity theory, software design,). In order to practice state-of-the-art cryptographic design, mathematicians, computer scientists, and electrical engineers need to collaborate.
- Information Engineering - An approach to designing and developing information systems. It can also be considered as the generation, distribution, analysis and use of information in systems.
- Knowledge engineering
- Language engineering
- Release engineering
- Teletraffic engineering
- Usability engineering
- Web engineering