Engenharia de Software - SOMMERVILLE

544

Click here to load reader

description

Engenharia de Software - 9 Edição - SOMMERVILLE

Transcript of Engenharia de Software - SOMMERVILLE

  • Sommerville_Cap_00.indd 1 07/06/2011 09:50:04

  • Sommerville_Cap_00.indd 2 07/06/2011 09:50:05

  • TraduoKalinka Oliveira

    Ivan Bosnic

    Reviso TcnicaProf. Dr. Kechi Hirama

    Escola Politcnica da Universidade de So Paulo (EPUSP). Departamento de Engenharia de Computao e Sistemas Digitais (PCS). Laboratrio de Tecnologia de Software (LTS). Grupo de Sistemas Complexos (GSC).

    So Paulo

    Brasil Argentina Colmbia Costa Rica Chile EspanhaGuatemala Mxico Peru Porto Rico Venezuela

    Sommerville_Cap_00.indd 3 07/06/2011 09:50:05

    So Paulo

    Brasil Argentina Colmbia Costa Rica Chile EspanhaGuatemala Mxico Peru Porto Rico Venezuela

  • 2011 by Pearson Education do Brasil 2011, 2006, 2005, 2001, 1996 by Pearson Education, Inc.

    Traduo autorizada a partir da edio original, em ingls, Software Engineering, 9th edition, publicada pela Pearson Education, Inc., sob o selo Prentice Hall.

    Todos os direitos reservados. Nenhuma parte desta publicao poder ser reproduzida ou transmitida de qualquer modo ou por qualquer outro meio, eletrnico ou mecnico, incluindo fotocpia, gravao ou qualquer outro tipo de sistema de

    armazenamento e transmisso de informao, sem prvia autorizao, por escrito, da Pearson Education do Brasil.

    Diretor editorial: Roger TrimerGerente editorial: Sabrina Cairo

    Editor de aquisio: Vincius SouzaCoordenadora de produo editorial: Thelma Babaoka

    Editora de texto: Aline MarquesPreparao: Renata Gonalves

    Reviso: Guilherme Summa e Camille MendrotCapa: Alexandre Mieda sobre projeto original de Elena Sidorova

    Editorao eletrnica e diagramao: Figurativa Editorial MM Ltda.

    2011Direitos exclusivos para a lngua portuguesa cedidos

    Pearson Education do Brasil,uma empresa do grupo Pearson Education

    Rua Nelson Francisco, 26, LimoCEP: 02712100 So Paulo SP

    Tel: (11) 21788686 Fax: (11) 21788688e-mail: [email protected]

    Dados Internacionais de Catalogao na Publicao (CIP)(Cmara Brasileira do Livro, SP, Brasil)

    Sommerville, IanEngenharia de Software / Ian Sommerville ; traduo Ivan Bosnic e Kalinka G.

    de O. Gonalves ; reviso tcnica Kechi Hirama. 9. ed. So Paulo : Pearson Prentice Hall, 2011.

    Ttulo original: Software engineering.

    ISBN 978-85-7936-108-1

    1. Engenharia de software I. Ttulo.

    11-02337 CDD-005.1ndice para catlogo sistemtico:

    1. Engenharia de Software 005.1

    Sommerville_Cap_00.indd 4 07/06/2011 09:50:06

    2011 by Pearson Education do Brasil 2011, 2006, 2005, 2001, 1996 by Pearson Education, Inc.

    Traduo autorizada a partir da edio original, em ingls, Software Engineering, 9th edition, publicada pela Pearson Education, Inc., sob o selo Prentice Hall.

    Todos os direitos reservados. Nenhuma parte desta publicao poder ser reproduzida ou transmitida de qualquer modo ou por qualquer outro meio, eletrnico ou mecnico, incluindo fotocpia, gravao ou qualquer outro tipo de sistema de

    armazenamento e transmisso de informao, sem prvia autorizao, por escrito, da Pearson Education do Brasil.

    Diretor editorial: Roger TrimerGerente editorial: Sabrina Cairo

    Editor de aquisio: Vincius SouzaCoordenadora de produo editorial: Thelma Babaoka

    Editora de texto: Aline MarquesPreparao: Renata Gonalves

    Reviso: Guilherme Summa e Camille MendrotCapa: Alexandre Mieda sobre projeto original de Elena Sidorova

    Editorao eletrnica e diagramao: Figurativa Editorial MM Ltda.

    1 reimpresso Julho 2012Direitos exclusivos para a lngua portuguesa cedidos

    Pearson Education do Brasil,uma empresa do grupo Pearson Education

    Rua Nelson Francisco, 26, LimoCEP: 02712100 So Paulo SP

    Tel: (11) 21788686 Fax: (11) 21788688e-mail: [email protected]

    Dados Internacionais de Catalogao na Publicao (CIP)(Cmara Brasileira do Livro, SP, Brasil)

    Sommerville, IanEngenharia de Software / Ian Sommerville ; traduo Ivan Bosnic e Kalinka G.

    de O. Gonalves ; reviso tcnica Kechi Hirama. 9. ed. So Paulo : Pearson Prentice Hall, 2011.

    Ttulo original: Software engineering.

    ISBN 978-85-7936-108-1

    1. Engenharia de software I. Ttulo.

    11-02337 CDD-005.1ndice para catlogo sistemtico:

    1. Engenharia de Software 005.1

    2011 by Pearson Education do Brasil 2011, 2006, 2005, 2001, 1996 by Pearson Education, Inc.

    Traduo autorizada a partir da edio original, em ingls, Software Engineering, 9th edition, publicada pela Pearson Education, Inc., sob o selo Prentice Hall.

    Todos os direitos reservados. Nenhuma parte desta publicao poder ser reproduzida ou transmitida de qualquer modo ou por qualquer outro meio, eletrnico ou mecnico, incluindo fotocpia, gravao ou qualquer outro tipo de sistema de

    armazenamento e transmisso de informao, sem prvia autorizao, por escrito, da Pearson Education do Brasil.

    Diretor editorial: Roger TrimerGerente editorial: Sabrina Cairo

    Editor de aquisio: Vincius SouzaCoordenadora de produo editorial: Thelma Babaoka

    Editora de texto: Aline MarquesPreparao: Renata Gonalves

    Reviso: Guilherme Summa e Camille MendrotCapa: Alexandre Mieda sobre projeto original de Elena Sidorova

    Editorao eletrnica e diagramao: Figurativa Editorial MM Ltda.

    1a reimpresso Julho 2012Direitos exclusivos para a lngua portuguesa cedidos

    Pearson Education do Brasil,uma empresa do grupo Pearson Education

    Rua Nelson Francisco, 26, LimoCEP: 02712100 So Paulo SP

    Tel: (11) 21788686 Fax: (11) 21788688e-mail: [email protected]

    Dados Internacionais de Catalogao na Publicao (CIP)(Cmara Brasileira do Livro, SP, Brasil)

    Sommerville, IanEngenharia de Software / Ian Sommerville ; traduo Ivan Bosnic e Kalinka G.

    de O. Gonalves ; reviso tcnica Kechi Hirama. 9. ed. So Paulo : Pearson Prentice Hall, 2011.

    Ttulo original: Software engineering.

    ISBN 978-85-7936-108-1

    1. Engenharia de software I. Ttulo.

    11-02337 CDD-005.1ndice para catlogo sistemtico:

    1. Engenharia de Software 005.1

    3a reimpresso dezembro 2013Direitos exclusivos para a lngua portuguesa cedidos

    Pearson Education do Brasil Ltda.,uma empresa do grupo Pearson Education

    Rua Nelson Francisco, 26CEP 02712-100 So Paulo SP BrasilFone: 11 2178-8686 Fax: 11 2178-8688

    e-mail: [email protected]

  • Sumrio

    Prefcio ................................................................................................................................................................................................................................... xi

    Parte 1 Introduo engenharia de software .............................................................. 1

    Captulo 1 Introduo ..................................................................................................................... 2

    1.1 Desenvolvimento profissional de software ........................................................................................................................................ 3

    1.2 tica na engenharia de software ............................................................................................................................................................... 9

    1.3 Estudos de caso .................................................................................................................................................................................................. 11

    Captulo 2 Processos de software .................................................................................................... 18

    2.1 Modelos de processo de software ..........................................................................................................................................................19

    2.2 Atividades do processo ................................................................................................................................................................................. 24

    2.3 Lidando com mudanas ............................................................................................................................................................................... 29

    2.4 Rational Unified Process (RUP) ..................................................................................................................................................................... 34

    Captulo 3 Desenvolvimento gil de software .................................................................................. 38

    3.1 Mtodos geis ..................................................................................................................................................................................................... 39

    3.2 Desenvolvimento gil e dirigido a planos ......................................................................................................................................... 42

    3.3 Extreme Programming ................................................................................................................................................................................... 44

    3.4 Gerenciamento gil de projetos .............................................................................................................................................................. 49

    3.5 Escalamento de mtodos geis ............................................................................................................................................................... 51

    Captulo 4 Engenharia de requisitos ................................................................................................ 57

    4.1 Requisitos funcionais e no funcionais................................................................................................................................................ 59

    4.2 O documento de requisitos de software ........................................................................................................................................... 63

    4.3 Especificao de requisitos ......................................................................................................................................................................... 65

    4.4 Processos de engenharia de requisitos ............................................................................................................................................... 69

    Sommerville_Cap_00.indd 5 07/06/2011 09:50:06

  • vi Engenharia de software

    4.5 Elicitao e anlise de requisitos.............................................................................................................................................................. 69

    4.6 Validao de requisitos .................................................................................................................................................................................. 76

    4.7 Gerenciamento de requisitos .................................................................................................................................................................... 77

    Captulo 5 Modelagem de sistemas ................................................................................................. 82

    5.1 Modelos de contexto ...................................................................................................................................................................................... 84

    5.2 Modelos de interao ..................................................................................................................................................................................... 86

    5.3 Modelos estruturais ......................................................................................................................................................................................... 89

    5.4 Modelos comportamentais ........................................................................................................................................................................ 93

    5.5 Engenharia dirigida a modelos ................................................................................................................................................................. 96

    Captulo 6 Projeto de arquitetura ................................................................................................. 103

    6.1 Decises de projeto de arquitetura .................................................................................................................................................... 105

    6.2 Vises de arquitetura .................................................................................................................................................................................... 107

    6.3 Padres de arquitetura ................................................................................................................................................................................ 108

    6.4 Arquiteturas de aplicaes ....................................................................................................................................................................... 115

    Captulo 7 Projeto e implementao ............................................................................................. 124

    7.1 Projeto orientado a objetos com UML .............................................................................................................................................. 125

    7.2 Padres de projeto ........................................................................................................................................................................................ 133

    7.3 Questes de implementao ................................................................................................................................................................. 135

    7.4 Desenvolvimento open source ............................................................................................................................................................... 139

    Captulo 8 Testes de software ....................................................................................................... 144

    8.1 Testes de desenvolvimento ..................................................................................................................................................................... 147

    8.2 Desenvolvimento dirigido a testes...................................................................................................................................................... 155

    8.3 Testes de release .............................................................................................................................................................................................. 157

    8.4 Testes de usurio ............................................................................................................................................................................................ 159

    Captulo 9 Evoluo de software ................................................................................................... 164

    9.1 Processos de evoluo ................................................................................................................................................................................ 166

    9.2 Dinmica da evoluo de programas ............................................................................................................................................... 169

    9.3 Manuteno de software .......................................................................................................................................................................... 170

    9.4 Gerenciamento de sistemas legados ................................................................................................................................................. 177

    Sommerville_Cap_00.indd 6 07/06/2011 09:50:16

  • viiSumrio

    Parte 2 Confiana e proteo ................................................................................... 183

    Captulo 10 Sistemas sociotcnicos ............................................................................................... 184

    10.1 Sistemas complexos ..................................................................................................................................................................................... 186

    10.2 Engenharia de sistemas .............................................................................................................................................................................. 191

    10.3 Aquisio de sistemas ................................................................................................................................................................................. 192

    10.4 Desenvolvimento de sistemas ............................................................................................................................................................... 194

    10.5 Operao de sistemas ................................................................................................................................................................................. 197

    Captulo 11 Confiana e proteo .................................................................................................. 202

    11.1 Propriedades da confiana ....................................................................................................................................................................... 203

    11.2 Disponibilidade e confiabilidade .......................................................................................................................................................... 206

    11.3 Segurana ........................................................................................................................................................................................................... 209

    11.4 Proteo ............................................................................................................................................................................................................... 211

    Captulo 12 Especificao de confiana e proteo ......................................................................... 216

    12.1 Especificao de requisitos dirigida a riscos .................................................................................................................................. 217

    12.2 Especificao de segurana ..................................................................................................................................................................... 218

    12.3 Especificao de confiabilidade ............................................................................................................................................................ 224

    12.4 Especificao de proteo ........................................................................................................................................................................ 229

    12.5 Especificao formal ..................................................................................................................................................................................... 232

    Captulo 13 Engenharia de confiana ............................................................................................ 237

    13.1 Redundncia e diversidade ...................................................................................................................................................................... 239

    13.2 Processos confiveis ..................................................................................................................................................................................... 240

    13.3 Arquiteturas de sistemas confiveis ................................................................................................................................................... 241

    13.4 Programao confivel ............................................................................................................................................................................... 247

    Captulo 14 Engenharia de proteo ............................................................................................. 255

    14.1 Gerenciamento de riscos de proteo ............................................................................................................................................. 257

    14.2 Projeto para proteo .................................................................................................................................................................................. 261

    14.3 Sobrevivncia de sistemas ........................................................................................................................................................................ 269

    Captulo 15 Garantia de confiana e proteo ................................................................................ 274

    15.1 Anlise esttica ................................................................................................................................................................................................ 275

    15.2 Testes de confiabilidade ............................................................................................................................................................................. 279

    15.3 Testes de proteo......................................................................................................................................................................................... 282

    Sommerville_Cap_00.indd 7 06/06/2011 16:44:57

  • viii Engenharia de software

    15.4 Garantia de processo ................................................................................................................................................................................... 283

    15.5 Casos de segurana e confiana ........................................................................................................................................................... 286

    Parte 3 Engenharia de software avanada ................................................................ 295

    Captulo 16 Reso de software ..................................................................................................... 296

    16.1 O panorama de reso .................................................................................................................................................................................. 298

    16.2 Frameworks de aplicaes ........................................................................................................................................................................ 300

    16.3 Linhas de produto de software ............................................................................................................................................................. 303

    16.4 Reso de produtos COTS ........................................................................................................................................................................... 307

    Captulo 17 Engenharia de software baseada em componentes ...................................................... 315

    17.1 Componentes e modelos de componentes ................................................................................................................................. 317

    17.2 Processos CBSE ................................................................................................................................................................................................ 321

    17.3 Composio de componentes .............................................................................................................................................................. 326

    Captulo 18 Engenharia de software distribudo ............................................................................ 333

    18.1 Questes sobre sistemas distribudos ............................................................................................................................................... 334

    18.2 Computao cliente-servidor ................................................................................................................................................................. 339

    18.3 Padres de arquitetura para sistemas distribudos ................................................................................................................... 341

    18.4 Software como um servio ...................................................................................................................................................................... 349

    Captulo 19 Arquitetura orientada a servios ................................................................................. 355

    19.1 Servios como componentes reusveis .......................................................................................................................................... 359

    19.2 Engenharia de servios ............................................................................................................................................................................... 361

    19.3 Desenvolvimento de software com servios ................................................................................................................................ 368

    Captulo 20 Software embutido .................................................................................................... 375

    20.1 Projeto de sistemas embutidos ............................................................................................................................................................. 377

    20.2 Padres de arquitetura ................................................................................................................................................................................ 382

    20.3 Anlise de timing ............................................................................................................................................................................................ 387

    20.4 Sistemas operacionais de tempo real ................................................................................................................................................ 390

    Captulo 21 Engenharia de software orientada a aspectos .............................................................. 395

    21.1 Separao de interesses ............................................................................................................................................................................. 396

    21.2 Aspectos, pontos de juno e pontos de corte .......................................................................................................................... 399

    21.3 Engenharia de software com aspectos ............................................................................................................................................ 403

    Sommerville_Cap_00.indd 8 06/06/2011 16:44:58

  • ixSumrio

    Parte 4 Gerenciamento de software ......................................................................... 413

    Captulo 22 Gerenciamento de projetos......................................................................................... 414

    22.1 Gerenciamento de riscos........................................................................................................................................................................... 415

    22.2 Gerenciamento de pessoas ..................................................................................................................................................................... 421

    22.3 Trabalho de equipe ....................................................................................................................................................................................... 423

    Captulo 23 Planejamento de projeto ............................................................................................ 431

    23.1 Definio de preo de software ............................................................................................................................................................ 433

    23.2 Desenvolvimento dirigido a planos .................................................................................................................................................. 434

    23.3 Programao de projeto ............................................................................................................................................................................ 436

    23.4 Planejamento gil .......................................................................................................................................................................................... 440

    23.5 Tcnicas de estimativa ................................................................................................................................................................................ 442

    Captulo 24 Gerenciamento de qualidade ...................................................................................... 454

    24.1 Qualidade de software ................................................................................................................................................................................ 456

    24.2 Padres de software ..................................................................................................................................................................................... 458

    24.3 Revises e inspees .................................................................................................................................................................................... 462

    24.4 Medies e mtricas de software ........................................................................................................................................................ 465

    Captulo 25 Gerenciamento de configurao ................................................................................. 475

    25.1 Gerenciamento de mudanas................................................................................................................................................................ 477

    25.2 Gerenciamento de verses ...................................................................................................................................................................... 481

    25.3 Construo de sistemas ............................................................................................................................................................................. 484

    25.4 Gerenciamento de releases ...................................................................................................................................................................... 488

    Captulo 26 Melhoria de processos ................................................................................................ 493

    26.1 O processo de melhoria de processos .............................................................................................................................................. 495

    26.2 Medio de processos ................................................................................................................................................................................ 497

    26.3 Anlise de processos .................................................................................................................................................................................... 499

    26.4 Mudana de processos ............................................................................................................................................................................... 502

    26.5 Framework CMMI de melhorias de processos .............................................................................................................................. 504

    Glossrio ............................................................................................................................................................................................................................ 511ndice remissivo ............................................................................................................................................................................................................ 521

    Sommerville_Cap_00.indd 9 06/06/2011 16:44:58

  • Sommerville_Cap_00.indd 10 07/06/2011 09:50:06

  • Prefcio

    Quando estava escrevendo os ltimos captulos deste livro, no vero de 2009, percebi que a engenharia de software havia completado 40 anos. O nome engenharia de software foi proposto em 1969, na conferncia da OTAN, para a discusso de problemas relacionados com desenvolvimento de software grandes softwares atrasavam, no entre-gavam a funcionalidade de que os usurios necessitavam, custavam mais do que o esperado e no eram confiveis. Eu no estava presente na conferncia, porm, um ano depois, escrevi o meu primeiro programa e iniciei a minha carreira profissional em software.

    O progresso da engenharia de software foi excepcional durante a minha carreira. Nossas sociedades no po-deriam funcionar sem os grandes e profissionais sistemas de software. Para construir sistemas corporativos, existe uma sopa de letrinhas de tecnologias J2EE, .NET, SaaS, SAP, BPEL4WS, SOAP, CBSE etc. que suportam o de-senvolvimento e a implantao de grandes aplicaes corporativas. Os servios e a infraestrutura nacionais energia, comunicaes e transporte dependem de sistemas computacionais complexos e bastante confiveis. O software nos permitiu explorar o espao e criar a World Wide Web, o mais importante sistema de informao na histria da humanidade. Enfrentamos agora um conjunto novo de desafios: mudana climtica e tempo extremo, diminuio de recursos naturais, uma populao mundial que no para de crescer e que precisa ser alimentada e abrigada, terrorismo internacional e a necessidade de ajudar pessoas mais idosas a terem uma vida mais satisfat-ria e com mais qualidade. Precisamos de novas tecnologias para nos ajudar a resolver esses problemas, e o software certamente ter um papel fundamental nessas tecnologias.

    A engenharia de software , portanto, uma tecnologia de importncia crtica para o futuro da humanidade. Devemos continuar a educar engenheiros de software e a desenvolver a disciplina para podermos criar sistemas de software mais complexos. claro que ainda h problemas com os projetos de software. s vezes, o software ainda atrasa e custa mais do que o esperado. No entanto, no devemos deixar que esses problemas ofusquem os verdadeiros sucessos na engenharia de software e os mtodos e as tecnologias impressionantes de engenharia de software que foram desenvolvidos.

    A engenharia de software tornou-se uma rea to grande que impossvel cobrir todo o assunto em apenas um livro. Portanto, o meu foco estar em assuntos-chave que so fundamentais para todos os processos de de-senvolvimento e temas que abordam o desenvolvimento de sistemas confiveis e distribudos. H uma nfase crescente em mtodos geis e reso de software. Eu, francamente, acredito que os mtodos geis tm o seu lugar, mas tambm o tem a engenharia de software tradicional dirigida a planejamento. Temos de combinar o melhor dessas abordagens para construir sistemas de software melhores.

    Os livros refletem, inevitavelmente, as opinies e os prejulgamentos dos seus autores. Do mesmo modo, alguns leitores certamente discordaro das minhas opinies e da minha escolha de material. Tais discordncias so um reflexo saudvel da diversidade da disciplina e so essenciais para a sua evoluo. Mesmo assim, espero que todos os engenheiros de software e estudantes da engenharia de software possam encontrar aqui algo de interessante.

    Integrao com a Internet

    H uma quantidade incrvel de informaes sobre a engenharia de software na Internet e algumas pessoas questionam se livros como este ainda so necessrios. No entanto, a qualidade da informao disponvel bastan-

    Sommerville_Cap_00.indd 11 07/06/2011 09:50:07

  • xii Engenharia de software

    te questionvel, a informao s vezes no bem apresentada, e pode ser difcil encontrar aquilo que se procura. Consequentemente, eu acredito que os livros ainda tm, sim, um papel importante no ensino. Eles servem como um guia sobre o assunto e permitem que a informao sobre os mtodos e as tcnicas seja organizada e apresen-tada de forma coerente e de fcil leitura. Alm disso, eles proveem um ponto de partida para uma explorao mais aprofundada da literatura de pesquisa e do material disponveis na Internet.

    Acredito plenamente que os livros tm um futuro, mas somente se forem integrados e agregarem valor Inter-net. Por isso, este livro possui um Companion Website com materiais adicionais disponveis 24 horas por dia. Veja a seo Materiais de apoio neste Prefcio.

    Pblico-alvo

    O livro se destina, em primeiro lugar, a estudantes de faculdades e universidades que estejam frequentando au-las introdutrias ou avanadas de engenharia de sistemas e de software. Os engenheiros de software no mercado de trabalho podem achar o livro til como uma leitura geral e como um meio para atualizar os seus conhecimen-tos sobre assuntos como reso de software, projeto de arquitetura, confiana e proteo e melhoria de processos. Suponho que o leitor tenha concludo um curso introdutrio de programao e que esteja familiarizado com a terminologia de programao.

    Mudanas em relao s edies anteriores

    Esta edio conservou o material principal sobre a engenharia de software coberto em edies anteriores, porm eu revisei e atualizei todos os captulos e acrescentei material novo em diversos pontos. As mudanas mais importantes so:1. A reestruturao completa para tornar a obra mais fcil para se lecionar engenharia de software. O livro agora

    possui quatro, em vez de oito partes, e cada parte pode ser usada de forma independente ou em combinao com outras partes como uma base para o curso de engenharia de software. As quatro partes so uma introdu-o para engenharia de software, confiana e proteo, engenharia de software avanada e gerenciamento de engenharia de software.

    2. Vrios assuntos das edies anteriores so apresentados de forma mais concisa em um nico captulo, com material extra sendo movido para a Internet.

    3. Atualizei e revisei o contedo em todos os captulos. Estimo que entre 30% e 40% de todo o texto tenha sido totalmente reescrito.

    4. Adicionei novos captulos sobre desenvolvimento de software gil e sistemas embutidos.5. Assim como esses novos captulos, h material novo sobre engenharia dirigida a modelos, desenvolvimento

    open source, desenvolvimento dirigido a testes, modelo Swiss Cheese de Reason, arquiteturas de sistemas confiveis, anlise esttica e verificao de modelos, reso de COTS, software como um servio e planeja-mento gil.

    6. Um novo estudo de caso sobre um sistema de registro de pacientes que necessitam de tratamento para pro-blemas de sade mental foi usado em vrios captulos.

    Usando o livro para lecionar

    Organizei o livro de tal forma que possa ser usado em trs tipos diferentes de cursos de engenharia de software:1. Cursos gerais de introduo engenharia de software. A primeira parte do livro foi organizada especialmente para

    apoiar um curso de um semestre sobre introduo engenharia de software.2. Cursos introdutrios ou intermedirios sobre assuntos especficos da engenharia de software. Voc pode criar uma

    srie de cursos mais avanados usando os captulos das partes 2 at 4. Por exemplo, eu lecionei um curso sobre engenharia de sistemas crticos usando os captulos da Parte 2, junto com os captulos de gerenciamento de qualidade e gerenciamento de configurao.

    Sommerville_Cap_00.indd 12 06/06/2011 16:44:58

  • xiiiPrefcio

    3. Cursos mais avanados sobre assuntos mais especficos da engenharia de software. Nesse caso, os captulos do livro formam a base para o curso. Estes so, depois, acrescidos de leituras mais aprofundadas que exploram o assunto em mais detalhes. Por exemplo, um curso sobre o reso de software poderia ser baseado nos captulos 16, 17, 18 e 19.

    Materiais de apoio

    No Companion Website deste livro www.pearson.com.br/sommerville, professores e estudantes podem aces-sar materiais adicionais 24 horas por dia. Esto disponveis:

    Para professores:t Apresentaes em PowerPoint.t Sugestes de como utilizar o livro em sala de aula (em ingls).t Banco de exerccios (em ingls).t Manual de solues (em ingls).

    Esse material de uso exclusivo dos professores e est protegido por senha. Para ter acesso a eles, os pro-fessores que adotam o livro devem entrar em contato com seu representante Pearson ou enviar e-mail para [email protected].

    Para estudantes:t Estudos de caso fornecem informaes adicionais sobre os estudos de caso usados no livro (bomba de insu-

    lina, sistema de sade mental, sistema meteorolgico remoto), assim como informaes sobre outros estudos de caso, como a falha do lanador Ariane 5.

    t Captulos adicionais existem quatro captulos adicionais que cobrem mtodos formais, projetos de intera-o, documentao e arquiteturas de aplicaes.

    Agradecimentos

    Um grande nmero de pessoas contribuiu durante anos por a evoluo deste livro e eu gostaria de agradecer a todos (revisores, estudantes e usurios do livro) que comentaram as edies anteriores e fizeram sugestes cons-trutivas para as mudanas.

    Gostaria de agradecer particularmente minha famlia (Anne, Ali e Jane) por sua ajuda e apoio enquanto o livro estava sendo escrito. Um obrigado especial para a minha filha Jane, que descobriu um talento para reviso e edio. Ela foi excepcionalmente til ao ler o livro inteiro e fez um timo trabalho detectando e corrigindo um nmero grande de erros gramaticais e de digitao.

    Ian Sommerville

    Sommerville_Cap_00.indd 13 07/06/2011 09:50:07

    xiiiPrefcio

    3. Cursos mais avanados sobre assuntos mais especficos da engenharia de software. Nesse caso, os captulos do livro formam a base para o curso. Estes so, depois, acrescidos de leituras mais aprofundadas que exploram o assunto em mais detalhes. Por exemplo, um curso sobre o reso de software poderia ser baseado nos captulos 16, 17, 18 e 19.

    Materiais de apoio

    No Companion Website deste livro www.pearson.com.br/sommerville, professores e estudantes podem aces-sar materiais adicionais 24 horas por dia. Esto disponveis:

    Para professores:t Apresentaes em PowerPoint.t Sugestes de como utilizar o livro em sala de aula (em ingls).t Banco de exerccios (em ingls).t Manual de solues (em ingls).

    Esse material de uso exclusivo dos professores e est protegido por senha. Para ter acesso a eles, os pro-fessores que adotam o livro devem entrar em contato com seu representante Pearson ou enviar e-mail para [email protected].

    Para estudantes:t Estudos de caso fornecem informaes adicionais sobre os estudos de caso usados no livro (bomba de insu-

    lina, sistema de sade mental, sistema meteorolgico remoto), assim como informaes sobre outros estudos de caso, como a falha do lanador Ariane 5.

    t Captulos adicionais existem quatro captulos adicionais que cobrem mtodos formais, projetos de intera-o, documentao e arquiteturas de aplicaes.

    Agradecimentos

    Um grande nmero de pessoas contribuiu durante anos por a evoluo deste livro e eu gostaria de agradecer a todos (revisores, estudantes e usurios do livro) que comentaram as edies anteriores e fizeram sugestes cons-trutivas para as mudanas.

    Gostaria de agradecer particularmente minha famlia (Anne, Ali e Jane) por sua ajuda e apoio enquanto o livro estava sendo escrito. Um obrigado especial para a minha filha Jane, que descobriu um talento para reviso e edio. Ela foi excepcionalmente til ao ler o livro inteiro e fez um timo trabalho detectando e corrigindo um nmero grande de erros gramaticais e de digitao.

    Ian Sommerville

    Sommerville_Cap_00.indd 13 07/06/2011 09:50:07

    xiiiPrefcio

    3. Cursos mais avanados sobre assuntos mais especficos da engenharia de software. Nesse caso, os captulos do livro formam a base para o curso. Estes so, depois, acrescidos de leituras mais aprofundadas que exploram o assunto em mais detalhes. Por exemplo, um curso sobre o reso de software poderia ser baseado nos captulos 16, 17, 18 e 19.

    Materiais de apoio

    No Companion Website deste livro www.pearson.com.br/sommerville, professores e estudantes podem aces-sar materiais adicionais 24 horas por dia. Esto disponveis:

    Para professores:t Apresentaes em PowerPoint.t Sugestes de como utilizar o livro em sala de aula (em ingls).t Banco de exerccios (em ingls).t Manual de solues (em ingls).

    Esse material de uso exclusivo dos professores e est protegido por senha. Para ter acesso a eles, os pro-fessores que adotam o livro devem entrar em contato com seu representante Pearson ou enviar e-mail para [email protected].

    Para estudantes:t Estudos de caso fornecem informaes adicionais sobre os estudos de caso usados no livro (bomba de insu-

    lina, sistema de sade mental, sistema meteorolgico remoto), assim como informaes sobre outros estudos de caso, como a falha do lanador Ariane 5.

    t Captulos adicionais existem quatro captulos adicionais que cobrem mtodos formais, projetos de intera-o, documentao e arquiteturas de aplicaes.

    Agradecimentos

    Um grande nmero de pessoas contribuiu durante anos por a evoluo deste livro e eu gostaria de agradecer a todos (revisores, estudantes e usurios do livro) que comentaram as edies anteriores e fizeram sugestes cons-trutivas para as mudanas.

    Gostaria de agradecer particularmente minha famlia (Anne, Ali e Jane) por sua ajuda e apoio enquanto o livro estava sendo escrito. Um obrigado especial para a minha filha Jane, que descobriu um talento para reviso e edio. Ela foi excepcionalmente til ao ler o livro inteiro e fez um timo trabalho detectando e corrigindo um nmero grande de erros gramaticais e de digitao.

    Ian Sommerville

    Sommerville_Cap_00.indd 13 07/06/2011 09:50:07

    xiiiPrefcio

    3. Cursos mais avanados sobre assuntos mais especficos da engenharia de software. Nesse caso, os captulos do livro formam a base para o curso. Estes so, depois, acrescidos de leituras mais aprofundadas que exploram o assunto em mais detalhes. Por exemplo, um curso sobre o reso de software poderia ser baseado nos captulos 16, 17, 18 e 19.

    Materiais de apoio

    No Companion Website deste livro www.pearson.com.br/sommerville, professores e estudantes podem aces-sar materiais adicionais 24 horas por dia. Esto disponveis:

    Para professores:t Apresentaes em PowerPoint.t Sugestes de como utilizar o livro em sala de aula (em ingls).t Banco de exerccios (em ingls).t Manual de solues (em ingls).

    Esse material de uso exclusivo dos professores e est protegido por senha. Para ter acesso a eles, os pro-fessores que adotam o livro devem entrar em contato com seu representante Pearson ou enviar e-mail para [email protected].

    Para estudantes:t links teis indicaes de sites para aprofundamento dos tpicos estudados.t Estudos de caso fornecem informaes adicionais sobre os estudos de caso usados no livro (bomba de insu-

    lina, sistema de sade mental, sistema meteorolgico remoto), assim como informaes sobre outros estudos de caso, como a falha do lanador Ariane 5.

    t Captulos adicionais existem quatro captulos adicionais que cobrem mtodos formais, projetos de intera-o, documentao e arquiteturas de aplicaes.

    Agradecimentos

    Um grande nmero de pessoas contribuiu durante anos por a evoluo deste livro e eu gostaria de agradecer a todos (revisores, estudantes e usurios do livro) que comentaram as edies anteriores e fizeram sugestes cons-trutivas para as mudanas.

    Gostaria de agradecer particularmente minha famlia (Anne, Ali e Jane) por sua ajuda e apoio enquanto o livro estava sendo escrito. Um obrigado especial para a minha filha Jane, que descobriu um talento para reviso e edio. Ela foi excepcionalmente til ao ler o livro inteiro e fez um timo trabalho detectando e corrigindo um nmero grande de erros gramaticais e de digitao.

    Ian Sommerville

    No Companion Website deste livro (www.pearson.com.br/sommerville) professores e estudantes podem aces-

  • Sommerville_Cap_00.indd 14 07/06/2011 09:50:07

  • 1 2 3 4PARTE

    Introduo engenharia de software

    O objetivo nesta parte do livro fornecer uma introduo geral engenharia de software. Apre-sento conceitos importantes, como processos de software e mtodos geis, e descrevo as atividades essenciais para o desenvolvimento de software, desde a especificao inicial do software at a evolu-o do sistema. Nesta primeira parte, os captulos foram concebidos para darem suporte a um curso de engenharia de software de um semestre.

    O Captulo 1 uma apresentao geral que apresenta a engenharia de software profissional e define alguns conceitos da rea. Tambm escrevi uma breve discusso sobre as questes ticas na engenharia de software. Acho que importante os engenheiros de software pensarem sobre as im-plicaes mais amplas do seu trabalho. Este captulo tambm apresenta trs estudos de caso, um sistema de gerenciamento de registros de pacientes em tratamento para problemas de sade mental, um sistema de controle para uma bomba de insulina porttil e um sistema meteorolgico no deserto.

    Os captulos 2 e 3 abrangem os processos de engenharia de software e desenvolvimento gil. No Captulo 2, apresento modelos genricos de processos de software, como o modelo em cascata, e discuto as atividades bsicas que so parte desses processos. O Captulo 3 suplementa esse, com uma discusso sobre mtodos geis de desenvolvimento de engenharia de software. Uso ainda a Extreme Programming como exemplo de mtodo gil, mas neste captulo tambm fao uma leve introduo ao Scrum.

    O restante dos captulos desta parte so descries detalhadas das atividades de processo de sof-tware, as quais sero introduzidas no Captulo 2. O Captulo 4 aborda o tema crtico de importncia de engenharia de requisitos, em que so definidos os requisitos que especificam o que um sistema deve fazer. O Captulo 5 apresenta a modelagem de sistemas usando a UML centrada no uso de diagramas de caso de uso, diagramas de classe, diagramas de sequncia e diagramas de estado para a modela-gem de um sistema de software. O Captulo 6 apresenta os projetos de arquitetura, em que se discute a importncia da arquitetura e do uso de padres em projetos de software.

    O Captulo 7 apresenta o projeto orientado a objetos e o uso de padres de projeto. Apresento tambm importantes questes de implementao reuso, gerenciamento de configurao e de-senvolvimento host-target, alm de discutir o desenvolvimento open source. O Captulo 8 se concentra nos testes de software desde os testes unitrios durante o desenvolvimento do sistema at o teste de releases de software. Discuto ainda o uso do desenvolvimento dirigido a testes de uma perspectiva pioneira em mtodos geis, mas de grande aplicabilidade. Finalmente, o Captulo 9 apresenta uma viso geral dos assuntos relacionados evoluo de software. Abrange os processos de evoluo e manuteno de software, e gerenciamento de sistemas legados.

    Sommerville_Cap_01.indd 1 3/6/2011 17:55:09

  • CAPTULO

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

    1.1 Desenvolvimento profissional de software1.2 tica na engenharia de software1.3 Estudos de caso

    Cont

    edo

    IntroduoObjetivos

    Os objetivos deste captulo so fazer uma introduo engenharia de software e fornecer uma base para a compreenso do restante do livro. Depois de ler este captulo, voc:t entender o que engenharia de software e por que ela im-

    portante;t entender que o desenvolvimento de diferentes tipos de siste-

    mas de software pode requerer diferentes tcnicas de engenharia de soft ware;t entender algumas questes ticas e profissionais importantes

    para engenheiros de software;t ter conhecimento de trs sistemas de tipos diferentes que sero

    usados como exemplos neste livro.

    O mundo moderno no poderia existir sem o software. Infraestruturas e servios nacionais so controlados por sis-temas computacionais, e a maioria dos produtos eltricos inclui um computador e um software que o controla. A manufatura e a distribuio industriais so totalmente informatizadas, assim como o sistema financeiro. A rea de entrete-nimento, incluindo a indstria da msica, jogos de computador, cinema e televiso, faz uso intensivo de software. Portanto, a engenharia de software essencial para o funcionamento de sociedades nacionais e internacionais.

    Os sistemas de software so abstratos e intangveis. Eles no so restringidos pelas propriedades dos materiais, nem governados pelas leis da fsica ou pelos processos de manufatura. Isso simplifica a engenharia de software, porque no h limites naturais para o potencial do software. No entanto, devido a essa falta de restries fsicas, os sistemas de software podem se tornar extremamente complexos de modo muito rpido, difceis de entender e caros para alterar.

    Existem vrios tipos de sistemas de software, desde os simples sistemas embutidos at os sistemas de informaes complexos, de alcance mundial. No faz sentido procurar notaes, mtodos ou tcnicas universais para a engenharia de software, porque diferentes tipos de software exigem abordagens diferentes. Desenvolver um sistema de informaes cor-porativo totalmente diferente de desenvolver um controlador para um instrumento cientfico. Nenhum desses sistemas tem muito em comum com um jogo computacional com grficos intensos. Todas essas aplicaes precisam de engenha-ria de software, embora no necessitem das mesmas tcnicas.

    Ainda existem muitos relatos e projetos de software que deram errado e resultaram em falhas de software. A engenha-ria de software criticada por ser inadequada para o desenvolvimento moderno de software. No entanto, no meu ponto de vista, muitas dessas falhas so consequncia de dois fatores:

    1. Aumento de demanda. Conforme novas tcnicas de engenharia de software nos auxiliam a construir sistemas maio-res e mais complexos, as demandas mudam. Os sistemas tm de ser construdos e entregues mais rapidamente;

    Sommerville_Cap_01.indd 2 06/06/2011 16:52:06

  • 3Captulo 1 Introduo engenharia de software

    sistemas maiores e at mais complexos so requeridos; sistemas devem ter novas capacidades que antes eram consideradas impossveis. Como os mtodos de engenharia de software existentes no conseguem lidar com isso, novas tcnicas de engenharia de software precisam ser desenvolvidas para atender a essas novas demandas.

    2. Expectativas baixas. relativamente fcil escrever programas computacionais sem usar tcnicas e mtodos de en-genharia de software. Muitas empresas foram foradas a desenvolver softwares medida que seus produtos e ser-vios evoluram. Elas no usam mtodos de engenharia de software no dia a dia. Consequentemente, seu software frequentemente mais caro e menos confivel do que deveria ser. Precisamos de educao e treinamento em engenharia de software para solucionar esses problemas.

    Engenheiros de software tm o direito de se orgulhar de suas conquistas. claro que ainda temos problemas em desenvolver softwares complexos, mas, sem a engenharia de software, no teramos explorado o espao, no teramos a Internet ou as telecomunicaes modernas. Todas as formas de viagem seriam mais perigosas e caras. A engenharia de software contribuiu muito, e tenho certeza de que suas contribuies no sculo XXI sero maiores ainda.

    1.1 Desenvolvimento profissional de softwareInmeras pessoas escrevem programas. Pessoas envolvidas com negcios escrevem programas em pla-

    nilhas para simplificar seu trabalho; cientistas e engenheiros escrevem programas para processar seus dados experimentais; e h aqueles que escrevem programas como hobby, para seu prprio interesse e diverso. No entanto, a maior parte do desenvolvimento de software uma atividade profissional, em que o software de-senvolvido para um propsito especfico de negcio, para incluso em outros dispositivos ou como produtos de software como sistemas de informao, sistemas CAD etc. O software profissional, o que usado por algum alm do seu desenvolvedor, normalmente criado por equipes, em vez de indivduos. Ele mantido e alterado durante sua vida.

    A engenharia de software tem por objetivo apoiar o desenvolvimento profissional de software, mais do que a programao individual. Ela inclui tcnicas que apoiam especificao, projeto e evoluo de programas, que normalmente no so relevantes para o desenvolvimento de software pessoal. Para ajud-lo a ter uma viso geral sobre o que trata a engenharia de software, listei algumas perguntas comuns na Tabela 1.1.

    Muitas pessoas pensam que software simplesmente outra palavra para programas de computador. No en-tanto, quando falamos de engenharia de software, no se trata apenas do programa em si, mas de toda a docu-mentao associada e dados de configuraes necessrios para fazer esse programa operar corretamente. Um sistema de software desenvolvido profissionalmente , com frequncia, mais do que apenas um programa; ele normalmente consiste em uma srie de programas separados e arquivos de configurao que so usados para configurar esses programas. Isso pode incluir documentao do sistema, que descreve a sua estrutura; docu-mentao do usurio, que explica como usar o sistema; e sites, para usurios baixarem a informao recente do produto.

    Essa uma diferena importante entre desenvolvimento de software profissional e amador. Se voc est es-crevendo um programa para si mesmo, que ningum mais usar, voc no precisa se preocupar em escrever o manual do programa, documentar sua arquitetura etc. No entanto, se voc est escrevendo um software que outras pessoas usaro e no qual outros engenheiros faro alteraes, ento voc provavelmente deve fornecer informao adicional, assim como o cdigo do programa.

    Engenheiros de software se preocupam em desenvolver produtos de software (ou seja, software que pode ser vendido para um cliente). Existem dos tipos de produtos de software:1. Produtos genricos. Existem sistemas stand-alone, produzidos por uma organizao de desenvolvimento e

    vendidos no mercado para qualquer cliente que esteja interessado em compr-los. Exemplos desse tipo de produto incluem software para PCs, como ferramentas de banco de dados, processadores de texto, pacotes grficos e gerenciamento de projetos. Tambm incluem as chamadas aplicaes verticais projetadas para um propsito especfico, como sistemas de informao de bibliotecas, sistemas de contabilidade ou sistemas de manuteno de registros odontolgicos.

    2. Produtos sob encomenda. Estes so os sistemas encomendados por um cliente em particular. Uma empresa de software desenvolve o software especialmente para esse cliente. Exemplos desse tipo de software so sistemas de controle de dispositivos eletrnicos, sistemas escritos para apoiar um processo de negcio especfico e sistemas de controle de trfego areo.

    Sommerville_Cap_01.indd 3 06/06/2011 16:52:06

  • 4 Engenharia de software

    Uma diferena importante entre esses tipos de software que, em softwares genricos, a organizao que o desenvolve controla sua especificao. Para produtos sob encomenda, a especificao normalmente desenvol-vida e controlada pela empresa que est adquirindo o software. Os desenvolvedores de software devem trabalhar de acordo com essa especificao.

    No entanto, a distino entre esses tipos de produtos de software est se tornando cada vez mais obscura. Mais e mais sistemas vm sendo construdos tendo por base um produto genrico, que ento adaptado para atender aos requisitos de um cliente. Sistemas ERP (sistema integrado de gesto empresarial, do ingls enterprise resourse planning), como o sistema SAP, so os melhores exemplos dessa abordagem. Nesse caso, um sistema grande e complexo adaptado para uma empresa, incorporando informaes sobre as regras e os processos de negcio, relatrios necessrios etc.

    Quando falamos sobre a qualidade do software profissional, devemos levar em conta que o software usado e alterado pelas pessoas, alm de seus desenvolvedores. A qualidade, portanto, implica no apenas o que o software faz. Ao contrrio, ela tem de incluir o comportamento do software enquanto ele est executando, bem como a estrutura e a organizao dos programas do sistema e a documentao associada. Isso se reflete nos atributos de software chamados no funcionais ou de qualidade. Exemplos desses atributos so o tempo de resposta do sof-tware a uma consulta do usurio e a compreenso do cdigo do programa.

    Um conjunto especfico de atributos que voc pode esperar de um software obviamente depende da aplicao. Portanto, um sistema bancrio deve ser seguro, um jogo interativo deve ser gil, um sistema de comutao de telefo-nia deve ser confivel, e assim por diante. Tudo isso pode ser generalizado em um conjunto de atributos sumarizados na Tabela 1.2, que eu acredito serem as caractersticas essenciais de um sistema profissional de software.

    Tabela 1.1 Perguntas frequentes sobre software

    Pergunta Resposta

    O que software? Softwares so programas de computador e documentao associada. Produtos de software podem ser desenvolvidos para um cliente especfico ou para o mercado em geral.

    Quais so os atributos de um bom software?

    Um bom software deve prover a funcionalidade e o desempenho requeridos pelo usurio; alm disso, deve ser confivel e fcil de manter e usar.

    O que engenharia de software?

    uma disciplina de engenharia que se preocupa com todos os aspectos de produo de software.

    Quais so as principais atividades da engenharia de software?

    Especificao de software, desenvolvimento de software, validao de software e evoluo de software.

    Qual a diferena entre engenharia de software e cincia da computao?

    Cincia da computao foca a teoria e os fundamentos; engenharia de software preocupa-se com o lado prtico do desenvolvimento e entrega de softwares teis.

    Qual a diferena entre engenharia de software e engenharia de sistemas?

    Engenharia de sistemas se preocupa com todos os aspectos do desenvolvimento de sistemas computacionais, incluindo engenharia de hardware, software e processo. Engenharia de software uma parte especfica desse processo mais genrico.

    Quais so os principais desafios da engenharia de software?

    Lidar com o aumento de diversidade, demandas pela diminuio do tempo para entrega e desenvolvimento de software confivel.

    Quais so os custos da engenharia de software?

    Aproximadamente 60% dos custos de software so de desenvolvimento; 40% so custos de testes. Para software customizado, os custos de evoluo frequentemente superam os custos de desenvolvimento.

    Quais so as melhores tcnicas e mtodos da engenharia de software?

    Enquanto todos os projetos de software devem ser gerenciados e desenvolvidos profissionalmente, tcnicas diferentes so adequadas para tipos de sistemas diferentes. Por exemplo, jogos devem ser sempre desenvolvidos usando uma srie de prottipos, enquanto sistemas de controle crticos de segurana requerem uma especificao analisvel e completa. Portanto, no se pode dizer que um mtodo melhor que outro.

    Quais diferenas foram feitas pela Internet na engenharia de software?

    A Internet tornou servios de software disponveis e possibilitou o desenvolvimento de sistemas altamente distribudos baseados em servios. O desenvolvimento de sistemas baseados em Web gerou importantes avanos nas linguagens de programao e reso de software.

    Sommerville_Cap_01.indd 4 06/06/2011 16:52:07

  • 5Captulo 1 Introduo engenharia de software

    1.1.1 Engenharia de software

    Engenharia de software uma disciplina de engenharia cujo foco est em todos os aspectos da produo de software, desde os estgios iniciais da especificao do sistema at sua manuteno, quando o sistema j est sendo usado. H duas expresses importantes nessa definio:1. Disciplina de engenharia. Engenheiros fazem as coisas funcionarem. Eles aplicam teorias, mtodos e ferramen-

    tas onde for apropriado. No entanto, eles os usam seletivamente e sempre tentam descobrir as solues para os problemas, mesmo quando no h teorias e mtodos aplicveis. Os engenheiros tambm reconhecem que devem trabalhar de acordo com as restries organizacionais e financeiras, ento buscam solues dentro dessas restries.

    2. Todos os aspectos da produo de software. A engenharia de software no se preocupa apenas com os processos tcnicos do desenvolvimento de software. Ela tambm inclui atividades como gerenciamento de projeto de software e desenvolvimento de ferramentas, mtodos e teorias para apoiar a produo de software.Engenharia tem a ver com obter resultados de qualidade requeridos dentro do cronograma e do oramento.

    Isso frequentemente envolve ter compromissos engenheiros no podem ser perfeccionistas. Por outro lado, as pessoas que escrevem programas para si mesmas podem gastar o tempo que quiserem com o desenvolvimento do programa.

    Em geral, os engenheiros de software adotam uma abordagem sistemtica e organizada para seu trabalho, pois essa costuma ser a maneira mais eficiente de produzir software de alta qualidade. No entanto, engenharia tem tudo a ver com selecionar o mtodo mais adequado para um conjunto de circunstncias, ento uma abordagem mais criativa e menos formal pode ser eficiente em algumas circunstncias. Desenvolvimento menos formal particularmente adequado para o desenvolvimento de sistemas Web, que requerem uma mistura de habilidades de software e de projeto.

    Engenharia de software importante por dois motivos:1. Cada vez mais, indivduos e sociedades dependem dos sistemas de software avanados. Temos de ser capazes

    de produzir sistemas confiveis econmica e rapidamente.2. Geralmente mais barato, a longo prazo, usar mtodos e tcnicas da engenharia de software para sistemas

    de software, em vez de simplesmente escrever os programas como se fossem algum projeto pessoal. Para a maioria dos sistemas, a maior parte do custo mudar o software depois que ele comea a ser usado.A abordagem sistemtica usada na engenharia de software , s vezes, chamada processo de software. Um

    processo de software uma sequncia de atividades que leva produo de um produto de software. Existem quatro atividades fundamentais comuns a todos os processos de software. So elas:1. Especificao de software, em que clientes e engenheiros definem o software a ser produzido e as restries

    de sua operao.2. Desenvolvimento de software, em que o software projetado e programado.

    Tabela 1.2 Atributos essenciais de um bom software

    Caractersticas do produto

    Descrio

    Manutenibilidade O software deve ser escrito de forma que possa evoluir para atender s necessidades dos clientes. Esse um atributo crtico, porque a mudana de software um requisito inevitvel de um ambiente de negcio em mudana.

    Confiana e proteo A confiana do software inclui uma srie de caractersticas como confiabilidade, proteo e segurana. Um software confivel no deve causar prejuzos fsicos ou econmicos no caso de falha de sistema. Usurios maliciosos no devem ser capazes de acessar ou prejudicar o sistema.

    Eficincia O software no deve desperdiar os recursos do sistema, como memria e ciclos do processador. Portanto, eficincia inclui capacidade de resposta, tempo de processamento, uso de memria etc.

    Aceitabilidade O software deve ser aceitvel para o tipo de usurio para o qual foi projetado. Isso significa que deve ser compreensvel, usvel e compatvel com outros sistemas usados por ele.

    Sommerville_Cap_01.indd 5 06/06/2011 16:52:07

  • 6 Engenharia de software

    3. Validao de software, em que o software verificado para garantir que o que o cliente quer.4. Evoluo de software, em que o software modificado para refletir a mudana de requisitos do cliente e do

    mercado.Tipos diferentes de sistemas necessitam de diferentes processos de desenvolvimento. Por exemplo, um software

    de tempo real em uma aeronave precisa ser completamente especificado antes de se iniciar o desenvolvimento. Em sistemas de comrcio eletrnico, a especificao e o programa so, normalmente, desenvolvidos juntos. Con-sequentemente, essas atividades genricas podem ser organizadas de formas diferentes e descritas em nvel de detalhamento diferente, dependendo do tipo de software em desenvolvimento. Descrevo processos de software em mais detalhes no Captulo 2.

    Engenharia de software se relaciona tanto com cincia da computao quanto com engenharia de sistemas:1. A cincia da computao se preocupa com as teorias e mtodos que sustentam sistemas computacionais e de

    software, ao passo que a engenharia de software se preocupa com os problemas prticos de produo de sof-tware. Algum conhecimento de cincia da computao essencial para engenheiros de software, da mesma forma que algum conhecimento de fsica essencial para engenheiros eltricos. No entanto, a teoria da cincia da computao , em geral, mais aplicvel para programas relativamente pequenos. Teorias elegantes da cin-cia da computao nem sempre podem ser aplicadas em problemas grandes e complexos que requerem uma soluo atravs de software.

    2. A engenharia de sistemas foca todos os aspectos do desenvolvimento e da evoluo de sistemas complexos em que o software tem o papel principal. A engenharia de sistemas se preocupa com desenvolvimento de hardware, projeto de polticas e processos e implantao de sistemas, alm de engenharia de software. Enge-nheiros de sistemas so envolvidos em especificao do sistema, definio da arquitetura geral e integrao de diferentes partes para criar o sistema acabado. Eles se preocupam menos com a engenharia dos componentes do sistema (hardware, software etc.).Conforme discutido na prxima seo, existem muitos tipos de software. No existe um mtodo ou uma tc-

    nica universal de engenharia de software que se aplique a todos. No entanto, h trs aspectos gerais que afetam vrios tipos diferentes de software:1. Heterogeneidade. Cada vez mais se requer dos sistemas que operem como sistemas distribudos atravs das

    redes que incluem diferentes tipos de computadores e dispositivos mveis. Alm de executar nos computa-dores de propsito geral, o software talvez tenha de executar em telefones mveis. Frequentemente, voc tem de integrar software novo com sistemas mais antigos, escritos em linguagens de programao diferentes. O desafio aqui desenvolver tcnicas para construir um software confivel que seja flexvel o suficiente para lidar com essa heterogeneidade.

    2. Mudana de negcio e social. Negcio e sociedade esto mudando de maneira incrivelmente rpida, medida que as economias emergentes se desenvolvem e as novas tecnologias se tornam disponveis. Deve ser possvel alterar seu software existente e desenvolver um novo software rapidamente. Muitas tcnicas tradicionais de engenharia de software consomem tempo, e a entrega de novos sistemas frequentemente mais demorada do que o planejado. preciso evoluir para que o tempo requerido para o software dar retorno a seus clientes seja reduzido.

    3. Segurana e confiana. Pelo fato de o software estar presente em todos os aspectos de nossas vidas, essencial que possamos confiar nele. Isso se torna verdade especialmente para sistemas remotos acessados atravs de uma pgina Web ou uma interface de web service. Precisamos ter certeza de que os usurios maliciosos no possam atacar nosso software e de que a proteo da informao seja mantida. claro que essas questes no so independentes. Por exemplo, pode ser necessrio fazer mudanas rpidas

    em um sistema legado para que se possa oferecer o mesmo com uma interface de web service. Para resolver esses desafios precisaremos de novas ferramentas e tcnicas, bem como de maneiras inovadoras de combinar e usar mtodos de engenharia de software existentes.

    1.1.2 Diversidade na engenharia de software

    Engenharia de software uma abordagem sistemtica para a produo de software; ela analisa questes prti-cas de custo, prazo e confiana, assim como as necessidades dos clientes e produtores do software. A forma como essa abordagem sistemtica realmente implementada varia dramaticamente de acordo com a organizao que

    Sommerville_Cap_01.indd 6 06/06/2011 16:52:07

  • 7Captulo 1 Introduo engenharia de software

    esteja desenvolvendo o software, o tipo de software e as pessoas envolvidas no processo de desenvolvimento. No existem tcnicas e mtodos universais na engenharia de software adequados a todos os sistemas e todas as empresas. Em vez disso, um conjunto diverso de mtodos e ferramentas de engenharia de software tem evoludo nos ltimos 50 anos.

    Talvez o fator mais significante em determinar quais tcnicas e mtodos de engenharia de software so mais importantes seja o tipo de aplicao a ser desenvolvida. Existem muitos tipos diferentes de aplicaes, incluindo:1. Aplicaes stand-alone. Essas so as aplicaes executadas em um computador local, como um PC. Elas con-

    tm toda a funcionalidade necessria e no precisam estar conectadas a uma rede. Exemplos de tais aplicaes so aplicativos de escritrio em um PC, programas CAD, software de manipulao de fotos etc.

    2. Aplicaes interativas baseadas em transaes. So aplicaes que executam em um computador remoto, aces-sadas pelos usurios a partir de seus computadores ou terminais. Certamente, aqui so includas aplicaes Web como aplicaes de comrcio eletrnico em que voc pode interagir com o sistema remoto para comprar produtos ou servios. Essa classe de aplicaes tambm inclui sistemas corporativos, em que uma empresa fornece acesso a seus sistemas atravs de um navegador Web ou um programa cliente especial e servios baseados em nuvem, como o caso de servios de e-mail e compartilhamento de fotos. Aplicaes interati-vas frequentemente incorporam um grande armazenamento de dados, que acessado e atualizado em cada transao.

    3. Sistemas de controle embutidos. So sistemas de controle que controlam e gerenciam dispositivos de hardware. Numericamente, provvel que haja mais sistemas embutidos do que de qualquer outro tipo. Exemplos de sistemas embutidos incluem software em telefone celular, softwares que controlam antitravamento de freios em um carro e software em um micro-ondas para controlar o processo de cozimento.

    4. Sistemas de processamento de lotes. So sistemas corporativos projetados para processar dados em grandes lo-tes. Eles processam grande nmero de entradas individuais para criar as sadas correspondentes. Exemplos de sistemas de lotes incluem sistemas peridicos de cobrana, como sistemas de cobrana telefnica, e sistemas de pagamentos de salrio.

    5. Sistemas de entretenimento. So sistemas cuja utilizao principal pessoal e cujo objetivo entreter o usurio. A maioria desses sistemas de jogos de diferentes tipos. A qualidade de interao com o usurio a caracte-rstica particular mais importante dos sistemas de entretenimento.

    6. Sistemas para modelagem e simulao. So sistemas que incluem vrios objetos separados que interagem entre si, desenvolvidos por cientistas e engenheiros para modelar processos ou situaes fsicas. Esses sistemas ge-ralmente fazem uso intensivo de recursos computacionais e requerem sistemas paralelos de alto desempenho para executar.

    7. Sistemas de coleta de dados. So sistemas que coletam dados de seu ambiente com um conjunto de sensores e enviam esses dados para outros sistemas para processamento. O software precisa interagir com sensores e frequentemente instalado em um ambiente hostil, por exemplo, dentro de uma mquina ou em um lugar remoto.

    8. Sistemas de sistemas. So sistemas compostos de uma srie de outros sistemas de software. Alguns deles po-dem ser produtos genricos de software, como um programa de planilha eletrnica. Outros sistemas do con-junto podem ser escritos especialmente para esse ambiente. claro que as fronteiras entre esses tipos de sistema no so claras. Se voc desenvolve um jogo para um

    telefone celular, deve levar em conta as mesmas restries (energia, interao com hardware) que os desenvol-vedores do software do telefone. Sistemas de processamento de lotes so frequentemente usados em conjunto com sistemas Web. Por exemplo, as requisies para reembolso das viagens dentro de uma empresa podem ser submetidas por meio de uma aplicao Web, porm processadas por uma aplicao de processamento de lotes para pagamento mensal.

    Utilizamos diferentes tcnicas de engenharia de software para cada tipo de sistema, porque cada software tem caractersticas bastante diversas. Por exemplo, um sistema de controle embutido em um automvel de segurana crtica e gravado em memria ROM quando instalado no veculo. Por isso, sua alterao muito cara. Tal sistema necessita de verificao e validao muito extensas para que as chances de ter de fazer um recall de carros depois de vendidos para correo de software sejam minimizadas. A interao do usurio, por sua vez, mnima (ou talvez at inexistente), ento no h necessidade de um processo de desenvolvimento que se baseie em prototipao de telas.

    Sommerville_Cap_01.indd 7 06/06/2011 16:52:07

  • 8 Engenharia de software

    Para um sistema Web, uma abordagem baseada em desenvolvimento e entregas iterativas pode ser adequada, com o sistema sendo composto a partir de componentes reusveis. No entanto, tal abordagem pode ser invivel para um sistema de sistemas, no qual as especificaes detalhadas das interaes do sistema precisam estar deta-lhadas antes para que cada sistema possa ser desenvolvido separadamente.

    Apesar disso, existem fundamentos de engenharia de software que se aplicam a todos os tipos de sistemas de software:1. Eles devem ser desenvolvidos em um processo gerenciado e compreendido. A organizao que desen-

    volve o software deve planejar o processo de desenvolvimento e ter ideias claras do que ser produzido e quando estar finalizado. claro que processos diferentes so usados para tipos de software diferentes.

    2. Confiana e desempenho so importantes para todos os tipos de sistema. O software deve se comportar conforme o esperado, sem falhas, e deve estar disponvel para uso quando requerido. Deve ser seguro em sua operao e deve ser, tanto quanto possvel, protegido contra ataques externos. O sistema deve executar de forma eficiente e no deve desperdiar recursos.

    3. importante entender e gerenciar a especificao e os requisitos de software (o que o software deve fazer). Voc deve saber o que clientes e usurios esperam dele e deve gerenciar suas expectativas para que um siste-ma til possa ser entregue dentro do oramento e do cronograma.

    4. Voc deve fazer o melhor uso possvel dos recursos existentes. Isso significa que, quando apropriado, voc deve reusar o software j desenvolvido, em vez de escrever um novo.Essas noes bsicas de processo, confiana, requisitos, gerenciamento e reso so temas importantes desta

    obra. So refletidas de vrias maneiras por diferentes mtodos, e so o fundamento de todo o desenvolvimento de software profissional.

    Voc deve observar que esses fundamentos no cobrem implementao e programao. Eu no cubro tc-nicas de programao especficas neste livro, porque elas variam dramaticamente de um tipo de sistema para outro. Por exemplo, uma linguagem de script como Ruby usada para programao de sistemas Web, porm seria totalmente inadequada para engenharia de sistemas embutidos.

    1.1.3 Engenharia de software e a Internet

    O desenvolvimento da Internet teve efeito profundo em nossas vidas. No incio, a Internet era basicamente um armazenamento de informaes acessvel universalmente e tinha pouco efeito nos sistemas de software. Es-ses sistemas executavam em computadores locais e eram acessveis apenas dentro da organizao. Por volta do ano 2000, a Internet comeou a evoluir, e mais e mais recursos passaram a ser adicionados aos navegadores. Isso significa que sistemas Web poderiam ser desenvolvidos e que, em vez de ter uma interface de usurio especfica, poderiam ser acessados por um navegador. Isso levou ao desenvolvimento de uma enorme quantidade de novos produtos de software que ofereciam servios inovadores e que eram acessados atravs da Internet. Esses produtos eram frequentemente sustentados pela propaganda exibida na tela do usurio e no exigiam pagamento direto.

    Assim como esses produtos de software, o desenvolvimento de navegadores Web capazes de executar progra-mas pequenos e fazer algum processamento local levou a uma evoluo no software corporativo e organizacional. Em vez de escrever o software e instal-lo nos computadores dos usurios, o software era implantado em um servi-dor Web. Isso tornou muito mais barato alterar e atualizar o software, porque no havia necessidade de se instalar o software em cada computador. Isso tambm reduziu os custos, porque o desenvolvimento de interface de usurio particularmente caro. Consequentemente, sempre que possvel, muitos negcios mudaram para interao Web com os sistemas de software da empresa.

    O prximo estgio no desenvolvimento de sistemas Web foi a noo de web services. Web services so com-ponentes de software acessados pela Internet e fornecem uma funcionalidade especfica e til. Aplicaes so construdas integrando esses web services, os quais podem ser fornecidos por empresas diferentes. A princpio, essa ligao pode ser dinmica, para que a aplicao possa usar web services diferentes toda vez que executada. Essa abordagem para desenvolvimento de software discutida no Captulo 19.

    Nos ltimos anos, desenvolveu-se a ideia de software como servio. Foi proposto que o software normalmente no executar em computadores locais, e sim em nuvens computacionais acessadas pela Internet. Se voc usa um servio como um webmail, est usando um sistema baseado em nuvem. Uma nuvem computacional consiste em um grande nmero de sistemas computacionais interligados, os quais so compartilhados entre vrios usurios.

    Sommerville_Cap_01.indd 8 06/06/2011 16:52:07

  • 9Captulo 1 Introduo engenharia de software

    Os usurios no compram o software, mas pagam de acordo com o uso ou possuem acesso gratuito em troca de propagandas que so exibidas em suas telas.

    Portanto, o surgimento da Internet trouxe uma mudana significativa na maneira como o software corporativo organizado. Antes da Internet, aplicaes corporativas eram, na maioria das vezes, monolticas, programas iso-lados executando em computadores isolados ou em clusters de computadores. Agora, um software altamente distribudo, s vezes pelo mundo todo. As aplicaes corporativas no so programadas do zero; de fato, elas en-volvem reso extensivo de componentes e programas.

    Essa mudana radical na organizao de software obviamente causou mudanas na maneira como os sistemas Web so projetados. Por exemplo:1. O reso de software tornou-se a abordagem dominante para a construo de sistemas Web. Quando constru-

    mos esses sistemas, pensamos em como podemos mont-los a partir de componentes e sistemas de software preexistentes.

    2. Atualmente, aceita-se que impraticvel especificar todos os requisitos para tais sistemas antecipadamente. Sistemas Web devem ser desenvolvidos e entregues incrementalmente.

    3. Interfaces de usurio so restringidas pela capacidade dos navegadores. Embora tecnologias como AJAX (HOL-DENER, 2008) signifiquem que interfaces ricas podem ser criadas dentro de um navegador, essas tecnologias ainda so difceis de usar. Formulrios Web com scripts locais so mais usados. Interfaces das aplicaes em sistemas Web so normalmente mais pobres do que interfaces projetadas especialmente para produtos de software que executam em PCs.As ideias fundamentais da engenharia de software discutidas na seo anterior aplicam-se para software ba-

    seado em Web da mesma forma que para outros tipos de sistemas de software. A experincia adquirida com o desenvolvimento de grandes sistemas no sculo XX ainda relevante para softwares baseados em Web.

    1.2 tica na engenharia de softwareAssim como outras disciplinas de engenharia, a engenharia de software desenvolvida dentro de um frame-

    work social e legal que limita a liberdade das pessoas que trabalham nessa rea. Como um engenheiro de software, voc deve aceitar que seu trabalho envolve maiores responsabilidades do que simplesmente aplicar habilidades tcnicas. Voc tambm deve se comportar de forma tica e moralmente responsvel se deseja ser respeitado como um engenheiro profissional.

    Isso sem falar que voc deve manter padres normais de honestidade e integridade. Voc no deve usar suas habilidades e seu conhecimento para se comportar de forma desonesta ou de maneira que possa denegrir a pro-fisso de engenharia de software. No entanto, existem reas nas quais os padres de comportamento aceitvel no so limitados pelas leis, mas pela mais tnue noo de responsabilidade profissional. Algumas delas so:1. Confidencialidade. Voc deve respeitar naturalmente a confidencialidade de seus empregadores ou clientes,

    independentemente de ter sido ou no assinado um acordo formal de confidencialidade.2. Competncia. Voc no deve deturpar seu nvel de competncia. Voc no deve aceitar conscientemente um

    trabalho que esteja fora de sua competncia.3. Direitos de propriedade intelectual. Voc deve ter conhecimento das leis locais a respeito da propriedade in-

    telectual, como patentes e copyright. Voc deve ter cuidado para garantir que a propriedade intelectual dos empregadores e clientes seja protegida.

    4. Mau uso do computador. Voc no deve usar suas habilidades tcnicas para fazer mau uso de computadores de outras pessoas. Esse mau uso varia de relativamente trivial (jogar videogames em uma mquina do emprega-dor, por exemplo) at extremamente srio (disseminar vrus ou outros malwares). Sociedades e instituies profissionais tm um papel importante a desempenhar na definio de padres

    ticos. Organizaes como ACM, IEEE (Institute of Eletrical and Electronic Engineers) e British Computer Society publicam um cdigo de conduta profissional ou cdigo de tica. Membros dessas organizaes se comprometem a seguir esse cdigo quando se tornam membros. Esses cdigos de conduta normalmente se preocupam com o comportamento tico bsico.

    Associaes profissionais, principalmente ACM e IEEE, cooperaram para produzir o cdigo de tica e prticas profissionais. Esse cdigo existe tanto na forma reduzida, mostrada no Quadro 1.1, quanto na forma completa

    Sommerville_Cap_01.indd 9 06/06/2011 16:47:04

    9Captulo 1 Introduo engenharia de software

    Os usurios no compram o software, mas pagam de acordo com o uso ou possuem acesso gratuito em troca de propagandas que so exibidas em suas telas.

    Portanto, o surgimento da Internet trouxe uma mudana significativa na maneira como o software corporativo organizado. Antes da Internet, aplicaes corporativas eram, na maioria das vezes, monolticas, programas iso-lados executando em computadores isolados ou em clusters de computadores. Agora, um software altamente distribudo, s vezes pelo mundo todo. As aplicaes corporativas no so programadas do zero; de fato, elas en-volvem reso extensivo de componentes e programas.

    Essa mudana radical na organizao de software obviamente causou mudanas na maneira como os sistemas Web so projetados. Por exemplo:1. O reso de software tornou-se a abordagem dominante para a construo de sistemas Web. Quando constru-

    mos esses sistemas, pensamos em como podemos mont-los a partir de componentes e sistemas de software preexistentes.

    2. Atualmente, aceita-se que impraticvel especificar todos os requisitos para tais sistemas antecipadamente. Sistemas Web devem ser desenvolvidos e entregues incrementalmente.

    3.