SWEBOK Trent Forkert
0. Table of Contents
SWEBOK 0. Table of Contents 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 Engineering Process 9. Software Engineering Tools and Methods 10. Software Quality 11. Knowledge Areas of Related Disciplines
1. Software Requirements
This Knowledge Area is concerned with defining the constraints a piece software of software will have, generally involving practical problems, rather than theoretical ones. The
Software Requirements KA describes the process, elicitation, analysis, specification, validation, and considerations to be made regarding the software requirements.
In addition, this KA defines different types of requirements, such as functional and nonfunctional requirements, emergent properties, quantifiable requirements, and system requirements. Furthermore, there are built-in standards for reassessing and updating the processes the knowledge area defines. 2. Software Design
This Knowledge Area is concerned with the design of software. That is, breaking a software system in to appropriate pieces to better facilitate the development of the software system. To that end, the Software Design Knowledge Area describes different design patterns, quality analysis, notations and strategies for designing software.
This knowledge area defines ideas such as abstraction, coupling and cohesion, decompostion and modularization, and encapsulation. This knowledge area also describes different notations, such as Entity-relationship diagrams and Component diagrams. It goes on to describe design strategies, such as structured and object-oriented design. 3. Software Construction
This Knowledge Area describes the actual implementation of the software system, in accordance to the requirements and design. However, this is more than just programming, but includes some debugging and testing.
Large parts of this knowledge area are dedicated to constructing software in such a way that the task naturally makes itself easier and more fault-resistent. This is where topics such as standards conformance, unit tests are of incredible use and importance.
This KA also describes what I consider good basic programming skills, namely minimizing complexity and code reuse. To me, these parts of the knowledge area seem reminiscent of the UNIX Philosophy, where you make one piece of code do one simple thing well, and build up complexity by combining smaller pieces of code. 4. Software Testing
This knowledge area describes testing, as well as techniques and processes for testing software systems. The Software Testing Knowledge Area is stresses the fact that tests must be carefully selected, so that a relatively small number of tests have a significant impact and meaningful results. Testing also explicitly happens by actually executing code.
This KA describes different goals of testing, such as requirements testing and correctness testing, where the software is tested to see if it meets the customers requirements and behaves correctly, respectively. Also described is stress testing, the process of seeing how the software performs under very high load. This will have direct application to our project.
Additionally, a large number of techniques for testing are described, including fault- based techniques and usage-based techniques.
5. Software Maintenance
This knowledge area describes software maintenance, its processes and techniques.
This includes planning for maintenance prior to release, as well as fixing problems and providing support after release. Maintenance includes reevaluating the software to make sure it still meets requirements, or indeed whether or not those requirements need updating later in the software’s life cycle.
Part of this knowledge area is concerned with the categorization of different types of maintenance, with four main categories (preventive, perfective, corrective, and adaptive). Also discussed are the cost implications of continued maintenance, and the cycle of the software maintenance process. 6. Software Configuration Management
This Knowledge Area describes standards for the management of the various properties of the different elements of the system.
This includes the process by which changes to the software are requested, evaluated, approved and implemented. The Software Configuration Management Knowledge Area also describes the tracking of software status, and the processes by which software is built and released, including documentation and release notes.
To me, the most interesting thing out of this knowledge area is the explicitly labeled difference between versions, revisions, and variants. It makes sense why that would be standardized, but in my experience, these terms are often used interchangeably, which I don’t consider to be a good thing. 7. Software Engineering Management
This Knowledge Area defines items concerning Software Engineering Management, considering any special characteristics software engineering projects have compared to general engineering projects, namely the rapidly changing nature of technology - and therefore the rapidly changing nature of requirements - coupled with the often underappreciated complexity of software engineering.
The Software Engineering Management Knowledge Area describes concepts in software project planning, enactment, and evaluation. Together, much of this sounds very similar to what we have done in following RUP for class. 8. Software Engineering Process
This Knowledge Area defines “software engineering process” in three different ways, though only focuses on one.
● The process used to engineer software
● processes related to software engineering
● set of activities performed within an organization
The Software Engineering Process Knowledge area defines ideas relating to software life cycles, and process assessment, among others. 9. Software Engineering Tools and Methods
This Knowledge Area defines terms related
to the tools and methods of software
engineering. The tools are usually computer-
based, and provide some automation of the
software engineer’s task. These tools aid in
reducing human error by removing the burden
of repetitive tasks.
The Software Engineering Tools and
Methods Knowledge Area defines several
categories for tools: Requirements, Design,
Construction, Testing, Maintenance,
Configuration Management, Engineering
Management, Engineering Process, and
Quality. These reflect the other Knowledge
Areas that compose SWEBOK.
This Knowledge Area also defines different
methods the tools and engineers can use to
go about their task.
10. Software Quality
The Sofware Quality Knowledge Area describes ways of achieving software quality, through both static and dynamic techniques.
This knowledge area defines concepts concerning quality assurance, verification and validation, reviews and audits, as well as practical measures that can be taken to ensure a software’s quality meets the client’s expectations.
Like many other KAs, this KA defines a Management process by which software engineers can systematically achieve high software quality. 11. Knowledge Areas of Related Disciplines
This knowledge area provides information about a variety of disciplines closely related to software engineering. These include: Computer Engineering, Computer Science, Management,
Mathematics, Project Management, Quality Management, Software Ergonomics, and Systems
Engineering.
Each of these disciplines is described in brief, and summarize the Body of Knowledge for each field, if it has one. This is accomplished through a simple bullet point list, with refences to external documents mentioned where appropriate.