Details

Beginning Software Engineering


Beginning Software Engineering


2. Aufl.

von: Rod Stephens

35,99 €

Verlag: Wiley
Format: EPUB
Veröffentl.: 14.10.2022
ISBN/EAN: 9781119901716
Sprache: englisch
Anzahl Seiten: 720

DRM-geschütztes eBook, Sie benötigen z.B. Adobe Digital Editions und eine Adobe ID zum Lesen.

Beschreibungen

<p><b>Discover the foundations of software engineering with this easy and intuitive guide</b> <p>In the newly updated second edition of <i>Beginning Software Engineering</i>, expert programmer and tech educator Rod Stephens delivers an instructive and intuitive introduction to the fundamentals of software engineering. In the book, you’ll learn to create well-constructed software applications that meet the needs of users while developing the practical, hands-on skills needed to build robust, efficient, and reliable software. <p>The author skips the unnecessary jargon and sticks to simple and straightforward English to help you understand the concepts and ideas discussed within. He also offers you real-world tested methods you can apply to any programming language. <p>You’ll also get: <ul> <li>Practical tips for preparing for programming job interviews, which often include questions about software engineering practices</li> <li>A no-nonsense guide to requirements gathering, system modeling, design, implementation, testing, and debugging</li> <li>Brand-new coverage of user interface design, algorithms, and programming language choices</li></ul><p><i>Beginning Software Engineering</i> doesn’t assume any experience with programming, development, or management. It’s plentiful figures and graphics help to explain the foundational concepts and every chapter offers several case examples, <i>Try It Out</i>, and <i>How It Works</i> explanatory sections. <p>For anyone interested in a new career in software development, or simply curious about the software engineering process, <i>Beginning Software Engineering, Second Edition</i> is the handbook you’ve been waiting for.
<p>Introduction xxvii</p> <p><b>Part I: Software Engineering Step- By- Step</b></p> <p><b>Chapter 1: Software Engineering From 20,000 Feet 3</b></p> <p>Requirements Gathering 4</p> <p>High- Level Design 5</p> <p>Low- Level Design 6</p> <p>Development 6</p> <p>Testing 7</p> <p>Deployment 9</p> <p>Maintenance 10</p> <p>Wrap- Up 10</p> <p>Everything All at Once 11</p> <p>Summary 12</p> <p>What You Learned in This Chapter 13</p> <p><b>Chapter 2: Before the Beginning 15</b></p> <p>Document Management 16</p> <p>Historical Documents 19</p> <p>Email 19</p> <p>Code 22</p> <p>Code Documentation 22</p> <p>Application Documentation 25</p> <p>Summary 26</p> <p>What You Learned in This Chapter 27</p> <p><b>Chapter 3: the Team 29</b></p> <p>Team Features 30</p> <p>Clear Roles 30</p> <p>Effective Leadership 30</p> <p>Clear Goals 31</p> <p>Consensus 32</p> <p>Open Communication 32</p> <p>Support for Risk- Taking 33</p> <p>Shared Accountability 33</p> <p>Informal Atmosphere 34</p> <p>Trust 34</p> <p>Team Roles 34</p> <p>Common Roles 35</p> <p>More- Specialized Roles 36</p> <p>Informal Roles 36</p> <p>Roles Wrap- Up 37</p> <p>Team Culture 37</p> <p>Interviews 40</p> <p>Interview Puzzles 40</p> <p>The Bottom Line 41</p> <p>Physical Environment 41</p> <p>Creativity 41</p> <p>Office Space 43</p> <p>Ergonomics 43</p> <p>Work- Life Balance 45</p> <p>Collaboration Software 46</p> <p>Searching 46</p> <p>Overload 47</p> <p>Outsourcing 47</p> <p>Summary 48</p> <p>What You Learned in This Chapter 50</p> <p><b>Chapter 4: Project Management 53</b></p> <p>Executive Support 54</p> <p>Project Management 56</p> <p>PERT Charts 57</p> <p>Critical Path Methods 62</p> <p>Gantt Charts 65</p> <p>Scheduling Software 67</p> <p>Predicting Times 68</p> <p>Get Experience 69</p> <p>Break Unknown Tasks into Simpler Pieces 70</p> <p>Look for Similarities 71</p> <p>Expect the Unexpected 71</p> <p>Track Progress 73</p> <p>Risk Management 74</p> <p>Summary 76</p> <p>What You Learned in This Chapter 79</p> <p><b>Chapter 5: Requirements Gathering 81</b></p> <p>Requirements Defined 82</p> <p>Clear 82</p> <p>Unambiguous 83</p> <p>Consistent 84</p> <p>Prioritized 84</p> <p>Verifiable 88</p> <p>Words to Avoid 89</p> <p>Requirement Categories 89</p> <p>Audience- Oriented Requirements 90</p> <p>Business Requirements 90</p> <p>User Requirements 90</p> <p>Functional Requirements 91</p> <p>Nonfunctional Requirements 92</p> <p>Implementation Requirements 92</p> <p>FURPS 92</p> <p>FURPS+ 93</p> <p>Common Requirements 96</p> <p>Gathering Requirements 96</p> <p>Listen to Customers (and Users) 97</p> <p>Use the Five Ws (and One H) 98</p> <p>Who 98</p> <p>What 98</p> <p>When 98</p> <p>Where 98</p> <p>Why 99</p> <p>How 99</p> <p>Study Users 99</p> <p>Refining Requirements 100</p> <p>Copy Existing Systems 101</p> <p>Clairvoyance 102</p> <p>Brainstorm 103</p> <p>Recording Requirements 106</p> <p>UML 107</p> <p>User Stories 107</p> <p>Use Cases 108</p> <p>Prototypes 108</p> <p>Requirements Specification 109</p> <p>Validation and Verification 110</p> <p>Changing Requirements 110</p> <p>Digital Transformation 111</p> <p>What to Digitize 111</p> <p>How to Digitize 112</p> <p>Summary 113</p> <p>What You Learned in This Chapter 116</p> <p><b>Chapter 6: High- Level Design 117</b></p> <p>The Big Picture 118</p> <p>What to Specify 119</p> <p>Security 119</p> <p>Hardware 120</p> <p>User Interface 121</p> <p>Internal Interfaces 122</p> <p>External Interfaces 123</p> <p>Architecture 124</p> <p>Monolithic 124</p> <p>Client/Server 125</p> <p>Component- Based 127</p> <p>Service- Oriented 128</p> <p>Data- Centric 130</p> <p>Event- Driven 130</p> <p>Rule- Based 130</p> <p>Distributed 131</p> <p>MIX and Match 132</p> <p>Reports 133</p> <p>Other Outputs 134</p> <p>Database 135</p> <p>Audit Trails 136</p> <p>User Access 136</p> <p>Database Maintenance 137</p> <p>NoSQL 137</p> <p>Cloud Databases 138</p> <p>Configuration Data 138</p> <p>Data Flows and States 139</p> <p>Training 139</p> <p>UML 141</p> <p>Structure Diagrams 142</p> <p>Behavior Diagrams 145</p> <p>Activity Diagrams 145</p> <p>Use Case Diagram 146</p> <p>State Machine Diagram 147</p> <p>Interaction Diagrams 148</p> <p>Sequence Diagram 148</p> <p>Communication Diagram 150</p> <p>Timing Diagram 150</p> <p>Interaction Overview Diagram 151</p> <p>UML Summary 151</p> <p>Summary 151</p> <p>What You Learned in This Chapter 152</p> <p><b>Chapter 7: Low- Level Design 155</b></p> <p>Design Approaches 156</p> <p>Design- to- Schedule 157</p> <p>Design- to- Tools 158</p> <p>Process- Oriented Design 158</p> <p>Data- Oriented Design 159</p> <p>Object- Oriented Design 159</p> <p>Hybrid Approaches 159</p> <p>High, Low, and Iterative Design 160</p> <p>OO Design 160</p> <p>Identifying Classes 161</p> <p>Building Inheritance Hierarchies 162</p> <p>Refinement 163</p> <p>Generalization 165</p> <p>Hierarchy Warning Signs 167</p> <p>Object Composition 167</p> <p>Database Design 168</p> <p>Relational Databases 168</p> <p>First Normal Form 170</p> <p>Second Normal Form 174</p> <p>Third Normal Form 176</p> <p>Higher Levels of Normalization 179</p> <p>When to Optimize 180</p> <p>Summary 180</p> <p>What You Learned in This Chapter 182</p> <p><b>Chapter 8: Security Design 185</b></p> <p>Security Goals 186</p> <p>Security Types 186</p> <p>Cybersecurity 188</p> <p>Shift- Left Security 189</p> <p>Malware Menagerie 189</p> <p>Phishing and Spoofing 193</p> <p>Social Engineering Attacks 195</p> <p>Crapware 197</p> <p>Password Attacks 198</p> <p>User Access 201</p> <p>Countermeasures 201</p> <p>Cyber Insurance 202</p> <p>Summary 203</p> <p>What You Learned in This Chapter 207</p> <p><b>Chapter 9: User Experience Design 209</b></p> <p>Design Mindset 210</p> <p>UI vs. UX 210</p> <p>UX Designers 211</p> <p>Platform 212</p> <p>User Skill Level 214</p> <p>Beginners and Beyond 216</p> <p>Configuration 217</p> <p>Hidden Configuration 218</p> <p>Models 219</p> <p>Metaphors and Idioms 220</p> <p>Case Study: Microsoft Word 221</p> <p>Design Guidelines 225</p> <p>Allow Exploration 225</p> <p>Make the Interface Immutable 227</p> <p>Support Commensurate Difficulty 227</p> <p>Avoid State 228</p> <p>Make Similar Things Similar 228</p> <p>Provide Redundant Commands 230</p> <p>Do the Right Thing 231</p> <p>Show Qualitative Data, Explain Quantitative Data 232</p> <p>Give Forms Purpose 232</p> <p>Gather All Information at Once 233</p> <p>Provide Reasonable Performance 234</p> <p>Only Allow What’s Right 235</p> <p>Flag Mistakes 235</p> <p>Form Design 236</p> <p>Use Standard Controls 236</p> <p>Decorating 237</p> <p>Displaying 237</p> <p>Arranging 237</p> <p>Commanding 238</p> <p>Selecting 238</p> <p>Entering 239</p> <p>Display Five Things 240</p> <p>Arrange Controls Nicely 241</p> <p>Summary 241</p> <p>What You Learned in This Chapter 242</p> <p><b>Chapter 10: Programming 245</b></p> <p>Tools 246</p> <p>Hardware 246</p> <p>Network 247</p> <p>Development Environment 248</p> <p>Source Code Control 249</p> <p>Profilers 249</p> <p>Static Analysis Tools 249</p> <p>Testing Tools 249</p> <p>Source Code Formatters 250</p> <p>Refactoring Tools 250</p> <p>Training 250</p> <p>Collaboration Tools 250</p> <p>Algorithms 251</p> <p>Top- Down Design 252</p> <p>Programming Tips and Tricks 255</p> <p>Be Alert 255</p> <p>Write for People, Not the Computer 255</p> <p>Comment First 256</p> <p>Write Self- Documenting Code 259</p> <p>Keep It Small 259</p> <p>Stay Focused 261</p> <p>Avoid Side Effects 261</p> <p>Validate Results 262</p> <p>Practice Offensive Programming 264</p> <p>Use Exceptions 266</p> <p>Write Exception Handlers First 266</p> <p>Don’t Repeat Code 267</p> <p>Defer Optimization 267</p> <p>Summary 269</p> <p>What You Learned in This Chapter 270</p> <p><b>Chapter 11: Algorithms 273</b></p> <p>Algorithm Study 274</p> <p>Algorithmic Approaches 275</p> <p>Decision Trees 275</p> <p>Knapsack 275</p> <p>The Eight Queens Problem 276</p> <p>Exhaustive Search 277</p> <p>Backtracking 278</p> <p>Pruning Trees 279</p> <p>Branch and Bound 279</p> <p>Heuristics 280</p> <p>Greedy 281</p> <p>Divide and Conquer 282</p> <p>Recursion 283</p> <p>Dynamic Programming 285</p> <p>Caching 287</p> <p>Randomization 287</p> <p>Monte Carlo Algorithms 287</p> <p>Las Vegas Algorithms 288</p> <p>Atlantic City Algorithms 289</p> <p>State Diagrams 289</p> <p>Design Patterns 290</p> <p>Creational Patterns 291</p> <p>Structural Patterns 291</p> <p>Behavioral Patterns 292</p> <p>Design Pattern Summary 293</p> <p>Parallel Programming 293</p> <p>Artificial Intelligence 295</p> <p>Definitions 295</p> <p>Learning Systems 296</p> <p>Natural Language Processing 297</p> <p>Artificial Neural Network 297</p> <p>Deep Learning 297</p> <p>Expert System 298</p> <p>Artificial General Intelligence 298</p> <p>Algorithm Characteristics 301</p> <p>Summary 302</p> <p>What You Learned in This Chapter 304</p> <p><b>Chapter 12: Programming Languages 307</b></p> <p>The Myth of Picking a Language 308</p> <p>Language Generations 311</p> <p>First Generation 311</p> <p>Second Generation 311</p> <p>Third Generation (3GL) 312</p> <p>Fourth Generation 313</p> <p>Fifth Generation 314</p> <p>Sixth Generation 314</p> <p>IDEs 315</p> <p>Language Families 316</p> <p>Assembly 316</p> <p>Imperative 317</p> <p>Procedural 317</p> <p>Declarative 318</p> <p>Object- Oriented 318</p> <p>Functional 319</p> <p>Specialized 319</p> <p>Language Family Summary 319</p> <p>The Best Language 319</p> <p>Summary 323</p> <p>What You Learned in This Chapter 324</p> <p><b>Chapter 13: Testing 327</b></p> <p>Testing Goals 329</p> <p>Reasons Bugs Never Die 330</p> <p>Diminishing Returns 330</p> <p>Deadlines 330</p> <p>Consequences 330</p> <p>It’s Too Soon 330</p> <p>Usefulness 331</p> <p>Obsolescence 331</p> <p>It’s Not a Bug 331</p> <p>It Never Ends 332</p> <p>It’s Better Than Nothing 333</p> <p>Fixing Bugs Is Dangerous 333</p> <p>Which Bugs to Fix 334</p> <p>Levels of Testing 334</p> <p>Unit Testing 335</p> <p>Integration Testing 336</p> <p>Regression Testing 337</p> <p>Automated Testing 337</p> <p>Component Interface Testing 338</p> <p>System Testing 339</p> <p>Acceptance Testing 340</p> <p>Other Testing Categories 341</p> <p>Testing Techniques 342</p> <p>Exhaustive Testing 342</p> <p>Black- Box Testing 343</p> <p>White- Box Testing 344</p> <p>Gray- Box Testing 344</p> <p>Testing Habits 345</p> <p>Test and Debug When Alert 345</p> <p>Test Your Own Code 346</p> <p>Have Someone Else Test Your Code 346</p> <p>Fix Your Own Bugs 348</p> <p>Think Before You Change 349</p> <p>Don’t Believe in Magic 349</p> <p>See What Changed 350</p> <p>Fix Bugs, Not Symptoms 350</p> <p>Test Your Tests 350</p> <p>How to Fix a Bug 351</p> <p>Estimating Number of Bugs 351</p> <p>Tracking Bugs Found 352</p> <p>Seeding 353</p> <p>The Lincoln Index 353</p> <p>Summary 355</p> <p>What You Learned in This Chapter 357</p> <p><b>Chapter 14: Deployment 359</b></p> <p>Scope 360</p> <p>The Plan 361</p> <p>Cutover 362</p> <p>Staged Deployment 362</p> <p>Gradual Cutover 363</p> <p>Incremental Deployment 365</p> <p>Parallel Testing 365</p> <p>Deployment Tasks 365</p> <p>Deployment Mistakes 366</p> <p>Summary 368</p> <p>What You Learned in This Chapter 370</p> <p><b>Chapter 15: Metrics 371</b></p> <p>Wrap Party 372</p> <p>Defect Analysis 372</p> <p>Species of Bugs 373</p> <p>Discoverer 373</p> <p>Severity 374</p> <p>Creation Time 374</p> <p>Age at Fix 374</p> <p>Task Type 375</p> <p>Defect Database 376</p> <p>Ishikawa Diagrams 376</p> <p>Software Metrics 379</p> <p>Qualities of Good Attributes and Metrics 381</p> <p>Using Metrics 382</p> <p>Process Metrics 384</p> <p>Project Metrics 384</p> <p>Things to Measure 385</p> <p>Size Normalization 387</p> <p>Function Point Normalization 389</p> <p>Count Function Point Metrics 390</p> <p>Multiply by Complexity Factors 391</p> <p>Calculate Complexity Adjustment Value 392</p> <p>Calculate Adjusted FP 394</p> <p>Summary 395</p> <p>What You Learned in This Chapter 398</p> <p><b>Chapter 16: Maintenance 401</b></p> <p>Maintenance Costs 402</p> <p>Task Categories 404</p> <p>Perfective Tasks 404</p> <p>Feature Improvements 406</p> <p>New Features 406</p> <p>The Second System Effect 407</p> <p>Adaptive Tasks 408</p> <p>Corrective Tasks 410</p> <p>Preventive Tasks 414</p> <p>Clarification 414</p> <p>Code Reuse 415</p> <p>Improved Flexibility 416</p> <p>Bug Swarms 417</p> <p>Bad Programming Practices 417</p> <p>Individual Bugs 418</p> <p>Not Invented Here 418</p> <p>Task Execution 419</p> <p>Summary 420</p> <p>What You Learned in This Chapter 423</p> <p><b>Part II: Process Models</b></p> <p><b>Chapter 17: Predictive Models 427</b></p> <p>Model Approaches 428</p> <p>Prerequisites 428</p> <p>Predictive and Adaptive 429</p> <p>Success and Failure Indicators for Predictive Models 430</p> <p>Advantages and Disadvantages of Predictive Models 431</p> <p>Waterfall 432</p> <p>Waterfall with Feedback 433</p> <p>Sashimi 434</p> <p>Incremental Waterfall 436</p> <p>V- model 438</p> <p>Software Development Life Cycle 439</p> <p>Summary 442</p> <p>What You Learned in This Chapter 444</p> <p><b>Chapter 18: Iterative Models 445</b></p> <p>Iterative vs. Predictive 446</p> <p>Iterative vs. Incremental 448</p> <p>Prototypes 449</p> <p>Types of Prototypes 451</p> <p>Pros and Cons 451</p> <p>Spiral 453</p> <p>Clarifications 455</p> <p>Pros and Cons 456</p> <p>Unified Process 457</p> <p>Pros and Cons 459</p> <p>Rational Unified Process 459</p> <p>Cleanroom 460</p> <p>Cowboy Coding 461</p> <p>Summary 461</p> <p>What You Learned in This Chapter 463</p> <p><b>Chapter 19: Rad 465</b></p> <p>RAD Principles 467</p> <p>James Martin RAD 470</p> <p>Agile 471</p> <p>Self- Organizing Teams 473</p> <p>Agile Techniques 474</p> <p>Communication 474</p> <p>Incremental Development 475</p> <p>Focus on Quality 478</p> <p>XP 478</p> <p>XP Roles 479</p> <p>XP Values 480</p> <p>XP Practices 481</p> <p>Have a Customer On-Site 481</p> <p>Play the Planning Game 482</p> <p>Use Stand- Up Meetings 483</p> <p>Make Frequent Small Releases 483</p> <p>Use Intuitive Metaphors 484</p> <p>Keep Designs Simple 484</p> <p>Defer Optimization 484</p> <p>Refactor When Necessary 485</p> <p>Give Everyone Ownership of the Code 485</p> <p>Use Coding Standards 486</p> <p>Promote Generalization 486</p> <p>Use Pair Programming 486</p> <p>Test Constantly 486</p> <p>Integrate Continuously 486</p> <p>Work Sustainably 487</p> <p>Use Test- Driven and Test- First Development 487</p> <p>Scrum 488</p> <p>Scrum Roles 489</p> <p>Scrum Sprints 490</p> <p>Planning Poker 491</p> <p>Burndown 492</p> <p>Velocity 494</p> <p>Lean 494</p> <p>Lean Principles 494</p> <p>Crystal 495</p> <p>Crystal Clear 498</p> <p>Crystal Yellow 498</p> <p>Crystal Orange 499</p> <p>Feature- Driven Development 500</p> <p>FDD Roles 501</p> <p>FDD Phases 502</p> <p>Develop a Model 502</p> <p>Build a Feature List 502</p> <p>Plan by Feature 503</p> <p>Design by Feature 503</p> <p>Build by Feature 504</p> <p>FDD Iteration Milestones 504</p> <p>Disciplined Agile Delivery 506</p> <p>DAD Principles 506</p> <p>DAD Roles 506</p> <p>DAD Phases 507</p> <p>Dynamic Systems Development Method 508</p> <p>DSDM Phases 508</p> <p>DSDM Principles 510</p> <p>DSDM Roles 511</p> <p>Kanban 512</p> <p>Kanban Principles 513</p> <p>Kanban Practices 513</p> <p>Kanban Board 514</p> <p>Summary 515</p> <p>What You Learned in This Chapter 517</p> <p><b>Part III: Advanced Topics</b></p> <p><b>Chapter 20: Software Ethics 523</b></p> <p>Ethical Behavior 524</p> <p>IEEE- CS/ACM 524</p> <p>ACS 525</p> <p>CPSR 526</p> <p>Business Ethics 527</p> <p>Nada 528</p> <p>Hacker Ethics 529</p> <p>Hacker Terms 530</p> <p>Responsibility 531</p> <p>Gray Areas 533</p> <p>Software Engineering Dilemmas 535</p> <p>Misusing Data and the Temptation of Free Data 535</p> <p>Disruptive Technology 536</p> <p>Algorithmic Bias 537</p> <p>False Confidence 537</p> <p>Lack of Oversight 538</p> <p>Getting Paid 539</p> <p>Thought Experiments 539</p> <p>The Tunnel Problem 540</p> <p>The Trolley Problem 542</p> <p>Summary 544</p> <p>What You Learned in This Chapter 545</p> <p><b>Chapter 21: Future Trends 547</b></p> <p>Security 548</p> <p>UX/UI 549</p> <p>Code Packaging 550</p> <p>Cloud Technology 551</p> <p>Software Development 552</p> <p>Algorithms 553</p> <p>Tech Toys 554</p> <p>Summary 555</p> <p>What You Learned in This Chapter 556</p> <p>Appendix: Solutions to Exercises 559</p> <p>Glossary 631<br /> Index 663</p>
<p><B>ROD STEPHENS</B> is a former Microsoft MVP, programmer, and award-winning instructor who speaks regularly at programming conferences and users’ group meetings. He has written more than 250 magazine articles as well as 37 books that have been translated into at least ten different languages on topics including C#, Python, and other languages. He runs the popular C# Helper and VB Helper web sites.
<p><b>An intuitive and straightforward guide to the foundations of software engineering</b> <p>In the newly revised second edition of <i>Beginning Software Engineering, </i>veteran programmer and award-winning instructor Rod Stephens delivers the fundamentals of software engineering, showing you how to create well-constructed applications that meet users’ needs. You’ll learn the practical, hands-on skills you need to design and build software that’s robust, efficient, and reliable. <p>The author avoids unnecessary jargon and sticks to simple and straightforward English that helps you understand the concepts and ideas he explains in the book. He also provides real-world tested methods you can apply to any programming language, including C#, Java, Python, and more. The book doesn’t assume any experience with programming, development, or management, and uses intuitive case examples and explanatory sections to highlight and simplify more advanced topics for beginning learners. <p>Full of practical tips for preparing for programming job interviews—which often include questions about software engineering practices—and no-nonsense tutorials for requirements gathering, system modeling, design implementation, testing, and debugging, <i>Beginning Software Engineering </i>is perfect for anyone interested in a new career in software development as well as those simply curious about the software engineering process.

Diese Produkte könnten Sie auch interessieren:

Domain Architectures
Domain Architectures
von: Daniel J. Duffy
PDF ebook
31,99 €