Software engineering (SE), usually also referred to as software technology, is the practical application of scientific knowledge for the economic production and use of reliable and efficient software. Software engineering considers a number of aspects, in particular software quality, software ergonomics, and software metrics
. Already in the 60s there were first efforts to develop basic principles according to which software design should be done. The field of software engineering deals with the planning, development, application and maintenance of software and therefore with principles, methods and tools, which is why this field thus integrates a lot of sub-disciplines. Dealing with the people involved and affected in this process
also belongs to this field. It has given rise to the disciplines of software ergonomics and software metrics, among others.The goal of software engineering is the creation of quality software. The quality of software is based on, among other things, functional performance, reliability, usability, efficiency, maintainability, and reusability. These principles applied to Object Oriented Programming
(OOP), for example, means that: Object-oriented programming increases the quality of software, in part because of the increased opportunities to reuse software,distinguishing between internal and external measures of quality
Internal factors are, for example, the modular structure of a system or the readability of the source code. They are therefore important when it comes to editing software in a team or adapting it to new requirements. External factors are those factors that are observed by the group of people who are confronted with the program. Software quality includes the following aspects
:correctness The ability of software products to perform their tasks
asdefined by requirements and specifications.
. The ability tofunction under unusual and unanticipated conditions and operations.
. Themeans by which software products can be adapted to specification changes.
. The property of being able to reuse software in whole or in part for new applicationsCompatibility. Compatibility
is a measure of the extent to which software products can be interfaced with othersEfficiency
. Theeconomical use of hardware and software resources such as processors
, memory, etc., and the runtime behavior of softwarePortability. Portability
is a measure of the transferability of a software product to different hardware and software environmentsVerifiability. Verifiability is a measure of how acceptance procedures, test data, and defect detection and tracking procedures
can be generated during the validation and operational phasesIntegrity. Integrity is the ability of a software system to protect its various components (programs, data, and documents
) against unauthorized access and modificationUsability
The ability to learn how to use software systems, how to operate them, how to provide input data, how to evaluate results, and how to restart them after user errors.
The constructive elements of software engineering for quality assurance include those that contribute to quality control.
- Principles (concepts) that we base our actions on in software engineering;
- Methods that support software engineering principles and lead developers to predictable results;
- Formalisms, especially languages, that are used at the various levels of abstraction to describe results and that enable the representation of intermediate and final results of methodical work;
- Tools that support the application of principles, methods and formalisms and are useful to the software developer as well as to project management and software quality assurance;
- Structuring of the development and maintenance process through a standardized procedure within the framework of a procedure model.
. Thefirst stage of development of software engineering, beginning around 1968, was already characterized by the recognition of fundamental principles that should be followed in software design. This is above all the principle of structured programming, which is based on the theoretical insight that every program can be composed of sequence, decision and iteration
. An extension to parallel processes is possible just by the three building blocks of splitting, collection and synchronization
.The conclusion from this insight was, among other things, that the activity of programming can be preceded by a design phase, which is independent of the programming language used. To the further realizations already from the beginnings of the software engineering belongs likewise the principle of the gradual refinement and - opposite - that of the abstraction and data abstraction e.g. by abstract data types. Furthermore, the sense of the secret principle and the sequence of the software life cycle with the phases specification, design, implementation, test and maintenance were recognized. In the course of the development of software engineering, requirement
, and documentation were added as explicit phases. Software engineering is related to object-oriented programming in several ways.
On the one hand, the idea of object-oriented programming arose from the realization that it can increase the quality of software. On the other hand, software engineering developed techniques and tools for how to turn a problem into object-oriented software.