Difference between revisions of "An Overview of the SWEBOK Guide"

From SEBoK
Jump to navigation Jump to search
 
(84 intermediate revisions by 10 users not shown)
Line 1: Line 1:
Systems engineers are fortunate that the software community has developed its own body of knowledge, which is currently under revision. The Preface to the 2004 version of the [http://www.swebok.org Guide to the Software Engineering Body of Knowledge] states:
+
----
 +
'''''Lead Authors:''''' ''Hironori Washizaki, Maria-Isabel Sanchez-Segura, Juan Garbajosa, Steve Tockey, Kenneth E Nidiffer, and Annette D. Reilly''
 +
----
 +
Software is everywhere. Software and systems engineers are leading the way for the digital transformation of social, economic, military, and environmental systems at an increasing rate of change. Advanced software-enabled capabilities allow software and systems engineers to address and anticipate emerging and complex challenges. Most systems of any complexity today are modeled and controlled by software; hence, the term “software intensive systems” is commonly used to describe them. At the end of 2022, the IEEE Computer Society (IEEE-CS) released beta version 4 of the Software Engineering Body of Knowledge (SWEBOK) (IEEE Computer Society 2022). When the final version 4.0 is published, it will replace version 3 which appeared in 2014 (Bourque and Fairley 2014). As have previous versions, SWEBOK 4.0 will help guide both systems engineering and software engineering professionals to long-established software life cycle processes and new insights for dealing with the demands of the digital era. This article uses SWEBOK 4.0 beta to explain how and why the new SWEBOK takes into consideration the needs of digital era software engineers immersed in an industry demanding visionary solutions. 
 +
 
 +
==Introduction==
 +
ISO/IEC/IEEE Systems and Software Engineering Vocabulary (SEVOCAB) defines software engineering as “the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software.” (ISO/IEC/IEEE n.d.)
  
<blockquote>''The purpose of the Guide to the Software Engineering Body of Knowledge is to provide a consensually validated characterization of the bounds of the software engineering discipline and to provide a topical access to the Body of Knowledge supporting that discipline.'' (Abran et al. 2004, preface)</blockquote>
+
It is important to note that systems engineering, and software engineering are distinct disciplines with different but somewhat overlapping core competencies. Due to the inherent characteristics of software intensive systems, these disciplines often approach problem solving from different perspectives. For example, systems engineers apply their problem-solving skills to develop physical, computational, social, and hybrid systems. Depending on the system, those skills could be based on a wide range of disciplines including mathematics, any of the physical and social sciences, law, management, and a myriad of other disciplines. Software engineers tend to apply their problem-solving skills on a narrower set of disciplines, especially discrete mathematics and computer science, to develop computational systems and subsystems. Also, software Is a logical medium. Software components of software-enabled systems are logical constructions expressed in algorithmic form. This contrasts with the physical and social components of systems that are realized through mechanical, electrical, chemical, biological, social, human and other elements. Both disciplines are critical to solving the complex challenges of the future as evidenced by disruptive innovation and increasing complexity in new systems and systems of systems which is causing a convergence among disciplines.
  
==SWEBOK Guide Version 3==
+
==SWEBOK Guide Objectives==
The purposes of the Guide to the Software Engineering Body of Knowledge, Version 3 (SWEBOK Guide V3) are: to characterize the contents of the software engineering discipline; to promote a consistent view of software engineering worldwide; to clarify the place of, and set the boundary of, software engineering with respect to other disciplines; to provide a foundation for training materials and curriculum development; and to provide a basis for certification and licensing of software engineers.  
+
The Guide to the Software Engineering Body of Knowledge (SWEBOK), published by the IEEE Computer Society (IEEE CS), represents the current state of generally accepted, consensus-based knowledge emanating from the interplay between software engineering theory and practice. (Bourke and Fairley 2014, IEEE Computer Society 2022). The objectives include the provision of guidance for learners, researchers, and practitioners to identify and share a mutual understanding of “generally accepted knowledge” in software engineering. This guidance defines the boundary between software engineering and related disciplines, and provides a foundation for certifications and educational curricula.
  
The SWEBOK Guide V3 contains three chapters:
+
The Guide should not be confused with the Body of Knowledge itself which exists in published literature. It is similar in this regard to the SEBoK. For example, the Guide addresses knowledge areas (KAs) in terms of “what” activities are being done versus “how” they are accomplished. Bodies Of Knowledge (BOKs) are often a formal way of referring to core competencies, or what should be known to be successful in a practitioner’s area of expertise. (Washizaki, et al. 2023) Every profession is based on a body of knowledge, although that knowledge is not always defined in a concise manner. In cases where normality exists, the body of knowledge is “generally recognized” by practitioners and may be codified in a variety of ways for a variety of different uses. But in many cases, a guide to a body of knowledge is formally documented, usually in a form that permits it to be used for such purposes as development and accreditation of academic and training programs, certification of specialists, or professional licensing. (IEEE Computer Society 2022, IEEE Computer Society 2014)
• Knowledge Areas Characterizing the Practice of Software Engineering
+
The purpose of the Guide is to describe the portion of the Body of Knowledge that is accepted, to organize that portion, and to provide topical access to it. The Guide is also aligned with the following objectives:
• Knowledge Areas Characterizing the Educational Requirements of Software Engineering
+
#To promote a consistent view of software engineering worldwide
• Related Disciplines
+
#To specify the scope of, and clarify the place of software engineering with respect to other disciplines such as computer science, project management, computer engineering, and mathematics
 +
#To characterize the contents of the software engineering discipline
 +
#To provide topical access to the Software Engineering Body of Knowledge
 +
#To provide a foundation for curriculum development and for individual certification and licensing material.
  
Version 3 of the SWEBOK Guide is being developed and will be completed in late 2011 or early 2012. It will replace the present 2004 version (http://www.computer.org/portal/web/swebok). A public review copy of the SWEBOK Version 3 Knowledge Areas is available at:
+
==Overview of the SWEBOK Guide==
http://computer.centraldesktop.com/swebokv3review/
+
The Guide represents the current state of accepted, consensus-based knowledge emanating from the interplay between software engineering theory and practice. The origins of the Guide go back to the late 1990s. Much like the software engineering discipline, the Guide has continued to evolve over the last 20 years to reflect the educational, industrial, social, technical, and technological changes in society. Version 4 of the Guide will be released in 2023 to improve its currency, readability, consistency, and usability.  
  
The SWEBOK V3 knowledge areas are being made available for public review as they become ready for review; all knowledge areas may not be available for review at the same time.
+
Table 1 provides the high-level table of contents from Guide V4. Note that sections with an "*" are new (were not previously included in Guide 3). The current draft Guide V4 contains 18 knowledge areas (KAs), followed by several appendices. A KA is an identified area of software engineering defined by its knowledge requirements and described in terms of its concepts, component processes, practices, inputs, outputs, tools, and techniques. All KAs have been updated in V4 to reflect changes in software engineering since the publication of Guide V3. The new version reflects modern development practices, techniques, and the advancement of standards. Especially, agile and DevOps have been incorporated into almost all KAs since these models have been widely accepted since Guide V3 was published. Agile models typically have frequent demonstrations of working software to a customer in short iterative cycles with agile practices involving KAs. Furthermore, emerging platforms and technologies, including artificial intelligence (AI), machine learning (ML), and Internet of Things (IoT), have been incorporated into the foundation KAs. Also, there are three new KAs: Software Architecture, Software Operations, and Software Security. It is important to note there has also been more emphasis on Software Security in other relevant KAs such as software requirements. These additions better reflect contemporary software engineering practice, the pressing need to address cybersecurity as early as possible in developing distributed, networked systems, and non-distributed systems for use by the public at large, and the need for specialized skills to be able to work effectively in these areas.
  
===SWEBOK Guide Version 3 Knowledge Areas===
+
{| align="center"
Each knowledge area (KA) in Version 3 of the SWEBOK Guide includes an introduction, a descriptive breakdown of topics and sub-topics, recommended references, references for further reading, and a list of standards most relevant to the knowledge area.  Version 3 contains 15 knowledge areas.  An overview each KA follows.
+
|+'''Table 1.  SWEBOK v4 Table of Contents''' (SEBoK Original)
 +
|-
 +
|Knowledge Areas
 +
|-
 +
|Requirements
 +
|-
 +
|Architecture*
 +
|-
 +
|Design
 +
|-
 +
|Construction
 +
|-
 +
|Testing
 +
|-
 +
|Operations*
 +
|-
 +
|Maintenance
 +
|-
 +
|Configuration Management
 +
|-
 +
|Engineering Management
 +
|-
 +
|Process
 +
|-
 +
|Models and Methods
 +
|-
 +
|Quality
 +
|-
 +
|Security*
 +
|-
 +
|Professional Practice
 +
|-
 +
|Economics
 +
|-
 +
|Computing Foundations
 +
|-
 +
|Mathematical Foundations
 +
|-
 +
|Engineering Foundations
 +
|}
  
NOTE: references to SWEBOK V3 and the SWEBOK KAs will be inserted later.
+
The 18 KAs in Guide V4 are:
  
==Knowledge Areas Characterizing the Practice of Software Engineering==
+
'''KA1''' - Software Requirements: Describes the activities involved in eliciting, analyzing, specifying, validating, and managing software requirements. The importance of requirements documentation for long-term maintenance is added. The “what’s” and “how’s” of work on software requirements in a project should be determined by the type of constructed software and not by the project life cycle. Also, it includes a deeper, broader coverage of requirements specification techniques, including model-driven requirements specification and acceptance criteria-based requirements specification.
===Software Requirements KA===
 
The Software Requirements Knowledge Area is concerned with the elicitation, negotiation, analysis, specification, and validation of software requirements. It is widely acknowledged within the software industry that software engineering projects are critically vulnerable when these activities are performed poorly. Software requirements express the needs and constraints placed on a software product that contribute to the solution of some real-world problem
 
  
 +
'''KA2''' – Software Architecture: This is a new KA resulting from a realization that architecture is a significant and distinct discipline over and above software design.  Software architecture consists of fundamental structures of software elements, relations among them, and properties of both elements and relations.  As software tends toward larger, ever more complex systems, architecture concerns move beyond construction to connectivity while assuring new levels of quality for safety, security, and dependability. Software architecture aims to “satisfice” all stakeholders, while the focus of software design is on the transformation of that vision into a feasible implementation.
  
 +
'''KA 3''' - Software Design: Focuses on the process of transforming requirements into a representation of the software system. Software is pervasive and critical in all aspects of modern life. The success of pervasive software depends on broadening the background of people with design skills, especially as emerging technologies, faster delivery times, and emphasis on agile, lean, and incremental design impact the development process.
  
===Software Design KA===
+
'''KA4''' - Software Construction: Covers the activities involved in translating the software design into executable code. This section has been updated to reflect modern construction techniques and practices: managing dependencies, cross-platform development and migration, feedback loops for construction, visual programming, and low-code/zero-code (i.e., called no code) platforms. Furthermore, major updates were made to some of the existing sections, especially about reuse, life-cycle models, construction languages and environments.
Design is defined in [IEEE610.12-90] as both “the process of defining the architecture, components, interfaces, and other characteristics of a system or component” and “the result of [that] process.” The Software Design Knowledge Area covers the design process and the resulting product. Viewed as a process, software design is the software engineering life cycle activity in which software requirements are analyzed in order to produce a description of the software’s internal structure and its behavior that will serve as the basis for its construction. A software design (the result) must describe the software architecture—that is, how software is decomposed and organized into components—and the interfaces between those components. It must also describe the components at a level of detail that enables their construction.
 
  
===Software Construction KA===
+
'''KA5''' - Software Testing: Deals with the various approaches and techniques used to assess software correctness and verify its conformance to requirements. This material has been revised to align with the shift left testing movement. This KA provides new content about software testing in recent development processes (like Agile, DevOps, and Test-Driven Development), application domains (like automotive, healthcare, mobile, legal, and IoT), emerging technologies (such as AI, blockchain, cloud) and quality attributes (like security and privacy).
Software construction refers to the detailed creation of working software through a combination of detailed design, coding, unit testing, integration testing, debugging, and verification.  The Software Construction Knowledge Area includes topics related to development of software programs that will satisfy their requirements and design constraints.  This KA covers software construction fundamentals; managing software construction; construction technologies; practical considerations; and software construction tools.
 
  
===Software Testing KA===
+
'''KA6''' - Software Engineering Operations: This is a new knowledge area that addresses the evolution of the role of software engineers to include DevOps and infrastructure as a Service (IaaS) activity while eliminating the organizational silos between development, maintenance, and operations. This new KA describes operations fundamentals, planning, delivery and control activities, and techniques.  
Testing is an activity performed to evaluate product quality and improve it by identifying defects. Software testing involves dynamic verification of the behavior of a program against expected behavior on a finite set of test cases suitably selected from the (usually very large) execution domain. The Software Testing Knowledge Area includes the fundamental of software testing; test techniques; human-computer-user interface testing and evaluation; test-related measures; and practical considerations.
 
  
===Software Maintenance KA===
+
'''KA 7''' - Software Maintenance (SM): Software maintenance addresses fundamentals, processes, and techniques to provide cost-effective support for software in operation. Activities, such as determining the logistical support needed for the transition, are performed, and applied during the pre-delivery stage, whereas software surveillance, modification, training, and operating or interfacing with a help desk are post-stage activities. Software Maintenance categories and the software process have been updated to align with the 2022 version of ISO/IEC/IEEE 14764. (ISO/IEEE/IEEE 2022)  Also, continuous integration, delivery, testing, and deployment have been added as a new topic in response to the growing popularity of regrouping development, maintenance, and operations tasks to improve software engineering productivity.
Software maintenance involves enhancing existing capabilities, adapting software to operate in new and modified operating environments, and correcting defects.  These categories are referred to as perfective, adaptive, and corrective software maintenance. The Software Maintenance Knowledge Area includes fundamentals of software maintenance (nature of and need for maintenance, categories of maintenance, maintenance costs); key issues in software maintenance (technical issues, management issues, maintenance cost estimation, measurement of software maintenance); the maintenance process; software maintenance techniques (program comprehension, re-engineering, reverse engineering, refactoring, software retirement); disaster recovery techniques, and software maintenance tools.
 
  
===Software Configuration Management KA===
+
'''KA 8''' - Software Configuration Management (SCM): Focuses on four basic functions of SCM: Configuration Identification: identifying all configuration items (CI) of a software system's state; Control changes: coordinating and limiting access to configurations in a software system; Configuration auditing: a series of reviews confirming that changes are being made to conform to a software system's desired state; and Status Accounting: automatically recording information about CIs, relationships, baselines and changes on any CI developed, as well as why they were made, when they were made, and who made them. In SWEBOK Guide V4, SCM has been explained considering all its facets. It stresses that the SCM process plan must be defined first before all the decisions and commitments included in the plan are somehow incorporated into existing tools for execution rather than the other way around, as was the usual practice in the past. Keeping track of configuration items (CI) relationships is essential to visualize the potential impact of a change on a CI over other CIs.
The configuration of a system is the functional and/or physical characteristics of hardware, firmware, or software, or a combination of these. It can also be thought of as a collection of specific versions of hardware, firmware, or software items combined according to specific build procedures to serve a particular purpose. Software configuration management (SCM) is thus the discipline of identifying 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 software life cycle.  The Software Configuration Management Knowledge Area covers management of the SCM process; software configuration identification, control, status accounting, auditing; software release management and delivery; and software configuration management tools.
 
  
===Software Engineering Management KA===
+
'''KA9''' - Software Engineering Management: Describes the activities of the planning, organizing, estimating, and tracking of software projects. Practices are changing to meet the needs of society caused by increases in the size and complexity of software as well as greater pressure
Software engineering management involves planning, coordinating, measuring, reporting, and controlling a project or program to ensure that development and maintenance of software is systematic, disciplined, and quantified. The Software Engineering Management Knowledge Area covers initiation and scope definition (determining and negotiating requirements, feasibility analysis, and review and revision of requirements); software project planning (process planning, estimation of effort, cost, and schedule, resource allocation, risk analysis, planning for quality); software project enactment (measuring, reporting, and controlling; acquisition and supplier contract management); product acceptance; review and analysis of project performance; project closure; and software management tools.
+
to quickly release software enabling products to market in rapidly changing environments. The results are fundamental management shifts in how work is performed.  
  
===Software Engineering Process KA===
+
'''KA10''' - Software Engineering Process: Describes the activities, methods, and techniques used to define, implement, assess, and improve the software development process. Software engineers face a challenging and evolving, highly technological landscape due to fast-moving technology, societal events and changes, and a trend towards digitalization involving very many different domains. This is a point of no return that has facilitated the ongoing adoption of Agile and DevOps. Nevertheless, now more than ever, the software engineering processes applied to create products will continue to evolve, profiting from advances in the engineering dimension and learning, new and more advanced tools, and the latest knowledge from the other KAs. The KA describes this new consensus, highlighting the interaction with other KAs.
The Software Engineering Knowledge Area is concerned with definition, implementation, assessment, measurement, management, and improvement of software life cycle processes. Topics covered by the Software Engineering Process KA include process implementation and change (process infrastructure, models for process implementation and change, and software process management); process definition (software life cycle models and processes, notations for process definition, process adaptation, and process automation); process assessment models and methods; measurement (process measurement, products measurement, measurement techniques, and quality of measurement results); and software process tools.
 
  
===Software Engineering Methods KA===
+
'''KA 11''' - Software Engineering Models and Methods: Introduces different models, methods, and tools that support the software development process. Models have been updated and accurately classified by type. Aspect-oriented development has been added in the document as well as fundamental model-driven and model-based methods, have also been introduced. Agile methods have been extended a great deal to incorporate modern techniques, such as lean development, as well as large-scale and enterprise agile methods. On this note, DevOps and release engineering have also been introduced to clarify the release aspect of agile methods.
The Software Engineering Methods Knowledge Area addresses methods that encompass multiple life cycle stages; methods specific to particular life cycle stages are covered by other KAs. Topics covered include modeling (principles and properties of software engineering models; syntax vs semantics vs invariants; preconditions, post-conditions, and invariants); types of models (information, structural, and behavioral models); analysis (analyzing for correctness, completeness, consistency, quality and interactions; traceability; and tradeoff analysis); and software development methods (heuristic methods, formal methods, prototyping methods, and agile methods).
 
  
===Software Quality KA===
+
'''KA12''' - Software Quality: Addresses the activities and techniques involved in achieving and evaluating software quality. This chapter was overhauled for alignment with notions of processes/product quality. It now includes new topics: (1) Software Dependability and Integrity Levels, (2) Standards, Models and Certifications, (3) Policies, Processes and Procedures, and (4) Quality Control and Testing.
Software quality is a pervasive software life cycle concern that is addressed in many of the SWEBOK V3 KAs. In addition, the Software Quality Knowledge Area includes fundamentals of software quality (software engineering cultures, software quality characteristics, the value and cost of software quality, and software quality improvement); software quality management processes (software quality assurance, verification and validation, reviews and audits); and practical considerations (defect characterization, software quality measurement, and software quality tools).
 
  
===Software Engineering Professional Practice KA===
+
'''KA13''' – Software Security: This is a new knowledge area that focuses on the broader topics of security, particularly security fundamentals, security management, security tools, and domain-specific security, as well as major security engineering activities (such as security testing) that were briefly described under the Computing Foundations KA in the last SWEBOK edition. The existence of a separate KA emphasizes that security must be a first-class quality attribute in any development since almost any software system is connected to others, resulting in increased security risks.
Software engineering professional practice is concerned with the knowledge, skills, and attitudes that software engineers must possess to practice software engineering in a professional, responsible, and ethical manner.  The Software Engineering Professional Practice Knowledge Area covers professionalism (professional conduct; professional societies, software engineering standards, employment contracts, and legal issues); codes of ethics; group dynamics (working in teams, cognitive problem complexity, interacting with stakeholders, dealing with uncertainty and ambiguity; dealing with multicultural environments); and communication skills.
 
  
 +
'''KA14''' - Software Engineering Professional Practice: Covers ethical considerations, professional codes of conduct, and the role of software engineering in society. Additions and revisions address the following areas: (1) Professional practices following generally accepted practices, standards, and guidelines set forth by the applicable professional societies, (2) User interface/user experience (UI/UX) inclusive design, (3) Considerations on diversity and inclusion, and (4) Considerations on agility.
  
==Knowledge Areas Characterizing the Educational Requirements of Software Engineering==
+
'''KA15''' - Software Engineering Economics: Focuses on the essence of engineering economics, the science of making decisions, and broadening the more traditional, purely financial view of engineering economics. Value does not always derive from money alone; that is, value can also derive from the “unquantifiable” such as, corporate citizenship, employee well-being, environmental friendliness, customer loyalty, and so on. This KA also focuses on more systematic pre-project decisions where a project is not under development but is being envisioned.
  
===Software Engineering Economics KA===
+
Note:  Minor improvements in topic presentation in the next three KA 16-18. Discussions of Artificial Intelligence and Machine Learning were added. Furthermore, the revision includes a deeper coverage of measurement, particularly its implications for programming languages, and a more comprehensive discussion of root cause analysis.
The Software Engineering Economics KA is concerned with making decisions within the business context to align technical decisions with the business goals of an organization. Topic covered by this KA include fundamentals of software engineering economics (proposals, cash flow, the time-value of money, planning horizons, inflation, depreciation, replacement and retirement decisions); not for-profit decision-making (cost-benefit analysis, optimization analysis); estimation, economic risk and uncertainty (estimation techniques, decisions under risk and uncertainty); multiple attribute decision making (value and measurement scales, compensatory and non-compensatory techniques).  
 
  
===Computing Foundations KA===
+
'''KA16''' - Computing Foundations: Covers the fundamental concepts and theories that underlie the discipline of software engineering.
The Computing Foundations Knowledge Area covers fundamental topics that provide the computing background necessary for the practice of software engineering.  Some of the topics covered in the computing foundations KA are: problem solving techniques, abstraction, algorithms and complexity, programming fundamentals,  and the basics of parallel and distributed computing, computer organization, operating systems, and network communication.
 
  
===Mathematical Foundations KA===
+
'''KA 17''' - Mathematical Foundations: Introduces mathematical techniques and principles relevant to software engineering, such as logic, probability, and discrete mathematics.
The Mathematical Foundations Knowledge Area covers fundamental topics that provide the mathematical background necessary for the practice of software engineering. Some of the topics covered in the Mathematical Foundations KA are: sets, relations, and functions; basic propositional and predicate logic; proof techniques; graphs and trees; discrete probability; grammars and finite state machines; and number theory.
 
  
===Engineering Foundations KA===
+
'''KA''' - 18 Engineering Foundations: Covers engineering principles and practices applicable to software engineering, including system engineering and project management.
The Engineering Foundations Knowledge Area covers fundamental topics that provide the engineering background necessary for the practice of software engineering.  Some of the topics covered in the engineering foundations KA are: empirical methods and experimental techniques; statistical analysis; measurements and metrics; engineering design; simulation and modeling; and root cause analysis.
 
  
==Related Disciplines==
+
==Concluding Comments==
The SWEBOK Guide also contains a chapter on related disciplines. The related disciplines are those that share a boundary, and often a common intersection, with software engineering. The SWEBOK Guide Version 3 does not characterize the knowledge of the related disciplines but rather indicates how those disciplines interact with the software engineering discipline. The Related Disciplines include:
+
A significant component of productivity today is the capabilities enabled by software systems. Software is a maturing science and engineering discipline; therefore, a need exists to continuously provide new guidance materials that reflect areas that are becoming important in modern software engineering. The Software Engineering Body of Knowledge Version V4 is a leading product which will help address this issue. It will serve as a reference for educators, practitioners, and organizations to understand the essential concepts and skills needed to design, develop, and maintain current and future software systems.  
▪ Computer Engineering
 
▪ Business Management
 
▪ Project Management
 
▪ Quality Management
 
▪ Systems Engineering
 
  
 +
SWEBOK V4 represents the next step in the evolution of the software engineering profession and is written under the auspices of the Profession and Education Activities Board of the IEEE Computer Society.  An international team of subject matter experts was assembled with the goal of developing the update. Given the purpose of this article, a significant portion of this document includes verbatim or near-verbatim elements of the SWEBOK Guide V4 which is about to go out for public review and that of (Washnizaki, et al. 2023) written by several members of the international team. 
  
 +
SWEBOK is described inside the SEBoK and there are some clear similarities and differences between the two BOKs. Each BOK is a comprehensive guide that outlines the core knowledge areas, principles, and best practices. SWEBOK concentrates specifically on the software engineering domain, providing a detailed overview of software development processes and methodologies. SEBoK, on the other hand, has a broader scope and addresses the entire systems engineering domain, including software and beyond, considering the interaction and integration of various components in complex systems.
  
 
==References==  
 
==References==  
 
===Works Cited===
 
===Works Cited===
Abran, A. and J.W. Moore (exec. eds); P. Borque and R. Dupuis (eds.). 2004. ''SWEBOK: Guide to the Software Engineering Body of Knowledge''. Piscataway, NJ, USA: The Institute of Electrical and Electronic Engineers, Inc. (IEEE). Available at: http://www.computer.org/portal/web/swebok
+
Bourque, P. and R.E. Fairley (eds.). 2014. ''[[Guide to the Software Engineering Body of Knowledge (SWEBOK)]]''. Los Alamitos, CA, USA: IEEE Computer Society. Available at: http://www.swebok.org.
 +
 
 +
IEEE Computer Society. 2014. Software engineering competency model (SWECOM), Version 1.0. Accessed August 29, 2023. Available at https://www.computer.org/volunteering/boards-and-committees/professional-educational-activities/software-engineering-competency-model.
 +
 
 +
IEEE Computer Society. 2022. SWEBOK Guide Version 4.0 beta. Accessed August 28, 2023. Available at https://waseda.app.box.com/s/elnhhnezdycn2q2zp4fe0f2t1fvse5rn.
 +
 
 +
ISO/IEC/IEEE. 2017. ISO/IEC/IEEE Systems and Software Engineering – Vocabulary. Accessed August 28, 2023. Available at https://www.iso.org/standard/71952.htmlhttps://www.iso.org/standard/71952.html.
 +
 
 +
ISO/IEC/IEEE. 2022. ISO/IEC/IEEE 14764-2022 Software Life Cycle Processes – Maintenance. Accessed August 28, 2023. Available at https://www.iso.org/standard/80710.html.
 +
 
 +
Washizaki, H., Sanchez-Segura, M-I., Garbajosa, J., Tockey, S., Nidiffer, K.E. 2023. “Envisioning Software Engineer Training Needs in The Digital Era Through the SWEBOK V4 Prism”, Proceedings of the IEEE International Conference on Software Engineering Education and Training (CSEE&T 2023), August 8-9, 2023. Waseda University, Tokyo Japan.
  
 
===Primary References===
 
===Primary References===
Abran, A. and J.W. Moore (exec. eds); P. Borque and R. Dupuis (eds.). 2004. ''[[SWEBOK: Guide to the Software Engineering Body of Knowledge]]''. Piscataway, NJ, USA: The Institute of Electrical and Electronic Engineers, Inc. (IEEE). Available at: http://www.computer.org/portal/web/swebok
+
Bourque, P. and R.E. Fairley (eds.). 2014. ''[[Guide to the Software Engineering Body of Knowledge (SWEBOK)]]''. Los Alamitos, CA, USA: IEEE Computer Society. Available at: http://www.swebok.org.
 +
 
 +
IEEE Computer Society. 2022. ''[[SWEBOK Guide Version 4.0]]'' beta. Accessed August 28, 2023. Available at https://waseda.app.box.com/s/elnhhnezdycn2q2zp4fe0f2t1fvse5rn.
  
 
===Additional References===
 
===Additional References===
No additional references have been identified for version 0.75.  Please provide any recommendations on additional references in your review.
+
None.
 +
 
 
----
 
----
<center>[[The Nature of Software|<- Previous Article]] | [[Systems Engineering and Software Engineering|Parent Article]] | [[Software Engineering and Systems Engineering: Similarities and Differences|Next Article ->]]</center>
+
<center>[[The Nature of Software|< Previous Article]] | [[Systems Engineering and Software Engineering|Parent Article]] | [[Key Points a Systems Engineer Needs to Know about Software Engineering|Next Article >]]</center>
 +
 
 
[[Category: Part 6]][[Category:Topic]]
 
[[Category: Part 6]][[Category:Topic]]
 
 
{{5comments}}
 
 
[[Category:Systems Engineering and Software Engineering]]
 
[[Category:Systems Engineering and Software Engineering]]
 +
<center>'''SEBoK v. 2.9, released 20 November 2023'''</center>

Latest revision as of 21:23, 19 November 2023


Lead Authors: Hironori Washizaki, Maria-Isabel Sanchez-Segura, Juan Garbajosa, Steve Tockey, Kenneth E Nidiffer, and Annette D. Reilly


Software is everywhere. Software and systems engineers are leading the way for the digital transformation of social, economic, military, and environmental systems at an increasing rate of change. Advanced software-enabled capabilities allow software and systems engineers to address and anticipate emerging and complex challenges. Most systems of any complexity today are modeled and controlled by software; hence, the term “software intensive systems” is commonly used to describe them. At the end of 2022, the IEEE Computer Society (IEEE-CS) released beta version 4 of the Software Engineering Body of Knowledge (SWEBOK) (IEEE Computer Society 2022). When the final version 4.0 is published, it will replace version 3 which appeared in 2014 (Bourque and Fairley 2014). As have previous versions, SWEBOK 4.0 will help guide both systems engineering and software engineering professionals to long-established software life cycle processes and new insights for dealing with the demands of the digital era. This article uses SWEBOK 4.0 beta to explain how and why the new SWEBOK takes into consideration the needs of digital era software engineers immersed in an industry demanding visionary solutions.

Introduction

ISO/IEC/IEEE Systems and Software Engineering Vocabulary (SEVOCAB) defines software engineering as “the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software.” (ISO/IEC/IEEE n.d.)

It is important to note that systems engineering, and software engineering are distinct disciplines with different but somewhat overlapping core competencies. Due to the inherent characteristics of software intensive systems, these disciplines often approach problem solving from different perspectives. For example, systems engineers apply their problem-solving skills to develop physical, computational, social, and hybrid systems. Depending on the system, those skills could be based on a wide range of disciplines including mathematics, any of the physical and social sciences, law, management, and a myriad of other disciplines. Software engineers tend to apply their problem-solving skills on a narrower set of disciplines, especially discrete mathematics and computer science, to develop computational systems and subsystems. Also, software Is a logical medium. Software components of software-enabled systems are logical constructions expressed in algorithmic form. This contrasts with the physical and social components of systems that are realized through mechanical, electrical, chemical, biological, social, human and other elements. Both disciplines are critical to solving the complex challenges of the future as evidenced by disruptive innovation and increasing complexity in new systems and systems of systems which is causing a convergence among disciplines.

SWEBOK Guide Objectives

The Guide to the Software Engineering Body of Knowledge (SWEBOK), published by the IEEE Computer Society (IEEE CS), represents the current state of generally accepted, consensus-based knowledge emanating from the interplay between software engineering theory and practice. (Bourke and Fairley 2014, IEEE Computer Society 2022). The objectives include the provision of guidance for learners, researchers, and practitioners to identify and share a mutual understanding of “generally accepted knowledge” in software engineering. This guidance defines the boundary between software engineering and related disciplines, and provides a foundation for certifications and educational curricula.

The Guide should not be confused with the Body of Knowledge itself which exists in published literature. It is similar in this regard to the SEBoK. For example, the Guide addresses knowledge areas (KAs) in terms of “what” activities are being done versus “how” they are accomplished. Bodies Of Knowledge (BOKs) are often a formal way of referring to core competencies, or what should be known to be successful in a practitioner’s area of expertise. (Washizaki, et al. 2023) Every profession is based on a body of knowledge, although that knowledge is not always defined in a concise manner. In cases where normality exists, the body of knowledge is “generally recognized” by practitioners and may be codified in a variety of ways for a variety of different uses. But in many cases, a guide to a body of knowledge is formally documented, usually in a form that permits it to be used for such purposes as development and accreditation of academic and training programs, certification of specialists, or professional licensing. (IEEE Computer Society 2022, IEEE Computer Society 2014) The purpose of the Guide is to describe the portion of the Body of Knowledge that is accepted, to organize that portion, and to provide topical access to it. The Guide is also aligned with the following objectives:

  1. To promote a consistent view of software engineering worldwide
  2. To specify the scope of, and clarify the place of software engineering with respect to other disciplines such as computer science, project management, computer engineering, and mathematics
  3. To characterize the contents of the software engineering discipline
  4. To provide topical access to the Software Engineering Body of Knowledge
  5. To provide a foundation for curriculum development and for individual certification and licensing material.

Overview of the SWEBOK Guide

The Guide represents the current state of accepted, consensus-based knowledge emanating from the interplay between software engineering theory and practice. The origins of the Guide go back to the late 1990s. Much like the software engineering discipline, the Guide has continued to evolve over the last 20 years to reflect the educational, industrial, social, technical, and technological changes in society. Version 4 of the Guide will be released in 2023 to improve its currency, readability, consistency, and usability.

Table 1 provides the high-level table of contents from Guide V4. Note that sections with an "*" are new (were not previously included in Guide 3). The current draft Guide V4 contains 18 knowledge areas (KAs), followed by several appendices. A KA is an identified area of software engineering defined by its knowledge requirements and described in terms of its concepts, component processes, practices, inputs, outputs, tools, and techniques. All KAs have been updated in V4 to reflect changes in software engineering since the publication of Guide V3. The new version reflects modern development practices, techniques, and the advancement of standards. Especially, agile and DevOps have been incorporated into almost all KAs since these models have been widely accepted since Guide V3 was published. Agile models typically have frequent demonstrations of working software to a customer in short iterative cycles with agile practices involving KAs. Furthermore, emerging platforms and technologies, including artificial intelligence (AI), machine learning (ML), and Internet of Things (IoT), have been incorporated into the foundation KAs. Also, there are three new KAs: Software Architecture, Software Operations, and Software Security. It is important to note there has also been more emphasis on Software Security in other relevant KAs such as software requirements. These additions better reflect contemporary software engineering practice, the pressing need to address cybersecurity as early as possible in developing distributed, networked systems, and non-distributed systems for use by the public at large, and the need for specialized skills to be able to work effectively in these areas.

Table 1. SWEBOK v4 Table of Contents (SEBoK Original)
Knowledge Areas
Requirements
Architecture*
Design
Construction
Testing
Operations*
Maintenance
Configuration Management
Engineering Management
Process
Models and Methods
Quality
Security*
Professional Practice
Economics
Computing Foundations
Mathematical Foundations
Engineering Foundations

The 18 KAs in Guide V4 are:

KA1 - Software Requirements: Describes the activities involved in eliciting, analyzing, specifying, validating, and managing software requirements. The importance of requirements documentation for long-term maintenance is added. The “what’s” and “how’s” of work on software requirements in a project should be determined by the type of constructed software and not by the project life cycle. Also, it includes a deeper, broader coverage of requirements specification techniques, including model-driven requirements specification and acceptance criteria-based requirements specification.

KA2 – Software Architecture: This is a new KA resulting from a realization that architecture is a significant and distinct discipline over and above software design. Software architecture consists of fundamental structures of software elements, relations among them, and properties of both elements and relations. As software tends toward larger, ever more complex systems, architecture concerns move beyond construction to connectivity while assuring new levels of quality for safety, security, and dependability. Software architecture aims to “satisfice” all stakeholders, while the focus of software design is on the transformation of that vision into a feasible implementation.

KA 3 - Software Design: Focuses on the process of transforming requirements into a representation of the software system. Software is pervasive and critical in all aspects of modern life. The success of pervasive software depends on broadening the background of people with design skills, especially as emerging technologies, faster delivery times, and emphasis on agile, lean, and incremental design impact the development process.

KA4 - Software Construction: Covers the activities involved in translating the software design into executable code. This section has been updated to reflect modern construction techniques and practices: managing dependencies, cross-platform development and migration, feedback loops for construction, visual programming, and low-code/zero-code (i.e., called no code) platforms. Furthermore, major updates were made to some of the existing sections, especially about reuse, life-cycle models, construction languages and environments.

KA5 - Software Testing: Deals with the various approaches and techniques used to assess software correctness and verify its conformance to requirements. This material has been revised to align with the shift left testing movement. This KA provides new content about software testing in recent development processes (like Agile, DevOps, and Test-Driven Development), application domains (like automotive, healthcare, mobile, legal, and IoT), emerging technologies (such as AI, blockchain, cloud) and quality attributes (like security and privacy).

KA6 - Software Engineering Operations: This is a new knowledge area that addresses the evolution of the role of software engineers to include DevOps and infrastructure as a Service (IaaS) activity while eliminating the organizational silos between development, maintenance, and operations. This new KA describes operations fundamentals, planning, delivery and control activities, and techniques.

KA 7 - Software Maintenance (SM): Software maintenance addresses fundamentals, processes, and techniques to provide cost-effective support for software in operation. Activities, such as determining the logistical support needed for the transition, are performed, and applied during the pre-delivery stage, whereas software surveillance, modification, training, and operating or interfacing with a help desk are post-stage activities. Software Maintenance categories and the software process have been updated to align with the 2022 version of ISO/IEC/IEEE 14764. (ISO/IEEE/IEEE 2022) Also, continuous integration, delivery, testing, and deployment have been added as a new topic in response to the growing popularity of regrouping development, maintenance, and operations tasks to improve software engineering productivity.

KA 8 - Software Configuration Management (SCM): Focuses on four basic functions of SCM: Configuration Identification: identifying all configuration items (CI) of a software system's state; Control changes: coordinating and limiting access to configurations in a software system; Configuration auditing: a series of reviews confirming that changes are being made to conform to a software system's desired state; and Status Accounting: automatically recording information about CIs, relationships, baselines and changes on any CI developed, as well as why they were made, when they were made, and who made them. In SWEBOK Guide V4, SCM has been explained considering all its facets. It stresses that the SCM process plan must be defined first before all the decisions and commitments included in the plan are somehow incorporated into existing tools for execution rather than the other way around, as was the usual practice in the past. Keeping track of configuration items (CI) relationships is essential to visualize the potential impact of a change on a CI over other CIs.

KA9 - Software Engineering Management: Describes the activities of the planning, organizing, estimating, and tracking of software projects. Practices are changing to meet the needs of society caused by increases in the size and complexity of software as well as greater pressure to quickly release software enabling products to market in rapidly changing environments. The results are fundamental management shifts in how work is performed.

KA10 - Software Engineering Process: Describes the activities, methods, and techniques used to define, implement, assess, and improve the software development process. Software engineers face a challenging and evolving, highly technological landscape due to fast-moving technology, societal events and changes, and a trend towards digitalization involving very many different domains. This is a point of no return that has facilitated the ongoing adoption of Agile and DevOps. Nevertheless, now more than ever, the software engineering processes applied to create products will continue to evolve, profiting from advances in the engineering dimension and learning, new and more advanced tools, and the latest knowledge from the other KAs. The KA describes this new consensus, highlighting the interaction with other KAs.

KA 11 - Software Engineering Models and Methods: Introduces different models, methods, and tools that support the software development process. Models have been updated and accurately classified by type. Aspect-oriented development has been added in the document as well as fundamental model-driven and model-based methods, have also been introduced. Agile methods have been extended a great deal to incorporate modern techniques, such as lean development, as well as large-scale and enterprise agile methods. On this note, DevOps and release engineering have also been introduced to clarify the release aspect of agile methods.

KA12 - Software Quality: Addresses the activities and techniques involved in achieving and evaluating software quality. This chapter was overhauled for alignment with notions of processes/product quality. It now includes new topics: (1) Software Dependability and Integrity Levels, (2) Standards, Models and Certifications, (3) Policies, Processes and Procedures, and (4) Quality Control and Testing.

KA13 – Software Security: This is a new knowledge area that focuses on the broader topics of security, particularly security fundamentals, security management, security tools, and domain-specific security, as well as major security engineering activities (such as security testing) that were briefly described under the Computing Foundations KA in the last SWEBOK edition. The existence of a separate KA emphasizes that security must be a first-class quality attribute in any development since almost any software system is connected to others, resulting in increased security risks.

KA14 - Software Engineering Professional Practice: Covers ethical considerations, professional codes of conduct, and the role of software engineering in society. Additions and revisions address the following areas: (1) Professional practices following generally accepted practices, standards, and guidelines set forth by the applicable professional societies, (2) User interface/user experience (UI/UX) inclusive design, (3) Considerations on diversity and inclusion, and (4) Considerations on agility.

KA15 - Software Engineering Economics: Focuses on the essence of engineering economics, the science of making decisions, and broadening the more traditional, purely financial view of engineering economics. Value does not always derive from money alone; that is, value can also derive from the “unquantifiable” such as, corporate citizenship, employee well-being, environmental friendliness, customer loyalty, and so on. This KA also focuses on more systematic pre-project decisions where a project is not under development but is being envisioned.

Note: Minor improvements in topic presentation in the next three KA 16-18. Discussions of Artificial Intelligence and Machine Learning were added. Furthermore, the revision includes a deeper coverage of measurement, particularly its implications for programming languages, and a more comprehensive discussion of root cause analysis.

KA16 - Computing Foundations: Covers the fundamental concepts and theories that underlie the discipline of software engineering.

KA 17 - Mathematical Foundations: Introduces mathematical techniques and principles relevant to software engineering, such as logic, probability, and discrete mathematics.

KA - 18 Engineering Foundations: Covers engineering principles and practices applicable to software engineering, including system engineering and project management.

Concluding Comments

A significant component of productivity today is the capabilities enabled by software systems. Software is a maturing science and engineering discipline; therefore, a need exists to continuously provide new guidance materials that reflect areas that are becoming important in modern software engineering. The Software Engineering Body of Knowledge Version V4 is a leading product which will help address this issue. It will serve as a reference for educators, practitioners, and organizations to understand the essential concepts and skills needed to design, develop, and maintain current and future software systems.

SWEBOK V4 represents the next step in the evolution of the software engineering profession and is written under the auspices of the Profession and Education Activities Board of the IEEE Computer Society. An international team of subject matter experts was assembled with the goal of developing the update. Given the purpose of this article, a significant portion of this document includes verbatim or near-verbatim elements of the SWEBOK Guide V4 which is about to go out for public review and that of (Washnizaki, et al. 2023) written by several members of the international team.

SWEBOK is described inside the SEBoK and there are some clear similarities and differences between the two BOKs. Each BOK is a comprehensive guide that outlines the core knowledge areas, principles, and best practices. SWEBOK concentrates specifically on the software engineering domain, providing a detailed overview of software development processes and methodologies. SEBoK, on the other hand, has a broader scope and addresses the entire systems engineering domain, including software and beyond, considering the interaction and integration of various components in complex systems.

References

Works Cited

Bourque, P. and R.E. Fairley (eds.). 2014. Guide to the Software Engineering Body of Knowledge (SWEBOK). Los Alamitos, CA, USA: IEEE Computer Society. Available at: http://www.swebok.org.

IEEE Computer Society. 2014. Software engineering competency model (SWECOM), Version 1.0. Accessed August 29, 2023. Available at https://www.computer.org/volunteering/boards-and-committees/professional-educational-activities/software-engineering-competency-model.

IEEE Computer Society. 2022. SWEBOK Guide Version 4.0 beta. Accessed August 28, 2023. Available at https://waseda.app.box.com/s/elnhhnezdycn2q2zp4fe0f2t1fvse5rn.

ISO/IEC/IEEE. 2017. ISO/IEC/IEEE Systems and Software Engineering – Vocabulary. Accessed August 28, 2023. Available at https://www.iso.org/standard/71952.htmlhttps://www.iso.org/standard/71952.html.

ISO/IEC/IEEE. 2022. ISO/IEC/IEEE 14764-2022 Software Life Cycle Processes – Maintenance. Accessed August 28, 2023. Available at https://www.iso.org/standard/80710.html.

Washizaki, H., Sanchez-Segura, M-I., Garbajosa, J., Tockey, S., Nidiffer, K.E. 2023. “Envisioning Software Engineer Training Needs in The Digital Era Through the SWEBOK V4 Prism”, Proceedings of the IEEE International Conference on Software Engineering Education and Training (CSEE&T 2023), August 8-9, 2023. Waseda University, Tokyo Japan.

Primary References

Bourque, P. and R.E. Fairley (eds.). 2014. Guide to the Software Engineering Body of Knowledge (SWEBOK). Los Alamitos, CA, USA: IEEE Computer Society. Available at: http://www.swebok.org.

IEEE Computer Society. 2022. SWEBOK Guide Version 4.0 beta. Accessed August 28, 2023. Available at https://waseda.app.box.com/s/elnhhnezdycn2q2zp4fe0f2t1fvse5rn.

Additional References

None.


< Previous Article | Parent Article | Next Article >
SEBoK v. 2.9, released 20 November 2023