Table of Contents xiii 4.6.Cost-Effectiveness Analysis 12-13 4.7.Break-Even Analysis 12-13 4.8.Business Case 12-13 4.9.Multiple Attribute Evaluation 12-14 4.10.Optimization Analysis 12-14 5.Practical Considerations 12-14 5.1.The "Good Enough"Principle 12-14 5.2.Friction-Free Economy 12-15 5.3.Ecosystems 12-15 5.4.Offshoring and Outsourcing 12-15 Matrix of Topics vs.Reference Material 12-16 Chapter 13:Computing Foundations 13-1 1.Problem Solving Techniques 13-3 1.1.Definition of Problem Solving 13-3 1.2.Formulating the Real Problem 13-3 1.3.Analyze the Problem 13-3 1.4.Design a Solution Search Strategy 13-3 1.5.Problem Solving Using Programs 13-3 2.Abstraction 13-4 2.1.Levels ofAbstraction 13-4 2.2.Encapsulation 13-4 2.3.Hierarchy 13-4 2.4.Alternate Abstractions 13-5 3.Programming Fundamentals 13-5 3.1.The Programming Process 13-5 3.2.Programming Paradigms 13-5 4.Programming Language Basics 13-6 4.1.Programming Language Overview 13-6 4.2.Syntax and Semantics of Programming Languages 13-6 4.3.Low-Level Programming Languages 13-7 4.4.High-Level Programming Languages 13-7 4.5.Declarative vs.Imperative Programming Languages 13-7 5.Debugging Tools and Techniques 13-8 5.1.Types of Errors 13-8 5.2.Debugging Techniques 13-8 5.3.Debugging Tools 13-8 6.Data Structure and Representation 13-9 6.1.Data Structure Overview 13-9 6.2.Types of Data Structure 13-9 6.3.Operations on Data Structures 13-9 7.Algorithms and Complexity 13-10 7.1.Overview of Algorithms 13-10 7.2.Attributes of Algorithms 13-10 7.3.Algorithmic Analysis 13-10 7.4.Algorithmic Design Strategies 13-11 7.5.Algorithmic Analysis Strategies 13-11 8.Basic Concept of a System 13-11 8.1.Emergent System Properties 13-11
Table of Contents xiii 4.6. Cost-Effectiveness Analysis 12-13 4.7. Break-Even Analysis 12-13 4.8. Business Case 12-13 4.9. Multiple Attribute Evaluation 12-14 4.10. Optimization Analysis 12-14 5. Practical Considerations 12-14 5.1. The “Good Enough” Principle 12-14 5.2. Friction-Free Economy 12-15 5.3. Ecosystems 12-15 5.4. Offshoring and Outsourcing 12-15 Matrix of Topics vs. Reference Material 12-16 Chapter 13: Computing Foundations 13-1 1. Problem Solving Techniques 13-3 1.1. Definition of Problem Solving 13-3 1.2. Formulating the Real Problem 13-3 1.3. Analyze the Problem 13-3 1.4. Design a Solution Search Strategy 13-3 1.5. Problem Solving Using Programs 13-3 2. Abstraction 13-4 2.1. Levels of Abstraction 13-4 2.2. Encapsulation 13-4 2.3. Hierarchy 13-4 2.4. Alternate Abstractions 13-5 3. Programming Fundamentals 13-5 3.1. The Programming Process 13-5 3.2. Programming Paradigms 13-5 4. Programming Language Basics 13-6 4.1. Programming Language Overview 13-6 4.2. Syntax and Semantics of Programming Languages 13-6 4.3. Low-Level Programming Languages 13-7 4.4. High-Level Programming Languages 13-7 4.5. Declarative vs. Imperative Programming Languages 13-7 5. Debugging Tools and Techniques 13-8 5.1. Types of Errors 13-8 5.2. Debugging Techniques 13-8 5.3. Debugging Tools 13-8 6. Data Structure and Representation 13-9 6.1. Data Structure Overview 13-9 6.2. Types of Data Structure 13-9 6.3. Operations on Data Structures 13-9 7. Algorithms and Complexity 13-10 7.1. Overview of Algorithms 13-10 7.2. Attributes of Algorithms 13-10 7.3. Algorithmic Analysis 13-10 7.4. Algorithmic Design Strategies 13-11 7.5. Algorithmic Analysis Strategies 13-11 8. Basic Concept of a System 13-11 8.1. Emergent System Properties 13-11
xiv SWEBOK®Guide V3.0 8.2.Systems Engineering 13-12 8.3.Overview of a Computer System 13-12 9.Computer Organization 13-13 9.1.Computer Organization Overview 13-13 9.2.Digital Systems 13-13 9.3.Digital Logic 13-13 9.4.Computer Expression of Data 13-13 9.5.The Central Processing Unit (CPU) 13-14 9.6.Memory System Organization 13-14 9.7.Input and Output (1/O) 13-14 10.Compiler Basics 13-15 10.1.Compiler/Interpreter Overview 13-15 10.2.Interpretation and Compilation 13-15 10.3.The Compilation Process 13-15 11.Operating Systems Basics 13-16 11.1.Operating Systems Overview 13-16 11.2.Tasks of an Operating System 13-16 11.3.Operating System Abstractions 13-17 11.4.Operating Systems Classification 13-17 12.Database Basics and Data Management 13-17 12.1.Entity and Schema 13-18 12.2.Database Management Systems (DBMS) 13-18 12.3.Database Ouery Language 13-18 12.4.Tasks of DBMS Packages 13-18 12.5.Data Management 13-19 12.6.Data Mining 13-19 13.Network Communication Basics 13-19 13.1.Types of Network 13-19 13.2.Basic Network Components 13-19 13.3.Networking Protocols and Standards 13-20 13.4.The Internet 13-20 13.5.Internet of Things 13-20 13.6.Virtual Private Network (VPN) 13-21 14.Parallel and Distributed Computing 13-21 14.1.Parallel and Distributed Computing Overview 13-21 14.2.Difference between Parallel and Distributed Computing 13-21 14.3.Parallel and Distributed Computing Models 13-21 14.4.Main Issues in Distributed Computing 13-22 15.Basic User Human Factors 13-22 15.1.Input and Output 13-22 15.2.Error Messages 13-23 15.3.Software Robustness 13-23 16.Basic Developer Human Factors 13-23 16.1.Structure 13-24 16.2.Comments 13-24 17.Secure Software Development and Maintenance 13-24 17.1.Software Requirements Security 13-24 17.2.Software Design Security 13-25 17.3.Software Construction Security 13-25 17.4.Software Testing Security 13-25
xiv SWEBOK® Guide V3.0 8.2. Systems Engineering 13-12 8.3. Overview of a Computer System 13-12 9. Computer Organization 13-13 9.1. Computer Organization Overview 13-13 9.2. Digital Systems 13-13 9.3. Digital Logic 13-13 9.4. Computer Expression of Data 13-13 9.5. The Central Processing Unit (CPU) 13-14 9.6. Memory System Organization 13-14 9.7. Input and Output (I/O) 13-14 10. Compiler Basics 13-15 10.1. Compiler/Interpreter Overview 13-15 10.2. Interpretation and Compilation 13-15 10.3. The Compilation Process 13-15 11. Operating Systems Basics 13-16 11.1. Operating Systems Overview 13-16 11.2. Tasks of an Operating System 13-16 11.3. Operating System Abstractions 13-17 11.4. Operating Systems Classification 13-17 12. Database Basics and Data Management 13-17 12.1. Entity and Schema 13-18 12.2. Database Management Systems (DBMS) 13-18 12.3. Database Query Language 13-18 12.4. Tasks of DBMS Packages 13-18 12.5. Data Management 13-19 12.6. Data Mining 13-19 13. Network Communication Basics 13-19 13.1. Types of Network 13-19 13.2. Basic Network Components 13-19 13.3. Networking Protocols and Standards 13-20 13.4. The Internet 13-20 13.5. Internet of Things 13-20 13.6. Virtual Private Network (VPN) 13-21 14. Parallel and Distributed Computing 13-21 14.1. Parallel and Distributed Computing Overview 13-21 14.2. Difference between Parallel and Distributed Computing 13-21 14.3. Parallel and Distributed Computing Models 13-21 14.4. Main Issues in Distributed Computing 13-22 15. Basic User Human Factors 13-22 15.1. Input and Output 13-22 15.2. Error Messages 13-23 15.3. Software Robustness 13-23 16. Basic Developer Human Factors 13-23 16.1. Structure 13-24 16.2. Comments 13-24 17. Secure Software Development and Maintenance 13-24 17.1. Software Requirements Security 13-24 17.2. Software Design Security 13-25 17.3. Software Construction Security 13-25 17.4. Software Testing Security 13-25
Table of Contents xv 17.5.Build Security into Software Engineering Process 13-25 17.6.Software Security Guidelines 13-25 Matrix of Topics vs.Reference Material 13-27 Chapter 14:Mathematical Foundations 14-1 1.Set.Relations.Functions 14-1 1.1.Set Operations 14-2 1.2.Properties of Set 14-3 1.3.Relation and Function 14-4 2.Basic Logic 14-5 2.1.Propositional Logic 14-5 2.2.Predicate Logic 14-5 3.Proof Techniques 14-6 3.1.Methods of Proving Theorems 14-6 4.Basics of Counting 14-7 5.Graphs and Trees 14-8 5.1.Graphs 14-8 5.2.Trees 14-10 6.Discrete Probability 14-13 7.Finite State Machines 14-14 8.Grammars 14-15 8.1.Language Recognition 14-16 9.Numerical Precision,Accuracy,and Errors 14-17 10.Number Theory 14-18 10.1.Divisibilitv 14-18 10.2.Prime Number.GCD 14-19 11.Algebraic Structures 14-19 11.1.Group 14-19 11.2.Rings 14-20 Matrix of Topics vs.Reference Material 14-21 Chapter 15:Engineering Foundations 15-1 1.Empirical Methods and Experimental Techniques 15-1 1.1.Designed Experiment 15-1 1.2.Observational Study 15-2 1.3.Retrospective Study 15-2 2.Statistical Analysis 15-2 2.1.Unit of Analysis (Sampling Units),Population,and Sample 15-2 2.2.Concepts of Correlation and Regression 15-5 3.Measurement 15-5 3.1.Levels (Scales)of Measurement 15-6 3.2.Direct and Derived Measures 15-7 3.3.Reliability and Validity 15-8 3.4.Assessing Reliability 15-8 4.Engineering Design 15-8 4.1.Engineering Design in Engineering Education 15-8 4.2.Design as a Problem Solving Activity 15-9 4.3.Steps Involved in Engineering Design 15-9 5.Modeling,Simulation,and Prototyping 15-10 5.1.Modeling 15-10
Table of Contents xv 17.5. Build Security into Software Engineering Process 13-25 17.6. Software Security Guidelines 13-25 Matrix of Topics vs. Reference Material 13-27 Chapter 14: Mathematical Foundations 14-1 1. Set, Relations, Functions 14-1 1.1. Set Operations 14-2 1.2. Properties of Set 14-3 1.3. Relation and Function 14-4 2. Basic Logic 14-5 2.1. Propositional Logic 14-5 2.2. Predicate Logic 14-5 3. Proof Techniques 14-6 3.1. Methods of Proving Theorems 14-6 4. Basics of Counting 14-7 5. Graphs and Trees 14-8 5.1. Graphs 14-8 5.2. Trees 14-10 6. Discrete Probability 14-13 7. Finite State Machines 14-14 8. Grammars 14-15 8.1. Language Recognition 14-16 9. Numerical Precision, Accuracy, and Errors 14-17 10. Number Theory 14-18 10.1. Divisibility 14-18 10.2. Prime Number, GCD 14-19 11. Algebraic Structures 14-19 11.1. Group 14-19 11.2. Rings 14-20 Matrix of Topics vs. Reference Material 14-21 Chapter 15: Engineering Foundations 15-1 1. Empirical Methods and Experimental Techniques 15-1 1.1. Designed Experiment 15-1 1.2. Observational Study 15-2 1.3. Retrospective Study 15-2 2. Statistical Analysis 15-2 2.1. Unit of Analysis (Sampling Units), Population, and Sample 15-2 2.2. Concepts of Correlation and Regression 15-5 3. Measurement 15-5 3.1. Levels (Scales) of Measurement 15-6 3.2. Direct and Derived Measures 15-7 3.3. Reliability and Validity 15-8 3.4. Assessing Reliability 15-8 4. Engineering Design 15-8 4.1. Engineering Design in Engineering Education 15-8 4.2. Design as a Problem Solving Activity 15-9 4.3. Steps Involved in Engineering Design 15-9 5. Modeling, Simulation, and Prototyping 15-10 5.1. Modeling 15-10
xvi SWEBOK®Guide V3.0 5.2.Simulation 15-11 5.3.Prototyping 15-11 6.Standards 15-12 7.Root Cause Analysis 15-12 7.1.Techniques for Conducting Root Cause Analysis 15-13 Matrix of Topics vs.Reference Material 15-14 Appendix A:Knowledge Area Description Specifications A-1 Appendix B:IEEE and ISO/IEC Standards Supporting the Software Engineering Body of Knowledge(SWEBOK) B-1 Appendix C:Consolidated Reference List C-1
xvi SWEBOK® Guide V3.0 5.2. Simulation 15-11 5.3. Prototyping 15-11 6. Standards 15-12 7. Root Cause Analysis 15-12 7.1. Techniques for Conducting Root Cause Analysis 15-13 Matrix of Topics vs. Reference Material 15-14 Appendix A: Knowledge Area Description Specifications A-1 Appendix B: IEEE and ISO/IEC Standards Supporting the Software Engineering Body of Knowledge (SWEBOK) B-1 Appendix C: Consolidated Reference List C-1
FOREWORD Every profession is based on a body of knowl- In 1958,John Tukey,the world-renowned stat- edge,although that knowledge is not always istician,coined the term software.The term soft- defined in a concise manner.In cases where no ware engineering was used in the title of a NATO formality exists,the body of knowledge is "gen- conference held in Germany in 1968.The IEEE erally recognized"by practitioners and may Computer Society first published its Transactions be codified in a variety of ways for a variety of on Soffware Engineering in 1972,and a commit- different uses.But in many cases,a guide to a tee for developing software engineering stan- body of knowledge is formally documented,usu-dards was established within the IEEE Computer ally in a form that permits it to be used for such Society in 1976. purposes as development and accreditation of In 1990,planning was begun for an interna- academic and training programs,certification of tional standard to provide an overall view of soft- specialists,or professional licensing.Generally,ware engineering.The standard was completed in a professional society or similar body maintains 1995 with designation ISO/IEC 12207 and given stewardship of the formal definition of a body of the title of Standard for Software Life Cycle Pro- knowledge. cesses.The IEEE version of 12207 was published During the past forty-five years,software engi-in 1996 and provided a major foundation for the neering has evolved from a conference catch-body of knowledge captured in SWEBOK 2004. phrase into an engineering profession,character-The current version of 12207 is designated as ized by 1)a professional society,2)standards that ISO/IEC 12207:2008 and IEEE 12207-2008;it specify generally accepted professional practices,provides the basis for this SWEBOK V3. 3)a code of ethics,4)conference proceedings,This Guide to the Soffware Engineering Body 5)textbooks,6)curriculum guidelines and cur-of Knowledge is presented to you,the reader,as ricula,7)accreditation criteria and accredited a mechanism for acquiring the knowledge you degree programs,8)certification and licensing, need in your lifelong career development as a and 9)this Guide to the Body of Knowledge. software engineering professional. In this Guide to the Software Engineering Body of Knowledge,the IEEE Computer Society pres- ents a revised and updated version of the body of Dick Fairley,Chair knowledge formerly documented as SWEBOK Software and Systems Engineering Committee 2004;this revised and updated version is denoted IEEE Computer Society SWEBOK V3.This work is in partial fulfillment of the Society's responsibility to promote the advancement of both theory and practice for the Don Shafer,Vice President profession of software engineering. Professional Activities Board It should be noted that this Guide does not IEEE Computer Society present the entire the body of knowledge for soft- ware engineering but rather serves as a guide to the body of knowledge that has been developed over more than four decades.The software engi- neering body of knowledge is constantly evolv- ing.Nevertheless,this Guide constitutes a valu- able characterization of the software engineering profession. xvii
xvii FOREWORD Every profession is based on a body of knowledge, although that knowledge is not always defined in a concise manner. In cases where no formality 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. Generally, a professional society or similar body maintains stewardship of the formal definition of a body of knowledge. During the past forty-five years, software engineering has evolved from a conference catchphrase into an engineering profession, characterized by 1) a professional society, 2) standards that specify generally accepted professional practices, 3) a code of ethics, 4) conference proceedings, 5) textbooks, 6) curriculum guidelines and curricula, 7) accreditation criteria and accredited degree programs, 8) certification and licensing, and 9) this Guide to the Body of Knowledge. In this Guide to the Software Engineering Body of Knowledge, the IEEE Computer Society presents a revised and updated version of the body of knowledge formerly documented as SWEBOK 2004; this revised and updated version is denoted SWEBOK V3. This work is in partial fulfillment of the Society’s responsibility to promote the advancement of both theory and practice for the profession of software engineering. It should be noted that this Guide does not present the entire the body of knowledge for software engineering but rather serves as a guide to the body of knowledge that has been developed over more than four decades. The software engineering body of knowledge is constantly evolving. Nevertheless, this Guide constitutes a valuable characterization of the software engineering profession. In 1958, John Tukey, the world-renowned statistician, coined the term software. The term software engineering was used in the title of a NATO conference held in Germany in 1968. The IEEE Computer Society first published its Transactions on Software Engineering in 1972, and a committee for developing software engineering standards was established within the IEEE Computer Society in 1976. In 1990, planning was begun for an international standard to provide an overall view of software engineering. The standard was completed in 1995 with designation ISO/IEC 12207 and given the title of Standard for Software Life Cycle Processes. The IEEE version of 12207 was published in 1996 and provided a major foundation for the body of knowledge captured in SWEBOK 2004. The current version of 12207 is designated as ISO/IEC 12207:2008 and IEEE 12207-2008; it provides the basis for this SWEBOK V3. This Guide to the Software Engineering Body of Knowledge is presented to you, the reader, as a mechanism for acquiring the knowledge you need in your lifelong career development as a software engineering professional. Dick Fairley, Chair Software and Systems Engineering Committee IEEE Computer Society Don Shafer, Vice President Professional Activities Board IEEE Computer Society