- Knowledge Areas
- 1. Software Requirements
- 2. Software Design
- 3. Software Construction
- 4. Software Testing
- 5. Software Maintenance
- 6. Software Configuration Management
- 7. Software Engineering Management
- 8. Software Development Process
- 9. Software Quality
- 10. Software engineering models and methods
- 11. Software engineering professional practice
- 12. Software engineering economics
- 13. Computing foundations
- 14. Mathematical foundations
- 15. Engineering foundations
- External Links
Software engineering is the application of a systematic, disciplined, quantifiable approach to the design, development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software. -- IEEE
Is often said that software is eating the world, software is needed on almost every industry, in every business and even now inside our bodies operating devices like insulin pumps and peace makers.
And yet Software engineering as a discipline is still not well defined, it has proven difficult to tasks, in fact in many cases Software Engineering is not considering a real Engineering discipline.
Is important that we start we a solid, comprehensive and agreed definition of Software Engineering; as a starting point we can take the Institute of Electrical and Electronics Engineers (IEEE) definition described in the Software Engineering Body of Knowledge.
According to the Software Engineering Body of Knowledge (SWEBOK) standard the following are the recognized knowledge areas within the field of software engineering:
1. Software Requirements
Software requirements is a field within software engineering that deals with establishing the needs of stakeholders that are to be solved by software.
2. Software Design
Software design is the process by which an agent creates a specification of a software artifact, intended to accomplish goals, using a set of primitive components and subject to constraints.
3. Software Construction
Software construction is the detailed creation of working meaningful software through a combination of coding, verification, unit testing, integration testing, and debugging.
4. Software Testing
Software testing is an investigation conducted to provide stakeholders with information about the quality of the software product or service under test. Software testing can also provide an objective, independent view of the software to allow the business to appreciate and understand the risks of software implementation.
5. Software Maintenance
Software maintenance in software engineering is the modification of a software product after delivery to correct faults, to improve performance or other attributes
6. Software Configuration Management
In software engineering, software configuration management is the task of tracking and controlling changes in the software, part of the larger cross-disciplinary field of configuration management.
7. Software Engineering Management
Engineering management is a career that brings together the technological problem-solving ability of engineering and the organizational, administrative, and planning abilities of management in order to oversee the operational performance of complex engineering driven enterprises.
8. Software Development Process
Software Development Process is the process of dividing software development work into distinct phases to improve design, product management, and project management.
9. Software Quality
Software quality refers to two related but distinct notions:
- Software functional quality reflects how well it complies with or conforms to a given design, based on functional requirements or specifications. That attribute can also be described as the fitness for purpose of a piece of software or how it compares to competitors in the marketplace as a worthwhile product. It is the degree to which the correct software was produced.
- Software structural quality refers to how it meets non-functional requirements that support the delivery of the functional requirements, such as robustness or maintainability. It has a lot more to do with the degree to which the software works as needed.
10. Software engineering models and methods
Software engineering is the application of engineering to the development of software in a systematic method.
11. Software engineering professional practice
Software engineering professionalism is a movement to make software engineering a profession, with aspects such as degree and certification programs, professional associations, professional ethics, and government licensing.
12. Software engineering economics
13. Computing foundations
14. Mathematical foundations
15. Engineering foundations
The following is a non-exhaustive list of Software Engineering sub-disciplines that I consider both emerging and extremely interesting.
I like to think about Ecommerce software development as its own particular sub-discipline within the field of software engineering, traditional ecommerce development has been considered just web development but in ever moving, ever growing industry like ecommerce; there is too much specific domain knowledge needed in order for engineers to be effective at their job.
Knowing the basics of web development is no longer enough for being an effective ecommerce engineer; when we break it down there are many domains inside of the ecommerce field that a developer must be familiar with:
Financial Technology (FinTech)
- Software Engineering
- Programmers: Stop Calling Yourselves Engineers
- Engineering vs. Programming: Your Responses
- What is the Difference Between Software Engineering and Software?
- What’s The Difference Between a Developer and an Engineer?
- Is software development an engineering discipline?
- The Challenge of Curriculum Modeling for an Emerging Discipline: Software Engineering
- Professional practice in software engineering
- White paper on professional practice in software engineering
- Problem Understanding the IEEE definition of Software Engineering