Software engineering(SE), mostly 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 takes a lot of aspects into account, especially software quality, software ergonomics or software metrics. Already in the 60's there were first efforts to develop fundamental principles, after which the software design should take place.
The field of the software technology deals with the planning, development, application and maintenance of software and therefore with principles, methods and tools, why this field integrates thereby a set of subdisciplines. 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 a software is based among other things on the function fulfillment, the reliability, user friendliness, efficiency, maintainability and reusability. These principles applied for example to the object-oriented programming( OOP) means this: Object-oriented programming increases the quality of the software, among other things because of the increased possibilities of reusing software.
Internal and external quality yardsticks are differentiated. Internal factors are e.g. the modular structure of a system or the readability of the source code. They are important thus, if it concerns to work on software in a team or adapt to new requirements. By external factors one understands those factors, which are observed by the group of persons, who are confronted with the program. The quality of software includes the following aspects:
Correctness The ability of software products to perform their tasks as defined by requirements and specifications.
Robustness The ability to function under unusual and unanticipated conditions and operations.
Extensibility The means by which software products can be adapted to specification changes.
Reusability The property of being able to reuse software in whole or in part for new applications.
CompatibilityCompatibility is a measure of the extent to which software products can be interconnected with others.
PortabilityPortability is a measure of the transferability of a software product to different hardware and software environments.
IntegrityIntegrity is the ability of a software system to protect its various components(programs, data, and documents) against unauthorized access and modification.
Usability The ability to learn how to use software systems, operate them, provide input data, evaluate results, and recover from usage errors.
- Principles (concepts) on which we base our actions 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 that benefit both the software developer and the project management and software quality assurance;
- Structuring of the development and maintenance process by a standardized procedure in the context of a procedure model.
Already a first development stage of the software engineering beginning approximately starting from the year 1968 was coined by the realization of fundamental principles, which should be pursued in the software design. This is above all the principle of structured programming, which is based on the theoretical realization that each program can be put together from sequence, decision and iteration. An extension to parallel processes is possible by the three building blocks splitting, collection and synchronization alone.
The conclusion from this realization was it among other things that the activity of programming can be preceded by a design phase, which is independent of the used programming language. 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 abstractdata types. The sense of the secret principle and the expiration of the software life cycle with the phases specification, draft, implementation, test and maintenance were recognized further. In addition in the course of the development of the software engineering the Requirement engineering(requirement management), the quality and projectmanagement, the configuration management as well as the documentation supplemented themselves as explicit phases.
The software engineering stands in several connection to the object-oriented programming. On the one hand the idea of the object-oriented programming developed from the realization that thereby the quality of the software can be increased. On the other hand techniques and tools were developed in the context of the software engineering for it, how a problem can be converted into an object-oriented software.