Software Engineering: Concepts and Applications by Subhajit Datta

Software Engineering: Concepts and Applications

bySubhajit Datta

Paperback | October 15, 2010

not yet rated|write a review

Pricing and Purchase Info


Earn 205 plum® points

Ships within 1-3 weeks

Ships free on orders over $25

Not available in stores


Software Engineering: Concepts and Applications is designed to be a readable, practical guide for software engineering students as well as practitioners who are learning software engineering as they practice it. The book presents critical insights and techniques every student heading into thesoftware engineering job market needs to know, and many seasoned software engineers must grasp to be better at their jobs. The subject matter of each chapter is strongly motivated and has clear take-aways that a student is bound to remember and apply. A continuous case study and chapter specificexercises illustrate how each idea relates to the bigger picture and how they can be applied in practice. Common pitfalls and workarounds have also been highlighted.This book presents software engineering not as an amalgamation of dry facts, but as a living and vibrant vocation with great growth potential in the near future. It is endowed with the results and insights from the author's own research, teaching, and industry experience which will help studentseasily understand the concepts and skills that are so vital in the real world of software development.

About The Author

Dr Subhajit Datta is a PhD in computer science from the Florida State University, where he also taught courses on Internet technologies and programming. He is currently engaged in software engineering research at a corporate research laboratory. His research interests include requirements, design tools and techniques, metrics, and ana...

Details & Specs

Title:Software Engineering: Concepts and ApplicationsFormat:PaperbackDimensions:512 pages, 9.84 × 7.48 × 0.01 inPublished:October 15, 2010Publisher:Oxford University PressLanguage:English

The following ISBNs are associated with this title:

ISBN - 10:0195696565

ISBN - 13:9780195696561

Look for similar items by category:

Customer Reviews of Software Engineering: Concepts and Applications


Extra Content

Table of Contents

PrefaceIntroductionPart I: Understanding the Realm of Software Engineering1. A Bit of Background1.1 Learning Objectives1.2 Motivation1.3 What Software Engineering Is1.4 What Software Engineering Is Not1.5 Software: Art, Science, or Engineering?1.6 Becoming a Software Engineer1.7 A Software Engineer's Challenges1.8 A Software Engineer's Rewards1.9 Summary and Take-Aways1.10 Where to Look for More?1.11 Case Study1.12 Worked-out Examples1.13 Exercises1.14 References2. The Evolution of Software Engineering2.1 Learning Objectives2.2 Motivation2.3 A Historical Perspective2.4 Why Software Engineers Need to Know a Bit of History2.5 The Software Crisis2.6 Crossroads of Software Engineering2.7 Coming of the World Wide Web2.8 The New Millennium2.9 Unfolding Potential2.10 Summary and Take-Aways2.11 Where to Look for More?2.12 Case Study2.13 Worked-out Examples2.14 Exercises2.15 References3. Basic Ideas and First Principles3.1 Learning Objectives3.2 Motivation3.3 Software Engineering and Other Engineerings3.4 Are There Laws of Software?3.5 Some Engineering Ideas that Work for Software3.6 Some Engineering Ideas that Do Not Work for Software3.7 Software Engineering Credos3.8 Programming and Software Engineering3.9 An Evolving Discipline3.10 Summary and Take-Aways3.11 Where to Look for More?3.12 Case Study3.13 Worked-out Examples3.14 Exercises3.15 ReferencesPart II: Planning and Managing Software Development4. Software Development Methodologies4.1 Learning Objectives4.2 Motivation4.3 A Method to the Madness?4.4 The Software Development Lifecycle4.5 Algorithm, Process, and Methodology4.6 Different Development Philosophies4.6.1 Sequential Development4.6.2 Iterative Development4.7 A Brief Review of Software Development Methodologies4.7.1 Code-A-Bit-Test-A-Bit4.7.2 Waterfall4.7.3 Rapid Prototyping4.7.4 Iterative and Incremental DevelopmentSIDEBAR: Waterfall is iterative?4.7.5 Spiral4.7.6 Extreme Programming and Agile ProcessesSIDEBAR: Different Ways of Doing4.8 Who is the Fairest of Them All?SIDEBAR: People and Process4.9 Summary and Take-Aways4.10 Where to Look for More?4.11 Introducing the Case Study4.12 Exercises4.12.1 Review Questions4.12.2 Reflective QuestionsReferences5. The Place of Process in Software Development5.1 Learning Objectives5.2 Motivation5.3 What is a Process?5.4 Processes and Software Engineering5.5 From Micro to Macro5.6 The Personal Software Process5.7 The Team Software Process5.8 The Unified Software Development Process5.9 Towards Process Improvement and Process Making5.10 Case Study5.11 Summary and Take-Aways5.12 Where to Look for More?5.13 Exercises5.13.1 Review Questions5.13.2 Reflective Questions5.13.3 Programming ExamplesReferences6. Estimating Time, Effort, and Other Project Parameters6.1 Learning Objectives6.2 Motivation6.3 What is Estimation?6.4 The Science and Art of Software Estimation6.5 Importance of Estimation in Software DevelopmentSIDEBAR: Expert Estimation6.6 Why is Good Estimation So Difficult?6.7 Case StudySIDEBAR: Cone of Uncertainty6.8 Some Standard Estimation Techniques6.8.1 Estimation by Judgment6.8.1.1 Estimation from individual experts6.8.1.2 Estimation from groups of experts6.8.2 Estimation by Comparison6.8.3 Estimation by Correlation6.8.3.1 Estimation by Fuzzy Logic6.8.3.2 Estimation by Story Points6.8.3.3 Estimation by Standard ComponentsSIDEBAR: COCOMO6.9 Estimating Size6.10 Estimating Effort6.11 Estimating TimeSIDEBAR: Algorithmic models for estimation6.12 Estimation and Experience6.13 Summary and Take-Aways6.14 Where to Look for More?6.15 Worked-out Examples6.16 Exercises6.16.1 Review Questions6.16.2 Reflective Questions6.16.3 Numerical Problems6.16.4 Programming ExamplesReferences7. The Role of Metrics in Software Development7.1 Learning Objectives7.2 Motivation7.3 The Need to Measure7.4 Metrics Go Beyond Mere Measuring7.5 Metrics, Management, and Beyond7.6 A Brief Review of Software Metrics7.1 Early Perspectives7.2 A Maturing Discipline7.3 Towards a Deeper Perception7.4 Metrics in the New Millennium7.7 Some Commonly Used Metrics7.8 Using Metrics to Guide Software Development7.9 The Art and Craft of Metrics Making7.10 Summary and Take-Aways7.11 Where to Look for More?7.12 Case Study7.13 Worked-out Examples7.14 Exercises7.14.1 Review Questions7.14.2 Reflective QuestionsReferences8. Software Project Management8.1 Learning Objectives8.2 Motivation8.3 That Elusive Something8.4 The four Ps of software development: People, Project, Product, and Process8.5 Project Life Cycle8.6 Principles of Software Project Management8.7 Project Management: Processes Groups and Knowledge Areas8.8 The Software Project Management Plan8.9 Team Dynamics8.10 Managing versus Leading8.12 Summary and Take-Aways8.13 Where to Look for More?8.14 Exercises8.14.1 Review Questions8.14.2 Reflective Questions8.14.3 Numerical ProblemsReferences9. Human Aspects of Software Development9.1 Learning Objectives9.2 Motivation9.3 Software for Real Users9.4 Capricious Users9.5 Case Study9.6 Helping Users Know their Needs9.7 Co-Evolution: Interaction of the Problem and Solution9.8 Language and Communication9.9 Human Computer Interaction9.10 Towards Usable Software SystemsSIDEBAR: A Capital which Failed the Usability Test9.11 The Human Factor9.12 Summary and Take-Aways9.13 Where to Look for More?9.14 Exercises9.14.1 Review Questions9.14.2 Reflective Questions9.14.3 Programming ExamplesReferences10. The Role of Automation in Software Development10.1 Learning Objectives10.2 Motivation10.3 The Case for CASE (Computer Aided Software Engineering)10.4 The Lure of Automation10.5 The Automation Odyssey10.6 Automation: The why, how, and what10.6.1 Test Automation10.6.3 Design Automation10.6.5 The Spectrum of Automation10.7 The COMP-REF Technique: Towards Automating One Aspect of Design10.7.1 Aptitude Index10.7.2 Requirement Set10.7.3 Concordance Index10.8 Case Study10.9 Summary and Take-Aways10.10 Where to Look for More?10.11 Exercises10.11.1 Review Questions10.11.2 Reflective Questions10.11.3 Numerical Problems10.11.4 Programming ExamplesReferencesPart III: Making Software11. Understanding Software Architecture11.1 Learning Objectives11.2 Motivation11.3 The Architectural Views of Software11.4 Views and Definitions of Software Architecture11.5 Why Architecture is Essential in Large Scale Software Systems11.6 How Architecture Differs from Design11.7 Architectural Patterns11.8 The Future of Software Architecture11.9 Summary and Take-Aways11.10 Where to Look for More?11.11 Case Study11.13 Exercises11.13.1 Review Questions11.13.2 Reflective QuestionsReferences12. Paradigms of Software Development12.1 Learning Objectives12.2 Motivation12.3 A Cooking Metaphor12.4 A Case for Software's Complexity12.5 Strategies for Addressing Complexity in Software Systems12.5.1 Decomposition12.5.2 Abstraction12.5.3 Hierarchies12.6 Different Software Development Paradigms12.6.1 The Algorithmic Paradigm12.6.2 The Object Oriented Paradigm12.6.3 The Aspect Oriented ParadigmSIDEBAR: Crosscutting Score - Deciding between a Class and an Aspect12.7 Paradigms, Perspectives, and Programming12.8 A Holistic View12.9 Case Study12.10 Summary and Take-Aways12.11 Where to Look for More?12.12 Exercises12.12.1 Review Questions12.12.2 Reflective Questions12.12.3 Numerical Problems12.12.4 Programming ExamplesReferences13. Languages of Software Development13.1 Learning Objectives13.2 Motivation13.3 The Incremental Approach to Learning Languages13.4 Programming Languages13.4.1 Journey of Programming Languages: Milestones13.4.2 Profusion of Programming Languages13.4.3 Classification of Programming Languages13.4.4 The Choice of a Programming LanguageASIDE: The High and Low of Programming LanguagesASIDE: The Black Magic of Compilation13.5 Modeling Languages13.5.1 The Essence of a Model13.5.2 The Unified Modeling LanguageASIDE: The Making of UML13.6 Specification Languages13.6.1 The Ten Commandments of Formal Methods13.6.2 A Simple Example Using Z13.7 Summary and Take-Aways13.8 Where to Look for More?13.9 Exercises13.9.1 Review Questions13.9.2 Reflective Questions13.9.3 Programming ExamplesReferences14. Software Development across Workflows and Phases14.1 Learning Objectives14.2 Motivation14.3 The Four P's: Product, Process, People, Project14.4 The Dimensionality of Software Development14.5 Key Concerns for Software Development14.6 Workflows14.6.1 Requirements14.6.2 Analysis14.6.3 Design14.6.4 Implementation14.6.5 Test14.7 Phases14.7.1 Inception14.7.2 Elaboration14.7.3 Construction14.7.4 Transition14.8 The Fitting Together of Workflows and Phases14.9 Summary and Take-Aways14.10 Where to Look for More?14.11 Exercises14.11.1 Review Questions14.11.2 Reflective QuestionsReferences15. Building a Software System: And Extended Case Study15.1 Learning Objectives15.2 Motivation15.3 Understanding the System15.4 Planning the Development15.4.1 Analysis and Design15.5 Implementation and Testing15.6 Tracking the Development Life Cycle through the Phases15.7 Summary and Take-Aways15.8 Where to Look for More?15.9 Case Study15.10 Worked-out Examples15.11 Exercises15.12 References16. Tricks of the Trade16.1 Learning Objectives16.2 Motivation16.3 Experience, Intuition, and Software Design16.4 The Role of Heuristics16.5 Software Reuse: Myth vs. Reality16.6 Building Software from Off-the-shelf Components16.7 User Interface Design16.8 Software Engineering vs. Systems Engineering16.9 Refactoring16.10 Organizational Best Practices16.11 Tribal Memory16.12 Summary and Take-Aways16.13 Where to Look for More?16.14 Case Study16.15 Worked-out Examples16.16 Exercises16.17 ReferencesPart IV: Testing, Maintaining and Modifying Software Systems17. Software Testing, Reliability, and Quality17.1 Learning Objectives17.2 Motivation17.3 Some Testing TermsSIDEBAR: The Origin of Bugs17.4 Some Testing Tenets17.5 Two Testing Philosophies17.5.1 Black-Box Testing17.5.2 White-Box Testing17.6 Different Types of Testing17.6.1 Unit Testing17.6.2 Integration Testing17.6.2.1 Top-down Integration Testing17.6.2.2 Bottom-up Integration Testing17.6.2.3 Big-bang Integration Testing17.6.4 Performance Testing17.6.5 Stress Testing17.6.6 User-Acceptance TestingSIDEBAR: The JUnit Framework17.7 Inspections, Walkthroughs, and Reviews17.8 Designing Test Cases17.9 Case Study17.10 Debugging Techniques17.10.1 Debugging by Brute Force17.10.2 Debugging by Induction17.10.3 Debugging by Deduction17.10.4 Debugging by Backtracking17.11 Test AutomationSIDEBAR: Correctness Proofs - The Holy Grail for Software Testing?17.12 Basic Ideas of Software Reliability17.12.1 Difference between Software and Hardware Reliability17.12.2 Some Useful Software Reliability Relations17.13 Towards Software Quality17.13.1 ISO 9000 Series of Standards17.13.2 Capability Maturity Model17.13.3 Six Sigma17.14 Summary and Take-Aways17.15 Where to Look for More?17.16 Worked-out Examples17.17 Exercises17.17.1 Review Questions17.17.2 Reflective Questions17.17.3 Numerical Problems17.17.4 Programming ExamplesReferences18. Ongoing Modifications and Maintenance18.1 Learning Objectives18.2 Motivation18.3 Why Testing Can Not Fix All Bugs18.4 Recurrent Bugs and What to Do About Them18.5 Why Software Always Changes18.6 Living with Change18.7 Planned Modifications vs. Ad-hoc Hacking18.8 Working on Someone Else's Code18.9 Deciding When to Rebuild than Modify18.10 Software Entropy18.11 Software Retirement: When to Stop Maintaining18.12 The Quest for Continual Improvement: A Software Peculiarity18.13 Summary and Take-Aways18.14 Where to Look for More?18.15 Case Study18.16 Worked-out Examples18.17 Exercises18.18 ReferencesPart V: Latest Trends of Software Development19. Building Software Systems for the World Wide Web19.1 Learning Objectives19.2 Motivation19.3 Internet and the World Wide Web19.4 Client-Server Systems19.5 Peer-to-peer Systems19.6 Scripting Languages19.7 Three-tier Architecture19.8 Leveraging the Power of the Web for Your Software Systems19.9 Common Concerns for Web based Systems19.10 Summary and Take-Aways19.11 Where to Look for More?19.12 Case Study19.13 Worked-out Examples19.14 Exercises19.15 References20. Towards Enterprise Software Development20.1 Learning Objectives20.2 Motivation20.3 How Is Enterprise Software Development Different?20.4 The Importance of Enterprise Software20.5 Challenges Unique To Enterprise Software Development20.6 Enterprise Oriented Software Engineering20.6.1 Identifying and Understanding Stakeholders' Needs20.6.2 Choice of a Methodology20.6.3 User Involvement and Feedback20.6.4 Continual Development20.7 Summary and Take-Aways20.8 Where to Look for More?20.9 Case Study20.10 Worked-out Examples20.11 Exercises20.11.1 Review Questions20.11.2 Reflective Questions20.11.3 Numerical Problems20.11.4 Programming ExamplesReferences21. Global Software Development21.1 Learning Objectives21.2 Motivation21.3 The Genesis of Global Software Development21.4 Distributed Teams and Remote Customers21.5 Outsourcing: Opportunities and Threats21.6 The Global Software Engineer21.7 Summary and Take-Aways21.8 Where to Look for More?21.9 Case Study21.10 Worked-out Examples21.11 Exercises21.12 References22. The Influence of Open Source22.1 Learning Objectives22.2 Motivation22.3 A Short Account of the Open Source Phenomenon22.4 WWW and the Open Source Movement in Software22.5 A Threat to the Professional Software Engineer?22.6 Harnessing the Potential of Open Source22.7 Limitations of Open Source22.8 Summary and Take-Aways22.9 Where to Look for More?22.10 Case Study22.11 Worked-out Examples22.12 Exercises22.13 References23. The Future of Software Development23.1 Learning Objectives23.2 Motivation23.3 Newer Technologies23.4 More Penetration and More Responsibility23.5 What Changes and What Remains the Same23.6 Summary and Take-Aways23.7 Where to Look for More?23.8 Case Study23.9 Worked-out Examples23.10 Exercises23.11 ReferencesIndex