Introdução à programação usando o PASCAL / J. Pavão Martins
The Art of Prolog, Second Edition: Advanced Programming Techniques (Logic Programming) Subsequent Edition
by Leon Sterling (Author), Ehud Shapiro (Author)


Product details
- Publisher : Mit Pr; Subsequent edition (March 10, 1994)
- Language : English
- Hardcover : 560 pages
- ISBN-10 : 0262193388
- ISBN-13 : 978-0262193382
- Item Weight : 2.85 pounds
- Dimensions : 8.25 x 1.5 x 9.25 inches

This new edition of The Art of Prolog contains a number of important changes. Most background sections at the end of each chapter have been updated to take account of important recent research results, the references have been greatly expanded, and more advanced exercises have been added which have been used successfully in teaching the course. Part II, The Prolog Language, has been modified to be compatible with the new Prolog standard, and the chapter on program development has been significantly altered: the predicates defined have been moved to more appropriate chapters, the section on efficiency has been moved to the considerably expanded chapter on cuts and negation, and a new section has been added on stepwise enhancementa systematic way of constructing Prolog programs developed by Leon Sterling. All but one of the chapters in Part III, Advanced Prolog Programming Techniques, have been substantially changed, with some major rearrangements. A new chapter on interpreters describes a rule language and interpreter for expert systems, which better illustrates how Prolog should be used to construct expert systems. The chapter on program transformation is completely new and the chapter on logic grammars adds new material for recognizing simple languages, showing how grammars apply to more computer science examples.
Introdução à Programação em Cobol
de Ray Welland


Introdução à Programação em Cobol
de Ray Welland
ISBN: 9789726410423
Ano de edição: 04-1992
Editor: Cetop
Idioma: Português
Dimensões: 170 x 238 x 16 mm
Encadernação: Capa mole
Páginas: 288
Tipo de Produto: Livro
Infotex – Biblioteca de Informática
Classificação Temática:
Artificial Intelligence: A Modern Approach – Stuart J. Russell and Peter Norvig


Hardback – 1st Edition – 1136 páginas
First edition (1995)
Author Stuart J. Russell and Peter Norvig
Language English
Genre Computer science
Publisher Prentice Hall
Publication date 2020 (4th Ed.)
Media type book
Pages 1136 (4th Ed.)
ISBN 0-13-461099-7
OCLC 359890490
Dewey Decimal 006.3 20
LC Class Q335 .R86 1995

Artificial Intelligence: A Modern Approach (AIMA) is a university textbook on artificial intelligence (AI), written by Stuart J. Russell and Peter Norvig. It was first published in 1995, and the fourth edition of the book was released on 28 April 2020.[1] AIMA has been called “the most popular artificial intelligence textbook in the world”,[2] and is considered the standard text in the field of AI.[3][4] As of 2023, it was being used at over 1500 universities worldwide,[5] and it has over 59,000 citations on Google Scholar.[6] AIMA is intended for an undergraduate audience but can also be used for graduate-level studies with the suggestion of adding some of the primary sources listed in the extensive bibliography.[
Tecnologia de Sistemas Distribuídos – 2ª Edição – Autores: José Alves Marques, Paulo Guedes


ISBN: 9789727221288
Autores: José Alves Marques, Paulo Guedes
Editora: FCA
Número de Páginas: 524
Idioma: Português
Data Edição: 2003
Os sistemas informáticos actuais encontram-se num processo rápido de evolução em grande parte provocado pela introdução das redes de computadores e pelos computadores pessoais. A conjugação destes dois desenvolvimentos tecnológicos deu origem aos Sistemas Distribuídos. Esta disciplina, que constitui uma evolução dos sistemas operativos, encontra-se no cerne da alteração radical da forma como se estruturam as aplicações informáticas. A Internet é um exemplo desta evolução de conhecimento do grande público, mas a sua utilização é apenas o início de uma profunda modificação na forma de encarar a Informática. Neste livro explicam-se os elementos fundamentais de um sistema distribuído: as redes de dados, os protocolos de comunicação, a comunicação distribuída, o sistema cliente – servidor, os sistemas de nomes, a segurança, a tolerância a faltas e os sistemas de ficheiros distribuídos. O livro procura ser um texto de nível académico para os estudantes de Engenharia de Informática e de Informática de Gestão e, simultaneamente, um texto para os profissionais de Informática e para todos os interessados pelos sistemas computacionais perceberem o funcionamento intrínseco dos futuros sistemas informáticos. Texto de apresentação e livro escritos ao abrigo da antiga ortografia.
Professional SQL Server 2000 Programming 1st Edition
by Robert Vieira (Author)


Product details
- Publisher : Wrox; 1st edition (November 15, 2000)
- Language : English
- Paperback : 1440 pages
- ISBN-10 : 0764543792
- ISBN-13 : 978-0764543791
- Item Weight : 3.8 pounds
- Dimensions : 7.3 x 2.5 x 9 inches
What is this book about?
SQL Server 2000 is the latest and most powerful version of Microsoft’s data warehousing and relational database management system. This new release is tightly integrated with Windows 2000 and offers more support for XML, as well as improved Analysis Services for OLAP and data mining.
Professional SQL Server 2000 provides a comprehensive guide to programming with SQL Server 2000, from a complete tutorial on Transact-SQL to an in-depth discussion of new features, such as indexed views, user-defined functions, and the wealth of new SQL Server features to support XML. Whether you’re coming to SQL Server 2000 from another relational database management system, upgrading your existing system, or perhaps wanting to add programming skills to your DBA knowledge, you’ll find what you need in this book to get to grips with SQL Server 2000 development.
What does this book cover?
Here are just a few of the things covered in this book:
- A complete introduction to Transact-SQL
- Database design issues
- Creating and using views, stored procedures, and user- defined functions
- Responding to events with triggers
- Making your SQL Server secure
- Retrieving your data as XML
- An introduction to Analysis Services
- Moving data using Data Transformation Services and the bulk copy program
- Maintaining the integrity of distributed data with replication
Who is this book for?
This book is aimed at the SQL Server developer who wants to make the most out of the new features of SQL Server 2000. No knowledge of SQL Server is assumed, although in order to follow this book, you do need to have an understanding of programming basics such as variables, data types, and procedural programming. Database administration is also covered but only as it affects the SQL Server developer.
Comptia A+ Certification All-In-One Exam Guide, Seventh Edition (Exams 220-701 & 220-702) de Mike Meyers


Comptia A+ Certification All-In-One Exam Guide, Seventh Edition (Exams 220-701 & 220-702)
de Mike Meyers
Propriedade Descrição
ISBN: 9780071701327
Editor: McGraw Hill LLC
Data de Lançamento: fevereiro de 2010
Idioma: Inglês
Páginas: 1376
Get complete coverage of the latest release of the CompTIA A+ exams inside this fully revised and updated resource. Written by the leading authority on CompTIA A+ certification and training, this expert guide covers CompTIA A+ exams 220-701 and 220-702. You’ll find learning objectives at the beginning of each chapter, exam tips, practice exam questions, in-depth explanations, and more than 1,000 photographs and illustrations. Designed to help you pass the CompTIA A+ exams with ease, this definitive volume also serves as an essential on-the-job IT reference.Covers all exam objectives, including how to:Work with CPUs, RAM, motherboards, power supplies, and other PC componentsInstall, partition, and format hard drivesInstall, upgrade, and troubleshoot WIndows 2000, Windows XP, and Windows VistaTroubleshoot PCs and implement security measuresInstall video and multimedia cardsWork with portable PCs, PDAs, smartphones, and wireless technologiesManage printers and connect to networks and the InternetUnderstand safety and environmental issuesEstablish good communication skills and adhere to privacy policiesThe download features:Practice exams for 701 & 702600+ chapter review questionsNew video introduction to CompTIA A+One-hour video training segmentMike’s favorite PC tools and utilitiesSearchable e-bookMike Meyers, CompTIA A+, CompTIA Network+, MCP, is the industry’s leading authority on CompTIA A+ certification and training. He is the president and founder of Total Seminars, LLC, a major provider of PC and network repair seminars for thousands of organizations throughout the world, and a member of CompTIA.
Sistema de Banco de Dados – Terceira Edição
Abraham Silberschatz; Henry Korth e S. Sudarshan
Livro em Português (Brasil)
Editora: Makron Books


Encadernação:
Brochura
Edição:3
Páginas:778
Medidas:17X24
Peso:1313g
ISBN:8534610738
ID: 339630
Data:19/11/2008
Assuntos:
Informática. Computação. Computador. Tecnologia Da Informação: Tec. Da Informação
Resenha:
Esta obra oferece ao leitor tudo o que é necessário para um entendimento completo dos sistemas de banco de dados. Os autores explicam os conceitos fundamentais de gerenciamento de banco de dados, com abrangência e atenção aos detalhes. São abordados de forma completa assuntos como linguagens de consulta de banco de dados, projeto de esquema, desenvolvimento de aplicações de banco de dados, detalhes internos do banco de dados, análise de dados, arquiteturas de banco de dados. O livro é apropriado como livro-texto para cursos introdutórios e avançados e também como uma referência para profissionais da área.
The C++ Programming Language: Special Edition (3rd Edition) Special Edition
by Bjarne Stroustrup (Author)


Product details
- Publisher : Addison-Wesley Professional; Special Edition (February 15, 2000)
- Language : English
- Hardcover : 1030 pages
- ISBN-10 : 0201700735
- ISBN-13 : 978-0201700732
- Item Weight : 3.75 pounds
- Dimensions : 8 x 1.75 x 10 inches
- Best Sellers Rank: #1,716,086 in Books (See Top 100 in Books)
- #396 in C++ Programming Language
- #4,881 in Computer Software (Books)
- #14,929 in Mathematics (Books)
- Customer Reviews: 4.5 4.5 out of 5 stars 312 ratings

From the Inside Flap Programming is understanding. — Kristen Nygaard I find using C++ more enjoyable than ever. C++’s support for design and programming has improved dramatically over the years, and lots of new helpful techniques have been developed for its use. However, C++ is not just fun. Ordinary practical programmers have achieved significant improvements in productivity, maintainability, flexibility, and quality in projects of just about any kind and scale. By now, C++ has fulfilled most of the hopes I originally had for it, and also succeeded at tasks I hadn’t even dreamt of. This book introduces standard C++* and the key programming and design techniques supported by C++. Standard C++ is a far more powerful and polished language than the version of C++ introduced by the first edition of this book. New language features such as name spaces, exceptions, templates, and run-time type identification allow many techniques to be applied more directly than was possible before, and the standard library allows the programmer to start from a much higher level than the bare language. About a third of the information in the second edition of this book came from the first. This third edition is the result of a rewrite of even larger magnitude. It offers something to even the most experienced C++ programmer; at the same time, this book is easier for the novice to approach that its predecessors were. The explosion of C++ use and the massive amount of experience accumulated as a result makes this possible. The definition of an extensive standard library makes a difference to the way C++ concepts can be presented. As before, this book presents C++ independently of any particular implementation, and as before, the tutorial chapters present language constructs and concepts in a “bottom up” order so that a construct is used only after it has been defined. However, it is much easier to use a well-designed library than it is to understand the details of its implementation. Therefore the standard library can be used to provide realistic and interesting examples well before a reader can be assumed to understand its inner workings. the standard library itself is also a fertile source of programming examples and design techniques. This book presents every major C++ language feature and the standard library. It is organized around language and library facilities. However, features are presented in the context of their use. That is, the focus is on the language as the tool for design and programming rather than on the language in itself. This book demonstrates key techniques that make C++ effective and teaches the fundamental concepts necessary for mastery. Except where illustrating technicalities, examples are taken from the domain of systems software. A companion, The Annotated C++ Language Standard, presents the complete language definition together with annotations to make it more comprehensible. The primary aim of this book is to help the reader understand how the facilities offered by C++ support key programming techniques. The aim is to take the reader far beyond the point where he or she gets code running primarily by copying examples and emulation programming styles from other languages. Only a good understanding of the ideas behind the language facilities leads to mastery. Supplemented by implementation documentation, the information provided is sufficient for completing significant real-world projects. The hope is that this book will help the reader gain new insights and become a better programmer and designer. Acknowledgments In addition to the people mentioned in the acknowledgment section of the first and second editions, I would like to thank Matt Austern, Hans Boehm, Don Caldwell, Lawrence Crowl, Alan Feuer, Andrew Forrest, Tim Griffin, Peter Juhl, Brian Kernighan, Andrew Koenig, Mike Mowbray, Rob Murray, Lee Nackman, Joseph Newcomer, Alex Stepanov, David Vandevoorde, Peter Weinberger, and Chris Van Wyk for commenting on draft chapters of this third edition. I would also like to thank the volunteers on the C++ standards committees who did an immense amount of constructive work to make C++ what it is today. It is slightly unfair to single out individuals, but it would be even more unfair not to mention anyone, so I’d like to especially mention Mike Ball, Dag Brueck, Sean Corfield, Ted Goldstein, Kim Knutilla, Andrew Koenig, Josee Lajoie, Dmitry Lenkov, Nathan Myers, Martin O’Riordan, Tom Plum, Jonathan Shopiro, John Spicer, Jerry Schwarz, Alex Stepanov, and Mike Vilot, as people who each directly cooperated with me over some part of C++ and its standard library. After the initial printing of this book, many dozens of people have mailed me corrections and suggestions for improvements. I have been able to accommodate many of their suggestions within the framework of the book so that later printings benefitted significantly. Translators of this book into many languages have also provided many clarifications. In response to requests from readers, I have added appendices D and E. Let me take this opportunity to thank a few of those who helped: Dave Abrahams, Matt Austern, Jan Bielawski, Janina Mincer Daszkiewicz, Andrew Koenig, Dietmar Kuehl, Nicolai Josuttis, Nathan Myers, Paul E. Sevinc, Andy Tenne-Sens, Shoichi Uchida, Ping-Fai (Mike) Yang, and Dennis Yelle. Bjarne Stroustrup Murray Hill, New Jersey 0201700735P04062001 From the Back Cover Written by Bjarne Stroustrup, the creator of C++, this is the world’s most trusted and widely read book on C++.The result is complete, authoritative coverage of the C++ language, its standard library, and key design techniques. Based on the ANSI/ISO C++ standard, The C++ Programming Language provides current and comprehensive coverage of all C++ language features and standard library components. For example: abstract classes as interfaces class hierarchies for object-oriented programming templates as the basis for type-safe generic software exceptions for regular error handling namespaces for modularity in large-scale software run-time type identification for loosely coupled systems the C subset of C++ for C compatibility and system-level work standard containers and algorithms standard strings, I/O streams, and numerics C compatibility, internationalization, and exception safety Bjarne Stroustrup makes C++ even more accessible to those new to the language, while adding advanced information and techniques that even expert C++ programmers will find invaluable. About the Author Bjarne Stroustrup is the designer and original implementer of C++ and the author of The C++ Programming Language (first edition 1985, second edition 1991, third edition 1997), The Design and Evolution of C++ (1994), and Programming: Principles and Practice using C++ (2010). He is the College of Engineering Chair in Computer Science Distinguished Professor at Texas A&M University, a member of the National Academy of Engineering, and an AT&T Fellow. Before moving to academia, he worked for decades in AT&T Bell Labs. He is a founding member of the ISO C++ standards committee. Vist him on the web at www.research.att.com/~bs/. Excerpt. © Reprinted by permission. All rights reserved. Preface I find using C++ more enjoyable than ever. C++’s support for design and programming has improved dramatically over the years, and lots of new helpful techniques have been developed for its use. However, C++ is not just fun. Ordinary practical programmers have achieved significant improvements in productivity, maintainability, flexibility, and quality in projects of just about any kind and scale. By now, C++ has fulfilled most of the hopes I originally had for it, and also succeeded at tasks I hadn’t even dreamt of. This book introduces standard C++* and the key programming and design techniques supported by C++. Standard C++ is a far more powerful and polished language than the version of C++ introduced by the first edition of this book. New language features such as name spaces, exceptions, templates, and run-time type identification allow many techniques to be applied more directly than was possible before, and the standard library allows the programmer to start from a much higher level than the bare language. About a third of the information in the second edition of this book came from the first. This third edition is the result of a rewrite of even larger magnitude. It offers something to even the most experienced C++ programmer; at the same time, this book is easier for the novice to approach that its predecessors were. The explosion of C++ use and the massive amount of experience accumulated as a result makes this possible. The definition of an extensive standard library makes a difference to the way C++ concepts can be presented. As before, this book presents C++ independently of any particular implementation, and as before, the tutorial chapters present language constructs and concepts in a “bottom up” order so that a construct is used only after it has been defined. However, it is much easier to use a well-designed library than it is to understand the details of its implementation. Therefore the standard library can be used to provide realistic and interesting examples well before a reader can be assumed to understand its inner workings. the standard library itself is also a fertile source of programming examples and design techniques. This book presents every major C++ language feature and the standard library. It is organized around language and library facilities. However, features are presented in the context of their use. That is, the focus is on the language as the tool for design and programming rather than on the language in itself. This book demonstrates key techniques that make C++ effective and teaches the fundamental concepts necessary for mastery. Except where illustrating technicalities, examples are taken from the domain of systems software. A companion, The Annotated C++ Language Standard, presents the complete language definition together with annotations to make it more comprehensible. The primary aim of this book is to help the reader understand how the facilities offered by C++ support key programming techniques. The aim is to take the reader far beyond the point where he or she gets code running primarily by copying examples and emulation programming styles from other languages. Only a good understanding of the ideas behind the language facilities leads to mastery. Supplemented by implementation documentation, the information provided is sufficient for completing significant real-world projects. The hope is that this book will help the reader gain new insights and become a better programmer and designer. Excerpt. © Reprinted by permission. All rights reserved. Programming is understanding. — Kristen Nygaard I find using C++ more enjoyable than ever. C++’s support for design and programming has improved dramatically over the years, and lots of new helpful techniques have been developed for its use. However, C++ is not just fun. Ordinary practical programmers have achieved significant improvements in productivity, maintainability, flexibility, and quality in projects of just about any kind and scale. By now, C++ has fulfilled most of the hopes I originally had for it, and also succeeded at tasks I hadn’t even dreamt of. This book introduces standard C++* and the key programming and design techniques supported by C++. Standard C++ is a far more powerful and polished language than the version of C++ introduced by the first edition of this book. New language features such as name spaces, exceptions, templates, and run-time type identification allow many techniques to be applied more directly than was possible before, and the standard library allows the programmer to start from a much higher level than the bare language. About a third of the information in the second edition of this book came from the first. This third edition is the result of a rewrite of even larger magnitude. It offers something to even the most experienced C++ programmer; at the same time, this book is easier for the novice to approach that its predecessors were. The explosion of C++ use and the massive amount of experience accumulated as a result makes this possible. The definition of an extensive standard library makes a difference to the way C++ concepts can be presented. As before, this book presents C++ independently of any particular implementation, and as before, the tutorial chapters present language constructs and concepts in a “bottom up” order so that a construct is used only after it has been defined. However, it is much easier to use a well-designed library than it is to understand the details of its implementation. Therefore the standard library can be used to provide realistic and interesting examples well before a reader can be assumed to understand its inner workings. the standard library itself is also a fertile source of programming examples and design techniques. This book presents every major C++ language feature and the standard library. It is organized around language and library facilities. However, features are presented in the context of their use. That is, the focus is on the language as the tool for design and programming rather than on the language in itself. This book demonstrates key techniques that make C++ effective and teaches the fundamental concepts necessary for mastery. Except where illustrating technicalities, examples are taken from the domain of systems software. A companion, The Annotated C++ Language Standard, presents the complete language definition together with annotations to make it more comprehensible. The primary aim of this book is to help the reader understand how the facilities offered by C++ support key programming techniques. The aim is to take the reader far beyond the point where he or she gets code running primarily by copying examples and emulation programming styles from other languages. Only a good understanding of the ideas behind the language facilities leads to mastery. Supplemented by implementation documentation, the information provided is sufficient for completing significant real-world projects. The hope is that this book will help the reader gain new insights and become a better programmer and designer. Acknowledgments In addition to the people mentioned in the acknowledgment section of the first and second editions, I would like to thank Matt Austern, Hans Boehm, Don Caldwell, Lawrence Crowl, Alan Feuer, Andrew Forrest, Tim Griffin, Peter Juhl, Brian Kernighan, Andrew Koenig, Mike Mowbray, Rob Murray, Lee Nackman, Joseph Newcomer, Alex Stepanov, David Vandevoorde, Peter Weinberger, and Chris Van Wyk for commenting on draft chapters of this third edition. I would also like to thank the volunteers on the C++ standards committees who did an immense amount of constructive work to make C++ what it is today. It is slightly unfair to single out individuals, but it would be even more unfair not to mention anyone, so I’d like to especially mention Mike Ball, Dag Brueck, Sean Corfield, Ted Goldstein, Kim Knutilla, Andrew Koenig, Josee Lajoie, Dmitry Lenkov, Nathan Myers, Martin O’Riordan, Tom Plum, Jonathan Shopiro, John Spicer, Jerry Schwarz, Alex Stepanov, and Mike Vilot, as people who each directly cooperated with me over some part of C++ and its standard library. After the initial printing of this book, many dozens of people have mailed me corrections and suggestions for improvements. I have been able to accommodate many of their suggestions within the framework of the book so that later printings benefitted significantly. Translators of this book into many languages have also provided many clarifications. In response to requests from readers, I have added appendices D and E. Let me take this opportunity to thank a few of those who helped: Dave Abrahams, Matt Austern, Jan Bielawski, Janina Mincer Daszkiewicz, Andrew Koenig, Dietmar Kuehl, Nicolai Josuttis, Nathan Myers, Paul E. Sevinc, Andy Tenne-Sens, Shoichi Uchida, Ping-Fai (Mike) Yang, and Dennis Yelle. Bjarne Stroustrup Murray Hill, New Jersey
Software Engineering: Theory and Practice (2nd Edition) Subsequent Edition
by Shari Lawrence Pfleeger (Author)
3.2 3.2 out of 5 stars 15 ratings


Product details
- Publisher : Prentice Hall; Subsequent edition (January 1, 2001)
- Language : English
- Hardcover : 659 pages
- ISBN-10 : 0130290491
- ISBN-13 : 978-0130290496
- Item Weight : 2.5 pounds
- Dimensions : 7 x 1.5 x 9.75 inches
Hardback
Bíblias
#Biblias

Editorial Reviews From the Inside Flap Preface BRIDGING THE GAP BETWEEN RESEARCH AND PRACTICE Software engineering has come a long way since 1968, when the term was first used at a NATO conference. And software itself has entered our lives in ways that few had anticipated, even a decade ago. So a firm grounding in software engineering theory and practice is essential for understanding how to build good software and for evaluating the risks and opportunities that software presents in our everyday lives. This text represents the blending of the two current software engineering worlds: that of the practitioner, whose main focus is to build high-quality products that perform useful functions, and that the researcher, who strives to find ways to improve the quality of products and the productivity of those who build them. Designed for an undergraduate software engineering curriculum, this book paints a pragmatic picture of software engineering research and practices. Examples speak to a student’s limited experience but illustrate clearly how large software development projects progress from need to idea to reality. The book is also suitable for a graduate course offering an introduction to software engineering concepts and practices, or for practitioners wishing to expand their knowledge of the subject. It includes examples that represent the many situations readers are likely to experience: large projects and small, object-oriented and procedural, real-time and transaction processing, development and maintenance. In particular, Chapters 12, 13, and 14 present thought-provoking material designed to interest graduate students in current research topics. KEY FEATURES This text has many key features that distinguish it from other books. Unlike other software engineering books that consider measurement a separate issue, this book blends measurement with software engineering. Measurement issues are considered as an integral part of software engineering strategy, rather than as a separate discipline. This approach shows students how to involve quantitative assessment and improvement in their daily activities. They can evaluate their progress on an individual, team, and project basis. Similarly, concepts such as reuse, risk management, and quality engineering are embedded in the software engineering activities that are affected by them, instead of treating them as separate issues. Each chapter applies its concepts to two common examples: one that represents a typical information system, and another that represents a real-time system. Both examples are based on actual projects. The information system example describes the software needed to determine the price of advertising time for a large British television company. The real-time system is the control software for the Ariane-5 rocket; we look at the problems reported, and explore how software engineering techniques could have helped to locate and avoid some of them. Students can follow the progress of two typical projects, seeing how the various practices described in the book are merged into the technologies used to build systems. At the end of every chapter, the results are expressed in three ways: what the content of the chapter means for development teams, what it means for individual developers, and what it means for researchers. The student can easily review the highlights of each chapter and see the chapter’s relevance to both research and practice. The book has an associated Web page, containing current examples from the literature, links to Web pages for relevant tool and method vendors, and a study guide for students. It is on the Web that students can find real requirements documents, designs, code, test plans, and more, so they can see real software engineering project artifacts. Students seeking additional in-depth information are pointed to reputable accessible publications and Web sites. The Web pages are updated regularly to keep the material in the textbook current and include a facility for feedback to the author and the publisher. The book is replete with case studies and examples from the literature. Many of the one-page case studies shown as sidebars in the book are expanded on the Web page. The student can see how the book’s theoretical concepts are applied to real-life situations. Each chapter ends with thought-provoking questions about legal and ethical issues in software engineering. Students see software engineering in its social and political contexts. As with other sciences, software engineering decisions must be viewed in terms of the people their consequences will affect. Every chapter addresses both procedural and object-oriented development. In addition, a new chapter on object-oriented development explains the steps of an object-oriented development process. Using UML for common notation, each step is applied to a common example, from requirements specification through program design. The book has an annotated bibliography that points to many of the seminal papers in software engineering. In addition, the Web page points to annotated bibliographies and discussion groups for specialized areas, such as software reliability, fault tolerance, computer security, and more. The book has a solutions manual, available from Prentice Hall, as are PowerPoint slides with the figures, tables, and sample instructional slides. Each chapter includes a description of a term project, involving development of software for a mortgage processing system. The instructor may use this term project, or a variation of it, in class assignments. Each chapter ends with a list of key references for the concepts in the chapter, enabling students to find in-depth information about particular tools and methods discussed in the chapter. CONTENTS AND ORGANIZATION This text is organized in three parts. The first part (Chapters 1 to 3) motivates the reader, explaining why knowledge of software engineering is important to practitioners and researchers alike. Part I also discusses the need for understanding process issues and for doing careful project planning. Part II (Chapters 4 to 11) walks through the major steps of development and maintenance, regardless of the process model used to build the software: eliciting and checking the requirements, designing a solution to the problem, writing and testing the code, and turning it over to the customer. Part III (Chapters 12 to 14) focuses on evaluation and improvement. It looks at how we can assess the quality of our processes and products, and how to take steps to improve them. Chapter 1: Why Software Engineering? In this chapter we address our track record, motivating the reader and highlighting where in later chapters certain key issues are examined. In particular, we look at Wasserman’s key factors that help define software engineering: abstraction, analysis and design methods and notations, modularity and architecture, software life cycle and press, reuse, measurement, tools and integrated environments, and user interface and prototyping. We discuss the difference between computer science and software engineering, explaining some of the major types of problems that can be encountered, and laying the groundwork for the rest of the book. We also explore the need to take a systems approach to building software, and we introduce the two common examples that will be used in every chapter. We also introduce the context for the term project. Chapter 2: Modeling the Process and Life Cycle In this chapter, we present an overview of different types of process and life-cycle models, including the waterfall model, the V -model, the spiral model, and various prototyping models. We also describe several modeling techniques and tools, including systems dynamics, SADT, and other commonly-used approaches. Each of the two common examples is modeled in part with some of the techniques introduced here. Chapter 3: Planning and Managing the Project Here, we look at project planning and scheduling. We introduce notions such as activities and milestones, work breakdown structure, activity graphs, risk management, and costs and cost estimation. Estimation models are used to estimate the cost and schedule of the two common examples. We focus on actual case studies, including management of software development for the F-16 airplane and for Digital’s alpha AXP programs. Chapter 4: Capturing the Requirements In this chapter, we look at requirements analysis and specification. We explain the difference between functional and nonfunctional requirements, present several ways to describe different kinds of requirements, and discuss how to prototype requirements. We see how several types of formal methods can be used in specifying and evaluating requirements. Other topics discussed include requirements documentation, requirements reviews, requirements quality and how to measure it, requirements testability, and how to select a specification method. The chapter ends with application of some of the methods to the two common examples. Chapter 5: Designing the System This chapter focuses on architectural issues, and we begin by discussing Shaw and Garlan’s fra From the Back Cover Dr. Pfleeger applies state-of-the-art software engineering methods consistently to two case studies that are integrated throughout: a realistic information system and a requirements rich real-time system. NEW Chapter 6: Considering Objects Significantly expands the coverage of object-oriented development, a programming perspective being implemented by many companies. NEW Chapter 14: The Future of Software Engineering Discussion of the importance of technology transfer and the role of decision-making in software engineering. NEW Term ProjectThis hands-on project weaves the concepts of the book into a tangible example. The author applies concepts to real world settings at the macro level for development teams and at the micro level for individual developers. Excerpt. © Reprinted by permission. All rights reserved. Preface BRIDGING THE GAP BETWEEN RESEARCH AND PRACTICE Software engineering has come a long way since 1968, when the term was first used at a NATO conference. And software itself has entered our lives in ways that few had anticipated, even a decade ago. So a firm grounding in software engineering theory and practice is essential for understanding how to build good software and for evaluating the risks and opportunities that software presents in our everyday lives. This text represents the blending of the two current software engineering worlds: that of the practitioner, whose main focus is to build high-quality products that perform useful functions, and that the researcher, who strives to find ways to improve the quality of products and the productivity of those who build them. Designed for an undergraduate software engineering curriculum, this book paints a pragmatic picture of software engineering research and practices. Examples speak to a student’s limited experience but illustrate clearly how large software development projects progress from need to idea to reality. The book is also suitable for a graduate course offering an introduction to software engineering concepts and practices, or for practitioners wishing to expand their knowledge of the subject. It includes examples that represent the many situations readers are likely to experience: large projects and small, object-oriented and procedural, real-time and transaction processing, development and maintenance. In particular, Chapters 12, 13, and 14 present thought-provoking material designed to interest graduate students in current research topics. KEY FEATURES This text has many key features that distinguish it from other books. Unlike other software engineering books that consider measurement a separate issue, this book blends measurement with software engineering. Measurement issues are considered as an integral part of software engineering strategy, rather than as a separate discipline. This approach shows students how to involve quantitative assessment and improvement in their daily activities. They can evaluate their progress on an individual, team, and project basis. Similarly, concepts such as reuse, risk management, and quality engineering are embedded in the software engineering activities that are affected by them, instead of treating them as separate issues. Each chapter applies its concepts to two common examples: one that represents a typical information system, and another that represents a real-time system. Both examples are based on actual projects. The information system example describes the software needed to determine the price of advertising time for a large British television company. The real-time system is the control software for the Ariane-5 rocket; we look at the problems reported, and explore how software engineering techniques could have helped to locate and avoid some of them. Students can follow the progress of two typical projects, seeing how the various practices described in the book are merged into the technologies used to build systems. At the end of every chapter, the results are expressed in three ways: what the content of the chapter means for development teams, what it means for individual developers, and what it means for researchers. The student can easily review the highlights of each chapter and see the chapter’s relevance to both research and practice. The book has an associated Web page, containing current examples from the literature, links to Web pages for relevant tool and method vendors, and a study guide for students. It is on the Web that students can find real requirements documents, designs, code, test plans, and more, so they can see real software engineering project artifacts. Students seeking additional in-depth information are pointed to reputable accessible publications and Web sites. The Web pages are updated regularly to keep the material in the textbook current and include a facility for feedback to the author and the publisher. The book is replete with case studies and examples from the literature. Many of the one-page case studies shown as sidebars in the book are expanded on the Web page. The student can see how the book’s theoretical concepts are applied to real-life situations. Each chapter ends with thought-provoking questions about legal and ethical issues in software engineering. Students see software engineering in its social and political contexts. As with other sciences, software engineering decisions must be viewed in terms of the people their consequences will affect. Every chapter addresses both procedural and object-oriented development. In addition, a new chapter on object-oriented development explains the steps of an object-oriented development process. Using UML for common notation, each step is applied to a common example, from requirements specification through program design. The book has an annotated bibliography that points to many of the seminal papers in software engineering. In addition, the Web page points to annotated bibliographies and discussion groups for specialized areas, such as software reliability, fault tolerance, computer security, and more. The book has a solutions manual, available from Prentice Hall, as are PowerPoint slides with the figures, tables, and sample instructional slides. Each chapter includes a description of a term project, involving development of software for a mortgage processing system. The instructor may use this term project, or a variation of it, in class assignments. Each chapter ends with a list of key references for the concepts in the chapter, enabling students to find in-depth information about particular tools and methods discussed in the chapter. CONTENTS AND ORGANIZATION This text is organized in three parts. The first part (Chapters 1 to 3) motivates the reader, explaining why knowledge of software engineering is important to practitioners and researchers alike. Part I also discusses the need for understanding process issues and for doing careful project planning. Part II (Chapters 4 to 11) walks through the major steps of development and maintenance, regardless of the process model used to build the software: eliciting and checking the requirements, designing a solution to the problem, writing and testing the code, and turning it over to the customer. Part III (Chapters 12 to 14) focuses on evaluation and improvement. It looks at how we can assess the quality of our processes and products, and how to take steps to improve them. Chapter 1: Why Software Engineering? In this chapter we address our track record, motivating the reader and highlighting where in later chapters certain key issues are examined. In particular, we look at Wasserman’s key factors that help define software engineering: abstraction, analysis and design methods and notations, modularity and architecture, software life cycle and press, reuse, measurement, tools and integrated environments, and user interface and prototyping. We discuss the difference between computer science and software engineering, explaining some of the major types of problems that can be encountered, and laying the groundwork for the rest of the book. We also explore the need to take a systems approach to building software, and we introduce the two common examples that will be used in every chapter. We also introduce the context for the term project. Chapter 2: Modeling the Process and Life Cycle In this chapter, we present an overview of different types of process and life-cycle models, including the waterfall model, the V -model, the spiral model, and various prototyping models. We also describe several modeling techniques and tools, including systems dynamics, SADT, and other commonly-used approaches. Each of the two common examples is modeled in part with some of the techniques introduced here. Chapter 3: Planning and Managing the Project Here, we look at project planning and scheduling. We introduce notions such as activities and milestones, work breakdown structure, activity graphs, risk management, and costs and cost estimation. Estimation models are used to estimate the cost and schedule of the two common examples. We focus on actual case studies, including management of software development for the F-16 airplane and for Digital’s alpha AXP programs. Chapter 4: Capturing the Requirements In this chapter, we look at requirements analysis and specification. We explain the difference between functional and nonfunctional requirements, present several ways to describe different kinds of requirements, and discuss how to prototype requirements. We see how several types of formal methods can be used in specifying and evaluating requirements. Other topics discussed include requirements documentation, requirements reviews, requirements quality and how to measure it, requirements testability, and how to select a specification method. The chapter ends with application of some of the methods to the two common examples. Chapter 5: Designing the System This chapter focuses on architectural issues, and we begin by discussing Shaw and Garlan’s framework for software architecture. Next, we describe the difference between the conceptual design and the technical design. We discuss the roles of the personnel who perform the design and describe two basic approaches to design: composition and decomposition. Then, we identify characteristics of good design, introduce several design strategies, and give examples of several system design techniques and tools. It is in this chapter that the reader learns about client-server architecture, reusable design components, human-computer interface design, design for secure and reliable systems (including error handling and fault tolerance), design patterns, formal design methods, and how to assess design trade-offs. After explaining how to evaluate and validate the quality of a design, and how to document the results, we turn to issues of program design. Program design guidelines are explained, including top-down versus bottom-up, modularity and independence, and the difference between logical and physical design. We look at design for concurrency and for safety-critical systems, and we examine the design flaws that led to the Therac-25 malfunctions. We describe several design tools, and there is a thorough discussion of design quality and how to measure it. The chapter introduces design reuse, reviews, and inspections and explains the need to document design rationale. Finally, the chapter ends with examples of design for the information system and real-time examples. Chapter 6: Concerning Objects Chapter 6 takes a detour to consider the special properties of object-oriented development. We begin by describing use case scenarios, discussing how to capture objects and their characteristics from the natural language requirements. Next, we examine system design, to see how to generate the high-level information needed to find a solution. We then enrich the system design, adding nonfunctional requirements and details required in the program design. Employing UML and its constructs, we generate an object-oriented specification and design for a common example, the Royal Service Station. Taking a careful look at object-oriented measurement, we apply some of the common object-oriented metrics to the service station example. We note how to use changes in the metrics to help us decide how to allocate resources and search for faults. Finally, we apply object-oriented concepts to our information systems and real-time examples. Chapter 7: Writing the Programs In this chapter, we address issues in implementing the design to produce high-quality code. We discuss standards and procedures and suggest some simple programming guidelines. Examples are provided in a variety of languages, including both object-oriented and procedural. There are thorough discussions of the need for program documentation and an error-handling strategy, and the chapter ends by applying some of the concepts to the two common examples. Chapter 8: Testing the Programs In this chapter, we explore several aspects of testing programs. We distinguish conventional testing approaches from the cleanroom method, and we look at how to test a variety of systems. We present definitions and categories of software problems, and we discuss how orthogonal defect classification can make data collection and analysis more effective. We then explain the difference between unit testing and integration testing. Aler introducing several automated test tools and techniques, we explain the need for a testing life cycle and how the tools can be integrated into it. Finally, the chapter applies these concepts to the two common examples. Chapter 9: Testing the System We begin with principles of system testing, including reuse of test suites and data, and the need for careful configuration management. Concepts introduced include function testing, performance testing, acceptance testing, and installation testing. We look at the special needs of testing object-oriented systems. Several test tools are described, and the roles of test team members are discussed. Next, we introduce the reader to software reliability modeling, and issues of reliability, maintainability, and availability are discussed. The reader learns how to use the results of testing to estimate the likely characteristics of the delivered product. The several types of test documentation are introduced, too, and the chapter ends by describing the test strategies of the two common examples. Chapter 10: Delivering the System This chapter discusses the need for training and documentation and presents several examples of training and documents that could accompany the information system and real-time examples. Chapter 11: Maintaining the System In this chapter, we address the results of system change. We explain how changes can occur during the system’s life cycle, and how system design, code, test process, and documentation must accommodate them. Typical maintenance problems are discussed, as well as the need for careful configuration management. There is a thorough discussion of the use of measurement to predict likely changes, and to evaluate the effects of change. We look at reengineering and restructuring in the overall context of rejuvenating legacy systems. Finally, the two common examples are evaluated m terms of the likelihood of change. Chapter 12: Evaluating Products, Processes, and Resources Since many software engineering decisions involve the incorporation and integration of existing components, this chapter addresses ways to evaluate processes and products. It discusses the need for empirical evaluation and gives several examples to show how measurement can be used to establish a baseline for quality and productivity. We look at several quality models, how to evaluate systems for reusability, how to perform postmortems, and how to understand return on investment in information technology. These concepts are applied to the two common examples. Chapter 13: Improving Predictions, Products, Processes, and Resources This chapter builds on Chapter 11 by showing how prediction, product, process, and resource improvement can be accomplished. It contains several in-depth case studies to show how prediction models, inspection techniques, and other aspects of software engineering can be understood and improved using a variety of investigative techniques. This chapter ends with a set of guidelines for evaluating current situations and identifying opportunities for improvement. Chapter 14: The Future of Software Engineering In this final chapter, we look at several open issues in software engineering. We revisit Wasserman’s concepts to see how well we are doing as a discipline. In addition, we examine several issues in technology transfer and decision-making to determine if we do a good job at moving important ideas from research to practice.