دسترسی نامحدود
برای کاربرانی که ثبت نام کرده اند
برای ارتباط با ما می توانید از طریق شماره موبایل زیر از طریق تماس و پیامک با ما در ارتباط باشید
در صورت عدم پاسخ گویی از طریق پیامک با پشتیبان در ارتباط باشید
برای کاربرانی که ثبت نام کرده اند
درصورت عدم همخوانی توضیحات با کتاب
از ساعت 7 صبح تا 10 شب
ویرایش: [2 ed.] نویسندگان: Phillip A. Laplante, Mohamad Kassab سری: ISBN (شابک) : 1032111534, 9781032111537 ناشر: CRC Press سال نشر: 2022 تعداد صفحات: 362 [395] زبان: English فرمت فایل : PDF (درصورت درخواست کاربر به PDF، EPUB یا AZW3 تبدیل می شود) حجم فایل: 45 Mb
در صورت ایرانی بودن نویسنده امکان دانلود وجود ندارد و مبلغ عودت داده خواهد شد
در صورت تبدیل فایل کتاب What Every Engineer Should Know about Software Engineering به فرمت های PDF، EPUB، AZW3، MOBI و یا DJVU می توانید به پشتیبان اطلاع دهید تا فایل مورد نظر را تبدیل نمایند.
توجه داشته باشید کتاب آنچه هر مهندس باید در مورد مهندسی نرم افزار بداند نسخه زبان اصلی می باشد و کتاب ترجمه شده به فارسی نمی باشد. وبسایت اینترنشنال لایبرری ارائه دهنده کتاب های زبان اصلی می باشد و هیچ گونه کتاب ترجمه شده یا نوشته شده به فارسی را ارائه نمی دهد.
این کتاب یک رویکرد عملی برای درک، طراحی و ساخت نرم افزار صدا بر اساس اصول مستحکم ارائه می دهد. با استفاده از یک Q منحصر به فرد
This book offers a practical approach to understanding, designing, and building sound software based on solid principles. Using a unique Q&A format, this book addresses the issues that engineers need to understand in order to successfully work with software engineers, develop specifications for quality software, and learn the basics of the most common programming languages, development approaches, and paradigms. The new edition is thoroughly updated to improve the pedagogical flow and emphasize new software engineering processes, practices, and tools that have emerged in every software engineering area.
Features:
This book is aimed at a wide range of engineers across many disciplines who work with software.
Cover Half Title Series Information Title Page Copyright Page Dedication Table of Contents Authors Introduction What Is the Goal of This Book? How Is this Book Different From Other Software Engineering Books? Can This Book Convert Me Into a Software Engineer? Are Software Engineers Really Engineers? How Should I Use This Book? Who Is the Intended Audience? Did Anyone Help You With This Book? Are There Copyrights and Trademarks to Be Cited? 1 The Profession of Software Engineering Outline 1.1 Introduction 1.2 Software Engineering as an Engineering Profession 1.2.1 What Is Software Engineering? 1.2.2 Is Software Engineering an Engineering Discipline? 1.2.3 What Is the Difference Between Software Engineering and Systems Engineering? 1.2.4 What Is the History of Software Engineering? 1.2.5 What Is the Role of the Software Engineer? 1.2.6 How Do Software Engineers Spend Their Time On the Job? 1.2.7 What Is the Difference Between a Software Engineer and a Systems Developer? 1.2.8 What Kind of Education Do Software Engineers Need? 1.2.9 What Kind of Education Do Software Engineers Typically Have? 1.2.10 I Know Someone Who Is an “XYZ Certified Engineer”; Are They a Software Engineer? 1.2.11 Why Are There So Many Software Engineers Without the Proper Education? 1.2.12 Can Software Engineering Programs Be Accredited? 1.2.13 What Are Some of the Popular Certificates in Demand for Software Engineers? 1.3 Standards and Certifications 1.3.1 Are There Standards for Software Engineering Practices, Documentation, and So Forth? 1.3.2 What Is the Software Engineering Body of Knowledge? 1.3.3 Are There Any “Fundamental Theorems” of Software Engineering? 1.4 Misconceptions About Software Engineering 1.4.1 Why Is Software So Buggy and Unreliable? 1.4.2 I Write Software as Part of My Job; Does That Make Me a Software Engineer? 1.4.3 But Isn’t Software System Development Primarily Concerned With Programming? 1.4.4 Can’t Software Tools and Development Methods Solve Most Or All of the Problems Pertaining to Software Engineering? 1.4.5 Isn’t Software Engineering Productivity a Function of System Complexity? 1.4.6 Once the Software Is Delivered, Isn’t the Job Finished? 1.4.7 Aren’t Errors an Unavoidable Side Effect of Software Development? Further Reading 2 Software Properties, Processes, and Standards Outline 2.1 Introduction 2.2 Characteristics of Software 2.2.1 How Do Software Engineers Characterize Software? 2.2.2 What Is Software Quality? 2.2.3 What Are the Consequences of Ignoring Quality Attributes While Building Software? 2.2.4 What Are the Different Qualities That Can Characterize Software? 2.2.5 What Is Software “Security”? 2.2.6 What Is Software “Performance”? 2.2.7 What Is Software “Usability”? 2.2.8 What Is Software “Portability”? 2.2.9 What Is Software “Interoperability”? 2.2.10 What Is Software “Testability”? 2.2.11 What Is Software “Modifiability”? 2.2.12 What Is Software “Reliability”? 2.2.13 How Do You Measure Software Reliability? 2.2.14 What Is a Failure Function? 2.2.15 What Is a “Bathtub Curve”? 2.2.16 But Software Doesn’t Wear Out, So Why Would It Conform to the Bathtub Curve? 2.2.17 Can the Traditional Quality Measures of MTFF Or MTBF Be Used to Stipulate Reliability in the Software Requirements Specification? 2.2.18 What Is Meant By the “Correctness” of Software? 2.2.19 What Is “Traceability” in Software Systems? 2.2.20 Are There Other Software Qualities? 2.3 Software Processes and Methodologies 2.3.1 What Is a Software Process? 2.3.2 Isn’t Every Software Process Model Just an Abstraction? 2.3.3 What Benefits Are There to Using a Software Process Model? 2.3.4 What Is a Software Methodology? 2.3.5 Aren’t Software Process Models and Methodologies the Same? 2.3.6 What Is the Waterfall Life Cycle Model? 2.3.7 How Many Phases Should the Waterfall Model Have? 2.3.8 What Happens During the Software Conception Phase of the Waterfall Process Model? 2.3.9 Does the Software Conception Phase Really Happen? 2.3.10 What Happens During the Requirements Specification Phase of the Waterfall Process Model? 2.3.11 Do Any Test Activities Occur During the Requirements Specification Phase? 2.3.12 What Happens During the Software Design Phase of the Waterfall Process Model? 2.3.13 Do Any Test Activities Occur During the Software Design Phase? 2.3.14 What Happens During the Software Development Phase of the Waterfall Process Model? 2.3.15 What Test Activities Occur During the Software Development Phase? 2.3.16 When Does the Software Development Phase End? 2.3.17 What Happens During the Testing Phase of the Waterfall Process Model? 2.3.18 When Does the Testing Phase End? 2.3.19 What Happens During the Software Maintenance Phase of the Waterfall Process Model? 2.3.20 How Are Maintenance Corrections Supposed to Be Handled? 2.3.21 The Waterfall Model Looks Artificial. Is There No Backtracking? 2.3.22 What Is the V Model for Software? 2.3.23 What Is the Spiral Model for Software? 2.3.24 What Are Evolutionary Models? 2.3.25 Are There Any Downsides to Using Evolutionary Models? 2.3.26 What Is the Incremental Software Model? 2.3.27 What Is the Difference Between Incremental and Evolutionary Models? 2.3.28 Why Use the Incremental Model? 2.3.29 Are There Any Downsides to the Incremental Model? 2.3.30 What Is the Unified Process Model? 2.3.31 Where Is the UPM Used? 2.3.32 What Are Agile Methodologies? 2.3.33 What Are the Principles Behind the Agile Manifesto? 2.3.34 What Are the Benefits of Agile Software Development? 2.3.35 What Are Some Agile Methodologies? 2.3.36 What Is Extreme Programming? 2.3.37 What Is Scrum? 2.3.38 What Is Kanban? 2.3.39 What Is Lean Development? 2.3.40 What Are DevOps Practices? 2.3.41 What Is Scaled Agile Framework? 2.3.42 When Should Agile Methodologies Be Used? 2.3.43 Is There a Case to Be Made for Not Using Agile Methods? 2.3.44 All of These Process Models Look Rather Simplistic, Artificial, Or Too Prescriptive. Should They Really Be Used? 2.4 Software Standards 2.4.1 Who Publishes Software Standards? 2.4.2 What Is the DOD-STD-2167A Standard? 2.4.3 What Is the DOD-STD-498 Standard? 2.4.4 What Is the ISO 9000 Standard? 2.4.5 Which Part of ISO 9000 Applies to Software? 2.4.6 Who Uses This Standard? 2.4.7 What Is in the ISO 90003 Standard? 2.4.8 How Specific Is ISO 90003 for Software? 2.4.9 What Is ISO/IEC Standard 12207? Notes Further Reading 3 Software Requirements Engineering Outline 3.1 Introduction 3.2 Requirements Engineering Concepts 3.2.1 What Is a “Requirement”? 3.2.2 What Is the Requirements Specification? 3.2.3 What Are the Different Types of Requirements? 3.2.4 What Are the “Functional Requirements”? 3.2.5 What Are “Non-Functional Requirements”? 3.2.6 What Are “Domain Requirements”? 3.2.7 When Does Requirements Engineering Start? 3.2.8 What Are the Core Activities of Requirements Engineering? 3.3 Requirements Elicitation/Discovery 3.3.1 What Is “Requirements Elicitation”? 3.3.2 What Are the Obstacles That May Challenge the Requirements Elicitation? 3.3.3 How Should We Prepare for the Requirements Elicitation Process? 3.3.4 What Are the Common Requirements Elicitation Techniques? 3.3.4.1 What Is the “Brainstorming” Technique? 3.3.4.2 What Is the “Card Sorting” Technique? 3.3.4.3 What Is the “Crowdsourcing” Technique? 3.3.4.4 What Is the “Designer as Apprentice” Technique? 3.3.4.5 What Is the “Domain Analysis” Technique? 3.3.4.6 What Is the “Ethnographic Observation” Technique? 3.3.4.7 What Is the “Goal-Based Approaches” Technique? 3.3.4.8 What Is the “Questionnaires” Technique? 3.3.4.9 What Is the “Introspection” Technique? 3.3.4.10 What Is the “Joint Application Development” Technique? 3.3.4.11 What Is the “Quality Function Deployment” Technique? 3.3.4.12 What Is the “Viewpoints” Technique? 3.3.4.13 Which Combination of Requirements Elicitation Techniques Should Be Used? 3.3.4.14 How May Artificial Intelligence Help in the Requirements Elicitation? 3.4 Requirements Representation and Documentation 3.4.1 What Is the Role of the SRS? 3.4.2 Who Uses the Requirements Documents? 3.4.2.1 Within the SRS, Why Can’t Requirements Just Be Communicated in English? 3.4.2.2 Then, What Are the Approaches for Requirements Representations? 3.4.2.3 What Is Informal Representation? 3.4.3 What Is Semi-Formal Representation? 3.4.4 What Is UML/SysML? 3.4.5 What Is Formal Representation? 3.4.6 What Advantage Is There in Applying a Layer of Potentially Complex Mathematics to the Already Complicated Problem of Behavioral Description? 3.4.7 Which Notations to Select? 3.4.8 What Is the Correct Format for an SRS? 3.4.9 What Is the Recommended Format to Write Each Requirement? 3.5 Requirements Validation and Verification 3.5.1 What Is Requirements Risk Management? 3.5.2 What Is the Difference Between Validation and Verification? 3.5.3 What Are the Techniques to Perform Validations and Verifications On Requirements? 3.5.4 Are There Any Tools to Support the Validation and Verification? 3.5.5 What Are the Standards for Validation and Verification? 3.5.6 What Are the Qualities That Must Exist in Requirements According to IEEE 29148? 3.5.7 What Does a Traceability Matrix Look Like? 3.6 Requirements Management and Tools 3.6.1 What Is Requirements Management? 3.6.2 What Are the Challenges to Requirements Management? 3.6.3 What Are the Existing Approaches to Reach Consensus Among Different Stakeholders? 3.6.4 What Are Popular Tools to Support RE Activities? 3.7 Requirements Engineering in an Agile Environment 3.7.1 How Is RE Different in Agile? 3.7.2 How Is Requirements Engineering Performed in XP? 3.7.3 How Is Requirements Engineering Performed in Scrum? 3.7.4 How Are the User Stories Gathered? 3.7.5 How Are the User Stories Written? 3.7.6 How Are the User Stories Estimated? 3.7.7 How Are the User Stories Prioritized? Notes Further Reading 4 Software Architecture Outline 4.1 Introduction 4.2 Basic Concepts 4.2.1 What Is Software Architecture? 4.2.2 So, Software System Architecture Is a Set of Structures, and a Structure Can Be Represented Through Different Views. What Are the Types of Views? 4.2.3 Can You Illustrate the Point With an Example? 4.2.4 Why Is Software Architecture Significant? 4.2.5 Can Software Architecture Influence the Structure of the Development Team Or Even the Organization Itself? 4.2.6 What Makes One Architecture Superior to the Other? 4.2.7 What Is the Difference Between Architecture and Programming? 4.2.8 What Is the Course of Evolution of Software Architecture as a Discipline? 4.3 Architectural Drivers 4.3.1 What Are Architectural Drivers? 4.3.2 How Do We Generate the Architectural Drivers? 4.3.3 Can You Illustrate This With an Example? 4.4 Architectural Decisions 4.4.1 What Is a Tactic? 4.4.2 What Is a Pattern? 4.4.3 What Is the State of Practice On Using Architectural Patterns? 4.4.4 What Is the Relationship Between Tactics and Patterns? 4.5 Architecture Design Process 4.5.1 What Is Attribute-Driven Design? 4.5.2 Can You Give an Illustrative Example? 4.6 Architecture Documentation 4.6.1 Is There a Recommended Template to Follow to Document the Architecture? 4.6.2 What Are Some Points to Keep in Mind While Documenting Architecture? 4.6.3 Which Notations Can an Architect Use to Represent the Architecture? 4.6.4 What Are the Basic Principles of Good Architectural Documentation? 4.6.5 What Are Some of the Common Bad Practices When Documenting Software Architecture? 4.7 Architecture Evaluation 4.7.1 Why Is It Important to Evaluate the Architecture? 4.7.2 What Are the Challenges in Evaluating Architecture? 4.7.2.1 What Are the Different Ways to Evaluate the Architecture? Further Reading 5 Designing Software Outline 5.1 Introduction 5.2 Software Design Concepts 5.2.1 What Is Software Design? 5.2.2 What Is the Difference Between Software Architecture and Software Design? 5.2.3 What Are the Principal Activities of Software Design? 5.3 Basic Software Engineering Principles 5.3.1 How Do Rigor and Formality Enter Into Software Engineering? 5.3.2 What Is Separation of Concerns? 5.3.3 Can Modular Design Lead to Separation of Concerns? 5.3.4 What Is Cohesion? 5.3.5 What Is Coupling? 5.3.6 What Is Parnas Partitioning? 5.3.7 How Do I Do Parnas Partitioning? 5.3.8 Can You Give an Example of Parnas Partitioning? 5.3.9 Can You Do Parnas Partitioning in Object-Oriented Design? 5.3.10 How Can Changes Be Anticipated in Software Designs? 5.3.11 How Does Generality Apply to Software Design? 5.3.12 How Does Incrementality Manifest in Software Design? 5.4 Software Design Modeling 5.4.1 What Standard Methodologies Can Be Used for Software Design? 5.4.2 What Is Procedural-Oriented Design? 5.4.3 What Is SD? 5.4.4 What Is the Difference Between SA and SD? 5.4.5 How Do I Go From SA to SD? 5.4.6 What Is OOD? 5.4.7 What Are the Benefits of Object Orientation? 5.4.8 What Are the Basic Rules of OOD? 5.4.9 What Is the UML? 5.4.10 How Does the UML Help Us With Software Design? 5.4.11 Can You Give an Example of an OOD? 5.5 Pattern-Based Design 5.5.1 What Is a Pattern? 5.5.2 What Is the History of Patterns? 5.5.3 Why Do We Need Patterns? 5.5.4 What Are the Benefits of Patterns? 5.5.5 What Do Patterns Look Like? 5.5.6 What Are the “GRASP” Patterns? 5.5.7 What Are the Gang of Four Patterns? 5.5.8 What Are Creational Patterns? 5.5.9 What Are Structural Patterns? 5.5.10 What Are Behavioral Patterns? 5.5.11 Are There Any Other Pattern Sets? 5.5.12 What Are the Drawbacks of Patterns? 5.6 Design Documentation 5.6.1 Is There a Standard Format for SDS? 5.6.2 How Do I Achieve Traceability From Requirements Through Design and Testing? 5.6.3 Can You Give an Example of a Design Document? Further Reading 6 Software Construction Outline 6.1 Introduction 6.2 Programming Languages 6.2.1 Is the Study of Programming Languages Really of Interest to the Software Engineer? 6.2.2 What Happens When Software Behaves Correctly But Is Poorly Written? 6.2.3 But I Have Been Writing Code Since My First Programming Course in College. Surely I Don’t Need Any Lessons in Programming Languages, Do I? 6.2.4 What About Working With Legacy Code? 6.2.5 So How Many Programming Languages Are There? 6.2.6 Programming Language Landscape 6.2.6.1 What Does the Programming Landscape Look Like? 6.2.6.2 What Are the Programming Paradigms? 6.2.6.3 What Is Data Abstraction? 6.2.6.4 What Is Inheritance? 6.2.6.5 What Is Polymorphism? 6.2.6.6 What Are Programming Languages Type Systems? 6.2.6.7 What Is a Statically Typed Language? 6.2.6.8 What Is a Dynamically Typed Language? 6.2.6.9 What Is the Difference Between Compiled and Interpreted Languages? 6.2.6.10 How Do I Classify Programming Languages According to This Scheme (Programming Paradigm, Type System, and Whether They Are Compiled Or Interpreted)? 6.2.7 Programming Features and Evaluation 6.2.7.1 Which Programming Language Is Better? 6.2.7.2 So, What Is the Best Way to Evaluate a Programming Language? 6.2.7.3 What Do You Mean By Visible Features of Programming Languages? 6.2.7.4 Why Should I Care About Parameter-Passing Techniques? 6.2.7.5 What Is Call-By-Reference? 6.2.7.6 What Is Call-By-Value? 6.2.7.7 What About Global Variables? 6.2.7.8 How Do I Choose Which Parameter-Passing Technique to Use? 6.2.7.9 What Is Recursion? 6.2.7.10 Are There Any Drawbacks to Recursive Algorithm Formulations? 6.2.7.11 What Does “Dynamic Memory Allocation” Mean? 6.2.7.12 What Are Some Examples of Dynamic Allocation Use? 6.2.7.13 What Is Meant By “Strong Typing” in a Programming Language? 6.2.7.14 What Is Exception Handling? 6.2.7.15 Which Languages Have the Best Exception Handling Facilities? 6.2.7.16 What Is Meant By Modularity? 6.2.7.17 Do Object-Oriented Languages Support a Form of Modularity? 6.2.7.18 What Is the Benefit of Object Orientation From a Programming Perspective? 6.2.8 Brief Survey of Languages 6.2.8.1 Can You Apply the Micro Properties Just Discussed to Some of the More Commonly Used Programming Languages? 6.2.8.2 When Can C Be Used? 6.2.8.3 What Other Useful Features Does C Have? 6.2.8.4 How Does C Handle Exceptions? 6.2.8.5 What Is the Relationship Between C and C++? 6.2.8.6 When Should C++ Be Used? 6.2.8.7 What Is the Danger in Converting My C Code to C++? 6.2.8.8 Can You Tell Me About C#? 6.2.8.9 Can You Tell Me About Fortran? 6.2.8.10 Can You Tell Me About Java? 6.2.8.11 If Java Is Interpreted, Does That Mean It Cannot Be Compiled? 6.2.8.12 What Are Some of the Main Features of Java? 6.2.8.13 Are There Any Well-Known Problems With Using Java? 6.2.8.14 What Are the Differences Between Java and C++? 6.2.8.15 What Are the Differences Between Java and C#? 6.2.8.16 Can You Tell Me About Rust Programming Language? 6.2.8.17 What About Legacy Code Written in Arcane Languages Such as BASIC, COBOL, and Scheme? 6.2.8.18 What About Visual Basic? 6.2.8.19 What About Scripting Languages Like JavaScript, Perl, and Python? 6.3 Web-Oriented Programming 6.3.1 What Is Web-Oriented Programming? 6.3.2 What Is the Role of the HTTP Protocol in the WOP? 6.3.3 What Is SOAP? 6.3.4 Can You Say Something About RESTful Services? 6.4 Software Construction Tools 6.4.1 What Is the Value Proposition for Using Software Construction Tools? 6.4.2 What Is a Compiler? 6.4.3 Can You Describe Further the Compilation Process? 6.4.4 How Do I Deal With Compiler Warnings and Errors? 6.4.5 Do You Have Any Debugging Tips? 6.4.6 Is There Any Way to Automatically Debug Code? 6.4.7 What Are Symbolic Debuggers and How Are They Used? 6.4.8 Can You Give Me an Example of a Debugging Session? 6.4.9 What Is a Version Control System? 6.4.10 What Are the Benefits of Using VCS? 6.4.11 What Is a Centralized VCS? 6.4.12 What Is a Distributed VCS? 6.4.13 Are There Open-Source, Free VCSs? 6.4.14 What Is Log Management Software? 6.4.15 Can You Give Examples of Log Management Tools? 6.4.16 What Is a Build Tool? 6.4.17 What Are the Requirements to Look at When Selecting a Build Tool? 6.4.18 Are There Other Tools That I Can Use, Particularly When Debugging Embedded Systems? 6.4.19 What Are In-Circuit Emulators? 6.4.20 How Are ICEs Used? 6.4.21 What Are Software Simulators and When Are They Used? 6.4.22 When Is Hardware Prototyping Useful? 6.4.23 What Are Integrated Development Environments? 6.4.24 What About Other Tools? 6.5 Open Source 6.5.1 What Is Open-Source Software? 6.5.2 What Is an Open-Source Software License? 6.5.3 Where Did OSS Come From? 6.5.4 What Kinds of Code Can Be Found as Open Source? 6.5.5 What Is the Value Proposition for OSS? 6.5.6 Who Contributes to OSS Systems? 6.5.7 Where Can I Find OSS Projects? 6.5.8 Can Companies Use OSS? 6.5.9 What Are the Characteristics of the OSS Development Model? 6.5.10 How Does Software Requirements Engineering Occur in OSS? 6.5.11 How Do the Software Design and Build Processes Take Place in Open-Source Systems? 6.5.12 How Are OSS Projects Managed? 6.5.13 Are There Downsides to Using OSS? 6.6 Becoming a Better Code Developer 6.6.1 How Can I Become a Better Developer of Code? 6.6.2 Code Smells 6.6.2.1 What Is a Code Smell? 6.6.2.2 What Are Some Code Smells? 6.6.2.3 What Is the Conditional Logic Code Smell? 6.6.2.4 What Are Data Clumps? 6.6.2.5 Why Are Delays as Loops Bad? 6.6.2.6 What Are Dubious Constraints? 6.6.2.7 What Is the Duplicated Code Smell? 6.6.2.8 What Are Generalizations Based On a Single Architecture? 6.6.2.9 What Are the Large Method, Large Class, and Large Procedure Code Smells? 6.6.2.10 What Are Lazy Methods and Lazy Procedures? 6.6.2.11 What Is the Long Parameter List Code Smell and How Can It Be Refactored? 6.6.2.12 What Are Message Chains? 6.6.2.13 What Is Message-Passing Overload? 6.6.2.14 What Is the One Big Loop Code Smell and How Is It Refactored? 6.6.2.15 What Is Shotgun Surgery? 6.6.2.16 What Is Speculative Generality? 6.6.2.17 What Are Tell-Tale Comments? 6.6.2.18 What Are Temporary Fields and How Are They Refactored? 6.6.2.19 What Is the Unnecessary Use of Interrupts Code Smell? 6.6.2.20 How Can I Improve the Runtime Performance of the Code I Write? 6.6.3 Refactoring 6.6.3.1 What Is Refactoring? 6.6.3.2 What Does the Process of Refactoring Involve? 6.6.3.3 What Is Low-Level Refactoring? 6.6.3.4 What Is Medium-Level Refactoring? 6.6.3.5 What Is High-Level Refactoring? 6.6.3.6 Is Refactoring Limited to the Code and Low-Level Design? 6.6.4 Coding Standards 6.6.4.1 What Are Coding Standards? 6.6.4.2 How Can Coding Standards Help Improve My Code? 6.6.4.3 What Do Coding Standards Look Like? 6.6.4.4 What Is the Benefit of Coding Standards? 6.6.4.5 Which Coding Standard Should I Use? 6.6.4.6 Are There Any Drawbacks to Using Coding Standards? 6.6.4.7 When Should the Coding Standard Be Adopted? Note Further Reading 7 Software Quality Assurance Outline 7.1 Introduction 7.2 Quality Models and Standards 7.2.1 What Is Software Quality? 7.2.2 What Is a Quality Model? 7.2.3 What Is the Capability Maturity Model? 7.2.4 What Is ISO 9000? 7.2.5 What Are the ISO 90003 Principal Areas of Quality Focus? 7.2.6 What Does ISO 90003 Look Like? 7.2.7 How Does ISO/IEC 12207 Help Promote Software Quality? 7.2.8 What Is Six Sigma? 7.2.9 What Is the IT Infrastructure Library? 7.2.10 Can ITIL Help With Software Quality Programs? 7.2.11 How Does ITIL Help With Software Quality Management? 7.2.12 Can Anything Bad Come of a Software Quality Initiative? 7.2.13 What Are the Symptoms of Slash-And-Burn Approaches? 7.2.14 What Is the Best Way to Promote Software Quality Improvement Without Triggering a Slash-And-Burn Frenzy? 7.3 Software Testing 7.3.1 What Is the Role of Testing With Respect to Software Quality? 7.3.2 Is There a Difference Between an Error, a Defect, a Bug, a Fault, and a Failure? 7.3.3 Is There a Difference Between Verification and Validation? 7.3.4 What Is the Purpose of Testing? 7.3.5 What Is a Good Test? 7.3.6 What Are the Basic Principles of Software Testing? 7.3.7 How Do I Start Testing Activities During the Requirements Engineering Process? 7.3.8 What Test Activities Occur During Software Design and Code Development? 7.3.9 What Different Types of Testing Can Be Performed? 7.3.10 What Are the Different Testing Accessibilities? 7.3.11 What Is Black Box Testing? 7.3.11.1 What Is Exhaustive Testing? 7.3.11.2 What Is Boundary Value Testing? 7.3.11.3 What Is Equivalence Class Testing? 7.3.11.4 What Is Worst-Case Testing? 7.3.11.5 What Is Random Test Case Generation? 7.3.11.6 What Is Pairwise Testing? 7.3.11.7 What Is Combinatorial Testing? 7.3.11.8 What Is Truth Table Testing? 7.3.12 Are There Any Disadvantages to Black Box Testing? 7.3.13 What Is White Box Testing? 7.3.13.1 What Is Control Flow Testing? 7.3.13.2 What Is DU Path Testing? 7.3.13.3 What Are Code Inspections? 7.3.13.4 What Is Formal Program Proving? 7.3.14 What Are the Different Testing Levels? 7.3.15 What Is Unit-Level Testing? 7.3.16 What Is System Integration Testing? 7.3.17 What Is Incremental Integration Testing? 7.3.18 What Is the Difference Between Top-Down and Bottom-Up Testing? 7.3.19 What Is Sandwich Integration Testing? 7.3.20 What Is Cleanroom Testing? 7.3.21 What Is Interface Testing? 7.3.22 What Kinds of Interfaces Can Be Tested? 7.3.23 What Kinds of Errors Can Occur at the Interfaces? 7.3.24 What Are Some Guidelines for Testing Interfaces? 7.3.25 What Are System and Acceptance Testing? 7.3.26 What Are the Different Characteristics to Test For? 7.3.27 What Is Object-Oriented Testing? 7.3.28 How Are Object Classes Tested? 7.3.29 How Can Clusters of Cooperating Objects Be Tested? 7.3.30 What Is Scenario Testing? 7.3.31 What Is Software Fault Injection? 7.3.32 When Should You Stop Testing? 7.3.33 What Are Test Coverage Metrics? 7.3.34 How Do I Write a Test Plan? 7.3.35 Are There Automated Tools for Testing That Can Make the Job Easier? 7.3.36 What Are Some Testing Tools That I Can Use? 7.3.37 What Is the Current State of Practice in Software Testing in the Industry? 7.4 Metrics 7.4.1 What Are Some Motivations for Measurement? 7.4.2 What Kinds of Metrics Exist for Tracking System Tests? 7.4.3 What Are the Metrics for Monitoring Test Execution? 7.4.4 What Are the Metrics for Monitoring Defects? 7.4.5 What Is the Spoilage Metric? 7.4.6 In Addition to Test Execution Metrics, What Other Kinds of Things Can We Measure in Software? 7.4.7 Is the “Lines of Code” Metric Useful? 7.4.8 What Are the Disadvantages of the LOC Metric? 7.4.9 What Are the Delta Lines of Code Metric? 7.4.10 What Is McCabe’s Metric? 7.4.11 How Does McCabe’s Metric Measure Software Complexity? 7.4.12 Can You Help Me Visualize the Cyclomatic Complexity? 7.4.13 Can the Computation of McCabe’s Metric Be Automated? 7.4.14 What Are Halstead’s Metrics? 7.4.15 Are Halstead’s Metrics Still Used? 7.4.16 What Are Function Points? 7.4.17 What Are the Primary Drivers for FPs? 7.4.18 How Do I Interpret the FP Value? 7.4.19 How Widely Is the FP Metric Used? 7.4.20 What Are Feature Points? 7.4.21 Are There Special Metrics for Object-Oriented Software? 7.4.22 What Are Some Method-Level Metrics? 7.4.23 What Are Commonly Used Class-Level Metrics? 7.4.24 What Are Some Package-Level Metrics? 7.4.25 Are There Other Kinds of Object-Oriented Metrics? 7.4.26 What Are Object Points? 7.4.27 What Are Use Case Points? 7.4.28 This Is All So Confusing. Which Metrics Should I Use? 7.4.28.1 What Is the GQM Technique? 7.4.28.2 Can You Give a Simple Example? 7.4.29 What Are Some Objections to Using Metrics? 7.5 Fault Tolerance 7.5.1 What Are Checkpoints? 7.5.2 What Are Recovery Blocks? 7.5.3 What Are Software Black Boxes? 7.5.4 What Is N-Version Programming? 7.5.5 What Is Built-In-Test Software? 7.5.6 How Should Built-In-Test Software Include CPU Testing? 7.5.7 Should Built-In-Test Software Test Memory? 7.5.8 What About Testing Other Devices? 7.6 Maintenance and Reusability 7.6.1 What Is Meant By Software Maintenance? 7.6.2 What Is Reverse Engineering? 7.6.3 What Is an Appropriate Model for Software Reengineering? 7.6.4 Since You Like Models So Much, Can You Give Me a Maintenance Process Model? 7.6.5 What Is System Release Planning? 7.6.6 What Is Software Reuse? 7.6.7 Are There Special Techniques for Achieving Reuse in Procedural Languages? 7.6.8 Are There Special Techniques for Achieving Reuse in Object-Oriented Languages? 7.6.9 When Is It Appropriate Not to Reuse Software? 7.6.10 What Is Pareto’s Principle and How Does It Apply to Software Engineering? 7.6.11 What Is the “Second System Effect”? Note Further Reading 8 Managing Software Projects and Software Engineers Outline 8.1 Introduction 8.2 Software Engineers Are People Too 8.2.1 What Personnel Management Skills Does the Software Project Manager Need? 8.2.2 But What’s the Big Deal With “People Issues”? 8.2.3 How Does Team Chemistry Affect Software Projects? 8.2.4 Why Is Team Chemistry So Hard to Manage? 8.2.5 Management Styles 8.2.5.1 What Are Some Styles for Leading Teams? 8.2.5.2 What Is Theory X? 8.2.5.3 What Is Theory Y? 8.2.5.4 What Is Theory Z? 8.2.5.5 What Is Theory W? 8.2.5.6 What Does It Mean to Establish a Set of Win–Win Preconditions? 8.2.5.7 What Does It Mean to Structure a Win–Win Software Process? 8.2.5.8 What Does Structuring a Win–Win Software Product Mean? 8.2.5.9 What Is Principle-Centered Leadership? 8.2.5.10 What Is Management By Sight? 8.2.5.11 What Is Management By Objectives? 8.2.5.12 What Is Pascal’s Wager Theory to Manage Expectations? 8.2.5.13 What Does Pascal’s Wager Have to Do With Expectation Setting in Project Development? 8.2.5.14 Any Other Comments On Pascal’s Wager, Expectation, and Risk Management? 8.2.6 Dealing With Problems 8.2.6.1 How Do I Deal With Difficult People? 8.2.6.2 Is That It? Can’t You Give Me a Playbook for Handling Difficult Situations? 8.2.6.3 How Do I Manage Divergent Agendas in a Software Project? 8.2.6.4 What Are the Approaches for Consensus Building Among Stakeholders? 8.2.6.5 What Is Analytical Hierarchy Process? 8.2.6.6 What Is Wideband Delphi Technique? 8.2.7 Hiring Software Engineering Personnel 8.2.7.1 We Need to Hire More Software People. How Should I Approach This Task? 8.2.7.2 I Want to Select the Right People, But How Is It Done in the Software Industry? 8.2.7.3 Do These Tests Really Measure the Potential Success of the Software Engineer? 8.2.7.4 You Don’t Seem to Like These Tests. How Do I Assess the Potential of a Candidate Besides Checking References? 8.2.7.5 How Do You Measure the Candidate’s Compatibility With Existing Team Members? 8.2.7.6 Are There Studies On the Most In-Demand Skills for Various Software Engineering Positions? 8.2.7.7 How Should I Reference-Check a Potential Hire? 8.2.7.8 Should I Check Social Network Posts of the Candidate? 8.2.8 Agile Development Teams 8.2.8.1 How Do I Manage Agile Development Teams? 8.2.8.2 OK, So What Does the Agile Manifesto Have to Do With Managing Agile Teams? 8.2.8.3 Does This Approach Always Work? 8.2.8.4 Do You Have Some More Specific Advice for Managing Agile Teams? 8.3 Project Management Basics 8.3.1 What Is a Project? 8.3.2 What Makes a Software Project Different From Any Other Kind of Project? 8.3.3 Is Software Project Management Similar to Systems Project Management? 8.3.4 What Does the Software Project Manager Control? 8.3.5 What Do You Mean By Resources? 8.3.6 What About the Schedule? 8.3.7 What About Product Functionality? 8.3.8 How Does the Project Manager Put All of These Control Factors Together? 8.4 Antipatterns in Organization Management 8.4.1 What Do You Mean By Antipatterns in Organizations? 8.4.2 What Do You Mean By Management Antipatterns? 8.4.3 Can You Give Some Examples of the Management Antipatterns? 8.4.4 What Do You Mean By Metric Abuse? 8.4.5 What Do You Mean By Mushroom Management? 8.4.6 What Do You Mean By Environmental Antipatterns? 8.4.7 Can You Give Some Examples of Environmental Antipatterns? 8.4.8 What Do You Mean By Divergent Goals? 8.4.9 What Is Meant By Process Clash? 8.5 Tracking and Reporting Progress 8.5.1 What Is a Work Breakdown Structure and Why Is It Important in Project Tracking? 8.5.2 What Is the Level of Detail of the Tasks in the WBS? 8.5.3 What Is the Role of the WBS in Project Planning? 8.5.4 Are There Any Drawbacks to the Traditional WBS? 8.5.5 Are There Any Alternatives to Using the WBS? 8.5.6 How Are Work and Progress Tracked in Software Projects? 8.5.7 What Is a Gantt Chart? 8.5.8 What Does the Gantt Chart Look Like? 8.5.9 Can the Gantt Chart Be Used for Large Projects? 8.5.10 How Can the Gantt Chart Be Used for Ongoing Project Management? 8.5.11 What Is the CPM? 8.5.12 What Are the Steps in CPM Planning? 8.5.13 Can You Illustrate the Technique Using the Baggage Inspection System? 8.5.14 Are There Downsides to Using CPM? 8.5.15 What Is PERT? 8.5.16 How Do You Build the PERT Diagram? 8.5.17 Can You Show Me an Example? 8.5.18 Are There Any Downsides to Using PERT? 8.5.19 Are Commercial Products Available for Building These Charts? 8.5.20 Can You Recommend the Best Tool to Use? 8.5.21 Is Becoming an Expert in Using the Project Planning Tools the Key to Being a Good Software Project Manager? 8.6 Software Cost Estimation 8.6.1 Are There Well-Known and Respected Tools for Doing Software Project Cost Estimation? 8.6.2 What Is Basic COCOMO? 8.6.3 Can You Give Me an Example Using COCOMO? 8.6.4 Where Do the Source Code Estimates Come From? 8.6.5 Should I Use More Than One Estimate? 8.6.6 What About the Intermediate and Detailed COCOMO Models? 8.6.7 What Is the Adaptation Adjustment Factor? 8.6.8 What Is the Effort Adjustment Factor? 8.6.9 What Do These Adjustment Factors Look Like? 8.6.10 How Widely Used Is COCOMO? 8.6.11 What Are the Downsides to Using COCOMO? 8.6.12 What Is COCOMO II? 8.6.13 What Is WEBMO? 8.7 Project Cost Justification 8.7.1 Is Software an Investment Or an Expense? 8.7.2 What Is Software Return On Investment and How Is It Defined? 8.7.3 What Is an Example of a Project ROI Justification? 8.7.4 Yes, But How Do You Measure ROI? 8.7.5 OK, So How Can You Represent the Net Benefit and Initial Cost? 8.7.6 What Is NPV and How Can I Use It? 8.7.7 Can You Give an Example of an NPV Calculation for a Software Situation? 8.7.8 What Is the Answer to the Question of Acquiring the Testing Tool? 8.7.9 What Is an IRR? 8.7.10 Can You Give an Example of an ROI Calculation? 8.7.11 What Is a PI? 8.7.12 How Can PI Sub-Optimize the Decision? 8.7.13 Should I Use PI at All? 8.7.14 What Is Payback? 8.7.15 How Can Payback Be Applied in a Software Project Setting? 8.7.16 This Seems Simplistic. Is Payback Really Used? 8.7.17 What Is Discounted Payback? 8.7.18 Can You Give an Example? 8.8 Risk Management 8.8.1 What Are Software Risks? 8.8.2 How Do Risks Manifest in Software? 8.8.3 How Does the Project Manager Identify, Mitigate, and Manage Risks? 8.8.4 What Are Some Other Ways That the Software Project Manager Can Mitigate Risk? 8.8.5 Is There a Predictive Model for the Likelihood of Any of These Risks? 8.8.6 Do You Have Any Other Advice About Managing Risk in Software Projects? 8.8.7 How Does Prototyping Mitigate Risk? 8.8.8 Are There Risks to Software Prototyping? 8.8.9 Are There Other Ways to Discover Risks So That They Can Be Mitigated? Notes Further Reading 9 Software Engineering Roadmap to the Future Outline 9.1 Introduction 9.2 Global Software Engineering 9.2.1 What Are Some of the Problems When Dealing With Global Software Engineering? 9.2.2 What Is the Difference Between Internationalization and Distribution? 9.2.3 What Are the Issues to Consider When Dealing With Internationalization? 9.2.4 What Are the Issues to Consider When Dealing With a Distributed Team? 9.2.5 How Can Tools Play a Role in Globally Distributed Software Engineering Processes? 9.3 Software Engineering Practices in Small Businesses 9.3.1 What Is a Small Business? 9.3.2 What Characterizes Software Engineering Practices in Small Businesses? 9.4 Software Engineering and Disruptive Technologies 9.4.1 Software Engineering and the Internet of Things 9.4.1.1 What Is the Internet of Things? 9.4.1.2 What Are the Five IoT Primitives? 9.4.1.3 What Are the Open Issues to Consider for Software Engineering When Building IoT Systems? 9.4.2 Software Engineering and Blockchain 9.4.2.1 What Is Blockchain? 9.4.2.2 What Are the Capabilities of Blockchain Technology? 9.4.2.3 What Are the Competencies Required to Become a Blockchain Engineer? 9.4.2.4 What Are the Open Issues to Consider for Software Engineering When Building Blockchain Applications? 9.4.3 Software Engineering and Artificial Intelligence 9.4.3.1 What Is AI? 9.4.3.2 Can You Give Some Examples of Areas of Research for Software Engineering for AI Systems? 9.4.3.3 What Are the Open Issues to Consider for Software Engineering When Building AI-Based Systems? 9.4.4 Software Engineering and Cloud Computing 9.4.4.1 What Is Cloud Computing? 9.4.4.2 What Are the Open Issues to Consider for Software Engineering When Building Cloud Computing Systems? 9.4.5 Software Engineering and Affective Computing 9.4.5.1 What Is Affective Computing? 9.4.5.2 What Are the Open Issues to Consider for Software Engineering When Building Affective Computing Systems? Note Further Reading Appendix A Software Requirements for a Wastewater Pumping Station Wet Well Control System (Rev. 02.01.00) A.1 Introduction A.1.1 Purpose A.1.2 Scope A.1.3 Definitions, Acronyms, and Abbreviations A.2 Overall Description A.2.1 Wet Well Overview A.2.2 Product Perspective A.2.3 Product Functions A.2.4 User Characteristics A.2.5 Constraints A.2.6 Assumptions and Dependencies A.3 Specific Requirements A.3.1 External Interface Requirements A.3.2 Classes/Objects Reference Appendix B Software Design for a Wastewater Pumping Station Wet Well Control System (Rev. 02.01.00) B.1 Introduction B.1.1 Purpose B.1.2 Scope B.1.3 Definitions, Acronyms, and Abbreviations B.2 Overall Description B.2.1 Wet Well Overview B.2.2 Wet Well Software Architecture B.3 Design Decomposition B.3.1 Class Model B.3.2 Class Details B.3.3 Sequence Diagram References Appendix C Object Models for a Wastewater Pumping Station Wet Well Control System Appendix D Unified Modeling Language D.1 Introduction D.2 Diagram Types D.2.1 Class Diagram D.2.2 Use Case Diagram D.2.3 Sequence Diagram D.2.4 State Machine Diagram D.2.5 Activity Diagram D.3 Other Diagram Types D.3.1 Internal Structure Diagram D.3.2 Collaboration Diagram D.3.3 Communication Diagram D.3.4 Deployment Diagram D.3.5 Package Diagram D.4 Profiles D.5 Usage D.5.1 Programming Design D.5.2 Programming Detail D.5.3 Database Design D.5.4 Business Process Design D.5.5 Embedded Control D.5.6 Application Requirements D.6 UML History D.7 Assessment Further Reading References Index