SlideShare uma empresa Scribd logo
http://www.candidatoreal.com
http://www.candidatoreal.com




                               Sum´rio
                                  a

                               I   Fundamentos de Computa¸˜o
                                                         ca                                                                                   16
                               1 Arquitetura e Organiza¸˜o de Computadores
                                                           ca                                                                                 17
                                 1.1 Conceitos B´sicos . . . . . . . . . . . . . . . . .
                                                 a                                                    .   .   .   .   .   .   .   .   .   .   17
                                 1.2 Estrutura e Funcionamento da CPU . . . . . .                     .   .   .   .   .   .   .   .   .   .   18
                                     1.2.1 Pipelines . . . . . . . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   20
                                 1.3 Conjunto de Instru¸˜es . . . . . . . . . . . . . .
                                                        co                                            .   .   .   .   .   .   .   .   .   .   22
                                 1.4 Unidade de Controle . . . . . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   24
                                 1.5 Modos de Endere¸amento . . . . . . . . . . . .
                                                      c                                               .   .   .   .   .   .   .   .   .   .   25
                                 1.6 Organiza¸˜o de Mem´ria . . . . . . . . . . . . .
                                             ca           o                                           .   .   .   .   .   .   .   .   .   .   26
                                 1.7 Desempenho do computador . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   28
                                     1.7.1 Tempo de execu¸˜o de um programa . .
                                                             ca                                       .   .   .   .   .   .   .   .   .   .   29
                                     1.7.2 Desempenho da CPU . . . . . . . . . .                      .   .   .   .   .   .   .   .   .   .   29
                                     1.7.3 Programas para medir desempenho . . .                      .   .   .   .   .   .   .   .   .   .   30
                                     1.7.4 Comparando desempenho . . . . . . . .                      .   .   .   .   .   .   .   .   .   .   30
                                     1.7.5 Lei de Amdahl . . . . . . . . . . . . . .                  .   .   .   .   .   .   .   .   .   .   31

                               2 Componentes de um Computador                                                                                 33
                                 2.1 Principais componentes de Hardware       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   34
                                     2.1.1 Discos R´ıgidos . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   34
                                     2.1.2 Teclado . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   36
                                     2.1.3 Mouse . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   37
                                     2.1.4 Placa de rede . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   37
                                     2.1.5 Impressora . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38
                                     2.1.6 Monitor . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38

                               3 Aritm´tica Computacional
                                       e                                                                                                      39
                                 3.1 N´meros Com Sinal e N´meros Sem Sinal . . .
                                       u                     u                                        .   .   .   .   .   .   .   .   .   .   39
http://www.candidatoreal.com




                                     3.1.1 Sinal e amplitude/magnitude . . . . . .                    .   .   .   .   .   .   .   .   .   .   39
                                     3.1.2 Complemento de 1 . . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   39
                                     3.1.3 Complemento de 2 . . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   39
                                     3.1.4 Nota¸˜o em excesso . . . . . . . . . . .
                                                 ca                                                   .   .   .   .   .   .   .   .   .   .   40
                                 3.2 Adi¸˜o e Subtra¸˜o . . . . . . . . . . . . . . . .
                                         ca         ca                                                .   .   .   .   .   .   .   .   .   .   41
                                 3.3 Opera¸˜es L´gicas . . . . . . . . . . . . . . . .
                                            co   o                                                    .   .   .   .   .   .   .   .   .   .   41
                                 3.4 Constru¸˜o de uma Unidade L´gica Aritm´tica
                                              ca                    o            e                    .   .   .   .   .   .   .   .   .   .   42
                                 3.5 Ponto Flutuante . . . . . . . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   43




                                                                      1
http://www.candidatoreal.com




                               4 Sistemas Operacionais                                                                                          44
                                 4.1 Introdu¸˜o . . . . . . . . . . . . . . . . . . . . . . .
                                            ca                                                                  .   .   .   .   .   .   .   .   44
                                 4.2 Conceitos B´sicos . . . . . . . . . . . . . . . . . . .
                                                 a                                                              .   .   .   .   .   .   .   .   46
                                      4.2.1 Multiprograma¸˜o . . . . . . . . . . . . . .
                                                            ca                                                  .   .   .   .   .   .   .   .   46
                                      4.2.2 Processo . . . . . . . . . . . . . . . . . . . .                    .   .   .   .   .   .   .   .   46
                                      4.2.3 Interrup¸˜es . . . . . . . . . . . . . . . . . .
                                                     co                                                         .   .   .   .   .   .   .   .   47
                                      4.2.4 Threads . . . . . . . . . . . . . . . . . . . .                     .   .   .   .   .   .   .   .   48
                                 4.3 Escalonamento de Processos . . . . . . . . . . . . .                       .   .   .   .   .   .   .   .   49
                                 4.4 Entrada e Sa´ . . . . . . . . . . . . . . . . . . . .
                                                  ıda                                                           .   .   .   .   .   .   .   .   50
                                      4.4.1 Camadas do subsistema de Entrada e Sa´       ıda                    .   .   .   .   .   .   .   .   51
                                 4.5 Gerˆncia de Mem´ria . . . . . . . . . . . . . . . . .
                                          e            o                                                        .   .   .   .   .   .   .   .   52
                                 4.6 Sistemas de Arquivos . . . . . . . . . . . . . . . . .                     .   .   .   .   .   .   .   .   54
                                      4.6.1 Conceitos b´sicos sobre arquivos . . . . . .
                                                         a                                                      .   .   .   .   .   .   .   .   54
                                      4.6.2 Implementa¸ao de arquivos . . . . . . . . .
                                                         c˜                                                     .   .   .   .   .   .   .   .   56
                                      4.6.3 Cache de Sistema de Arquivos . . . . . . .                          .   .   .   .   .   .   .   .   57
                                      4.6.4 Gerenciamento do espa¸o livre . . . . . . .
                                                                      c                                         .   .   .   .   .   .   .   .   58
                                      4.6.5 Diret´rios . . . . . . . . . . . . . . . . . . .
                                                 o                                                              .   .   .   .   .   .   .   .   59
                                      4.6.6 Implementa¸ao de diret´rios . . . . . . . . .
                                                         c˜           o                                         .   .   .   .   .   .   .   .   61
                                 4.7 Sistemas Operacionais Distribu´   ıdos . . . . . . . . .                   .   .   .   .   .   .   .   .   61
                                      4.7.1 Estrutura¸˜o de Sistemas Distribu´
                                                      ca                          ıdos . . .                    .   .   .   .   .   .   .   .   63

                               5 Principais Processadores de        Mercado                                                                     65
                                 5.1 Processadores Intel . . . .    . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
                                     5.1.1 Fam´ Pentium .
                                                ılia                . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
                                     5.1.2 Fam´ Celeron . .
                                                ılia                . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   68
                                     5.1.3 Fam´ Core . . .
                                                ılia                . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   69
                                     5.1.4 Xeon . . . . . . . .     . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   71
                                     5.1.5 Itanium . . . . . .      . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   74
                                 5.2 AMD . . . . . . . . . . .      . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   75
                                     5.2.1 Sempron . . . . . .      . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   75
                                     5.2.2 Athlon 64 . . . . .      . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   76
                                     5.2.3 Turion 64 . . . . .      . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   79
                                     5.2.4 Opteron . . . . . .      . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   81


                               II    L´gica de Programa¸˜o
                                      o                ca                                                                                       83
                               6 Orienta¸˜o a Objetos
                                         ca                                                                                                     84
                                 6.1 Introdu¸˜o . . . . . . . . .
                                             ca                     . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   84
http://www.candidatoreal.com




                                 6.2 Conceitos fundamentais .       . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   84
                                 6.3 Princ´ıpios de programa¸˜o
                                                             ca     orientada a objetos                 .   .   .   .   .   .   .   .   .   .   90
                                 6.4 Tratamento de exce¸oes .
                                                          c˜        . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   90


                               III   Metodologia de Desenvolvimento                                                                             92
                               7 Ciclo de Vida                                                              93
                                 7.1 Modelo seq¨encial linear . . . . . . . . . . . . . . . . . . . . . . . 95
                                               u
                                 7.2 Modelo em V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
                                 7.3 Modelo de prototipagem . . . . . . . . . . . . . . . . . . . . . . . 96


                                                                       2
http://www.candidatoreal.com




                                  7.4   Modelo RAD . . . . . . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .    96
                                  7.5   Modelos de processo de software evolucion´rios
                                                                                  a                .   .   .   .   .   .   .   .   .   .    97
                                        7.5.1 Modelo incremental . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .    97
                                        7.5.2 Modelo espiral . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .    98
                                        7.5.3 Modelo espiral ganha-ganha . . . . . . .             .   .   .   .   .   .   .   .   .   .    99
                                        7.5.4 Modelo de desenvolvimento concorrente                .   .   .   .   .   .   .   .   .   .   100
                                  7.6   Desenvolvimento baseado em componentes . . .               .   .   .   .   .   .   .   .   .   .   100
                                  7.7   Modelo de m´todos formais . . . . . . . . . . .
                                                     e                                             .   .   .   .   .   .   .   .   .   .   100
                                  7.8   T´cnicas de quarta gera¸˜o . . . . . . . . . . .
                                          e                    ca                                  .   .   .   .   .   .   .   .   .   .   100

                               8 An´lise Comparativa de Processos de Desenvolvimento
                                    a                                                                                                      102
                                 8.1 RUP - Rational Unified Process . . . . . . . . . . . . . . .                           .   .   .   .   102
                                 8.2 XP - Extreme Programming . . . . . . . . . . . . . . . . .                            .   .   .   .   105
                                 8.3 Scrum . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                       .   .   .   .   105
                                 8.4 Crystal . . . . . . . . . . . . . . . . . . . . . . . . . . . .                       .   .   .   .   106
                                 8.5 Feature Driven Development (FDD) . . . . . . . . . . . .                              .   .   .   .   106
                                 8.6 Dynamic Systems Development Method (DSDM) . . . .                                     .   .   .   .   107
                                 8.7 Adaptive Software Development (ASD) . . . . . . . . . .                               .   .   .   .   107

                               9 Engenharia de Requisitos                                                                                  109
                                 9.1 O Processo de Engenharia de Requisitos        .   .   .   .   .   .   .   .   .   .   .   .   .   .   109
                                 9.2 T´cnicas de Levantamento de Requisitos
                                       e                                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   110
                                     9.2.1 Observa¸˜o . . . . . . . . . . . .
                                                   ca                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   110
                                     9.2.2 Entrevista . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   110
                                     9.2.3 An´lise de Protocolo . . . . . . .
                                               a                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   111
                                     9.2.4 JAD . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   111
                                     9.2.5 PD . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   111
                                     9.2.6 QFD . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   111
                                     9.2.7 CRC . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   112
                                     9.2.8 Prototipa¸˜o . . . . . . . . . . .
                                                     ca                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   112
                                     9.2.9 Cen´rios . . . . . . . . . . . . . .
                                                a                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   112
                                     9.2.10 FAST . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   112
                                 9.3 An´lise de Requisitos . . . . . . . . . . .
                                         a                                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   113
                                     9.3.1 M´todos de an´lise . . . . . . . .
                                              e            a                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   114
                                     9.3.2 Modelagem da an´lise . . . . . .
                                                               a                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   114
                                 9.4 Gerenciamento de Requisitos . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   116

                               10 M´tricas
                                    e                                                                                                      118
                                  10.1 M´tricas de processo e aperfei¸oamento de processo
                                         e                            c                                    de      software            .   118
http://www.candidatoreal.com




                                  10.2 M´tricas de projeto . . . . . . . . . . . . . . . . . .
                                         e                                                                 . .     . . . . .           .   119
                                  10.3 Medi¸˜o de software . . . . . . . . . . . . . . . . .
                                            ca                                                             . .     . . . . .           .   119
                                       10.3.1 M´tricas orientadas a tamanho . . . . . . .
                                                e                                                          . .     . . . . .           .   120
                                       10.3.2 M´tricas orientadas a fun¸˜o . . . . . . . .
                                                e                        ca                                . .     . . . . .           .   120
                                       10.3.3 M´tricas de pontos por fun¸ao estendidas .
                                                e                          c                               . .     . . . . .           .   122
                                  10.4 M´tricas de qualidade de software . . . . . . . . .
                                         e                                                                 . .     . . . . .           .   122
                                       10.4.1 Fatores de qualidade de McCall . . . . . . .                 . .     . . . . .           .   123
                                       10.4.2 FURPS . . . . . . . . . . . . . . . . . . . .                . .     . . . . .           .   123
                                       10.4.3 ISO 9126 . . . . . . . . . . . . . . . . . . .               . .     . . . . .           .   124
                                  10.5 Estimativas . . . . . . . . . . . . . . . . . . . . . .             . .     . . . . .           .   124
                                       10.5.1 COCOMO (Constructive Cost Model) . . .                       . .     . . . . .           .   125


                                                                       3
http://www.candidatoreal.com




                               11 Testes                                                                                                             127
                                  11.1 Teste de caminho b´sico . . . . . . . . . . . . . . . . . . . .
                                                           a                                                                             .   .   .   127
                                  11.2 Teste de estrutura de controle . . . . . . . . . . . . . . . . .                                  .   .   .   129
                                       11.2.1 Teste de condi¸˜o . . . . . . . . . . . . . . . . . . . .
                                                             ca                                                                          .   .   .   129
                                       11.2.2 Teste de fluxo de dados . . . . . . . . . . . . . . . .                                     .   .   .   130
                                       11.2.3 Teste de ciclo . . . . . . . . . . . . . . . . . . . . . .                                 .   .   .   130
                                  11.3 Teste caixa-preta . . . . . . . . . . . . . . . . . . . . . . . .                                 .   .   .   131
                                       11.3.1 M´todos de teste baseados em grafo . . . . . . . . .
                                                e                                                                                        .   .   .   131
                                       11.3.2 Particionamento de equivalˆncia . . . . . . . . . . .
                                                                           e                                                             .   .   .   131
                                       11.3.3 An´lise de valor limite . . . . . . . . . . . . . . . . .
                                                 a                                                                                       .   .   .   132
                                       11.3.4 Teste de compara¸˜o . . . . . . . . . . . . . . . . . .
                                                                ca                                                                       .   .   .   132
                                       11.3.5 Teste de matriz ortogonal . . . . . . . . . . . . . . .                                    .   .   .   132
                                  11.4 Teste de ambientes, arquiteturas e aplica¸˜es especializadas
                                                                                  co                                                     .   .   .   133
                                  11.5 Estrat´gia de teste de software . . . . . . . . . . . . . . . .
                                             e                                                                                           .   .   .   134

                               12 UML                                                                                                                136
                                  12.1 Diagrama de caso de uso . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   136
                                       12.1.1 Ator . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   136
                                       12.1.2 Descri¸˜o do caso de uso .
                                                    ca                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   137
                                  12.2 Diagrama de classe . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   137
                                       12.2.1 Associa¸˜es de classe . . .
                                                     co                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   138
                                  12.3 Diagramas de seq¨ˆncia . . . . .
                                                        ue                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   140
                                  12.4 Diagramas de colabora¸˜o . . . .
                                                              ca             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   140
                                  12.5 Diagramas de estado . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   141
                                  12.6 Diagramas de atividade . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   143
                                  12.7 Elementos auxiliares . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   144
                                  12.8 Diagramas de componente . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   144
                                  12.9 Diagramas de distribui¸˜o . . . .
                                                              ca             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   144

                               13 Gerˆncia de Configura¸˜o e Mudan¸as
                                      e                    ca               c                                                                        145
                                  13.1 As Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                       146
                                  13.2 Artefatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                       147
                                  13.3 Pap´is e Responsabilidades . . . . . . . . . . . . . . . . . . . . .
                                          e                                                                                                          147

                               14 CMM - Capability Maturity Model                                                                                    149
                                  14.1 Os n´ıveis de maturidade no CMM . . . . .                     .   .   .   .   .   .   .   .   .   .   .   .   150
                                       14.1.1 N´ 1 - Inicial . . . . . . . . . . . .
                                                 ıvel                                                .   .   .   .   .   .   .   .   .   .   .   .   150
                                       14.1.2 N´ 2 - Repetitivo . . . . . . . . .
                                                 ıvel                                                .   .   .   .   .   .   .   .   .   .   .   .   150
                                       14.1.3 N´ 3 - Definido . . . . . . . . . . .
                                                 ıvel                                                .   .   .   .   .   .   .   .   .   .   .   .   151
http://www.candidatoreal.com




                                       14.1.4 N´ 4 - Gerenciado . . . . . . . . .
                                                 ıvel                                                .   .   .   .   .   .   .   .   .   .   .   .   152
                                       14.1.5 N´ 5 - Otimizado . . . . . . . . .
                                                 ıvel                                                .   .   .   .   .   .   .   .   .   .   .   .   152
                                  14.2 Um pouco mais sobre KPA’s . . . . . . . .                     .   .   .   .   .   .   .   .   .   .   .   .   152
                                  14.3 Efeitos da evolu¸˜o do n´ de maturidade
                                                       ca      ıvel                                  .   .   .   .   .   .   .   .   .   .   .   .   153


                               IV    Linguagem de Programa¸˜o Java
                                                          ca                                                                                         155
                               15 Conceitos B´sicos de Java
                                               a                                                               156
                                  15.1 Pacotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
                                  15.2 Modificadores de Acesso . . . . . . . . . . . . . . . . . . . . . . . 157


                                                                        4
http://www.candidatoreal.com




                                  15.3 Vari´veis . . . . . . . . . . . . . .
                                           a                                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   157
                                  15.4 Operadores . . . . . . . . . . . .                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   158
                                  15.5 Express˜es, Senten¸as e Blocos .
                                               o           c                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   160
                                  15.6 Comandos de Controle de Fluxo                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   161
                                  15.7 Classes Aninhadas . . . . . . . .                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   166
                                  15.8 Tipos Enumerados . . . . . . . .                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   167
                                  15.9 Anota¸˜es . . . . . . . . . . . . .
                                             co                                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   168
                                  15.10Gen´ricos . . . . . . . . . . . . .
                                           e                                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   169
                                  15.11Reflex˜o . . . . . . . . . . . . . .
                                             a                                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   171

                               16 Classes Essenciais                                                                                                                     173
                                  16.1 Exception e Controle de Exce¸˜es . . . . .
                                                                       co                                            .   .   .   .   .   .   .   .   .   .   .   .   .   173
                                       16.1.1 Exce¸˜es t´
                                                   co     ıpicas . . . . . . . . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   173
                                       16.1.2 Capturando Exce¸˜es . . . . . . .
                                                                  co                                                 .   .   .   .   .   .   .   .   .   .   .   .   .   175
                                  16.2 Threads e Concorrˆncia . . . . . . . . . .
                                                           e                                                         .   .   .   .   .   .   .   .   .   .   .   .   .   176
                                       16.2.1 Definindo e Iniciando uma Thread                                        .   .   .   .   .   .   .   .   .   .   .   .   .   176
                                       16.2.2 Pausando a execu¸˜o com sleep . .
                                                                  ca                                                 .   .   .   .   .   .   .   .   .   .   .   .   .   177
                                       16.2.3 Interrup¸˜es . . . . . . . . . . . . .
                                                       co                                                            .   .   .   .   .   .   .   .   .   .   .   .   .   178
                                       16.2.4 Joins . . . . . . . . . . . . . . . . .                                .   .   .   .   .   .   .   .   .   .   .   .   .   178
                                       16.2.5 Sincroniza¸˜o . . . . . . . . . . . .
                                                         ca                                                          .   .   .   .   .   .   .   .   .   .   .   .   .   179
                                       16.2.6 Executores e Thread Pools . . . .                                      .   .   .   .   .   .   .   .   .   .   .   .   .   180
                                  16.3 Streams e Serializa¸˜o . . . . . . . . . . .
                                                           ca                                                        .   .   .   .   .   .   .   .   .   .   .   .   .   181
                                       16.3.1 I/O Streams . . . . . . . . . . . .                                    .   .   .   .   .   .   .   .   .   .   .   .   .   181
                                       16.3.2 Serializa¸˜o - Streams de Objetos .
                                                       ca                                                            .   .   .   .   .   .   .   .   .   .   .   .   .   183
                                  16.4 Classes e Opera¸˜es de I/O . . . . . . . .
                                                       co                                                            .   .   .   .   .   .   .   .   .   .   .   .   .   185
                                  16.5 Classes para manipula¸˜o de propriedades
                                                               ca                                                    .   .   .   .   .   .   .   .   .   .   .   .   .   185

                               17 Cole¸˜es
                                       co                                                                                                                                188
                                  17.1 Interface   Collection    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   189
                                  17.2 Interface   Set . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   190
                                  17.3 Interface   List . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   193
                                  17.4 Interface   Map . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   195
                                  17.5 Interface   Queue . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   197

                               18 JDBC - Java Database Connectivity                                                                                                      199
                                  18.1 Conceitos B´sicos . . . . . . . . . . .
                                                  a                                                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   199
                                  18.2 Carregamento de drivers . . . . . . .                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   200
                                  18.3 Conex˜o . . . . . . . . . . . . . . . .
                                             a                                                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   200
                                  18.4 Statements . . . . . . . . . . . . . .                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   201
http://www.candidatoreal.com




                                  18.5 Prepared Statements . . . . . . . . .                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   203
                                  18.6 Transa¸˜o . . . . . . . . . . . . . . .
                                             ca                                                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   203
                                  18.7 Informa¸˜es Complementares . . . .
                                               co                                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   204
                                  18.8 Exemplo Extra . . . . . . . . . . . .                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   205

                               19 A plataforma J2EE                                                                                                                      207
                                  19.1 Containers J2EE . . . . . . . . . . .                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   208
                                  19.2 Clientes J2EE . . . . . . . . . . . . .                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   209
                                  19.3 Um pouco mais sobre Servlets . . . .                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   209
                                       19.3.1 Ciclo de Vida dos Servlets . .                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   211
                                       19.3.2 Mantendo o estado do cliente                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   212


                                                                                         5
http://www.candidatoreal.com




                                   19.4 Um pouco mais sobre p´ginas JSP
                                                               a                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   213
                                        19.4.1 JSP vs. Servlets . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   215
                                   19.5 Um pouco mais sobre EJB’s . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   216
                                        19.5.1 Ciclo de Vida dos EJB’s . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   217


                               V    Desenvolvimento Web                                                                                             220
                               20 Usabilidade                                                                  221
                                  20.1 Defini¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
                                             ca
                                  20.2 Princ´
                                            ıpios da usabilidade . . . . . . . . . . . . . . . . . . . . . . . 222
                                  20.3 T´cnicas de avalia¸˜o de usabilidade . . . . . . . . . . . . . . . . 223
                                        e                ca

                               21 Acessibilidade                                                                                                    224
                                  21.1 Defini¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                                             ca                                                                                                     224
                                  21.2 Princ´
                                            ıpios da acessibilidade . . . . . . . . . . . . . . . . . . . . .                                       224
                                  21.3 T´cnicas de avalia¸˜o de acessibilidade . . . . . . . . . . . . . . .
                                        e                ca                                                                                         227

                               22 Padr˜es Web W3C
                                      o                                                                                                             229

                               23 XML                                                                                                               233
                                  23.1 O que ´ XML? . . . . . . . . . . .
                                              e                                 . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   233
                                  23.2 Caracter´ısticas do XML . . . . . .      . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   234
                                  23.3 Compara¸˜o entre XML e HTML .
                                                 ca                             . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   234
                                  23.4 Sintaxe b´sica do XML . . . . . .
                                                 a                              . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   234
                                  23.5 Conjunto de tags . . . . . . . . . .     . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   236
                                  23.6 NameSpaces . . . . . . . . . . . . .     . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   238
                                  23.7 Gram´tica de um documento XML
                                            a                                     .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   239
                                  23.8 Tecnologias XML . . . . . . . . . .      . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   244
                                  23.9 Benef´
                                            ıcios da linguagem XML . . .        . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   245
                                  23.10Ferramentas de desenvolvimento .         . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   246

                               24 XSLT                                                                                                              247
                                  24.1 O que ´ uma folha de estilo? . .
                                             e                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   247
                                  24.2 Compara¸˜o entre o CSS e XSL .
                                                ca                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   247
                                  24.3 O que ´ o XSL? . . . . . . . . . .
                                             e                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   248
                                  24.4 O que ´ o XSLT? . . . . . . . . .
                                             e                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   248
                                  24.5 Caracter´
                                               ısticas do XSLT . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   249
                                  24.6 Declarando um documento XSL .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   249
                                  24.7 Elemento <xsl:template> . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   250
http://www.candidatoreal.com




                                  24.8 Elemento <xsl:value-of> . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   251
                                  24.9 Elemento <xsl:for-each> . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   252
                                  24.10Elemento <xsl:sort> . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   252
                                  24.11Elemento <xsl:if> . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   252
                                  24.12Elemento <xsl:choose> . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   253
                                  24.13Elemento <xsl:apply-templates>       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   253
                                  24.14XSL no lado Cliente . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   254
                                  24.15XSL no lado Servidor . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   254
                                  24.16Processadores XSLT . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   255




                                                                       6
http://www.candidatoreal.com




                               25 Gerenciador de Conte´ do Web Zone/Plone
                                                            u                                                                                                    256
                                  25.1 Gest˜o de Conte´do . . . . . . . . . . . . . .
                                            a           u                                                            .   .   .   .   .   .   .   .   .   .   .   256
                                  25.2 Sistema de Gest˜o de Conte´do . . . . . . . .
                                                       a             u                                               .   .   .   .   .   .   .   .   .   .   .   257
                                  25.3 Zope . . . . . . . . . . . . . . . . . . . . . . .                            .   .   .   .   .   .   .   .   .   .   .   258
                                  25.4 Plone . . . . . . . . . . . . . . . . . . . . . .                             .   .   .   .   .   .   .   .   .   .   .   260

                               26 Web Services                                                                                                                   263
                                  26.1 O que ´ Web Services?
                                             e                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   263
                                  26.2 SOAP . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   266
                                  26.3 WSDL . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   267
                                  26.4 UDDI . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   269
                                  26.5 Seguran¸a . . . . . . .
                                               c                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   269


                               VI    Redes de Comunica¸˜o
                                                      ca                                                                                                         270
                               27 T´cnicas B´sicas de Comunica¸˜o
                                    e         a                       ca                                                                                         271
                                  27.1 Base Te´rica da Comunica¸˜o de Dados . . . . . . . . .
                                               o                   ca                                                                        . . . . .           271
                                  27.2 Taxa M´xima de Dados em um Canal . . . . . . . . . .
                                               a                                                                                             . . . . .           272
                                  27.3 Sinais Digitais Bin´rios . . . . . . . . . . . . . . . . . .
                                                           a                                                                                 . . . . .           272
                                  27.4 Transmiss˜o em Banda Base . . . . . . . . . . . . . . . .
                                                  a                                                                                          . . . . .           273
                                  27.5 Classifica¸˜o dos Sinais . . . . . . . . . . . . . . . . . . .
                                                 ca                                                                                          . . . . .           273
                                  27.6 T´cnicas de Codifica¸˜o de Linha . . . . . . . . . . . . .
                                         e                   ca                                                                              . . . . .           274
                                       27.6.1 Codifica¸˜o NRZ . . . . . . . . . . . . . . . . . .
                                                        ca                                                                                   . . . . .           274
                                       27.6.2 Codifica¸˜o RZ . . . . . . . . . . . . . . . . . . .
                                                        ca                                                                                   . . . . .           275
                                       27.6.3 Codifica¸˜o AMI (Alternate Mark Invertion) . .
                                                        ca                                                                                   . . . . .           275
                                       27.6.4 Codifica¸˜o HDB-3 (High Density Bipolar with
                                                        ca                                                                                   3 Zero
                                              Maximum Tolerance) . . . . . . . . . . . . . . .                                               . . . . .           275
                                       27.6.5 Codifica¸˜o Manchester . . . . . . . . . . . . . .
                                                        ca                                                                                   . . . . .           276
                                  27.7 Modula¸˜o . . . . . . . . . . . . . . . . . . . . . . . . .
                                               ca                                                                                            . . . . .           276
                                       27.7.1 Modula¸˜o de Onda Cont´
                                                       ca                 ınua . . . . . . . . . . .                                         . . . . .           277
                                       27.7.2 Modula¸˜o de Pulsos . . . . . . . . . . . . . . . .
                                                       ca                                                                                    . . . . .           279
                                  27.8 T´cnicas de Multiplexa¸˜o . . . . . . . . . . . . . . . . .
                                         e                      ca                                                                           . . . . .           280
                                       27.8.1 FDM - Frequency Division Multiplexing . . . . .                                                . . . . .           281
                                       27.8.2 TDM - Time Division Multiplexing . . . . . . . .                                               . . . . .           281
                                       27.8.3 OFDM . . . . . . . . . . . . . . . . . . . . . . .                                             . . . . .           281
                                       27.8.4 WDM -Wavelength Division Multiplexing . . . .                                                  . . . . .           282
                                  27.9 Protocolos de Acesso M´ltiplo . . . . . . . . . . . . . . .
                                                                 u                                                                           . . . . .           283
http://www.candidatoreal.com




                               28 Topologias de Redes                                                                                                            284

                               29 Arquitetura de Redes                                                    286
                                  29.1 Organiza¸˜o em Camadas . . . . . . . . . . . . . . . . . . . . . . 286
                                               ca

                               30 Protocolos de Rede                                                                                                             287
                                  30.1 ARP - Address Resolution Protocol . . . . . .                                     .   .   .   .   .   .   .   .   .   .   287
                                  30.2 DHCP - Dynamic Host Configuration Protocol                                         .   .   .   .   .   .   .   .   .   .   287
                                  30.3 DNS - Domain Name System . . . . . . . . . .                                      .   .   .   .   .   .   .   .   .   .   289
                                  30.4 TCP - Transmission Control Protocol . . . . .                                     .   .   .   .   .   .   .   .   .   .   291
                                  30.5 UDP - User Datagram Protocol . . . . . . . . .                                    .   .   .   .   .   .   .   .   .   .   293



                                                                                 7
http://www.candidatoreal.com




                                  30.6 HTTP - Hyper Text Transfer Protocol . . . . .            .   .   .   .   .   .   .   .   .   .   294
                                  30.7 SMTP - Simple Mail Transfer Protocol . . . . .           .   .   .   .   .   .   .   .   .   .   299
                                  30.8 POP3 - Post Office Protocol Version 3 . . . . .            .   .   .   .   .   .   .   .   .   .   301
                                  30.9 IMAP - Internet Mail Access Protocol . . . . .           .   .   .   .   .   .   .   .   .   .   303
                                  30.10LDAP - LightWeight Directory Access Protocol             .   .   .   .   .   .   .   .   .   .   305
                                  30.11SNMP - Simple Network Management Protocol                .   .   .   .   .   .   .   .   .   .   305
                                  30.12FTP - File Transfer Protocol . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   306
                                  30.13IP - Internet Protocol . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   310
                                  30.14TELNET - TELetype NETwork . . . . . . . .                .   .   .   .   .   .   .   .   .   .   311

                               31 O Modelo de Referˆncia OSI
                                                   e                                                                                    314

                               32 Roteamento                                                                                            316
                                  32.1 Link State e Distance Vector . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   317
                                       32.1.1 Vetor de Distˆncias vs. Estado do Link
                                                           a                                    .   .   .   .   .   .   .   .   .   .   319
                                  32.2 Protocolos de Roteamento . . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   320
                                       32.2.1 RIP - Routing Information Protocol . .            .   .   .   .   .   .   .   .   .   .   320
                                       32.2.2 OSPF - Open Shortest Path First . . .             .   .   .   .   .   .   .   .   .   .   320
                                       32.2.3 IGRP e EIGRP . . . . . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   321

                               33 Redes Ethernet                                                                                        322
                                  33.1 Protocolo CSMA/CD . . . . . . . . . . . . . . . . . . . . . . . .                                322
                                  33.2 Fast Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                          323
                                  33.3 Gigabit Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . .                           324

                               34 Cabeamento Estruturado                                                                                326
                                  34.1 Par Tran¸ado . . . . . . . . . . . . . . . . . . . . .
                                                c                                                       .   .   .   .   .   .   .   .   326
                                       34.1.1 Interferˆncias nos Cabos de Par Tran¸ado .
                                                      e                               c                 .   .   .   .   .   .   .   .   326
                                  34.2 Categorias 5e . . . . . . . . . . . . . . . . . . . . .          .   .   .   .   .   .   .   .   327
                                  34.3 Categoria 6 . . . . . . . . . . . . . . . . . . . . . .          .   .   .   .   .   .   .   .   328
                                  34.4 Categoria 5e vs. Categoria 6 . . . . . . . . . . . .             .   .   .   .   .   .   .   .   328
                                  34.5 Cabea¸˜o Estruturada – Norma EIA/TIA 568 . . .
                                             ca                                                         .   .   .   .   .   .   .   .   329
                                       34.5.1 Sistemas de Cabeamento Estruturado . . .                  .   .   .   .   .   .   .   .   329
                                  34.6 Desempenho do Hardware e Meios de Transmiss˜o       a            .   .   .   .   .   .   .   .   333
                                       34.6.1 Cabeamento UTP . . . . . . . . . . . . . .                .   .   .   .   .   .   .   .   334
                                                     ´
                                       34.6.2 Fibra Optica . . . . . . . . . . . . . . . . .            .   .   .   .   .   .   .   .   335
                                  34.7 C´digo de Cores para Sistemas de Cabe¸˜o UTP .
                                        o                                        ca                     .   .   .   .   .   .   .   .   336

                               35 Redes sem fio                                                              337
                                  35.1 O padr˜o IEEE 802.11 . . . . . . . . . . . . . . . . . . . . . . . . 337
                                              a
http://www.candidatoreal.com




                                       35.1.1 CSMA/CA . . . . . . . . . . . . . . . . . . . . . . . . . . 338
                                       35.1.2 Formato do Quadro 802.11 . . . . . . . . . . . . . . . . . 339

                               36 Elementos de Interconex˜o de Redes
                                                               a                  de    Computadores                                    340
                                  36.1 Repetidores . . . . . . . . . . . . . .    . .   . . . . . . . . . .             .   .   .   .   340
                                  36.2 Hubs . . . . . . . . . . . . . . . . . .   . .   . . . . . . . . . .             .   .   .   .   340
                                  36.3 Switches . . . . . . . . . . . . . . . .   . .   . . . . . . . . . .             .   .   .   .   341
                                  36.4 Bridges . . . . . . . . . . . . . . . .    . .   . . . . . . . . . .             .   .   .   .   342
                                  36.5 Roteadores . . . . . . . . . . . . . .     . .   . . . . . . . . . .             .   .   .   .   342
                                  36.6 Gateways . . . . . . . . . . . . . . .     . .   . . . . . . . . . .             .   .   .   .   343



                                                                        8
http://www.candidatoreal.com




                               37 Redes Multim´   ıdia                                                                                         344
                                  37.1 Qualidade de Servi¸o . . . . . . . . . . . . . . . . . . . . . . . . .
                                                          c                                                                                    344
                                  37.2 Servi¸os Integrados - IntServ . . . . . . . . . . . . . . . . . . . .
                                            c                                                                                                  346
                                  37.3 Servi¸os Diferenciados - DiffServ . . . . . . . . . . . . . . . . . .
                                            c                                                                                                  347

                               38 Redes X.25 e Frame Relay                                                                                     348
                                  38.1 X.25 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                348
                                  38.2 Frame Relay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                 348
                                       38.2.1 Estrutura do Frame . . . . . . . . . . . . . . . . . . . . .                                     349
                                       38.2.2 Envio de um datagrama IP de Ethernet para Frame Relay
                                               e Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . .                                350
                                  38.3 Interliga¸˜o de Redes LAN . . . . . . . . . . . . . . . . . . . . .
                                                ca                                                                                             351
                                       38.3.1 Voz sobre Frame Relay (VoFR) . . . . . . . . . . . . . . .                                       351
                                       38.3.2 Intera¸˜o entre Frame Relay e ATM . . . . . . . . . . . .
                                                     ca                                                                                        352
                                       38.3.3 CIR (Taxa de Informa¸˜o Comprometida) . . . . . . . . .
                                                                       ca                                                                      352

                               39 Redes Virtuais Locais                                                      354
                                  39.1 VLANs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
                                       39.1.1 Defini¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
                                                   ca
                                       39.1.2 Protocolo 802.1q . . . . . . . . . . . . . . . . . . . . . . . 354

                               40 Redes de Circuito Virtuais                                                 356
                                  40.1 Redes ATM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
                                  40.2 MPLS - Multiprotocol Label Switching . . . . . . . . . . . . . . . 358

                               41 Arquitetura TCP/IP                                                                                           360
                                  41.1 Vis˜o geral . . . . . . . . . . . . . . . . . . . .
                                          a                                                            .   .   .   .   .   .   .   .   .   .   360
                                  41.2 Compara¸˜o entre a arquitetura OSI e TCP/IP
                                                ca                                                     .   .   .   .   .   .   .   .   .   .   360
                                  41.3 Camada F´ ısica (host/rede) . . . . . . . . . . .               .   .   .   .   .   .   .   .   .   .   361
                                  41.4 Camada de Inter-Rede . . . . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   361
                                  41.5 Camada de Transporte . . . . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   362
                                  41.6 Camada de Aplica¸˜o . . . . . . . . . . . . . .
                                                          ca                                           .   .   .   .   .   .   .   .   .   .   362

                               42 Camada de Aplica¸˜o
                                                    ca                                                       364
                                  42.1 Proxy Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364


                               VII     Gerˆncia de Redes
                                          e                                                                                                    366
                               43 O protocolo SNMP                                                       367
http://www.candidatoreal.com




                                  43.1 Management Information Base . . . . . . . . . . . . . . . . . . . 368


                               VIII     Seguran¸a da Informa¸˜o
                                               c            ca                                                                                 370
                               44 Pol´ıticas de Seguran¸a de Informa¸˜o
                                                           c               ca                                                                  371
                                  44.1 Pol´ıticas de Seguran¸a . . . . . . . . .
                                                              c                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   371
                                  44.2 Projeto de Seguran¸a . . . . . . . . . .
                                                            c                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   372
                                  44.3 Plano de Seguran¸a . . . . . . . . . . .
                                                          c                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   372
                                  44.4 Normas de Seguran¸a . . . . . . . . .
                                                             c                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   373
                                        44.4.1 ISO/IEC 17799 . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   373


                                                                        9
http://www.candidatoreal.com




                                       44.4.2 Fam´ ISO 27000 . . . . .
                                                   ılia                        . . . . . . . . . . . .                     .   .   .   .   .   375
                                       44.4.3 Diferen¸as entre a ISO/IEC
                                                       c                       17799 e a ISO 27001                         .   .   .   .   .   376
                                  44.5 Procedimentos de Seguran¸a . . . .
                                                                  c            . . . . . . . . . . . .                     .   .   .   .   .   376
                                  44.6 Arquitetura de Seguran¸a . . . . .
                                                              c                . . . . . . . . . . . .                     .   .   .   .   .   377
                                  44.7 Classifica¸˜o de Informa¸˜es . . . .
                                                ca             co              . . . . . . . . . . . .                     .   .   .   .   .   377

                               45 Seguran¸a F´
                                           c   ısica e L´gica
                                                         o                                                    379
                                  45.1 Seguran¸a F´
                                              c ısica . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
                                  45.2 Seguran¸a L´gica . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
                                              c o
                                       45.2.1 Matrizes de acesso, listas de controle de acesso e capabilities379
                                       45.2.2 Modelos de Controle de Acesso . . . . . . . . . . . . . . . 380

                               46 Backup de Dados                                                         384
                                  46.1 Meios de Armazenamento . . . . . . . . . . . . . . . . . . . . . . 384

                               47 V´ırus e Ataques                                                             386
                                  47.1 Estrat´gias de combate ` pragas eletrˆnicas . . . . . . . . . . . . 388
                                             e                 a               o
                                       47.1.1 Antiv´ırus . . . . . . . . . . . . . . . . . . . . . . . . . . . 388

                               48 Princ´ıpios de Criptografia                                                                                   390
                                  48.1 Tipos de Criptografia . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   391
                                  48.2 Algoritmos de Criptografia Sim´tricos .
                                                                     e                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   392
                                  48.3 Algoritmos de Criptografia Assim´tricos
                                                                       e               .   .   .   .   .   .   .   .   .   .   .   .   .   .   393
                                  48.4 T´cnicas de Quebra de Criptografia . . .
                                         e                                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   394

                               49 Autentica¸˜o
                                             ca                                                                                395
                                  49.1 Autentica¸˜o de Mensagens . . . . . . . . . . . . .
                                                ca                                                             . . . . . . . . 395
                                  49.2 Protocolos de Autentica¸˜o . . . . . . . . . . . . .
                                                              ca                                               . . . . . . . . 396
                                       49.2.1 M´todos de Autentica¸˜o . . . . . . . . . .
                                                e                   ca                                         . . . . . . . . 396
                                       49.2.2 Autentica¸˜o baseada em uma chave secreta
                                                       ca                                                      compartilhada396
                                  49.3 Certificado Digital . . . . . . . . . . . . . . . . . .                  . . . . . . . . 397

                               50 Seguran¸a em diversas camadas
                                           c                                                                                                   399
                                  50.1 Secure Sockets Layer . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   399
                                  50.2 IPSec . . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   400
                                  50.3 Virtual Private Network (VPN) . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   401
                                  50.4 Filtragem de Pacotes e Firewalls . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   403
                                       50.4.1 Regras iptables - Exemplo 1 . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   405
                                       50.4.2 Regras iptables - Exemplo 2 . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   405
                                       50.4.3 Firewall Stateful . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   406
http://www.candidatoreal.com




                                       50.4.4 Application Gateway . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   407
                                       50.4.5 Arquitetura de firewall e DMZ .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   407
                                  50.5 Sistemas de Detec¸˜o de Intrus˜o (IDS)
                                                           ca            a             .   .   .   .   .   .   .   .   .   .   .   .   .   .   409
                                  50.6 Seguran¸a em Redes Wireless 802.11 . .
                                               c                                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   409
                                       50.6.1 WEP . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   409
                                  50.7 802.11i . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   410




                                                                        10
http://www.candidatoreal.com




                               IX    Alta Disponibilidade                                                                                  411
                               51 Solu¸˜es de Armazenamento RAID, SAN e NAS
                                       co                                                                     412
                                  51.1 RAID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
                                       51.1.1 RAID 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
                                       51.1.2 RAID 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
                                       51.1.3 RAID 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
                                       51.1.4 RAID 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
                                       51.1.5 RAID 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
                                       51.1.6 RAID 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
                                       51.1.7 RAID 6 (Redundˆncia de P+Q) . . . . . . . . . . . . . . 419
                                                               a
                                       51.1.8 Tipos H´
                                                     ıbridos . . . . . . . . . . . . . . . . . . . . . . . . 419
                                       51.1.9 Comparativo de Desempenho entre as diversas configura¸˜es   co
                                              RAID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
                                  51.2 SAN - Storage Area Network . . . . . . . . . . . . . . . . . . . . 420
                                       51.2.1 Hardware para SAN . . . . . . . . . . . . . . . . . . . . . 421
                                       51.2.2 Topologias de SAN . . . . . . . . . . . . . . . . . . . . . . 422
                                  51.3 NAS - Network Attached Stotage . . . . . . . . . . . . . . . . . . 423
                                  51.4 Comparativo entre SAN e NAS . . . . . . . . . . . . . . . . . . . 424

                               52 Clusters de servidores                                                                                   427
                                      52.0.1 Princ´
                                                  ıpios de um Cluster . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   427
                                      52.0.2 Abstra¸˜es em um Cluster . . . .
                                                    co                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   428
                                      52.0.3 Arquitetura de um Cluster . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   429
                                      52.0.4 Cluster X Sistemas Distribu´ıdos      .   .   .   .   .   .   .   .   .   .   .   .   .   .   430
                                      52.0.5 Cluster de Alta Disponibilidade .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   431
                                      52.0.6 Cluster de Alto Desempenho . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   433

                               53 Balanceamento de Carga                                                                                   436
                                  53.1 Balanceamento de armazenamento (storage) .              .   .   .   .   .   .   .   .   .   .   .   436
                                  53.2 Balanceamento de rede . . . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   436
                                       53.2.1 NAT . . . . . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   437
                                       53.2.2 IP Tunneling . . . . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   437
                                       53.2.3 Direct Routing . . . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   438
                                  53.3 Algoritmos de balanceamento . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   438
                                  53.4 Balanceamento de CPU . . . . . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   439
                                       53.4.1 Sistema de processamento distribu´  ıdo          .   .   .   .   .   .   .   .   .   .   .   439
http://www.candidatoreal.com




                               X    Sistemas Operacionais                                                                                  442
                               54 Ambiente Microsoft Windows 2000/2003                                                                     443
                                  54.1 DHCP - Dynamic Host Configuration Protocol . .                       .   .   .   .   .   .   .   .   443
                                       54.1.1 Processo de Instala¸˜o/Configura¸˜o . . . .
                                                                 ca            ca                          .   .   .   .   .   .   .   .   443
                                       54.1.2 Integra¸˜o do DHCP com o DNS . . . . . .
                                                     ca                                                    .   .   .   .   .   .   .   .   445
                                       54.1.3 APIPA - Automatic Private IP Addressing                      .   .   .   .   .   .   .   .   445
                                       54.1.4 Comandos ipconfig Relacionados ao DHCP                        .   .   .   .   .   .   .   .   446
                                       54.1.5 Regra ”80/20” . . . . . . . . . . . . . . . .                .   .   .   .   .   .   .   .   446
                                  54.2 DNS - Domain Name System . . . . . . . . . . . .                    .   .   .   .   .   .   .   .   446
                                       54.2.1 Processo de Instala¸˜o/Configura¸˜o . . . .
                                                                 ca            ca                          .   .   .   .   .   .   .   .   447


                                                                      11
http://www.candidatoreal.com




                                       54.2.2  Seguran¸a de Acesso . . . . . . . . . . . . . . . . . . . . .
                                                       c                                                                                                        449
                                       54.2.3  Integra¸˜o do DNS com o Active Directory . . . . . . . .
                                                      ca                                                                                                        449
                                       54.2.4  Servidor DNS somente Cache . . . . . . . . . . . . . . . .                                                       451
                                       54.2.5  Arquivo Hosts . . . . . . . . . . . . . . . . . . . . . . . .                                                    451
                                       54.2.6  Distribui¸˜o de Carga . . . . . . . . . . . . . . . . . . . .
                                                        ca                                                                                                      451
                                       54.2.7  Comando ipconfig/dnscmd Relacionadas ao DNS . . . . .                                                             451
                                  54.3 Active  Directory . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                  452
                                       54.3.1  Tipos de Servidores . . . . . . . . . . . . . . . . . . . . .                                                    453
                                       54.3.2  Defini¸˜es de Floresta, Dom´
                                                     co                       ınio, Site e Unidade Organi-
                                               zacional . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                 453
                                       54.3.3 Recursos do Active Directory . . . . . . . . . . . . . . . .                                                      454
                                       54.3.4 Seguran¸a com o Active Directory . . . . . . . . . . . . .
                                                       c                                                                                                        455
                                       54.3.5 Ferramentas de Controle . . . . . . . . . . . . . . . . . . .                                                     456
                                  54.4 IIS - Internet Information Services . . . . . . . . . . . . . . . . .                                                    456
                                       54.4.1 IIS versus Apache HTTP Server . . . . . . . . . . . . . .                                                         456
                                       54.4.2 Principais Componentes do IIS . . . . . . . . . . . . . . .                                                       459
                                       54.4.3 Principais Recursos do IIS . . . . . . . . . . . . . . . . . .                                                    460
                                       54.4.4 Principais Diferen¸as entre IIS4, IIS5 e IIS6 . . . . . . . .
                                                                  c                                                                                             461
                                  54.5 Terminal Services . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                  461
                                       54.5.1 Principais Benef´ ıcios . . . . . . . . . . . . . . . . . . . . .                                                 462
                                       54.5.2 Protocolos de Comunica¸˜o . . . . . . . . . . . . . . . . .
                                                                         ca                                                                                     463
                                       54.5.3 Licen¸as . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                                                    c                                                                                                           464


                               XI    Banco de Dados                                                                                                             465
                               55 Conceitos B´sicos
                                             a                                                                                                                  466

                               56 Abordagem Relacional                                                         468
                                  56.1 Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
                                  56.2 Esquemas e Restri¸˜es de Integridade . . . . . . . . . . . . . . . 468
                                                         co

                               57 Modelagem Entidade Relacionamento                                                                                             470
                                  57.1 Conceitos . . . . . . . . . . . . . . . . . . . . .                              .   .   .   .   .   .   .   .   .   .   470
                                  57.2 Cardinalidade . . . . . . . . . . . . . . . . . . .                              .   .   .   .   .   .   .   .   .   .   471
                                  57.3 Representa¸˜o Gr´fica . . . . . . . . . . . . . .
                                                 ca     a                                                               .   .   .   .   .   .   .   .   .   .   471
                                  57.4 Recursos do Modelo Entidade Relacionamento                                       .   .   .   .   .   .   .   .   .   .   471

                               58 Normaliza¸˜oca                                                             473
                                  58.1 Aspectos desej´veis em um bom projeto . . . . . . . . . . . . . . 473
                                                     a
http://www.candidatoreal.com




                                  58.2 Forma normal de Boyce-Codd . . . . . . . . . . . . . . . . . . . . 473
                                  58.3 Terceira forma normal . . . . . . . . . . . . . . . . . . . . . . . . 474

                               59 Transforma¸˜o do Modelo Conceitual
                                            ca                                                                                                                  475

                               60 Linguagem SQL                                                                                                                 476
                                  60.1 Cria¸˜o de tabela . . . .
                                           ca                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   476
                                  60.2 Consultas . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   476
                                  60.3 Fun¸˜es de agrega¸˜o . .
                                           co             ca        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   477
                                  60.4 Atualiza¸˜es e exclus˜es
                                               co            o      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   478
                                  60.5 Vis˜es . . . . . . . . . .
                                          o                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   479


                                                                            12
http://www.candidatoreal.com




                                  60.6 Chaves estrangeiras . . . . . . . . . . . . . . . . . . . . . . . . . . 479

                               61 Conceitos de Datawarehousing e Bussiness Inteligence                                            480
                                  61.1 Banco de Dados Multidimensionais . . . . . . . . . . . . .                 .   .   .   .   480
                                       61.1.1 Modelagem Multidimensional . . . . . . . . . . . .                  .   .   .   .   481
                                  61.2 Datawarehousing . . . . . . . . . . . . . . . . . . . . . . .              .   .   .   .   483
                                  61.3 OLTP, OLAP, MOLAP, ROLAP e HOLAP . . . . . . . .                           .   .   .   .   485
                                  61.4 Outros conceitos importantes . . . . . . . . . . . . . . . .               .   .   .   .   487


                               XII     Administra¸˜o de Bancos de Dados Relacionais 489
                                                 ca
                               62 Gerˆncia de Transa¸˜es
                                     e              co                                                                            490

                               63 Controle de Concorrˆncia
                                                     e                                                                            492

                               64 Gerˆncia de Desempenho
                                     e                                                                                            494


                               XIII     Oracle e Microsoft SQL Server                                                             497
                               65 Administra¸˜o de Bancos de Dados Oracle
                                              ca                                                                                  498
                                  65.1 Arquitetura de um Servidor Oracle . . . . . . . .      .   .   .   .   .   .   .   .   .   498
                                       65.1.1 Estruturas em mem´ria . . . . . . . . . .
                                                                  o                           .   .   .   .   .   .   .   .   .   498
                                       65.1.2 Processos server . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   499
                                       65.1.3 Processos user . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   499
                                       65.1.4 Processos em Background . . . . . . . . .       .   .   .   .   .   .   .   .   .   499
                                       65.1.5 Arquivos . . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   500
                                  65.2 Arquitetura Oracle de Armazenamento de Dados           .   .   .   .   .   .   .   .   .   501
                                  65.3 Tratamento de Transa¸˜es no Oracle . . . . . . .
                                                             co                               .   .   .   .   .   .   .   .   .   501
                                       65.3.1 Gerenciamento do Redo Log . . . . . . . .       .   .   .   .   .   .   .   .   .   501
                                       65.3.2 Checkpoints . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   502
                                       65.3.3 Segmentos de rollback . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   502
                                       65.3.4 Consistˆncia de leitura . . . . . . . . . . .
                                                      e                                       .   .   .   .   .   .   .   .   .   503
                                  65.4 Configura¸˜o do Servidor . . . . . . . . . . . . .
                                                ca                                            .   .   .   .   .   .   .   .   .   503
                                  65.5 Tipos de Usu´rios Oracle . . . . . . . . . . . . .
                                                    a                                         .   .   .   .   .   .   .   .   .   504
                                       65.5.1 Administradores de banco de dados . . .         .   .   .   .   .   .   .   .   .   504
                                       65.5.2 Outros p´peis . . . . . . . . . . . . . . . .
                                                        a                                     .   .   .   .   .   .   .   .   .   505

                               66 Administra¸˜o de Bancos de Dados SQL Server
                                              ca                                                                                  506
http://www.candidatoreal.com




                                  66.1 Arquitetura de um Servidor SQL Server . . . . . . . .              .   .   .   .   .   .   506
                                       66.1.1 Cat´logos de sistema . . . . . . . . . . . . . . .
                                                 a                                                        .   .   .   .   .   .   506
                                       66.1.2 Processos em background . . . . . . . . . . . .             .   .   .   .   .   .   507
                                  66.2 Arquitetura SQL Server de Armazenamento de Dados                   .   .   .   .   .   .   507
                                  66.3 Tratamento de Transa¸˜es no SQL Server . . . . . . .
                                                             co                                           .   .   .   .   .   .   507


                               XIV      ITIL                                                                                      509
                               67 Suporte a Servi¸os
                                                   c                                                          510
                                  67.1 Service Desk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510


                                                                      13
http://www.candidatoreal.com




                                         67.1.1 Objetivos . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   510
                                         67.1.2 Responsabilidades . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   510
                                         67.1.3 V´rios Tipos de Central . .
                                                 a                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   511
                                  67.2   Gerenciamento de Incidentes . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   511
                                         67.2.1 Objetivos . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   511
                                         67.2.2 Atividades do Processo . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   511
                                         67.2.3 Pap´is e Responsabilidades
                                                    e                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   512
                                  67.3   Gerenciamento de Problemas . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   512
                                         67.3.1 Objetivos . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   512
                                         67.3.2 Defini¸˜es Importantes . . .
                                                      co                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   513
                                         67.3.3 Atividades do Processo . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   513
                                         67.3.4 Pap´is e Responsabilidades
                                                    e                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   513
                                  67.4   Gerenciamento de Configura¸˜o . .
                                                                      ca         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   514
                                         67.4.1 Objetivos . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   514
                                         67.4.2 Atividades . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   514
                                         67.4.3 Pap´is e Responsabilidades
                                                    e                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   515
                                  67.5   Gerenciamento de Mudan¸as . . .
                                                                    c            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   515
                                         67.5.1 Objetivos . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   515
                                         67.5.2 Responsabilidades . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   515
                                         67.5.3 Defini¸˜es Importantes . . .
                                                      co                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   515
                                  67.6   Gerenciamento de Libera¸˜o . . . .
                                                                   ca            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   516
                                         67.6.1 Objetivo . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   516
                                         67.6.2 Atividades do Processo . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   516
                                         67.6.3 Defini¸˜es Importantes . . .
                                                      co                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   517
                                         67.6.4 Pap´is e Responsabilidades
                                                    e                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   517

                               68 Entrega de Servi¸osc                                                                                               518
                                  68.1 Gerenciamento do N´ de Servi¸o
                                                           ıvel          c       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   518
                                       68.1.1 Objetivos . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   518
                                  68.2 Gerenciamento Financeiro . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   519
                                       68.2.1 Objetivos . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   519
                                       68.2.2 Responsabilidades . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   519
                                       68.2.3 Atividades do Processo . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   519
                                       68.2.4 Elementos de Custo . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   520
                                  68.3 Gerenciamento da Capacidade . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   521
                                       68.3.1 Objetivos . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   521
                                       68.3.2 Atividades . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   521
                                  68.4 Gerenciamento de Disponibilidade          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   522
                                       68.4.1 Objetivos . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   522
http://www.candidatoreal.com




                                       68.4.2 Ciclo de vida do incidente .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   522
                                  68.5 Gerenciamento de Continuidade . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   523
                                       68.5.1 Objetivos . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   523
                                       68.5.2 Est´gios . . . . . . . . . . .
                                                 a                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   523
                                       68.5.3 Tipos de Continuidade . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   524


                               XV        Gerˆncia de Projetos segundo PMBOK
                                            e                                                                                                        525
                               69 Gerenciamento de Escopo                                                 526
                                  69.1 WBS e Defini¸˜o do Escopo . . . . . . . . . . . . . . . . . . . . . 526
                                                  ca


                                                                        14
http://www.candidatoreal.com




                               70 Gerenciamento de Recursos Humanos                                                                               528
                                  70.1 Estruturas Organizacionais . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   528
                                       70.1.1 Organiza¸˜o Funcional . . . . .
                                                      ca                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   528
                                       70.1.2 Organiza¸˜o por Projeto . . . .
                                                      ca                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   529
                                       70.1.3 Organiza¸˜o Matricial . . . . .
                                                      ca                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   530
                                  70.2 Planejamento Organizacional . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   531
                                  70.3 Desenvolvimento da Equipe . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   531

                               71 Gerenciamento do Tempo                                                                                          534
                                  71.1 T´cnicas de Desenvolvimento do Cronograma
                                        e                                                             .   .   .   .   .   .   .   .   .   .   .   534
                                       71.1.1 An´lise Matem´tica . . . . . . . . . .
                                                 a            a                                       .   .   .   .   .   .   .   .   .   .   .   535
                                       71.1.2 Compress˜o do Cronograma . . . . . .
                                                         a                                            .   .   .   .   .   .   .   .   .   .   .   535
                                       71.1.3 Simula¸˜o . . . . . . . . . . . . . . . .
                                                     ca                                               .   .   .   .   .   .   .   .   .   .   .   536
                                       71.1.4 Heur´ıstica do nivelamento de recursos                  .   .   .   .   .   .   .   .   .   .   .   536
                                       71.1.5 Estrutura de Codifica¸˜o . . . . . . .
                                                                    ca                                .   .   .   .   .   .   .   .   .   .   .   536

                               72 Gerenciamento de Custo                                                                                          537
                                  72.1 T´cnicas de Estimativas de Custos
                                        e                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   537
                                       72.1.1 Estimativas An´logas . . .
                                                             a                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   537
                                       72.1.2 Modelagem Param´trica . .
                                                                e             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   538
                                       72.1.3 Estimativa bottom-up . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   538

                               73 Gerenciamento de Riscos                                                      539
                                  73.1 An´lise Qualitativa . . . . . . . . . . . . . . . . . . . . . . . . . . 539
                                         a
                                  73.2 An´lise Quantitativa de Riscos . . . . . . . . . . . . . . . . . . . 540
                                         a

                               74 Gerenciamento de Qualidade                                                                                      542
                                  74.1 T´cnicas de Planejamento da Qualidade
                                        e                                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   542
                                       74.1.1 An´lise Custo/Benef´
                                                 a                ıcio . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   542
                                       74.1.2 Benchmarking . . . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   543
                                       74.1.3 Fluxograma . . . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   543
                                       74.1.4 Elabora¸˜o de Experimentos . .
                                                      ca                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   543
                                       74.1.5 Custo da Qualidade . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   544
                                  74.2 T´cnicas de Controle da Qualidade . . .
                                        e                                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   544
                                       74.2.1 Gr´ficos de Controle . . . . . . .
                                                a                                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   545
                                       74.2.2 Diagramas de Pareto . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   545
                                       74.2.3 Diagramas de Dispers˜o . . . . .
                                                                    a                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   546

                               75 Gerenciamento da Comunica¸˜o  ca                                   547
                                  75.1 Um mais sobre Planejamento da Comunica¸˜o . . . . . . . . . . 547
                                                                             ca
http://www.candidatoreal.com




                               76 Gerenciamento das Aquisi¸˜es
                                                             co                                       548
                                  76.1 Um pouco mais sobre Planejamento de Aquisi¸˜es . . . . . . . . 548
                                                                                 co

                               77 Gerenciamento da Integra¸˜o ca                                           550
                                  77.1 Ferramentas de Apoio ` Integra¸˜o . . . . . . . . . . . . . . . . . 550
                                                            a        ca

                               78 Sobre os Ciclos do Projeto e Processos de Gerenciamento                                                         551




                                                                       15
http://www.candidatoreal.com




                                   Parte I

                               Fundamentos de
                                 Computa¸˜o
                                        ca
http://www.candidatoreal.com




                                      16
http://www.candidatoreal.com




                               Cap´
                                  ıtulo 1

                               Arquitetura e Organiza¸˜o
                                                     ca
                               de Computadores

                               1.1     Conceitos B´sicos
                                                  a
                               Dois conceitos fundamentais no estudo dos sistemas de computa¸˜o s˜o o de
                                                                                               ca a
                               Arquitetura e Organiza¸˜o de computadores. O termo arquitetura refere-se aos
                                                      ca
                               atributos do ponto de vista do programador, e portanto, tˆm impacto direto
                                                                                         e
                               sobre sobre a execu¸˜o l´gica de um programa. O termo organiza¸˜o, refere-se
                                                   ca o                                        ca
                               a
                               `s unidades operacionais e suas interconex˜es. Desta forma, uma mesma ar-
                                                                         o
                               quitetura pode ser implementadas por meio de diferentes organiza¸˜es.
                                                                                               co

                                   As fun¸˜es b´sicas de um computador s˜o o processamento de dados, ar-
                                         co     a                        a
                               mazenamento de dados, transferˆncia de dados e controle. Para desempenhar
                                                               e
                               essas fun¸˜es o computador precisa executar um conjunto de instru¸˜es (pro-
                                        co                                                      co
                               grama). Os computadores que conhecemos s˜o baseados no conceito de pro-
                                                                           a
                               grama armazenado, introduzido por Von-Neuman. As instru¸˜es do programa
                                                                                         co
                               e os dados s˜o armazenados em uma mem´ria, de forma que a altera¸˜o de um
                                           a                           o                        ca
                               programa consiste na altera¸ao de um endere¸o de mem´ria.
                                                          c˜              c         o

                                   O ciclo de execu¸˜o de cada uma das instru¸˜es de um programa ´ divi-
                                                    ca                          co                     e
                               dido nos seguintes estados: (i)Calculo do Endere¸o de Instru¸˜o; (ii)Busca da
                                                                                 c            ca
                               Instru¸˜o (Instruction Fetch); (iii) Decodifica¸˜o da Instru¸˜o; (iv)C´lculo do
                                     ca                                      ca            ca       a
                               Endere¸o do Operando; (v)Busca do Operando (Operand Fetch); (vi)Execu¸˜o
                                       c                                                                  ca
http://www.candidatoreal.com




                               da Opera¸˜o; (vii)Armazenamento do Resultado. No entanto, os computadores
                                         ca
                               modernos utilizam o conceito de interrup¸˜o para diminuir o tempo de ociosi-
                                                                         ca
                               dade dos processadores, o ciclo de execu¸˜o das instru¸˜es ganham mais alguns
                                                                       ca            co
                               estados. As classes de interrup¸˜es mais comuns s˜o interrup¸˜es de software,
                                                               co                  a          co
                               de rel´gio, de E/S e de falha de hardware.
                                     o

                                  A estrutura b´sica de um computador ´ composta pelos seguintes compo-
                                               a                      e
                               nentes:

                                  • (i)Unidade Central de Processamento(CPU);
                                  • (ii)Mem´ria Principal;
                                           o


                                                                    17
http://www.candidatoreal.com




                                  • (iii)Dispositivos de E/S;

                                  • (iv)Sistemas de Interconex˜o.
                                                              a

                                   Esses componentes tamb´m possuem suas subdivis˜es. A CPU por exemplo
                                                            e                        o
                               se subdivide em: Unidade de Controle, Unidade L´gica e Aritm´tica (ALU),
                                                                                   o             e
                               Registradores e por fim as Interconex˜es da CPU. Cada um desses componentes
                                                                    o
                               er´ melhor descrito posteriormente. Para interconectar dois ou mais dispositivos
                                 a
                               em um sistema s˜o utilizados os chamados barramentos. Os barramentos s˜o
                                                a                                                            a
                               compostos por linhas que podem ser de Dados, Endere¸o ou Controle. Os
                                                                                         c
                               barramentos de controle podem ser utilizados por exemplo para controlar direito
                               de leitura ou escrita em mem´ria ou E/S, interrup¸˜es, confirma¸˜es, rel´gio
                                                              o                    co             co       o
                               e reset. O projeto dos barramentos que comp˜e um sistema s˜o de grande
                                                                               o                a
                               importˆncia no desempenho do sistema. Quest˜es importantes no projeto de
                                      a                                        o
                               barramentos s˜o:
                                             a

                                  • (i)Tipo - dedicado ou multiplexado;

                                  • (ii)M´todo de Arbitra¸˜o - Centralizado ou Distribu´
                                         e               ca                            ıdo;
                                  • (iii)Temporiza¸˜o - S´
                                                  ca     ıncrona ou Ass´
                                                                       ıncrona;

                                  • (iv)Largura - n´mero de linhas;
                                                   u

                                  • (v) Tipo de Transferˆncia - leitura, escrita, leitura/modifica¸˜o/escrita,
                                                          e                                      ca
                                    escrita/leitura, em bloco.

                                   Para aumentar o desempenho do sistema, os barramentos s˜o organizados de
                                                                                             a
                               forma hier´rquica, de forma isolar o tr´fego de dados entre CPU e mem´ria do
                                          a                           a                                o
                               tr´fego proveniente de opera¸˜es de E/S. Os chamados barramentos de expans˜o
                                 a                         co                                               a
                               proporcionam maior flexibilidade ao sistema (ex: SCSI), enquanto os barramen-
                               tos de alta velocidade s˜o utilizados para dispositivos de alta capacidade (ex:
                                                       a
                               FireWire).


                               1.2     Estrutura e Funcionamento da CPU
                               Os principais elementos da CPU s˜o a Unidade de Controle , a Unidade L´gica
                                                               a                                     o
                               e Aritm´tica (ULA) e os Registradores. Esses elementos se conectam interna-
                                      e
                               mente atrav´s do barramento interno da CPU.
                                           e
http://www.candidatoreal.com




                                  A CPU se comunica com o mundo externo atrav´s dos barramentos do sis-
                                                                                    e
                               tema. Ao longo da execu¸˜o de um programa, os barramentos constituem os
                                                         ca
                               chamados caminho dos dados. No topo da organiza¸˜o hier´rquica de mem´ria
                                                                                  ca      a               o
                               em um sistema se encontram os registradores. Esses se dividem em dois tipos:
                               Registradores vis´
                                                ıveis ao Usu´rio e Registradores de Controle e de Estado.
                                                            a

                                   Os registradores vis´
                                                       ıveis ao usu´rio s˜o aqueles que podem ser referenciados
                                                                   a     a
                               pela linguagem de montagem. Eles podem ser registradores de dados, endere¸o   c
                               ou ent˜o de prop´sito geral. Os registradores de Controle e de Estado s˜o uti-
                                      a         o                                                        a
                               lizados para controlar a opera¸˜o da CPU. Na maioria das vezes n˜o s˜o vis´
                                                              ca                                 a a       ıveis
                               aos usu´rios. Exemplos de registradores de Controle e de Estado s˜o o Program
                                       a                                                          a


                                                                      18
http://www.candidatoreal.com




                               Counter (PC), Instruction Register (IR), Memory Address Register (MAR),
                               Memory Buffer Register (MBR), Program Status Word (PSW), Stack Pointer
                               (SI), Page Table Base Register (PTBR), Page Table Base Limit (PTBL).

                                  A seq¨ˆncia de eventos ao longo de um ciclo de instru¸˜o depende do projeto
                                        ue                                             ca
                               da CPU, no entanto, em termos gerais, pode-se indicar o que acontece em nos
                               subciclos de busca, indireto e interrup¸˜o. O ciclo de execu¸˜o depende do
                                                                       ca                    ca
                               c´digo da opera¸˜o que ser´ executada. A figura 1.1 mostra o diagrama de
                                o               ca          a
                               transi¸˜o de estados do ciclo de instru¸˜o.
                                     ca                               ca




                                          Figura 1.1: Transi¸˜o de Estados do Ciclo de Instru¸˜o
                                                            ca                               ca

                                    Durante o ciclo de busca, o contador de programa cont´m o endere¸o da
                                                                                             e            c
                               pr´xima instru¸˜o a ser buscada na mem´ria. Esse endere¸o ´ movido para o
                                  o             ca                        o                c e
                               registrador MAR e a unidade de controle requisita uma leitura na mem´ria. O
                                                                                                        o
                               resultado da leitura e colocado no registrador MBR, que em seguida ´ copiado
                                                                                                      e
                               para o registrador IR. Enquanto isso o PC ´ incrementado de 1 para preparar
                                                                            e
                               a busca da pr´xima instru¸˜o. O fluxo de dados do ciclo de busca ´ mostrado
                                              o            ca                                       e
                               na figura 1.2.
                                    Ao fim do ciclo de busca, o unidade de controle examina se a instru¸˜o   ca
                               especifica algum operando com endere¸amento indireto. Os n bits mais a direita
                                                                      c
                               de MBR s˜o colocados em MAR, e ent˜o a unidade de controle requisita uma
                                           a                            a
                               leitura a mem´ria para carregar o valor do operando para MBR. O fluxo de
                                               o
                               dados do ciclo de indireto ´ mostrado na figura 1.3.
                                                           e
http://www.candidatoreal.com




                                    No ciclo de interrup¸˜o, o conte´do do registrador PC dever ser salvo, para
                                                        ca          u
                               que mais tarde a CPU possa retornar sua atividade normal depois de processar
                               a interrup¸˜o. O conte´do do PC ´ transferido para MBR. A endere¸o de
                                           ca            u            e                                   c
                               mem´ria reservado para guardar o valor de PC (ex: topo da pilha) ´ carregado
                                     o                                                             e
                               para MAR, e ent˜o a unidade de controle solicita uma escrita na mem´ria. Por
                                                  a                                                   o
                               fim o PC ´ carregado com o endere¸o da rotina de interrup¸˜o, para que o no
                                           e                        c                       ca
                               pr´ximo ciclo de instru¸˜o seja feita a busca da instru¸˜o apropriada. A figura
                                  o                     ca                             ca
                               1.4 mostra o fluxo de dados do ciclo de interrup¸˜o.
                                                                                 ca




                                                                     19
http://www.candidatoreal.com




                                               Figura 1.2: Fluxo de Dados do Ciclo de Busca




                                              Figura 1.3: Fluxo de Dados do Ciclo de Indireto
http://www.candidatoreal.com




                                            Figura 1.4: Fluxo de Dados do Ciclo de Interrup¸˜o
                                                                                           ca


                               1.2.1    Pipelines
                               Como pudemos ver, um ciclo de instru¸˜o pode subdividido em etapas menores.
                                                                     ca
                               Uma divis˜o comum ´ a baseada nos ciclos de busca, indireto, execu¸˜o e inter-
                                         a         e                                              ca
                               rup¸˜o. A id´ia da t´cnica de pipeline ´ trabalhar as diversas etapas do ciclo
                                  ca        e      e                   e
                               de instru¸˜o de forma paralela, e n˜o de forma serial, de forma aumentar o
                                        ca                         a


                                                                    20
http://www.candidatoreal.com




                               desempenho da CPU.

                                   A t´cnica de pipeline pode ser descrita genericamente como uma estrat´gia
                                       e                                                                     e
                               de aceitar novas entradas em uma extremidade sem que as entradas pr´vias     e
                               tenha aparecido como sa´    ıdas na outra extremidade. Imaginemos um esquema
                               em que o ciclo de instru¸˜o ´ subdividido em 2 etapas que s˜o a busca da in-
                                                          ca e                                 a
                               stru¸˜o e a execu¸˜o. Enquanto uma instru¸˜o est´ sendo executada, a pr´xima
                                    ca           ca                         ca     a                       o
                               instru¸˜o pode estar sendo buscada. Este esquema configura um pipeline de 2
                                      ca
                               est´gios, e a t´cnica utilizada ´ a de busca antecipada de instru¸˜o (Instruction
                                  a           e                 e                                ca
                               Prefetch ou Fetch Overlap). Embora possa ser obtido um ganho de desempenho,
                               o pipeline de 2 est´gios ainda ´ muito fraco para lidar com instru¸˜es de desvio,
                                                  a             e                                 co
                               nas quais a busca da pr´xima instru¸˜o depende do resultado da execu¸˜o da
                                                          o            ca                                 ca
                               instru¸˜o corrente.
                                      ca

                                   Portanto, uma subdivis˜o do ciclo de instru¸˜o em um n´mero maior de
                                                          a                   ca          u
                               est´gios pode proporcionar maior desempenho. Imaginemos o ciclo de instru¸˜o
                                  a                                                                     ca
                               como sendo composto dos seguintes est´gios:
                                                                     a

                                  • (1)BI - Busca da Instru¸˜o;
                                                           ca
                                  • (2)DI - Decodifica¸˜o da Instru¸˜o;
                                                     ca           ca
                                  • (3)CO - Calculo dos Endere¸os dos Operandos;
                                                              c

                                  • (4)BO - Busca dos Operandos;
                                  • (5)EI - Execu¸˜o da instru¸˜o;
                                                 ca           ca

                                  • (6)EO - Escrita do Operando.

                                   Essa subdivis˜o busca fazer com que os tempos gastos em cada um dos 6
                                                 a
                               est´gios seja parecido. Se os 6 est´gios pudessem ser executados em paralelo, o
                                  a                               a
                               desempenho seria aproximadamente 6 vezes maior.

                                   No entanto, podem existir conflitos de acesso ` mem´ria por parte dos
                                                                                   a      o
                               est´gios e nem todas as instru¸˜es possuem os seis est´gios. Somam-se ` esses
                                  a                           co                     a                a
                               dois problemas, a existˆncia de instru¸˜es de desvios, principais inimigas da
                                                       e               co
                               t´cnica de pipeline. Para lidar com os problemas introduzidos pelas instru¸˜es
                                e                                                                        co
                               de desvio s˜o utilizadas t´cnicas como:
                                          a              e

                                  • M´ltiplos Fluxos (duplica¸˜o de est´gios iniciais);
                                     u                       ca        a
http://www.candidatoreal.com




                                  • Busca Antecipada de Instru¸˜o-Alvo de Desvio;
                                                              ca

                                  • Mem´ria de La¸o de Repeti¸˜o (loop buffer );
                                       o         c           ca

                                  • Previs˜o de Desvio baseadas no opcode;
                                          a

                                  • Previs˜o de Desvio baseadas em hist´rico (BTB - Branch Target Buffer,
                                           a                           o
                                    tamb´m conhecida como BHT - Branch History Table).
                                         e

                                   As figuras 1.5 e 1.6 mostram os diagramas de tempo para o pipeline de
                               instru¸˜es com e sem instru¸˜es de desvio.
                                     co                   co


                                                                      21
http://www.candidatoreal.com




                                       Figura 1.5: Diagrama do Tempo para Pipeline de Instru¸˜es
                                                                                            co




                                     Figura 1.6: Efeito do desvio condicional no Pipeline de Instru¸˜es
                                                                                                   co


                               1.3     Conjunto de Instru¸˜es
                                                         co
                               A opera¸˜o da CPU ´ determinada pelo conjunto de instru¸˜es que ela executa.
                                       ca          e                                    co
                               S˜o as chamadas instru¸˜es de m´quina. A cole¸˜o de instru¸˜es que uma CPU
                                a                     co        a             ca          co
                               pode executar ´ chamada Conjunto de Instru¸˜es. O conjunto de instru¸˜es
                                               e                             co                        co
                               deve ser suficiente para traduzir programas escritos em uma linguagem de alto
                               n´
                                ıvel para a linguagem de m´quina. Os principais elementos e uma instru¸˜o
                                                            a                                           ca
http://www.candidatoreal.com




                               s˜o:
                                a


                                  • (i)C´digo da opera¸˜o (opcode): especifica a opera¸˜o a ser efetuada;
                                        o             ca                             ca

                                  • (ii)Referˆncia ` Operando Fonte: indica as entradas para a opera¸˜o;
                                             e     a                                                ca

                                  • (iii)Referˆncia ao operando Destino: A opera¸˜o pode produzir um resul-
                                              e                                 ca
                                    tado;

                                  • (iv)Endere¸o da pr´xima instru¸˜o: Pode ser indicado implicitamente (ex:
                                               c      o           ca
                                    registrador PC).


                                                                    22
http://www.candidatoreal.com




                                  Os operandos fonte e destino podem estar localizados em mem´ria (principal
                                                                                              o
                               ou virtual), em algum registrador, ou em algum dispositivo de E/S.

                                  Cada instru¸˜o de um computador ´ representada internamente como um
                                               ca                      e
                               conjunto de bits. A instru¸˜o ´ dividida em campos correspondentes aos ele-
                                                           ca e
                               mentos da instru¸˜o. O papel da CPU e ler a instru¸˜o, extrair informa¸˜o de
                                                ca                                 ca                  ca
                               cada um dos campos e efetuar a opera¸˜o. Devido `s dificuldades de se lidar
                                                                       ca           a
                               com a representa¸˜o bin´ria, ´ utilizada uma esp´cie de nota¸˜o simb´lica para
                                                ca      a    e                 e           ca      o
                               representar as instru¸˜es de m´quina. Os c´digos das opera¸˜es s˜o representa-
                                                    co        a           o               co   a
                               dos por mnemˆnicos. (ex: ADD, SUB, MPY, DIV, LOAD, STOR). O mesmo
                                              o
                               ocorre para os operandos. Um conjunto de instru¸˜es pode apresentar mais de
                                                                                co
                               um formato de instru¸˜o.
                                                     ca

                                  As instru¸˜es podem ser classificadas em:
                                           co

                                  • (i)Processamento de Dados: instru¸˜es l´gicas e aritm´ticas;
                                                                     co o                e

                                  • (ii)Armazenamento de dados: instru¸˜es de mem´ria;
                                                                      co         o
                                  • (iii)Movimenta¸˜o: instru¸˜es de E/S;
                                                  ca         co

                                  • (iv)Controle: instru¸˜es de teste e desvio.
                                                        co

                                   No projeto do conjunto de instru¸˜es as quest˜es mais relevantes s˜o o
                                                                      co            o                    a
                               repert´rio de opera¸˜es, os tipos de dados, o formato e tamanho das instru¸˜es,
                                      o           co                                                     co
                               os registradores acess´
                                                     ıveis, e os modos de endere¸amento. As classes de dados
                                                                                 c
                               sobre as quais as instru¸˜es de m´quina operam s˜o endere¸os, n´meros (ex:
                                                        co        a                a        c    u
                               ponto fixo, ponto flutuante, decimal), caracteres (ex: ASCII e EBCDIC) e da-
                               dos l´gicos.
                                    o

                                  Os tipos de opera¸˜es mais comuns s˜o:
                                                   co                a

                                  • (i)Transferˆncia de Dados: mov,push/pop,xlat,in/out;
                                               e
                                  • (ii)Aritm´ticas: add,sub,mul,idiv;
                                             e

                                  • (iii)L´gicas: and,or,shl/shr;
                                          o

                                  • (iv)Convers˜o de Tipos: jmp,call,loop,int/into;
                                               a

                                  • (vi)Controle do Sistema: hlt,wait;
http://www.candidatoreal.com




                                  • (vii)Transferˆncia de Controle: blt,bgt,beq,call,jmp.
                                                 e

                                  Nas opera¸˜es de salto e desvio, ´ importante conhecer cada um dos c´digos
                                            co                     e                                  o
                               de condi¸˜o envolvidos. (ex: Vai-Um, Zero, Paridade, Sinal, Overflow) Na im-
                                       ca
                               plementa¸˜o das chamadas de procedimento ´ importante ressaltar a utiliza¸˜o
                                        ca                                  e                            ca
                               de pilhas para permitir chamadas reentrantes (uma chamada dentro da outra).




                                                                     23
http://www.candidatoreal.com




                               1.4     Unidade de Controle
                               A unidade de controle coordena os diversos elementos do processador para que
                               este possa realizar todas as suas fun¸˜es. A execu¸˜o de um programa consiste
                                                                     co          ca
                               de uma seq¨ˆncia de ciclos de instru¸˜o. Um ciclo de instru¸˜o pode ser sub-
                                           ue                         ca                   ca
                               dividido em quatro subciclos que s˜o busca, indireto, execu¸˜o e interrup¸˜o.
                                                                    a                     ca            ca
                               Somente os ciclos de busca e execu¸˜o est˜o presentes em todos os ciclos de
                                                                     ca    a
                               instru¸˜o. Cada subciclo, por sua vez, ´ composto por microopera¸˜es.
                                     ca                                 e                       co

                                  Os quatro registradores b´sicos da unidade de controle s˜o:
                                                           a                              a

                                  • PC (Program Counter ): Mant´m o endere¸o da pr´xima instru¸˜o a ser
                                                               e          c       o           ca
                                    buscada na mem´ria;
                                                  o
                                  • MAR (Memory Address Register ): Especifica endere¸o de memoria para
                                                                                    c
                                    uma opera¸˜o de leitura ou escrita;
                                             ca
                                  • MBR (Memory Buffer Register ): Conectado ao barramento do sistema.
                                    Cont´m um valor a ser armazenado na mem´ria ou o ultimo valor dela
                                          e                                o         ´
                                    lido;
                                  • IR (Instruction Register ): Mant´m a ultima instru¸˜o buscada na mem´ria.
                                                                    e    ´            ca                o


                                   O ciclo de busca ocorre no in´ıcio de cada ciclo de instru¸˜o, fazendo com
                                                                                              ca
                               que a instru¸˜o seja obtida na mem´ria no endere¸o indicado pelo registrador
                                            ca                      o              c
                               PC, e armazenada no registrador IR. Uma vez completada essa etapa, pode ser
                               necess´rio que se busquem operandos para a instru¸˜o. Isso ´ realizado no ciclo
                                     a                                             ca       e
                               de indireto. Ap´s o termino do ciclo de execu¸˜o, ´ feita uma checagem para
                                                o                              ca e
                               determinar se ocorreu alguma interrup¸˜o, e neste caso o conte´do de PC ´
                                                                        ca                       u            e
                               salvo em mem´ria e PC ´ carregado com um endere¸o da rotina de interrup¸˜o
                                              o        e                            c                      ca
                               apropriada. Os ciclos de busca, indireto e de interrup¸˜o envolvem um n´mero
                                                                                      ca                 u
                               pequeno e fixo de microopera¸˜es. Isso n˜o ocorre nos ciclos de execu¸˜o. Em
                                                            co            a                           ca
                               uma m´quina com N c´digos de instru¸˜o podem existir N diferentes seq¨ˆncias
                                      a              o                ca                               ue
                               de microopera¸˜es para o ciclo de execu¸˜o.
                                              co                        ca

                                  Todas as microopera¸˜es caem em uma das seguintes categorias:
                                                     co

                                  • (i)Transferˆncia de dados entre registradores;
                                               e
                                  • (ii)Transferˆncia de dados entre registrador e interface externa (barra-
                                                e
http://www.candidatoreal.com




                                    mento);
                                  • (iii)Transferˆncia de dados de interface externa para registrador;
                                                 e
                                  • (iv)Execu¸˜o de opera¸˜es l´gicas e aritm´ticas, usando registradores como
                                             ca          co o                e
                                    entrada e sa´
                                                ıda.

                                   Portanto, a unidade de controle desempenha duas tarefas b´sicas que s˜o o
                                                                                              a          a
                               seq¨enciamento e a execu¸˜o das microopera¸˜es. A base para o funcionamento
                                  u                     ca                 co
                               da unidade de controle s˜o os sinais de controle, que constituem as entradas e
                                                       a
                               sa´
                                 ıdas.



                                                                     24
http://www.candidatoreal.com




                                  As unidades de controle podem ser implementadas tanto em hardware quanto
                               em software (Microprograma¸˜o). A implementa¸˜o baseada em micropro-
                                                            ca                  ca
                               grama¸˜o ´ mais simples e tamb´m mais barata do que as implementa¸˜es em
                                     ca e                      e                                    co
                               hardware. As implementa¸˜es em hardware envolvem a cria¸˜o de uma l´gica
                                                         co                               ca           o
                               complexa para sequenciamento das microopera¸˜es, o que a torna mais cara.
                                                                             co
                               No entanto, ´ mais eficiente dos que as implementa¸˜es basadas em micropro-
                                            e                                    co
                               grama¸˜o. As arquiteturas CISC geralmente utilizam unidades de controle mi-
                                     ca
                               croprogramadas, devido ao grande n´mero de instru¸˜es e sua complexidade. J´
                                                                  u             co                        a
                               as arquiteturas RISC, geralmente utilizam implementa¸˜es baseadas em hard-
                                                                                    co
                               ware uma vez que o n´mero de instru¸˜es ´ reduzido e de baixa complexidade.
                                                    u               co e

                                   As t´cnicas de microprograma¸˜o tamb´m podem ser aplicadas em em-
                                       e                         ca        e
                               ula¸˜es, permitindo que m´quinas rodem programas escritos originalmente para
                                  co                    a
                               outras m´quinas. Microprogramas podem conferir maior desempenho ao sis-
                                         a
                               tema operacional se forem utilizados na implementa¸˜o de certas primitivas.
                                                                                     ca
                               Al´m disso, as t´cnicas de microprograma¸˜o podem ser utilizadas na imple-
                                 e              e                        ca
                               menta¸˜o de dispositivos de prop´sito especial, por exemplo uma placa de rede
                                     ca                        o
                               (firmware).


                               1.5     Modos de Endere¸amento
                                                      c
                               Os modos de endere¸amento est˜o relacionados com a forma utilizada para
                                                     c           a
                               especificar o valor ou endere¸o de um operando de uma instru¸˜o. Quest˜es im-
                                                            c                               ca        o
                               portantes na escolha do modo de endere¸amento s˜o a quantidade de posi¸˜es de
                                                                      c        a                      co
                               mem´ria endere¸´veis, flexibilidade de endere¸amento, n´mero de referˆncias a
                                    o          ca                           c          u             e
                               mem´ria feitas pela instru¸˜o e complexidade do c´lculo do endere¸o. Em geral,
                                    o                     ca                    a               c
                               as arquitetura n˜o oferecem s´ um modo de endere¸amento, mas sim um con-
                                                a             o                   c
                               junto de modos. Por este motivo, ´ necess´rio que exista uma forma de se
                                                                    e      a
                               identificar qual o modo de endere¸amento que se est´ utilizando. Isso ´ feito
                                                                  c                 a                  e
                               atrav´s do campo de modo de endere¸amento, que consiste em um subconjunto
                                    e                               c
                               dos bits de uma instru¸˜o.
                                                       ca


                                  • Imediato: o valor do operando ´ especificado diretamente na instru¸˜o.
                                                                  e                                  ca
                                    Sua principal vantagem ´ n˜o requer acesso a mem´ria para obter o
                                                            e a                        o
                                    operando. A desvantagem ´ que esse modo imp˜e uma limita¸˜o no
                                                               e                     o            ca
                                    tamanho do operando;
                                  • Direto: o campo de endere¸o contem o endere¸o efetivo do operando na
                                                               c                  c
http://www.candidatoreal.com




                                    mem´ria. Requer portanto apenas um acesso para determinar o valor do
                                         o
                                    operando. Sua limita¸˜o ´ fornecer um espa¸o de endere¸amento limitado;
                                                        ca e                  c           c

                                  • Indireto: o campo de endere¸o aponta para uma posi¸˜o de mem´ria que
                                                                c                       ca       o
                                    contem o endere¸o de mem´ria do operando. Sua principal desvantagem
                                                     c         o
                                    ´ a necessidade de dois acessos ` mem´ria. A vantagem em rela¸˜o ao
                                    e                                a     o                       ca
                                    modo de endere¸amento direto ´ o aumento do espa¸o de endere¸amento,
                                                    c              e                  c         c
                                    que passa a ser igual 2n onde n ´ o tamanho da palavra;
                                                                    e

                                  • Registrador : ´ semelhante ao modo direto, no entanto o modo de endere¸o
                                                  e                                                       c
                                    se refere a um registrador e n˜o ` uma posi¸˜o de mem´ria. Geralmente ´
                                                                  a a          ca          o                e


                                                                    25
http://www.candidatoreal.com




                                     composto por 3 ou 4 bits, o que permite referenciar de 8 a 16 registradores
                                     de prop´sito geral. Suas vantagens s˜o o tamanho pequeno do campo de
                                             o                           a
                                     endere¸o e n˜o necessidade de se acessar a mem´ria. Sua desvantagem ´
                                           c     a                                    o                        e
                                     o espa¸o de endere¸amento limitado pelo n´mero de registradores;
                                           c            c                       u
                                  • Indireto via Registrador : semelhante ao modo de endere¸amento indireto.
                                                                                           c
                                    O campo de endere¸o aponta para o registrado que contem a posi¸˜o de
                                                        c                                            ca
                                    mem´ria do operando. Sua vantagem ´ a necessidade de um unico acesso
                                         o                                 e                   ´
                                    a mem´ria, um a menos que no modo indireto;
                                           o
                                  • Deslocamento: requer que uma instru¸˜o tenha dois campos de endere¸o,
                                                                           ca                            c
                                    com pelo menos um expl´    ıcito. O valor de um dos campos ´ usado dire-
                                                                                               e
                                    tamente (valor = A). O outro campo ´ baseado no c´digo da opera¸˜o, e
                                                                            e            o            ca
                                    especifica um registrador cujo conte´do ´ adicionado a A, para produzir o
                                                                          u e
                                    endere¸o efetivo. Os trˆs modos de endere¸amento por deslocamento s˜o
                                           c                 e                  c                        a
                                    relativo, via registrador-base e indexado;
                                  • Pilha: A pilha ´ um bloco reservado de posi¸˜es em mem´ria. Elementos
                                                    e                            co           o
                                    podem ser colocados e removidos do topo da pilha. o apontador do topo
                                    da pilha (stack-pointer ) ´ mantido em um registrador. Portanto, de fato,
                                                              e
                                    referˆncias a pilha s˜o feitas por endere¸amento indireto via registrador.
                                         e               a                   c


                               1.6     Organiza¸˜o de Mem´ria
                                               ca        o
                               Um sistema de computador t´   ıpico ´ equipado com uma hierarquia de subsis-
                                                                    e
                               temas de mem´ria, algumas internas (diretamente acess´
                                               o                                     ıveis pelo processador,
                               como registradores, cache e mem´ria principal) e outras externas (acess´
                                                                  o                                     ıveis
                               pelo processador por meio de um m´dulo de E/S, como disco e cdrom). As
                                                                      o
                               caracter´
                                       ısticas fundamentais de um sistema de mem´ria s˜o:
                                                                                 o    a

                                 1. Localiza¸˜o - processador, interna (principal), externa (secund´ria);
                                            ca                                                     a
                                 2. Capacidade - tamanho da palavra e n´mero da palavra;
                                                                       u
                                 3. Unidade de Transferˆncia - palavra, bloco;
                                                       e
                                 4. M´todo de Acesso - seq¨encial, direto, aleat´rio, associativo;
                                     e                    u                     o
                                 5. Desempenho - tempo de acesso, tempo de ciclo e taxa de transferˆncia;
                                                                                                   e
                                 6. Tecnologia - semicondutores, magn´tica, ´ptica, magneto-´ptico;
                                                                     e      o               o
http://www.candidatoreal.com




                                 7. Caracter´
                                            ısticas F´
                                                     ısicas - vol´til/n˜o vol´til, apag´vel/n˜o apag´vel.
                                                                 a     a     a         a     a      a

                                   Quanto ao m´todo de acesso das mem´rias internas, vale a pena destacar os
                                                e                       o
                               acessos aleat´rio e associativo. No acesso aleat´rio, cada unidade endere¸´vel
                                            o                                  o                        ca
                               possui um mecanismo de endere¸amento unico e fisicamente conectado a ela. E
                                                                c       ´                                  ´
                               o m´todo utilizado na mem´ria principal. O esquema associativo consiste em
                                   e                        o
                               um tipo de mem´ria de acesso aleat´rio que possibilita comparar simultanea-
                                                 o                  o
                               mente um certo n´mero de bits de uma palavra com todas palavras da mem´ria
                                                 u                                                       o
                               (totalmente associativo) ou com um conjunto de palavras de mem´ria (associa-
                                                                                                o
                               tivo por conjunto). O m´todo associativo ´ empregado pelas mem´rias cache.
                                                        e                 e                      o



                                                                      26
http://www.candidatoreal.com




                                  As restri¸˜es de um projeto de mem´ria podem ser resumidos por 3 quest˜es:
                                           co                       o                                    o
                               Capacidade, Velocidade e Custo. Neste cen´rio, valem as seguintes rela¸˜es:
                                                                         a                           co

                                 1. Menor tempo de acesso, maior custo por bit;
                                 2. Maior capacidade, menor custo por bit;
                                 3. Maior capacidade, menor tempo de acesso.

                                  A organiza¸˜o hier´rquica dos sistemas de mem´ria visa lidar com o dilema
                                             ca      a                           o
                               imposto pelas rela¸˜es apresentadas. A hierarquia ´ elaborada de forma que as
                                                 co                              e
                               a medida que nela descemos as seguintes rela¸˜es s˜o tamb´m v´lidas:
                                                                           co    a       e    a

                                  1 O custo por bit diminui;
                                  2 A capacidade aumenta;
                                  3 O tempo de acesso aumenta;
                                  4 A freq¨ˆncia de acesso pelo processador diminui.
                                          ue

                                  Desse modo, as mem´rias menores, mais caras e mais r´pidas s˜o combi-
                                                     o                                  a     a
                               nadas com mem´ria de maior capacidade, mais lentas e baratas.
                                             o

                                   A chave do sucesso dessa organiza¸˜o baseia-se principalmente na rela¸˜o
                                                                      ca                                  ca
                               4, que resume o princ´ıpio da Localidade das Referˆncias. Este princ´
                                                                                  e                  ıpio diz
                               que ao longo da execu¸˜o de um programa, as referˆncias feitas ` mem´ria pelo
                                                    ca                          e             a     o
                               processador, tanto no caso de instru¸˜es como dados, tendem a formar grupos
                                                                   co
                               no qual est˜o pr´ximas umas das outras. Desse modo ´ poss´
                                           a   o                                      e     ıvel organizar os
                               dados ao longo de uma hierarquia de forma que a porcentagem de acessos ` um
                                                                                                        a
                               certo n´ seja sucessivamente bem inferior do que a porcentagem de acessos `
                                      ıvel                                                                   a
                               um n´ imediatamente superior.
                                    ıvel

                                   Registradores, mem´ria cache e mem´ria principal s˜o as trˆs formas de
                                                        o                 o               a       e
                               mem´ria interna que empregam tecnologias de semicondutores. O uso de trˆs
                                     o                                                                       e
                               n´ıveis explora as diferen¸as de velocidade e custo dessas mem´rias. Al´m de-
                                                         c                                     o        e
                               las, alguns sistemas utilizam tecnologias e t´cnicas adicionais na hierarquia de
                                                                            e
                               mem´ria.
                                     o

                                  A Mem´ria Expandida emprega uma tecnologia mais lenta que a mem´rias
                                          o                                                          o
                               principais. Ela funciona como um ramo lateral a mem´ria principal, n˜o se
                                                                                    o                a
http://www.candidatoreal.com




                               comunicando com a mem´ria externa. J´ a t´cnica de Mem´ria Virtual permite
                                                        o           a e               o
                               que os discos funcionem como uma extens˜o da mem´ria principal, aumentando
                                                                      a         o
                               o desempenho do sistema.

                                   A utiliza¸˜o de mem´rias cache tem por objetivo proporcionar uma veloci-
                                            ca         o
                               dade de acesso pr´xima a velocidade de acesso aos registradores, no entanto
                                                  o
                               oferecendo uma capacidade maior do que o conjunto de registradores, e custo
                               n˜o muito superior ao da mem´ria principal. Os principais elementos de projeto
                                a                           o
                               de mem´rias cache s˜o:
                                       o            a

                                  i Tamanho - deve ser projetado para conjugar bem velocidade, capacidade
                                    e custo;

                                                                     27
http://www.candidatoreal.com




                                  ii Fun¸˜o de Mapeamento - direto, associativo, associativo por conjuntos;
                                        ca

                                 iii Algoritmo de Substitui¸˜o - LRU, FIFO, LFU, Aleat´rio;
                                                           ca                         o

                                 iv Pol´
                                       ıtica de Escrita - direta (write-through), de volta (write-back) e unica
                                                                                                          ´
                                    (write-once);

                                  v Tamanho da Linha;

                                 vi N´mero de Mem´rias Cache - um ou dois n´
                                     u           o                         ıveis, unificada/separada.

                                   Entre os elementos de projeto de mem´ria cache vale destacar trˆs. O
                                                                           o                           e
                               primeiro ´ a Fun¸˜o de Mapeamento, que diz respeito a determinar onde um
                                         e         ca
                               bloco da mem´ria principal pode ser encontrado na mem´ria cache. Para re-
                                               o                                         o
                               alizar este mapeamento s˜o necess´rios o endere¸o do bloco na mem´ria prin-
                                                          a       a             c                   o
                               cipal e a fun¸˜o de mapeamento. No esquema de mapeamento direto, um de-
                                             ca
                               terminado conjunto de blocos da mem´ria principal s´ pode ser encontrado em
                                                                      o               o
                               uma linha espec´             o           ´
                                                 ıfica da mem´ria cache. E de f´cil implementa¸˜o, por´m pode
                                                                              a              ca      e
                               utilizar de forma ineficiente o espa¸o da cache. No mapeamento associativo
                                                                   c
                               um bloco da mem´ria principal pode ser colocado em qualquer linha da cache.
                                                    o
                               Maximiza a ocupa¸˜o da cache, por´m exige uma l´gica de controle que real-
                                                     ca             e               o
                               ize compara¸˜o do r´tulo com todas as linhas do cache simultaneamente. No
                                            ca         o
                               esquema associativo por conjuntos, um bloco da mem´ria principal pode se en-
                                                                                      o
                               contrar em um conjunto de linhas da cache, e n˜o nela toda. Visa conjugar
                                                                                  a
                               vantagens dos m´todos direto e associativo.
                                                  e

                                   O segundo elemento ´ Pol´
                                                         e    ıtica de Escrita, que visa garantir a coerˆncia das
                                                                                                         e
                               informa¸˜es nos diferentes mem´rias acess´
                                        co                        o          ıveis pelo processador e dispositivos
                               de E/S. Na t´cnica ´ a de escrita direta (write-through), todas as opera¸˜es de
                                             e      e                                                      co
                               escrita s˜o feitas na mem´ria principal e no cache. Esta garante a coerˆncia em
                                        a                 o                                              e
                               todas as mem´rias do sistema, no entanto ´ de baixo desempenho. Na t´cnica
                                               o                              e                             e
                               de escrita de volta (write-back), as escritas s˜o feitas apenas na cache. Minimiza
                                                                              a
                               as opera¸˜es de escrita em mem´ria principal, por´m imp˜e que opera¸˜es de
                                         co                       o                   e       o            co
                               E/S acessem o cache.

                                   O terceiro elemento ´ o n´mero de mem´rias cache do sistema. Atualmente,
                                                       e    u              o
                               a organiza¸˜o mais comuns ´ baseada em 2 n´
                                          ca                e                 ıveis, um interno ao processador
                               (L1) e outro externo (L2). Originalmente, a maioria dos projetos de cache
                               inclui uma unica mem´ria cache, que armazenava tanto instru¸˜es como da-
                                            ´         o                                         co
                               dos. Recentemente, tornou-se comum a utiliza¸˜o de mem´rias separadas para
                                                                               ca          o
http://www.candidatoreal.com




                               instru¸˜es e dados. Em processadores modernos que se valem de t´cnicas de
                                     co                                                             e
                               busca antecipada de instru¸˜o (Pipeline), t´cnicas de Cache Separadas s˜o mais
                                                          ca              e                            a
                               eficientes que as de Cache Unificada.


                               1.7     Desempenho do computador
                               O desempenho de um computador pode ser definido como:
                                                                               1
                                                    Desempenho =                                             (1.1)
                                                                      T empo de Execucao



                                                                       28
http://www.candidatoreal.com




                                   O tempo ´ a medida de desempenho de um sistema computacional. Em
                                              e
                               geral, ele ´ medido em segundos e pode ser definido de diferentes maneiras. O
                                          e
                               tempo de resposta ou tempo decorrido (elapsed time) define o tempo total para
                               se completar uma tarefa computacional, incluindo os acessos ` mem´ria e ao
                                                                                            a      o
                               disco, as atividades de entrada e sa´ e o overhead do sistema operacional.
                                                                   ıda

                                  O tempo do processador (CPU time) define o tempo gasto pelo proces-
                               sador para executar um programa em particular, n˜o considerando o tempo de
                                                                                a
                               execu¸˜o de outros programas, tempo de espera por I/O, etc. Este tempo ´
                                     ca                                                                    e
                               dividido em tempo do usu´rio e tempo do sistema. O tempo do usu´rio ´ o
                                                        a                                           a    e
                               tempo gasto na execu¸˜o das instru¸˜es do programa do usu´rio. J´ o tempo
                                                    ca            co                      a      a
                               do sistema ´ o tempo gasto pelo sistema operacional para executar tarefas em
                                          e
                               benef´ do programa do usu´rio. A medida de tempo que mais interessa ´ o
                                     ıcio                  a                                             e
                               tempo de usu´rio.
                                            a

                                   Os projetistas medem a velocidade do hardware na execu¸˜o de suas fun¸˜es
                                                                                              ca            co
                               b´sicas com o clock. O clock possui uma taxa constante e determina o momento
                                a
                               da ocorrˆncia de eventos do pr´prio hardware. O tamanho de um per´
                                        e                      o                                         ıodo de
                               clock ´ referenciado tanto como o tempo necess´rio para completar um ciclo de
                                     e                                         a
                               clock quanto como a freq¨ˆncia do clock (inverso do ciclo de clock). Por exemplo,
                                                        ue
                               um ciclo de clock igual a 2 ηs corresponde a uma freq¨ˆncia de 500MHz, que ´
                                                                                       ue                      e
                               o inverso do ciclo de clock.

                               1.7.1    Tempo de execu¸˜o de um programa
                                                      ca
                               F´rmulas bastante simples relacionam a medida do tempo de execu¸˜o gasto no
                                o                                                               ca
                               processador com a m´trica b´sica baseada nos ciclos de clock e tempo do ciclo
                                                   e       a
                               de clock:


                                    Tempo de CPU do programa        = N de ciclos x Per´
                                                                                       ıodo de clock
                                                                    = N de ciclos / Freq¨ˆncia do clock
                                                                                         ue

                                  Essas f´rmulas n˜o incluem qualquer referˆncia ao n´mero de instru¸˜es
                                          o         a                       e         u                co
                               necess´rias ` execu¸˜o de um programa. O tempo de execu¸˜o tamb´m depende
                                     a     a      ca                                  ca       e
                               do n´mero de instru¸˜es do programa. O n´mero de ciclos de clock necess´rios
                                   u               co                   u                             a
                               a
                               ` execu¸˜o de uma instru¸˜o ´ dado por:
                                       ca                ca e

                                         No de ciclos de clock = No instru¸˜es do programa x CPI
                                                                          co                               (1.2)
http://www.candidatoreal.com




                                  A CPI ´ a m´dia do n´mero de ciclos por instru¸˜o. Este parˆmetro permite
                                         e     e        u                       ca           a
                               a compara¸˜o entre diferentes implementa¸˜es de uma mesma arquitetura do
                                         ca                             co
                               conjunto de instru¸˜es, uma vez que o n´mero de instru¸˜es para a execu¸˜o do
                                                 co                   u              co               ca
                               programa nas diferentes implementa¸˜es ´ o mesmo.
                                                                   co e


                               1.7.2    Desempenho da CPU
                               O desempenho da CPU na execu¸˜o de um programa pode ser medido em termos
                                                              ca
                               quantidade de instru¸˜es, do CPI e do per´
                                                   co                   ıodo do clock:



                                                                      29
http://www.candidatoreal.com




                                       Tempo de CPU = No de instru¸˜es x CPI x Per´
                                                                  co              ıodo do clock           (1.3)

                                  O tempo de CPU ´ medido executando o programa, o per´
                                                     e                                      ıodo do clock ´e
                               divulgado pelo fabricante e o n´mero de instru¸˜es ´ obtido por meio de soft-
                                                              u              co e
                               wares conhecidos como execution profilers ou por simuladores de arquitetura.

                                   Em uma primeira aproxima¸˜o, o n´mero de instru¸˜es, a CPI e o per´
                                                               ca     u               co                   ıodo
                               do clock s˜o afetados respectivamente pela capacidade de otimiza¸˜o do com-
                                         a                                                        ca
                               pilador, pela arquitetura do processador e de seu conjunto de instru¸˜es; e pela
                                                                                                   co
                               tecnologia empregada na implementa¸˜o da m´quina.
                                                                    ca        a

                               1.7.3     Programas para medir desempenho
                               Existem quatro n´ıveis de programas que podem ser usados para avalia¸˜o de
                                                                                                      ca
                               desempenho, eles est˜o listados em ordem decrescente de precis˜o de previs˜o:
                                                   a                                         a           a

                                  • Programas reais;
                                  • N´cleos ou kernels (peda¸os de programas reais);
                                     u                      c
                                  • Toy Benchmarks (programas com 10 a 100 linhas de c´digo que produzem
                                                                                      o
                                    um resultado conhecido a priori);
                                  • Benchmarks sint´ticos (similar em filosofia aos n´cleos, tentam casar a
                                                    e                              u
                                    freq¨ˆncia m´dia de opera¸˜es de um grande conjunto de programas).
                                        ue      e            co

                                   Os benchmarks s˜o conjuntos de aplica¸˜es que representam cargas de tra-
                                                    a                     co
                               balho cujo objetivo ´ estimar o desempenho das cargas de trabalho reais. Os
                                                   e
                               benchmarks podem conter aplica¸˜es t´
                                                                co    ıpicas de processamento cient´
                                                                                                   ıfico, com-
                               piladores, processadores de texto entre outras.

                                  Um Benchmark Suite ´ um conjunto de programas de avalia¸˜o. A Stan-
                                                       e                                     ca
                               dard Performance Evaluation Corporation (SPEC) tem lan¸ado v´rios bench-
                                                                                       c      a
                               mark suites: SPEC89, SPEC92, SPEC95 e SPEC2000. Estas benchmark suites
                               s˜o compostas por programas reais, escolhidos para serem representativos de
                                a
                               programas que tipicamente demandam muita CPU e pouco I/O.

                               1.7.4     Comparando desempenho
http://www.candidatoreal.com




                               Uma vez selecionados os programas adequados para usar como benchmarks e
                               decidida a m´trica de avalia¸ao, tempo de resposta ou throughput (n´mero de
                                            e              c˜                                      u
                               tarefas executadas por unidade de tempo), ´ necess´rio decidir como comparar
                                                                          e      a
                               os dados de desempenho obtidos a partir de diferentes benchmarks.

                                  A maneira mais simples de considerar o desempenho relativo ´ usar o tempo
                                                                                             e
                               total de execu¸˜o de dois programas em m´quinas diferentes. Por exemplo, os
                                             ca                          a
                               tempos de execu¸˜o de dois programas conforme a tabela 1.1.
                                                ca
                                  Outra maneira de sumarizar os tempos ´ utilizando as m´dias aritm´tica,
                                                                           e               e           e
                               harmˆnica ou geom´trica. A m´dia geom´trica ´ inadequada, pois n˜o prediz o
                                     o             e          e       e      e                   a
                               tempo de execu¸˜o.
                                              ca

                                                                     30
http://www.candidatoreal.com




                                                               Computador A     Computador B
                                            Programa 1 (s)          1                10
                                            Programa 2 (s)        1000              100
                                            Total (s)             1001              110


                                           Tabela 1.1: Tempo total de execu¸˜o de 2 programas
                                                                           ca


                                                                                            1
                                                   M´dia Aritm´tica = Tempo (i,n) =
                                                    e         e                                             (1.4)
                                                                                            n
                                                                                         n
                                               M´dia Harmˆnica = Taxa (i,n) =
                                                e        o                            n      1              (1.5)
                                                                                      i=1 T axai


                                                                                        n
                                M´dia Geom´trica = Tempo Normalizado (i,n) =
                                 e        e                                       n
                                                                                             T normalizadoi (1.6)
                                                                                       i=1


                                   Al´m das m´dia, existem ainda outras medidas de desempenho. Uma das
                                     e          e
                               alternativas ´ a m´trica MIPS (million instruction per second), que ´ dada por
                                            e     e                                                e
                               um das seguintes express˜es:
                                                        o

                                                                 N´mero de instru¸˜es
                                                                  u              co
                                                   MIPS    =
                                                               Tempo de execu¸˜o x 106
                                                                              ca
                                                               Freq¨ˆncia de Clock
                                                                   ue
                                                           =
                                                                    CPI 106
                                   Existem problemas com o uso da m´trica MIPS. Ela especifica a taxa de
                                                                      e
                               execu¸˜o de instru¸˜es, mas n˜o considera a capacidade de executar mais ou
                                     ca           co           a
                               menos trabalho. Portanto, n˜o podemos comparar m´quinas com conjuntos de
                                                            a                     a
                               instru¸˜es diferentes. Outro problema ´ que os resultados obtidos variam en-
                                     co                              e
                               tre programas no mesmo computador, o que impede que determinada m´quina
                                                                                                     a
                               tenha um MIPS caracter´ ıstico.

                                  Outra alternativa ´ a m´trica denominada MFLOPS (million floating-point
                                                    e     e
                               operations per second), que ´ dada pela seguinte express˜o:
                                                           e                           a
                                                           N´mero de op. de ponto flutuante
                                                            u
http://www.candidatoreal.com




                                              MFLOPS =                                                      (1.7)
                                                              Tempo de execu¸˜o x 106
                                                                             ca
                                  Uma opera¸˜o de ponto flutuante pode ser uma opera¸˜o de adi¸˜o, sub-
                                             ca                                        ca        ca
                               tra¸˜o, multiplica¸˜o ou divis˜o aplicada a operandos expressos em precis˜o
                                  ca             ca          a                                          a
                               simples ou dupla.

                               1.7.5    Lei de Amdahl
                               A lei de Amdhal pode ser utilizada para demonstrar o ganho de desempenho
                               de uma m´quina. Este ganho ´ dito acelera¸˜o ou speedup. Entende-se por
                                         a                   e           ca
                               acelera¸˜o a medida de como a m´quina se comporta ap´s a implementa¸˜o
                                      ca                        a                     o             ca


                                                                    31
http://www.candidatoreal.com




                               de uma melhora em rela¸˜o ao seu comportamento anterior. Podemos definir
                                                     ca
                               speedup como:
                                                            Desempenho ap´s a melhora
                                                                         o
                                               speedup =                                           (1.8)
                                                           Desempenho antes da melhora
                                  A lei de Amdhal demonstra que ´ errado esperar que a melhora em um dos
                                                                 e
                               aspectos que influenciam no desempenho da m´quina resulte numa melhora no
                                                                           a
                               desempenho total proporcional ao tamanho do ganho inicial da fra¸˜o.
                                                                                               ca
http://www.candidatoreal.com




                                                                  32
http://www.candidatoreal.com




                               Cap´
                                  ıtulo 2

                               Componentes de um
                               Computador

                               O computador est´ organizado em dois componentes que s˜o:
                                               a                                     a

                                  • Hardware: corresponde a parte f´ısica que est´ dividida em: unidade de
                                                                                 a
                                    entrada e sa´
                                                ıda, processador, mem´ria principal e mem´ria secund´ria;
                                                                     o                    o         a
                                              e                               a      a a        ´
                                  • Software: ´ o conjunto de programas que d´ vida ` m´quina. E classificado
                                    em software aplicativo (jogos, planilha, etc.) e software b´sico (sistema
                                                                                               a
                                    operacional, compiladores, editores de texto, etc.).

                                  Para interligar os componentes do hardware existe uma placa de suporte
                               especial, chamada placa-m˜e. A placa-m˜e ´ respons´vel por gerenciar toda a
                                                         a              a e        a
                               transa¸˜o entre o processador e os perif´ricos. Os componentes principais da
                                     ca                                e
                               placa-m˜e s˜o: chipset, BIOS, barramentos, e slots.
                                       a a

                                   Chipset ´ o chip respons´vel pelo controle de diversos dispositivos de entrada
                                            e                a
                               e sa´ como o barramento, o acesso ` mem´ria, o acesso ao HD, perif´ricos
                                    ıda                                 a       o                           e
                               on-board e off-board, comunica¸˜o do processador com a mem´ria RAM e en-
                                                                ca                                o
                               tre outros componentes da placa-m˜e. Uma placa-m˜e possui dois chipsets: o
                                                                     a                 a
                               chipset sul e o chiset norte. O chipset sul (south bridge) ´ respons´vel pelo cont-
                                                                                          e         a
                               role de dispositivos de entrada ou sa´ enquanto o chipset norte (north bridge)
                                                                     ıda
                               faz a comunica¸˜o entre o processador e a mem´ria principal.
                                               ca                                 o
http://www.candidatoreal.com




                                   O BIOS (Basic Input/Output System) ´ o primeiro programa executado
                                                                             e
                               pelo computador ao ser ligado. Sua fun¸˜o prim´ria ´ preparar a m´quina para
                                                                        ca       a e               a
                               que o sistema operacional, que pode estar armazenado em diversos tipos de
                               dispositivos (discos r´
                                                     ıgidos, disquetes, CDs, etc) possa ser executado. O BIOS
                               ´ armazenado num chip ROM (Read-Only Memory) localizado na placa-m˜e,
                               e                                                                           a
                               chamado ROM BIOS. O BIOS tamb´m ´ respons´vel por controlar o uso dos
                                                                      e e          a
                               dispositivos e manter informa¸˜es de data e hora. O BIOS trabalha junto com
                                                               co
                               o post, um software que testa os componentes do micro em busca de eventuais
                               erros. Pode-se alterar as configura¸˜es de hardware atrav´s do setup.
                                                                   co                     e




                                                                       33
http://www.candidatoreal.com




                                   Os barramentos permitem a interliga¸˜o entre os dispositivos da placa-m˜e.
                                                                          ca                                 a
                               S˜o divididos em trˆs conjuntos: via de dados, via de endere¸os e via de cont-
                                a                    e                                        c
                               role. O desempenho do barramento pode ser medido pela sua largura de banda
                               (32, 64 bits, etc.) e pela sua velocidade de transmiss˜o (100 Mbps, 1G bps, etc.).
                                                                                     a

                                   Os slots s˜o respons´veis por ligar os perif´ricos aos barramentos e suas
                                             a          a                      e
                               velocidades e largura de banda s˜o correspondentes as dos seus respectivos bar-
                                                               a
                               ramentos. Na placa-m˜e s˜o encontrados v´rios slots para encaixe de placas
                                                      a a                  a
                               (v´
                                 ıdeo, som, rede, modem, etc.). Alguns exemplos de slots: ISA, PCI, AGP,
                               PCI Express, etc.



                               2.1     Principais componentes de Hardware
                               2.1.1    Discos R´
                                                ıgidos
                               Os discos r´
                                          ıgidos s˜o dispositivos de armazenamento destinados a grandes quan-
                                                  a
                               tidades de dados. Fisicamente, um disco r´   ıgido pode ser visto como um com-
                               posto por dois grandes blocos, como na figura 2.2. O primeiro bloco ´ um   e
                               conjunto de discos magn´ticos superpostos em alturas diferentes com aux´ de
                                                         e                                              ılio
                               um eixo central. No momento de acesso ao disco, essa estrutura ´ mantida em
                                                                                                  e
                               uma rota¸˜o constante. O segundo bloco ´ uma estrutura mecˆnica que suporta
                                        ca                                e                   a
                               um conjunto de cabe¸otes, um para cada superf´ de disco. Essa estrutura ´
                                                     c                            ıcie                       e
                               capaz de realizar movimentos de vai-e-vem de maneira que os cabe¸otes possam
                                                                                                   c
                               ser deslocados desde a borda do disco at´ o centro.
                                                                         e
http://www.candidatoreal.com




                                                    Figura 2.1: Organiza¸˜o f´
                                                                        ca ısica do disco

                                   Do ponto de vista da organiza¸˜o l´gica, cada superf´ de um disco ´ di-
                                                                 ca o                      ıcie              e
                               vidida em circunferˆncias concˆntricas denominadas trilhas. Cada trilha, por
                                                  e            e
                               sua vez, ´ subdividida radialmente em unidades chamadas setores. Em geral,
                                         e
                               os setores tˆm o mesmo tamanho. O setor possui a unidade m´
                                           e                                                      ınima de leitura
                               e grava¸˜o em um disco. O conjunto de todas as superf´
                                       ca                                                   ıcies do disco que fi-
                               cam exatamente ` mesma distˆncia do eixo central forma o cilindro, conforme
                                                a             a
                               a figura ??. As abstra¸˜es cilindro, trilha e setor s˜o utilizadas para designar a
                                                     co                            a
                               organiza¸˜o l´gica da unidade de disco. A defini¸˜o de trilhas e de setores em
                                        ca o                                      ca


                                                                       34
http://www.candidatoreal.com




                               um disco chama-se formata¸˜o f´
                                                          ca ısica e ´ um procedimento realizado pelo fabri-
                                                                      e
                               cante. A capacidade total do disco ´ obtida multiplicando-se cabe¸as x cilindros
                                                                  e                             c
                               x setores x tamanho do setor.




                                            Figura 2.2: Organiza¸˜o l´gica da unidade de disco
                                                                ca o

                                  Para acessar dados no disco, ´ necess´rio informar ` controladora o cilin-
                                                                  e       a            a
                               dro, a superf´ e o setor a ser acessado. Esse m´todo ´ denominado de CHS
                                             ıcie                                  e   e
                               (Cylinder, Head, Sector). Outra maneira ´ acessar o disco ´ enxerg´-lo como
                                                                           e                e      a
                               um conjunto de blocos, no qual cada bloco ´ um ou mais setores. O n´mero de
                                                                            e                       u
                               blocos ´ ent˜o convertido em cilindros, superf´ e setores por um procedimento
                                      e    a                                  ıcie
                               que se denomina de LBA (Linear Block Addressing).

                                   Outros termos bastante comuns associados a disco r´   ıgidos s˜o formata¸˜o
                                                                                                 a         ca
                               l´gica e parti¸˜es. A formata¸˜o l´gica consiste em gravar informa¸˜es no disco
                                o            co             ca o                                   co
                               de forma que arquivos possam ser escritos, lidos e localizados pelo sistema op-
                               eracional. O conceito de parti¸˜o est´ associado ` capacidade de dividir logica-
                                                             ca     a            a
                               mente um disco em v´rios outros discos.
                                                     a

                                   Para realizar um acesso a um disco, ´ necess´rio posicionar o cabe¸ote de
                                                                       e        a                     c
                               leitura e escrita sob um determinado setor e trilha onde dado ser´ lido ou es-
                                                                                                a
                               crito. O tempo total de acesso aos disco, seja para leitura ou para escrita, ´
                                                                                                            e
                               dado pela seguinte f´rmula:
                                                    o


                                              Ta cesso = Ts eek + Tl atencia + Tt ransf erencia           (2.1)
http://www.candidatoreal.com




                                  A descri¸˜o de cada um dos termos da soma ´ a seguinte:
                                          ca                                e

                                  • Tempo de Seek: tempo necess´rio para deslocar o cabe¸ote de leitura e
                                                                    a                          c
                                    escrita at´ o cilindro correspondente ` trilha a ser acessada;
                                              e                           a

                                  • Tempo de Latˆncia: tempo necess´rio, uma vez o cabe¸ote posicionado j´
                                                  e                    a                    c                 a
                                    na trilha correta, para o setor a ser lido, ou escrito, se posicionar sob o
                                    cabe¸ote de leitura e escrita no in´ do setor a ser lido (ou escrito);
                                        c                              ıcio

                                  • Tempo de Transferˆncia: corresponde ao tempo necess´rio ` transferˆncia
                                                        e                                a a          e
                                    dos dados, isso ´, ` leitura ou a escrita dos dados.
                                                    e a


                                                                     35
http://www.candidatoreal.com




                                  Outro fator relacionado com a redu¸˜o do tempo de acesso a um disco ´
                                                                       ca                                   e
                               o entrela¸amento (interleaving). Essa t´cnica numera os setores n˜o mais de
                                        c                              e                          a
                               forma cont´ıgua, mas sim com um espa¸o entre eles. O disco 2 da Ilustra¸˜o 14
                                                                     c                                 ca
                               possui um fator de entrela¸amento igual a 2. Isso significa que entre o setor k
                                                         c
                               e o setor k+1, existem dois outros setores. O melhor fator de entrela¸amento
                                                                                                    c
                               para uma determinada unidade de disco depende da velocidade do processador,
                               do barramento, do controlador e da velocidade de rota¸˜o do disco.
                                                                                     ca




                                  Figura 2.3: Trilha com 16 setores e diferentes fatores de entrela¸amento
                                                                                                   c


                               2.1.2    Teclado
                               O teclado ´ o principal perif´rico de entrada de dados utilizado na integra¸˜o
                                          e                 e                                             ca
                               direta de usu´rios com o computador. O princ´ de opera¸˜o do teclado ´ bas-
                                            a                                ıpio        ca             e
                               tante simples: gerar um s´ımbolo para cada tecla pressionada. Mecanicamente,
                               um teclado pode ser visto como uma matriz de i linhas e j colunas as quais
                               entram em contato quando uma tecla ´ pressionada. A cada elemento i,j da
                                                                       e
                               matriz correspondente um caractere.

                                   Quando uma tecla ´ pressionada, o teclado identifica a linha e a coluna
                                                        e
                               associadas a essa tecla e gera um c´digo que ´ denominado de scan mode (c´digo
                                                                  o         e                           o
                               de varredura). O pressionar da tecla gera ainda uma interrup¸˜o de hardware,
                                                                                              ca
                               e por conseq¨ˆncia, a execu¸˜o de um tratador de interrup¸˜es espec´
                                            ue               ca                            co       ıfico para
                               o teclado. Com base no scan mode, o tratador de interrup¸˜es consulta uma
                                                                                            co
                               tabela interna, substituindo o scan mode pelo c´digo ASCII correspondente `
                                                                                 o                          a
                               tecla pressionada. O c´digo ASCII da tecla, em seguida, ´ armazenado em
                                                         o                                  e
                               uma regi˜o especial da mem´ria (buffer do teclado) de onde ´ recuperado por
                                         a                    o                               e
                               chamadas do sistema operacional.
http://www.candidatoreal.com




                                   Um teclado brasileiro difere de um teclado inglˆs na posi¸˜o dos acentos e
                                                                                   e         ca
                               da cedilha, por exemplo. A solu¸˜o empregada ´ associar a certos programas
                                                                 ca              e
                               aplicativos mapas de c´digos. Atrav´s desses mapas de c´digos, os programas
                                                       o             e                   o
                               aplicativos s˜o capazes de consumir caracteres do buffer de teclado e convertˆ-
                                            a                                                              e
                               los de forma apropriada.

                                   O procedimento de ler os dados do teclado e escrevˆ-los na tela denomina-se
                                                                                     e
                               ecoamento. Quando se tem v´rias janelas abertas, os caracteres digitados devem
                                                            a
                               ser direcionados ` janela correta. Dois m´todos s˜o normalmente empregados:
                                                a                       e        a
                               centralizado e dedicado.



                                                                     36
http://www.candidatoreal.com




                                   No m´todo centralizado o driver de teclado disponibiliza um conjunto de
                                         e
                               mini-buffers os quais podem ser encadeados para formar um buffer maior. Nesse
                               caso, para cada janela aberta o sistema operacional atribui uma estrutura de
                               dados na qual um dos seus elementos ´ um ponteiro utilizado para referenciar
                                                                     e
                               e lista encadeada de mini-buffers. No m´todo dedicado, a bufferiza¸˜o ´ feita
                                                                       e                          ca e
                               diretamente em uma ´rea de mem´ria provida pela estrutura de dados associada
                                                    a           o
                               ao terminal. Nesse caso, o n´mero de entradas para o terminal ´ limitado pelo
                                                           u                                 e
                               tamanho do buffer dessa estrutura.

                               2.1.3    Mouse
                               O mouse ´ um perif´rico de entrada que historicamente se juntou ao teclado
                                         e           e
                               como auxiliar no processo de entrada de dados, especialmente em programas
                               com interface gr´fica. O mouse tem como fun¸˜o movimentar o cursor (apon-
                                                a                          ca
                               tador) pela tela do computador. O formato mais comum do cursor ´ uma seta,
                                                                                                 e
                               contudo, existem op¸˜es no sistema operacional e softwares que permitem per-
                                                    co
                               sonalizarmos o cursor do mouse.

                                   O mouse funciona como um apontador sobre a tela do monitor, e disponibi-
                               liza, normalmente, quatro tipos de opera¸˜es: movimento, click (clique), duplo
                                                                          co
                               click e drag and drop (arrastar e largar).

                                  Existem modelos com um, dois, trˆs ou mais bot˜es cuja funcionalidade
                                                                      e             o
                               depende do ambiente de trabalho e do programa que est´ a ser utilizado. Clara-
                                                                                    a
                               mente, o bot˜o esquerdo ´ o mais utilizado.
                                           a           e

                                   O mouse ´ normalmente ligado ao computador atrav´s de portas: serial, PS2
                                            e                                         e
                               ou, mais recentemente, USB (Universal Serial Bus). Tamb´m existem conex˜es
                                                                                         e                o
                               sem fio, as mais antigas em infra-vermelho, as atuais em Bluetooth. Outros dis-
                               positivos de entrada competem com o mouse: Touchpads (usados basicamente
                               em notebooks) e Trackballs.

                                   O mouse original possu´ dois discos que rolavam nos eixos X e Y e tocavam
                                                           ıa
                               diretamente na superf´ıcie. O modelo mais conhecido de rato ´ provavelmente o
                                                                                           e
                               mouse baseado em uma esfera, que roda livremente, mas que na pr´tica gira dois
                                                                                               a
                               discos que ficam em seu interior. O movimento dos discos pode ser detectado
                               tanto mecanicamente quanto por meio ´tico.
                                                                      o

                                   Os modelos mais modernos de mouse s˜o totalmente ´ticos, n˜o tendo pe¸as
                                                                       a             o       a          c
http://www.candidatoreal.com




                               m´veis. De modo muito simplificado, eles tiram fotografias que s˜o comparadas
                                 o                                                           a
                               e que permitem deduzir o movimento que foi feito.


                               2.1.4    Placa de rede
                               Uma placa de rede ´ um dispositivo de hardware respons´vel pela comunica¸˜o
                                                  e                                      a                ca
                               entre os computadores em uma rede. A placa de rede ´ o hardware que permite
                                                                                      e
                               aos computadores conversarem entre si atrav´s da rede. Sua fun¸˜o ´ controlar
                                                                             e                  ca e
                               todo o envio e recebimento de dados atrav´s da rede. Cada arquitetura de rede
                                                                           e
                               exige um tipo espec´ıfico de placa de rede, sendo as arquiteturas mais comuns as


                                                                     37
http://www.candidatoreal.com




                               redes Ethernet e Token Ring.

                                   Al´m da arquitetura usada, as placas de rede ` venda no mercado diferenciam-
                                      e                                         a
                               se tamb´m pela taxa de transmiss˜o, cabos de rede suportados e barramento
                                        e                         a
                               utilizado (On-Board, PCI, ISA ou Externa via USB). As placas de rede para
                               Notebooks podem ser on-board ou por uma placa PCMCIA.

                                   Quanto ` taxa de transmiss˜o, as placas mais comuns s˜o Ethernet de 10,
                                            a                 a                           a
                               100 ou 1000 Mbps e placas Token Ring de 4 Mbps e 16 Mbps. Usando placas
                               Ethernet de 10 Mbps, por exemplo, devemos utilizar cabos de par tran¸ado de
                                                                                                    c
                               categoria 3 ou 5, ou ent˜o cabos coaxiais. Usando uma placas de 100 Mbps o
                                                        a
                               requisito m´ınimo a n´ de cabeamento s˜o cabos de par tran¸ado n´ 5. No
                                                    ıvel                a                   c     ıvel
                               caso de redes Token Ring, os requisitos s˜o cabos de par tran¸ado categoria 2
                                                                        a                   c
                               (recomend´vel o uso de cabos categoria 3) para placas de rede de 4 Mbps, e
                                          a
                               cabos de par tran¸ado blindado categoria 4 para placas de 16 Mbps. Devido `s
                                                 c                                                        a
                               exigˆncias de uma topologia em estrela das redes Token Ring, nenhuma placa
                                   e
                               de rede Token Ring suporta o uso de cabos coaxiais.


                               2.1.5    Impressora
                               As impressoras s˜o dispositivos de sa´ que tem por finalidade imprimir em
                                                a                   ıda
                               papel ou filme pl´stico os resultados do processamento. Da mesma forma que
                                                a
                               os monitores, a imagem impressa ´ resultado de muitos pontos impressos indi-
                                                                 e
                               vidualmente que no conjunto formam o texto ou a imagem desejados. Tamb´m     e
                               de forma semelhante aos monitores, as impressoras evolu´  ıram a partir de dis-
                               positivos que imprimiam apenas caracteres em uma unica cor para as modernas
                                                                                  ´
                               impressoras capazes de reproduzir imagens sofisticadas, de alta resolu¸˜o gr´fica,
                                                                                                    ca    a
                               em milhares de cores. As impressoras s˜o classificadas em:
                                                                     a

                                  • Impressoras alfanum´ricas: Esses equipamentos recebem do computador
                                                        e
                                    c´digos que representam caracteres alfanum´ricos e portanto tem capaci-
                                     o                                          e
                                    dade de imprimir apenas esses caracteres. Geralmente ´ poss´ usar ape-
                                                                                          e    ıvel
                                    nas uma fonte gr´fica, caracter´
                                                    a             ıstica do equipamento. Algumas impresso-
                                    ras permitem trocar o dispositivo de impress˜o, viabilizando a utiliza¸˜o
                                                                                  a                       ca
                                    de um pequeno n´mero de fontes gr´ficas;
                                                     u                  a

                                  • Impressoras gr´ficas: Esses equipamentos recebem do computador a in-
                                                    a
                                    forma¸˜o sobre os pontos a serem impressos. Dessa forma, podem im-
                                          ca
http://www.candidatoreal.com




                                    primir gr´ficos. Na impress˜o de textos, os caracteres s˜o impressos como
                                             a                  a                          a
                                    pontos, que em determinada configura¸˜o formam a imagem gr´fica do
                                                                            ca                       a
                                    caractere a ser impresso. Quando se utiliza uma impressora gr´fica para
                                                                                                   a
                                    imprimir texto, existe a possibilidade de utilizar um grande n´mero de
                                                                                                   u
                                    diferentes fontes gr´ficas, definidas por software.
                                                        a

                               2.1.6    Monitor




                                                                     38
http://www.candidatoreal.com




                               Cap´
                                  ıtulo 3

                               Aritm´tica Computacional
                                    e

                               3.1     N´ meros Com Sinal e N´ meros Sem Sinal
                                        u                    u
                               Existe uma grande variedade de op¸˜es para representar os n´meros inteiros
                                                                 co                       u
                               com ou sem sinal. Apenas quatro se destacam: sinal e amplitude/magnitude
                               (S + M ), complemento de 1, complemento de 2 e nota¸˜o em excesso (biased ).
                                                                                  ca

                               3.1.1    Sinal e amplitude/magnitude
                               Neste sistema de representa¸˜o o bit mais a esquerda representa o sinal: 0 (zero)
                                                           ca
                               para indicar o valor positivo e 1 (um) para indicar o valor negativo. Os bits
                               restantes representam o m´dulo. A amplitude ou faixa de representa¸˜o para n
                                                          o                                         ca
                               bits ´ [−(2n−1 − 1); 2n−1 − 1]. Por exemplo, para n=8 a faixa de representa¸˜o
                                    e                                                                        ca
                               ´ [−127; 127]. Neste sistema o zero possui duas representa¸˜es, por exemplo,
                               e                                                           co
                               n = 4 (0000 e 1000).

                               3.1.2    Complemento de 1
                               Neste sistema de representa¸˜o o bit mais a esquerda representa o sinal: 0 (zero)
                                                           ca
                               para indicar o valor positivo e 1 (um) para indicar o valor negativo. Para os
                               n´meros positivos, os n-1 bits representam o m´dulo. O sim´trico de um n´mero
                                u                                             o           e              u
                               positivo ´ obtido pelo complemento de todos os seus d´
                                        e                                             ıgitos (trocando 0 por 1
                               e vice-versa) incluindo o bit de sinal. A amplitude ou faixa de representa¸˜o ca
                               para n bits ´ [−(2n−1 − 1); 2n−1 − 1]. Por exemplo, para n = 8 a faixa de
                                            e
                               representa¸˜o ´ [−127; 127]. Neste sistema o zero possui duas representa¸˜es,
                                          ca e                                                             co
http://www.candidatoreal.com




                               por exemplo, n = 4 (0000 e 1000).

                               3.1.3    Complemento de 2
                               Neste sistema de representa¸˜o o bit mais a esquerda representa o sinal: 0 (zero)
                                                           ca
                               para indicar o valor positivo e 1 (um) para indicar o valor negativo. Para os
                               n´meros positivos, os bits restantes representam o m´dulo. A amplitude ou
                                 u                                                    o
                               faixa de representa¸˜o para n bits ´ [−(2n−1 ); 2n−1 − 1]. Por exemplo, para
                                                  ca                e
                               n=8 a faixa de representa¸˜o ´ [−128; 127]. Este sistema possui representa¸˜o
                                                         ca e                                                ca
                               assim´trica, o n´mero de representa¸˜es negativas ´ maior do que a positiva.
                                     e         u                     co            e
                               Este sistema o zero possui uma unica representa¸˜o, por exemplo, n=4 (0000).
                                                               ´                ca


                                                                      39
http://www.candidatoreal.com




                                   O complemento de 2 de um n´mero ´ obtido em dois passos: primeiro obt´m-
                                                                 u      e                                 e
                               se o complemento de todos os bits (inclusive o de sinal); e ao resultado obtido
                               soma-se 1 (um) em bin´rio, desprezando o ultimo transporte, se houver.
                                                        a                   ´
                                   Uma maneira pr´tica de se obter o complemento de 2 de um n´mero ´ copiar
                                                     a                                          u      e
                               da direita para a esquerda todos os bits at´ encontrar o primeiro bit 1 (copiar
                                                                            e
                               inclusive este bit), e inverter todos os demais bits. Um exemplo para n=4:

                                0110 (6 na base 10)                  usando a regra:
                                1001 (n´mero bin´rio invertido)
                                       u         a                 0110 < − > 1001
                                + 0001 (soma bin´ria com 1)
                                                 a
                                1010 (complemento de 2)
                               Os computadores manipulam tanto n´mero inteiros positivos quanto negativos,
                                                                 u
                               que s˜o representados em complemento de 2.
                                    a

                               3.1.4    Nota¸˜o em excesso
                                            ca
                               Neste sistema de representa¸˜o o bit mais a esquerda representa o sinal: 1
                                                             ca
                               (um) para indicar o valor positivo e 0 (zero) para indicar o valor negativo. A
                               amplitude ou faixa de representa¸˜o para n bits ´ [−(2n−1 ); 2n−1 − 1]. Por
                                                                    ca             e
                               exemplo, para n=8 a faixa de representa¸˜o ´ [−128; 127]. Neste sistema cada
                                                                         ca e
                               n´mero inteiro corresponde ao valor desejado acrescido de um excesso de 2n−1 ,
                                u
                               onde n pode ser 4, 5, 7, 8, 16, etc.
                                  Este sistema tem uma vantagem em rela¸˜o aos outros sistemas apresenta-
                                                                            ca
                               dos anteriormente: o valor em bin´rio com todos os bits a 0 (zero) representa o
                                                                   a
                               menor valor inteiro, que este tenha sinal ou n˜o, e o mesmo se aplica ao maior
                                                                              a
                               valor em bin´rio, i.e., com todos os bits 1: representa o maior inteiro, com ou
                                            a
                               sem sinal.

                                Bin´rio (4 bits)
                                   a                S+M        C1     C2     Excesso de 8 (n=4)
                                     0000            +0        +0      0          -8 (0 - 8)
                                     0001             1         1      1          -7 (1 - 8)
                                     0010             2         2      2          -6 (2 - 8)
                                     0011             3         3      3          -5 (3 - 8)
                                     0100             4         4      4          -4 (4 - 8)
                                     0101             5         5      5          -3 (5 - 8)
                                     0110             6         6      6          -2 (6 - 8)
                                     0111             7         7      7          -1 (7 - 8)
                                     1000            -0        -7     -8           0 (8 - 8)
                                     1001            -1        -6     -7           1 (9 - 8)
http://www.candidatoreal.com




                                     1010            -2        -5     -6          2 (10 - 8)
                                     1011            -3        -4     -5          3 (11 - 8)
                                     1100            -4        -3     -4          4 (12 - 8)
                                     1101            -5        -2     -3          5 (13 - 8)
                                     1110            -6        -1     -2          6 (14 - 8)
                                     1111            -7        -0     -1          7 (15 - 8)




                                                                     40
http://www.candidatoreal.com




                               3.2     Adi¸˜o e Subtra¸˜o
                                          ca          ca
                               Numa soma os bits s˜o somados um a um da direita para a esquerda, com os
                                                      a
                               carries sendo passados para o pr´ximo bit ` esquerda. A opera¸˜o de sub-
                                                                o          a                    ca
                               tra¸˜o usa a adi¸˜o. O subtraendo ´ simplesmente negado antes de ser somado
                                  ca             ca               e
                               ao minuendo. Lembre-se que a m´quina trata com n´meros representados em
                                                                a                  u
                               complemento a 2. O exemplo a seguir mostra as opera¸˜es de soma (6 + 7) e
                                                                                      co
                               subtra¸˜o (7 − 6) (complemento 2) bit a bit entre dois n´meros representados
                                      ca                                               u
                               com 4 d´ ıgitos bin´rios.
                                                  a

                               7 = 0111
                               6 = 0110
                               13 = 1101 (soma)
                               1 = 0001 (subtra¸˜o)
                                               ca

                                   Tanto a soma como a subtra¸˜o podem gerar overflow ou underflow, se
                                                                 ca
                               o resultado obtido n˜o puder ser representado pela quantidade de bits que
                                                      a
                               formam uma palavra. Se somarmos ou subtrairmos dois n´meros com sinais
                                                                                            u
                               contr´rios, nunca ocorrer´ overflow ou underflow. Isto porque operandos com
                                     a                    a
                               sinais contr´rios nunca podem ser maior do que qualquer dos operandos.
                                           a
                                   O overflow ocorre quando somamos dois operandos positivos e obtemos
                               um resultado negativo, ou vice-versa. Isto significa que utilizamos o bit de
                               sinal, gerando um carry, para armazenar um valor pertencente ao resultado
                               da opera¸˜o. Racioc´
                                        ca           ınio semelhante ´ realizado para detectar a ocorrˆncia do
                                                                     e                                e
                               underflow numa subtra¸˜o. Neste caso, o bit de sinal tamb´m ´ usado para
                                                        ca                                    e e
                               armazenar um valor pertencente ao resultado da opera¸˜o.
                                                                                      ca
                                   Os projetistas de um sistema devem decidir onde tratar a ocorrˆncia de
                                                                                                      e
                               overflow ou de underflow em opera¸˜es aritm´ticas. Elas podem ser tratadas
                                                                   co         e
                               tanto por hardware quanto por software. Pode existir a detec¸˜o por hardware
                                                                                             ca
                               que gera uma exce¸˜o, e que depois ´ tratada por software.
                                                  ca                e


                               3.3     Opera¸˜es L´gicas
                                            co    o
                               Os computadores manipulam palavras, mas ´ muito util, tamb´m, manipular
                                                                             e        ´        e
                               campos de bits dentro de uma palavra ou mesmo bits individuais. O exame
                               de caracteres individuais (8 bits) dentro de uma palavra ´ um bom exemplo
                                                                                          e
                               dessa necessidade. Assim, as arquiteturas de conjuntos de instru¸˜es incluem
                                                                                                 co
                               instru¸˜es para manipula¸˜o de bits.
                                      co                  ca
http://www.candidatoreal.com




                                   Um dos tipos de instru¸˜o utilizado ´ a de deslocamento de bits. As in-
                                                             ca          e
                               stru¸˜es podem deslocar bits tanto ` direita quanto ` esquerda. Todos os bits
                                   co                              a                 a
                               s˜o movidos para o lado determinado e os bits que ficam vazios s˜o preenchidos
                                a                                                              a
                               com 0s. Outras instru¸˜es l´gicas muito uteis s˜o implementadas na unidade
                                                       co     o           ´     a
                               l´gica e aritm´tica de um processador s˜o as opera¸˜es NOT, AND, OR e XOR.
                                o            e                        a           co
                               O exemplo abaixo mostra as opera¸˜es l´gicas, bit a bit, de deslocamento ` di-
                                                                  co o                                  a
                               reita, ` esquerda, NOT, AND, OR e XOR.
                                      a




                                                                     41
http://www.candidatoreal.com




                               3.4       Constru¸˜o de uma Unidade L´gica Aritm´tica
                                                ca                  o          e
                               A ALU (Arithmetic and Logic Control) ´ a parte central do hardware de uma
                                                                      e
                               CPU. Ela ´ respons´vel por realizar opera¸˜es aritm´ticas e l´gicas b´sicas, e
                                         e       a                      co        e         o       a
                               pode ser implementada com quatro componentes: AND, OR, INVERTER e
                               MULTIPLEXOR (3.4).




                                                         Figura 3.1: Multiplexador

                                  Para implementar um somador de um bit, precisa-se de duas entradas para
                               os operandos, uma sa´ para o resultado, uma entrada relativa ao carry in e
                                                   ıda
                               um sa´ relativa ao carry out. A tabela abaixo mostra a tabela verdade para o
                                     ıda
                               somador de um bit.

                                         Entrada             Sa´
                                                               ıda
                                     a   b carry in   soma     carry out
                                     0   0     0        0          0
                                     0   0     1        1          0
                                     0   1     0        1          0
                                     0   1     1        0          1
                                     1   0     0        1          0
                                     1   0     1        0          1
                                     1   1     0        0          1
                                     1   1     1        1          1
                               As sa´
                                    ıdas soma e carry out s˜o:
                                                           a

                               soma = (a.b.carryin + a.b.carryin + a.b.carryin + a.b.carryin)

                               carryout = (b.carryin + a.carryin + a.b)
http://www.candidatoreal.com




                                   Para completar o projeto de uma ALU de n bits, podemos conectar n so-
                               madores de um bit. Os carry outs gerados pelos bits menos significativos s˜oa
                               propagados por toda extens˜o do somador.
                                                             a
                                   A opera¸˜o de subtra¸˜o pode ser realizada somando-se o minuendo com
                                           ca              ca
                               a nega¸˜o do subtraendo. Este efeito ´ realizado acrescentando uma entrada
                                      ca                                e
                               complementada de b ao somador e ativando o carry in do bit menos significativo
                               para um. O somador ent˜o calcula a + b + 1.
                                                          a
                                   Outras fun¸˜es de interesse, com o XOR podem ser inclu´
                                               co                                           ıdas na ALU. Al-
                               gumas opera¸˜es n˜o s˜o, em geral, implementadas na ALU (3.4). Exemplos:
                                             co    a a
                               shift, multiplica¸˜o, divis˜o e opera¸˜es de ponto flutuante.
                                                ca        a         co


                                                                      42
http://www.candidatoreal.com




                                                              Figura 3.2: ALU


                               3.5     Ponto Flutuante
                               Para somar dois n´meros na base 10 em nota¸˜o cient´
                                                u                        ca       ıfica temos que:

                                  • Alinhar os pontos;
                                  • Somar os n´meros;
                                              u

                                  • Normalizar o resultado;
                                  • Arredondar o resultado para o n´mero m´ximo de casas permitidas.
                                                                   u      a
                                  Um hardware para somar n´meros de ponto flutuante tem que fazer as mes-
                                                              u
                               mas opera¸˜es com n´meros bin´rios. Vejamos um exemplo:
                                          co        u           a
                                  Exemplo: Somar os n´meros 0.5 e -0.4375 em bin´rio e apresente com 4 bits
                                                        u                          a
                               de precis˜o; trunque o resultado na fase de arredondamento.
                                        a

                               0.5 = 0.1 (bin´rio) = 0.1 × 20 = 1.000 × 2−1
                                             a

                               −0.4375 = −0.0111 (bin´rio) = −0.0111 × 20 = −1.110 × 2−2
                                                     a



                                 1. Igualar os expoentes (modificar o n´mero menor)
                                                                      u
                                    −1.110 × 2−2 = −0.111 × 2−1
                                 2. Somar as partes significantes (mantissas)
                                    1.000 × 2−1 + (−0.111 × 2−1 ) = 1.000 × 2−1 + (1.001 × 2−1 ) = 0.001 × 2−1
                                 3. Normalizar o resultado
                                    0.001 × 2−1 = 1.0 × 2−4

                                 4. Arredondamento
http://www.candidatoreal.com




                                    O n´mero final est´ OK.
                                       u             a




                                                                     43
http://www.candidatoreal.com




                               Cap´
                                  ıtulo 4

                               Sistemas Operacionais

                               4.1     Introdu¸˜o
                                              ca
                               O sistema operacional ´ uma camada de software colocada entre o hardware
                                                      e
                               e os programas que executam tarefas para os usu´rios. O sistema operacional
                                                                                  a
                               ´ respons´vel pelo o acesso aos perif´ricos, ou seja, sempre que um programa
                               e         a                          e
                               necessita de algum tipo de opera¸˜o de entrada e sa´
                                                               ca                    ıda, ele solicita ao sistema
                               operacional.




                                                       Figura 4.1: Sistema Operacional
http://www.candidatoreal.com




                                   O objetivo do sistema operacional ´ tornar a utiliza¸˜o do computador mais
                                                                      e                ca
                               eficiente e mais conveniente. Uma utiliza¸˜o mais eficiente do computador ´
                                                                          ca                                   e
                               obtida por meio da distribui¸ao de seus recursos (mem´ria principal, tempo de
                                                            c˜                         o
                               processador, impressora, espa¸o em disco, etc.) entre os programas. Uma uti-
                                                             c
                               liza¸˜o mais conveniente ´ obtida escondendo-se do programador detalhes do
                                   ca                    e
                               hardware, em especial os perif´ricos. Para atingir esses objetivos, o sistema op-
                                                              e
                               eracional oferece uma s´rie de servi¸os como: gerˆncia de mem´ria, gerˆncia do
                                                       e           c            e              o         e
                               processador, mem´ria virtual, sistema de arquivos, sistema de entrada e sa´
                                                  o                                                         ıda.

                                  A arquitetura de um sistema operacional corresponde ` imagem que o usu´rio
                                                                                      a                 a
                               tem do sistema, a forma como ele percebe o sistema. Esta imagem ´ definida
                                                                                                  e


                                                                      44
http://www.candidatoreal.com




                               pela interface por meio da qual o usu´rio acessa os servi¸os do sistema opera-
                                                                     a                  c
                               cional. Essa interface ´ formada pelas chamadas de sistema e pelos programas
                                                      e
                               de sistema.

                                   Os programas solicitam servi¸os ao sistema operacional por meio das chamadas
                                                               c
                               de sistema que transferem a execu¸˜o dos programas para o sistema operacional.
                                                                 ca
                               A parte do sistema operacional respons´vel para implementar as chamadas de
                                                                        a
                               sistema ´ normalmente chamadas de n´cleo ou kernel. Os principais compo-
                                        e                               u
                               nentes do kernel de qualquer sistema operacional s˜o a gerˆncia de processador,
                                                                                  a       e
                               gerˆncia de mem´ria, sistema de arquivos e gerˆncia de entrada e sa´
                                   e            o                              e                    ıda.

                                  Os programas de sistemas, algumas vezes chamados de utilit´rios, s˜o pro-
                                                                                               a      a
                               gramas normais executados fora do kernel do sistema operacional. Eles imple-
                               mentam tarefas b´sicas para utiliza¸˜o do sistema e muitas vezes s˜o confun-
                                                  a                ca                              a
                               didos com pr´prio sistema operacional. Exemplos de programas de sistemas
                                              o
                               s˜o os utilit´rios para manipula¸˜o de arquivos, listar arquivos, imprimir ar-
                                a           a                   ca
                               quivos, trocar nome de arquivos, data, hora e etc. O programa de sistema mais
                               importante ´ o interpretador de comando. Sua tarefa ´ receber comandos e
                                            e                                          e
                               execut´-los. Esses comandos podem ser enviados de forma textual ou por meio
                                     a
                               de uma interface gr´fica de usu´rio (GUI).
                                                    a         a

                                   O sistema operacional n˜o resolve problemas do usu´rio final. Somente
                                                             a                          a
                               quando ocorre algum evento especial que o sistema operacional ´ ativado. Dois
                                                                                             e
                               tipos de eventos ativam o sistema operacional: uma chamada de sistema ou uma
                               interrup¸˜o de perif´rico.
                                       ca           e

                                  Os sistemas operacionais podem ser classificados segundo in´meros crit´rios,
                                                                                            u          e
                               dentre os quais os mais comuns s˜o:
                                                               a

                                  • N´mero de usu´rios
                                     u           a
                                       – Monousu´rios: projetados para suportar um unico usu´rio. Exemp-
                                                  a                                 ´       a
                                         los de desse tipo de sistema s˜o o MS DOS, Windows 3x, Windows
                                                                       a
                                         9x, etc;
                                       – Multiusu´rios: projetados para suportar v´rias sess˜es de usu´rios.
                                                 a                                a         o         a
                                         Exemplos desse sistema s˜o Windows NT, UNIX, etc;
                                                                 a

                                  • N´mero de tarefas
                                     u
                                       – Monotarefa: capazes de executar apenas uma tarefa de cada vez. Por
http://www.candidatoreal.com




                                         exemplo, o MS DOS, etc;
                                       – Multitarefa: capazes de executar v´rias tarefas simultaneamente,
                                                                           a
                                         como uma compila¸˜o e um processamento de texto. Por exemplo,
                                                           ca
                                         Windows, Unix, etc;

                                  • Tipo de servi¸o oferecido ao usu´rio
                                                 c                  a
                                       – Sistemas de processamento em lote (batch);
                                       – Sistemas de tempo compartilhado (time sharing);
                                       – Sistemas de tempo real (real time);


                                                                     45
http://www.candidatoreal.com




                                       – Sistemas Mainframes;
                                       – Sistemas desktop;
                                       – Sistemas distribu´
                                                          ıdos;
                                       – Sistemas handheld;
                                       – Sistemas paralelos.


                               4.2     Conceitos B´sicos
                                                  a
                               4.2.1    Multiprograma¸˜o
                                                     ca
                               A multiprograma¸˜o torna mais eficiente o aproveitamento dos recursos do com-
                                                ca
                               putador. Isso ´ conseguido por meio da execu¸˜o simultˆnea de v´rios progra-
                                             e                             ca        a         a
                               mas. Em um sistema multiprogramado diversos programas s˜o mantidos na
                                                                                            a
                               mem´ria ao mesmo tempo.
                                   o

                                   A id´ia da multiprograma¸˜o ´ aproveitar o tempo ocioso do processador
                                        e                    ca e
                               durante as opera¸˜es de entrada e sa´
                                                co                 ıda, ou seja, enquanto o perif´rico executa
                                                                                                 e
                               o comando enviado, o sistema operacional inicia a execu¸˜o de outro programa.
                                                                                      ca
                               Isso faz com que exista uma maximiza¸˜o do uso do processador e da mem´ria.
                                                                     ca                                   o
                               Em um ambiente monoprogramado, o processador ficaria parado durante a re-
                               aliza¸˜o do acesso a um perif´rico.
                                    ca                      e


                               4.2.2    Processo
                               Um processo pode ser definido como um programa em execu¸˜o. O processo ´
                                                                                          ca              e
                               considerado um elemento ativo, pois altera o seu estado ` medida que executa
                                                                                       a
                                             ´
                               um programa. E o processo que realiza as chamadas de sistema.

                                   Em muitos sistemas operacionais os processos s˜o criados por outros pro-
                                                                                   a
                               cessos, por meio de chamada de sistema. Nesse caso, ´ poss´
                                                                                       e      ıvel definir uma
                               hierarquia de processos. O processo que faz a chamada de sistema ´ chamado
                                                                                                    e
                               de processo pai e o processo criado ´ chamado de processo filho. Um mesmo
                                                                    e
                               processo pai pode estar associado a v´rios processos filhos. Os processos filhos,
                                                                    a
                               por sua vez, podem criar outros processos.

                                   Durante a sua execu¸˜o, um processo passa por diversos estados, refletindo
                                                        ca
http://www.candidatoreal.com




                               o seu comportamento dinˆmico, isto ´, sua evolu¸˜o no tempo. Os poss´
                                                          a           e         ca                       ıveis
                               estados para um processo s˜o: cria¸˜o (new), apto (ready), executando (run-
                                                            a      ca
                               ning), bloqueado (blocked) e terminado (exit). A figura 4.2 mostra esses cincos
                               estados e as transi¸˜es do processo entre eles.
                                                  co

                                  No estado New um novo processo ´ criado. Ap´s ser criado, o processo entra
                                                                   e          o
                               em um ciclo de processador. Ele precisa do processador para executar, mas o
                               processador poder´ estar ocupado com outro processo, ele dever´ esperar. Di-
                                                 a                                            a
                               versos processos podem estar no nesse mesmo estado. Nesse caso, ´ necess´rio
                                                                                                e       a
                               manter uma fila com os processos aptos a ganhar o processador. Essa fila ´    e
                               chamada de fila de aptos (ready queue). No estado New, o sistema operacional


                                                                     46
http://www.candidatoreal.com




                                                   Figura 4.2: Ciclo de vida dos processos


                               aloca recursos para o processo, mas n˜o existe uma garantia de que o processo
                                                                    a
                               ser´ executado.
                                  a

                                   Os processos na fila do processador est˜o no estado Ready. Um unico pro-
                                                                          a                       ´
                               cesso ocupa o processador a cada instante. O processo que ocupa o processador
                               est´ no estado Running. Neste estado processo pode realizar as chamadas de
                                  a
                               sistema. Enquanto o sistema espera pelo t´rmino da chamada de sistema, o
                                                                            e
                               processo est´ no estado Blocked.
                                           a

                                  O processo fica no estado Blocked at´ ser atendido. Com isso, o processador
                                                                      e
                               fica livre. O sistema operacional seleciona outro do processo da fila de aptos
                               para receber o processador. O estado Exit indica que o processo terminou sua
                               execu¸˜o ou foi abortado.
                                     ca

                                  A mudan¸a de estado de qualquer processo ´ iniciada por um evento. Esse
                                           c                                  e
                               evento aciona o sistema operacional, que ent˜o altera o estado de um ou mais
                                                                           a
                               processos. O evento pode ser uma chamada de sistema ou uma interrup¸˜o de
                                                                                                     ca
                               hardware.

                                  Alguns outros caminhos s˜o poss´
                                                             a       ıveis no grafo de estado. Por exemplo, pode
                               ocorrer de nenhum processo na mem´ria principal est´ no estado Ready, pois
                                                                       o                 a
                               todos est˜o aguardando uma opera¸˜o de entrada e sa´
                                         a                         ca                   ıda. Nesse caso, o sistema
                               operacional realiza o swap (mover todo ou parte de um processo da mem´ria       o
                               para o disco) de um dos processos bloqueados para disco, e coloca numa fila
                               de processo suspensos. O estado para essa situa¸˜o ´ o Suspend. Quando a
                                                                                    ca e
                               opera¸˜o de entrada e sa´ de um dos processos ´ finalizada, o sistema opera-
                                     ca                  ıda                        e
                               cional tr´s do disco o processo da fila de suspenso colocando no estado de Ready.
                                        a
http://www.candidatoreal.com




                               4.2.3    Interrup¸˜es
                                                co
                               O mecanismo de interrup¸˜o constitui a base de opera¸˜o de um sistema mul-
                                                          ca                           ca
                               tiprograma¸˜o. O mecanismo de interrup¸˜o permite que o controlador de
                                           ca                              ca
                               perif´rico chame a aten¸˜o do processador. A fun¸˜o b´sica do controlador
                                    e                   ca                          ca    a
                               de perif´rico ´ conectar o dispositivo em quest˜o ao processador.
                                       e     e                                a

                                   Uma interrup¸˜o sempre sinaliza a ocorrˆncia de algum evento. Quando
                                                 ca                         e
                               ela acontece, desvia a execu¸ao da posi¸˜o atual de programa para uma rotina
                                                           c˜         ca


                                                                       47
http://www.candidatoreal.com




                               espec´
                                    ıfica. Essa rotina, respons´vel por atender a interrup¸˜o ´ chamada de
                                                              a                            ca e
                               tratador de interrup¸˜o. O tratador realiza as a¸˜es necess´rias em fun¸˜o da
                                                   ca                          co         a           ca
                               ocorrˆncia da interrup¸˜o.
                                    e                ca

                                   Em computador podem existir diversos controladores capazes de gerar inter-
                               rup¸˜es. A forma mais simples de identificar a origem da interrup¸˜o ´ associar
                                   co                                                          ca e
                               a cada controlador um tipo diferente de interrup¸˜o. Por exemplo, cada tipo de
                                                                               ca
                               interrup¸˜o ´ identificado por um n´mero.
                                       ca e                       u

                                   Existem momentos que um programa n˜o pode ser interrompido enquanto
                                                                              a
                               realiza uma tarefa cr´ıtica. Para isso, o processador possui instru¸˜es para habil-
                                                                                                  co
                               itar e desabilitar as interrup¸˜es. Enquanto as interrup¸˜es estiverem desabil-
                                                              co                          co
                               itadas, elas ser˜o ignoradas pelo processador. Elas n˜o s˜o perdidas, apenas
                                               a                                         a a
                               ficam pendentes. Quando o programa tornar a habilitar as interrup¸˜es, elas
                                                                                                        co
                               ser˜o imediatamente atendidas pelo processador.
                                  a

                                   Interrup¸˜es de software, tamb´m chamadas de traps, s˜o causadas pela ex-
                                           co                    e                      a
                               ecu¸˜o de uma instru¸˜o espec´
                                   ca                 ca       ıfica para isso. O efeito ´ semelhante a uma
                                                                                        e
                               chamada de sub-rotina, pois o pr´prio programa interrompido ´ quem gera a
                                                                 o                             e
                               interrup¸˜o. O maior uso para interrup¸˜es de software ´ a implementa¸˜o
                                        ca                              co                e              ca
                               de chamadas de sistemas, por meio das quais os programas solicitam servi¸os
                                                                                                         c
                               ao sistema operacional. N˜o ´ poss´ desabilitar as interrup¸˜es de software,
                                                          a e      ıvel                     co
                               mesmo porque n˜o ´ necess´rio.
                                                a e        a

                                   Existe uma terceira classe de interrup¸˜es geradas pelo pr´prio processador.
                                                                         co                  o
                               S˜o as interrup¸˜es por erro, muitas vezes chamadas de interrup¸˜es de exce¸˜o.
                                 a            co                                               co           ca
                               Elas acontecem quando o processador detecta algum tipo de erro na execu¸˜o do
                                                                                                         ca
                               programa. Por exemplo, uma divis˜o por zero, um acesso a posi¸˜o de mem´ria
                                                                   a                           ca           o
                               inv´lido, etc.
                                   a


                               4.2.4    Threads
                               Uma thread nada mais ´ que um fluxo de execu¸˜o. Na maior parte das vezes,
                                                     e                      ca
                               cada processo ´ formado por um conjunto de recursos mais uma unica thread.
                                             e                                              ´

                                   A id´ia do multithreading ´ associar v´rios fluxos de execu¸˜o (v´rias threads)
                                       e                      e          a                   ca    a
                               a um unico processo. Em determinadas aplica¸˜es, ´ conveniente disparar v´rias
                                     ´                                         co e                         a
                                                                                                   ´
                               threads dentro de um mesmo processo (programa¸˜o concorrente). E importante
                                                                                 ca
http://www.candidatoreal.com




                               notar que as threads existem no interior de um processo, compartilhando entre
                               elas os recursos de processo, como espa¸o de endere¸amento, c´digo e dados.
                                                                         c            c          o
                               Devido a essa caracter´ ıstica, a gerˆncia de threads (cria¸˜o, destrui¸˜o, troca
                                                                    e                     ca          ca
                               de contexto, sincroniza¸˜o) ´ mais leve quando comparada com processos. O
                                                        ca e
                               chaveamento entre duas threads de um mesmo processo ´ muito mais r´pido
                                                                                           e               a
                               que o chaveamento entre dois processos. Em fun¸˜o disso, threads s˜o muitas
                                                                                  ca                  a
                               vezes chamadas de processos leves.




                                                                       48
http://www.candidatoreal.com




                               4.3     Escalonamento de Processos
                               Os mecanismos de gerenciamento de processador visam permitir que v´rios pro-
                                                                                                 a
                               cessos compartilham o processador de forma aumentar a Utiliza¸˜o, aumentar
                                                                                            ca
                               o Throughput, diminuir o Tempo de Resposta e o Tempo Total de Execu¸˜o. ca
                               Estas s˜o as principais m´tricas de desempenho de um sistema operacional no
                                      a                  e
                               que diz respeito ` gerencia de processador.
                                                a

                                   Para alcan¸ar bons resultados, os sistemas operacionais empregam v´rias
                                              c                                                          a
                               pol´
                                  ıticas de escalonamento para determinar qual processo tomar´ posse do pro-
                                                                                              a
                               cessador em um determinado instante. Essas pol´   ıticas s˜o os chamados Al-
                                                                                         a
                               goritmos de Escalonamento. Exemplo de algoritmos de escalonamento s˜o:      a
                               First In First Out (FIFO), Prioridades, Round-Robin, Shortest Job First (SJF),
                               M´ltiplas Filas com Realimenta¸˜o, entre outras.
                                 u                             ca

                                  A parte do sistema operacional respons´vel por escolher qual o processo
                                                                        a
                               tomar´ posse do processador em um determinado instante ´ o Scheduller, en-
                                     a                                                 e
                               quanto o respons´vel por entregar o processador de fato a um processo ´ o
                                               a                                                      e
                               Dispatcher.

                                   ´
                                   E o Dispatcher quem realiza o chaveamento de contexto, que consiste em
                               salvar o estado dos registradores do processo que deixar´ o processador e car-
                                                                                       a
                               regar os registradores para o novo processo.

                                  O algoritmo FIFO ´ o mais simples e de implementa¸˜o mais f´cil. No en-
                                                      e                                ca        a
                               tanto, n˜o ´ dos mais eficiente no quesito tempo de resposta. Caso um processo
                                       a e
                               muito grande tome posse do processador, outros processos podem ter que es-
                               perar um tempo muito longo at´ que possam executar.
                                                               e

                                   O algoritmo Shortest Job First d´ posse do processador ao processo que
                                                                     a
                               gastar´ menos tempo executando. O tempo de resposta m´dio ´ otimizado em
                                      a                                                   e   e
                               rela¸˜o ao FIFO, no entanto, essa pol´
                                   ca                               ıtica n˜o pode ser implementada de forma
                                                                           a
                               perfeita uma vez que n˜o ´ poss´ determinar quanto tempo um processo gas-
                                                     a e      ıvel
                               tar ´ no processador na pr´xima vez em que tomar posse. Implementa¸˜es do
                                   a                     o                                           co
                               SJF estimam esse tempo utilizando informa¸˜es passadas do processo.
                                                                           co

                                   Os algor´
                                           ıtimos Round-Robin consistem em dividir o tempo de processamento
                               em fatias de tempo chamadas time slots. Cada processo na fila de prontos tem
                               direito de executar durante um per´ıodo de tempo fixo antes de perder a posse
http://www.candidatoreal.com




                               do processador. Um problema neste algoritmo ´ a necessidade de determinar a
                                                                             e
                               fatia de tempo ideal, de forma que a impress˜o de paralelismo na execu¸˜o n˜o
                                                                           a                         ca a
                               seja perdida. Uma fatia de tempo muito pequena,por exemplo, pode fazer com
                               que o tempo gasto com chaveamento de contexto diminua a performance.

                                   Filas de Prioridades s˜o a base das pol´
                                                         a                ıticas de escalonamento nos sistemas
                               operacionais modernos. A cada processo ´ associada uma prioridade. O pro-
                                                                          e
                               cesso de maior prioridade ´ quem toma a posse do processador no momento
                                                           e
                               oportuno. Uma variante dos algoritmos de prioridades pura, s˜o os os algo-
                                                                                                a
                               ritmos de Prioridade com Preemp¸˜o. Neste esquema, um processo da fila de
                                                                  ca
                               prontos que tenha prioridade maior que o processo em execu¸˜o pode tomar
                                                                                              ca


                                                                     49
http://www.candidatoreal.com




                               posse do processador antes do processo em execu¸˜o terminar de executar.
                                                                              ca

                                  Na verdade, nos sistema operacionais, n˜o s´ um algoritmo de escalonamento
                                                                         a o
                               ´ utilizado na gerˆncia de processador. Usualmente, esse algoritmos s˜o com-
                               e                 e                                                    a
                               binados de forma melhorar o desempenho do sistema. Algoritmos de m´ltiplas
                                                                                                       u
                               filas com realimenta¸˜o s˜o exemplos de combina¸˜o de v´rias pol´
                                                   ca a                         ca       a       ıticas. Esses
                               algoritmos permitem que seja dado um tratamento adequado ` um determinado
                                                                                           a
                               processo de acordo com o seu comportamento.

                                   Em gerˆncia de processador existem tamb´m os conceitos de execu¸˜o em
                                          e                                 e                       ca
                               Background e Foreground. Processos em background s˜o geralmente s˜o aque-
                                                                                   a              a
                               les que est˜o rodando com uma prioridade muito baixa, necessitam de muito
                                          a
                               pouco input e geram tamb´m um m´
                                                        e         ınimo de output. Processos em foreground
                               funcionam da forma oposta.

                                   O escalonador respons´vel por determinar qual processo receber´ o direito de
                                                        a                                        a
                               executar ´ chamado Escalonador de Curto Prazo. Existem tamb´m os escalon-
                                        e                                                      e
                               adores de Longo e M´dio Prazo. O escalonador de M´dio Prazo ´ parte por
                                                     e                                e            e
                               exemplo do processo swapper e est´ intimamente ligado a gerencia de mem´ria,
                                                                 a                                        o
                               enquanto o escalonador de longo prazo determina quando um processo novo
                                                                                           ´
                               ´ de fato admitido no sistema para disputa dos recursos. E o escalonador de
                               e
                               longo prazo quem determina o grau de multiprograma¸˜o do sistema e tamb´m
                                                                                    ca                      e
                               ´ conhecido como Job Scheduller.
                               e


                               4.4     Entrada e Sa´
                                                   ıda
                               Uma das atribui¸˜es dos sistemas operacionais ´ realizar a gerˆncia de perif´ricos,
                                                co                           e               e             e
                               tamb´m conhecida como gerˆncia de entrada e sa´
                                     e                      e                    ıda. Os perif´ricos s˜o dispos-
                                                                                               e      a
                               itivos que permitem que o computador se comunique com o mundo externo. A
                               primeira preocupa¸˜o dos sistemas operacionais no que diz respeito a gerˆncia
                                                   ca                                                       e
                               de E/S ´ a forma de comunica¸˜o que ser´ utilizada, que pode ser serial ou
                                        e                       ca         a
                               paralela. As trˆs formas b´sicas de se implementar o controle de perif´ricos s˜o:
                                              e          a                                            e       a


                                  • E/S programada: O controle dos estado da opera¸˜o de E/S ´ feito atrav´s
                                                                                   ca        e            e
                                    de loops de status. A responsabilidade ´ do programador; A t´cnica uti-
                                                                            e                     e
                                    lizar o estado da opera¸ao de E/S utilizada E/S programada ´ conhecida
                                                           c˜                                   e
                                    como polling;
http://www.candidatoreal.com




                                  • Interrup¸˜es: Os perif´ricos chamam a aten¸˜o do processador atrav´s
                                            co             e                      ca                  e
                                    de um sinal de hardware. Cabe ao processador identificar, priorizar e
                                    mascarar as interrup¸˜es geradas pelos perif´ricos;
                                                        co                      e

                                  • Acesso Direto ` Mem´ria (DMA): Em situa¸˜es em que o volume de dados
                                                   a      o                      co
                                    ´ muito grande, utiliza-se esta t´cnica para permitir que perif´ricos tenham
                                    e                                e                             e
                                    acesso direto a mem´ria sem a necessidade da intermedia¸˜o por parte do
                                                         o                                     ca
                                    processador.

                                  O localiza¸˜o dos perif´ricos do ponto de vista da arquitetura do sistema
                                             ca          e
                               pode ser feita de basicamente de duas maneiras: Mapeamento em Mem´ria eo


                                                                       50
http://www.candidatoreal.com




                               Espa¸o de E/S. Os drivers de dispositivos consistem em uma camada superior
                                   c
                               ao hardware e tˆm por objetivo esconder as diferen¸as entre dispositivos de
                                              e                                    c
                               mesmo tipo.

                                   Existe tamb´m a necessidade de se empregar t´cnicas de escalonamento de
                                              e                                 e
                               E/S de forma otimizar o atendimento das requisi¸˜es feitas aos perif´ricos. Nos
                                                                              co                   e
                               discos magn´ticos, por exemplo, s˜o utilizados algoritmos de escalonamento
                                            e                    a
                               como:

                                  • FCFS: First Come Fisrt Served.         Atende as requisi¸˜es na ordem de
                                                                                            co
                                    chegada;

                                  • SSTF: Shortest Seek Time First. Atende primeiro as requisi¸˜es que ne-
                                                                                              co
                                    cessitam de menor tempo de seek (seek time ´ o tempo necess´rio para
                                                                               e                 a
                                    mover o cabe¸ote para a trilha adequada);
                                                c

                                  • SLTF: Shortest Latency Time First. Atende primeiro as requisi¸˜es de
                                                                                                    co
                                    menor latˆncia (latˆncia ´ o tempo necess´rio para localizar um setor
                                              e         e    e                 a
                                    dentro de uma trilha do disco. Diretamente relacionado com a velocidade
                                    de rota¸˜o do disco.);
                                           ca
                                  • Scan: Varre o disco na dire¸˜o radial atendendo requisi¸˜es. S´ atende
                                                               ca                          co     o
                                    requisi¸˜es em um sentido;
                                           co
                                  • CScan: Similar ao Scan, por´m atende requisi¸˜es na subida e na descida.
                                                               e                co

                                   Al´m de pol´
                                     e          ıticas de escalonamento de E/S, tamb´m s˜o utilizadas t´cnicas
                                                                                       e   a             e
                               de Buffer e Cache para aumentar o desempenho. A t´cnica empregada para
                                                                                         e
                               realizar a aloca¸˜o e libera¸˜o de recursos ´ conhecida como Spooling. A gerˆncia
                                               ca          ca              e                               e
                               de perif´ricos tamb´m se responsabiliza pelo controle de acesso aos perif´ricos e
                                       e            e                                                    e
                               tratamentos de erros.

                               4.4.1    Camadas do subsistema de Entrada e Sa´
                                                                             ıda
                               O objetivo do subsistema de entrada e sa´ ´ padronizar ao m´ximo as rotinas
                                                                         ıda e                a
                               de acesso aos perif´ricos de forma a reduzir o n´mero de rotinas de entrada e
                                                   e                             u
                               sa´
                                 ıda. Para isso, o subsistema de entrada e sa´ ´ organizado em uma estrutura
                                                                             ıda e
                               de quatro camadas: hardware dos dispositivos de entrada e sa´  ıda, os drivers, a
                               E/S independente de dispositivo e E/S n´   ıvel de usu´rio. A figura 4.3 mostra
                                                                                     a
                               essas camadas.
http://www.candidatoreal.com




                                   A camada inferior de software (drivers) ´ composta por um conjunto de
                                                                              e
                               m´dulos de software implementados para fornecer os mecanismos de acesso a
                                 o
                               um dispositivo de entrada e sa´ espec´
                                                                ıda      ıfico. A camada de software de E/S
                               independente do dispositivo implementa procedimentos e fun¸˜es gerais a todos
                                                                                              co
                               os dispositivos de entrada e sa´ como: escalonamento de E/S, denomina¸˜o,
                                                               ıda                                           ca
                               bufferiza¸˜o, cache de dados, aloca¸˜o e libera¸˜o, direitos de acesso e tratamen-
                                        ca                         ca         ca
                               tos de erro. A E/S n´ de usu´rio ´ uma interface de programa¸˜o associada
                                                     ıvel        a    e                            ca
                               a
                               `s bibliotecas de entrada e sa´                                          ´
                                                             ıda, ou aplicativos de desenvolvimento. E impor-
                               tante notar que as bibliotecas de entrada e sa´ n˜o fazem parte do sistema
                                                                                ıda a
                               operacional.


                                                                      51
http://www.candidatoreal.com




                                                Figura 4.3: Camadas do Subsistema de E/S


                               4.5     Gerˆncia de Mem´ria
                                          e           o
                               Umas das fun¸˜es fundamentais de um sistema operacional moderno ´ realizar a
                                            co                                                     e
                               gerencia da mem´ria principal do computador de forma permitir que os diversos
                                               o
                               processos executem de forma eficiente e protegida. Quando o assunto ´ gerˆncia
                                                                                                    e     e
                               de mem´ria, dois conceitos b´sicos s˜o os de mem´ria l´gica e mem´ria f´
                                       o                   a       a           o     o          o     ısica. Os
                               programas fazem referˆncia ` endere¸os l´gicos que no momento da execu¸˜o s˜o
                                                    e      a       c o                                  ca a
                               traduzidos em um endere¸o real chamado endere¸o f´
                                                        c                      c ısico. As primeiras t´cnicas
                                                                                                        e
                               de tradu¸˜o de endere¸os eram baseadas em registradores de base e limites.
                                        ca          c

                                   Nos sistemas multiprogramados, ´ necess´rio tamb´m implementar t´cnicas
                                                                    e       a         e               e
                               para que os diversos programas possam utilizar a mem´ria ao mesmo tempo. Ini-
                                                                                     o
                               cialmente, a mem´ria era dividida em parti¸˜es de tamanho fixo. Dois problemas
                                                 o                       co
                               decorrentes desta t´cnica s˜o conhecidos como Fragmenta¸˜o Interna e a Frag-
                                                   e      a                               ca
                               menta¸˜o Externa. A fragmenta¸˜o interna ocorre quando um programa aloca
                                     ca                        ca
                               uma parti¸˜o de mem´ria que excede a quantidade necess´ria. O espa¸o exce-
                                          ca          o                                   a          c
                               dente naquela parti¸˜o ´ desperdi¸ado. A fragmenta¸˜o externa ocorre quando
                                                    ca e         c                  ca
                               apesar da quantidade total de mem´ria ser suficiente, n˜o existe uma parti¸˜o
                                                                   o                    a                ca
                               cont´
                                   ıgua capaz de atender as necessidades de um programa.

                                   Para solucionar o problema da fragmenta¸˜o interna, foi criado o mecanismo
                                                                           ca
                               de particionamento dinˆmico, no qual um programa aloca somente a quantidade
                                                       a
                               exata de mem´ria. No entanto, esse m´todo aumenta a fragmenta¸˜o externa
                                              o                       e                            ca
                               uma vez que permite o aparecimento de lacunas pequenas demais para serem
                               utilizadas por algum programa. Neste m´todo de particionamento s˜o utilizadas
                                                                       e                          a
                               v´rias t´cnicas de preenchimento de lacunas. Exemplos s˜o: First-Fit, Best-Fit,
                                a      e                                               a
http://www.candidatoreal.com




                               Worst-Fit e Circular-Fit. Para evitar o aparecimento de lacunas muito peque-
                               nas, foi criada uma t´cnica chamada Par´grafo, que consiste em determinar a
                                                     e                   a
                               menor unidade de aloca¸˜o de mem´ria.
                                                        ca         o

                                  Todas as t´cnicas apresentadas at´ aqui levam em considera¸˜o o fato de
                                             e                      e                           ca
                               que os programas devem ocupar ´reas cont´
                                                                a         ıguas de mem´ria. Os sistema op-
                                                                                        o
                               eracionais modernos supriram esta necessidade atrav´s da t´cnica de Pagina¸˜o.
                                                                                  e      e               ca

                                  Aqui aparecem os conceitos de p´ginas l´gicas e p´ginas f´
                                                                    a      o         a      ısicas, semelhantes
                               aos de endere¸os l´gicos e f´
                                            c    o         ısicos. Neste contexto, o endere¸o l´gico ´ formado
                                                                                           c o        e


                                                                     52
http://www.candidatoreal.com




                               por duas partes que s˜o o n´mero da p´gina mais o deslocamento dentro dela.
                                                    a     u         a
                               Existe tamb´m a necessidade de traduzir uma p´gina l´gica em uma p´gina
                                           e                                  a      o              a
                               f´
                                ısica. A Tabela de P´ginas ´ a respons´vel por essa tarefa. Existem v´rias
                                                     a      e         a                              a
                               formas de implement´-la.
                                                   a

                                    A primeira preocupa¸˜o ´ onde armazenar a tabela de p´ginas. Em sistemas
                                                         ca e                            a
                               com tabelas muito pequenas, as tabelas de p´ginas podem ser armazenadas
                                                                              a
                               em registradores, no entanto, em geral a tabela de p´ginas ´ armazenada na
                                                                                     a      e
                               pr´pria mem´ria principal utilizando registradores (PTBR e PTBL) para in-
                                  o          o
                               dicar a posi¸˜o da tabela na mem´ria. Um problema inerente a esta t´cnica
                                            ca                    o                                    e
                               ´ a necessidade de se acessar a mem´ria duas vezes quando se deseja ler um
                               e                                     o
                               dado. Um acesso a tabela de p´ginas e outra ao dado em si. Para minimizar
                                                               a
                               este problema ´ utilizado um mecanismo chamado Translation LookAside Buffer
                                               e
                               (TLB). O TLB consiste em uma mem´ria de r´pido acesso que armazena partes
                                                                    o       a
                               da tabela de p´ginas. Quando a tradu¸˜o de uma pagina l´gica em uma p´gina
                                               a                     ca                 o               a
                               f´
                                ısica ´ poss´
                                      e     ıvel utilizando apenas o TLB, ´ dito que ocorreu um HIT, caso
                                                                          e
                               contr´rio dizemos que ocorreu um MISS.
                                     a

                                  A t´cnica de Segmenta¸˜o ´ utilizada para implementar a prote¸˜o de en-
                                      e                   ca e                                    ca
                               dere¸os de mem´ria utilizados por um processo. Usualmente isso ´ feito atrav´s
                                   c           o                                              e            e
                               de registradores de limite. Quando um processo tenta acessar uma regi˜o de
                                                                                                        a
                               mem´ria protegida ocorre uma falha de segmenta¸˜o (Segmentation Fault). Esta
                                    o                                          ca
                               t´cnica n˜o deve ser confundida com a t´cnica de segmenta¸˜o de mem´ria pre-
                                e       a                             e                 ca          o
                               sente em algumas arquiteturas, onde a mem´ria ´ dividida em partes como
                                                                             o    e
                               Segmento de Dados, Segmento de C´digo, Pilha etc.
                                                                  o

                                  O Swapping ´ uma outra t´cnica utilizada para gerenciamento de mem´ria.
                                               e             e                                       o
                               Nesta t´cnica, um processo ´ suspenso e todas suas p´ginas de mem´ria s˜o
                                      e                    e                        a             o     a
                               descarregadas para o disco (swap-out), liberando a mem´ria para que algum
                                                                                       o
                               outro processo possa executar. Quando processo suspenso pode voltar para
                               mem´ria, as p´ginas do processo s˜o novamente carregadas para a mem´ria
                                    o        a                   a                                    o
                               (swap-in). O swapper ´ respons´vel pelo swap-in e swap-out.
                                                    e          a

                                  Na t´cnica de pagina¸˜o pura, o processo n˜o precisa mais ocupar um tre-
                                       e               ca                     a
                               cho cont´ıguo de mem´ria, no entanto, ainda ´ necess´rio que todas as p´gina
                                                    o                       e      a                  a
                               de um processo estejam carregadas na mem´ria no momento da execu¸˜o. Uma
                                                                         o                        ca
                               evolu¸˜o do esquema de pagina¸˜o ´ a t´cnica de Mem´ria Virtual. Mem´ria
                                    ca                        ca e     e             o                  o
                               Virtual consiste em um esquema de pagina¸˜o sob demanda, no qual somente
                                                                         ca
                               as p´ginas necess´rias para a execu¸˜o de um processo s˜o carregadas para a
                                   a             a                ca                   a
http://www.candidatoreal.com




                               mem´ria.
                                    o

                                   Al´m de aumentar o desempenho do sistema, esta t´cnica permite que ex-
                                     e                                                  e
                               istam programas com espa¸o de endere¸amento l´gico maiores. Para indicar
                                                           c             c        o
                               se uma p´gina se encontra ou n˜o carregada na mem´ria em um determinado
                                         a                      a                     o
                               instante, ´ utilizado um bit adicional para cada entrada da tabela. Quando um
                                         e
                               processo tenta acessar uma p´gina que n˜o est´ carregada na mem´ria ´ dito
                                                              a            a    a                   o   e
                               que ocorreu um page-fault. O processo ´ ent˜o suspenso e at´ que esteja pronto
                                                                       e     a              e
                               para executar novamente ocorre a seguinte seq¨ˆncia de eventos:
                                                                               ue




                                                                    53
http://www.candidatoreal.com




                                 1. Aloca¸˜o de uma p´gina f´
                                         ca          a      ısica;

                                 2. Localiza¸˜o da P´gina F´
                                            ca      a      ısica no Disco;

                                 3. Leitura da P´gina no Disco;
                                                a

                                 4. Atualiza¸˜o da Tabela de P´ginas;
                                            ca                a

                                 5. Processo vai para fila de pronto.

                                  O respons´vel por carregar a p´gina solicitada ´ o pager. Para carregar
                                             a                      a               e
                               uma nova p´gina l´gica para mem´ria muitas vezes ´ necess´rio descarregar
                                           a      o                o                  e       a
                               uma p´gina para o disco. Os algoritmos de substitui¸˜o de p´ginas s˜o os
                                     a                                                  ca       a      a
                               respons´veis por decidir qual p´gina ser´ escolhida para deixar a mem´ria. Ex-
                                      a                       a        a                            o
                               emplos de algoritmos de substitui¸˜o de p´gina s˜o:
                                                                 ca      a       a


                                  • FCFS: Escolhe a p´gina que est´ a mais tempo na mem´ria;
                                                     a            a                    o
                                    ´
                                  • Otimo: Escolhe a p´gina que vai ser acessada mais remotamente no futuro
                                                      a
                                    (n˜o ´ implement´vel);
                                      a e           a

                                  • LRU: Escolhe a que a mais tempo n˜o ´ acessada (obs: algoritmo imple-
                                                                     a e
                                    mentado por hist´rico de bits);
                                                    o
                                  • Second Chance: Organiza p´ginas em forma de um fila circular e utiliza
                                                             a
                                    bits de controle.

                                   O Trashing ´ a situa¸˜o em que um processo possui poucas p´ginas f´
                                              e        ca                                      a       ısicas
                               e o tempo gasto em page-faults ´ muito alto, predominando no tempo total de
                                                              e
                               processamento. Uma forma de solucionar este problema ´ utilizar a t´cnica de
                                                                                      e             e
                               swap para permitir que o processo possa executar de forma satisfat´ria.
                                                                                                 o


                               4.6     Sistemas de Arquivos
                               O sistema de arquivos ´ a parte do sistema operacional mais vis´
                                                       e                                          ıvel para os
                               usu´rios. Durante todo tempo, os usu´rios manipulam arquivos contento tex-
                                   a                                 a
                               tos, planilhas, desenhos, figuras, jogos e etc. Este fato exige que o sistema
                               operacional apresente uma interface coerente e simples. Para isso, o sistema de
                               arquivos implementa o conceito de arquivo e diret´rio.
                                                                                 o
http://www.candidatoreal.com




                               4.6.1    Conceitos b´sicos sobre arquivos
                                                   a
                               Um arquivo ´ um recipiente no qual dados s˜o armazenados. Em geral, cada
                                             e                              a
                               arquivo cont´m um conjunto de dados que possui algum significado pr´tico para
                                            e                                                        a
                               o usu´rio ou para o sistema. Um arquivo pode conter um programa execut´vel,
                                     a                                                                    a
                               um m´dulo de um programa fonte, um texto, uma figura, etc. Cada arquivo ´
                                      o                                                                     e
                               identificado por um nome, o qual permite que o usu´rio fa¸a referˆncias a ele.
                                                                                     a     c       e
                               Al´m do nome, cada arquivo possui uma s´rie de outros atributos que s˜o man-
                                  e                                     e                              a
                               tidos pelo sistema operacional como tipo de conte´do, tamanho, data e hora
                                                                                  u
                               do ultimo acesso, data e hora da ultima altera¸˜o, lista de usu´rios que podem
                                   ´                            ´            ca               a


                                                                       54
http://www.candidatoreal.com




                               acessar o arquivo, etc.

                                  Em geral, o sistema operacional suporta diversas opera¸˜es sobre os arquivos,
                                                                                         co
                               como cria¸˜o e destrui¸˜o do arquivo, leitura e altera¸˜o do conte´do, troca de
                                        ca           ca                              ca          u
                               nome do arquivo, etc. Essas opera¸˜es correspondem a chamadas de sistema
                                                                   co
                               que os programas de usu´rio podem usar para manipular os arquivos.
                                                        a

                                   Em sistemas multiusu´rios, ´ importante controlar o acesso aos arquivos.
                                                         a     e
                               Sistemas operacionais multiusu´rios implementam mecanismos que permitem
                                                              a
                               controlar quais os usu´rios podem fazer o que em quais arquivos.
                                                     a

                                  O controle de acesso inicia com a identifica¸˜o dos usu´rios por meio de um
                                                                              ca          a
                               c´digo de usu´rio e uma senha. A partir do momento que a identifica¸˜o do
                                o            a                                                          ca
                               usu´rio ´ aceita, todos os processos disparados a partir do terminal em quest˜o
                                  a e                                                                       a
                                                                                               a     ´
                               passam a ter os direitos de acesso associados com aquele usu´rio. E poss´   ıvel
                               associar a cada arquivo uma lista de usu´rios e direitos de acesso. A forma
                                                                          a
                               usual ´ permitir que apenas o usu´rio que criou o arquivo possa alterar a lista
                                     e                            a
                               contendo os direitos de acesso do arquivo.

                                   A forma como os dados s˜o dispostos dentro de um arquivo determina sua
                                                           a
                               estrutura interna. Cada tipo de arquivo possui uma estrutura interna apropri-
                               ada para a sua finalidade. Por exemplo, arquivos de texto s˜o organizados em
                                                                                         a
                               linha ou par´grafos. Arquivos que contˆm programas execut´veis s˜o organiza-
                                           a                         e                   a      a
                               dos em termos de segmento de c´digo e segmentos de dados.
                                                               o

                                   Em geral, os sistemas operacionais ignoram a estrutura interna dos arquivos.
                               Para o sistema operacional, cada arquivo corresponde a uma seq¨ˆncia de bytes,
                                                                                               ue
                               cujo significado ´ conhecido pelo usu´rio que o criou. A unica exce¸˜o s˜o os
                                                e                     a                   ´         ca a
                               arquivos que contˆm programas execut´veis. Nesse caso, a estrutura interna ´
                                                  e                     a                                     e
                               definida pelo pr´prio sistema operacional. Como o conceito de tipo de arquivo ´
                                               o                                                              e
                               util para os usu´rios, muitos sistemas operacionais suportam nomes de arquivos
                               ´               a
                               onde o tipo ´ indicado. A forma usual ´ acrescentar extens˜o de nome que
                                             e                            e                   a
                               identifique o tipo de arquivo em quest˜o.a

                                   O m´todo de acesso diz respeito ` forma como o conte´do de um arquivo
                                       e                              a                     u
                               ´ acessado. O m´todo de acesso mais simples ´ o seq¨encial. Este m´todo ´
                               e                 e                               e      u               e      e
                               usado pelos compiladores, para a impress˜o de um arquivo, etc. Outro m´todo
                                                                          a                               e
                               de acesso ´ o acesso relativo. Neste m´todo, o programa inclui na chamada de
                                         e                             e
                               sistema qual posi¸˜o do arquivo a ser lida. As posi¸˜es do arquivo s˜o numer-
                                                 ca                                 co               a
http://www.candidatoreal.com




                               adas a partir de 0 (ou a partir de 1 em alguns sistemas), sendo que cada posi¸˜o
                                                                                                            ca
                               corresponde a um byte.

                                  Em muitos sistemas operacionais, existe o conceito de posi¸˜o corrente no
                                                                                             ca
                               arquivo. Nesse caso, a chamada de sistema para leitura ou escrita n˜o informa
                                                                                                  a
                               uma posi¸˜o. Essa sempre acontece a partir da posi¸˜o corrente. O sistema op-
                                        ca                                       ca
                               eracional tamb´m permite que o programa altere a posi¸˜o corrente do arquivo
                                             e                                       ca
                               por meio de uma chamada de sistema.

                                  Existem outros m´todos de acesso mais sofisticados, tais como seq¨encial
                                                    e                                              u
                               indexado, indexado, direto, etc. Tais m´todos de acesso s˜o implementados a
                                                                      e                 a

                                                                      55
http://www.candidatoreal.com




                               partir dos m´todos seq¨encial e relativo.
                                           e         u


                               4.6.2    Implementa¸˜o de arquivos
                                                  ca
                               A forma b´sica de implementar arquivos ´ criar, para cada arquivo no sistema,
                                         a                              e
                               um descritor de arquivo. O descritor de arquivo ´ um registro no qual s˜o
                                                                                   e                         a
                               mantidas as informa¸˜es a respeito do arquivo. Essas informa¸˜es incluem os
                                                    co                                          co
                               seus atributos, al´m de outros dados que n˜o s˜o vis´
                                                 e                        a a       ıveis aos usu´rios, mas s˜o
                                                                                                  a          a
                               necess´rios para o que o sistema operacional implemente as opera¸˜es sobre os
                                     a                                                             co
                               arquivos.

                                   Um descritor de arquivo cont´m as seguintes informa¸˜es: nome do arquivo,
                                                                 e                        co
                               extens˜o do nome do arquivo, tamanho em byte, data e hora do ultimo acesso,
                                      a                                                          ´
                               data e hora da ultima altera¸ao, identifica¸˜o do usu´rio que criou o arquivo, lo-
                                               ´            c˜           ca         a
                               cal no disco onde o conte´do do arquivo foi alocado, etc. A forma usual ´ manter
                                                         u                                             e
                               o descritor de um arquivo na mesma parti¸˜o onde est´ o seu conte´do. Dessa
                                                                           ca           a           u
                               forma, esse disco poder´ ser at´ mesmo fisicamente removido de um computador
                                                       a       e
                               e conectado a outro. Os arquivos nele poder˜o ser acessados normalmente no
                                                                              a
                               novo computador.

                                   O descritor ´ acessado a cada opera¸˜o de escrita ou leitura para determinar
                                               e                       ca
                               a localiza¸˜o no disco dos dados a serem escritos ou lidos. Para tornar mais
                                         ca
                               r´pido o acesso aos arquivos, o sistema de arquivos mant´m na mem´ria uma
                                a                                                          e           o
                               tabela contendo todos os descritores dos arquivos em uso. Quando um arquivo
                               entra em uso, o seu descritor ´ copiado do disco para a mem´ria. Quando o ar-
                                                             e                               o
                               quivo deixa de ser usado, o seu descritor em mem´ria pode ter sido alterado em
                                                                                 o
                               rela¸˜o ` c´pia do descritor em disco. Nesse caso, o sistema de arquivos escreve
                                   ca a o
                               o descritor atualizado que est´ na mem´ria sobre a c´pia original do descritor
                                                              a         o             o
                               em disco. A maioria dos sistemas operacionais exige que os pr´prios programas
                                                                                               o
                               informem quando um arquivo entra em uso e quando ele n˜o ´ mais necess´rio.
                                                                                           a e             a
                               Para tanto, existem as chamadas de sistema open e close. Tamb´m ´ util passar
                                                                                                 e e´
                               como parˆmetro o tipo de acesso que ser´ feito, isto ´, leitura (READONLY ou
                                         a                               a          e
                               RD) ou leitura e escrita (READWRITE ou RW).

                                   O sistema de arquivos utiliza uma Tabela de Descritores de Arquivos Aber-
                               tos (TDAA) para manter em mem´ria os descritores dos arquivos abertos. A
                                                                  o
                               TDAA mant´m informa¸˜es relativas aos arquivos abertos por todos os proces-
                                            e          co
                               sos no sistema. Isso ´ necess´rio porque normalmente ´ permitido que v´rios
                                                    e        a                        e                 a
http://www.candidatoreal.com




                               processos abram um mesmo arquivo simultaneamente. Cada entrada armazena
                               uma c´pia do descritor do arquivo mantido em disco, assim como algumas in-
                                     o
                               forma¸˜es adicionais, necess´rias apenas enquanto o arquivo est´ aberto. Por
                                     co                    a                                   a
                               exemplo, n´mero de processos utilizando o arquivo no momento.
                                          u

                                   As entradas da TDAA armazenam informa¸˜es que n˜o variam conforme
                                                                              co         a
                               o processo que est´ acessando o arquivo. Entretanto, existem informa¸˜es di-
                                                 a                                                    co
                               retamente associadas com o processo que acessa o arquivo. Essas informa¸˜esco
                               n˜o podem ser mantidas na TDAA, pois como v´rios processos podem aces-
                                a                                                a
                               sar o mesmo arquivo, elas possuir˜o um valor diferente para cada processo. Um
                                                                a
                               exemplo de informa¸˜o que depende do processo ´ a posi¸˜o corrente no arquivo.
                                                  ca                           e      ca


                                                                      56
http://www.candidatoreal.com




                                  Uma solu¸˜o t´
                                             ca ıpica ´ criar, para cada processo, uma Tabela de Arquivos
                                                        e
                               Abertos por Processo (TAAP). Cada entrada ocupada na TAAP corresponde a
                               um arquivo aberto pelo processo correspondente. No m´    ınimo, a TAAP cont´m
                                                                                                           e
                               em cada entrada as seguintes informa¸˜es: posi¸˜o corrente no arquivo, tipo de
                                                                       co       ca
                               acesso (leitura ou leitura e escrita) e apontador para a entrada correspondente
                               na TDAA. A figura 4.4 mostra as tabelas TDAA e TAAP. Toda TDAA como
                               as TAAP devem ficar na mem´ria do sistema operacional, fora do acesso dos
                                                                o
                               processos de usu´rio.
                                                a




                                                       Figura 4.4: TAAP vs. TDAA

                                  Uma vez aberto um arquivo, o processo utiliza chamadas de sistema com
                               read e write para acessar o seu conte´do. N˜o ´ necess´rio, nem conveniente,
                                                                    u     a e        a
                               que a cada chamada de sistema, o processo forne¸a novamente o nome do ar-
                                                                               c
                               quivo. Como resultado de um open com sucesso, o sistema de arquivos retorna
                               para o processo o n´mero da entrada na TAAP associada com o arquivo aberto.
                                                  u
                               Dessa forma, nas chamadas de sistemas ap´s o open, o processo indica o ar-
                                                                         o
                               quivo atrav´s do n´mero de sua correspondente entrada na TAAP. A partir da
                                          e       u
                               TAAP, o sistema de arquivos pode imediatamente localizar o descritor no ar-
                               quivo TDAA. Muitos sistemas operacionais chamam esse n´mero de handle do
                                                                                        u
                               arquivo.

                                   Existem duas fun¸˜es importantes que o sistema de arquivos deve realizar
                                                     co
                               na implementa¸˜o das chamadas de sistema read e write. S˜o elas a montagem
                                              ca                                           a
                               e desmontagem de blocos l´gicos e a localiza¸˜o dos blocos l´gicos no disco. Es-
                                                        o                  ca              o
http://www.candidatoreal.com




                               sas fun¸˜es s˜o implementadas baseando-se em trˆs formas b´sicas de aloca¸˜o
                                      co    a                                   e            a              ca
                               de arquivos: aloca¸˜o com ´reas cont´
                                                  ca      a          ıguas, aloca¸˜o encadeada e a aloca¸˜o
                                                                                  ca                        ca
                               indexada.


                               4.6.3    Cache de Sistema de Arquivos
                               Uma importante estrutura de dados presente na implementa¸˜o de um sistema
                                                                                          ca
                               de arquivos ´ a sua cache. A cache n˜o oferece nenhuma funcionalidade nova,
                                            e                       a
                               isto ´, a presen¸a ou ausˆncia de uma cache n˜o adiciona ou elimina nenhuma
                                    e          c        e                   a



                                                                     57
http://www.candidatoreal.com




                               fun¸˜o, chamada de sistema ou opera¸˜o sobre arquivos. Entretanto, caches rep-
                                  ca                                ca
                               resentam um grande aumento no desempenho de qualquer sistema de arquivos,
                               pois o uso do disco tente a ser intenso em sistemas operacionais de prop´sito
                                                                                                           o
                               gerais. O objetivo do cache ´ manter na mem´ria principal uma certa quanti-
                                                             e                o
                               dade de blocos do disco. Dessa forma, se algum bloco for requisitado para leitura
                               ou escrita, ele ser´ encontrado na mem´ria principal, evitando o acesso ao disco.
                                                  a                   o

                                  A cache do sistema de arquivos utiliza uma ´rea da mem´ria principal e ´
                                                                               a           o               e
                               controlada pelo sistema operacional. Na verdade, existem diversos locais onde
                                                                      ´
                               uma cache de disco pode ser mantida. E poss´ haver uma cache global, uma
                                                                            ıvel
                               cache exclusiva para cada sistema de arquivos, etc.

                                   A forma b´sica de opera¸ao ´ bem simples. Toda vez que um bloco de disco
                                             a             c˜ e
                               ´ necess´rio para leitura e/ou escrita, a cache ´ pesquisada. Se o bloco estiver
                               e       a                                       e
                               na cache, essa c´pia ´ usada. Se o bloco n˜o estiver na cache, ele ´ lido do disco,
                                               o    e                     a                       e
                               colocado na cache e ent˜o utilizado.
                                                       a

                                   Uma quest˜o importante ´ quando atualizar o disco ap´s um bloco presente
                                              a             e                             o
                               na cache ter sido alterado. Do ponto de vista de desempenho, o ideal ´ poster-
                                                                                                     e
                               gar a atualiza¸˜o do disco ao m´ximo no sentido de minimizar as escritas em
                                             ca                a
                               disco. Por outro lado, caso ocorra uma pane do sistema, toda a informa¸˜o na
                                                                                                        ca
                               cache ser´ perdida, o disco ficar´ desatualizado e, possivelmente, o sistema de
                                        a                      a
                               arquivos ficar´ corrompido. Existem diversas pol´
                                            a                                  ıticas que podem ser utilizadas.

                                   Uma cache de sistema de arquivo pode possuir milhares de blocos, o que
                               torna invi´vel uma pesquisa seq¨encial da mesma para localizar determinado
                                          a                    u
                               bloco. Dada a natureza dinˆmica dessa estrutura e sua importˆncia para o de-
                                                           a                                   a
                               sempenho do sistema como um todo, uma tabela hash ´ utilizada. O sistema de
                                                                                     e
                               arquivos fornece o n´mero da parti¸˜o e o n´mero do bloco, e uma fun¸˜o hash ´
                                                   u             ca       u                           ca       e
                               utilizada para determinar o endere¸o do bloco na cache, caso ele esteja na cache.
                                                                 c

                                  Eventualmente, a cache pode se encontrar completamente ocupada, sendo
                               necess´rio liberar espa¸o para algum outro bloco. A solu¸˜o t´
                                      a                c                                    ca ıpica ´ escolher
                                                                                                      e
                               um bloco da cache, atualizar o seu conte´do no disco se necess´rio, declarar esse
                                                                        u                     a
                               bloco da cache como livre e utiliz´-lo para hospedar um novo bloco de disco. A
                                                                  a
                               pol´
                                  ıtica para escolher o bloco da cache a ser liberado geralmente ´ a LRU (Least
                                                                                                 e
                               Recently Used ).
http://www.candidatoreal.com




                               4.6.4    Gerenciamento do espa¸o livre
                                                             c
                               Uma das tarefas do sistema de arquivos ´ gerenciar o espa¸o livre nos discos.
                                                                        e               c
                               Em outras palavras, determinar quais setores do disco est˜o livres e podem
                                                                                         a
                               ser alocados para aumentar o tamanho de um arquivo. Uma forma simples de
                               gerenciar o espa¸o livre em disco ´ por meio de um mapa de bits. A figura 4.5
                                               c                 e
                               mostra esse mecanismo.

                                   Cada bit presente no mapa representa um bloco f´ısico do disco. Os bits s˜o
                                                                                                            a
                               considerados numerados da direita para esquerda, isto ´, o bit menos significa-
                                                                                      e
                               tivo do primeiro byte ´ o bit n´mero zero. Bit ligado indica bloco ocupado,
                                                      e       u


                                                                       58
http://www.candidatoreal.com




                                        Figura 4.5: Mapa de bits para gerenciamento de espa¸o livre
                                                                                           c


                               e bit desligado indica bloco livre. O endere¸o do bloco representado por um
                                                                           c
                               determinado bit ´ definido pela pr´pria posi¸˜o do bit dentro do mapa.
                                                e                 o       ca

                                   Para alocar mais um bloco f´ ısico para um arquivo, basta percorrer o mapa
                               de bits at´ encontrar um bit zero. O bit ´ ent˜o ligado para indicar que o
                                         e                                  e    a
                               respectivo bloco agora est´ ocupado. Quando um arquivo ´ destru´ e seus
                                                         a                                  e       ıdo
                               blocos liberados, basta desligar os bits correspondentes. O mapa de bits deve
                               ser mantido na mem´ria principal para que a busca seja r´pida.
                                                    o                                    a

                                    O espa¸o livre em disco tamb´m pode ser gerenciado por meio de uma lista
                                           c                      e
                               contendo os n´meros de todos os blocos f´
                                              u                            ısicos livres (Lista de Blocos Livres).
                               Como essa lista ´ grande no caso de um disco quase vazio, ela deve ser mantida
                                                 e
                               no pr´prio disco. Para acelerar o processo de aloca¸˜o e libera¸˜o de blocos
                                      o                                                 ca          ca
                               f´
                                ısicos, alguns blocos da lista s˜o copiados para a mem´ria principal. Logo, so-
                                                                a                         o
                               mente ser´ necess´rio acessar o disco quando todos os endere¸os de blocos livres
                                          a        a                                           c
                               copiados para a mem´ria principal tiverem sido alocados. Ou ainda, quando
                                                      o
                               remo¸˜es de arquivos liberarem blocos f´
                                     co                                 ısicos em tal quantidade que alguns blo-
                               cos de endere¸os tenham que ser escritos em disco. Alguns sistemas operacionais
                                             c
                               atualizam periodicamente a lista de endere¸os em disco para minimizar a cor-
                                                                             c
                               rup¸˜o do sistema de arquivos em caso de falha no computador.
                                    ca


                               4.6.5    Diret´rios
                                             o
http://www.candidatoreal.com




                               Os diret´rios s˜o as estruturas do sistema de arquivos que contˆm a informa¸˜o
                                       o      a                                               e             ca
                               quais arquivos existem no disco. Um diret´rio pode ser entendido como sendo
                                                                           o
                               um conjunto de arquivos ou um conjunto de referˆncias a arquivos. Existem
                                                                                   e
                               diversas formas de estruturar os diret´rios de um sistema. A mais simples ´ ter
                                                                      o                                   e
                               um unico diret´rio para o disco inteiro. Nesse caso, o diret´rio corresponde a
                                   ´           o                                            o
                               uma lista de todos os (possivelmente milhares) arquivos do disco. Essa solu¸˜o,
                                                                                                           ca
                               conhecida como diret´rio linear, ´ aceit´vel apenas para sistemas de arquivo
                                                      o           e      a
                               muito pequenos. Por exemplo, pode ser utilizada para discos flex´   ıveis de pe-
                               quena capacidade.




                                                                       59
http://www.candidatoreal.com




                                   Para sistemas multiusu´rios, o diret´rio linear ´ problem´tico, pois os ar-
                                                          a            o           e        a
                               quivos de diferentes usu´rios ficam misturados. Esse problema pode ser re-
                                                        a
                               solvido com uma estrutura de diret´rios organizada em dois n´
                                                                  o                         ıveis. O diret´rio
                                                                                                          o
                               principal cont´m uma entrada para cada usu´rio do sistema. Essa entrada n˜o
                                              e                             a                               a
                               corresponde a um arquivo, mas sim a um subdiret´rio que, por sua vez, cont´m
                                                                                 o                         e
                               os arquivos do usu´rio correspondente. Tamb´m ´ necess´rio criar no diret´rio
                                                   a                         e e        a                 o
                               principal uma entrada para conter os arquivos do sistema. As entradas do di-
                               ret´rio principal s˜o usualmente chamadas de subdiret´rios.
                                  o               a                                   o

                                   ´
                                  E poss´ estender o conceito de subdiret´rios de tal forma que os usu´rios
                                         ıvel                              o                           a
                               tamb´m possam criar livremente os seus pr´prios subdiret´rios. Dessa forma,
                                     e                                   o               o
                               cada usu´rio tem a liberdade de organizar os seus arquivos de forma lhe for
                                        a
                               mais conveniente. O resultado ´ um sistema de diret´rios organizado na forma
                                                             e                    o
                               de ´rvore conforme a figura 4.6.
                                  a




                                            Figura 4.6: Diret´rio organizado em forma de ´rvore
                                                             o                           a

                                   Em um sistema de diret´rios organizado na forma de ´rvore, qualquer ar-
                                                             o                             a
                               quivo ou subdiret´rio pode ser identificado de forma n˜o amb´
                                                   o                                     a        ıgua por meio
                               do caminho (pathname) para atingi-lo a partir da raiz da ´rvore. Facilmente,
                                                                                            a
                               a ´rvore de diret´rio cresce at´ uma altura tal que passa a ser desconfort´vel
                                 a               o             e                                            a
                               fornecer sempre o caminho completo at´ cada arquivo ou diret´rio. O conceito
                                                                        e                      o
                               de diret´rio corrente facilita a identifica¸˜o de arquivos nesse contexto. Dessa
                                       o                                 ca
                               forma, um arquivo pode ser identificado por seu caminho absoluto, que inicia a
                               raiz da ´rvore, ou pelo seu caminho relativo, que inicia no diret´rio corrente do
                                       a                                                        o
http://www.candidatoreal.com




                               usu´rio em quest˜o.
                                   a             a

                                   Uma flexibilidade adicional presente em muitos sistemas operacionais est´   a
                               na possibilidade de incluir o mesmo arquivo ou subdiret´rio em v´rios diret´rios.
                                                                                      o        a          o
                               Dessa forma, o mesmo arquivo passa a ter diversos nomes absolutos (mesmo na
                               a
                               ´rvore, cada arquivo possui diversos nomes relativos, uma vez que o caminho
                               relativo depende do diret´rio corrente em quest˜o. Essa facilidade ´ denomi-
                                                          o                     a                    e
                               nada de link e efetivamente transforma a estrutura de diret´rios em um grafo.
                                                                                            o




                                                                      60
http://www.candidatoreal.com




                               4.6.6    Implementa¸˜o de diret´rios
                                                  ca          o
                               A forma mais simples de implementar diret´rios ´ consider´-lo como arquivos
                                                                           o     e         a
                               especiais, cujo conte´do ´ manipulado pelo pr´prio sistema operacional. Dessa
                                                    u e                      o
                               forma, todo o mecanismo de aloca¸˜o, libera¸˜o e localiza¸˜o de blocos f´
                                                                ca        ca            ca             ısicos no
                               disco, dispon´ para arquivos, tamb´m ´ usado para os diret´rios. Diret´rios
                                             ıvel                   e e                       o            o
                               passam a ser arquivos cujo conte´do ´ definido pelo sistema operacional e cujo
                                                                u e
                               acesso ´ controlado por parte do usu´rio.
                                      e                            a

                                   Como diret´rios s˜o implementados como arquivos, cada diret´rio possui
                                               o     a                                              o
                               tamb´m seu descritor. Os diret´rios s˜o implementados como conjunto de de-
                                     e                          o      a
                               scritores de arquivos, ou conjuntos de endere¸os de descritores de arquivos.
                                                                               c
                               Quando diret´rios s˜o implementados como conjunto de descritores de arquivos,
                                             o     a
                               o conte´do de um diret´rio corresponde aos descritores dos arquivos e dos sub-
                                       u               o
                               diret´rios contidos naquele diret´rio, conforme a figura 4.7. Nesse caso, o nome
                                    o                           o
                               do arquivo ou subdiret´rio faz parte do seu descritor.
                                                      o




                                           Figura 4.7: Diret´rios contendo descritores de arquivos
                                                            o

                                   Outra possibilidade ´ separar um conjunto de blocos da parti¸˜o para ar-
                                                         e                                        ca
                               mazenar exclusivamente os descritores de arquivos e de subdiret´rios. Esse
                                                                                                   o
                               conjunto de blocos forma um vetor de descritores, no qual cada descritor pode
                               ser identificado pelo n´mero da parti¸˜o e pela posi¸˜o nesse vetor. Essa estru-
                                                      u            ca              ca
                               tura de dados forma o que ´ normalmente conhecido como um flat file system,
                                                            e
                               pois os descritores n˜o incluem nomes, n˜o existe nenhuma estrutura¸˜o dos ar-
                                                    a                  a                            ca
                               quivos em diret´rios, apenas um diret´rio unico (vetor) e arquivos identificados
                                               o                    o    ´
                               pela posi¸˜o do vetor.
                                         ca
http://www.candidatoreal.com




                                  Em qualquer solu¸˜o, cada diret´rio nada mais ´ que uma tabela. Existem
                                                    ca            o               e
                               diversas implementa¸˜es poss´
                                                   co      ıveis para tabelas que podem ser usadas na im-
                               plementa¸˜o de um diret´rio. Entre elas, destaca-se a lista n˜o ordenada, lista
                                        ca             o                                    a
                               ordenada e a tabela hash.



                               4.7     Sistemas Operacionais Distribu´
                                                                     ıdos
                               Um sistema distribu´ ´ uma cole¸˜o de computadores independentes que pare-
                                                  ıdo e       ca
                               cem ao usu´rio como um unico computador. Essa defini¸˜o implica hardware
                                         a              ´                           ca

                                                                      61
http://www.candidatoreal.com




                               formado por m´quinas autˆnomas e software fornecendo a abstra¸˜o de uma
                                             a           o                                  ca
                               m´quina unica. As principais vantagens s˜o:
                                 a     ´                               a

                                  • Econˆmicas: aproveitar m´quinas potencialmente ociosas; mais barato
                                         o                     a
                                    v´rios processadores interconectados do que um supercomputador.
                                     a

                                  • Distribui¸˜o inerente: algumas aplica¸˜es s˜o distribu´
                                             ca                          co    a          ıdas por natureza.

                                  • Tolerˆncia a falhas: em caso de falha de uma m´quina, o sistema como
                                         a                                        a
                                    um todo pode sobreviver, apresentando apenas uma degrada¸˜o de de-
                                                                                               ca
                                    sempenho.
                                  • Crescimento incremental: o poder computacional pode ser aumentado
                                    atrav´s da inclus˜o de novos equipamentos.
                                         e           a
                                  • Flexibilidade: sistemas distribu´
                                                                    ıdos s˜o mais flex´
                                                                          a            ıveis do que m´quinas
                                                                                                      a
                                    isoladas, por isso muitas vezes s˜o utilizados at´ mesmo que n˜o se es-
                                                                     a               e              a
                                                                  ´
                                    teja buscando desempenho. E essa flexibilidade que permite que v´riosa
                                    usu´rios compartilhem dados e perif´ricos.
                                        a                               e

                                  E as desvantagens:

                                  • Pouco software de alto n´ dispon´ para sistemas distribu´
                                                            ıvel    ıvel                    ıdos.
                                  • Dificuldades para evitar acesso indevido (seguran¸a).
                                                                                    c

                                  • A rede de interconex˜o pode causar problemas ou n˜o dar vaz˜o a de-
                                                        a                            a         a
                                    manda.

                                   Sistemas distribu´
                                                    ıdos consistem de v´rias CPUs interconectadas. No en-
                                                                         a
                               tanto, h´ v´rias formas diferentes no qual esse hardware pode estar organizado.
                                        a a
                               Dentre as v´rias classifica¸˜es existentes, Flynn prop˜e uma taxonomia con-
                                            a             co                          o
                               siderando o n´mero de fluxo de instru¸˜es e o n´mero de fluxo de dados.
                                              u                       co        u

                                  • SISD(Single Instruction Single Data): fluxo de instru¸˜es e dados unico ´
                                                                                        co           ´     e
                                    a caracter´
                                              ıstica dos uniprocessadores tradicionais
                                  • MIMD(Multiple Instructions Multiple Data): caracteriza-se por v´rios a
                                    processadores interconectados. Tanembaum apresenta a seguinte subclas-
                                    sifica¸˜o, onde os dois primeiros s˜o definidos em rela¸˜o a organiza¸˜o da
                                         ca                           a                  ca            ca
                                    mem´ria e os dois ultimos em rela¸˜o a forma de interconex˜o:
                                         o             ´                ca                       a

                                       – Multiprocessador: m´quinas MIMD com mem´ria compartilhada (um
                                                            a                      o
http://www.candidatoreal.com




                                         unico espa¸o de endere¸amento virtual compartilhado por todas as
                                         ´         c           c
                                         CPUs).
                                       – Multicomputador: m´quinas que n˜o possuem mem´ria compartil-
                                                               a            a                o
                                         hada, isto ´, cada processador possui sua mem´ria privada.
                                                    e                                 o
                                       – Barramento: um unico cabo, rede, barramento ou outro meio que
                                                           ´
                                         conecte todas as m´quinas. Analogia: TV a cabo.
                                                            a
                                       – Switch: existem cabos individuais conectando m´quina a m´quina,
                                                                                       a         a
                                         com v´rios padr˜es poss´
                                              a         o       ıveis.




                                                                     62
http://www.candidatoreal.com




                                   Outra classifica¸˜o: Fortemente acoplado(Tightly Coupled): comunica¸˜o
                                                  ca                                                       ca
                               r´pida entre os processadores (grande n´mero de bits por segundo). Fracamente
                                a                                     u
                               acoplado(Loosely Coupled): atraso para troca de mensagem entre m´quinas ´
                                                                                                    a         e
                               alto.
                                   Com a cria¸˜o de novas arquiteturas de computadores, surgiram novas de-
                                              ca
                               mandas de software e, em especial, novas fun¸˜es exigidas ao S.O. Pode-se con-
                                                                           co
                               siderar como uma boa classifica¸˜o da evolu¸˜o dos Sistemas Operacionais a
                                                                ca          ca
                               tabela abaixo. A tabela 4.1 apresenta uma compara¸˜o entre as caracter´
                                                                                   ca                  ısticas
                               dos S.O modernos

                                Gera¸˜o
                                    ca        Sistema               Caracter´
                                                                            ıstica                 Objetivo
                                1a         SO Centralizado   Gerenciamento de Processos      Gerenciamento de
                                                             Gerenciamento de Mem´ria o            recursos
                                                               Gerenciamento de E/S          Mem´ria estendida
                                                                                                   o
                                                             Gerenciamento de Arquivos           Virtualidade
                                2a           SO de Rede            Acesso Remoto            Compartilhamento de
                                                                Troca de Informa¸˜es
                                                                                  co               recursos
                                                                 Navega¸˜o na rede
                                                                         ca                  Interoperabilidade
                                3a          SO Distribu´
                                                       ıdo   Vis˜o global do Sistema de
                                                                a                           Vis˜o de computador
                                                                                               a
                                                                      arquivos,               ´
                                                                                             Unico em sistema
                                                                  Espa¸o de nomes
                                                                       c                         de M´ltiplos
                                                                                                      u
                                                                 Tempo, Seguran¸a  c            Computadores
                                                                Poder Computacional             Transparˆncia
                                                                                                         e
                                4a         SO Cooperativo      Aplica¸˜es Distribu´
                                                                     co             ıdas    Trabalho cooperativo
                                             Autˆnomo
                                                o              Abertas e Cooperativas             Autonomia

                                                     Tabela 4.1: Sistemas Operacionais



                               4.7.1      Estrutura¸˜o de Sistemas Distribu´
                                                   ca                      ıdos
                               Estrutura¸˜o baseada na distribui¸˜o f´
                                        ca                      ca ısica
                               Dentre os v´rios modelos baseados da distribui¸˜o f´
                                           a                                 ca ısica, encontram-se o modelo
                               hier´rquico, o do cache de CPU, o usu´rio servidor e o modelo de conjunto de
                                   a                                  a
                               processadores.
                                   No modelo hier´rquico, os computadores s˜o dispostos em uma rede sob a
                                                    a                        a
                               forma de ´rvore, de maneira que quanto mais pr´ximos estiverem da raiz, mais
                                         a                                     o
                               potentes dever˜o ser. O computador da raiz tratar´, de forma geral, do sistema
                                               a                                  a
                               como um todo, enquanto que os computadores distantes da raiz tratar˜o de a
                               tarefas espec´ıficas e especializadas.
http://www.candidatoreal.com




                                   O modelo de cache de CPU consiste na utiliza¸˜o de computadores de menor
                                                                               ca
                               porte como elementos que interligam terminais com uma grande CPU. Nesse
                               caso, uma parte do processamento ser´ executada no computador ligado ao
                                                                       a
                               terminal, e a outra parte no computador central.
                                   O modelo usu´rio-servidor(cliente/servidor) surgiu na medida em que os
                                                  a
                               computadores pequenos, crescendo em potˆncia e tendo seus pre¸os reduzidos,
                                                                          e                    c
                               diminu´ıram gradativamente a importˆncia do computador central do modelo
                                                                     a
                               cache de CPU.




                                                                     63
http://www.candidatoreal.com




                               Estrutura¸˜o L´gica
                                        ca   o
                               Modelo de processos:
                               Esses processos podem encapsular tanto elementos ativos com natureza, con-
                               sistindo dos programas referentes `s atividades do sistema e do usu´rio quanto
                                                                 a                                a
                               elementos naturalmente passivos correspondendo aos recursos e suas respecti-
                               vas opera¸˜es, confinados em gerenciadores de recursos. A comunica¸˜o entre os
                                         co                                                       ca
                               processos, implementada pelo sistema operacional, pode ocorrer de duas formas:

                                  • Chamada remota de procedimento: este tipo de comunica¸˜o entre pro-
                                                                                               ca
                                    cessos ´ bastante dependente da linguagem usada para implementa¸˜o
                                           e                                                            ca
                                    do sistema, devendo satisfazer suas restri¸˜es com rela¸˜o a chamada de
                                                                              co           ca
                                    procedimento e a passagem de parˆmetros.
                                                                      a

                                  • Troca expl´ıcita de mensagem: este j´ ´ mais flex´
                                                                          a e          ıvel do que o anterior,
                                    suas restri¸˜es est˜o relacionadas com a existˆncia de liga¸˜es impl´
                                               co      a                           e           co       ıcitas
                                    ou expl´
                                           ıcitas entre os processos e com a interpreta¸˜o da mensagem.
                                                                                       ca

                                  Modelo de objetos:
                               O modelo de objetos baseia-se no encapsulamento das v´rias partes de um sis-
                                                                                       a
                               tema em elementos denominados objetos que s˜o estruturados de forma a apre-
                                                                             a
                               sentarem um conjunto de opera¸˜es respons´veis pelo seu comportamento. Para
                                                              co           a
                               conseguir acessar um objeto, um processo deve ter capacidade de fazˆ-lo, usando
                                                                                                  e
                               o conhecimento do nome do objeto e a posse da autoriza¸˜o para cessar algu-
                                                                                         ca
                               mas ou todas as suas opera¸˜es. Cada objeto distribu´ n˜o opera sozinho. A
                                                          co                        ıdo a
                               princ´ ele ´ constru´ para trabalhar com outros objetos e, para isso, precisa
                                    ıpio     e       ıdo
                               de uma esp´cie de “barramento”. Tais “barramentos” fornecem infra-estrutura
                                           e
                               para os objetos, adicionando novos servi¸os que podem ser herdados durante
                                                                         c
                               a constru¸˜o do objeto, ou mesmo em tempo de execu¸˜o para alcan¸ar altos
                                         ca                                           ca              c
                               n´
                                ıveis de colabora¸˜o com outros objetos independentes. CORBA ´ um exemplo
                                                 ca                                             e
                               de “barramento”.
http://www.candidatoreal.com




                                                                     64
http://www.candidatoreal.com




                               Cap´
                                  ıtulo 5

                               Principais Processadores de
                               Mercado

                               5.1     Processadores Intel
                               5.1.1    Fam´ Pentium
                                           ılia
                               Pentium 4
                               O processador Pentium 4 da Intel foi lan¸ado em novembro de 2000, usando a
                                                                       c
                               microarquitetura x86 de s´tima gera¸˜o da Intel, chamada Netburst, que veio
                                                        e         ca
                               com um pipeline muito longo com a inten¸˜o de permitir clocks mais altos.
                                                                         ca
                               Os processadores Pentium 4 podem encontrados em trˆs vers˜es de n´cleos:
                                                                                     e     o       u
                               Willamette, Northwood e Prescott.

                                   Os primeiros modelos de Pentium 4 utilizavam soquete 423, que, como o
                               pr´prio nome j´ sugere, possu´ 423 terminais. Depois foram lan¸ados modelos
                                 o           a              ıa                               c
                               de Pentium 4 com soquete 478, que, apesar de possu´ırem mais contatos do que
                               os modelos anteriores (soquete 423), eram fisicamente menores. Os modelos de
                               Pentium 4 atuais utilizam um novo tipo de soquete, chamado Soquete 775.

                                Willamette
                                    Os primeiros modelos de Pentium 4 eram baseados no n´cleo Willamette,
                                                                                            u
                                    que tinha 8 KB de cache L1 para dados; 12 KB de cache L1 para instru¸˜o;
                                                                                                        ca
                                    256 KB de cache L2; trabalhava externamente a 400 MHz (100 MHz trans-
http://www.candidatoreal.com




                                    ferindo quatro dados por pulso de clock); padr˜o de pinagem soquete 423
                                                                                   a
                                    e 478; clock interno de 1,30 a 2 GHz; suporte a instru¸˜es MMX (oferece
                                                                                          co
                                    um modelo de execu¸˜o SIMD (Single Instruction Multiple Data, ou seja,
                                                         ca
                                    fluxo unico de instru¸˜es e m´ltiplos de dados) simples, capaz de efetuar
                                          ´              co       u
                                    processamentos de dados inteiros, empacotados em registros de 64 bits.
                                    As instru¸˜es MMX melhoraram a execu¸˜o das assim chamadas tarefas
                                              co                             ca
                                    multim´ ıdias, como codificar e decodificar v´ıdeo), SSE (Streaming SIMD
                                    Extensions) e SSE2; tecnologia de constru¸˜o de 180 nanˆmetro.
                                                                              ca              o

                                Northwood
                                    Em seguida vieram os modelos de Pentium 4 baseados no n´cleo North-
                                                                                           u


                                                                    65
http://www.candidatoreal.com




                                   wood. Este n´cleo ´ cerca de 60% menor do que o n´cleo Willamette dev-
                                                u     e                               u
                                   ido ao seu processo de fabrica¸˜o de 130 nanˆmetros. O n´cleo Northwood
                                                                 ca            o           u
                                   possui 8 KB de cache L1 para dados; 12 KB de cache L1 para instru¸˜o;
                                                                                                       ca
                                   512 KB ou 2 MB de cache L2; barramento externo rodando a 400 MHz,
                                   533 MHz ou 800 MHz (100 MHz, 133 MHz e 200 MHz transferindo quatro
                                   dados por pulso de clock, respectivamente); clock interno de 1,60 a 3,4
                                   GHz; suporte a instru¸oes MMX, SSE e SSE2. Alguns modelos possuem
                                                          c˜
                                   suporte a tecnologia Hyper-Threading.

                               Prescott
                                   O n´cleo Prescott ´ constru´ com tecnologia de 90 nanˆmetros ´ uti-
                                        u              e        ıdo                            o       e
                                   lizado nos processadores Pentium 4 modernos. Ele pode ser encontrado
                                   com 16 KB de cache L1 para dados; 12 KB de cache L1 para instru¸˜o;   ca
                                   512 KB, 1 MB ou 2 MB de cache L2; trabalha externamente a 533 MHz
                                   ou 800 MHz (133 MHz e 200 MHz transferindo quatro dados por pulso
                                   de clock, respectivamente); com clock interno de 2,26 a 3,80 GHz; suporte
                                   a
                                   `s novas instru¸˜es MMX, SSE, SSE2 e SSE3. Alguns modelos possuem
                                                   co
                                   suporte a tecnologia Hyper-Threading, XD, EM64T, SpeedStep (permite
                                   que o sistema operacional ajuste o clock do processador, diminuindo-o ao
                                   executar aplicativos que exigem menos poder e economizando energia) e
                                   a VT (Virtualization Technology ), originalmente conhecida como Van-
                                   derpool. A tecnologia VT permite que um processador funcione como se
                                   fosse v´rios processadores trabalhando em paralelo de modo a permitir
                                            a
                                   que v´rios sistemas operacionais sejam executados ao mesmo tempo em
                                          a
                                   uma mesma m´quina. Embora o clock de um Prescott seja o mesmo de
                                                  a
                                   um Northwood, alguns softwares de teste mostraram que um Northwood ´     e
                                   ligeiramente mais veloz que um Prescott.
                               Prescott 2M
                                   O Pentium 4 Extreme Edition foi lan¸ado em novembro de 2003 e foi o
                                                                          c
                                   primeiro processador para desktop a possuir o cache L3 integrado, carac-
                                   ter´
                                      ıstica esta presente apenas em processadores voltados para o mercado
                                   corporativo.
                                   Este processador possui 2 MB de cache L3 sendo acessado na mesma
                                   freq¨ˆncia de opera¸˜o interna do processador. Os primeiros modelos de
                                        ue              ca
                                   Pentium 4 Extreme Edition eram baseados no n´cleo Gallatin, que tinha
                                                                                    u
                                   8 KB de cache L1 para dados; 12 KB de cache L1 para instru¸˜o; 512 KB
                                                                                                ca
                                   de cache L2 e 2 MB de cache L3; trabalhava externamente a 800 MHz
                                   e 1066MHz (200 MHz ou 266 MHz transferindo quatro dados por pulso
http://www.candidatoreal.com




                                   de clock, respectivamente); clock interno de 3,20 a 3,46 GHz; suporte `s
                                                                                                         a
                                   instru¸˜es MMX, SSE e SSE2; tecnologia Hyper-Threading; tecnologia de
                                          co
                                   constru¸˜o de 130 nanˆmetros.
                                            ca             o
                                   Os modelos de Pentium 4 Extreme Edition atuais s˜o baseados no n´cleo
                                                                                      a               u
                                   Prescott 2M com tecnologia de 90 nanˆmetros. Possuem 16 KB de cache
                                                                          o
                                   L1 para dados; 12 KB de cache L1 para instru¸˜o; 2 MB de cache L2; n˜o
                                                                                 ca                      a
                                   possuem cache L3; trabalhava externamente a 1066 MHz (266 MHz trans-
                                   ferindo quatro dados por pulso de clock); clock interno de 3,73 GHz; su-
                                   porte `s instru¸˜es MMX, SSE, SSE2 e SSE3; tecnologia Hyper-Threading,
                                          a        co
                                   EM64T.




                                                                    66
http://www.candidatoreal.com




                               Pentium D e Pentium Extreme Edition
                               O processador Pentium D ´ a vers˜o de dois n´cleos do Pentium 4, e o Pentium
                                                         e      a          u
                               Extreme Edition ´ a vers˜o do Pentium D com tecnologia HyperThreading ha-
                                                e      a
                               bilitada. Os processadores Pentium D e Pentium Extreme Edition podem ser
                               encontrados em duas vers˜es de n´cleos: Smithfield e Presler.
                                                        o       u

                                   O Pentium D e o Pentium Extreme Edition s˜o baseados na microarquitetura
                                                                            a
                               x86 de s´tima gera¸˜o da Intel, chamada Netburst, ou seja, apesar do nome
                                        e           ca
                               diferente, eles s˜o internamente um Pentium 4 (ou melhor, dois processadores
                                                a
                               Pentium 4 em um unico encapsulamento). A diferen¸a b´sica entre o Pentium
                                                   ´                              c a
                               D e o Pentium Extreme Edition ´ a ausˆncia da tecnologia HyperThreading nos
                                                                e    e
                               processadores Pentium D.

                                Smithfield
                                    Os processadores Pentium D e Pentium Extreme Edition da s´rie 800 s˜o
                                                                                                   e           a
                                    baseados no n´cleo Smithfield. O n´cleo Smithfield consiste na verdade
                                                   u                       u
                                    em duas pastilhas de sil´  ıcio do n´cleo Prescott montadas em um unico
                                                                         u                                 ´
                                    processador.
                                    As principais caracter´ısticas dos processadores Pentium D da s´rie 800 s˜o:
                                                                                                   e          a
                                    tecnologia de n´cleo duplo; 16 KB de cache L1 de dados por n´cleo; 12 KB
                                                   u                                              u
                                    de cache L1 de instru¸˜o por n´cleo; 2 MB de cache L2 (1 MB por n´cleo);
                                                          ca         u                                   u
                                    barramento externo de 800 MHz (200 MHz transferindo quatro dados por
                                    pulso de clock), 533 MHz no caso do Pentium D 805 (133 MHz transferindo
                                    quatro dados por pulso de clock); clock interno de 2,66 a 3,20 GHZ para
                                    o Pentium D e 3,20 GHz para o Extreme Edition; suporte `s instru¸˜es
                                                                                                  a          co
                                    SSE3; soquete 775; processo de fabrica¸˜o de 90 nm; tecnologia EM64T,
                                                                              ca
                                    XD e SpeedStep (modelos 840 e 830); e tecnologia Hyper-Threading nos
                                    processadores Pentium Extreme Edition. Os processadores Pentium D
                                    n˜o tˆm esta tecnologia.
                                     a e

                                Presler
                                    Os processadores Pentium D e Pentium Extreme Edition da s´rie 900 s˜o
                                                                                                 e        a
                                    baseados no n´cleo Presler.
                                                  u
                                    As principais caracter´
                                                          ısticas dos processadores Pentium D e Pentium Ex-
                                    treme Edition da s´rie 900 s˜o: tecnologia de n´cleo duplo; 16 KB de
                                                        e          a                  u
                                    cache L1 de dados por n´cleo; 12 KB de cache L1 de instru¸˜o por n´cleo;
                                                             u                               ca        u
                                    4 MB de cache L2 (2 MB por n´cleo); barramento externo de 800 MHz
                                                                      u
                                    (200 MHz transferindo quatro dados por pulso de clock) nos processadores
                                    Pentium D ou 1.066 MHz (266 MHz transferindo quatro dados por pulso
http://www.candidatoreal.com




                                    de clock) nos processadores Pentium Extreme Edition; clock interno de
                                    2,80 a 3,60 GHZ para o Pentium D e 3,46 a 3,73 GHz para o Extreme
                                    Edition; suporte `s instru¸˜es SSE3; soquete 775; processo de fabrica¸˜o
                                                     a         co                                        ca
                                    de 65 nm; tecnologia EM64T, XD, VT e SpeedStep (modelos 840 e 830); e
                                    tecnologia Hyper-Threading nos processadores Pentium Extreme Edition.
                                    Os processadores Pentium D n˜o tˆm esta tecnologia.
                                                                     a e

                               Pentium M
                               O Pentium M ´ o processador da Intel voltado para o mercado de notebooks e
                                              e
                               utilizado pela plataforma Centrino. A plataforma Centrino da Intel ´ um con-
                                                                                                  e


                                                                      67
http://www.candidatoreal.com




                               junto de tecnologias desenvolvidas para notebooks e ´ formada por trˆs compo-
                                                                                   e               e
                               nentes:

                                  • Processador Pentium M
                                  • Intel Chipsets 855 ou 915
                                  • Rede Wireless Intel/PRO

                                   Um notebook s´ pode ser considerado Centrino se ele possuir todos esses
                                                 o
                               trˆs componentes. O processador Pentium M da Intel foi lan¸ado em mar¸o de
                                 e                                                          c             c
                               2003, usando a microarquitetura x86 de sexta gera¸˜o da Intel, ou seja, a mesma
                                                                                ca
                               arquitetura usada pelos processadores Pentium Pro, Pentium II e Pentium III.
                               Podem ser encontrados em duas vers˜es de n´cleos: Banias e Dothan.
                                                                   o       u

                                Banias
                                    Os primeiros modelos de Pentium M eram baseados no n´cleo Banias,
                                                                                             u
                                    que tinha 32 KB de cache L1 de instru¸˜es e 32 KB de cache L1 de
                                                                            co
                                    dados; 1 MB de cache L2; trabalhava externamente a 400 MHz (100 MHz
                                    transferindo quatro dados por pulso de clock); clock interno de 1,10 a
                                    1,50GHz; suporte as instru¸˜es SSE2; tecnologia Enhanced SpeedStep;
                                                               co
                                    tecnologia de constru¸˜o de 0, 13µm; padr˜o de pinagem soquete 478 e
                                                         ca                   a
                                    479.
                                Dothan
                                    O n´cleo Dothan ´ constru´ com tecnologia de 90 nanˆmetros ´ utilizado
                                        u             e       ıdo                         o       e
                                    nos processadores Pentium M modernos. Ele possui 32 KB de cache L1
                                    de instru¸˜es e 32 KB de cache L1 de dados; 2 MB de cache L2; trabalha
                                             co
                                    externamente a 400 MHz ou 533 MHz (100 MHz e 133 MHz transferindo
                                    quatro dados por pulso de clock, respectivamente); clock interno de 1,10
                                    a 2,26 GHz; suporte as instru¸˜es SSE2; tecnologia Enhanced SpeedStep,
                                                                  co
                                    Execute Disable (alguns modelos); padr˜o de pinagem soquete 478 e 479.
                                                                           a

                               5.1.2    Fam´ Celeron
                                           ılia
                               O nome Celeron ´ utilizado pela Intel para designar sua linha de processadores de
                                               e
                               baixo custo. Na verdade, o Celeron ´ uma vers˜o econˆmica dos processadores
                                                                    e          a        o
                               topo de linha da Intel. Ou seja, o Celeron ´ uma vers˜o ?capada? do Pentium
                                                                           e          a
                               II, Pentium III ou do Pentium 4, com algumas caracter´       ısticas reduzidas ou
                               removidas. O Celeron diferencia-se do Pentium II, Pentium III ou do Pentium
                               4 em basicamente trˆs aspectos:
                                                   e
http://www.candidatoreal.com




                                  • Tamanho do cache L2
                                  • Clock interno
                                  • Clock do barramento externo

                                   Essas diferen¸as fazem com que o Celeron seja mais barato e tenha um de-
                                                c
                               sempenho menor do que os processadores Pentium II, Pentium III e Pentium
                               4, sendo, portanto, destinado para o mercado de usu´rios dom´sticos ou para
                                                                                   a         e
                               aqueles que n˜o necessitam de grande poder computacional.
                                             a



                                                                      68
http://www.candidatoreal.com




                                   Existem v´rios modelos de Celeron, mas atualmente o comercializado pela
                                             a
                               Intel ´ o Celeron D. O sufixo D ´ apenas para diferenci´-lo das gera¸˜es anteri-
                                     e                        e                      a            co
                               ores.

                                   O Celeron D ´ a vers˜o topo de linha dos processadores Celeron. Esse pro-
                                                e      a
                               cessador ´ baseado no Pentium 4 com n´cleo Prescott e possui tecnologia de 65
                                        e                             u
                               e 90 nanˆmetros.
                                       o

                                  O Celeron D possui 16 KB de cache L1 de dados, 256 e 512 KB de cache
                               L2, trabalha externamente a 533 MHz (133 MHz transferindo quatro dados por
                               pulso de clock), suporte ?s instru¸˜es multim´
                                                                  co          ıdia SSE3, encapsulamento FC-
                               PGA e FC-LGA, padr˜o de pinagem soquete 478 ou 775, e pode ser encontrado
                                                     a
                               com clocks de 2,13 GHz a 3,60 GHz. Por ser uma vers˜o ?capada? do Pentium 4
                                                                                     a
                               Prescott, que permite alcan¸ar com maior facilidade freq¨ˆncias mais elevadas,
                                                           c                             ue
                               o Celeron D n˜o suporta a tecnologia Hyper-Threading, que permite simular
                                              a
                               em um unico processador f´
                                       ´                  ısico dois processadores l´gicos, e n˜o possui n´cleo
                                                                                    o          a          u
                               duplo.

                                  Alguns processadores Celeron D possuem a tecnologia EM64T (Extended
                               Memory 64-bit Technology), que permite ao processador acessar mais mem´ria
                                                                                                      o
                               RAM, e a tecnologia XD (eXecute Disable), que impede que determinados tipos
                               de v´
                                   ırus ataquem o micro.

                                  Antes do Celeron D, vieram alguns outros modelos: Celeron SEPP (Conving-
                               ton), Celeron A (Medocino), Celeron PPGA (Mendocino), Celeron Coppermine,
                               Celeron Tualatin, Celeron Willamette, Celeron Northwood e o Celeron M.

                               5.1.3    Fam´ Core
                                           ılia
                               Core Duo
                               O Core Duo (conhecido anteriormente pelo nome-c´digo Yonah) ´ o primeiro
                                                                                     o             e
                               processador da Intel voltado para o mercado de notebooks a ter tecnologia de
                               dois n´cleos, isto ´, dentro dele h´ dois processadores completos. Curiosamente
                                      u           e               a
                               este ´ tamb´m o primeiro processador da Intel adotado pela Apple.
                                    e      e

                                   Na realidade este processador ´ um Pentium M com dois n´cleos de pro-
                                                                 e                        u
                               cessamento e constru´ com tecnologia de 65 nm (O Pentium M ´ atualmente
                                                    ıdo                                     e
                               constru´ com tecnologia de 90 nm).
                                      ıdo
http://www.candidatoreal.com




                                   Apesar de ter dois n´cleos de processamento dentro de um unico proces-
                                                       u                                          ´
                               sador, o tamanho do n´cleo do Core Duo ´ praticamente o mesmo do Pentium
                                                     u                   e
                               M (n´cleo Dothan). Isto significa que o custo para a Intel produzir um Core Duo
                                    u
                               ´ quase o mesmo para produzir um Pentium M, que tem apenas um unico n´cleo.
                               e                                                                  ´     u

                                  O cache de mem´ria L2 do Core Duo ´ de 2 MB compartilhado entre
                                                     o                     e
                               os n´cleos (a Intel chama esta implementa¸˜o de cache L2 compartilhado de
                                   u                                      ca
                               ”Smart Cache”, ou ”cache inteligente”). No Pentium D 840, por exemplo, que ´
                                                                                                          e
                               um processador de n´cleo duplo, o tamanho do seu cache L2 ´ de 2 MB, sendo
                                                    u                                     e
                               1 MB destinado para cada n´cleo. Ou seja, no Pentium D existem dois cache
                                                           u


                                                                     69
http://www.candidatoreal.com




                               L2 de 1 MB, um por n´cleo. J´ no Core Duo, existe apenas um cache L2 de 2
                                                   u       a
                               MB que ´ compartilhado entre os dois n´cleos.
                                       e                             u

                                   Com o cache compartilhado, a quantidade de mem´ria cache que cada n´cleo
                                                                                  o                    u
                               utiliza n˜o ´ fixa. Com um cache L2 de 2 MB, em um dado momento um n´cleo
                                        a e                                                            u
                               pode estar usando 1,5 MB de cache e o outro 512 KB (0,5 MB), por exemplo.
                               Se em um processador de n´cleo duplo com cache separado o cache L2 de um
                                                           u
                               n´cleo ”acabe”(isto ´, seu 1 MB est´ sendo totalmente usado), ele precisa ir `
                                 u                  e             a                                         a
                               lenta mem´ria RAM buscar os dados, diminuindo o desempenho do sistema. No
                                          o
                               caso do cache compartilhado, cada n´cleo pode simplesmente ”redimensionar”o
                                                                  u
                               seu cache L2.

                                   Outra vantagem do cache L2 compartilhado ´ que se um n´cleo buscou um
                                                                              e            u
                               dado ou uma instru¸˜o e a armazenou no cache L2, esta mesma informa¸˜o
                                                    ca                                                  ca
                               pode ser aproveitada pelo outro n´cleo. Em processadores de n´cleo duplo
                                                                  u                             u
                               com mem´rias cache separadas o segundo n´cleo teria de acessar este dado (ou
                                         o                               u
                               instru¸˜o) atrav´s do barramento local do processador, isto ´, ”pelo lado de
                                     ca         e                                          e
                               fora”do processador, usando o clock do barramento local, que ´ muito inferior
                                                                                            e
                               ao clock interno do processador, diminuindo o desempenho do sistema.

                                    As principais caracter´
                                                          ısticas do Core Duo s˜o as seguintes: tecnologia de
                                                                               a
                               n´cleo duplo; Nome-c´digo: Yonah; 32 KB de cache L1 de instru¸˜es e 32 KB
                                 u                    o                                         co
                               de cache L1 de dados 2 MB de cache L2 compartilhado entre os dois n´cleos;
                                                                                                       u
                               Soquete 478 ou 479; tecnologia de 65 nm; barramento externo de 667 MHz
                               (166 MHz transferindo quatro dados por pulso de clock); tecnologia de Virtual-
                               iza¸˜o; tecnologia Execute Disable; tecnologia Enhanced SpeedStep; suporte `s
                                   ca                                                                      a
                               instru¸˜es SSE3.
                                      co

                                   Podemos dividir a plataforma Centrino em trˆs fam´
                                                                                e     ılias. A primeira fam´ılia
                               ´ formada pelo processador Pentium M, chipset Intel 855/915 Express e rede
                               e
                               sem fio Intel PRO/Wireless. A segunda fam´ ´ formada pelo processador
                                                                             ılia e
                               Intel Core Solo (vers˜o do processador Intel Core Duo, mas com um unico
                                                     a                                                    ´
                               n´cleo de processamento ? at´ o momento somente um modelo de Core Solo foi
                                 u                            e
                               lan¸ado, T1300, rodando internamente a 1,66 GHz, externamente a 667 MHz, 2
                                   c
                               MB de cache L2), chipset Intel 945 Express e rede sem fio Intel PRO/Wireless
                               3945ABG. J´ a terceira fam´
                                           a                ılia, tamb´m conhecida como Centrino Duo (antes
                                                                      e
                               chamada Napa), traz para os notebooks o poder computacional dos proces-
                               sadores de dois n´cleos e ´ formada pelo processador Intel Core Duo com clock
                                                u        e
                               interno de 1,50 a 2,16 GHz, chipset 945 Express e rede Intel PRO/Wireless
http://www.candidatoreal.com




                               3945ABG.

                               Core 2 Duo
                               O Core 2 ´ a gera¸˜o mais recente de processadores lan¸ada pela Intel (os
                                           e      ca                                    c
                               primeiros modelos foram lan¸ados oficialmente em 27 de julho de 2006). A
                                                            c
                               chegada do Core 2 significa a substitui¸˜o da marca Pentium, que estava sendo
                                                                     ca
                               usada pela companhia desde 1993. Os modelos mais comuns e conhecidos dessa
                               linha se chamam Core 2 Duo (com n´cleo duplo), que substitui o Pentium 4 e o
                                                                   u
                               Pentium D, mas existe tamb´m um modelo Core 2 Quad (com n´cleo qu´druplo)
                                                          e                                u       a
                               e os modelos Core 2 Extreme (”high end”), que substitui o Pentium Extreme


                                                                      70
http://www.candidatoreal.com




                               Edition.

                                  O Core 2 Duo ´ o primeiro processador para desktop a usar a nova microar-
                                                  e
                               quitetura Core. O lan¸amento do processador Core 2 Duo (nome-c´digo Conroe
                                                     c                                          o
                               para desktop e Meron para port´teis) marca o in´ de uma nova gera¸˜o de
                                                               a                ıcio                   ca
                               processadores baseados na nova microarquitetura Core, e declara de uma vez por
                               todas o fim da microarquitetura Netburst usada desde 2000 pelos processadores
                               Intel de 7a gera¸˜o. Como a microarquitetura Core ´ baseada na arquitetura do
                                               ca                                 e
                               Pentium M e do Pentium III, podemos dizer que o Core 2 Duo ´ um processador
                                                                                            e
                               Intel de 6a gera¸˜o.
                                               ca

                                  A diferen¸a entre o Core 2 Duo e o Core 2 Extreme ´ que este ultimo tra-
                                           c                                            e         ´
                               balha com clocks mais elevados e tem o multiplicador de clock destravado, o
                               que permite fazer overclock alterando o multiplicador de clock do processador.

                                   Cuidado para n˜o confundir o processador Core 2 Duo com o Core Duo. O
                                                  a
                               Core Duo (conhecido anteriormente pelo nome-c´digo Yonah) ´ o nome com-
                                                                               o             e
                               ercial para um Pentium M com dois n´cleos de processamento constru´ com
                                                                    u                               ıdo
                               tecnologia de 65 nm. J´ o Core 2 Duo ´ o nome comercial para o processador de
                                                     a              e
                               nome-c´digo Merom (para notebooks) ou Conroe (para desktops), que utiliza a
                                       o
                               nova microarquitetura Core da Intel.

                                   As principais caracter´
                                                         ısticas t´cnicas dos processadores da fam´ Core 2
                                                                  e                               ılia
                               (Core 2 Duo e Core 2 Extreme) s˜o as seguintes: arquitetura Core; 64 KB de
                                                                  a
                               cache L1 (32 KB de dados + 32 KB de instru¸˜es) por n´cleo; tecnologia de dois
                                                                            co        u
                               n´cleos (o Core 2 Extreme QX6700 tem tecnologia de quatro n´cleos); tecnolo-
                                 u                                                            u
                               gia de 65 nm; soquete 775; barramento externo de 800 MHz (200 MHz trans-
                               ferindo quatro dados por pulso de clock) ou 1.066 MHz (266 MHz transferindo
                               quatro dados por pulso de clock); 2 MB, 4 MB ou 8 MB (Extreme QX6700) de
                               cache de mem´ria L2 compartilhado; tecnologia de Virtualiza¸˜o (exceto o Core
                                             o                                              ca
                               2 Duo E4300); tecnologia Intel EM64T; instru¸˜es SSE3 e SSSE3 (atualiza¸˜o
                                                                               co                         ca
                               da SSE3); Execute Disable; Intelligent Power Capability; tecnologia Enhanced
                               SpeedStep.

                                 O modelos Core 2 Duo possuem clock interno de 1,80 a 2,66 GHz, o Core 2
                               Quad possuiu clock interno de 2,40 GHz e o Core 2 Extreme 2,66 e 2,93 GHz.

                                  Existem os modelos Core 2 Duo para notebook com as caracter´
                                                                                             ısticas men-
                               cionadas anteriormente, mas com um barramento externo de 667 ou 533 MHz.
http://www.candidatoreal.com




                               5.1.4      Xeon
                               Em 1998 a Intel estabeleceu uma distin¸˜o entre seus processadores voltados
                                                                         ca
                               para o mercado de servidores e esta¸˜es de trabalho dos voltados para o mer-
                                                                    co
                               cado de usu´rios dom´sticos. Desde ent˜o, a Intel passou a incluir o termo
                                           a          e                   a
                               ”Xeon”(pronuncia-se ”z´  ıon”) no nome dos processadores voltados para o mer-
                               cado de servidores e esta¸˜es de trabalho. Esses processadores reconhecem mais
                                                         co
                               mem´ria RAM, permitem trabalhar em ambiente multiprocessado (isto ´, com
                                    o                                                                  e
                               placas-m˜e com v´rios processadores instalados sobre ela) e possui um desem-
                                        a        a


                                                                    71
http://www.candidatoreal.com




                               penho maior que os processadores voltados para o mercado dom´stico.
                                                                                           e

                                   A Intel lan¸ou vers˜es para o mercado de servidores e esta¸˜es de trabalho
                                              c       o                                      co
                               dos seus processadores Pentium II e Pentium III, chamadas, respectivamente,
                               de Pentium II Xeon e Pentium III Xeon. Assim, o processador Pentium II era
                               direcionado para o mercado de usu´rios dom´sticos enquanto que o Pentium II
                                                                  a        e
                               Xeon era um processador voltado para o mercado de servidores e esta¸˜es de
                                                                                                      co
                               trabalho. A mesma coisa acontece com o Pentium III e Pentium III Xeon. No
                               caso do Pentium 4, em vez do nome escolhido ter sido Pentium 4 Xeon, optou-se
                               pelo nome Xeon. Ou seja, o Xeon ´ um processador voltado para o mercado de
                                                                 e
                               servidores e esta¸˜es de trabalho baseado no Pentium 4. Atualmente, existem
                                                co
                               os modelos Xeon Core 2 Duo e Core 2 Quad.


                               Pentium 4 Xeon
                               Este processador deveria se chamar Pentium 4 Xeon, mas a Intel optou pelo
                               nome Xeon. Como comentamos anteriormente, o Xeon ´ um processador voltado
                                                                                   e
                               para o mercado de servidores e esta¸˜es de trabalho baseado no Pentium 4,
                                                                   co
                               sendo, portanto, um processador Intel de 7a gera¸˜o. Como vimos, os proces-
                                                                               ca
                               sadores anteriores da s´rie Xeon usavam a arquitetura Intel de 6a gera¸˜o (a
                                                      e                                              ca
                               mesma do Pentium Pro).

                                  A diferen¸a entre os processadores Xeon MP e Xeon ´ que o primeiro per-
                                           c                                          e
                               mite multiprocessamento sim´trico com quatro ou mais processadores, enquanto
                                                           e
                               que o Xeon permite multiprocessamento com no m´ximo dois processadores.
                                                                                  a
                               Antigamente, o processador Xeon era chamado ”Xeon DP”(multiprocessamento
                               sim´trico com at´ dois processadores), sendo posteriormente renomeado para
                                  e             e
                               apenas ”Xeon”.

                                  Os processadores Xeon possuem 8 KB de mem´ria cache L1 para dados (16
                                                                               o
                               KB nos modelos que possuem a tecnologia de 64 bits EM64T) e um cache L1
                               de execu¸˜o de 150 KB. O cache L2 pode ser de 512 KB, 1 MB ou 2 MB, sendo
                                       ca
                               que alguns modelos possuem um cache L3, que pode ser de 1 MB, 2 MB, 4 MB
                               ou 8 MB. O barramento externo pode ser de 667, 1066 ou 1333 MHz. Alguns
                               modelos possuem suporte `s instru¸˜es SSE3, e `s tecnologias XD, EM64T e
                                                        a       co            a
                               Hyper-Threading.

                                  Os modelos Xeon DP 53xx possuem suporte a tecnologia Quad-Core e n˜o
                                                                                                    a
http://www.candidatoreal.com




                               suportam a tecnologia Hyper-Threading.


                               Xeon MP
                               Como j´ explicamos, a diferen¸a entre o Xeon MP e o Xeon ´ a quantidade de
                                      a                      c                           e
                               processadores suportados no modo de multiprocessamento sim´trico: o Xeon
                                                                                           e
                               suporta at´ dois processadores em uma mesma placa-m˜e, enquanto que o Xeon
                                         e                                         a
                               MP suporta at´ quatro processadores por barramento.
                                              e




                                                                    72
http://www.candidatoreal.com




                                   Na realidade ´ poss´
                                                e      ıvel construir servidores com mais de quatro proces-
                               sadores Xeon MP em uma mesma placa-m˜e. Para isso, no entanto, os pro-
                                                                           a
                               cessadores devem ser agrupados de quatro em quatro ? j´ que eles s´ suportam
                                                                                        a         o
                               at´ quatro processadores por barramento ? devendo haver uma conex˜o entre
                                 e                                                                   a
                               os chipsets. Por exemplo, em um servidor com oito processadores Xeon MP,
                               os quatro primeiros processadores estar˜o interligados atrav´s do mesmo barra-
                                                                      a                    e
                               mento, enquanto os outros quatro processadores estar˜o interligados atrav´s de
                                                                                     a                   e
                               um segundo barramento. A comunica¸˜o entre os barramentos locais ser´ feita
                                                                     ca                                a
                               pelo chipset.

                                   As principais caracter´
                                                         ısticas dos processadores Xeon MP s˜o: soquete 603;
                                                                                            a
                               cache L1 de execu¸˜o de 150 KB; cache L1 de dados de 8 KB ou de 16 KB
                                                  ca
                               nos modelos com suporte ` tecnologia EM64T; multiprocessamento sim´trico
                                                           a                                          e
                               diretamente com at´ quatro processadores; tecnologia Hyper-Threading. Alguns
                                                   e
                               modelos possuem suporte `s instru¸˜es SSE3, e `s tecnologias XD, EM64T.
                                                          a        co           a


                               Xeon N´ cleo Duplo (50xx e 7xxx)
                                     u
                               A tecnologia de n´cleo duplo traz dois processadores inteiros dentro de um
                                                  u
                               mesmo inv´lucro. Como os processadores Xeon de n´cleo duplo modelos 50xx
                                           o                                        u
                               e 7xxx tˆm a tecnologia HyperThreading ? que simula a existˆncia de dois pro-
                                        e                                                   e
                               cessadores em cada n´cleo ? o sistema operacional reconhece cada processador
                                                    u
                               Xeon de n´cleo duplo como sendo quatro processadores. Assim, em um servidor
                                          u
                               com dois processadores Xeon de n´cleo duplo, o sistema operacional reconhecer´
                                                               u                                            a
                               oito processadores (quatro n´cleos, dois por processador, e dois processadores
                                                           u
                               l´gicos por n´cleo).
                                o            u

                                   Todos os processadores Xeon de n´cleo duplo possuem as seguintes carac-
                                                                     u
                               ter´
                                  ısticas: soquete 604 (modelos 7xxx) ou 771 (modelos 50xx); Mesma arquite-
                               tura interna no Pentium 4 (Netburst); instru¸˜es SSE3; cache L1 de dados de 16
                                                                           co
                               KB e cache de execu¸˜o de 150 KB; suporte a multiprocessamento sim´trico com
                                                    ca                                             e
                               at´ dois processadores por placa-m˜e; barramento externo de 667, 800 ou 1066
                                 e                                a
                               MHz; tecnologia Execute Disable; tecnologia EM64T; tecnologia HyperThread-
                               ing; tecnologia de Virtualiza¸˜o nos modelos 7xxx e 50xx; tecnologia Demand-
                                                            ca
                               Based Switching (DBS), exceto nos modelos 5060 e 5063; tecnologia Enhanced
                               SpeedStep; tecnologia de constru¸˜o 90 nanˆmetros ou 65 nanˆmetros.
                                                                ca         o                 o
http://www.candidatoreal.com




                               Xeon N´ cleo Duplo (51xx)
                                     u
                               Intel lan¸ou recentemente uma nova s´rie de processadores Xeon (51xx) baseada
                                        c                           e
                               na nova microarquitetura Core, a mesma usada pelos processadores Core 2 Duo.
                               Esta nova s´rie era conhecida anteriormente por seu nome-c´digo, Woodcrest.
                                           e                                              o

                                   Tenha em mente que os processadores Xeon de n´cleo duplo de outras s´ries
                                                                                 u                     e
                               (50xx e 7xxx) s˜o baseados na microarquitetura do Pentium 4 (Netburst) e por
                                              a
                               isso possuem a tecnologia HyperThreading, que n˜o est´ presente na microar-
                                                                               a     a
                               quitetura Core.



                                                                    73
http://www.candidatoreal.com




                                   Todos os processadores Xeon da s´rie 51xx possuem as seguintes carac-
                                                                       e
                               ter´
                                  ısticas: tecnologia de n´cleo duplo; tecnologia de 65 nm; soquete 771; in-
                                                          u
                               stru¸˜es SSE3; cache L1 dividido, sendo 32 KB para dados e 32 KB para in-
                                    co
                               stru¸˜es por n´cleo; 4 MB de cache L2 compartilhado entre os n´cleos; barra-
                                    co        u                                                u
                               mento externo de 1066 ou 1333 MHz; tecnologia EM64T; tecnologia de Virtual-
                               iza¸˜o; tecnologia Execute Disable; tecnologia Demand-Based Switching (DBS),
                                  ca
                               nos modelos 5160, 5150, 5148 e 5140; tecnologia Enhanced SpeedStep; tecnolo-
                               gia Dual Independent Bus (DIB), onde cada n´cleo tem seu pr´prio barramento
                                                                             u             o
                               externo em vez de ter apenas um barramento compartilhado entre nos n´cleos
                                                                                                      u
                               para a comunica¸˜o com os outros dispositivos do micro.
                                                ca


                               5.1.5    Itanium
                               O projeto de processadores de 64 bits da Intel j´ se arrasta por muitos anos.
                                                                               a
                               O primeiro processador lan¸ado usando essa tecnologia foi o Itanium e recente-
                                                         c
                               mente a Intel lan¸ou mais um processador IA-64, o Itanium 2.
                                                c

                                  Esses dois processadores possuem caracter´
                                                                           ısticas de hardware bastante ”pe-
                               sadas”. O Itanium tem os dois caches de mem´ria (L1 e L2) dentro do pr´prio
                                                                            o                          o
                               processador, como ocorre com os demais processadores atualmente, e ainda um
                               cache extra (L3) dentro de seu cartucho, podendo esse circuito ter 2 MB ou
                               4 MB, dependendo da vers˜o do processador. Ele consegue acessar at´ 16 EB
                                                         a                                          e
                               (Exabytes, 1 EB = 26 0) de mem´ria RAM e usa um barramento externo de
                                                                o
                               64 bits rodando a 266 MHz, atingindo uma taxa de transferˆncia de 2,1 GB/s.
                                                                                          e
                               Esse processador usa uma mistura de soquete com cartucho.

                                  J´ o Itanium 2 tem uma mem´ria cache L1 de 32 KB, uma mem´ria cache
                                   a                          o                                o
                               L2 de 256 KB e uma mem´ria cache L3 de 1,5 MB ou de 3 MB, dependendo
                                                       o
                               do modelo. Os mais atuais possuem uma cache L3 de 6, 8, 12, 18 ou 24 MB
                               dependendo do modelo. Seu barramento externo ´ de 128 bits, rodando a 400
                                                                             e
                               ou 533 MHz. Possuem suporte a tecnologia Dual-Core, EM64T, VT.

                                   Esses dois processadores s˜o voltados exclusivamente para o mercado de
                                                             a
                               servidores de alto desempenho. Isso deixa a AMD em grande vantagem, j´ que
                                                                                                     a
                               haver´ processadores de 64 bits da AMD voltados para usu´rios comuns (como
                                     a                                                  a
                               o Clawhammer ).

                                   Outra vantagem da arquitetura de 64 bits da AMD sobre a arquitetura de 64
http://www.candidatoreal.com




                               bits da Intel ´ que a arquitetura da Intel n˜o roda nativamente c´digo de 32 bits
                                             e                             a                    o
                               usado pelos programas atuais, ao contr´rio do que ocorre nos processadores da
                                                                        a
                               AMD, que rodam diretamente esse tipo de c´digo. Isso significa que para rodar
                                                                             o
                               sistemas operacionais e aplicativos de 32 bits, os processadores IA-64 (Itanium,
                               Itanium 2 e futuros processadores) precisam traduzir as instru¸˜es de 32 bits
                                                                                                 co
                               em instru¸˜es equivalentes de 64 bits. Isso faz com que haja uma demora na
                                         co
                               execu¸˜o da instru¸˜o, pois h´ tempo perdido com essa convers˜o. O resultado
                                     ca            ca         a                                 a
                               disso ´ ´bvio: em alguns casos pode ocorrer de sistemas operacionais e progra-
                                     eo
                               mas de 32 bits rodarem mais lentamente nos processadores IA-64 da Intel do
                               que em processadores de 32 bits como o Pentium 4 e o Athlon XP.



                                                                      74
http://www.candidatoreal.com




                                   Mas, como esses processadores da Intel foram destinados ao mercado de
                               servidores, isso n˜o tem muita importˆncia, j´ que m´quinas usando esses pro-
                                                 a                   a      a        a
                               cessadores com certeza rodar˜o programas e sistemas escritos diretamente com
                                                            a
                               instru¸˜es de 64 bits. Mas como essa ´ uma nova tecnologia, n˜o s´ ´ de-
                                     co                                 e                          a o e
                               morado reescrever programas antigos como escrever novos programas para essa
                                                   ´
                               nova plataforma. E claro que esse mesmo problema existe nos processadores
                               da AMD, isto ´, possivelmente demorar´ algum tempo at´ existirem sistemas
                                               e                       a                  e
                               operacionais e programas escritos usando c´digo de 64 bits desses processadores.
                                                                          o
                               Mas, por outro lado, eles podem rodar diretamente c´digo de 32 bits, facilitando
                                                                                   o
                               a entrada desses processadores no mercado.



                               5.2     AMD
                               5.2.1    Sempron
                               O Sempron ´ o processador da AMD voltado para o mercado low-end, ou seja,
                                            e
                               ele ´ destinado a usu´rios que n˜o precisam de grande poder computacional e
                                   e                a          a
                               que est˜o mais preocupados com pre¸o do que com desempenho. O concorrente
                                      a                            c
                               do Sempron ´ Celeron D da Intel.
                                             e

                                  O processador Sempron est´ dispon´
                                                             a        ıvel em trˆs vers˜es de soquete: 462
                                                                                e      o
                               (Socket A), 754 e AM2 (940 pinos). Os processadores Sempron soquete 462 s˜o
                                                                                                        a
                               vers˜es mais simples do Athlon XP, enquanto que os processadores Sempron
                                   o
                               soquete 754 e soquete AM2 s˜o vers˜es mais simples do Athlon 64.
                                                          a       o

                                   Como o Sempron soquete 462 usa uma arquitetura interna completamente
                               diferente dos processadores Sempron soquete 754 e soquete AM2, uma com-
                               para¸˜o direta entre esses dois processadores n˜o ´ poss´
                                    ca                                        a e      ıvel.

                                  A nomenclatura ”PR”(Performance Rating) usada pelo Sempron s´ serve
                                                                                                  o
                               para a compara¸˜o entre modelos de Sempron usando o mesmo tipo de soquete.
                                              ca
                               N˜o ´ poss´
                                a e      ıvel comparar a nomenclatura PR do Sempron com a do Athlon
                               XP ou com a do Athlon 64. Por exemplo, um Sempron 3000+ n˜o ´ necessaria-
                                                                                         a e
                               mente mais r´pido do que um Athlon XP 2800+ ou do que um Athlon 64 2800+.
                                           a


                               Soquete 462
http://www.candidatoreal.com




                               Os processadores Sempron soquete 462 s˜o, na realidade, processadores Athlon
                                                                     a
                               XP com barramento externo de 333 MHz (166 MHz transferindo dois dados por
                               pulso de clock) e 256 KB de mem´ria cache L2 (ou 512 KB no caso do modelo
                                                              o
                               3000+).

                                   Essa categoria de Sempron possui as demais caracter´
                                                                                      ısticas do Athlon XP,
                               tais como: 64 KB de cache L1 de instru¸˜es e 64 KB de cache L1 de dados;
                                                                       co
                               256 KB ou 512 KB de cache de mem´ria L2; suporte `s instru¸˜es MMX,
                                                                     o                  a        co
                               3DNow!, SSE e SSE2 (mas n˜o `s instru¸˜es SSE3); processo de fabrica¸˜o de
                                                           a a        co                              ca
                               130 nanˆmetro.
                                       o



                                                                     75
http://www.candidatoreal.com




                               Soquete 754
                               Os processadores Sempron soquete 754 s˜o na realidade processadores Athlon
                                                                      a
                               64 com menos mem´ria cache e sem as extens˜es de 64 bits, sendo que modelos
                                                  o                       o
                               lan¸ados mais recentemente passaram a contar com as extens˜es de 64 bits.
                                  c                                                       o

                                   As principais caracter´
                                                         ısticas dos processadores Sempron soquete 754 s˜o:a
                               64 KB de cache de L1 de instru¸˜es e 64 KB de cache L1 de dados; 128
                                                                  co
                               KB ou 256 KB de cache de mem´ria L2; barramento HyperTransport (bar-
                                                                   o
                               ramento externo para acesso ao chipset Northbridge. Esta tecnologia permite
                               o processador comunicar-se com a mem´ria RAM e com os demais circuitos
                                                                         o
                               do micro ao mesmo tempo, pois existe outro barramento externo para acesso
                               a
                               ` mem´ria RAM. Antigamente, era apenas um barramento de acesso externo)
                                      o
                               trabalhando a 800 MHz (este clock pode tamb´m ser referenciado como ”1.600
                                                                              e
                               MHz”) para os modelos atuais; configura¸˜o de mem´ria single channel; suporte
                                                                        ca         o
                               a instru¸˜es SSE3 nos modelos que tˆm as extens˜es de 64 bits habilitadas; pro-
                                       co                           e           o
                               cesso de fabrica¸˜o de 90 nanˆmetros.
                                               ca            o


                               Soquete AM2
                               Ao contr´rio dos processadores Sempron soquete 754, que trabalham apenas
                                        a
                               na configura¸˜o de um unico canal (single channel), os processadores Sempron
                                           ca        ´
                               soquete AM2 podem utilizar a configura¸˜o de dois canais (dual channel), do-
                                                                      ca
                               brando a taxa de transferˆncia no acesso ` mem´ria desde que vocˆ use dois
                                                        e               a     o                  e
                               ou quatro m´dulos de mem´ria em seu micro. Lembre-se que os processadores
                                           o              o
                               Sempron soquete 754 aceitam somente mem´rias DDR, enquanto que os pro-
                                                                          o
                               cessadores Sempron soquete AM2 aceitam somente mem´rias DDR2.
                                                                                      o

                                   As principais caracter´ısticas t´cnicas do Sempron AM2 s˜o as seguintes: 64
                                                                   e                       a
                               KB de cache de L1 de instru¸oes e 64 KB de cache L1 de dados; 128 KB ou 256
                                                              c˜
                               KB de cache de mem´ria L2; barramento HyperTransport trabalhando a 800
                                                      o
                               MHz (3.2 GB/s). Este clock pode tamb´m ser referenciado como ”1.600 MHz”;
                                                                         e
                               o controlador de mem´ria integrado suporta mem´rias DDR2-400, DDR2-533
                                                      o                            o
                               e DDR2-667 na configura¸˜o de dois canais (dual channel), o que significa que
                                                          ca
                               o processador acessa a mem´ria a 128 bits, se dois ou quatro m´dulos forem
                                                              o                                  o
                               usados; conjunto de instru¸˜es SSE3; extens˜es de 64 bits habilitadas; processo
                                                           co                 o
                               de fabrica¸˜o de 90 nanˆmetros.
                                         ca             o

                                                                                               ´
http://www.candidatoreal.com




                                   Existem os modelos de Semprom chamados Mobile Semprom. E concorrente
                               direto do Pentium M. O Mobile Semprom possui as seguintes caracter´    ısticas:
                               64 KB de cache de L1 de instru¸˜es e 64 KB de cache L1 de dados; 128KB ou
                                                              co
                               256KB de cache L2 incorporado ao processador; Northbridge integrado; prote¸˜o
                                                                                                          ca
                               avan¸ada contra v´
                                    c            ırus; suporte a instru¸˜es SSE2; processo de fabrica¸˜o 90
                                                                       co                             ca
                               nanˆmetros.
                                   o

                               5.2.2    Athlon 64
                               Os processadores mais novos da AMD encontrados no mercado atualmente s˜o a
                               baseados na arquitetura do Athlon 64, tamb´m conhecida como x86-64 ou ”ham-
                                                                         e



                                                                     76
http://www.candidatoreal.com




                               mer”. Os modelos de Athlon 64 s˜o o Athlon 64, Athlon 64 FX e o Athlon 64 X2.
                                                              a

                                   Esses trˆs processadores mais o Sempron s˜o voltados para o mercado de
                                           e                                a
                               desktops. O Athlon 64 ´ voltado para o mercado mid-range (usu´rios entusi-
                                                       e                                       a
                               astas ou aqueles que necessitam de um poder computacional maior do que o
                               proporcionado pelo Sempron) e o Athlon 64 FX e o Athlon 64 X2 s˜o voltados
                                                                                                a
                               para o mercado high-end (alto desempenho). Existem trˆs outros processadores
                                                                                    e
                               baseados na arquitetura do Athlon 64: Athlon 64 Mobile e Turion 64, que s˜o
                                                                                                         a
                               voltados para o mercado de notebooks, e o Opteron, que ´ voltado para o mer-
                                                                                      e
                               cado de servidores.

                                   A principal caracter´
                                                       ıstica da arquitetura do Athlon 64 ´ a presen¸a do con-
                                                                                          e         c
                               trolador de mem´ria dentro do pr´prio processador e n˜o no chipset, como
                                                 o                  o                    a
                               acontece com outros processadores. Por causa desta arquitetura a comunica¸˜oca
                               entre o processador e os m´dulos de mem´ria ´ feita atrav´s de um barramento
                                                           o              o e            e
                               dedicado, enquanto que a comunica¸˜o entre o processador e o chipset ´ feita
                                                                    ca                                  e
                               atrav´s de um barramento independente, chamado HyperTransport.
                                    e

                                  Processadores da AMD baseados na arquitetura do Athlon 64 podem ser
                               encontrados com os seguintes padr˜es de pinagem:
                                                                o

                                Soquete 754
                                    Usado pelas primeiras vers˜es de Athlon 64, alguns modelos de Sempron
                                                               o
                                    e Turion 64. Seu controlador de mem´ria usa somente um canal (single
                                                                          o
                                    channel), o que significa que o processador acessa a mem´ria a 64 bits;
                                                                                           o
                                Soquete 939
                                    Usado pelos processadores Athlon 64, Athlon 64 FX, Athlon 64 X2 e o
                                    Opteron. Seu controlador de mem´ria usa dois canais (dual channel),
                                                                      o
                                    o que significa que o processador acessa ` mem´ria a 128 bits, se dois
                                                                            a     o
                                    m´dulos de mem´ria forem usados.
                                      o             o
                                Soquete 940
                                    Usado pelos primeiros processadores Athon 64 FX e pelo Opteron. Seu
                                    controlador de mem´ria usa dois canais (dual channel), o que significa que
                                                        o
                                    o processador acessa a mem´ria a 128 bits, se dois m´dulos forem usados
                                                               o                        o
                                                             o               o                 ´
                                    (ou um n´mero par de m´dulos de mem´ria for usado). E necess´ria a
                                              u                                                        a
                                    utiliza¸˜o de mem´rias do tipo ECC;
                                           ca         o
                                Soquete AM2
http://www.candidatoreal.com




                                    Usado pelos novos processadores Athlon 64, Athlon 64 FX e Athlon 64
                                    X2. Nesses processadores o controlador de mem´ria integrado suporta
                                                                                       o
                                    mem´rias DDR2-533, DDR2-667 e DDR2-800 na configura¸˜o de dois
                                        o                                                        ca
                                    canais (dual channel), o que significa que o processador acessa a mem´ria
                                                                                                        o
                                    a 128 bits, se dois m´dulos forem usados. Lembre-se que o controlador
                                                         o
                                    de mem´ria dos processadores soquete 754, 939 e 940 suportam apenas
                                            o
                                    mem´rias DDR;
                                        o

                                Soquete F
                                    Este soquete de 1.207 pinos criado para os novos modelos do Opteron
                                    tamb´m ´ usado pelos processadores Athlon 64 FX utilizados na plataforma
                                         e e


                                                                     77
http://www.candidatoreal.com




                                    Quad FX da AMD (Athlon 64 FX modelos 7x). Os processadores que uti-
                                    lizam este soquete trabalham no modo SMP (multiprocessamento sim´trico),
                                                                                                      e
                                    podendo trabalhar com mais de um processador em paralelo. Assim
                                    como os processadores soquete AM2, nesses processadores o controlador
                                    de mem´ria integrado tamb´m suporta mem´rias DDR2-533, DDR2-667
                                            o                    e             o
                                    e DDR2-800 na configura¸˜o de dois canais (dual channel), o que significa
                                                              ca
                                    que o processador acessa a mem´ria a 128 bits, se um n´mero par de
                                                                     o                       u
                                    m´dulos de mem´ria for usado.
                                       o             o

                                  O controlador de mem´ria integrado nos novos processadores Athlon 64 so-
                                                        o
                               quete AM2 e Athlon 64 FX soquete F suporta mem´rias DDR2-533, DDR2-667 e
                                                                                o
                               DDR2-800. O problema, no entanto, ´ como o clock do barramento de mem´ria
                                                                   e                                    o
                               ´ obtido. Em vez de ser gerado atrav´s do clock base do processador (clock
                               e                                     e
                               HTT, que ´ de 200 MHz), ´ usada uma divis˜o do clock interno do processador.
                                         e               e                a
                               O valor desta divis˜o ´ metade do valor do multiplicador do processador.
                                                  a e

                                   Por exemplo, um processador AMD64 com um multiplicador de clock 12x
                               ter´ um divisor do barramento de mem´ria de 6. Este processador trabalhar´
                                  a                                 o                                   a
                               a 2,4 GHz (200 MHz x 12) e sua mem´ria funcionar´ a 400 MHz (DDR2-800,
                                                                   o            a
                               2.400 MHz / 6). Tenha em mente que as mem´rias DDR e DDR2 s˜o rotuladas
                                                                         o                   a
                               com o dobro dos seus clocks reais.

                                   O problema ´ quando o multiplicador de clock do processador ´ um n´mero
                                               e                                               e     u
                               ´
                               ımpar. Para um processador AM2 com um multiplicador de clock 13x teori-
                               camente o divisor do seu barramento de mem´ria seria de 6,5. Como o barra-
                                                                            o
                               mento de mem´ria do AMD64 n˜o trabalha com divisores ”quebrados”este valor
                                             o               a
                               ´ arredondado para o pr´ximo n´mero inteiro, sete neste caso. Enquanto este
                               e                       o       u
                               processador funcionar´ a 2,6 GHz (200 MHz x 13) seu barramento de mem´ria
                                                    a                                                  o
                               funcionar´ a 371 MHz (742 MHz DDR) e n˜o a 400 MHz (800 MHz DDR),
                                        a                                  a
                               fazendo com que o processador n˜o alcance a largura de banda m´xima que as
                                                               a                               a
                               mem´rias DDR2 podem fornecer.
                                    o

                                  Outras caracter´ısticas encontradas nos processadores baseados na arquite-
                               tura do Athlon 64 s˜o as seguintes: O processador n˜o ´ vendido com base
                                                    a                                 a e
                               em seu clock de opera¸˜o, mas sim atrav´s de um indicativo de desempenho
                                                       ca                e
                               chamado ”performance rating”(PR); podem acessar at´ 1 TB de mem´ria RAM
                                                                                    e              o
                               (barramento de endere¸os de 40 bits, 240 = 1 TB); suporte `s instru¸˜es MMX,
                                                      c                                  a        co
                               3Dnow!, SSE e SSE2 (SSE3 apenas nos modelos mais novos); tecnologia EVP
                               (Enhanced V´ ırus Protection, tamb´m conhecida como ”NX Bit Disable”); tec-
                                                                  e
http://www.candidatoreal.com




                               nologia Cool’n’Quiet (tecnologia que permite reduzir o barulho, o calor e o
                               consumo de energia).

                               Athlon 64
                               O Athlon 64 pode ser encontrado em vers˜es para o soquete 754, soquete 939 e
                                                                      o
                               o novo soquete AM2. E pode ser encontrado com diferentes vers˜es de n´cleo
                                                                                              o       u
                               (90 nanˆmetros ou 130 nanˆmetros). O concorrente direto do Atlhon 64 ´ o
                                      o                  o                                              e
                               Pentium 4.

                                  As principais caracter´
                                                        ısticas t´cnicas do Athlon 64 s˜o as seguintes: 64 KB
                                                                 e                     a


                                                                    78
http://www.candidatoreal.com




                               de cache de L1 de instru¸˜es e 64 KB de cache L1 de dados; 512 KB ou 1 MB
                                                       co
                               de cache de mem´ria L2; barramento HyperTransport trabalhando a 800 MHz
                                                o
                               (3,2 GB/s) ou a 1 GHz (4 GB/s). Esses clocks podem tamb´m ser referenciados
                                                                                       e
                               como ”1.600 MHz”ou ”2.000 MHz”, respectivamente; configura¸˜o de mem´ria
                                                                                           ca          o
                               DDR dual channel nos modelos soquete 939 e AM2 (precisa de dois m´dulos de
                                                                                                  o
                               m´dulos de mem´ria para usar este recurso); conjunto de instru¸˜es SSE3 em
                                 o              o                                            co
                               alguns modelos.


                               Athlon 64 X2
                               O Athlon 64 X2 ´ um Athlon 64 com tecnologia de n´cleo duplo, ou seja, ele
                                                e                                  u
                               possui dois processadores dentro de um s´. Todos os processadores Athlon 64
                                                                       o
                               X2 s˜o encontrados para soquete 939 e AM2. O principal corrente do Athlon
                                   a
                               64 X2 ´ o Pentium D Dual Core.
                                      e

                                  As principais caracter´
                                                        ısticas t´cnicas do Athlon 64 X2 s˜o as seguintes: 64
                                                                 e                        a
                               KB de cache de L1 de instru¸oes e 64 KB de cache L1 de dados por n´cleo; 512
                                                            c˜                                     u
                               KB ou 1 MB de cache de mem´ria L2 por n´cleo; barramento HyperTransport
                                                               o            u
                               trabalhando a 1 GHz (4 GB/s). Esse clock pode tamb´m ser referenciado como
                                                                                     e
                               ”2.000 MHz”; configura¸˜o de mem´ria DDR dual channel em todos os modelos;
                                                      ca           o
                               conjunto de instru¸˜es SSE3 em alguns modelos.
                                                 co


                               Athlon 64 FX
                               Originalmente a diferen¸a entre o Athlon 64 e o Athlon 64 FX era a quanti-
                                                      c
                               dade de mem´ria cache L2 (512 KB no Athlon 64 vs. 1 MB no Athlon 64 FX)
                                            o
                               e maior flexibilidade para overclock, j´ que ele vinha com o multiplicador de
                                                                     a
                               clock destravado.

                                   As principais caracter´
                                                         ısticas t´cnicas do Athlon 64 FX s˜o as seguintes: 64
                                                                  e                        a
                               KB de cache de L1 de instru¸˜es e 64 KB de cache L1 de dados por n´cleo;
                                                              co                                        u
                               1 MB de cache de L2; barramento HyperTransport trabalhando a 800 MHz
                               (3,2 GB/s) ou 1 GHz (4 GB/s); configura¸˜o de mem´ria DDR dual channel
                                                                            ca         o
                               em todos os modelos; conjunto de instru¸˜es SSE3 em alguns modelos; n´cleo
                                                                          co                             u
                               duplo nos modelos terminados em um n´mero par. O Athlon 64 FX-60 foi o
                                                                          u
                               primeiro Athlon 64 FX de n´cleo duplo lan¸ado. Esta tecnologia faz com que
                                                             u               c
                               o processador possua dois processadores completos em seu interior; O Athlon
http://www.candidatoreal.com




                               64 FX-62 ´ baseado no novo soquete AM2 e, portanto, o seu controlador de
                                          e
                               mem´ria suporta as mem´rias DDR2.
                                    o                    o


                               5.2.3    Turion 64
                               Lan¸ado para ser o principal concorrente do Pentium M da Intel, o Turion 64 da
                                  c
                               AMD ´ um processador de baixo consumo voltado para o mercado de notebooks.
                                    e

                                  O Turion 64 ´ baseado na arquitetura do Athlon 64 e a principal diferen¸a
                                               e                                                         c
                               entre o Turion 64 e o Athlon 64 Mobile ´ o consumo de energia. Uma outra
                                                                      e


                                                                     79
http://www.candidatoreal.com




                               diferen¸a entre eles ´ a quantidade de mem´ria cache L2, que ´ de 1 MB nos
                                      c             e                    o                  e
                               processadores Athlon 64 Mobile, enquanto que os processadores Turion 64 po-
                               dem ter mem´ria cache L2 de 512 KB ou 1 MB, dependendo do modelo.
                                            o

                                  Tanto o Turion 64 quanto o Athlon 64 Mobile possuem a tecnologia Pow-
                               erNow! da AMD, que ´ similar a tecnologia Cool’n’Quiet usado pelos proces-
                                                     e
                               sadores desktop. Esta tecnologia altera o clock e a tens˜o de alimenta¸˜o do
                                                                                       a             ca
                               processador de acordo com a carga de trabalho que esteja sendo realizada, de
                               modo a economizar bateria.

                                   As principais caracter´
                                                         ısticas do Turion 64 s˜o as seguintes: o processador
                                                                                 a
                               n˜o ´ vendido com base em seu clock de opera¸˜o, mas atrav´s de um ”n´mero
                                 a e                                           ca           e          u
                               de modelo”; 64 KB de cache de L1 de instru¸˜es e 64 KB de cache L1 de dados;
                                                                            co
                               512 KB ou 1 MB de cache de mem´ria L2; barramento HyperTransport trabal-
                                                                   o
                               hando a 800 MHz (3,2 GB/s); configura¸˜o de mem´ria DDR single channel;
                                                                         ca          o
                               soquete 754; podem acessar at´ 1 TB (terabyte) de mem´ria RAM; suporte
                                                                 e                        o
                               a
                               `s instru¸˜es MMX, 3Dnow!, SSE e SSE2 e SSE3; tecnologia PowerNow!; tec-
                                        co
                               nologia EVP (Enhanced Virus Protection), tamb´m conhecida como ”NX Bit
                                                                                   e
                               Disable”; tecnologia de 90 nanˆmetros.
                                                               o

                                  Os processadores Turion 64 est˜o dispon´
                                                                a        ıveis em duas s´ries: ML, que tem
                                                                                        e
                               consumo m´ximo (TDP, Thermal Design Power) de 35 W, e MT, que tem con-
                                         a
                               sumo m´ximo de 25 W.
                                      a


                               Turion 64 X2
                               O Turion 64 X2 ´ um Turion 64 com tecnologia de dois n´cleos e com suporte as
                                              e                                      u
                               mem´rias DDR2 na configura¸˜o de dois canais (dual channel), o que significa
                                   o                        ca
                               que o processador pode acessar a mem´ria a 128 bits.
                                                                   o

                                   O Turion 64 X2 ´ o primeiro processador para notebook da AMD com tec-
                                                   e
                               nologia de dois n´cleos e a usar o novo padr˜o de pinagem soquete S1, que uti-
                                                u                          a
                               liza 638 pinos em vez dos 754 pinos usados no soquete do Turion 64. Portanto,
                               fisicamente um Turion 64 X2 ´ menor do que um Turion 64 por ter menos pinos.
                                                             e

                                  Enquanto que o concorrente do Turion 64 ´ o Pentium M, os concorrentes
                                                                            e
                               do Turion 64 X2 s˜o os processadores da Intel Core Duo e Core 2 Duo (nome-
                                                a
                               c´digo Merom).
                                o
http://www.candidatoreal.com




                                   As principais caracter´
                                                         ısticas do Turion 64 X2 s˜o as seguintes: 64 KB de
                                                                                  a
                               cache de L1 de instru¸˜es e 64 KB de cache L1 de dados por n´cleo; 256 ou
                                                      co                                        u
                               512 KB de cache de mem´ria L2 por n´cleo; barramento HyperTransport tra-
                                                         o             u
                               balhando a 800 MHz (3,2 GB/s); configura¸˜o de mem´ria DDR2 dual channel;
                                                                          ca         o
                               soquete S1; podem acessar at´ 1 TB (terabyte) de mem´ria RAM; suporte `s
                                                              e                        o                    a
                               instru¸˜es MMX, 3Dnow!, SSE e SSE2 e SSE3; tecnologia PowerNow!; tecnolo-
                                     co
                               gia de Virtualiza¸˜o; tencnologia EVP (Enhanced V´
                                                ca                                ırus Protection); tecnologia
                               de 90 nanˆmetros.
                                         o




                                                                     80
http://www.candidatoreal.com




                               5.2.4    Opteron
                               O Opteron ´ o processador da AMD voltado para o mercado de servidores de
                                            e
                               rede. Ele ´ baseado na arquitetura do Athlon 64. Os principais concorrentes
                                          e
                               s˜o o Intel Xeon e Intel Itanium.
                                a

                                  Existem duas diferen¸as principais entre o Opteron e os outros processadores
                                                      c
                               baseados na arquitetura do Athlon 64. Primeiro, v´rios modelos de Opteron
                                                                                   a
                               permitem o multiprocessamento sim´trico (SMP), ou seja, permitem trabalhar
                                                                   e
                               com mais de um processador na placa-m˜e, enquanto que os outros proces-
                                                                          a
                               sadores n˜o.
                                        a

                                   Os processadores Opteron s˜o identificados atrav´s de um ”numero de mod-
                                                             a                    e
                               elo”e o primeiro d´
                                                 ıgito deste n´mero indica qual ´ o grau de processamento
                                                              u                  e
                               sim´trico que o processador aceita: os modelos de Opteron come¸ando com
                                   e                                                            c
                               ”1”n˜o permitem multiprocessamento sim´trico, enquanto que os modelos come¸ando
                                     a                                  e                                c
                               com ”2”permitem multiprocessamento sim´trico com at´ 2 processadores e os
                                                                          e           e
                               modelos come¸ando com ”8”permitem multiprocessamento sim´trico com at´ 8
                                             c                                              e          e
                               processadores.

                                  Processadores Opteron com suporte a mem´rias DDR usam um n´mero
                                                                            o                     u
                               de modelo de trˆs d´
                                              e ıgitos, enquanto que processadores Opteron com suporte a
                               mem´rias DDR2 usam um n´mero de modelo de quatro d´
                                   o                      u                          ıgitos.

                                  A segunda diferen¸a principal ´ no n´mero de barramentos HyperTransport
                                                   c            e      u
                               suportados. Todos os processadores baseados na arquitetura do Athlon 64 e
                               os processadores Opteron iniciados com ”1”tˆm apenas um barramento Hy-
                                                                             e
                               perTransport. Processadores Opteron iniciados com ”2”tˆm dois barramentos
                                                                                       e
                               HyperTransport (ou trˆs, no caso dos processadores Opteron de quatro d´
                                                    e                                                ıgitos),
                               enquanto que processadores Opteron iniciados com ”8”tˆm trˆs barramentos
                                                                                       e     e
                               HyperTransport.

                                  Os processadores Opteron podem ser encontrados para v´rios tipos de so-
                                                                                       a
                               quete:

                                Soquete 939
                                    Existem alguns modelos de Opteron da s´rie 1 para este soquete. Eles
                                                                            e
                                    n˜o passam de modelos de Athlon 64 ou de Athlon 64 X2 (se tiver dois
                                     a
                                    n´cleos) com outro nome. Estes modelos trabalham com mem´rias DDR
                                     u                                                        o
http://www.candidatoreal.com




                                    comuns;

                                Soquete 940
                                    Estes modelos necessitam mem´rias DDR ”registradas”(isto ´, com buffer),
                                                                 o                           e
                                    que ´ um tipo ”especial”de mem´ria para servidores;
                                        e                          o

                                Soquete AM2
                                    Existem alguns modelos de Opteron da s´rie 1 para este soquete. Eles
                                                                               e
                                    n˜o passam de modelos de Athlon 64 X2 com outro nome (por´m com a
                                     a                                                              e
                                    tecnologia de virtualiza¸ao, n˜o presente no Athlon 64 X2). Estes modelos
                                                            c˜    a
                                    trabalham com mem´rias DDR2 comuns;
                                                          o



                                                                     81
http://www.candidatoreal.com




                                Soquete F
                                    Estes modelos trabalham com mem´rias DDR2 ”registradas”(isto ´, com
                                                                       o                         e
                                    buffer), que ´ um tipo ”especial”de mem´ria para servidores.
                                                e                         o

                                  Processadores Opteron que trabalham com mem´rias DDR2 tamb´m s˜o
                                                                             o              e   a
                               chamados de ”Opteron de Segunda Gera¸˜o”.
                                                                    ca

                                   Em todos os modelos de Opteron o controlador de mem´ria usa dois canais
                                                                                       o
                               (dual channel), ou seja, o processador acessa a mem´ria a 128 bits, se dois
                                                                                   o
                               m´dulos forem usados (ou se um n´mero par de m´dulos de mem´ria forem
                                 o                                u              o             o
                               usados).

                                   As principais caracter´ısticas t´cnicas do Opteron s˜o as seguintes: suporte
                                                                   e                   a
                               a multiprocessamento Sim´trico; 64 KB de cache de L1 de instru¸˜es e 64 KB
                                                           e                                      co
                               de cache L1 de dados; 1 MB de cache de mem´ria L2 por n´cleo; barramento
                                                                                o            u
                               HyperTransport trabalhando a 800 MHz (3,2 GB/s) ou 1 GHz (4 GB/s); con-
                               figura¸˜o de mem´ria em dois canais (vocˆ precisa instalar dois ou um n´mero
                                     ca          o                         e                              u
                               par de m´dulos de mem´ria para usar este recurso); podem acessar at´ 1 TB
                                         o               o                                               e
                               (terabyte) de mem´ria RAM; suporte `s instru¸˜es MMX, 3Dnow!, SSE e SSE2
                                                  o                     a      co
                               (SSE3 apenas nos modelos mais novos); tencnologia EVP (Enhanced V´      ırus Pro-
                               tection); tecnologia de virtualiza¸˜o AMD-V nos modelos de quatro d´
                                                                  ca                                  ıgitos.

                                 Os seguintes modelos de Opteron s˜o encontrados: Opteron Modelos 1xx
                                                                  a
                               (DDR) (soquete 940); Opteron Modelos 2xx (DDR) (soquete 940); Opteron
                               Modelos 8xx (DDR) (soquete 940); Opteron Modelos 1xxx (DDR2) (soquete
                               AM2); Opteron Modelos 2xxx (DDR2) (soquete F); Opteron Modelos 8xxx
                               (DDR2) (soquete F).
http://www.candidatoreal.com




                                                                      82
http://www.candidatoreal.com




                                      Parte II

                               L´gica de Programa¸˜o
                                o                ca
http://www.candidatoreal.com




                                         83
http://www.candidatoreal.com




                               Cap´
                                  ıtulo 6

                               Orienta¸˜o a Objetos
                                      ca

                               6.1     Introdu¸˜o
                                              ca
                               A an´lise e o projeto orientados a objetos tˆm como meta identificar o melhor
                                    a                                      e
                               conjunto de objetos para descrever um sistema de software. O funcionamento
                               deste sistema se d´ por meio do relacionamento e troca de mensagens entres os
                                                 a
                               objetos.
                                  Na programa¸˜o orientada a objetos, implementa-se um conjunto de classes
                                                ca
                               que definem os objetos presentes no sistema de software. Cada classe determina
                               o comportamento (definido nos m´todos) e os estados poss´
                                                                 e                       ıveis (atributos) de
                               seus objetos, assim como o relacionamento com outros objetos.
                                  As linguagens de programa¸˜o que d˜o suporte a orienta¸˜o a objetos s˜o:
                                                              ca       a                   ca             a
                               Smaltalk, Perl, Python, Ruby, PHP, ColdFusion, C++, Object Pascal, Java,
                               JavaScript, ActionScript, Delphi e C#.


                               6.2     Conceitos fundamentais
                                 1. Objetos
                                    Os objetos do mundo real compartilham duas caracter´ ısticas: possuem um
                                    estado e tem um comportamento. Por exemplo, cachorro tem um estado
                                    (nome, cor, ra¸a) e um comportamento (latindo, comendo, lambendo).
                                                    c
                                    Analogamente, objetos de software s˜o modelados de acordo com os ob-
                                                                        a
                                    jetos do mundo real, ou seja, possuem estado e comportamento (objeto ´ e
                                    uma abstra¸˜o do mundo real). Um objeto de software armazena seu es-
                                                ca
http://www.candidatoreal.com




                                    tado em vari´veis e implementa seu comportamento com m´todos. Estas
                                                 a                                              e
                                    vari´veis e m´todos s˜o formalmente chamados de vari´veis de instˆncia
                                        a         e      a                                  a           a
                                    e m´todos de instˆncia a fim de distingu´
                                        e             a                      ı-los de vari´veis e m´todos de
                                                                                          a         e
                                    classe.
                                     As vari´veis de um objeto fazem parte do seu n´cleo (centro). Os m´todos
                                            a                                      u                    e
                                     envolvem e escondem o n´cleo do objeto de outros componentes da aplica¸˜o,
                                                             u                                               ca
                                     1. Empacotar as vari´veis de um objeto sobre prote¸˜o de seus m´todos ´
                                                         a                              ca            e       e
                                     chamado de encapsulamento. O encapsulamento ´ utilizado para esconder
                                                                                     e
                                     detalhes de implementa¸˜o pouco importante. Este ´ um dos princ´
                                                             ca                           e               ıpios
                                     fundamentais da programa¸˜o orientada a objetos.
                                                                ca



                                                                     84
http://www.candidatoreal.com




                                                  Figura 6.1: Representa¸˜o de um objeto
                                                                        ca

                                    `
                                    As vezes, por raz˜es de eficiˆncia ou implementa¸˜o, um objeto deseja
                                                       o         e                    ca
                                    expor algumas de suas vari´veis ou esconder alguns de seus m´todos. Esta
                                                              a                                 e
                                    capacidade de controlar quais componentes podem acessar seus m´todos
                                                                                                      e
                                    e suas vari´veis ´ chamada de Controle de Acesso.
                                               a     e
                                    Cada objeto tem sua identidade que significa que dois objetos s˜o dis-
                                                                                                        a
                                    tintos mesmo que eles apresentem exatamente as mesmas caracter´      ısticas
                                    (atributos iguais). Esta identifica¸˜o de objeto deve ser unica, uniforme e
                                                                      ca                     ´
                                    independente do conte´do do objeto.
                                                           u
                                    A estrutura de dados de um objeto ´ representada em termos de atributos
                                                                      e
                                    (tamb´m chamados de campos (fields)), ou seja, os dados ou informa¸˜es
                                          e                                                            co
                                    do objeto.
                                    A 1 mostra um exemplo da representa¸˜o de objeto do mundo real para o
                                                                         ca
                                    objeto de software. Os atributos Raio, x e y s˜o as vari´veis de instˆncia.
                                                                                  a         a            a
                                    Em Java, para declarar uma vari´vel de classe basta acrescentar a palavra
                                                                     a
                                    static. O mesmo vale para o m´todo.
                                                                   e
http://www.candidatoreal.com




                               Figura 6.2: Representa¸˜o do objeto do mundo real para o objeto de software
                                                     ca

                                 2. M´todos
                                       e
                                    ´
                                    E uma rotina que ´ executada por um objeto ao receber uma mensagem.
                                                       e
                                    Os m´todos determinam o comportamento dos objetos de uma classe e
                                         e
                                    s˜o an´logos `s fun¸˜es ou procedimentos da programa¸˜o estruturada. O
                                     a    a      a     co                               ca
                                    envio de mensagens (chamado de m´todos) pode alterar o estado de um
                                                                       e
                                    objeto.
                                 3. Atributos
                                    Os atributos s˜o os elementos que definem a estrutura de uma classe. Os
                                                  a


                                                                     85
http://www.candidatoreal.com




                                 atributos tamb´m s˜o conhecidos como vari´veis de classe, e podem ser
                                                e    a                       a
                                 divididos em dois tipos b´sicos: atributos de instˆncia e de classe. Os
                                                            a                      a
                                 valores dos atributos de instˆncia determinam o estado de cada objeto.
                                                              a
                                 Um atributo de classe possui um estado que ´ compartilhado por todos os
                                                                             e
                                 objetos de uma classe. Atributos de classe podem ser chamados tamb´m e
                                 de atributos est´ticos ou constantes.
                                                 a
                                 As mensagens enviadas a um objeto (chamada de m´todo) podem mudar
                                                                                    e
                                 o valor de um ou mais atributos, alterando o estado de um objeto.

                               4. Classes
                                  Uma classe ´ um modelo (prot´tipo) que defini as vari´veis (estado) e os
                                              e                   o                    a
                                  m´todos (comportamento) comuns a todos os objetos do mesmo tipo. Na
                                    e
                                  classe s˜o definidas as vari´veis e implementados os m´todos. Os objetos
                                          a                  a                         e
                                  s˜o criados a partir de suas classes.
                                   a
                                 As classes n˜o s˜o diretamente suportadas em todas as linguagens de ob-
                                              a a
                                 jetos, e n˜o s˜o necess´rias para que a linguagem seja orientada a objetos.
                                           a a          a
                                 Al´m dos m´todos e atributos de uma classe, outros poss´
                                    e      e                                            ıveis membros
                                 s˜o:
                                  a
                                 Construtor: define o comportamento no momento da cria¸˜o de um ob-
                                                                                         ca
                                 jeto de uma classe; Destrutor: define o comportamento no momento da
                                 destrui¸˜o do objeto de uma classe. Normalmente utilizado para liberar
                                        ca
                                 recurso (mem´ria) do sistema; Propriedade: define o acesso a um estado
                                              o
                                 do objeto; Evento: define um ponto em que o objeto pode chamar outros
                                 procedimentos de acordo com seu comportamento e estado interno;
                                 Obs.: Lembrar sempre que a classe define as caracter´  ısticas comuns e os
                                 objetos s˜o instˆncias dessa classe, com estado pr´pria.
                                          a      a                                 o
                               5. Mensagens
                                 Objetos se comunicam entre si por meio do envio de mensagens. Quando
                                 um objeto A deseja que o objeto B realize um dos seus m´todos (de B), o
                                                                                        e
                                 objeto A envia uma mensagem para o objeto B. Algumas vezes, o objeto
                                 que recebe a mensagem precisa de mais informa¸˜es para saber exata-
                                                                                  co
                                 mente o que fazer. Por exemplo, quando vocˆ quer trocar as marchas de
                                                                             e
                                 uma bicicleta, deve-se indicar qual a marcha desejada. Esta informa¸˜o
                                                                                                    ca
                                 acompanha a mensagem como um parˆmetro.
                                                                       a
                                 Assim, trˆs componentes fazem parte de uma mensagem:
                                          e
                                 o objeto para onde a mensagem ´ endere¸ada (bicicleta); o nome do
                                                                   e      c
http://www.candidatoreal.com




                                 m´todo a realizar (mudar marcha); parˆmetro(s) necess´rios para realizar
                                   e                                  a               a
                                 o m´todo (segunda marcha);
                                     e
                                 A mensagem, tamb´m, pode ser direcionada diretamente a uma classe por
                                                   e
                                 meio da invoca¸˜o de um m´todo dinˆmico.
                                               ca         e         a

                               6. Heran¸a
                                       c
                                 A heran¸a ´ um mecanismo que permite criar novas classes a partir de
                                          c e
                                 classes j´ existentes, aproveitando-se das caracter´
                                          a                                          ısticas existentes na classe
                                 a ser extendida. Com a heran¸a ´ poss´
                                                                  c e       ıvel criar classes derivadas (sub-
                                 classes) a partir de classes bases (superclasses).


                                                                    86
http://www.candidatoreal.com




                                 As subclasses herdam todas as caracter´ısticas de suas superclasses, como
                                 suas vari´veis (estado) e seus m´todos (comportamento). Entretanto, as
                                          a                      e
                                 subclasses n˜o est˜o limitadas ao comportamento herdado de sua super-
                                             a      a
                                 classe. As subclasses podem adicionar vari´veis e m´todos a aqueles her-
                                                                            a        e
                                 dados.
                                 As subclasses, tamb´m, podem redefinir (override) m´todos herdados e
                                                    e                                  e
                                 oferecer implementa¸˜es especializadas para estes m´todos.
                                                    co                              e
                                 O conceito de heran¸a pode ser aplicado para mais de um n´
                                                      c                                            ıvel. A
                                 a
                                 ´rvore de heran¸a, ou hierarquia de classe, pode ser t˜o profunda quanto
                                                 c                                     a
                                 necess´rio. Os m´todos e vari´veis s˜o herdados por meio dos n´
                                        a          e          a      a                           ıveis. Em
                                 geral, quanto mais baixa na hierarquia for a posi¸˜o da classe, mais es-
                                                                                   ca
                                 pec´
                                    ıfico ´ o seu comportamento.
                                          e
                                 Como benef´
                                           ıcios do conceito de heran¸a, podemos citar:
                                                                     c
                                 Subclasses oferecem comportamentos especializados a partir de elementos
                                 b´sicos comuns, oferecidos pela superclasse. A utiliza¸˜o do conceito de
                                  a                                                    ca
                                 heran¸a ´ muito interessante, pois promove um grande reuso e reaproveita-
                                       c e
                                 mento de c´digo existente; Programadores podem definir classes abstratas
                                           o
                                 que determinam comportamentos gen´ricos. A superclasse abstrata define
                                                                       e
                                 e pode implementar parcialmente o comportamento de uma classe, mas a
                                 maioria das informa¸˜es da classe fica indefinida ou n˜o ´ implementada.
                                                     co                               a e
                                 A heran¸a m´ltipla ocorre quando uma classe pode estender caracter´
                                         c   u                                                     ısticas
                                 de v´rias outras classes ao mesmo tempo, ou seja, quando a subclasse
                                     a
                                 possui mais de uma superclasse. Algumas linguagens evitam utilizar este
                                 mecanismo, pois pode levar uma codifica¸˜o confusa o que dificulta a
                                                                          ca
                                 manuten¸˜o do c´digo. A linguagem Java n˜o suporta heran¸a m´ltipla,
                                          ca     o                          a                c    u
                                 apenas heran¸a simples. J´ a linguagem C++ oferece suporte ` heran¸a
                                              c            a                                   a        c
                                 m´ltipla.
                                   u
                                 Uma linguagem ao utilizar heran¸a m´ltipla est´ sujeita a dois proble-
                                                                  c   u          a
                                 mas: colis˜o de nomes (nomes idˆnticos nas classes superiores) e heran¸a
                                           a                    e                                      c
                                 repetida (classe herda de uma classe superior que herda de uma classe
                                 comum);
                               7. Polimorfismo
                                 Segundo a terminologia de orienta¸˜o a objetos, polimorfismo significa que
                                                                  ca
                                 uma mesma mensagem enviada a diferentes objetos resulta em um com-
                                 portamento que ´ dependente da natureza do objeto que est´ recebendo a
                                                 e                                         a
                                 mensagem. Ou seja, duas ou mais classes derivadas de uma mesma super-
http://www.candidatoreal.com




                                 classe podem invocar m´todos que tˆm a mesma assinatura (nome, lista
                                                         e           e
                                 de parˆmetros e retorno), mas comportamentos distintos, especializado
                                        a
                                 para cada classe derivada, usando para tanto uma referˆncia a um objeto
                                                                                        e
                                 do tipo superclasse.
                                 A decis˜o sobre qual m´todo deve ser selecionado, de acordo com o tipo da
                                         a              e
                                 classe derivada, ´ tomada em tempo de execu¸˜o por meio do mecanismo
                                                  e                            ca
                                 de liga¸˜o tardia. No caso do polimorfismo, ´ necess´rio que os m´todos
                                        ca                                    e       a             e
                                 tenham exatamente a mesma identifica¸˜o, sendo utilizado o mecanismo
                                                                         ca
                                 de redefini¸˜o de m´todos. A seguir um exemplo de polimorfismo.
                                            ca        e




                                                                 87
http://www.candidatoreal.com




                                 public abstract class OperacaoMatematica
                                 {
                                    public abstract double calcular(double x, double y);
                                 }

                                 public class Soma extends OperacaoMatematica
                                 {
                                    public double calcular(double x, double y)
                                  {
                                       return x+y;
                                    }
                                 }

                                 public class Subtracao extends OperacaoMatematica
                                 {
                                    public double calcular(double x, double y)
                                  {
                                       return x-y;
                                    }
                                 }

                                 public class Contas
                                 {
                                    public static void mostrarCalculo(OperacaoMatematica operacao, double x, double y)
                                    {
                                            system.out.println("O resultado ´: " + operacao.calcular(x, y);
                                                                            e
                                    }

                                         public static void main( String args[] )
                                     {
                                             //Primeiro calculamos uma soma
                                             Contas.mostrarCalculo(new Soma(), 5, 5); //Imprime o resultado ´: 10
                                                                                                             e
                                             Contas.mostrarCalculo(new Subtracao(), 5, 5); //Imprime o resultado ´: 0
                                                                                                                 e
                                     }
                                 }

                                 Note que, embora o m´todo calcular tenha sido chamado duas vezes no in-
                                                       e
                                 terior de mostrarCalculo, o comportamento apresentado variou de acordo
                                 com a classe ao qual ele representava no momento.
http://www.candidatoreal.com




                                 Os benef´ıcios do polimorfismo s˜o: a clareza e manuten¸˜o do c´digo, a
                                                                a                      ca      o
                                 divis˜o da complexidade e aplica¸˜es flex´
                                      a                          co      ıvies.
                                 Algumas linguagens promovem o polimorfismo principalmente por meio
                                 do uso de classes abstratas e interfaces, como ´ o caso da linguagem Java.
                                                                                e
                               8. Sobrecarga
                                 A sobrecarga ´ um tipo de polimorfismo que permite a existˆncia de v´rios
                                               e                                             e        a
                                 m´todos de mesmo nome, por´m com assinaturas levemente diferentes, ou
                                   e                           e
                                 seja, variando no n´mero e tipo de argumentos e o valor de retorno. Ficar´
                                                    u                                                     a
                                 a cargo de o compilador escolher de acordo com as listas de argumento os
                                 procedimentos ou m´todos a serem executados. Por exemplo:
                                                      e


                                                                 88
http://www.candidatoreal.com




                                   public class Soma
                                   {

                                         public int Soma (int x, int y)
                                        {
                                            return x+y;
                                        }

                                        public String Soma      (String x, String y)
                                        {
                                           return x+y;
                                        }

                                        public double Soma (double x, double y)
                                        {
                                           return x+y;
                                        }
                                   }

                                9. Interfaces
                                   Uma interface ´ uma cole¸˜o de defini¸˜es de m´todos abstratos (sem im-
                                                 e         ca          co        e
                                                  ´
                                   plementa¸˜o). E utilizada para os objetos interagirem entre si. A classe
                                            ca
                                   que implementa a interface deve implementar todos os m´todos definidos
                                                                                          e
                                   na interface. Uma interface, tamb´m, pode incluir declara¸˜es de con-
                                                                     e                        co
                                   stantes.
                                   Apesar de uma classe abstrata implementar m´todos abstratos, n˜o se
                                                                                    e                   a
                                   pode confundir interface com classe abstrata. As classes abstratas n˜o  a
                                   podem ser instanciadas, e estas s´ s˜o utilizadas como superclasses. Por
                                                                     o a
                                   exemplo, comida no mundo real. N˜o existe uma instˆncia (objeto) do
                                                                        a                  a
                                   tipo comida. O que existe s˜o instˆncias de cenouras, ma¸˜s, bananas, etc.
                                                              a      a                      ca
                                   Comida representa o conceito abstrato e n˜o ´ capaz de criar uma instˆncia
                                                                             a e                        a
                                   pr´pria. As classes abstratas podem possuir m´todos implementados.
                                     o                                            e
                                   Em Java, para definir uma interface utiliza-se a palavra interface. Emb-
                                   ora, uma classe n˜o possa conter mais de uma superclasse, a classe pode
                                                     a
                                   implementar mais de uma interface. Por este motivo, muitas das vezes as
                                   interfaces s˜o apresentadas como uma alternativa para heran¸a m´ltipla
                                               a                                                c    u
                                   de classes.
http://www.candidatoreal.com




                               10. Pacotes
                                   Para tornar as classes mais f´ceis de serem encontradas e utilizadas, para
                                                                   a
                                   evitar conflitos de nomes e para controlar o acesso, pode-se agrupar classes
                                   relacionadas em pacotes (packages). Os pacotes organizam as classes e as
                                   interfaces relacionadas. Cada pacote criado corresponde a um diret´rio,
                                                                                                         o
                                   ou seja, as classes e as interfaces de um mesmo pacote devem estar em um
                                   mesmo diret´rio.
                                                 o
                                   A utiliza¸˜o de pacotes proporciona as seguintes vantagens:
                                            ca
                                   Fica mais f´cil para outros programadores determinar quais classes e in-
                                               a
                                   terfaces est˜o relacionadas; Os nomes das classes de um pacote n˜o ir˜o
                                               a                                                   a     a

                                                                    89
http://www.candidatoreal.com




                                     conflitar com nomes e classes de outros pacotes; Pode-se permitir que
                                     classes dentro de um mesmo pacote tenham acesso irrestrito entre si, e
                                     restringir o acesso por parte de classes definidas fora do pacote.
                                     Em Java, para criar um pacote coloca-se a palavra chave package no in´
                                                                                                          ıcio
                                     do arquivo onde a classe ou interface ´ definida.
                                                                           e
                                     Obs.: Apenas os membros (classe, vari´veis e m´todos) p´blicos s˜o acess´
                                                                          a        e        u        a       ıveis
                                     fora do pacote onde foram definidos.
                                     Obs.: Para uma linguagem ser considerada verdadeiramente orientada a
                                     objetos, a linguagem de programa¸˜o deve oferecer, no m´
                                                                       ca                   ınimo, as carac-
                                     ter´
                                        ısticas de: encapsulamento, heran¸a e polimorfismo.
                                                                          c


                               6.3     Princ´ıpios de programa¸˜o orientada a ob-
                                                              ca
                                       jetos
                               Basicamente, os princ´ıpios de programa¸˜o orientada a objetos s˜o:
                                                                      ca                       a
                                  Classes, objetos e instˆncias; Campos, m´todos e propriedades; Sobrecarga;
                                                         a                e
                               Heran¸a e classes hier´rquicas; Polimorfismo; Interfaces.
                                     c               a


                               6.4     Tratamento de exce¸˜es
                                                         co
                               O termo exce¸˜o ´ usado para designar um evento que ocorre durante a execu¸˜o
                                              ca e                                                              ca
                               de um programa que desvia o fluxo normal de instru¸˜es. Em outras palavras,
                                                                                          co
                               uma exce¸˜o ´ uma condi¸˜o provocada por uma situa¸˜o excepcional que requer
                                         ca e              ca                             ca
                               uma a¸˜o espec´
                                      ca        ıfica imediata. Muitos tipos de erros podem causar exce¸˜es:    co
                               problemas que variam desde erros s´rios de hardware, tal como uma falha no
                                                                         e
                               disco r´
                                      ıgido, a erros simples de programa¸˜o, tal como tentar acessar um ´
                                                                             ca                              ındice
                               inexistente de um vetor, divis˜o por zero, um objeto n˜o inicializado, etc.
                                                                 a                          a
                                   Erros causam exce¸˜es, mas podem existir exce¸˜es que n˜o s˜o erros. Por
                                                        co                              co         a a
                               exemplo, numa fun¸˜o que lˆ dados de um arquivo, a chegada ao final do arquivo
                                                   ca          e
                               ´ uma condi¸˜o excepcional que pode ser considerada como exce¸˜o.
                               e             ca                                                       ca
                                   Linguagens como ADA, C++, JAVA e EIFFEL possuem mecanismos pr´prios        o
                               de tratamento de exce¸˜es que facilitam a vida dos programadores tornando
                                                         co
                               ainda o c´digo mais leg´ uma vez que separam o c´digo principal do c´digo
                                         o                ıvel                             o                  o
                               de tratamento do erro.
                                   Quando uma exce¸˜o ocorre, ela necessita ser tratada. A unidade ou bloco
                                                       ca
                               de c´digo que manipula a exce¸˜o ´ denominada tratador de exce¸˜o e a a¸˜o
                                    o                              ca e                                 ca      ca
http://www.candidatoreal.com




                               de indicar a ocorrˆncia de exce¸˜o e transferir o controle para o tratador de
                                                   e                ca
                               exce¸˜o ´ denominada sinaliza¸˜o da exce¸˜o.
                                    ca e                          ca          ca
                                   Tratadores de exce¸˜o se comportam como procedimentos chamados implici-
                                                        ca
                               tamente pela ocorrˆncia de uma exce¸˜o. Como tratadores de exce¸˜o n˜o s˜o
                                                    e                     ca                             ca a a
                               chamados diretamente, eles n˜o possuem nome. Em sua defini¸˜o costumam
                                                                 a                                    ca
                               conter vari´veis locais e bloco de c´digo de tratamento. J´ as exce¸˜es devem
                                           a                           o                         a       co
                               possuir nome bem definido para que possam ser identificadas.
                                   Caso o tratador que capturou a exce¸˜o n˜o tenha conhecimento suficiente
                                                                             ca a
                               para tratar a exce¸˜o ele pode lan¸ar a exce¸˜o para um n´ superior (propaga¸˜o
                                                  ca                 c         ca             ıvel                ca
                               da exce¸˜o). Assim pode-se gerar uma cadeia de propaga¸˜o at´ que um trata-
                                       ca                                                       ca  e
                               dor capture a exce¸˜o ou at´ atingir-se o n´
                                                     ca          e                ıvel mais alto da hierarquia dos


                                                                       90
http://www.candidatoreal.com




                               tratadores onde normalmente um tratador padr˜o ser´ executado na sa´ do
                                                                                   a    a                ıda
                               programa.
                                   Outra quest˜o importante ´ o ponto de retorno ap´s a execu¸˜o do bloco
                                               a                 e                        o        ca
                               de c´digo do tratador. Isto depender´ do modelo de continua¸˜o adotado pelo
                                    o                                  a                       ca
                               mecanismo de tratamento de exce¸˜o. Em geral, adota-se um dos seguintes
                                                                     ca
                               modelos de continua¸˜o:
                                                     ca
                                   Termina¸˜o: assume que o erro ´ cr´
                                           ca                          e ıtico e que n˜o existem condi¸˜es de
                                                                                        a               co
                               retornar ao ponto onde a exce¸˜o foi gerada, retornando o controle para o n´
                                                               ca                                            ıvel
                               superior. Nesta alternativa a unidade onde ocorreu a exce¸˜o e todas as unidades
                                                                                           ca
                               na pilha de chamada de subprogramas at´ onde o tratador de exce¸˜o foi execu-
                                                                           e                       ca
                               tado s˜o encerradas, continuando-se a execu¸˜o do programa na unidade onde
                                      a                                        ca
                               o tratador foi encontrado, ap´s a regi˜o de tratamento; Retomada: assume-se
                                                               o        a
                               que o erro pode ser corrigido e a execu¸˜o pode retornar para o bloco onde
                                                                           ca
                               ocorreu a exce¸˜o. Portanto, o retorno ´ feito para o bloco gerador do erro.
                                              ca                            e
                               Embora, em princ´  ıpio, essa solu¸˜o pare¸a ser a mais apropriada, a experiˆncia
                                                                  ca      c                                e
                               tem mostrado que essa alternativa raramente ´ efetiva.
                                                                                 e
                                   Normalmente, as linguagens tˆm adotado o modelo de termina¸˜o. Em Java,
                                                                   e                              ca
                               a exce¸˜o ´ um tipo especial de objeto que ´ criado quando algo sai de errado
                                      ca e                                    e
                               em um programa. Ap´s criar uma exce¸˜o, o ambiente de execu¸˜o envia este
                                                       o                  ca                      ca
                                                                                                      ca ´
                               objeto ao seu programa, numa a¸˜o denominada levantar uma exce¸˜o. E re-
                                                                   ca
                               sponsabilidade do programa capturar esta exce¸˜o. Para capturar uma exce¸˜o
                                                                                  ca                         ca
                               utilizam-se as cl´usulas try (blocos de c´digos protegidos) e catch (tratadores
                                                a                          o
                               de exce¸˜es). Para passar para frente a exce¸˜o, utiliza-se a palavra trhows. As
                                       co                                     ca
                               exce¸˜es em Java s˜o instˆncias da classe Exception (superclasse) ou de suas
                                    co              a      a
                               herdeiras.
http://www.candidatoreal.com




                                                                      91
http://www.candidatoreal.com




                                   Parte III

                               Metodologia de
                               Desenvolvimento
http://www.candidatoreal.com




                                       92
http://www.candidatoreal.com




                               Cap´
                                  ıtulo 7

                               Ciclo de Vida

                               Um modelo de ciclo de vida ou modelo de processo pode ser visto como uma
                               representa¸˜o abstrata de um esqueleto de processo, incluindo tipicamente algu-
                                          ca
                               mas atividades principais, a ordem de precedˆncia entre elas e, opcionalmente,
                                                                             e
                               artefatos requeridos e produzidos. De maneira geral, um modelo de processo de-
                               screve uma filosofia de organiza¸˜o de atividades, estruturando as atividades do
                                                               ca
                               processo em fases e definindo como essas fases est˜o relacionadas. Entretanto,
                                                                                  a
                               ele n˜o descreve um curso de a¸˜es preciso, recursos, procedimentos e restri¸˜es.
                                    a                         co                                           co
                               Ou seja, ele ´ um importante ponto de partida para definir como o projeto deve
                                             e
                               ser conduzido, mas a sua ado¸˜o n˜o ´ o suficiente para guiar e controlar um
                                                              ca a e
                               projeto de software na pr´tica.
                                                          a
                                   Ainda que os processos tenham de ser definidos caso a caso, de maneira
                               geral, o ciclo de vida de um software envolve, pelo menos, as seguintes fases:
                               Planejamento O objetivo do planejamento de projeto ´ fornecer uma estru-
                                                                                      e
                                   tura que possibilite ao gerente fazer estimativas razo´veis de recursos,
                                                                                          a
                                   custos e prazos. Uma vez estabelecido o escopo de software, com os req-
                                   uisitos esbo¸ados, uma proposta de desenvolvimento deve ser elaborada,
                                                c
                                   isto ´, um plano de projeto deve ser elaborado configurando o processo
                                        e
                                                                                    `
                                   a ser utilizado no desenvolvimento de software. A medida que o projeto
                                   progride, o planejamento deve ser detalhado e atualizado regularmente.
                                   Pelo menos ao final de cada uma das fases do desenvolvimento (an´lise a
                                   e especifica¸˜o de requisitos, projeto, implementa¸˜o e testes), o planeja-
                                               ca                                   ca
                                   mento como um todo deve ser revisto e o planejamento da etapa seguinte
                                   deve ser detalhado. O planejamento e o acompanhamento do progresso
http://www.candidatoreal.com




                                   fazem parte do processo de gerˆncia de projeto.
                                                                  e

                               An´lise e Especifica¸˜o de Requisitos Nesta fase, o processo de levanta-
                                 a                  ca
                                   mento de requisitos ´ intensificado. O escopo deve ser refinado e os req-
                                                        e
                                   uisitos mais bem definidos. Para entender a natureza do software a ser
                                   constru´ıdo, o engenheiro de software tem de compreender o dom´  ınio do
                                   problema, bem como a funcionalidade e o comportamento esperados. Uma
                                   vez capturados os requisitos do sistema a ser desenvolvido, estes devem
                                   ser modelados, avaliados e documentados. Uma parte vital desta fase ´  e
                                   a constru¸˜o de um modelo descrevendo o que o software tem de fazer (e
                                             ca
                                   n˜o como fazˆ-lo).
                                     a           e



                                                                      93
http://www.candidatoreal.com




                               Projeto Esta fase ´ respons´vel por incorporar requisitos tecnol´gicos aos req-
                                                  e         a                                  o
                                   uisitos essenciais do sistema, modelados na fase anterior e, portanto, re-
                                   quer que a plataforma de implementa¸˜o seja conhecida. Basicamente,
                                                                           ca
                                   envolve duas grandes etapas: projeto da arquitetura do sistema e projeto
                                   detalhado. O objetivo da primeira etapa ´ definir a arquitetura geral do
                                                                              e
                                   software, tendo por base o modelo constru´ na fase de an´lise de req-
                                                                                ıdo               a
                                   uisitos. Essa arquitetura deve descrever a estrutura de n´  ıvel mais alto
                                   da aplica¸˜o e identificar seus principais componentes. O prop´sito do
                                             ca                                                      o
                                   projeto detalhado ´ detalhar o projeto do software para cada componente
                                                       e
                                   identificado na etapa anterior. Os componentes de software devem ser su-
                                   cessivamente refinados em n´ ıveis maiores de detalhamento, at´ que possam
                                                                                                 e
                                   ser codificados e testados.

                               Implementa¸˜o O projeto deve ser traduzido para uma forma pass´
                                            ca                                                     ıvel de
                                   execu¸˜o pela m´quina. A fase de implementa¸˜o realiza esta tarefa, isto
                                         ca        a                             ca
                                   ´, cada unidade de software do projeto detalhado ´ implementada.
                                   e                                                e

                               Testes inclui diversos n´
                                                       ıveis de testes, a saber, teste de unidade, teste de in-
                                    tegra¸˜o e teste de sistema. Inicialmente, cada unidade de software im-
                                         ca
                                    plementada deve ser testada e os resultados documentados. A seguir, os
                                    diversos componentes devem ser integrados sucessivamente at´ se obter o
                                                                                                   e
                                    sistema. Finalmente, o sistema como um todo deve ser testado.
                               Entrega e Implanta¸˜o uma vez testado, o software deve ser colocado em
                                                    ca
                                   produ¸˜o. Para tal, contudo, ´ necess´rio treinar os usu´rios, configurar
                                          ca                      e       a                a
                                   o ambiente de produ¸˜o e, muitas vezes, converter bases de dados. O
                                                         ca
                                   prop´sito desta fase ´ estabelecer que o software satisfaz os requisitos
                                        o                e
                                   dos usu´rios. Isto ´ feito instalando o software e conduzindo testes de
                                            a          e
                                   aceita¸˜o. Quando o software tiver demonstrado prover as capacidades
                                          ca
                                   requeridas, ele pode ser aceito e a opera¸˜o iniciada.
                                                                            ca

                               Opera¸˜o nesta fase, o software ´ utilizado pelos usu´rios no ambiente de
                                    ca                         e                    a
                                   produ¸˜o.
                                        ca

                               Manuten¸˜o Indubitavelmente, o software sofrer´ mudan¸as ap´s ter sido en-
                                       ca                                      a      c      o
                                  tregue para o usu´rio. Altera¸˜es ocorrer˜o porque erros foram encon-
                                                    a            co          a
                                  trados, porque o software precisa ser adaptado para acomodar mudan¸asc
                                  em seu ambiente externo, ou porque o cliente necessita de funcionalidade
                                  adicional ou aumento de desempenho. Muitas vezes, dependendo do tipo
                                  e porte da manuten¸˜o necess´ria, essa fase pode requerer a defini¸˜o de
                                                      ca        a                                   ca
http://www.candidatoreal.com




                                  um novo processo, onde cada uma das fases precedentes ´ re-aplicada no
                                                                                          e
                                  contexto de um software existente ao inv´s de um novo.
                                                                           e

                               Os modelos de processo, de maneira geral, contemplam as fases An´lise e Especi-
                                                                                               a
                               fica¸˜o de Requisitos, Projeto, Implementa¸˜o, Testes e Entrega e Implanta¸˜o.
                                  ca                                      ca                               ca
                               A escolha de um modelo de processo ´ fortemente dependente das caracter´
                                                                   e                                    ısticas
                               do projeto. Assim, ´ importante conhecer alguns modelos de ciclo de vida e em
                                                  e
                               que situa¸˜es s˜o aplic´veis.
                                        co    a       a




                                                                     94
http://www.candidatoreal.com




                               7.1     Modelo seq¨ encial linear
                                                 u
                               Algumas vezes chamado de ciclo de vida cl´ssico ou modelo em cascata, o modelo
                                                                        a
                               seq¨encial linear requer uma abordagem sistem´tica seq¨encial para o desem-
                                  u                                            a       u
                               penho do software. Abrange as seguintes atividades:
                               Modelagem e engenharia do sistema. Estabelecimento de todos os requi-
                                  sitos do sistema, aloca¸˜o de algum desses requisitos para o software.
                                                         ca
                               An´lise de requisitos de software. O processo de defini¸˜o de requisitos ´
                                 a                                                     ca               e
                                   intensificado e focalizado especificamente no software. Os requisitos do
                                   sistema do spftware s˜o documentados e revistos com o cliente.
                                                         a
                               Projeto. Traduz os requisitos para uma representa¸˜o do software, que pode
                                                                                   ca
                                   ser avaliada quanto ` qualidade, antes que a codifica¸˜o tenha in´
                                                       a                                ca           ıcio. En-
                                   foca quatro atributos distintos: estrutura de dados, arquitetura do soft-
                                   ware, representa¸˜es da interface e detalhes procedimentais (algoritmicos).
                                                   co
                               Gera¸˜o de c´digo. O projeto ´ traduzido para linguagem de m´quina.
                                   ca      o                e                              a
                               Teste. S˜o conduzidos para descobrir erros e garantir que entradas definidas
                                       a
                                    produzir˜o resultados reais, que concordam com os resultados exigidos.
                                            a
                               Manuten¸˜o. O software ir´ inevitavelmente sofrer modifica¸˜es. A manuten¸˜o
                                      ca                a                               co             ca
                                  reaplica cada uma das fases precedentes a um programa existente.
                                  O modelo seq¨encial linear ´ o mais amplamente usado. Entre os problemas
                                              u              e
                               encontrados quando esse modelo ´ aplicado s˜o:
                                                                e         a
                                 1. Modifica¸˜es podem causar confus˜o ` medida que o projeto prossegue,
                                            co                       a a
                                    pois o modelo acomoda intera¸˜o apenas indiretamente.
                                                                ca
                                 2. Exige que o cliente estabele¸a todos os requisitos explicitamente.
                                                                c
                                 3. Uma vers˜o execut´vel do programa s´ ficar´ dispon´ quando o projeto
                                              a      a                 o     a       ıvel
                                    terminar.


                               7.2     Modelo em V
                               O modelo em V ´ uma varia¸˜o do modelo em cascata que procura enfatizar
                                                 e           ca
                               a estreita rela¸˜o entre as atividades de teste (teste de unidade, teste de in-
                                              ca
                               tegra¸˜o, teste de sistema e teste de aceita¸˜o) e as demais fases do processo,
                                    ca                                     ca
http://www.candidatoreal.com




                               como mostra a figura 7.1.
                                   O modelo em V sugere que os testes de unidade s˜o utilizados basicamente
                                                                                     a
                               para verificar a implementa¸ao e o projeto detalhado. Uma vez que os testes
                                                           c˜
                               de integra¸˜o est˜o focados na integra¸˜o das unidades que comp˜em o soft-
                                          ca     a                    ca                            o
                               ware, eles tamb´m s˜o usados para avaliar o projeto detalhado. Assim, testes
                                               e    a
                               de unidade e integra¸˜o devem garantir que todos os aspectos do projeto do
                                                     ca
                               sistema foram implementados corretamente no c´digo. Quando os testes de in-
                                                                                o
                               tegra¸˜o atingem o n´ do sistema como um todo (teste de sistema), o projeto
                                    ca               ıvel
                               da arquitetura passa a ser o foco. Neste momento, busca-se verificar se o sis-
                               tema atende aos requisitos definidos na especifica¸˜o. Finalmente, os testes de
                                                                                  ca
                               aceita¸˜o, conduzidos tipicamente pelos usu´rios e clientes, valida os requisitos,
                                     ca                                    a

                                                                      95
http://www.candidatoreal.com




                               confirmando que os requisitos corretos foram implementados no sistema (teste
                               de valida¸˜o). A conex˜o entre os lados direito e esquerdo do modelo em V
                                        ca            a
                               implica que, caso sejam encontrados problemas em uma atividade de teste, a
                               correspondente fase do lado esquerdo e suas fases subseq¨entes podem ter de
                                                                                        u
                               ser executadas novamente para corrigir ou melhorar esses problemas.




                                                          Figura 7.1: O modelo em V

                                   Os modelos seq¨enciais pressup˜em que o sistema ´ entregue completo, ap´s
                                                   u               o                 e                      o
                               a realiza¸˜o de todas as atividades do desenvolvimento. Entretanto, nos dias
                                        ca
                               de hoje, os clientes n˜o est˜o mais dispostos a esperar o tempo necess´rio para
                                                     a     a                                         a
                               tal, sobretudo, quando se trata de grandes sistemas. Dependendo do porte do
                               sistema, podem se passar anos at´ que o sistema fique pronto, sendo invi´vel
                                                                  e                                       a
                               esperar. Assim, outros modelos foram propostos visando a, dentre outros, re-
                               duzir o tempo de desenvolvimento. A entrega por partes, possibilitando ao
                               usu´rio dispor de algumas funcionalidades do sistema enquanto outras est˜o
                                   a                                                                        a
                               sendo ainda desenvolvidas, ´ um dos principais mecanismos utilizados por esses
                                                            e
                               modelos, como veremos a seguir.


                               7.3     Modelo de prototipagem
                               O paradigma de prototipagem come¸a com a defini¸˜o dos requisitos. Um projeto
                                                                    c              ca
                               r´pido ´ realizado e concentra-se na representa¸˜o daqueles aspectos que ficar˜o
                                a      e                                        ca                              a
                               vis´
                                  ıveis pelo cliente. O prot´tipo ´ criado e avaliado e ´ ajustado para satisfazer
                                                             o    e                     e
                               as necessidades do cliente.
http://www.candidatoreal.com




                                   Idealmente, o prot´tipo serve como um mecanismo para identifica¸˜o dos
                                                       o                                                  ca
                               requisitos do software. A prototipagem pode ser problem´tica, pois o cliente vˆ
                                                                                           a                      e
                               o que parece ser uma vers˜o execut´vel do software, ignorando que o prot´tipo
                                                           a         a                                       o
                               apenas consegue funcionar precariamente.


                               7.4     Modelo RAD
                               O desenvolvimento r´pido de aplica¸ao (rapid application development, RAD ´
                                                   a              c˜                                     e
                               um modelo incremental que enfatiza o ciclo de desenvolvimento extremamente
                               curto. Abrange as seguintes fases:


                                                                       96
http://www.candidatoreal.com




                               Modelagem do neg´cio. O fluxo de informa¸˜o entre as fun¸˜es do neg´cio
                                               o                      ca              co         o
                                  ´ modelado.
                                  e
                               Modelagem dos dados. O fluxo de informa¸˜o ´ refinado num conjunto de
                                                                     ca e
                                  objetos de dados.
                               Modelagem do processo. Os objetos de dados s˜o tranformados para con-
                                                                               a
                                  seguir o fluxo de informa¸˜o necess´rio para implementar uma fun¸˜o do
                                                           ca       a                            ca
                                  neg´cio. Descri¸˜es do processamento s˜o criadas.
                                     o           co                      a
                               Gera¸˜o da aplica¸˜o. O RAD considera o uso de t´cnicas de quarta gera¸˜o.
                                   ca             ca                           e                     ca
                                   O processo RAD trabalha para reusar componentes de programas exis-
                                   tentes ou criar componentes reus´veis.
                                                                   a
                               Teste e entrega. Os componentes novos devem ser testados e todas as inter-
                                    faces devem ser exaustivamente exercitadas.
                               As desvantagens do RAD s˜o:
                                                       a
                                 1. O RAD exige desenvolvedores e clientes compromissados com atividades
                                    continuamente r´pidas.
                                                   a
                                 2. Nem todos tipo de de aplica¸˜o s˜o apropriados para o RAD.
                                                               ca a
                                 3. Quando riscos t´cnicos s˜o elevados o RAD n˜o ´ adequado.
                                                   e        a                  a e


                               7.5     Modelos de processo de software evolucion´rios
                                                                                a
                               7.5.1    Modelo incremental
                               Este modelo ´ uma extens˜o do modelo espiral sendo por´m mais formal e
                                               e            a                                e
                               rigoroso. O desenvolvimento de um produto comercial de software ´ uma grande
                                                                                                    e
                               tarefa que pode ser estendida por v´rios meses, possivelmente um ano ou mais.
                                                                     a
                               Por isso, ´ mais pr´tico dividir o trabalho em partes menores ou itera¸˜es. Cada
                                         e         a                                                  co
                               itera¸˜o resultar´ num incremento. Itera¸˜es s˜o passos em fluxo de trabalho e
                                    ca           a                         co  a
                               incrementos s˜o crescimentos do produto.
                                               a
                                   O princ´ ıpio subjacente ao processo incremental e iterativo ´ que a equipe
                                                                                                 e
                               envolvida possa refinar e alargar paulatinamente a qualidade, detalhe e ˆmbito
                                                                                                         a
                               do sistema envolvido.
                                   Por exemplo, numa primeira itera¸˜o deve-se identificar a vis˜o global e de-
                                                                       ca                         a
                               terminar a viabilidade econˆmica do sistema, efetuar a maior parte da an´lise
                                                            o                                               a
http://www.candidatoreal.com




                               e um pouco de desenho e implementa¸˜o. Numa segunda gera¸˜o, deve-se con-
                                                                       ca                      ca
                               cluir a an´lise, fazer uma parte significativa do desenho e um pouco mais de
                                          a
                               implementa¸˜o. Numa terceira itera¸˜o, deve-se concluir o desenho, fazer-se
                                             ca                        ca
                               parte substancial da implementa¸˜o, testar e integrar um pouco, etc. Ou seja,
                                                                  ca
                               a principal consequˆncia da aproxima¸˜o iterativa ´ que os produtos finais de
                                                     e                  ca           e
                               todo o processo v˜o sendo amadurecidos e completados ao longo do tempo, mas
                                                  a
                               cada itera¸˜o produz sempre um conjunto de produtos finais.
                                          ca
                                   A cada itera¸˜o s˜o realizadas as seguintes tarefas:
                                                 ca a

                               An´lise. Refinamento de requisitos, refinamento do modelo conceitual.
                                 a
                               Projeto. Refinamento do projeto arquitetural, projeto de baixo n´
                                                                                              ıvel.

                                                                     97
http://www.candidatoreal.com




                               Implementa¸˜o. Codifica¸˜o e testes.
                                         ca          ca
                               Transi¸˜o para produto. Ddocumenta¸˜o, instala¸˜o, . . ..
                                     ca                          ca          ca

                               Vantagens do processo incremental e iterativo:
                                  • Possibilidade de avaliar mais cedo os riscos e pontos cr´
                                                                                            ıticos do projeto, e
                                    identificar medidas para os eliminar ou controlar.
                                  • Redu¸˜o dos riscos envolvendo custos a um unico incremento. Se a equipe
                                         ca                                     ´
                                    que desenvolve o software precisar repetir a itera¸˜o, a organiza¸˜o perde
                                                                                      ca             ca
                                    somente o esfor¸o mal direcionado de uma itera¸˜o, n˜o o valor de um
                                                     c                                 ca    a
                                    produto inteiro.
                                  • Defini¸˜o de uma arquitetura que melhor possa orientar todo o desenvolvi-
                                         ca
                                    mento.
                                  • Disponibiliza¸˜o natural de um conjunto de regras para melhor controlar
                                                  ca
                                    os inevit´veis pedidos de altera¸˜es futuras.
                                             a                      co
                                  • Permite que os v´rios intervenientes possam trabalhar mais efetivamente
                                                     a
                                    pela intera¸˜o e partilha de comunica¸˜o da´ resultante.
                                               ca                        ca    ı

                               7.5.2    Modelo espiral
                               O modelo original em espiral organiza o desenvolvimento como um processo it-
                               erativo em que v´rios conjuntos de fases se sucedem at´ se obter o sistema final.
                                                 a                                     e
                               Um ciclo se inicia com a determina¸˜o de objetivos, alternativas e restri¸˜es
                                                                     ca                                      co
                               (primeira tarefa) onde ocorre o comprometimento dos envolvidos e o estabeleci-
                               mento de uma estrat´gia para alcan¸ar os objetivos. Na segunda tarefa, an´lise
                                                     e              c                                        a
                               e avalia¸˜o de alternativas, identifica¸˜o e solu¸˜o de riscos, executa-se uma
                                        ca                             ca        ca
                               an´lise de risco. Prototipa¸˜o ´ uma boa ferramenta para tratar riscos. Se o
                                  a                         ca e
                               risco for considerado inaceit´vel, pode parar o projeto. Na terceira tarefa ocorre
                                                            a
                               o desenvolvimento do produto. Neste quadrante pode-se considerar o modelo
                               cascata. Na quarta tarefa o produto ´ avaliado e se prepara para iniciar um
                                                                        e
                               novo ciclo.
                                   Varia¸˜es do modelo espiral consideram entre trˆs e seis tarefas ou setores
                                         co                                          e
                               da espiral, que podem ser:
                                  • comunica¸˜o com o cliente;
                                            ca
                                  • planejamento;
http://www.candidatoreal.com




                                  • an´lise de risco;
                                      a
                                  • engenharia;
                                  • constru¸˜o e libera¸˜o;
                                           ca          ca
                                  • avalia¸˜o do cliente.
                                          ca
                                  O modelo espiral ´, atualmente a abordagem mais real´
                                                    e                                      ıstica para desen-
                               volvimento de software em grande escala, e usa uma abordagem que capacita
                               a empresa que presta o servi¸o, e o cliente a entender e reagir aos riscos em
                                                            c
                               cada etapa evolutiva. Este tipo de modelo exige consider´vel experiˆncia na
                                                                                         a           e
                               determina¸˜o de riscos e depende dessa experiˆncia para ter sucesso.
                                        ca                                  e

                                                                      98
http://www.candidatoreal.com




                               Vantagens deste modelo:
                                  • O modelo em espiral permite que ao longo de cada itera¸˜o se obtenham
                                                                                          ca
                                    vers˜es do sistema cada vez mais completas, recorrendo ` prototipagem
                                        o                                                  a
                                    para reduzir os riscos.
                                  • Este tipo de modelo permite a abordagem do refinamento seguido pelo
                                    modelo em cascata, mas que incorpora um enquadramento iterativo que
                                    reflete, de uma forma bastante real´
                                                                      ıstica, o processo de desenvolvimento.

                               Desvantagens:
                                  • Pode ser dif´ convencer grandes clientes (particularmente em situa¸˜es
                                                ıcil                                                  co
                                    de contrato) de que a abordagem evolutiva ´ control´vel.
                                                                              e        a
                                  • A abordagem deste tipo de modelo exige consider´vel experiˆncia na avalia¸˜o
                                                                                      a          e             ca
                                    dos riscos e baseia-se nessa experiˆncia para o sucesso. Se um grande risco
                                                                       e
                                    n˜o for descoberto, poder˜o ocorrer problemas.
                                     a                         a
                                  • Este tipo de modelo ´ relativamente novo e n˜o tem sido amplamente
                                                        e                       a
                                    usado.
                                    ´
                                  • E importante ter em conta que podem existir diferen¸as entre o prot´tipo
                                                                                       c               o
                                    e o sistema final. O prot´tipo pode n˜o cumprir os requisitos de desem-
                                                             o          a
                                    penho, pode ser incompleto, e pode refletir somente alguns aspectos do
                                    sistema a ser desenvolvido.
                                  • O modelo em espiral pode levar ao desenvolvimento em paralelo de m´ltiplas
                                                                                                       u
                                    partes do projeto, cada uma sendo abordada de modo diferenciado, por
                                    isso ´ necess´rio o uso de t´cnicas espec´
                                         e       a              e            ıficas para estimar e sincronizar
                                    cronogramas, bem como para determinar os indicadores de custo e pro-
                                    gresso mais adequados.

                               7.5.3    Modelo espiral ganha-ganha
                               As melhores noegocia¸˜es buscam um resultado ganha-ganha. Isto ´, o cliente
                                                      co                                          e
                               ganha obtendo um produto ou sistema que satisfaz ` maior parte das necessi-
                                                                                    a
                               dades do cliente, e o desenvolvedor ganha trabalhando com or¸amentos e prazos
                                                                                           c
                               de entrega real´
                                              ısticos e poss´
                                                            ıveis de serem cumpridos.
                                   O modelo espiral ganha-ganha define um conjunto de atividades de nego-
                               cia¸˜o no come¸o de cada passagem, em torno da espiral. Ao inv´s de uma unica
                                  ca          c                                               e        ´
                               atividade de comunica¸˜o com o cliente,as seguintes atividades s˜o definidas:
                                                       ca                                       a
http://www.candidatoreal.com




                                 1. Identifica¸˜o dos principais interessados do sistema ou do subsistema.
                                             ca
                                 2. Determina¸˜o das condi¸˜es de lucro do interessado.
                                             ca           co
                                 3. Negocia¸˜o das condi¸˜es de ganho do interessado para reconcili´-las no
                                           ca            co                                        a
                                    a
                                    ˆmbito das condi¸˜es ganha-ganha para todos os envolvidos.
                                                    co
                                   Al´m da ˆnfase na negocia¸˜o inicial, o modelo espiral ganha-ganha introduz
                                     e     e                ca
                               trˆs marcos de processo, chamados pontos de ancoragem, que ajudam a esta-
                                 e
                               belecer quendo um ciclo ´ completado em torno da espiral e fornecem marcos
                                                        e
                               de decis˜o antes do projeto de software presseguir. Esses pontos de ancoragem
                                       a
                               s˜o:
                                a

                                                                     99
http://www.candidatoreal.com




                               Objetivos de ciclo de vida (life cycle objectives, LCO). Define um con-
                                   junto de objetivos para cada atividade principal.

                               Arquitetura do ciclo de vida (life cycle architecture, LCA). Estabelece
                                   objetivos que precisam ser satisfeitos, ` medida que a arquitetura do sis-
                                                                           a
                                   tema, e do software, ´ definida.
                                                        e

                               Capacidade operacional inicial (initial operational capability, IOC). Representa
                                   um conjunto de objetivos associado com a prepara¸˜o do software para
                                                                                   ca
                                   instala¸˜o e distribui¸˜o.
                                          ca             ca

                               7.5.4    Modelo de desenvolvimento concorrente
                               O modelo de desenvolvimento concorrente ´ representado como uma s´rie de
                                                                            e                          e
                               grandes atividades t´cnicas, tarefas e seus estados associados. Ele define uma
                                                   e
                               s´rie de eventos que podem disparar transi¸˜es de um estado para outro, para
                                e                                          co
                                                                                      ´
                               cada uma das atividades da engenharia de software. E freq¨entemente usado
                                                                                            u
                               como um paradigma para o desenvolvimento de aplica¸˜es Cliente/Servidor.
                                                                                        co
                               Pode ser aplicado a todo tipo de desenvolvimento de software e fornece uma
                               vis˜o exata de como est´ o estado do projeto.
                                  a                   a


                               7.6     Desenvolvimento baseado em componentes
                               O desenvolvimento baseado em componentes incorpora caracter´       ısticas de tec-
                               nologias orientadas a objetos no modelo espiral. A atividade de engenharia
                               come¸a com a identifica¸˜o de classes candidatas. Se a classe existe, ela ser´ re-
                                     c                  ca                                                  a
                               utilizada. Se a classe n˜o existe, ela ser´ desenvolvida nos moldes do paradigma
                                                       a                 a
                               de orienta¸˜o a objetos.
                                          ca


                               7.7     Modelo de m´todos formais
                                                  e
                               O modelo de m´todos formais compreende um conjunto de atividades que de-
                                               e
                               terminam uma especifica¸˜o matem´tica para o software. Uma variante dessa
                                                        ca        a
                               abordagem ´ denominada engenharia de software cleanroon (Sala Simpa). Uti-
                                           e
                               lizando m´todos formais eliminam-se muitos problemas encontrados nos outros
                                         e
                               modelos, como p.ex., ambig¨idade, incompletitude e inconsistˆncia, que podem
                                                           u                               e
                               ser corrigidas mais facilmente de forma n˜o ad hoc, mas atrav´s de an´lise
                                                                        a                      e        a
                               matem´tica.
                                      a
http://www.candidatoreal.com




                               7.8     T´cnicas de quarta gera¸˜o
                                        e                     ca
                               As t´cnicas de quarta gera¸˜o concentram-se na capacidade de se especificar o
                                    e                    ca
                               software a uma m´quina em um n´ que esteja pr´ximo ` linguagem natural.
                                                a               ıvel            o     a
                                   Engloba um conjunto de ferramentas de software que possibilitam que:

                                  • O sistema seja especificado em uma linguagem de alto n´
                                                                                         ıvel.
                                  • O c´digo fonte seja gerado automaticamente a partir dessas especifica¸˜es.
                                       o                                                                co

                                  Atividades das t´cnicas de quarta gera¸˜o englobam:
                                                  e                     ca


                                                                      100
http://www.candidatoreal.com




                               Obten¸˜o dos Requisitos. O cliente descreve os requisitos os quais s˜o traduzi-
                                    ca                                                             a
                                   dos para um prot´tipo operacional. Os principais problemas s˜o:
                                                   o                                            a

                                       • O cliente pode estar inseguro quanto aos requisitos.
                                       • O cliente pode ser incapaz de especificar as informa¸˜es de um modo
                                                                                            co
                                         que uma ferramenta 4GL possa realizar.
                                       • As 4GLs atuais n˜o s˜o sofisticadas suficientemente para acomodar
                                                           a a
                                         a verdadeira linguagem natural.

                               Estrat´gia de projeto. : Para pequenas aplica¸˜es ´ poss´
                                     e                                          co e       ıvel mover-se do
                                    passo de obten¸˜o dos requisitos para o passo de implementa¸˜o usando
                                                   ca                                            ca
                                    uma Linguagem de 4G. Para grandes projetos ´ necess´rio desenvolver
                                                                                    e       a
                                    uma estrat´gia de projeto. De outro modo ocorrer˜o os mesmos problemas
                                              e                                     a
                                    encontrados quando se usa abordagem convencional (baixa qualidade).

                               Implementa¸˜o usando 4GL. Os resultados desejados s˜o representados de
                                          ca                                            a
                                   modo que haja gera¸˜o autom´tica de c´digo. Deve existir uma estrutura
                                                     ca         a        o
                                   de dados com informa¸oes relevantes e que seja acess´ pela 4GL .
                                                        c˜                             ıvel

                               Teste. O desenvolvedor deve efetuar testes e desenvolver uma documenta¸˜o
                                                                                                       ca
                                    significativa. O software desenvolvido deve ser constru´ de maneira que
                                                                                          ıdo
                                    a manuten¸˜o possa ser efetuada prontamente.
                                               ca
http://www.candidatoreal.com




                                                                    101
http://www.candidatoreal.com




                               Cap´
                                  ıtulo 8

                               An´lise Comparativa de
                                 a
                               Processos de
                               Desenvolvimento

                               Um processo de desenvolvimento de software pode ser visto como um guia para
                               o desenvolvimento e deve estabelecer: as atividades a serem realizadas durante
                               o desenvolvimento de software, sua estrutura e organiza¸˜o (decomposi¸˜o e
                                                                                            ca             ca
                               precedˆncia de atividades), incluindo a defini¸˜o de um modelo de ciclo de vida;
                                      e                                        ca
                               os artefatos requeridos e produzidos por cada uma das atividades do processo;
                               os procedimentos (m´todos, t´cnicas e normas) a serem adotados na realiza¸˜o
                                                     e         e                                             ca
                               das atividades; os recursos necess´rios para a realiza¸˜o das atividades, dentre
                                                                   a                    ca
                               eles recursos humanos, recursos de hardware e recursos de software, incluindo
                               as ferramentas a serem utilizadas para apoiar a aplica¸˜o dos procedimentos na
                                                                                         ca
                               realiza¸˜o das atividades; e roteiros para a elabora¸˜o dos principais documentos
                                      ca                                            ca
                               (artefatos) gerados no desenvolvimento. Entre as principais metodologias em
                               uso no mercado de software atualmente est˜o RUP e XP.
                                                                             a
                                   De maneira geral, o ciclo de vida de um software envolve, pelo menos, as
                               atividades de planejamento, levantamento de requisitos, an´lise, projeto, imple-
                                                                                             a
                               menta¸˜o, testes, implanta¸˜o, opera¸˜o e manuten¸˜o.
                                      ca                   ca         ca               ca
                                   Uma vez que o software ´ sempre parte de um sistema (ou neg´cio) maior,
                                                             e                                        o
                               o trabalho come¸a pelo estabelecimento dos requisitos para todos os elementos
                                                c
                               do sistema e, na seq¨ˆncia, procede-se a aloca¸˜o para software de algum sub-
                                                    ue                           ca
                               conjunto destes requisitos. Esta etapa ´ a Engenharia de Sistemas e antecede a
                                                                        e
http://www.candidatoreal.com




                               todas as demais relacionadas.



                               8.1     RUP - Rational Unified Process
                               O Processo Unificado proposto pela Rational (Rational Unified Process – RUP)
                               foi criado para apoiar o desenvolvimento orientado a objetos, fornecendo uma
                               forma sistem´tica para se obter reais vantagens no uso da Linguagem de Mod-
                                            a
                               elagem Unificada (Unified Modeling Language – UML). De fato, ele n˜o ´ ex-
                                                                                                     a e
                               atamente um processo: ´ uma infraestrutura gen´rica de processo que pode ser
                                                       e                       e


                                                                     102
http://www.candidatoreal.com




                               especializada para uma ampla classe de sistemas de software, para diferentes
                               a
                               ´reas de aplica¸˜o, tipos de organiza¸˜o, n´
                                               ca                    ca   ıveis de competˆncia e tamanhos de
                                                                                          e
                               projetos.
                                   O RUP est´ fundamentado em trˆs princ´
                                               a                      e      ıpios b´sicos: orienta¸˜o a casos
                                                                                     a             ca
                               de uso, arquitetura e itera¸˜o. Ele ´ dito dirigido a casos de uso, pois s˜o os
                                                           ca       e                                    a
                               casos de uso que orientam todo o processo de desenvolvimento. Com base no
                               modelo de casos de uso, s˜o criados uma s´rie de modelos de an´lise, projeto
                                                           a               e                     a
                                                                                    ´
                               e implementa¸˜o, que realizam estes casos de uso. E centrado em arquitetura,
                                              ca
                               pois defende a defini¸˜o de um esqueleto para a aplica¸˜o (a arquitetura), a
                                                      ca                                ca
                               ganhar corpo gradualmente ao longo do desenvolvimento. Finalmente, o RUP ´    e
                               iterativo e incremental, oferecendo uma abordagem para particionar o trabalho
                               em por¸˜es menores ou mini-projetos. Esses trˆs conceitos s˜o igualmente im-
                                       co                                      e             a
                               portantes. A arquitetura provˆ a estrutura para guiar o desenvolvimento do
                                                               e
                               sistema em itera¸˜es, enquanto os casos de uso definem as metas e conduzem o
                                                 co
                               trabalho de cada itera¸˜o.
                                                       ca
                                   O ciclo de vida adotado no RUP ´ tipicamente evolutivo. Contudo, uma
                                                                       e
                               forma de organiza¸˜o em fases ´ adotada para comportar os ciclos de desen-
                                                   ca            e
                               volvimento, permitindo uma gerˆncia mais efetiva de projetos complexos. Ao
                                                                 e
                               contr´rio do tradicionalmente definido como fases na maioria dos modelos de
                                     a
                               ciclo de vida – planejamento, levantamento de requisitos, an´lise, projeto, im-
                                                                                             a
                               plementa¸˜o e testes, s˜o definidas fases ortogonais a estas, a saber:
                                         ca             a

                               Concep¸˜o nesta fase, ´ estabelecido o escopo do projeto e suas fronteiras,
                                      ca                e
                                   determinando os principais casos de uso do sistema. Esses casos de uso
                                   devem ser elaborados com a precis˜o necess´ria para se proceder estima-
                                                                       a       a
                                   tivas de prazos e custos. As estimativas devem ser globais para o projeto
                                   como um todo e detalhadas para a fase seguinte. Assim, a ˆnfase nesta
                                                                                                 e
                                   etapa recai sobre o planejamento e, por conseguinte, ´ necess´rio levan-
                                                                                          e        a
                                   tar requisitos do sistema e preliminarmente analis´-los. Ao t´rmino dessa
                                                                                     a          e
                                   fase, s˜o examinados os objetivos do projeto para se decidir sobre a con-
                                          a
                                   tinuidade do desenvolvimento;

                               Elabora¸˜o o prop´sito desta fase ´ analisar mais refinadamente o dom´
                                       ca          o               e                                    ınio do
                                   problema, estabelecer uma arquitetura de funda¸˜o s´lida, desenvolver um
                                                                                      ca o
                                   plano de projeto para o sistema a ser constru´ e eliminar os elementos
                                                                                    ıdo
                                   de projeto que oferecem maior risco. Embora o processo deva sempre
                                   acomodar altera¸˜es, as atividades da fase de elabora¸˜o asseguram que
                                                     co                                     ca
                                   os requisitos, a arquitetura e os planos est˜o suficientemente est´veis e que
                                                                               a                    a
                                   os riscos est˜o suficientemente mitigados, de modo a se poder prever com
                                                a
http://www.candidatoreal.com




                                   precis˜o os custos e prazos para a conclus˜o do desenvolvimento.
                                          a                                     a

                               Constru¸˜o durante esta fase, um produto completo ´ desenvolvido de maneira
                                       ca                                          e
                                   iterativa e incremental, para que esteja pronto para a transi¸˜o ` comu-
                                                                                                ca a
                                   nidade usu´ria.
                                               a

                               Transi¸˜o nesta fase, o software ´ disponibilizado ` comunidade usu´ria. Ap´s
                                     ca                         e                 a               a         o
                                   o produto ter sido colocado em uso, naturalmente surgem novas consid-
                                   era¸˜es que v˜o demandar a constru¸˜o de novas vers˜es para permitir
                                      co          a                       ca               o
                                   ajustes do sistema, corrigir problemas ou concluir algumas caracter´ısticas
                                   que foram postergadas.



                                                                     103
http://www.candidatoreal.com




                                   ´
                                   E importante real¸ar que dentro de cada fase, um conjunto de itera¸˜es,
                                                        c                                                  co
                               envolvendo planejamento, levantamento de requisitos, an´lise, projeto e imple-
                                                                                           a
                               menta¸˜o e testes, ´ realizado. Contudo, de uma itera¸˜o para outra e de uma
                                     ca             e                                   ca
                               fase para a pr´xima, a ˆnfase sobre as v´rias atividades muda, como mostra
                                               o          e               a
                               a figura 8.1, em que a cor preta indica grande ˆnfase, enquanto a cor branca
                                                                                  e
                               indica muito pouca ˆnfase. Na fase de concep¸˜o, o foco principal recai sobre
                                                      e                         ca
                               o entendimento dos requisitos e a determina¸˜o do escopo do projeto (plane-
                                                                              ca
                               jamento e levantamento de requisitos). Na fase de elabora¸˜o, o enfoque est´
                                                                                             ca               a
                               na captura e modelagem dos requisitos (levantamento de requisitos e an´lise),
                                                                                                         a
                               ainda que algum trabalho de projeto e implementa¸˜o seja realizado para pro-
                                                                                     ca
                               totipar a arquitetura, evitando certos riscos t´cnicos. Na fase de constru¸˜o, o
                                                                              e                          ca
                               enfoque concentra-se no projeto e na implementa¸˜o, visando evoluir e rechear
                                                                                   ca
                               o prot´tipo inicial, at´ obter o primeiro produto operacional. Finalmente, a
                                      o                 e
                               fase de transi¸˜o concentra-se nos testes, visando garantir que o sistema pos-
                                              ca
                               sui o n´ıvel adequado de qualidade. Al´m disso, usu´rios devem ser treinados,
                                                                       e              a
                               caracter´ısticas ajustadas e elementos esquecidos adicionados.




                                            Figura 8.1: A ˆnfase principal de cada uma das fases
                                                          e

                                  Al´m dos conjuntos de itera¸˜es em cada fase, as fases em si podem ocorrer
                                     e                        co
                               de forma iterativa. Como mostra a figura 8.2, elas n˜o necessariamente tˆm a
                                                                                   a                   e
                               mesma dura¸˜o. O esfor¸o realizado em cada uma varia fortemente em fun¸˜o
                                           ca           c                                                ca
                               das circunstˆncias espec´
                                           a           ıficas do projeto.
http://www.candidatoreal.com




                                          Figura 8.2: O modelo de ciclo de vida proposto no RUP



                                                                     104
http://www.candidatoreal.com




                               8.2     XP - Extreme Programming
                               A metodologia XP (Extreme Programming) ´ destinada a grupos pequenos de
                                                                           e
                               desenvolvimento, e em projetos de dura¸˜o de at´ 36 meses. Os principais papeis
                                                                     ca       e
                               nesta metodologia s˜o: Programador - foco da metodologia; Coach - respons´vel
                                                  a                                                       a
                               por quest˜es t´cnicas do projeto, maior conhecimento do processo,valores e
                                          o    e
                               pr´ticas XP. Verifica o comportamento da equipe; Tracker - Coletar sinais vi-
                                  a
                               tais do projeto uma ou 2 vezes por semana e mantem todos informados; Gerente
                               - respons´vel pelos assuntos administrativos,mantem um forte relacionamento
                                         a
                               com o cliente.

                                   Entre as principais caracteristicas da metodologia XP est˜o: (i) Met´foras
                                                                                             a          a
                               - Utiliza¸˜o de compara˜es e analogias para facilitar entendimento; (ii)Design
                                        ca              o
                               Simples do Sistema; (iii)Testes Automatizados - Testes de Unidade e de Aceita¸˜o;
                                                                                                            ca
                               (iv)Refactoring - Todo desenvolvedor tem o dever de melhorar um c´digo que es-
                                                                                                  o
                               teja funcionado por´m mal escrito; (v)Programa¸ao de Dupla- Todo c´digo deve
                                                   e                           c˜                   o
                               ser implementado em dupla; (vi)Propriedade Coletiva do C´digo; (vii)Semana
                                                                                           o
                               de 40 horas - Evitar trabalhar a mais. Incialmente se obtem resultados, mas
                               depois h´ o desgaste; (viii)Integra¸˜o cont´
                                        a                          ca      ınua - Eliminar erros graves de in-
                               tegra¸˜o; (ix)Releases Curtos - Release ´ um conjunto de funcionalidade bem
                                     ca                                  e
                               definidas e que representam algum valor para o cliente. Um projeto XP pode
                               ter um ou mais releases no seu ciclo; (x)Story Cards - Cartoes escritos pelos
                               usu´rios onde s˜o descritas funcionalidades do sistema; (xi)CRC - Linguagem
                                   a           a
                               para Modelagem de Classes do XP. Utiliza os story cards.


                               8.3     Scrum
                               Scrum ´ um processo para construir software incrementalmente em ambientes
                                       e
                               complexos, onde os requisitos n˜o s˜o claros ou mudam com muita freq¨ˆncia.
                                                                a a                                    ue
                               Em Rugby, Scrum ´ um time de oito integrantes que trabalham em conjunto
                                                    e
                               para levar a bola adiante no campo. Ou seja: times trabalhando como uma
                               unidade altamente integrada com cada membro desempenhando um papel bem
                               definido e o time inteiro focando num unico objetivo.
                                                                      ´
                                   O objetivo do Scrum ´ fornecer um processo conveniente para projetos e
                                                          e
                               desenvolvimento orientado a objetos. A metodologia ´ baseada em princ´
                                                                                      e                   ıpios
                               semelhantes aos de XP: equipes pequenas, requisitos pouco est´veis ou descon-
                                                                                              a
                               hecidos, e itera¸˜es curtas para promover visibilidade para o desenvolvimento.
                                                co
                               No entanto, as dimens˜es em Scrum diferem de XP.
                                                      o
http://www.candidatoreal.com




                                   Scrum divide o desenvolvimento em sprints de 30 dias. Equipes pequenas,
                               de at´ 7 pessoas, s˜o formadas por projetistas, programadores, engenheiros e
                                     e             a
                               gerentes de qualidade. Estas equipes trabalham em cima de funcionalidade (os
                               requisitos, em outras palavras) definidas no in´ de cada sprint. A equipe toda
                                                                             ıcio
                               ´ respons´vel pelo desenvolvimento desta funcionalidade.
                               e         a
                                   Todo dia, ´ feita uma reuni˜o de 15 minutos onde o time exp˜es ` gerˆncia
                                              e                a                                o a      e
                               o que ser´ feito no pr´ximo dia, e nestas reuni˜es os gerentes podem levantar
                                         a            o                         o
                               os fatores de impedimento, e o progresso geral do desenvolvimento.
                                   Scrum ´ interessante porque fornece um mecanismo de informa¸˜o de status
                                           e                                                     ca
                               que ´ atualizado continuamente, e porque utiliza a divis˜o de tarefas dentro
                                    e                                                    a
                               da equipe de forma explicita. Scrum e XP s˜o complementares pois Scrum
                                                                               a


                                                                     105
http://www.candidatoreal.com




                               provˆ pr´ticas ´geis de gerenciamento enquanto XP provˆ pr´ticas integradas
                                   e a        a                                      e a
                               de engenharia de software.


                               8.4     Crystal
                               Crystal/Clear faz parte, na realidade, de um conjunto de metodologias criado
                               por Cockburn. As premissas apresentadas para a existˆncia deste conjunto s˜o:
                                                                                   e                     a

                                  • Todo projeto tem necessidades, conven¸˜es e uma metodologia diferentes.
                                                                         co

                                  • O funcionamento do projeto ´ influenciado por fatores humanos, e h´
                                                                 e                                   a
                                    melhora neste quando os indiv´
                                                                 ıduos produzem melhor.
                                  • Comunica¸˜o melhor e lan¸amentos freq¨entes reduzem a necessidade de
                                              ca              c             u
                                    construir produtos intermedi´rios do processo.
                                                                a
                                   Crystal/Clear ´ uma metodologia direcionada a projetos pequenos, com
                                                   e
                               equipes de at´ 6 desenvolvedores. Assim como com SCRUM, os membros da
                                             e
                               equipe tem especialidades distintas. Existe uma forte ˆnfase na comunica¸˜o
                                                                                          e                   ca
                               entre os membros do grupo. Existem outras metodologias Crystal para grupos
                               maiores.
                                   Toda a especifica¸˜o e projeto s˜o feitos informalmente, utilizando quadros
                                                     ca              a
                               publicamente vis´ ıveis. Os requisitos s˜o elaborados utilizando casos de uso, um
                                                                       a
                               conceito similar `s est´rias de usu´rio em XP, onde s˜o enunciados os requisitos
                                                 a     o           a                  a
                               como tarefas e um processo para sua execu¸˜o. ca
                                   As entregas das novas vers˜es de software s˜o feitos em incrementos regu-
                                                               o                 a
                               lares de um mˆs, e existem alguns subprodutos do processo que s˜o respons-
                                               e                                                      a
                               abilidade de membros espec´   ıficos do projeto. Grande parte da metodologia ´     e
                               pouco definida, e segundo o autor, isto ´ proposital; a id´ia de Crystal/Clear ´
                                                                         e                 e                     e
                               permitir que cada organiza¸˜o implemente as atividades que lhe parecem ade-
                                                            ca
                               quadas, fornecendo um m´   ınimo de suporte util do ponto de vista de comunica¸˜o
                                                                            ´                                 ca
                               e documentos.


                               8.5     Feature Driven Development (FDD)
                                  • M´todo ´gil e adaptativo
                                     e     a

                                  • Foco nas fases de desenho e constru¸˜o.
                                                                       ca

                                  • Interage com outras metodologias.
http://www.candidatoreal.com




                                  • N˜o exige nenhum processo espec´
                                     a                             ıfico de modelagem.

                                  • Possui desenvolvimento iterativo.

                                  • Enfatiza aspectos de qualidade durante o processo e inclui entregas freq¨entes
                                                                                                            u
                                    e tang´
                                          ıveis.

                                  • Suporta desenvolvimento ´gil com r´pidas adapta¸˜es `s mudan¸as de
                                                               a         a         co a         c
                                    requisitos e necessidades do mercado.

                                  O FDD consiste de 5 processos principais:


                                                                      106
http://www.candidatoreal.com




                                  • Desenvolver um modelo compreens´ (Develop an overall model).
                                                                   ıvel

                                  • Construir uma lista de funcionalidades (Build a features list).

                                  • Planejar por funcionalidade (Plan By Feature).

                                  • Projetar por funcionalidade (Design by feature).

                                  • Construir por funcionalidade (Build by feature).


                               8.6     Dynamic Systems Development Method (DSDM)
                                                  ´
                               Progenitor do XP. E um arcabou¸o para desenvolvimento r´pido de aplica¸˜es
                                                               c                          a              co
                               (RAD). Fixa tempo e recursos ajustando a quantia de funcionalidades. Funciona
                               com pequenas equipes. Suporta mudan¸as nos requisitos durante o ciclo de vida.
                                                                    c
                               Consiste em cinco fases:
                                  • Estudo das possibilidades (Feasibility study).

                                  • Estudo dos neg´cios (Business study).
                                                  o

                                  • Itera¸˜o do modelo funcional (Functional model iteration).
                                         ca

                                  • Itera¸˜o de projeto e constru¸˜o (Design and build iteration).
                                         ca                      ca
                                  • Implementa¸˜o final (Final implementation).
                                              ca

                                  Pr´ticas:
                                    a

                                  • Usu´rio sempre envolvido.
                                       a

                                  • Equipe do DSDM autorizada a tomar decis˜es.
                                                                           o

                                  • Foco na frequente entrega de produtos.

                                  • Adapta¸˜o ao neg´cio ´ o crit´rio para entregas.
                                          ca        o    e       e

                                  • ”Construa o produto certo antes de vocˆ constru´ corretamente”.
                                                                          e        ı-lo
                                  • Desenvolvimento iterativo e incremental.

                                  • Mudan¸as s˜o revers´
                                         c    a        ıveis utilizando pequenas itera¸˜es.
                                                                                      co

                                  • Requisitos s˜o acompanhados em alto n´
                                                a                        ıvel.
http://www.candidatoreal.com




                                  • Testes integrados ao ciclo de vida.


                               8.7     Adaptive Software Development (ASD)
                               ´
                               E iterativo e incremental. Funciona bem em sistemas grandes e complexos. E´
                                                                                                   ´
                               Arcabou¸o para evitar o caos. O cliente deve estar sempre presente. E uma
                                        c
                               metodologia voltada para o desenvolvimento de aplica¸˜es em conjunto (Joint
                                                                                   co
                               Application development - JAD).
                                  Possui trˆs ciclos de fase:
                                            e


                                                                    107
http://www.candidatoreal.com




                               Especular (Speculate). Fixa prazos e objetivos e define um plano baseado
                                   em componentes.

                               Colaborar (Collaborate). Constru¸˜o concorrente de v´rios componentes.
                                                               ca                  a

                               Aprender (Learn). Repetitivas revis˜es de qualidade e foco na demostran¸˜o
                                                                    o                                    ca
                                   das funcionalidades desenvolvidas (Learning loop). H´ presen¸a do cliente
                                                                                       a       c
                                   e de especialistas do dom´
                                                            ınio.
                                                                        ´
                                   Os ciclos duram de 4 a 8 semanas. E orientado a miss˜es (Mission-driven),
                                                                                          o
                               pois atividades s˜o justificadas atrav´s de uma miss˜o, que pode mudar ao longo
                                                a                   e             a
                                            ´
                               do projeto. E baseado em componentes e interativo. Os prazos s˜o pr´-fixados
                                                                                                a    e
                               (time-boxed), pois for¸a os participantes do projeto a definir severamente de-
                                                      c
                               cis˜es do projeto. Uma propriedade interessante ´ a tolerˆncia a mudan¸as
                                  o                                                e        a             c
                               (Change-tolerant). As mudan¸as s˜o freq¨entes, ent˜o ´ sempre melhor es-
                                                               c    a      u          a e
                               tar pronto a adapt´-las do que control´-las. Isso ´ feito atrav´s de constante
                                                   a                    a         e           e
                               avalia¸˜o de quais componentes podem mudar.
                                     ca
http://www.candidatoreal.com




                                                                    108
http://www.candidatoreal.com




                               Cap´
                                  ıtulo 9

                               Engenharia de Requisitos

                               9.1     O Processo de Engenharia de Requisitos
                               As descri¸˜es das fun¸˜es que um sistema deve incorporar e das restri¸˜es que
                                         co          co                                                  co
                               devem ser satisfeitas s˜o os requisitos para o sistema. Isto ´, os requisitos de
                                                       a                                       e
                               um sistema definem o que o sistema deve fazer e as circunstˆncias sob as quais
                                                                                              a
                               deve operar. Em outras palavras, os requisitos definem os servi¸os que o sistema
                                                                                                 c
                               deve fornecer e disp˜em sobre as restri¸˜es ` opera¸˜o do mesmo.
                                                   o                   co a         ca
                                   Requisitos s˜o, normalmente, classificados em requisitos funcionais e n˜o
                                               a                                                              a
                               funcionais. Requisitos funcionais, como o pr´prio nome indica, apontam as
                                                                                o
                               fun¸˜es que o sistema deve fornecer e como o sistema deve se comportar em de-
                                   co
                               terminadas situa¸˜es. J´ os requisitos n˜o funcionais descrevem restri¸˜es sobre
                                                co      a               a                              co
                               as fun¸˜es oferecidas, tais como restri¸˜es de tempo, de uso de recursos etc. Al-
                                      co                              co
                               guns requisitos n˜o funcionais dizem respeito ao sistema como um todo e n˜o a
                                                a                                                           a
                               funcionalidade espec´ıfica. Dependendo da natureza, os requisitos n˜o funcionais
                                                                                                     a
                               podem ser classificados de diferentes maneiras, tais como requisitos de desem-
                               penho, requisitos de portabilidade, requisitos legais, requisitos de conformidade
                               etc.
                                   Os processos de engenharia de requisitos variam muito de uma organiza¸˜o  ca
                               para outra, mas, de maneira geral, a maioria dos processos de Engenharia de
                               Requisitos ´ composta das seguintes atividades:
                                           e
                               Levantamento (ou Descoberta ou Elicita¸˜o) de Requisitos Nesta fase,
                                                                              ca
                                   os usu´rios, clientes e especialistas de dom´
                                         a                                      ınio s˜o identificados e trabal-
                                                                                      a
                                   ham junto com os engenheiros de requisitos para descobrir, articular e
http://www.candidatoreal.com




                                   entender a organiza¸˜o como um todo, o dom´
                                                        ca                         ınio da aplica¸˜o, os proces-
                                                                                                 ca
                                   sos de neg´cio espec´
                                             o           ıficos, as necessidades que o software deve atender e
                                   os problemas e deficiˆncias dos sistemas atuais.
                                                         e
                               An´lise de Requisitos visa a estabelecer um conjunto acordado de requisitos
                                 a
                                   consistentes e sem ambig¨idades, que possa ser usado como base para
                                                            u
                                   o desenvolvimento do software. Para tal, diversos tipos de modelos s˜o
                                                                                                        a
                                   constru´ıdos.
                               Documenta¸˜o de Requisitos ´ a atividade de representar os resultados da
                                          ca                    e
                                   Engenharia de Requisitos em um documento (ou conjunto de documentos),
                                   contendo os requisitos do software.

                                                                     109
http://www.candidatoreal.com




                               Verifica¸˜o e Valida¸˜o de Requisitos A verifica¸˜o de requisitos avalia se
                                       ca             ca                             ca
                                    o documento de Especifica¸˜o de Requisitos est´ sendo constru´ de
                                                                  ca                    a                 ıdo
                                    forma correta, de acordo com padr˜es previamente definidos, sem con-
                                                                         o
                                    ter requisitos amb´ ıguos, incompletos ou, ainda, requisitos incoerentes ou
                                    imposs´ıveis de serem testados. J´ a valida¸˜o diz respeito a avaliar se esse
                                                                     a         ca
                                    documento est´ correto, ou seja, se os requisitos e modelos documentados
                                                    a
                                    atendem `s reais necessidades e requisitos dos usu´rios / cliente.
                                              a                                         a

                               Gerˆncia de Requisitos se preocupa em gerenciar as mudan¸as nos requisi-
                                  e                                                          c
                                    tos j´ acordados, manter uma trilha dessas mudan¸as, gerenciar os rela-
                                         a                                            c
                                    cionamentos entre os requisitos e as dependˆncias entre o documento de
                                                                               e
                                    requisitos e os demais artefatos produzidos no processo de software, de
                                    forma a garantir que mudan¸as nos requisitos sejam feitas de maneira
                                                                 c
                                    controlada e documentada.


                               9.2     T´cnicas de Levantamento de Requisitos
                                        e
                               9.2.1    Observa¸˜o
                                               ca
                               A observa¸˜o possibilita um contato pessoal e estreito do pesquisador com o
                                          ca
                               fenˆmeno pesquisado, o que apresenta uma s´rie de vantagens. As t´cnicas de
                                   o                                        e                        e
                               observa¸˜o s˜o extremamente uteis para ”descobrir”aspectos novos de um prob-
                                        ca a                   ´
                               lema. Isto se torna crucial nas situa¸˜es em que n˜o existe uma base te´rica
                                                                     co           a                         o
                               s´lida que oriente a coleta de dados. Ao mesmo tempo em que o contato direto
                                o
                               e prolongado do pesquisador com a situa¸˜o pesquisada apresenta as vantagens
                                                                        ca
                               mencionadas, envolve tamb´m uma s´rie de problemas. Algumas cr´
                                                            e         e                                ıticas s˜o
                                                                                                               a
                               feitas ao m´todo de observa¸ao, primeiramente por provocar altera¸˜es no am-
                                           e                c˜                                     co
                               biente ou no comportamento das pessoas observadas. Outra cr´   ıtica ´ a de que
                                                                                                     e
                               este m´todo se baseia muito na interpreta¸˜o pessoal. Al´m disso h´ criticas no
                                      e                                  ca            e           a
                               sentido de que o grande envolvimento do pesquisador leve a uma vis˜o distorcida
                                                                                                  a
                               do fenˆmeno ou a uma representa¸˜o parcial da realidade.
                                      o                          ca

                               9.2.2    Entrevista
                               Entrevista ´ uma t´cnica de elicita¸˜o de requisitos muito usada. O engenheiro
                                           e       e               ca
                               de requisitos ou analista discute o sistema com diferentes usu´rios , a partir da
                                                                                             a
                               qual elabora um entendimento de seus requisitos. H´, basicamente, 2 tipos de
                                                                                     a
                               entrevista: a) entrevistas fechadas onde o engenheiro de requisitos procura as
                               perguntas para um conjunto um pr´-definido de quest˜es; b) entrevistas abertas
                                                                   e                 o
http://www.candidatoreal.com




                               onde n˜o h´ agenda pr´definida e o engenheiro de requisitos discute, de modo
                                      a a               e
                               aberto, o que os usu´rios querem do sistema. Entrevistas podem ser efetivas
                                                     a
                               para desenvolver um entendimento do problema e para elicitar muitos requisitos
                               gerais do sistema. Usu´rios finais s˜o usualmente felizes para descreverem seus
                                                       a           a
                               trabalhos e as dificuldades que eles enfrentam de forma relativamente natural,
                               entretanto eles podem ter expectativas n˜o realistas sobre o suporte que o com-
                                                                         a
                               putador dar´. Portanto, entrevistas s˜o muito menos efetivas para entendimento
                                            a                         a
                               do dom´ ınio da aplica¸˜o e para o entendimento das quest˜es organizacionais as
                                                     ca                                  o
                               quais afetam os requisitos.




                                                                      110
http://www.candidatoreal.com




                               9.2.3    An´lise de Protocolo
                                          a
                               A an´lise de protocolo pede a pessoa se engajar em alguma tarefa e corrente-
                                    a                         `
                               mente falar sobre esta tarefa, explicando o seu pensamento do processo. Usu´rios
                                                                                                           a
                               alegam que esse tipo de linguagem pode ser considerada uma ”verbaliza¸˜o di-
                                                                                                         ca
                               reta do processo cognitivo espec´  ıfico”. A an´lise de protocolo n˜o ´ um guia
                                                                               a                   a e
                               confi´vel sobre o que as pessoas est˜o pensando, ela est´ sujeita a problemas
                                    a                                 a                  a
                               de interpreta¸˜es pelos analistas. A restri¸˜o em estudar protocolos ´ que as
                                             co                             ca                         e
                               pessoas podem produzir linguagens que oferece um perfil de atividade cogni-
                               tiva autˆnoma. Segundo (Goguen, 1997), mesmo se fosse poss´ conseguir um
                                       o                                                      ıvel
                               perfil de atividade cognitiva autˆnoma da pessoa, tal objeto seria inapropriado
                                                                 o
                               para o processo de requisitos, porque o cliente n˜o tem qualquer modelo mental
                                                                                  a
                               pr´-existente do sistema desejado. Os clientes tˆm conhecimento sobre neg´cios
                                  e                                              e                         o
                               e necessidades organizacionais, enquanto o time de requisitos tem conhecimento
                               sobre as possibilidade t´cnicas.
                                                        e

                               9.2.4    JAD
                               JAD ´ uma marca registrada da IBM. O tema principal do JAD ´ colocar
                                     e                                                              e
                               autoridades representativas e gerenciais juntas dentro de um workshop estrutu-
                               rado para promover decis˜es. Segundo (Damian, 1997) JAD consiste de 5 fases:
                                                        o
                               defini¸˜o do projeto, pesquisa, prepara¸˜o para a sess˜o JAD, a sess˜o JAD, o
                                     ca                               ca              a            a
                               documento final. As fases de defini¸˜o de projeto e pesquisa no processo JAD
                                                                   ca
                               lidam com a coleta de informa¸˜es. A sess˜o JAD ´ ent˜o usada para validar
                                                               co          a        e    a
                               as informa¸˜es recolhidas nas fases anteriores. O processo JAD concentrase na
                                         co
                               sess˜o JAD, e deste modo JAD contribui para a elicita¸˜o de requisitos como
                                   a                                                    ca
                               significado para validar as informa¸˜es j´ colhidas. Na sess˜o JAD, as pessoas
                                                                  co    a                  a
                               certas tˆm que estar envolvidas, e a presen¸a de um facilitador pode ajudar a
                                       e                                   c
                               manter a sess˜o focalizada e minimizar ataques e defesas emocionais improdu-
                                            a
                               tivas. JAD promove coopera¸˜o, entendimento, e trabalho em grupo entre os
                                                             ca
                               v´rios grupos de usu´rios e o pessoal de sistemas de informa¸˜o.
                                 a                 a                                        ca

                               9.2.5    PD
                               Tradicionalmente valores democr´ticos, os quais tem sido levados em conta no
                                                                  a
                               processo de projeto, tem sido somente aqueles concentrados em fatores t´cnicos
                                                                                                         e
                               e econˆmicos. Mas com o uso do PD fatores t´cnicos-sociais tem sido levados em
                                      o                                     e
                               conta. O projeto deveria ser feito com o usu´rio. Aprendizado m´tuo deveria
                                                                             a                    u
                               ser uma parte importante do trabalho em um grupo de projeto, n˜o sendo  a
                               meramente uma visita aos laborat´rios de pesquisa. Trabalhadores e clientes s˜o
                                                                  o                                         a
http://www.candidatoreal.com




                               inteligentes e criativos, contribuidores produtivos para as organiza¸˜es, desde
                                                                                                    co
                               que sejam encorajados a expressarem seus desejos, aplicarem sua esperteza e
                               exercitarem suas capacidades de tomar decis˜es, assumindo responsabilidades
                                                                             o
                               do impacto de suas a¸˜es.
                                                      co

                               9.2.6    QFD
                               O termo qualidade ´ definido como ”um conjunto de meios para produzir eco-
                                                    e
                               nomicamente produtos ou servi¸os, os quais satisfa¸am os requisitos do cliente”.
                                                               c                 c
                               QFD ´ ”um conceito que provˆ meios de interpretar requisitos do cliente em req-
                                     e                       e
                               uisitos t´cnicos, apropriados para cada est´gio do desenvolvimento e produ¸˜o
                                        e                                 a                                ca

                                                                     111
http://www.candidatoreal.com




                               do produto”(Damian, 1997). As fases iniciais do QFD podem ser descritas como
                               sendo ”simplesmente um sistema de identifica¸˜o e prioriza¸˜o das necessidades
                                                                             ca             ca
                               do cliente obtidas de cada recurso avaliado”. QFD ´ um conceito que aplica-se
                                                                                   e
                               bem para a elicita¸˜o de requisitos, especialmente num modelo de elicita¸˜o
                                                  ca                                                     ca
                               onde a voz do cliente ´ o guia para a cria¸˜o de requisitos.
                                                     e                   ca

                               9.2.7    CRC
                               Como definido em (Zhu, 1998), CRC ´ uma sess˜o de grupo, que ´ similar ao
                                                                    e          a                  e
                               JAD, onde os pap´is dos participantes e o papel do facilitador s˜o claramente
                                                 e                                              a
                               definidos. Em CRC, participantes consistem n˜o somente de usu´rios e facilita-
                                                                            a                  a
                               dor, mas tamb´m de outras pessoas envolvidas indiretamente no sistema. CRC
                                              e
                               ´ diferente de JAD e QFD pois ele foca-se no usu´rio operativo.
                               e                                               a

                               9.2.8    Prototipa¸˜o
                                                 ca
                               Este m´todo para elicita¸˜o de requisitos utiliza-se do uso de uma t´cnica de
                                      e                 ca                                           e
                               prototipa¸˜o para a avalia¸˜o do usu´rio. O conjunto inicial de requisitos ´
                                         ca               ca           a                                     e
                               usado como base para criar o Prot´tipo de Interface do Usu´rio com o sis-
                                                                     o                         a
                               tema inicial (simplificado). Para essa cria¸˜o, o projetista precisa manter o
                                                                           ca
                               prot´tipo t˜o simples quanto poss´
                                   o       a                       ıvel. O ponto forte desta atividade ´ apre-
                                                                                                       e
                               sentar muitas alternativas para o usu´rio antes de se gastar muito esfor¸o para
                                                                      a                                c
                               qualquer prot´tipo em particular. Ap´s a aceita¸˜o do prot´tipo pelos usu´rios,
                                             o                        o        ca         o              a
                               os desenvolvedores precisam criar um documento de especifica¸˜o dos requisitos
                                                                                             ca
                               paralelo ao prot´tipo de interface (McConnel, 1998).
                                               o

                               9.2.9    Cen´rios
                                           a
                               Usu´rios finais e outros agentes do sistema acham a utiliza¸˜o de cen´rios mais
                                   a                                                        ca         a
                               f´ceis para relacionar-se aos exemplos da vida real do que descri¸˜es abstratas
                                a                                                                co
                               das fun¸˜es realizadas pelo sistema. Por essa raz˜o, ´ freq¨entemente util desen-
                                       co                                       a e       u           ´
                               volver um conjunto de intera¸ao dos cen´rios, e usar estes para elicitar e clarear
                                                             c˜         a
                               requisitos de sistema. Cen´rios s˜o exemplos de sess˜es de intera¸˜o as quais
                                                           a      a                    o            ca
                               s˜o concentradas com um tipo unico de intera¸˜o entre um usu´rio final e o sis-
                                a                               ´             ca               a
                               tema. Usu´rios finais simulam suas intera¸˜es usando cen´rios. Eles explicam
                                          a                                co               a
                               para o time de engenheiros de requisito o que eles est˜o fazendo e a informa¸˜o
                                                                                      a                       ca
                               da qual eles precisam do sistema para descrever a tarefa descrita no cen´rio.
                                                                                                          a

                               9.2.10     FAST
http://www.candidatoreal.com




                               T´cnicas facilitadas de especifica¸˜o de aplica¸˜es (facilitated application spec-
                                 e                              ca           co
                               ification techniques). Consiste nos seguintes passos:

                                 1. Reuni˜es iniciais entre o cliente e o desenvolvedor (sess˜o de perguntas e
                                          o                                                  a
                                    respostas). Produzem como resultado a solicita¸˜o de produto.
                                                                                     ca

                                 2. S˜o selecionados local, hor´rio e data para o FAST e ´ escolhido um facil-
                                      a                        a                         e
                                    itador.
                                 3. A solicita¸˜o de produto ´ distribu´ para todos os participantes antes
                                              ca             e         ıda
                                    da data da reuni˜o.
                                                     a


                                                                      112
http://www.candidatoreal.com




                                    ´
                                 4. E solicitado a cada participante que fa¸a uma lista dos objetos que s˜o
                                                                            c                               a
                                    parte do ambiente , uma lista de servi¸os (processos ou fun¸˜es), uma
                                                                            c                      co
                                    lista de restri¸˜es (custo, tamanho, regras de neg´cio) e crit´rios de de-
                                                   co                                 o           e
                                    sempenho.

                                 5. Quando a reuni˜o a FAST come¸a, o primeiro t´pico de discuss˜o ´ a
                                                    a                 c         o               a e
                                    necessidade e a justificativa do produto.

                                 6. Cada um apresenta suas listas, cr´
                                                                     ıticas e debates s˜o proibidos nesta etapa.
                                                                                       a

                                 7. Uma lista combinada que elimina objetos redundantes ´ produzida, mas
                                                                                        e
                                    n˜o apaga nada.
                                     a
                                 8. A lista ´ modificada com uma discuss˜o dirigida pelo facilitador. O pro-
                                            e                          a
                                    duto ´ a lista de consenso.
                                          e

                                 9. A equipe ´ subdividida em equipes menores; cada uma trabalha para
                                              e
                                    produzir miniespecifica¸oes, ou seja, detalham cada objeto da lista de
                                                          c˜
                                    consenso.
                                10. As equipes apresentam suas miniespecifica¸˜es e a lista ´ modificada no-
                                                                            co             e
                                    vamente atrav´s de discuss˜es.
                                                 e            o

                                11. Cada participante da reuni˜o cria os crit´rios de valida¸˜o para os elemen-
                                                              a              e              ca
                                    tos da lista.

                                12. Uma lista de consenso de crit´rios de valida¸˜o ´ criada.
                                                                 e              ca e
                                13. Algu´m fica respons´vel em redigir o rascunho completo das especifica¸˜o.
                                        e             a                                                ca


                               9.3     An´lise de Requisitos
                                         a
                               A an´lise de requisitos ´ uma atividade de engenharia de software que vence
                                    a                    e
                               o espe¸o entre a engenharia de requisitos, no n´
                                      c                                          ıvel de sistema, e o projeto de
                               software. As atividades de engenharia de requisitos resultam na especifica¸˜o  ca
                               das caracter´ısticas operacionais do software (fun¸˜o, dados e comportamento).
                                                                                  ca
                               A an´lise de requisitos constr´i modelos de dom´
                                    a                         o                 ınio que fornecem ao projetista
                               uma vis˜o do software.
                                        a
                                   A especifica¸˜o de requisitos ´ produzida no auge da tarefa de an´lise. Alguns
                                               ca               e                                   a
                               padr˜es sugerem que uma especifica¸˜o de requisitos deve conter:
                                    o                                ca
http://www.candidatoreal.com




                               Introdu¸˜o. Declara as metas e objetivos do software.
                                      ca

                               Descri¸˜o da informa¸˜o. Fornece uma descri¸˜o detalhada do problema que
                                     ca               ca                     ca
                                   o software deve resolver. O conte´do, fluxo e estrutura da informa¸˜o s˜o
                                                                    u                               ca a
                                   documentados.

                               Descri¸˜o funcional. Uma narrativa de processamento ´ fornecida para cada
                                     ca                                            e
                                   fun¸˜o.
                                      ca

                               Descri¸˜o comportamental. Examina a opera¸˜o do software como conseq¨ˆncia
                                     ca                                        ca                          ue
                                   de eventos externos e caracter´
                                                                 ısticas de controle geradas internamente.




                                                                     113
http://www.candidatoreal.com




                               Crit´rios de valida¸˜o. Informa como devemos reconhecer uma implementa¸˜o
                                   e                ca                                                    ca
                                    bem-sucedida e quais classes de testes devem ser conduzidas para validar
                                    a fun¸˜o, o desempenho e as restri¸˜es.
                                         ca                           co
                               Bibliografia e apˆndice. A bibliografia cont´m todos os documentos que se
                                                 e                         e
                                    relacionam ao software. O apˆndice cont´m informa¸˜es que suplementa
                                                                e          e         co
                                    as especifica¸˜es.
                                                co

                               9.3.1    M´todos de an´lise
                                         e           a
                               Entre os mais importantes m´todos de an´lise, trˆs se destacam: A an´lise estru-
                                                             e             a      e                    a
                               turada, a an´lise essencial e a an´lise orientada a objetos. A seguir discutiremos
                                           a                     a
                               suas principais caracter´
                                                       ısticas.

                               An´lise estruturada
                                 a
                               A An´lise Estruturada adota uma vis˜o de desenvolvimento baseada em um
                                     a                               a
                               modelo entrada-processamento-sa´ıda. No paradigma estruturado, os dados s˜o
                                                                                                        a
                               considerados separadamente das fun¸˜es que os transformam e a decomposi¸˜o
                                                                  co                                   ca
                               funcional ´ usada intensamente.
                                         e

                               An´lise essencial
                                 a
                               Os m´todos orientados a fun¸oes conduzem o desenvolvimento de software estru-
                                     e                      c˜
                               turando as aplica¸˜es segundo a ´tica das fun¸˜es (a¸˜es) que o sistema dever´
                                                 co            o             co    co                       a
                               realizar. Os m´todos orientados a dados, por sua vez, enfatizam a identifica¸˜o
                                              e                                                           ca
                               e estrutura¸˜o dos dados, subjugando a an´lise das fun¸˜es para um segundo
                                           ca                              a           co
                               plano. Esses m´todos tˆm origem no projeto de bancos de dados e, geralmente,
                                               e       e
                               tˆm no modelo de Entidades e Relacionamentos (ER) sua principal ferramenta.
                                e
                                   A an´lise essencial ´ uma metodologia estruturada, sendo uma evolu¸˜o da
                                        a              e                                               ca
                               an´lise estruturada. Essa metodologia procurou conciliar as abordagens ori-
                                  a
                               entadas a dados e a fun¸˜es em um unico m´todo, utilizando modelos para
                                                         co          ´        e
                               dados, fun¸˜es e controles (DFDs, DERs e Diagramas de Transi¸˜o de Estados,
                                          co                                                  ca
                               respectivamente) como ferramentas para a modelagem de sistemas.

                               An´lise orientada o objeto
                                 a
                               A orienta¸˜o a objetos pressup˜e que o mundo ´ composto por objetos, onde
                                         ca                   o               e
                               um objeto ´ uma entidade que combina estrutura de dados e comportamento
                                           e
                               funcional. No paradigma orientado a objetos, os sistemas s˜o estruturados a
                                                                                           a
http://www.candidatoreal.com




                               partir dos objetos que existem no dom´
                                                                    ınio do problema, isto ´, os sistemas s˜o
                                                                                           e               a
                               modelados como um n´mero de objetos que interagem.
                                                     u

                               9.3.2    Modelagem da an´lise
                                                       a
                               DFD’s
                               Ferramenta de modelagem utilizada para descrever a transforma¸˜o de entradas
                                                                                               ca
                               em sa´ıdas. Representa um sistema como uma rede de processos interligados
                                                                                 ´
                               entre si por fluxos de dados e dep´sitos de dados. E a ferramenta de modelagem
                                                                o
                               mais importante da an´lise estruturada. Junto com o DER, ´ a ferramenta mais
                                                      a                                    e
                               importante da an´lise essencial. Seus componentes s˜o:
                                                 a                                  a

                                                                      114
http://www.candidatoreal.com




                               Processo. Tamb´m chamado de fun¸˜o, bolha ou transforma¸˜o, o processo
                                               e                  ca                        ca
                                   representa as transforma¸˜es realizadas sobre os dados em um sistema e
                                                           co
                                   correspondem a fun¸˜es ou procedimentos que um sistema tem que prover.
                                                      co
                                   ´
                                   E representado graficamente por c´  ırculos e deve ter um nome composto
                                   por um verbo e um objeto.

                               Fluxo de dados. Representa uma cole¸˜o de itens de dados em movimento. E
                                                                    ca                                     ´
                                   representado graficamente atrav´s de uma seta entrando ou saindo de um
                                                                  e
                                   processo, com a ponta indicando o sentido do fluxo. Deve ter associado
                                   um nome o mais significativo poss´ıvel, de modo a facilitar a valida¸˜o do
                                                                                                      ca
                                   diagrama com os usu´rios. Esse nome deve ser um substantivo que facilite
                                                        a
                                   a identifica¸˜o da cole¸˜o de dados transportada.
                                              ca          ca

                               Dep´sito de dados. O dep´sito de dados ´ utilizado para modelar um reposit´rio
                                  o                       o             e                                o
                                                                                    ´
                                   de uma cole¸˜o de pacotes de dados em repouso. E representado grafica-
                                              ca
                                   mente por duas linhas paralelas com um nome que represente seu conte´do
                                                                                                       u
                                   e que normalmente ´ o plural do nome dos pacotes transportados pelos
                                                       e
                                   fluxos para dentro e para fora do dep´sito.
                                                                        o
                               Terminador ou entidade externa. Entidades externas ou terminadores s˜o    a
                                   fontes ou destinos de dados do sistema. Representam os elementos do am-
                                   biente com os quais o sistema se comunica. Tipicamente, uma entidade
                                   externa ´ uma pessoa (p.ex. um cliente), um grupo de pessoas (p. ex. um
                                           e
                                   departamento da empresa ou outras institui¸˜es) ou um outro sistema que
                                                                              co
                                   interaja com o sistema em quest˜o. Uma entidade externa deve ser iden-
                                                                    a
                                   tificada por um nome e representada por um retˆngulo. Assim como no
                                                                                    a
                                   caso dos dep´sitos de dados, em diagramas complexos, podemos desenhar
                                                o
                                   um mesmo terminador mais de uma vez, para se evitar o cruzamento de
                                   linhas de fluxos de dados ou para impedir que longas linhas de fluxos de
                                   dados saiam de um lado a outro do diagrama.

                                 Quando o software ´ complexo, devemos organizar o DFD em n´
                                                     e                                      ıveis. Dois
                               DFDs especiais est˜o presentes em qualquer modelo funcional:
                                                 a

                               Contexto. Mostra o sistema como uma caixa-preta, trocando informa¸˜es (fluxos
                                                                                                co
                                   de dados) com entidades externas ao sistema.

                               N´                                  ´
                                ıvel 0 - Geral ou de Sistema. E uma decomposi¸˜o do diagrama de con-
                                                                                      ca
                                    texto, mostrando o funcionamento do sistema em quest˜o, isto ´, as grandes
                                                                                            a      e
                                    fun¸˜es do sistema e as interfaces entre elas. Os processos nesse diagrama
                                        co
                                                  u                      ´
                                    recebem os n´meros 1, 2, 3, etc. . . E necess´rio assegurar a coerˆncia en-
                                                                                  a                   e
http://www.candidatoreal.com




                                    tre os diagramas de contexto e de n´ 0, isto ´, assegurar que os fluxos
                                                                          ıvel       e
                                    de dados entrando ou saindo do diagrama efetivamente reproduzem as en-
                                    tradas e sa´
                                               ıdas do diagrama de contexto. Neste diagrama, devem aparecer
                                    os dep´sitos de dados necess´rios para a sincroniza¸˜o dos processos.
                                           o                     a                       ca

                               Dicion´rio de Dados
                                     a
                               O dicion´rio de dados ´ uma listagem organizada de todos os elementos de
                                        a              e
                               dados pertinentes ao sistema, com defini¸˜es precisas para que os usu´rios e
                                                                       co                             a
                               desenvolvedores possam conhecer o significado de todos os itens de dados. Ex-
                               emplificando para uma estrutura de dados ”nome”: nome = t´    ıtulo-cortesia +


                                                                     115
http://www.candidatoreal.com




                               primeiro-nome + (nome-intermedi´rio) + ultimo-nome, t´
                                                              a         ´           ıtulo-cortesia = [Sr. —
                               Sra. — Srta. — Dr. — Professor] etc. . .

                               Aspectos de an´lise essencial
                                             a
                               O modelo comportamental determina o comportamento interno do sistema para
                               que este possa interagir corretamente com o ambiente. Ap´s a constru¸˜o do
                                                                                       o           ca
                               modelo comportamental, teremos os seguintes artefatos:

                               Diagrama de Entidades e Relacionamentos.
                               Diagramas de Fluxos de Dados Preliminar (DFD Particionado por Eventos).
                                   Para cada evento do sistema, deve ser constru´ um DFD.
                                                                                ıdo
                               Diagramas de Fluxos de Dados Organizados em N´           ıveis Hier´rquicos.
                                                                                                   a
                                   Representa os processos em n´
                                                               ıveis hier´rquicos, a partir do diagrama zero.
                                                                         a
                               Diagramas de Transi¸˜o de Estados. Representa o comportamento das en-
                                                     ca
                                   tidades e relacionamentos com atributos ao longo do tempo. Ser´ con-
                                                                                                    a
                                   stru´ um DTE para cada entidade ou relacionamento com atributo do
                                       ıdo
                                   DER que possuir comportamento significativo, isto ´, possuir mais de um
                                                                                    e
                                   estado ao longo de seu ciclo de vida.

                               Dicion´rio de Dados. Descreve os dados representados no DER, nos DFDs
                                      a
                                    e nos DTEs.
                               Especifica¸˜o da L´gica dos Processos (Mini-especifica¸˜es). Descreve
                                          ca      o                                     co
                                   a l´gica dos processos do DFD que n˜o foram detalhados em diagramas
                                      o                                 a
                                   de n´ inferior (l´gica dos processos primitivos).
                                        ıvel         o
                               Como podemos perceber, a an´lise essencial faz uso praticamente das mesmas
                                                                a
                               t´cnicas de modelagem da an´lise estruturada, a saber a modelagem de dados
                                e                             a
                               (utilizando modelos de entidades e relacionamentos), a modelagem funcional
                               (utilizando Diagramas de Fluxo de Dados - DFDs) e a modelagem de controle
                               (utilizando diagramas de transi¸˜o de estados). Isso ´ bastante natural, j´
                                                                  ca                      e                     a
                               que a an´lise essencial ´, de fato, uma extens˜o da an´lise estruturada. Na
                                         a              e                        a        a
                               realidade, a principal diferen¸a entre a an´lise essencial e a an´lise estruturada
                                                             c            a                     a
                               est´ na estrat´gia para atacar o problema: a primeira defende uma abordagem
                                  a          e
                               baseada em eventos, onde a an´lise de eventos passa a ser um passo fundamental,
                                                               a
                               a segunda ´ baseada apenas na decomposi¸˜o top-down da funcionalidade do
                                           e                                ca
                               sistema.
http://www.candidatoreal.com




                               9.4     Gerenciamento de Requisitos
                               Gerenciar requisitos consiste de procedimentos para coletar, verificar e avaliar
                                       c                             a      ´
                               mudan¸as, de forma melhor administr´-las. E o considerado uma das primeiras
                               a
                               ´reas chave para melhoria de qualidade. No gerenciamento de requisitos um
                               conceito importante ´ o de rastreabilidade. A rastreabilidade pode ser vista
                                                      e
                               como a habilidade de acompanhar e descrever a vida de um requisito em ambas
                               as dire¸˜es. Rastrear envolve identificar links entre requisitos, fontes dos requi-
                                      co
                               sitos e design do sistema. As ferramentas mais utilizadas para rastreamento de



                                                                      116
http://www.candidatoreal.com




                               requisitos s˜o as Matrizes de Rastreabibilidade (Traceability Matrix ), que usual-
                                           a
                               mente correlacionam requisitos com casos de testes, e t´cnicas de Referˆncias
                                                                                         e                 e
                               Cruzadas. Entre os produtos de mercado utilizadas para realizar gerenciamento
                               e rastreamento de requisitos podemos citar o Rational RequisitePro, Caliber-RM,
                               RTS e RDT.
http://www.candidatoreal.com




                                                                      117
http://www.candidatoreal.com




                               Cap´
                                  ıtulo 10

                               M´tricas
                                e

                               M´tricas devem ser coletadas de modo que os indicadores de processo e de
                                 e
                               produto possam ser determinados. Indicadores de processo permitem ` orga-
                                                                                                       a
                               niza¸˜o de engenharia de software ter id´ia da efic´cia de um processo existente
                                   ca                                  e         a
                               (o paradigma, as tarefas de engenharia de software, os produtos de trabalho e os
                               marcos de tempo). J´ os indicadores de projeto permitem ao gerente de projeto
                                                    a
                               de software:
                                  • Avaliar o status de um projeto em andamento.
                                  • Acompanhar riscos potenciais.
                                  • Descobrir ´reas-problemas anter que elas se tornem cr´
                                              a                                          ıticas.
                                  • Ajustar fluxo de trabalho ou tarefas.
                                  • Avaliar a capacidade da equipe de projeto de controlar a qualidade dos
                                    produtos do trabalho de software.
                                  Em alguns casos, as mesmas m´tricas podem ser usadas para determinar
                                                                   e
                               indicadores de projeto e de processo.


                               10.1      M´tricas de processo e aperfei¸oamento de
                                           e                           c
                                         processo de software
                               N´s medimos a efic´cia de um processo de software indiretamente. H´ usos
                                 o                   a                                                     a
                               p´blicos e privados de diferentes tipos de dados do processo. As m´tricas co-
                                 u                                                                     e
http://www.candidatoreal.com




                               letadas com base individual dever ser privadas e servir como indicador apenas
                               para o indiv´ ıduo. Exemplo de m´tricas privadas incluem porpor¸˜o de defeitos
                                                                  e                                ca
                               (por ind´ıviduo e por m´dulo) e erros encontrados durante o desenvolvimento.
                                                         o
                               M´tricas p´blicas geralmente assimilam informa¸˜es, que eram originalmente
                                  e        u                                       co
                               privadas. Porpor¸˜es de defeitos de projeto (absolutamente n˜o atribu´
                                                  co                                              a        ıveis a
                               um certo indiv´ ıduo), esfor¸o, tempo transcorrido e dados relacionados s˜o coleta-
                                                           c                                            a
                               dos e avaliados numa tentativa de sescobrir indicadores, que possam aperfei¸oar
                                                                                                             c
                               o desempenho do processo organizacional.
                                    H´ uma sutil diferen¸a entre erros e defeitos. Um defeito ocorre quando
                                     a                     c
                               atividades de garantia de qualidade deixam de descobrir um erro num produto
                               produzido durante o processo de software.

                                                                      118
http://www.candidatoreal.com




                                   `
                                   A medida que uma organiza¸˜o sente-se mais confort´vel, coletanto e usando
                                                                ca                      a
                               m´tricas de processo de software, a deriva¸˜o de indicadores simples d´ lugar
                                 e                                         ca                           a
                               a uma abordagem mais rigorosa, chamada melhoria estat´     ıstica do processo de
                               software (statistical software process improvemente, SPPI). Essencialmente, a
                               SSPI usa a an´lise de falhas de software para coletar informa¸˜o sobre todos
                                               a                                                ca
                               erros e defeitos. A an´lise de falhas funciona da seguinte maneira:
                                                      a

                                 1. Todos os erros e defeitos s˜o categorizados por origem (falha de especi-
                                                                a
                                    fica¸˜o, falha de l´gica, n˜o atendimento a padr˜es).
                                       ca             o       a                    o

                                 2. O custo para corrigir cada erro e defeito ´ registrado.
                                                                              e

                                 3. A quantidade de erros e defeitos de cada categoria ´ contada e ordenada
                                                                                       e
                                    de forma decrescente.
                                 4. O custo total de erros e defeitos de cada categoria ´ calculado.
                                                                                        e

                                 5. Os dados resultantes s˜o analisados, para descobrir as categorias que pro-
                                                          a
                                    duzem um maior custo para a organiza¸˜o.
                                                                           ca
                                 6. S˜o desenvolvidos planos para modificar o processo, com o objetivo de
                                     a
                                    eliminar (ou reduzir a freq¨ˆncia das) classes de erros e defeitos que s˜o
                                                               ue                                           a
                                    mais dispendiosas.

                               Para a organiza¸˜o dessas m´tricas s˜o utilizados o gr´fico de pizza que associa
                                                ca           e        a               a
                               os erros e defeitos `s suas origens e o diagrama espinha de peixe.
                                                   a


                               10.2      M´tricas de projeto
                                          e
                               As m´tricas de projeto s˜o usadas para evitar atrasos, avaliar a qualidade e n˜o
                                     e                  a                                                     a
                               ultrapassar os custos permitidos. A primeira aplica¸˜o das m´tricas de projeto,
                                                                                     ca        e
                               na maioria dos projetos de software, ocorre durante a estimativa. M´tricas  e
                               coletadas de projetos anteriores s˜o usadas como base e ` medida que o projeto
                                                                 a                       a
                               prossegue, medidas de esfor¸o e de tempo s˜o comparadas com as estimativas
                                                           c                 a
                               originais. Dessa maneira, o gerente do projeto monitora e controla o progresso.
                                   `
                                   A medida que o trabalho t´cnico se inicia, outras m´tricas de projeto come¸am
                                                            e                          e                     c
                               a ter importˆncia. A taxa de produ¸˜o, representada em termos de p´ginas de
                                            a                       ca                                  a
                               documenta¸˜o, horas de revis˜o, pontos por fun¸˜o e linhas de c´digo fonte
                                           ca                 a                    ca                 o
                                                      `
                               entregue, ´ medida. A medida que o software evolui, m´tricas t´cnicas s˜o
                                          e                                                  e        e       a
                               coletadas para avaliar a qualidade do projeto.
http://www.candidatoreal.com




                               10.3      Medi¸˜o de software
                                             ca
                               As medi¸˜es s˜o categorizadas em medidas diretas e indiretas. As medidas di-
                                        co     a
                               retas do processo de engenharia de software incluem custo, linhas de c´digo
                                                                                                        o
                               (lines of code, LOC) produzidas, velocidade de execu¸˜o, tamanho de mem´ria
                                                                                    ca                    o
                               e defeitos relatados durante um certo per´
                                                                        ıodo. Medidas indiretas do produto in-
                               cluem funcionalidade, qualidade, complexidade, eficiˆncia, confiabilidade, manuteni-
                                                                                  e
                               bilidade e muitas outras habilidades.




                                                                     119
http://www.candidatoreal.com




                               10.3.1    M´tricas orientadas a tamanho
                                          e
                               S˜o m´tricas baseadas em linhas de c´digo. M´tricas orientadas a tamanho
                                 a    e                              o        e
                               n˜o s˜o universalmente aceitas como o melhor modo de medir o processo de
                                 a a
                               desenvolvimento de software. Os opositores argumentam que essas m´tricas pe-
                                                                                                e
                               nalizam programas curtos e bem feitos e que medidas de LOC s˜o dep´ndentes
                                                                                            a     e
                               da linguagem de programa¸˜o. Por outro lado, existem muitos modelos de esti-
                                                         ca
                               mativas que usam LOC ou KLOC como entrada chave e essas m´tricas podem
                                                                                              e
                               ser facilmente coletadas. As m´tricas orientadas a tamanho mais utilizadas
                                                              e
                               incluem:
                                  • Erros por KLOC (milhares de linha c´digo).
                                                                       o
                                  • Defeitos por KLOC.
                                  • $ por LOC.
                                  • P´ginas de documenta¸˜o por KLOC.
                                     a                  ca
                                  • Erros por pessoa-mˆs.
                                                      e
                                  • LOC por pessoa-mˆs.
                                                    e
                                  • $ por p´gina de documenta¸˜o.
                                           a                 ca

                               10.3.2    M´tricas orientadas a fun¸˜o
                                          e                       ca
                               M´tricas de software orientadas a fun¸˜o usam uma medida da funcionalidade
                                  e                                   ca
                               entregue pela aplica¸˜o como valor de normaliza¸˜o.
                                                    ca                          ca
                                    Pontos por fun¸˜o s˜o calculados completando a tabela 10.1. Cinco carac-
                                                   ca a
                               ter´ısticas do dom´
                                                 ınio da informa¸˜o s˜o determinadas e as contagens s˜o reg-
                                                                ca a                                   a
                               istradas na tabela. Essas caracter´
                                                                 ısticas s˜o definidas da seguinte maneira:
                                                                          a
                               Quantidade de entradas do usu´rio. S˜o contadas as entradas do usu´rio
                                                                 a a                             a
                                   que fornecem dados distintos.
                               Quantidade de sa´ ıdas do usu´rio. S˜o contados telas, relat´rios, mensagens
                                                            a      a                       o
                                   de erros etc.
                               N´ mero de consultas do usu´rio. S˜o contadas consultas distintas. Uma
                                u                           a     a
                                   consulta ´ definida como um entrada que resulta na gera¸˜o de alguma
                                            e                                            ca
                                   resposta imediata.
                               Quantidade de arquivos. Cada grupo de dados l´gico (que pode ser parte
                                                                              o
                                   de uma base de dados maior ou um arquivo separado) ´ contado. Esses
                                                                                       e
http://www.candidatoreal.com




                                   grupos de dados tamb´m s˜o conhecidos como arquivos mestres l´gicos.
                                                       e   a                                    o
                               Quantidade de interfaces externas. Todas as interfaces em linguagem de
                                   m´quina (p. ex., arquivos de dados em um meio de armazenamento), que
                                     a
                                   s˜o usadas para transmitir informa¸˜o a outro sistema s˜o contadas.
                                    a                                ca                   a
                                   Uma vez coletados esses dados, um valor de complexidade ´ associado com
                                                                                           e
                               cada contagem. Para contar pontos por fun¸˜o (function points, FP), ´ usada
                                                                           ca                       e
                               a seguinte rela¸˜o:
                                              ca
                                   FP = total da contagem ×[0, 65 + 0, 01 × (Fi )]
                                   Os Fi s˜o valores de ajuste de complexidade, baseados nas respostas das
                                           a
                               seguintes perguntas:

                                                                    120
http://www.candidatoreal.com




                                Parˆmetro de medi¸˜o
                                   a             ca                   Contagem     Simples    M´dio
                                                                                               e       Complexo   Total

                                Quantidade de entradas do usu´rio
                                                             a                 x      3         4          6
                                Quantidade de sa´
                                                ıdas do usu´rio
                                                           a                   x      4         5          7
                                Quantidade de consultas do usu´rio
                                                              a                x      3         4          6
                                N´mero de arquivos
                                 u                                             x      7         10        15
                                Quantidade de interfaces externas              x      5         7         10

                                       Tabela 10.1: Tabelas das caracter´
                                                                        ısticas dos pontos de fun¸˜o
                                                                                                 ca

                                 1. O sistema requer salvamento (backup) e recupera¸˜o (recovery)?
                                                                                   ca
                                 2. Comunica¸˜es de dados s˜o necess´rias?
                                            co             a        a
                                 3. H´ fun¸˜es de processamento distribu´
                                     a    co                            ıdo?
                                 4. O desempenho ´ cr´
                                                 e ıtico?
                                 5. O sistema vai ser executado em um ambiente operacional existente, inten-
                                    samente utilizado?
                                 6. O sistema requer entradas de dados on-line?
                                 7. A entrada de dados on-line exige que a transa¸˜o de entrada seja con-
                                                                                 ca
                                    stru´ atrav´s de v´rias telas ou opera¸˜es?
                                        ıda    e      a                   co
                                 8. Os arquivos mestre s˜o atualizados on-line?
                                                        a
                                 9. As entradas, sa´
                                                   ıdas, arquivos ou consultas s˜o complexas?
                                                                                a
                                10. O processomento interno ´ complexo?
                                                            e
                                11. O c´digo ´ projetado para ser reusado?
                                       o     e
                                12. A convers˜o e a instala¸˜o est˜o inclu´
                                             a             ca     a       ıdas no projeto?
                                13. O sistema est´ projetado para instala¸˜es m´ltiplas em diferentes orga-
                                                 a                       co    u
                                    niza¸˜es?
                                        co
                                14. A aplica¸˜o est´ projetada para facilitar modifica¸˜es e para facilidade de
                                            ca     a                                 co
                                    uso pelo usu´rio?
                                                a
                                  Cada uma dessas quest˜es ´ respondida usando uma escala que varia entre 0 a
                                                         o e
http://www.candidatoreal.com




                               5. Os valores constantes e os fatores de peso podem ser ajustado empiricamente
                               para a equa¸˜o dos pontos de fun¸˜o. S˜o exemplos importantes de medidas de
                                           ca                    ca     a
                               produtividade, qualidade e outros atributos de software as m´tricas:
                                                                                             e
                                  • Erros por FP.
                                  • Defeitos por FP.
                                  • $ por FP.
                                  • P´ginas de documenta¸ao por FP.
                                     a                  c˜
                                  • FP por pessoa-mˆs.
                                                   e


                                                                     121
http://www.candidatoreal.com




                               10.3.3     M´tricas de pontos por fun¸ao estendidas
                                           e                        c
                               A medida de pontos por fun¸˜o foi originalmente projetada para ser usada
                                                                ca
                               em aplica¸˜es de sistemas de informa¸˜o comerciais. A medida de pontos por
                                          co                            ca
                               fun¸˜o ficou inadequada para muitos sistemas embutidos e de engenharia (que
                                   ca
                               enfatizam fun¸˜o e controle).
                                              ca
                                   Uma extens˜o de pontos por fun¸˜o, chamada pontos por caracter´
                                                a                     ca                             ıstica uti-
                               lizada em eplica¸˜es de software de sistemas. Para calcular pontos por carac-
                                                 co
                               ter´
                                  ıstica, valores de dom´ ınio de informa¸˜o s˜o novamente contados e ponder-
                                                                           ca a
                               ados. Al´m disso, a m´trica pontos por caracter´
                                         e              e                         ıstica trata uma nova carac-
                               ter´
                                  ısitca do software: algoritmos.
                                   Outra extens˜o de pontos por fun¸˜o, para sistemas em tempo real e pro-
                                                  a                     ca
                               dutos de engenharia, foi desenvolvida pela Boeing. Essa abordagem integra a
                               dimens˜o de dados do software com as dimens˜es funcional e de controle para
                                       a                                        o
                               forncer uma medida orientada a fun¸˜o, adequada a aplica¸˜es que enfatizam
                                                                       ca                    co
                               as capacidades de fun¸˜o e controle. Essa extens˜o ´ chamada de pontos por
                                                      ca                           a e
                               fun¸˜o 3D. As trˆs dimens˜es s˜o:
                                   ca             e         o    a
                               Dimens˜o de dados. Semelhante a contagem de pontos por fun¸˜o tradi-
                                      a                                                  ca
                                   cional.
                               Dimens˜o funcional. Considera a quantidade de opera¸˜es internas necess´rias
                                      a                                             co                a
                                   para transformar dados de entrada para transformar dados de entrada em
                                   sa´
                                     ıda.
                                      a              ´
                               Dimens˜o de controle. E medida contando a quantidade de transi¸˜es entre
                                                                                             co
                                   estados.


                               10.4      M´tricas de qualidade de software
                                          e
                               A medi¸˜o da qualidade de software ´ uma atividade de natureza subjetiva.
                                      ca                             e
                               Qualidade de software ´ uma mistura complexa de fatores que v˜o variar com
                                                      e                                      a
                               cada aplica¸˜o diferente e com os clientes que as encomendam. As principais
                                           ca
                               medidas s˜o mostradas a seguir:
                                         a

                               Corre¸˜o. A medida mais comum ´ defeitos por KLOC. Para fins de avalia¸˜o
                                    ca                          e                                    ca
                                   de qualidade, defeitos s˜o contados durante um per´
                                                           a                         ıodo padr˜o, tipica-
                                                                                              a
                                   mente um ano.

                               Manutenibilidade. Uma m´trica utilizada ´ o tempo m´dio para modica¸˜o
                                                          e                e          e               ca
http://www.candidatoreal.com




                                  (mean-time-to-change, MTTC), que ´ o tempo despendido para analisar o
                                                                        e
                                  pedido de modifica¸˜o, projetar uma modifica¸˜o adequada, implementar
                                                      ca                         ca
                                  a modifica¸˜o, test´-la e distribu´ para todos os usu´rios. Outra m´trica
                                            ca       a             ı-la               a             e
                                  ´ chamada preju´ - custo para corrigir defeitos encontrados depois que
                                  e                ızo
                                  o software foi entregue a seus usu´rios finais.
                                                                     a
                                              ´
                               Integridade. E a capacidade do sistema resistir ` ataques (tanto acidentais
                                                                                 a
                                    quanto intencionais). Amea¸a ´ a probabilidade de um ataque ocorrer
                                                                  c e
                                    dentro de um certo per´              c ´
                                                            ıodo. Seguran¸a. E a probabilidade de um ataque
                                    ser repelido. A integridade do sistema pode ser ent˜o definido como inte-
                                                                                       a
                                    gridade =     (1 − ameaca) × (1 − seguranca).



                                                                     122
http://www.candidatoreal.com




                               Utiliza¸˜o. Se ´ amig´vei ao uso. Pode ser medida em quatro t´picos: (1)
                                      ca       e      a                                             o
                                    aptid˜o f´
                                         a ısica ou intelectual necess´ria para aprender a lidar com o sistema,
                                                                      a
                                    (2) o tempo necess´rio para se tornar moderadamente eficiente no uso
                                                        a
                                    do sistema, (3) o aumento l´ ıquido de produtividade e (4) uma avalia¸˜oca
                                    subjetiva das atitudes dos usu´rios com rela¸˜o ao sistema.
                                                                   a             ca

                                   Outra medi¸˜o muito utilizada ´ a eficiˆncia na remo¸˜o de defeitos defect
                                              ca                    e       e             ca
                               removal efficiency, DRE). A DRE ´ uma medida da capacidade de filtragem das
                                                                  e
                               atividades de controle e garantia de qualidade de software, ` medida que s˜o
                                                                                              a              a
                               aplicadas. A f´rmula utilizada ´ DRE = E/(E + D). Onde E ´ a quantidade
                                             o                 e                                 e
                               de erros encontrados e D a quantidade de defeitos.
                                   As principais formas de classificar fatores de qualidade s˜o apresentadas nas
                                                                                            a
                               subse¸˜es a seguir.
                                     co

                               10.4.1     Fatores de qualidade de McCall
                               Os fatores de qualidade de McCall concentram-se nos trˆs aspectos importantes
                                                                                         e
                               de um produto de software: suas caracter´  ısticas operacionais, sua habilidade de
                               passar por modifica¸˜es e sua adaptabilidade a novos ambientes. A seguir s˜o
                                                    co                                                         a
                               listados esses aspectos e os seus respectivos fatores:
                               Opera¸˜o do produto. Corre¸˜o, confiabilidade, utiliza¸˜o, integridade e eficiˆncia.
                                    ca                   ca                         ca                     e
                               Revis˜o do produto. Mantenabilidade, flexibilidade e testabilidade.
                                    a

                               Transi¸˜o do produto. Portabilidade, reutiliza¸˜o e interoperabilidade.
                                     ca                                      ca
                                   ´
                                   E dif´ desenvolver medidas diretas desses fatores. Assim, um conjunto de
                                        ıcil
                               m´tricas ´ definido e usado para desenvolver express˜es para cada um dos fatores
                                 e       e                                         o
                               de acordo com a seguinte rela¸˜o: Fq = c1 × m1 + c2 × m2 ... + cn × mn , em que
                                                             ca
                               Fq ´ um fator de qualidade de software, cn s˜o coeficientes de regress˜o, mn s˜o
                                   e                                       a                        a         a
                               as m´tricas que afetam o fator de qualidade. Infelizmente, muitas das m´tricas
                                     e                                                                   e
                               definidas podem ser medidas apenas sunjetivamente. As m´tricas podem estar
                                                                                           e
                               em forma de checklist que ´ usada para atribuir um grau a atributos espec´
                                                         e                                                 ıficos
                               do software. O peso atribu´ a cada m´trica ´ dependente de produtos e
                                                            ıdo           e      e
                               preocupa¸˜es locais.
                                         co

                               10.4.2     FURPS
                               A Hewlett-Packard desenvolveu um conjunto de fatores de qualidade que re-
                               cebeu a sigla FURPS: funcionalidade, utiliza¸˜o, confiabilidade, desempenho e
                                                                           ca
http://www.candidatoreal.com




                               suportabilidade. Esses fatores podem ser definidos da seguinte maneira:

                               Funcionalidade. Avaliada pelo conjunto de caracter´
                                                                                 ısticas e capacidades do
                                   programa.

                               Utiliza¸˜o. Avaliada considerando fatores humanos como est´tica, consistˆncia
                                      ca                                                 e             e
                                    e documenta¸˜o.
                                                ca
                               Confiabilidade. Avaliada medindo a freq¨ˆncia e a severidade das falhas, a
                                                                         ue
                                   precis˜o dos resultados de sa´
                                         a                      ıda, o tempo m´dio entre falhas (MTTF), a
                                                                               e
                                   capacidade de recupera¸˜o de falhas e previsibilidade do programa.
                                                          ca



                                                                      123
http://www.candidatoreal.com




                               Desempenho. Medido pela velocidade de processamento, tempo de resposta,
                                   consumo de recursos, throughput e eficiˆncia.
                                                                         e

                               Suportabilidade. Combina a capacidade de estender o programa (estensibili-
                                   dade), adaptabilidade e reparabilidade.

                               10.4.3     ISO 9126
                               A norma da ISO identifica seis atributos-chave de qualidade:

                               Funcionalidade. Grau com que o software satisfaz as necessidades declaradas
                                   com os subatributos - adequabilidade, precis˜o, interoperabilidade, atendibil-
                                                                               a
                                   idade e seguran¸a.
                                                  c
                               Confiabilidade. Per´ıodo de tempo em que o software est´ dispon´ para uso
                                                                                       a       ıvel
                                   com os subatributos - maturidade, tolerˆncia a falha e recuperabilidade
                                                                          a
                               Utiliza¸˜o. Grau em que o software ´ f´cil de usar com os subatributos -
                                      ca                                e a
                                    inteligibilidade, adestrabilidade e operabilidade.
                               Eficiˆncia. Grau em que o software faz uso otimizado dos recursos do sistema
                                   e
                                    com os subatributos - comportamento em rela¸˜o ao tempo e comporta-
                                                                                ca
                                    mento em rela¸˜o aos recursos.
                                                 ca
                               Mantenabilidade. Facilidade com a qual podem ser feitos reparos no soft-
                                   ware com os subatributos - analisabilidade, mutabilidade, estabilidade e
                                   testabilidade.

                               Portabilidade. Facilidade com a qual o software pode ser transposto de um
                                   ambiente para outro com os subatributos - adaptabilidade, instabilidade,
                                   conformidade e permutabilidade.

                                   Esses fatores n˜o necessariamente se prestam a medidas diretas. No entanto,
                                                  a
                               fornecem de fato uma base valiosa para medidas indiretas e uma excelente lista
                               de verifica¸˜o para avaliar a qualidade de um sistema.
                                          ca


                               10.5      Estimativas
                               Muitas vezes, as estimativas s˜o feitas usando-se a experiˆncia passada como
                                                              a                            e
                               unico guia. Mas se um novo projeto for totalmente diferente dos projetos re-
                               ´
                               alizados at´ o momento? Assim, apenas a experˆncia passada talvez n˜o seja
                                          e                                     e                     a
http://www.candidatoreal.com




                               suficiente. V´rias t´cnicas de estimativa est˜o dispon´
                                            a     e                        a         ıveis. Embora cada uma
                               tenha suas particularidades, todas tˆm os seguintes atributos:
                                                                   e
                                 1. O escopo do projeto deve estar estabelecido.

                                 2. M´tricas de software s˜o utilizadas e o hist´rico ´ usado como uma base
                                      e                   a                     o     e
                                    a partir da qual estimativas s˜o feitas.
                                                                  a

                                 3. O projeto ´ dividido em pequenas partes que s˜o estimadas individual-
                                              e                                  a
                                    mente.




                                                                     124
http://www.candidatoreal.com




                               10.5.1     COCOMO (Constructive Cost Model)
                               O COCOMO ´ o modelo de estimativa emp´
                                             e                      ırico mais utilizado na ind´stria.
                                                                                               u
                               Existem trˆs modelos neste m´todo:
                                         e                 e

                                           a       ´
                               COCOMO B´sico. E um modelo est´tico de valor simples que computa o
                                                                   a
                                  esfor¸o (e custo) de desenvolvimento de software como uma fun¸˜o do
                                       c                                                       ca
                                  tamanho de programa expresso em linha de c´digo estimadas.
                                                                              o

                               COCOMO Intermedi´rio. Computa o esfor¸o de desenvolvimento de soft-
                                                     a                     c
                                  ware como uma fun¸˜o do tamanho do programa e de um conjunto de
                                                       ca
                                  direcionadores de custo que incluem avalia¸˜es subjetivas do produto, do
                                                                            co
                                  hardware, do pessoal e dos atributos do projeto.
                               COCOMO Avan¸ado. Incorpora todas as caracter´
                                               c                                    ısticas da vers˜o inter-
                                                                                                   a
                                  medi´ria, com uma avalia¸˜o do impacto dos direcionadores de custo sobre
                                      a                     ca
                                  cada passo (an´lise, projeto, etc.) do processo de engenharia de software.
                                                 a
                                  O COCOMO classifica os projetos em trˆs tipos:
                                                                      e
                               Modelo orgˆnico (ou convencional). Projetos de software simples, relati-
                                          a
                                  vamente pequenos, nos quais pequenas equipes com boa experiˆncia em
                                                                                                   e
                                  aplica¸˜es trabalham num conjunto de requisitos n˜o t˜o r´
                                        co                                           a a ıgidos. Outras
                                  caracter´ısticas: ambiente est´vel de desenvolvimento, algoritmos simples,
                                                                a
                                  prˆmio relativamente baixo para t´rmino antes do prazo, tamanho relati-
                                    e                                 e
                                  vamente pequeno, projetos na faixa de 50.000 linhas de c´digo.
                                                                                            o

                               Modelo semidestacado (ou difuso). Projeto de software intermedi´rio (em
                                                                                                  a
                                  tamanho e complexidade) onde a equipe mescla grande e pouca experiˆncia
                                                                                                    e
                                  com aplica¸˜es, grande e pouca experiˆncia com a tecnologia, o tamanho
                                            co                           e
                                  dos software varia at´ 300.000 linhas de c´digo.
                                                       e                    o
                               Modelo embutido (ou restrito). Um projeto que deve ser desenvolvido den-
                                  tro de um conjunto r´
                                                      ıgido de restri¸˜es operacionais, de hardware e de
                                                                     co
                                  software.

                                  O COCOMO II, assim como o seu predecessor ´ na verdade uma hierarquia
                                                                            e
                               de modelos que trata das seguintes ´reas:
                                                                  a

                               Modelo de composi¸˜o de aplica¸˜o. Usado durante os primeiros est´gios
                                                ca           ca                                 a
                                  do processo.

                               Modelo do primeiro est´gio de projeto. Usado ap´s os requisitos terem
                                                         a                            o
http://www.candidatoreal.com




                                  sido estabilizados e a arquitetura b´sica do software ter sido estabelecida.
                                                                      a

                               Modelo para o est´gio ap´s a arquitetura. Usado durante a constru¸˜o do
                                                a      o                                        ca
                                  software.
                                   O COCOMO II usa pontos por objeto. Como pontos por fun¸˜o, o pontos por
                                                                                                ca
                               objeto ´ uma medida indireta de software que ´ calculada usando-se a contagem
                                       e                                       e
                               da quantidade de telas (na interface com o usu´rio, relat´rios e componentes.
                                                                                 a         o
                               Cada instˆncia de objeto em um dos trˆs n´
                                         a                            e ıveis de complexidade (simples, m´dio,
                                                                                                            e
                               dif´
                                  ıcil). Essencialmente, a complexidade ´ fun¸˜o da quantidade e fonte das
                                                                           e     ca
                               tabelas de dados do cliente e servidores, que s˜o necess´rias para gerar a tela ou
                                                                              a        a


                                                                      125
http://www.candidatoreal.com




                               relat´rio, e da quantidade de vistas ou se¸˜es apresentadas como parte da tela
                                    o                                     co
                               ou relat´rio.
                                       o
                                   Deve-se notar que outros modelos de estimativa mais sofisticados (usando
                               FP e KLOC) tamb´m est˜o dispon´
                                                  e      a         ıveis como parte do COCOMO II.
http://www.candidatoreal.com




                                                                    126
http://www.candidatoreal.com




                               Cap´
                                  ıtulo 11

                               Testes

                               Teste ´ um processo de execu¸˜o de um programa com a finalidade de encontrar
                                     e                      ca
                               um erro. Os teses podem ser planejados e projetados antes que qualquer c´digo
                                                                                                         o
                               tenha sido gerado. Os primeiros testes planejados e executados geralmente
                                                                             `
                               concentram-se nos componentes individuais. A medida que o teste progride, o
                               foco se desloca numa tentativa de encontrar erros em conjuntos integrados de
                               componente e finalmente em todo o sistema.
                                   A testabilidade de software ´ a facilidade com que o programa pode ser
                                                                e
                               testado. Existem m´tricas que podem medir a testabilidade do software.
                                                    e
                                   Quando o software para computador ´ considerado, teste caixa-preta refere-
                                                                        e
                               se a testes que s˜o conduzidos na interface do software.
                                                a
                                   Um teste de caixa-branca ´ baseado num exame rigoroso do detalhe pro-
                                                              e
                               cedimental. Caminhos l´gicos internos do software s˜o testados, definindo ca-
                                                        o                           a
                               sos de testes que exercitam conjuntos espec´ıficos de condi¸˜es ou ciclos. Teste
                                                                                         co
                               caixa-branca completo ´ imposs´
                                                       e        ıvel para grandes sistemas de software. Um
                               teste caixa-branca n˜o deve, no entanto, ser descartado como n˜o pr´tico. Um
                                                    a                                          a    a
                               n´mero limitado de caminhos l´gicos importantes pode ser selecionado e exerci-
                                u                             o
                               tado. H´ trˆs motivos importantes pelos quais se deve usar testes caixa-branca:
                                       a e
                                  • Os erros tendem a ocorrer em condi¸˜es ou controle que est˜o fora da
                                                                      co                      a
                                    fun¸˜o principal.
                                       ca
                                  • Freq¨entemente acreditamos que um caminho l´gico n˜o ´ prov´cel de ser
                                        u                                         o      a e     a
                                    executado quando, na realidade, ele pode ser executado em base regular.
                                    ´
                                  • E prov´vel que um erro tipogr´fico exista tanto num caminho l´gico ob-
                                           a                     a                              o
http://www.candidatoreal.com




                                    scuro quanto num caminho principal.


                               11.1      Teste de caminho b´sico
                                                           a
                               Teste de caminho b´sico ´ uma t´cnica de teste caixa-branca proposta inicial-
                                                  a      e      e
                               mente por Tom McCabe. O m´todo de caminho b´sico permite ao projetista
                                                              e                  a
                               de casos de teste originar uma medida da complexidade l´gica de um projeto
                                                                                       o
                               procedimental e usar essa medida como guia para definir um conjunto b´sico
                                                                                                       a
                               de caminhos de execu¸˜o. Casos de testes derivados para exercitar o conjunto
                                                     ca
                               b´sico executam garantidamente cada comando programa pelo menos uma vez
                                a
                               durante o teste.

                                                                    127
http://www.candidatoreal.com




                                   O grafo de fluxo mostra mostra o fluxo de controle l´gico. Cada n´ do
                                                                                         o               o
                               grafo de fluxo representa um ou mais comando procedimentais. As arestas
                               representam o fluxo de controle. As ´reas dlimitadas por arestras e n´s s˜o
                                                                     a                                 o a
                               chamadas regi˜es. Cada n´ que cont´m uma condi¸˜o ´ chamado de n´ predicado
                                             o           o        e             ca e              o
                               e ´ caracterizada por duas ou mais arestas saindo dele.
                                 e
                                   Complexidade ciclom´tica ´ a m´trica de software que fornce uma medida
                                                        a    e     e
                               quantitativa da complexidade l´gica do programa. O valor calculado para a
                                                               o
                               complexidade ciclom´tica define o n´mero de caminhos independentes no con-
                                                    a              u
                               junto base de um programa e nos fornece um limite superior para a quantidade
                               de testes que deve ser conduzida para garantir que todos os comandos tenho
                               sido executados pelo menos uma vez.
                                   Um caminho independente ´ qualquer caminho ao longo do programa que
                                                              e
                               introduz pelo menos um novo conjunto de comandos de processamento ou uma
                               nova condi¸˜o. Um conjunto-base ´ um conjunto de caminhos em que todo
                                          ca                       e
                               comando do programa ter´ sido garantidamente executado pelo menos uma vez
                                                         a
                               e cada condi¸˜o ter´ sido executada no seu lado verdadeiro e no seu lado falso.
                                            ca    a
                                   A complexidade ciclom´tica ´ calculada de trˆs maneiras:
                                                          a    e               e
                                 1. O n´mero de regi˜es do grafo de fluxo.
                                       u            o
                                 2. V (G) = E − N + 2 em que E ´ o n´mero de arestas e N o n´mero de n´s.
                                                               e    u                       u         o
                                 3. V (G) = P + 1 em que P ´ o n´mero de n´s predicados.
                                                           e    u         o
                                  Os seguintes passos podem ser aplicados para deriva¸˜o de casos de teste:
                                                                                     ca
                                 1. Usando o projeto ou c´digo como base, desenhe o grafo de fluxo corre-
                                                         o
                                    spondente.
                                 2. Determine a complexidade ciclom´tica do grafo de fluxo resultante.
                                                                   a
                                 3. Determine um conjunto-base de caminhos linearmente independentes.
                                 4. Prepare casos de teste que v˜o for¸ar a execu¸˜o de cada caminho do
                                                                a     c          ca
                                    conjunto-base.
                                   Uma matriz de grafo ´ uma matriz quadrada, cujo n´mero de colunas e
                                                         e                                 u
                               linhas ´ igual ao n´mero de n´s do grafo de fluxo. Adicionando um peso de
                                      e            u          o
                               liga¸˜o a cada entrada da matriz, a matriz de grafo pode tornar-se uma possante
                                   ca
                               ferramenta para avaliar a estrutura de controle do programa durante o teste.
                               Em sua forma mais simples, o peso da liga¸˜o ´ 1 (existe uma conex˜o) ou
                                                                             ca e                       a
                               0 (n˜o existe uma conex˜o). Outros pesos podem ser atribu´
                                    a                   a                                      ıdos com outras
http://www.candidatoreal.com




                               propriedades:
                                  • A probabilidade de que uma liga¸˜o (aresta) ser´ executada.
                                                                   ca              a
                                  • O tempo de processamento gasto durante o percurso de uma liga¸˜o.
                                                                                                 ca
                                  • A mem´ria necess´ria durante o percurso de uma liga¸˜o.
                                         o          a                                  ca
                                  • Os recursos necess´rios durante o percurso de uma liga¸˜o.
                                                      a                                   ca
                                   Existem algoritmos que podem ser aplicados `s matrizes de grafo. Usando
                                                                                   a
                               essaas t´cnicas, a an´lise necess´ria para projetar casos de teste pode ser parcial
                                       e            a           a
                               ou totalmente automatizada.

                                                                      128
http://www.candidatoreal.com




                               11.2       Teste de estrutura de controle
                               A t´cnica de teste de estrutura de controle ampliam a cobertura da t´cnica de
                                   e                                                               e
                               teste de caminho b´sico e melhoram a qualidade do teste caixa-branca.
                                                  a

                               11.2.1     Teste de condi¸˜o
                                                        ca
                               Teste de condi¸˜o ´ um m´todo de projeto de caso de teste que exercita as
                                              ca e          e
                               condi¸˜es l´gicas contidas em um m´dulo de programa. Uma condi¸˜o simples
                                    co o                            o                             ca
                               ´ uma vari´vel booleana ou uma express˜o relacional, possivelmente precedida
                               e          a                             a
                               por um operador de nega¸˜o. Uma condi¸˜o composta ´ composta de duas ou
                                                          ca             ca            e
                               mais condi¸˜es simples, operadores booleanos e parˆnteses.
                                          co                                      e
                                  Diversas estrat´gias para teste de condi¸˜o tˆm sido propostas. O teste de
                                                  e                        ca e
                               desvio ´ provavelmente a estrat´gia de teste de condi¸˜o mais simples. Para
                                      e                         e                     ca
                               uma condi¸˜o composta C, os ramos verdadeiro e falso de C e cada condi¸˜o
                                          ca                                                              ca
                               simples de C precisam ser executadas pelo menos uma vez.
                                  O teste de dom´  ınio requer que trˆs ou quatro testes sejam derivados para
                                                                      e
                               uma express˜o relacional. Para uma express˜o relacional da forma
                                            a                               a

                                                    E1 < operador − relacional > E2

                               trˆs testes s˜o necess´rios para tornar o valor de E1 maior que, igual a, ou menor
                                 e          a        a
                               que o de E2 .
                                   Para uma express˜o booleana com n vari´veis, todos os 2n poss´
                                                      a                        a                       ıveis testes
                               s˜o necess´rios (n > 0), mas ´ pr´tica somente quando n ´ pequeno.
                                a         a                    e a                         e
                                   Caso uma express˜o booleana seja singular (na qual cada vari´vel ocorre
                                                       a                                              a
                               apenas uma vez), h´ como gerar um conjunto de testes com menos do que 2n
                                                    a
                               testes tal que esse conjunto de testes garante a detec¸˜o de erros de operadores
                                                                                       ca
                               booleanos m´ltiplos e ´ tamb´m efetivo para detectar outros erros. Uma delas ´
                                             u         e      e                                                   e
                               a t´cnica de teste de desvio e operador relacional (branch and relational operator,
                                  e
                               BRO). Ela usa restri¸˜es de condi¸˜o para uma condi¸˜o C. Uma restri¸˜o de
                                                      co            ca                  ca                  ca
                               condi¸˜o para C com n condi¸˜es simples ´ definida como (D1 , D2 , . . . , Dn ),
                                     ca                         co            e
                               em que Di (0 < i ≤ n) ´ um s´
                                                           e       ımbolo que especifica uma restri¸˜o sobre o
                                                                                                     ca
                               resultado da i-´sima condi¸˜o simples da condi¸˜o C. Diz-se que uma restri¸˜o
                                               e           ca                    ca                            ca
                               de condi¸˜o D para uma condi¸˜o C ´ coberta por uma execu¸˜o de C se,
                                         ca                       ca     e                          ca
                               durante a execu¸˜o de C, o resultado de cada condi¸˜o simples de C satisfaz a
                                                 ca                                   ca
                               correspondente restri¸˜o em D. N˜o entendeu nada? Como exemplo, considere
                                                      ca            a
                               a condi¸˜o:
                                       ca

                                                                C1 : B1 &B2
http://www.candidatoreal.com




                               em que B1 e B2 s˜o vari´veis booleanas. A restri¸˜o de condi¸˜o para C1 ´
                                                      a        a                          ca          ca          e
                               da forma (D1 , D2 ), em que cada um de D1 e D2 ´ t ou f . O valor (t, f ) ´
                                                                                          e                       e
                               uma restri¸˜o de condi¸˜o para C1 . A estrat´gia de teste BRO exige que o
                                            ca              ca                       e
                               conjunto de restri¸˜es {(t, t), (t, f ), (f, t)} seja coberto pelas execu¸˜es de C1 .
                                                     co                                                  co
                               Se C1 est´ incorreto, pelo menos uma das condi¸˜es do conjunto vai fazer C1
                                          a                                            co
                               falhar. Outro exemplo: C2 : B1 &(E3 = E4 ) possui o conjunto de restri¸˜es      co
                               {(t, =), (f, =), (t, <), (t, >)}, sendo E3 e E4 express˜es aritm´ticas.
                                                                                         o       e




                                                                       129
http://www.candidatoreal.com




                               11.2.2    Teste de fluxo de dados
                               O met´do de teste de fluxo de dados seleciona caminhos de teste de um pro-
                                      o
                               grama de acordo com a localiza¸˜o das defini¸˜es e do uso das vari´veis no
                                                                 ca            co                     a
                               programa. Para ilustrar a abordagem de teste de fluxo de dados, considere que
                               cada comando de um programa ´ atribu´ um n´mero de comando unico e
                                                                 e         ıdo      u                   ´
                               que cada fun¸˜o n˜o modifica seus parˆmetros ou vari´veis globais. Para um
                                             ca a                        a             a
                               comando com S como seu n´mero de comando,
                                                            u
                                  DEF (S) = {X/comando S cont´m uma defini¸˜o de X}
                                                                    e              ca
                                  U SO(S) = {X/comando S cont´m um uso de X}
                                                                    e
                                  Se o comando S ´ um comando se ou de ciclo, seu conjunto DEF ´ vazio e
                                                    e                                                 e
                               seu conjunto USO ´ baseado na condi¸˜o do comando S. A defini¸˜o da vari´vel
                                                  e                   ca                       ca         a
                               X no comando S ´ considerada como estando viva no comando S ′ se existe um
                                                 e
                               caminho do comando S para o comando S ′ que n˜o cont´m qualquer outra
                                                                                     a    e
                               defini¸˜o de X.
                                     ca
                                  Uma cadeia defini¸˜o-uso (DU) da vari´vel X ´ da forma [X, S, S ′ ] em que S
                                                     ca                     a    e
                               e S s˜o n´meros de comandos, X pertence a DEF (S) e U SO(S ′ ), e a defini¸˜o
                                  ′
                                     a u                                                                   ca
                               de X no comando S est´ viva no comando S ′ .
                                                        a
                                  A estrat´gia de teste DU exige que cada cadeia DU seja coberta pelo menos
                                           e
                               uma vez. Foi mostrado que o teste DU n˜o cobre todos os ramos em situa¸˜es
                                                                           a                              co
                               raras. A abordagem de teste de fluxo de dados ´ efetiva para detec¸˜o de erros.
                                                                               e                 ca
                               No entanto, os problemas de medida da cobertura e de sele¸˜o dos caminhos
                                                                                            ca
                               de teste s˜o mais dif´
                                         a          ıceis do que os problemas correspondentes para o teste de
                               condi¸˜o.
                                     ca

                               11.2.3     Teste de ciclo
                               Teste de ciclo ´ uma t´cnica de teste caixa-branca que focaliza exclusivamente
                                              e      e
                               a validade de constru¸˜es de ciclo. Quatro diferentes classes de ciclos podem
                                                    co
                               ser definidas:
                               Ciclos simples. O seguinte conjunto de teste pode ser aplicado a ciclos simples
                                    em que n ´ o n´mero m´ximo de passagens permitidas no ciclo.
                                             e    u        a
                                      1. Pule o ciclo completamente.
                                      2. Apenas uma passagem pelo ciclo.
                                      3. Duas passagens pelo ciclo.
                                      4. m passagens pelo ciclo em que m < n.
                                      5. n − 1, n, n + 1 passagens pelo ciclo.
http://www.candidatoreal.com




                               Ciclos aninhados. Seria muito complicado adotar as mesmas t´cnicas de cic-
                                                                                          e
                                    los simples neste caso. Uma abordagem ´ sugerida:
                                                                          e
                                      1. Comece no ciclo mais interno. Ajuste todos os outros cilos para o
                                         valores m´
                                                  ınimos.
                                      2. Conduze testes de ciclo simples para o ciclo mais interno enquanto
                                         mant´m os ciclos externo nos seus valores m´
                                             e                                       ınimos de itera¸˜o.
                                                                                                    ca
                                      3. Trabalhe em dire¸ao ao extereior, conduzindo testes para o ciclo
                                                         c˜
                                         seguinte.
                                      4. Continue at´ que todos os ciclos tenham sido testados.
                                                    e

                                                                      130
http://www.candidatoreal.com




                               Ciclos concatenados. A mesma abordagem para o ciclo simples a menos que
                                    o mesmo contador ´ utilizado nos ciclos concatenados. Neste caso, ´ re-
                                                     e                                                e
                                    comendada a abordagem a ciclos aninhados.
                               Ciclos desestruturados. Sempre que poss´
                                                                      ıvel essa classe de ciclos deve ser
                                    reprojetada.


                               11.3      Teste caixa-preta
                               Um teste caixa-preta, tamb´m chamado de teste comportamental, focaliza os req-
                                                          e
                               uisitos funcionais do software. O teste caixa-preta tende a ser aplicado durante
                               os ultimos est´gios do teste.
                                  ´          a

                               11.3.1     M´todos de teste baseados em grafo
                                           e
                               Os objetos que est˜o modelados no software e as rela¸˜es que conectam esses
                                                  a                                   co
                               objetos s˜o utilizadas para criar um grafo. Os n´s representam os objetos, as
                                         a                                       o
                               arestas representam as liga¸˜es, os pesos de n´ descrevem as propriedade de um
                                                          co                 o
                               objeto, assim como os pesos das arestas representam propriedades das liga¸˜es.
                                                                                                         co
                               Uma liga¸˜o direcionada (representada por uma seta) indica que a rela¸˜o se
                                         ca                                                             ca
                               move em apenas uma dire¸˜o. Liga¸˜es paralelas s˜o usadas quando diversas
                                                          ca        co              a
                               rela¸˜es s˜o estabelecidas entre os n´s.
                                   co    a                          o
                                   Os m´todos de teste de comportamento que podem fazer usos de grafos s˜o:
                                        e                                                                  a
                               Modelagem de fluxo de transa¸˜o. Os n´s representam passos em alguma
                                                               ca       o
                                  transa¸˜o e as arestam representam conex˜es l´gicas.
                                        ca                                o o
                               Modelagem de estado finito. Os n´s representam diferentes estados do soft-
                                                                  o
                                  ware observ´veis pelo usu´rio e as aresta representam as transi¸˜es.
                                             a             a                                     co
                               Modelagem do fluxo de dados. Os n´s s˜o objetos de daods e as liga¸˜es
                                                                  o a                            co
                                  s˜o transforma¸˜es que ocorrem para traduzir um objeto de dados em
                                   a            co
                                  outro.

                               11.3.2     Particionamento de equivalˆncia
                                                                    e
                               O particionamento de equivalˆncia ´ um m´todo de teste caixa-preta que divide
                                                           e     e      e
                               o dom´ ınio de entrada de um programa em classes de dados, das quais casos
                               de teste podem ser derivados. Uma classe de equivalˆncia representa um con-
                                                                                  e
                               junto de estados v´lidos ou inv´lidos para condi¸˜es de entrada. Classes de
                                                   a          a                co
http://www.candidatoreal.com




                               equivalˆncia podem ser definidas de acordo com as seguintes diretrizes:
                                       e
                                 1. Se uma condi¸˜o de entrada especifica um intervalo, uma classe de equivalˆncia
                                                 ca                                                         e
                                    v´lida e duas inv´lidas s˜o definidas.
                                     a               a       a
                                 2. Se uma condi¸˜o de entrada exige um valor espec´
                                                  ca                                   ıfico, uma classe de
                                    equivalˆncia v´lida e duas inv´lidas s˜o definidas.
                                           e      a               a       a
                                 3. Se uma condi¸˜o de entrada especifica um membro de um conjunto, uma
                                                  ca
                                    classe de quivalˆncia v´lida e uma inv´lida s˜o definidas.
                                                    e      a              a      a
                                 4. Se uma condi¸˜o de entrada ´ booleana, uma classe de equivalˆncia v´lida
                                                 ca             e                               e      a
                                    e uma inv´lida s˜o definidas.
                                             a      a

                                                                     131
http://www.candidatoreal.com




                                  Um elemento pode ter mais de uma condi¸˜o de entrada. Por exemplo,
                                                                              ca
                               considere uma entrada de senha , h´ condi¸˜o de entrada booleana (pode estar
                                                                  a     ca
                               ou n˜o presente) e condi¸˜o de entrada de valor (cadeia de seis caracteres).
                                   a                   ca

                               11.3.3     An´lise de valor limite
                                            a
                               Um grande n´mero de erros tende a ocorrer nas fronteiras do dom´
                                             u                                                         ınio de en-
                                       ´
                               trada. E por essa raz˜o que a an´lise de valor-limite (boundary value analysis,
                                                      a           a
                               BVA) foi desenvolvida como t´cnica de teste.
                                                               e
                                  A BVA leva ` sele¸˜o de casos de teste nas bordas da classe. Em vez de
                                                 a     ca
                               focalizar somente as condi¸˜es de entrada, a BVA deriva casos de teste tamb´m
                                                           co                                                  e
                               para o dom´ ınio de sa´
                                                     ıda.
                                  Se uma condi¸˜o de entrada especifica um intervalo ou um valor limitado
                                                 ca
                               pelos valores a e b, casos de teste devem ser projetados com os valores a e b e
                               imediatamente acima e imediatamente abaixo de a e b. O mesmo vale para as
                               condi¸˜es de sa´
                                     co        ıda. Se as estruturas de dados tˆm limites prescritos, certifique-se
                                                                               e
                               de projetar um caso de teste para exercitar a estrutura de dados no seu limite.

                               11.3.4     Teste de compara¸˜o
                                                          ca
                               Quando um software redundante ´ desenvolvido (para aplica¸˜es cr´
                                                                 e                          co    ıticas), equipes
                               de engenheiros de software separadas desenvolvem vers˜es independentes de uma
                                                                                      o
                               aplica¸˜o usando a mesma especifica¸˜o. Em tais situa¸˜es, cada vers˜o pode
                                     ca                               ca                 co             a
                               ser testada com os mesmos dados de teste para garantir que todas fornecem
                               sa´ idˆntica. Depois, todas as vers˜es s˜o executadas em paralelo com com-
                                 ıda e                                o  a
                               para¸˜o em tempo real para garantir consistˆncia. Essas vers˜es independentes
                                    ca                                      e                 o
                               formam a base da t´cnica de teste caixa-preta chamada teste de compara¸˜o ou
                                                    e                                                     ca
                               teste de emparelhamento.
                                   Quando m´ltiplas implementa¸˜es da mesma especifica¸˜o tivem sido pro-
                                              u                    co                       ca
                               duzidas, casos de teste projetadados usando outras t´cnicas de caixa-preta
                                                                                         e
                               fornecem entradas a cada vers˜o do software. Se a sa´ de cada vers˜o ´ a
                                                               a                        ıda                a e
                               mesma, ´ considerado que todas as implementa¸˜es est˜o corretas. Se a sa´ ´
                                        e                                      co      a                    ıda e
                               diferente, cada uma das aplica¸˜es ´ investigada para determinar se um defeito
                                                              co e
                               em uma ou mais vers˜es ´ respons´vel pela diferen¸a.
                                                      o e          a               c
                                   O teste de compara¸˜o n˜o ´ a toda prova, se a especifica¸˜o estiver errada,
                                                       ca a e                                 ca
                               todas as vers˜es ir˜o provavelmente refletir o erro. Al´m disso, se cada uma das
                                            o     a                                  e
                               vers˜es independentes produzir resultados idˆnticos mas incorretos, o teste de
                                   o                                         e
                               compara¸˜o vai falhar na detec¸˜o do erro.
                                        ca                     ca
http://www.candidatoreal.com




                               11.3.5     Teste de matriz ortogonal
                               Teste de matriz ortogonal pode ser aplicado a problemas nos quais o dom´  ınio
                               de entrada ´ relativamente pequeno, mas grande demais para acomodar teste
                                          e
                               exaustivo. Quando o teste de matriz ortogonal ocorre, ´ criada uma matriz
                                                                                       e
                               ortogonal L9 de casos de teste. A matriz ortogonal L9 tem uma propriedade
                               de balanceamento (est˜o distribu´
                                                     a         ıdos uniformemente pelo dom´   ınio de teste).
                               A abordagem de teste de matriz ortogonal nos possibilita obter boa cobertura
                               de teste com muito menos casos de teste que a estrat´gia exaustiva. Outras
                                                                                    e
                               defini¸˜es s˜o importantes:
                                    co    a



                                                                      132
http://www.candidatoreal.com




                                  • Se todos os casos de teste com um determinado argumento igual a 1, por
                                    exemplo, falharem, trata-se de uma falha de modo singular.

                                  • Se existe um problema consistente quando n´
                                                                              ıveis espec´
                                                                                         ıficos de dois parˆmetros
                                                                                                          a
                                                                                                        ´
                                    ocorrem simultaneamente, ele ´ chamado de falha de modo duplo. E a in-
                                                                  e
                                    tera¸˜o danosa entre dois parˆmetros de teste.
                                        ca                       a

                                  • Matrizes ortogonais s´ podem garantir a detec¸˜o de falhas de modo sin-
                                                          o                      ca
                                    gular e duplo. No entanto, muitas falhas de multimodo s˜o temb´m de-
                                                                                             a      e
                                    tectadas por esses testes.


                               11.4      Teste de ambientes, arquiteturas e aplica¸˜es
                                                                                  co
                                         especializadas
                               Podemos citar as t´cnicas especializadas de testes:
                                                 e
                               Teste de GUI. Como muitas GUI modernas tˆm a mesma aparˆncia e fun-
                                                                            e                 e
                                    cionamento, uma s´rie de testes padr˜o pode ser derivada. Devido ao
                                                      e                 a
                                    grande n´mero de opera¸˜es GUI, o teste deve ser conduzido usando fer-
                                            u             co
                                    ramentas automatizadas.
                               Teste de arquiteturas cliente/servidor. A natureza distribu´ dificulta muito,
                                                                                             ıda
                                    os teste s˜o consideravelmente mais dif´ que em aplica¸˜es isoladas.
                                              a                            ıcil           co
                               Teste da documenta¸˜o e dispositivos de ajuda. Pode ser abordado em
                                                      ca
                                    duas fases. A primeira fase, revis˜o e inspen¸˜o, examina o documento
                                                                       a             ca
                                    quanto ` clare editorial. A segunda fase, teste ao vivo, usa a documenta¸˜o
                                           a                                                                ca
                                    em conjunto com o uso do programa real. Nesta fase, os v´rios m´todos
                                                                                                   a     e
                                    de caixa-preta podem ser utilizados.

                               Teste de sistemas de tempo real. O projetista de casos de teste n˜o tema
                                    apenas que considerar casos de teste caixa-branca e caixa-preta, mas
                                    tamb´m manipula¸˜o de eventos (processamento de interrup¸˜es), a tem-
                                         e            ca                                         co
                                    pestividade dos dados e o paralelismo das tarefas que manipulam os dados.
                                    Uma estrat´gia global de quatro passoas pode ser proposta:
                                               e

                                    Teste de tarefa. Testes de caixa-branca e de caixa-preta s˜o projetados
                                                                                              a
                                        e executados para cada tarefa.
                                                              ´
                                    Teste comportamental. E simulado o comportamento de um sistema
                                        de tempo real e examinado seu comportamento como conseq¨ˆnciaue
http://www.candidatoreal.com




                                        de eventos externos.
                                    Testes intertarefas. Tarefas ass´ıncornas que se comunicam s˜o testadas
                                                                                                 a
                                        com diferentes taxas de dados e carga de processamento para detectar
                                        se erros de sincroniza¸˜o entre tarefas v˜o ocorrer.
                                                              ca                 a
                                    Teste de sistema. O software e o hardware s˜o integrados e todo um
                                                                                    a
                                        conjunto de testes de sistema ´ conduzido numa tentativa de descobrir
                                                                      e
                                        erros na interface software-hardware.




                                                                     133
http://www.candidatoreal.com




                               11.5      Estrat´gia de teste de software
                                               e
                               O projeto efetivo de caso de testes ´ importante, mas n˜o suficiente para o
                                                                   e                     a
                               sucesso da atividade de testes. A estrat´gia, isto ´, a s´rie planejada de re-
                                                                       e          e     e
                               aliza¸˜o de testes, ´ tamb´m crucial. Basicamente, h´ trˆs grandes fases de
                                    ca             e     e                            a e
                               teste:
                               Teste de unidade. Tem por objetivo testar a menor unidade do projeto (um
                                    componente de software que n˜o pode ser subdividido), procurando iden-
                                                                   a
                                    tificar erros de l´gica e de implementa¸˜o em cada m´dulo separamente.
                                                     o                    ca           o
                               Teste de integra¸˜o. Visa descobrir erros associados `s interfaces entre os
                                                 ca                                  a
                                    m´dulos quando esses s˜o integrados para formar a estrutura do produto
                                      o                   a
                                    de software.
                               Teste de sistema. Tem por objetivo identificar erros de fun¸˜es (requisitos
                                                                                              co
                                    funcionais) e caracter´
                                                          ısticas de desempenho (requisito n˜o funcional) que
                                                                                            a
                                    n˜o estejam de acordo com as especifica¸˜es.
                                     a                                      co
                                   Tipicamente, os primeiros testes focalizam componentes individuais e apli-
                               cam testes caixa-branca e caixa-preta. Na integra¸˜o, o foco ´ o projeto e a ar-
                                                                                  ca         e
                               quitetura do sistema. Finalmente, uma s´rie de testes de alto n´ ´ executada
                                                                         e                      ıvel e
                               quando o sistema estiver operacional, visando descobrir erros nos requisitos.
                                   No teste de unidade, faz-se necess´rio construir pequenos componentes para
                                                                      a
                               permitir testar m´dulos invidualmente, os ditos drivers e stubs. Um driver ´ um
                                                 o                                                        e
                               programa respons´vel pela ativa¸˜o e coordena¸˜o do teste de uma unidade. Ele
                                                 a               ca           ca
                               ´ respons´vel por receber dados de teste fornecidos pelo testador, passar esses
                               e         a
                               dados para a unidade que est´ sendo testada, obter os resultados produzidos e
                                                              a
                               apresent´-los ao testador. Um stub ´ uma unidade que substitui, na hora do
                                        a                             e
                               teste, uma outra unidade chamada pela unidade que est´ sendo testada. Em
                                                                                          a
                               geral, um stub simula o comportamento de uma unidade chamada com o m´     ınimo
                               de computa¸˜o ou manipula¸˜o de dados.
                                           ca                ca
                                   A abordagem de integra¸ao de m´dulos pode ter impacto na quantidade de
                                                            c˜        o
                               drivers e stubs a ser constru´ıda. Sejam as seguintes abordagens:
                               Integra¸˜o ascendente (bottom-up). Cada m´dulo no n´ inferior da hi-
                                       ca                                     o           ıvel
                                    erarquia ´ testado individualmente. A seguir, s˜o testados m´dulos que
                                             e                                     a             o
                                    chamam os previamentes testados. Neste caso, apenas drivers s˜o necess´rios.
                                                                                                 a        a
                               Integra¸˜o descendente (top-down). Come¸a de cima para baixo. Apenas
                                       ca                             c
                                    stubs s˜o necess´rios.
                                           a        a
http://www.candidatoreal.com




                                    ıche. Considera uma camada alvo no meio da hierarquia e utiliza abor-
                               Sandu´
                                   dagens ascendente e descendente.
                               Big-bang. Testar individualemte cada m´dulo e depois integr´-los de uma s´
                                                                      o                   a             o
                                    vez. Neste caso, tanto drivers quanto stubs s˜o necess´rios para cada
                                                                                 a        a
                                    m´dulo. Trabalhoso e suicida.
                                      o
                                  Os testes de sistema incluem diversos tipos de testes, realizados na seguinte
                               ordem:
                               Teste funcional. Verifica se o sistema integrado realiza as fun¸˜es especifi-
                                                                                             co
                                    cadas nos requisitos.

                                                                     134
http://www.candidatoreal.com




                               Teste de desempenho. Verifica se o sistema integrado atende os requisitos
                                    n˜o funcionais do sistema (eficiˆncia, seguran¸a e confiabilidade).
                                     a                             e             c

                               Teste de aceita¸˜o. Realizado pelos clientes. Assegura que o sistema solici-
                                               ca
                                    tado ´ o que foi constru´
                                         e                  ıdo.

                               Teste de instala¸˜o. Necess´rio quando os testes de aceita¸˜o n˜o s˜o feitos
                                                ca           a                           ca a a
                                    onde o software ser´ realmente instalado.
                                                       a
http://www.candidatoreal.com




                                                                   135
http://www.candidatoreal.com




                               Cap´
                                  ıtulo 12

                               UML

                               12.1      Diagrama de caso de uso
                               Diagramas de caso de uso descrevem relacionamentos e dependˆncias entre um
                                                                                              e
                               grupo de caso de uso e os atores participantes no processo. Um Caso de uso
                               descreve do ponto de vista dos atores um grupo de atividades num sistema
                               que produz um resultado concreto e tang´  ıvel. Casos de uso s˜o descri¸˜es de
                                                                                             a        co
                               intera¸˜es t´
                                     co ıpicas entre os usu´rios de um sistema e o sistema propriamente dito.
                                                            a
                               Eles representam a interface externa do sistema e especificam um conjunto de
                               exigˆncias do que o sistema deve fazer.
                                   e
                                   Quando trabalhar com Casos de Uso, ´ importante lembrar-se de algumas
                                                                          e
                               regras simples:
                                  • Cada Caso de Uso est´ relacionado com no m´
                                                        a                     ınimo um ator
                                  • Cada Caso de Uso possui um iniciador (isto ´ um ator)
                                                                               e
                                  • Cada Caso de Uso liga-se a um resultado relevante (um resultado com
                                    valor de neg´cio)
                                                o
                                  Casos de uso tamb´m podem ter relacionamentos com outros casos de uso.
                                                     e
                               Os trˆs tipos mais comuns de relacionamento entre casos de uso s˜o:
                                    e                                                          a
                               inclui-se que especifica que um Caso de Uso toma lugar dentro de outro Caso
                                    de Uso
                               estende que especifica que em determinadas situa¸˜es, ou em algum ponto
                                                                                co
http://www.candidatoreal.com




                                    (chamado um ponto de extens˜o) um caso de uso ser´ estendido por outro.
                                                               a                     a
                               Generaliza¸˜o especifica que um caso de uso herda as caracter´
                                         ca                                                  ısticas do super
                                   caso de uso, e pode sobrepor algumas delas ou adicionar novas de maneira
                                   semelhante a heran¸a entre classes.
                                                       c

                               12.1.1    Ator
                               Um ator ´ uma entidade externa (fora do sistema) que interage com o sistema
                                        e
                               participando (e freq¨entemente iniciando) um caso de uso. Atores podem ser
                                                   u
                               pessoas reais (por exemplo usu´rios do sistema), outro sistema de computador
                                                             a
                               ou eventos externos.

                                                                    136
http://www.candidatoreal.com




                                   Atores n˜o representam as pessoa f´
                                            a                           ısica ou sistemas, mas sua regra. Isto
                               significa que quando uma pessoa interage com o sistema de diferentes maneiras
                               (assumindo diferentes regras) ela ser´ representada por diversos atores. Por ex-
                                                                    a
                               emplo, uma pessoa que fornece suporte ao cliente por telefone e recebe ordens do
                               cliente para o sistema pode ser representado por um ator da equipe de suporte.

                               12.1.2     Descri¸˜o do caso de uso
                                                ca
                               Descri¸˜o do caso de uso s˜o narrativas de texto do caso de uso. Elas usualmente
                                     ca                  a
                               tomam a forma de uma nota ou um documento que ´ de alguma maneira ligado
                                                                                    e
                               ao caso de uso, e explana o processo ou atividades que tomar˜o lugar no caso
                                                                                               a
                               de uso.




                                           Figura 12.1: Exemplo de um diagrama de caso de uso



                               12.2      Diagrama de classe
http://www.candidatoreal.com




                               Diagramas de classe mostram as diferentes classes que fazem um sistema e como
                               elas se relacionam. Os diagramas de classe s˜o chamados diagramas est´ticos
                                                                              a                         a
                               porque mostram as classes, com seus m´todos e atributos bem como os rela-
                                                                          e
                               cionamentos est´ticos entre elas: quais classes conhecem quais classes ou quais
                                                a
                               classes s˜o parte de outras classes, mas n˜o mostram a troca de mensagens entre
                                        a                                a
                               elas.
                                   Na UML, atributos s˜o mostrados com pelo menos seu nome, e podem
                                                          a
                               tamb´m mostrar seu tipo, valor inicial e outras propriedades. Atributos po-
                                     e
                               dem tamb´m ser exibidos com sua visibilidade:
                                          e



                                                                     137
http://www.candidatoreal.com




                                              Figura 12.2: Exemplo de um diagrama de classe


                                  • + indica atributos p´blicos.
                                                        u
                                  • # indica atributos protegidos.
                                  • − indica atributos privados
                                  As opera¸˜es tamb´m s˜o exibidas com pelo menos seu nome, e podem
                                            co        e    a
                               tamb´m mostrar seus parˆmetros e valores de retorno.
                                    e                    a
                                  Classes podem ter modelos, um valor que ´ usado para uma classe ou tipo n˜o
                                                                           e                               a
                               especificado. O tipo de modelo ´ especificado quando uma classe ´ iniciada (isto
                                                             e                                e
                               ´ um objeto ´ criado). Modelos existem no C + + moderno e foram introduzidos
                               e           e
                               no Java 1.5 onde eles s˜o chamados de gen´ricos.
                                                      a                  e

                               12.2.1     Associa¸˜es de classe
                                                 co
                               Classes podem relacionar-se (ser associada com) com outras de diferentes maneiras:
http://www.candidatoreal.com




                               Generaliza¸˜o
                                         ca
                               EM UML, uma generaliza¸˜o entre duas classes coloca-as numa hierarquia rep-
                                                        ca
                               resentando o conceito de heran¸a de uma classe derivada de uma classe base.
                                                              c
                               Em UML, Generaliza¸˜es s˜o representadas por uma linha conectando duas
                                                    co     a
                               classes, com uma seta no lado da classe base.

                               Associa¸˜es
                                      co
                               S˜o o mecanismo que permite objetos comunicarem-se entre si. Elas descrevem
                                a
                               a conex˜o entre diferentes classes (a conex˜o entre os objetos atuais ´ chamada
                                      a                                   a                          e


                                                                     138
http://www.candidatoreal.com




                                                   Figura 12.3: Exemplo de generaliza¸˜o
                                                                                     ca


                               conex˜o do objeto, ou link. Associa¸˜es podem ter um regra que especifica o
                                      a                              co
                               prop´sito da associa¸˜o e pode ser uni ou bidirecional (indicadando se os dois
                                     o              ca
                               objetos participantes do relacionamento podem mandar mensagens para o outro,
                               ou se apenas um deles sabe sobre o outro). Cada ponta da associa¸˜o tamb´m
                                                                                                  ca        e
                               possui uma valor de multiplicidade, que dita como muitos objetos neste lado da
                               associa¸˜o pode relacionar-se com o outro lado.
                                        ca
                                   Em UML, associa¸˜es s˜o representadas como linhas conectando as classes
                                                      co    a
                               participantes do relacionamento, e podem tamb´m mostrar a regra e a mul-
                                                                                 e
                               tiplicidade de cada um dos participantes. A multiplicidade ´ exibida como
                                                                                              e
                               um intervalo [min . . . max] de valores n˜o negativos, com um asterisco no lado
                                                                        a
                               m´ximo representando infinito.
                                 a




                                                    Figura 12.4: Exemplo de associa¸˜o
                                                                                   ca


                               Agrega¸˜o
                                     ca
                               Agrega¸˜es s˜o um tipo especial de associa¸˜o no qual as duas classes partici-
                                      co     a                           ca
                               pantes n˜o possuem em n´ igual, mas fazem um relacionamento todo-parte.
                                        a                ıvel
                               Uma agrega¸˜o descreve como a classe que possui a regra do todo, ´ composta
                                            ca                                                   e
                               (tem) de outras classes, que possuem a regra das partes. Para agrega¸˜es, a
                                                                                                     co
                               classe que age como o todo sempre tem uma multiplicidade de um.
                                   Em UML, agrega¸˜es s˜o representadas por uma associa¸˜o que mostra
                                                    co     a                               ca
                               um romb´ide no lado do todo. Representa¸˜o visual de um relacionamento
                                          o                               ca
                               Agrega¸˜o em UML.
                                       ca
http://www.candidatoreal.com




                                                    Figura 12.5: Exemplo de agrega¸˜o
                                                                                  ca


                               Composi¸˜o
                                      ca
                               Composi¸˜es s˜o associa¸˜es que representam agrega¸˜es muito fortes. Isto
                                        co    a         co                           co
                               significa que composi¸˜es formam relacionamentos todo-parte tamb´m, mas o
                                                    co                                            e
                               relacionamento ´ t˜o forte que as partes n˜o pode existir independentes.
                                               e a                       a
                                   Em UML, composi¸˜es s˜o representadas por um romb´ide s´lido no lado
                                                     co    a                               o    o
                               do todo.



                                                                    139
http://www.candidatoreal.com




                                                   Figura 12.6: Exemplo de composi¸˜o
                                                                                  ca


                               12.3      Diagramas de seq¨ˆncia
                                                         ue
                               Diagramas de seq¨ˆncia mostram a troca de mensagens entre diversos objetos,
                                                 ue
                               numa situa¸˜o espec´
                                           ca        ıfica e delimitada no tempo. Diagramas de seq¨ˆncia colo-
                                                                                                 ue
                               cam ˆnfase especial na ordem e nos momentos nos quais mensagens para os
                                     e
                               objetos s˜o enviadas.
                                         a
                                  Em diagramas de seq¨ˆncia, objetos s˜o representados atrav´s de linhas
                                                           ue               a                    e
                               verticais tracejadas, com o nome do objeto no topo. O eixo do tempo ´ tamb´m
                                                                                                   e      e
                               vertical, aumentando para baixo, de modo que as mensagens s˜o enviadas de um
                                                                                           a
                               objeto para outro na forma de setas com a opera¸˜o e os nomes dos parˆmetros.
                                                                               ca                    a




                                              Figura 12.7: Exemplo de diagrama de seq¨ˆncia
                                                                                     ue
http://www.candidatoreal.com




                                  Mensagens podem ser s´   ıncronas, o tipo normal de mensagem de chamada
                               em que o controle ´ passado para o objeto chamado at´ o m´todo ter terminado
                                                 e                                  e    e
                               sua execu¸˜o, ou ass´
                                        ca          ıncronas, em que o controle ´ passado diretamente para o
                                                                                e
                               objeto chamado. Mensagens s´   ıncronas possuem uma caixa vertical no lado do
                               objeto chamado para mostrar o controle do fluxo do programa.


                               12.4      Diagramas de colabora¸˜o
                                                              ca
                               Diagramas de colabora¸˜o mostram as intera¸˜es que ocorrem entre os objetos
                                                     ca                     co
                               participantes numa situa¸˜o espec´
                                                       ca       ıfica. A informa¸˜o ´ parecida com a mostrada
                                                                               ca e



                                                                    140
http://www.candidatoreal.com




                               pelos diagramas de seq¨ˆncia, mas neste, a ˆnfase ´ colocada em como as in-
                                                      ue                    e      e
                               tera¸˜es ocorrem no tempo, enquanto os diagramas de colabora¸˜o colocam os
                                   co                                                         ca
                               relacionamentos entre os objetos e sua topologia em destaque.
                                   Em diagramas de colabora¸˜o, as mensagens enviadas de um objeto para
                                                              ca
                               outro s˜o representadas por setas, mostrando o nome da mensagem, parˆmetros,
                                      a                                                            a
                               e a seq¨ˆncia da mensagem. Diagramas de colabora¸˜o s˜o especialmente in-
                                      ue                                             ca a
                               dicados para mostrar um fluxo ou situa¸˜o espec´
                                                                        ca       ıfica do programa e podem,
                               rapidamente, demonstrar ou explanar um processo na l´gica do programa.
                                                                                       o




                                             Figura 12.8: Exemplo de diagrama de colabora¸˜o
                                                                                         ca



                               12.5      Diagramas de estado
                               Diagramas de Estado mostram os diferentes estados de um objeto durante sua
                               vida, e o est´ımulo que faz com que o objeto mude seu estado. Diagramas de
                               estado vˆem objetos como m´quinas de estado.
                                         e                  a
                                   Estados s˜o os blocos constru´
                                             a                  ıdos dos Diagramas de estado. Um estado per-
http://www.candidatoreal.com




                               tence a exatamente uma classe e representa um resumo dos valores dos atributos
                               que uma classe pode tomar. Um estado UML descreve o estado interno de um
                               objeto para uma classe em particular
                                   Observe que nem toda mudan¸a em um dos atributos de um objeto pode ser
                                                                c
                               representada por um estado, mas somente aquelas mudan¸as que podem afetar
                                                                                         c
                               significativamente o trabalho do objeto.
                                   Existem dois tipos especiais de estados: inicial e final. Eles s˜o especiais
                                                                                                  a
                               porque nenhum evento pode fazer com que um objeto retorne para seu estado
                               inicial, e da mesma maneira nenhum evento pode tirar um objeto de seu estado
                               final, uma vez que ele j´ o tenha alcan¸ado.
                                                       a              c



                                                                    141
http://www.candidatoreal.com




                               Figura 12.9: Exemplo de diagrama de estado
http://www.candidatoreal.com




                                                  142
http://www.candidatoreal.com




                               12.6      Diagramas de atividade
                               Uma atividade ´ um passo simples num processo. Uma atividade ´ um estado no
                                                e                                               e
                               sistema com atividade interna e, pelo menos, uma transi¸˜o de sa´
                                                                                       ca      ıda. Atividades
                               podem tamb´m ter mais de uma transi¸˜o de sa´ se elas possuem condi¸˜es
                                             e                         ca       ıda                       co
                               diferentes.
                                   O diagrama de atividade descreve a seq¨ˆncia de atividades num sistema
                                                                            ue
                               com a ajuda das atividades. Diagramas de atividade s˜o uma forma especial de
                                                                                      a
                               diagramas de estado, que somente (ou principalmente) cont´m atividades.
                                                                                           e
                                   Diagramas de atividade s˜o similares aos diagramas de fluxo de procedi-
                                                             a
                               mentos, com a diferen¸a de que todas as atividades s˜o claramente anexas aos
                                                     c                               a
                               objetos.
                                   Diagramas de atividade s˜o sempre associados a uma classe, uma opera¸˜o
                                                            a                                              ca
                               ou um caso de uso.
                                   Diagramas de atividade suportam atividades seq¨enciais bem como parale-
                                                                                    u
                               las. A execu¸˜o paralela ´ representada pelos ´
                                             ca         e                    ıcones Forquilha/Esperar, e para
                               as atividades executadas em paralelo, n˜o ´ importante a ordem na qual elas se
                                                                       a e
                               executam (elas podem ser executadas ao mesmo tempo ou uma ap´s a outra).
                                                                                                  o
                                   Atividades podem formar hierarquias, isto significa que uma atividade pode
                               ser composta por diversas atividades em detalhe, na qual as transi¸˜es de en-
                                                                                                   co
                               trada e sa´ devem corresponder `s transi¸˜es de entrada e sa´ do diagrama
                                          ıda                     a       co                  ıda
                               de detalhe.
http://www.candidatoreal.com




                                             Figura 12.10: Exemplo de diagrama de atividade




                                                                    143
http://www.candidatoreal.com




                               12.7      Elementos auxiliares
                               Existem dois elementos em UML que n˜o possuem nenhum valor real semˆntico
                                                                   a                                a
                               para o modelo, mas auxiliam a elucidar partes do diagrama. Estes elementos
                               s˜o:
                                a

                               Linhas de texto. S˜o uteis para adicionar informa¸˜es curtas de texto ao di-
                                                 a ´                            co
                                   agrama. S˜o textos livres.
                                            a

                               Notas. S˜o uteis para adicionar informa¸˜es mais detalhadas sobre um objeto
                                       a ´                            co
                                   ou situa¸˜o espec´
                                            ca       ıfica. Elas possuem a grande vantagem de poderem ser
                                   ancoradas a elementos UML para mostrar que a nota pertence a um objeto
                                   espec´ıfico ou situa¸˜o.
                                                      ca

                               Caixas. S˜o retˆngulos de forma livre que podem ser usados para agrupar itens,
                                        a     a
                                   tornando os diagramas mais leg´ ıveis.


                               12.8      Diagramas de componente
                               Diagramas de componente mostram os componentes do software (sejam com-
                               ponentes de tecnologias como KParts, componentes CORBA ou Java Beans ou
                               apenas se¸˜es do sistema que s˜o claramente distintas) e os artefatos de que eles
                                         co                   a
                               s˜o feitos como arquivos de c´digo fonte, bibliotecas de programa¸˜o ou tabelas
                                a                           o                                    ca
                               de bancos de dados relacionais.
                                  Componentes podem possui interfaces (isto ´ classes abstratas com opera¸˜es)
                                                                               e                           co
                               que permitem associa¸˜es entre componentes.
                                                     co


                               12.9      Diagramas de distribui¸˜o
                                                               ca
                               Diagramas de distribui¸˜o mostram as instˆncias dos componentes de tempo
                                                       ca                 a
                               de execu¸˜o e suas associa¸˜es. Eles incluem n´s que s˜o recursos f´
                                        ca                co                  o      a            ısicos, tipi-
                               camente um computador simples. Eles tamb´m mostram interfaces e objetos
                                                                            e
                               (instˆncias da classe).
                                    a
http://www.candidatoreal.com




                                                                     144
http://www.candidatoreal.com




                               Cap´
                                  ıtulo 13

                               Gerˆncia de Configura¸˜o e
                                  e                ca
                               Mudan¸as
                                     c

                               A gest˜o da configura¸˜o do software ´ uma atividade guarda-chuva e ´ aplicada
                                      a             ca              e                             e
                               ao longo de todo o processo de software. O gerenciamento de configura¸˜o e de
                                                                                                    ca
                               solicita¸˜es de mudan¸a envolve os seguintes itens:
                                       co           c

                                  • Identifica¸˜o dos itens de configura¸˜o;
                                             ca                       ca
                                  • Restri¸˜o das mudan¸as nesses itens;
                                          ca           c

                                  • Auditoria das mudan¸as nesses itens;
                                                       c

                                  • Defini¸˜o e o gerenciamento das configura¸˜es desses itens.
                                         ca                                co

                                   Os m´todos e ferramentas utilizadas para o controle das mudan¸as ´ consid-
                                        e                                                           c e
                               erado com o Sistema de Gerenciamento de Mudan¸as de uma organiza¸˜o. Ele
                                                                                    c                   ca
                               ´ contem informa¸˜es chaves sobre os processos de desenvolvimento, promo¸˜o,
                               e                 co                                                         ca
                               implanta¸˜o e manuten¸˜o de produtos da organiza¸˜o e armazenam a base de
                                        ca             ca                             ca
                               ativos e de artefatos potencialmente reutiliz´veis resultantes da execu¸˜o desses
                                                                            a                         ca
                               processos. Sendo assim, ele ´ parte integrante dos processos gerais de desen-
                                                             e
                               volvimento.

                                  Sem o controle dos in´meros artefatos produzidos pelas muitas pessoas que
                                                        u
                               trabalham em um projeto, s˜o criados artefatos conflitantes, gerando um grande
                                                          a
                               desperd´
                                      ıcio para a organiza¸ao. Os principais problemas s˜o a atualiza¸˜o si-
                                                          c˜                               a            ca
http://www.candidatoreal.com




                               multˆnea, a notifica¸˜o limitada e a existˆncia de v´rias vers˜es. A seguir, cada
                                   a              ca                    e         a         o
                               uma delas ´ descrita em detalhes.
                                          e


                                  • Atualiza¸˜o simultˆnea:
                                             ca         a
                                    Quando dois ou mais membros da equipe trabalham separadamente no
                                    mesmo artefato, o ultimo membro a fazer mudan¸as desfaz o trabalho re-
                                                                                       c
                                    alizado pelo anterior. O problema b´sico ´ que se um sistema n˜o permite a
                                                                         a   e                    a
                                    atualiza¸˜o simultˆnea, isso leva as mudan¸as em s´rie e diminui o ritmo do
                                            ca         a                       c        e
                                    processo de desenvolvimento. Entretanto, com a atualiza¸˜o simultˆnea,
                                                                                               ca         a
                                    o desafio e detectar se ocorreram atualiza¸˜es simultaneamente e resolver
                                                                               co


                                                                     145
http://www.candidatoreal.com




                                    quaisquer problemas de integra¸˜o quando essas mudan¸as forem incor-
                                                                  ca                    c
                                    poradas.


                                  • Notifica¸˜o limitada:
                                           ca
                                    Quando um problema ´ corrigido nos artefatos compartilhados por v´rios
                                                          e                                          a
                                    desenvolvedores e alguns deles n˜o s˜o notificados da mudan¸a.
                                                                    a a                       c


                                  • V´rias vers˜es:
                                      a         o
                                    A maioria dos programas de grande porte ´ desenvolvida em v´rias vers˜es
                                                                                e                  a        o
                                    evolutivas. Uma vers˜o pode estar sendo usada pelo cliente, enquanto
                                                           a
                                    outra est´ em teste e uma terceira ainda est´ em desenvolvimento. Se
                                             a                                      a
                                    forem encontrados problema em qualquer uma das vers˜es, as corre¸˜es
                                                                                              o           co
                                    devem ser propagadas entre elas. Isso pode levar a confus˜es que levam
                                                                                                 o
                                    a confus˜es dispendiosas. Um sistema de Gerencia de Configura¸˜o ´ util
                                            o                                                        ca e ´
                                    para gerenciar as diversas variantes de sistemas de software em desenvolvi-
                                    mento pois controla as vers˜es que s˜o utilizadas em determinadas builds
                                                                o         a
                                    do software ao compilar builds de programas individuais ou de uma nova
                                    vers˜o do software de acordo com a especifica¸˜o definida pelo usu´rio e ao
                                        a                                         ca                  a
                                    impor pol´ıticas de desenvolvimento do sistema. Os principais benef´  ıcios
                                    do gerenciamento da mudan¸a s˜o:
                                                                 c a
                                       – Suporte a diversos m´todos de desenvolvimento;
                                                             e
                                       – Preserva¸˜o da integridade do produto;
                                                 ca
                                       – Garantia da abrangˆncia e precis˜o do produto configurado;
                                                           e             a
                                       – Ambiente est´vel no qual o produto ser´ desenvolvido;
                                                     a                         a
                                       – Restri¸˜o das mudan¸as feitas nos artefatos com base nas pol´
                                               ca           c                                        ıticas
                                         do projeto;
                                       – Trilha de auditoria indicando por que, quando e por quem um artefato
                                         foi alterado.
                                    Al´m disso, ele armazena dados detalhados sobre as altera¸˜es, tais como,
                                      e                                                       co
                                    quem criou uma vers˜o especifica, quais vers˜es dos c´digo fonte foram
                                                         a                      o          o
                                    utilizadas em determinado build, alem de outras informa¸˜es relevantes.
                                                                                             co


                               13.1      As Atividades
http://www.candidatoreal.com




                               Na disciplina de Gerencia de Configura¸˜o as principais atividades s˜o:
                                                                    ca                            a

                                  • Configurar ambiente;
                                  • Estabelecer pol´
                                                   ıticas;
                                  • Escrever plano;
                                  • Criar unidade de implanta¸˜o;
                                                             ca
                                  • Relatar status de configura¸˜o;
                                                              ca
                                  • Realizar auditorias de configura¸˜o;
                                                                   ca


                                                                     146
http://www.candidatoreal.com




                                  • Estabelecer processo de controle de mudan¸as;
                                                                             c

                                  • Revisar solicita¸˜o de mudan¸a;
                                                    ca          c

                                  • Confirmar, duplicar ou recusar requisi¸˜o de mudan¸a;
                                                                         ca          c

                                  • Crias espa¸os de trabalho de integra¸˜o;
                                              c                         ca

                                  • Criar baselines;

                                  • Promover baselines ( de desenvolvimento para testes, de testes para ho-
                                    mologa¸˜o, etc.);
                                          ca

                                  • Criar espa¸o de trabalho de desenvolvimento;
                                              c

                                  • Fazer mudan¸as;
                                               c

                                  • Liderar mudan¸as;
                                                 c

                                  • Atualizar espa¸o de trabalho;
                                                  c

                                  • Enviar solicita¸˜o de mudan¸a;
                                                   ca          c

                                  • Atualizar solicita¸˜o de mudan¸a.
                                                      ca          c


                               13.2      Artefatos
                               Na disciplina de Gerencia de Configura¸˜o os principais artefatos s˜o:
                                                                    ca                           a

                                  • Reposit´rio do projeto;
                                           o

                                  • Plano de gerenciamento da configura¸˜o;
                                                                      ca

                                  • Unidade de implanta¸˜o;
                                                       ca

                                  • M´tricas do projeto;
                                     e
                                  • Registro da auditoria de configura¸˜o.
                                                                     ca


                               13.3      Pap´is e Responsabilidades
                                            e
                               Na disciplina de Gerencia de Configura¸˜o os principais pap´is e responsabili-
                                                                    ca                   e
                               dades s˜o:
                                      a
http://www.candidatoreal.com




                                  • Gerente de configura¸˜o
                                                       ca

                                       – Configurar ambiente;
                                       – Estabelecer pol´
                                                        ıticas;
                                       – Escrever plano;
                                       – Criar unidades de implanta¸˜o;
                                                                   ca
                                       – Relatar status de configura¸˜o;
                                                                   ca
                                       – Realizar auditoria de configura¸˜o.
                                                                       ca



                                                                      147
http://www.candidatoreal.com




                               • Gerente de controle de mudan¸a
                                                             c

                                   – Estabelecer processo de controle de mudan¸as;
                                                                              c
                                   – Revisar solicita¸˜o de mudan¸a;
                                                     ca          c
                                   – Confirmar, duplicar ou recusar solicita¸˜o de mudan¸a.
                                                                           ca          c

                               • Integrador

                                   – Criar espa¸os de trabalho de integra¸˜o;
                                               c                         ca
                                   – Criar baselines;
                                   – Promover baselines.
                               • Outros papeis
                                   – Criar espa¸o de trabalho de desenvolvimento;
                                               c
                                   – Fazer mudan¸as;
                                                c
                                   – Liderar mudan¸as;
                                                  c
                                   – Atualizar espa¸o de trabalho;
                                                   c
                                   – Enviar solicita¸˜o de mudan¸a;
                                                    ca          c
                                   – Atualizar solicita¸˜o de mudan¸a.
                                                       ca          c
http://www.candidatoreal.com




                                                               148
http://www.candidatoreal.com




                               Cap´
                                  ıtulo 14

                               CMM - Capability
                               Maturity Model

                               CMM, do acrˆnimo em inglˆs de Capability Maturity Model, ´ uma metodolo-
                                            o              e                               e
                               gia de diagn´stico e avalia¸˜o de maturidade do desenvolvimento de softwares
                                           o              ca
                               em uma organiza¸˜o.
                                                ca

                                   Ele descreve os principais elementos de um processo de desenvolvimento de
                               software. O CMM descreve os est´gios de maturidade atrav´s dos quais orga-
                                                                  a                         e
                               niza¸˜es passam enquanto evoluem o seu ciclo de desenvolvimento de software,
                                   co
                               atrav´s de avalia¸˜o cont´
                                    e           ca      ınua, identifica¸˜o de problemas e a¸˜es corretivas den-
                                                                       ca                  co
                               tro de uma estrat´gia de melhoria dos processos. Este caminho de melhoria ´
                                                 e                                                            e
                               definido por cinco n´ıveis de maturidade:

                                 1. Inicial
                                 2. Repetitivo

                                 3. Definido

                                 4. Gerenciado

                                 5. Em Otimiza¸˜o
                                              ca

                                  O CMM fornece `s organiza¸˜es orienta¸˜o sobre como ganhar controle do
                                                   a          co           ca
                               processo de desenvolvimento de software e como evoluir para uma cultura de
http://www.candidatoreal.com




                               excelˆncia na gest˜o de software. O objetivo principal nas transi¸˜es desses
                                     e           a                                               co
                               n´
                                ıveis de maturidade ´ a realiza¸˜o de um processo controlado e mensurado
                                                     e          ca
                               como a funda¸˜o para melhoria cont´
                                            ca                     ınua. Cada n´ de maturidade possui um
                                                                                ıvel
                               conjunto de pr´ticas de software e gest˜o espec´
                                             a                        a       ıficas, denominadas ´reas-chave
                                                                                                 a
                               do processo (KPA). Estas devem ser implantadas para a organiza¸˜o atingir o
                                                                                               ca
                               n´ de maturidade em quest˜o.
                                ıvel                        a

                                   O CMM identifica os n´ıveis atrav´s dos quais uma organiza¸˜o deve evoluir
                                                                   e                        ca
                               para estabelecer uma cultura de excelˆncia na engenharia de software. Como
                                                                     e
                               cada n´ıvel de maturidade do CMM forma a base necess´ria sobre a qual o
                                                                                        a
                               pr´ximo n´ ser´ constru´
                                 o        ıvel  a       ıdo, normalmente tentar pular n´ıveis ´ improdutivo,
                                                                                              e


                                                                     149
http://www.candidatoreal.com




                               porque n˜o haver´ estabilidade na melhoria do processo, justamente pela falta
                                        a       a
                               da base que a sustentaria.




                                                         Figura 14.1: Modelo CMM



                               14.1      Os n´
                                             ıveis de maturidade no CMM
                               14.1.1     N´
                                           ıvel 1 - Inicial
                               No n´ 1 de maturidade os processos s˜o geralmente ad hoc e a organiza¸˜o
                                    ıvel                              a                                  ca
                               geralmente n˜o disp˜e de um ambiente est´vel. O sucesso nestas organiza¸˜es
                                            a      o                    a                               co
                               depende da competˆncia e hero´
                                                  e         ısmo dos funcion´rios e n˜o no uso de processos
                                                                            a        a
                               estruturados. Devido ao imediatismo, um ambiente ca´tico, o n´
                                                                                    o         ıvel 1 de ma-
                               turidade raramente produz um produto ou servi¸o que funcione; assim, freq¨en-
                                                                            c                           u
                               temente eles excedem o or¸amento e o prazo em seus projetos.
                                                        c


                               14.1.2     N´
                                           ıvel 2 - Repetitivo
                               No n´ 2 de maturidade, o desenvolvimento do software ´ repetido. O processo
                                    ıvel                                                e
                               pode n˜o se repetir para todos os projetos da organiza¸˜o. A organiza¸˜o pode
                                      a                                              ca             ca
                               usar ferramentas de Gerˆncia de Projetos para mapear os custos e o prazo do
                                                       e
                               projeto.

                                   A ado¸˜o de um processo de desenvolvimento ajuda a garantir que pr´ticas
                                         ca                                                              a
                               existentes s˜o utilizadas em momentos de stress. Quando estas pr´ticas s˜o ado-
                                           a                                                   a       a
                               tadas, os projetos decorrem e s˜o gerenciados de acordo com o planejamento
                                                               a
                               inicial.
http://www.candidatoreal.com




                                  O status do projeto e os servi¸os entregues s˜o vis´
                                                                   c             a    ıveis ao gerenciamento
                               (por exemplo: ´ poss´
                                              e      ıvel a visualiza¸˜o de marcos do projeto e o t´rmino da
                                                                     ca                            e
                               maioria das tarefas).

                                  T´cnicas de gerenciamento de projetos s˜o estabelecidas para mapear custos,
                                    e                                      a
                               prazos, e funcionalidades. Um m´ ınimo de disciplina nos processos ´ estabelecido
                                                                                                  e
                               para que se possa repetir sucessos anteriores em projetos com escopo e aplica¸˜o
                                                                                                             ca
                               similar. Ainda h´ um risco significante de exceder os custos e estimativas de
                                                 a
                               prazo de desenvolvimento.



                                                                     150
http://www.candidatoreal.com




                                  As ´reas chaves de processo desse n´ de maturidade s˜o:
                                     a                               ıvel             a

                                  • Gerˆncia de Requisitos (RM);
                                       e

                                  • Planejamento de Projeto de Software (SPP);

                                  • Acompanhamento e Supervis˜o de Projeto de Software (SPTO);
                                                             a

                                  • Gerˆncia de Subcontratato de Software (SSM);
                                       e

                                  • Garantia da Qualidade de Software (SQA);

                                  • Gerˆncia da Configura¸ao de Software (SCM).
                                       e                c˜

                               14.1.3     N´
                                           ıvel 3 - Definido
                               A organiza¸˜o possui um conjunto de processos padr˜es, os quais s˜o a base
                                           ca                                        o              a
                               do n´ıvel 3. Estes est˜o estabelecidos e s˜o melhorados periodicamente. Estes
                                                     a                   a
                               processos padr˜es s˜o usados para estabelecer uma consistˆncia dentro da orga-
                                              o    a                                    e
                               niza¸˜o. Projetos estabelecem seus processos definidos pelo conjunto de padr˜es
                                   ca                                                                     o
                               processuais da organiza¸˜o.
                                                       ca

                                  O gerenciamento da organiza¸˜o estabelece os objetivos dos processos baseado
                                                              ca
                               no conjunto de padr˜es pr´-definidos e garante que estes objetivos sejam encam-
                                                  o     e
                               inhados de forma apropriada.

                                   Uma cr´ıtica distin¸˜o entre os n´
                                                      ca            ıveis 2 e 3 ´ o escopo dos padr˜es, descri¸˜o
                                                                                e                  o          ca
                               dos processos e procedimentos. No n´    ıvel 2, os padr˜es, descri¸˜es de proces-
                                                                                        o        co
                               sos e procedimentos podem ser bem diferentes em cada instˆncia espec´
                                                                                               a         ıfica do
                               processo (por exemplo, em um projeto particular). No n´ 3, os padr˜es, de-
                                                                                           ıvel          o
                               scri¸˜es de processo e procedimentos para o projeto s˜o guiados pelo conjunto
                                   co                                                    a
                               padr˜o de processos da organiza¸˜o.
                                    a                            ca

                                  As ´reas chaves de processo desse n´ de maturidade s˜o:
                                     a                               ıvel             a

                                  • Foco no Processo da Organiza¸˜o (OPF);
                                                                ca

                                  • Defini¸˜o do Processo da Organiza¸˜o (OPD);
                                         ca                         ca

                                  • Programa de Treinamento (TP);

                                  • Gerˆncia Integrada de Software (ISM);
                                       e
http://www.candidatoreal.com




                                  • Engenharia de Produto de Software (SPE);
                                  • Coordena¸˜o entre Grupos (IC);
                                            ca

                                  • Revis˜es T´cnicas Formais (PR).
                                         o    e




                                                                      151
http://www.candidatoreal.com




                               14.1.4     N´
                                           ıvel 4 - Gerenciado
                               Utilizando m´tricas precisas, o gerenciamento pode efetivamente controlar os es-
                                            e
                               for¸os para desenvolvimento de software. Em particular, o gerenciamento pode
                                  c
                               identificar caminhos para ajustar e adaptar o processo para projetos particu-
                               lares sem perda de m´tricas de qualidade ou desvios das especifica¸˜es.
                                                    e                                            co

                                  Organiza¸˜es neste n´
                                          co           ıvel conseguem metas qualitativas para o processo de
                               desenvolvimento de software e de manuten¸˜o.
                                                                       ca

                                   Subprocessos s˜o selecionados conforme a importˆncia na performance total
                                                  a                               a
                               do processo. Esses subprocessos selecionados s˜o controlados usando t´cnicas
                                                                              a                     e
                               estat´
                                    ısticas e qualitativas.

                                  Uma cr´ıtica distin¸˜o entre o n´ de maturidade 3 e 4 ´ a previsibilidade
                                                     ca             ıvel                      e
                               do desempenho do processo. No n´ 4, o desempenho do processo ´ controlado
                                                                  ıvel                             e
                               usando t´cnicas estat´
                                       e             ısticas e qualitativas, e ´ previs´ qualitativamente. No
                                                                                e       ıvel
                               n´ 3, os processos s˜o somente previs´
                                ıvel                 a                   ıveis qualitativamente.

                                  As ´reas chaves de processo desse n´ de maturidade s˜o:
                                     a                               ıvel             a

                                  • Gerˆncia Quantitativa do Processo (QPM);
                                       e
                                  • Gerˆncia de Qualidade de Software (SQM).
                                       e

                               14.1.5     N´
                                           ıvel 5 - Otimizado
                               O n´ de maturidade 5 foca no cont´
                                   ıvel                             ınuo aumento do desempenho dos proces-
                               sos atrav´s de melhoras de inova¸˜o tecnol´gica e incremental. Objetivos de
                                        e                       ca         o
                               melhoria quantitativa dos processos para a organiza¸˜o s˜o estabelecidos, con-
                                                                                   ca a
                               tinuamente revisados, refletindo os objetivos da organiza¸˜o, e usando crit´rios
                                                                                       ca                e
                               de gerˆncia de processos.
                                      e

                                  Os efeitos da melhora da revis˜o dos processos s˜o medidas e acompan-
                                                                   a                 a
                               hadas utilizando-se de processos de melhoria de qualidade. Ambos, os processo
                               definidos e o conjunto de processos padr˜es da organiza¸˜o s˜o alvos de melhoria
                                                                      o              ca a
                               de m´tricas.
                                   e

                                  As ´reas chaves de processo desse n´ de maturidade s˜o:
                                     a                               ıvel             a
http://www.candidatoreal.com




                                  • Preven¸˜o de Defeitos (DP);
                                          ca
                                  • Gerˆncia da Mudan¸a Tecnol´gica (TCM);
                                       e             c        o

                                  • Gerˆncia da Mudan¸a do Processo (PCM).
                                       e             c


                               14.2      Um pouco mais sobre KPA’s
                               As ´reas-chave de processo do N´ 2 est˜o focadas nas quest˜es do projeto de
                                   a                            ıvel     a                   o
                               software relacionadas ao estabelecimento de controles b´sicos de gerenciamento
                                                                                      a
                               do projeto, e tˆm os seguintes objetivos:
                                              e


                                                                     152
http://www.candidatoreal.com




                                  • Gerˆncia de Requisitos ` Estabelecer um entendimento comum entre o
                                        e                      a
                                    cliente e os requisitos (desejos, necessidades) do cliente que ser˜o atendidos
                                                                                                      a
                                    pela solu¸˜o a ser desenvolvida;
                                              ca
                                  • Planejamento de Projeto de Software ` Estabelecer planos coerentes para
                                                                          a
                                    realizar a engenharia de software e o gerenciamento do projeto;
                                  • Acompanhamento e Supervis˜o de Projeto de Software ` Estabelecer uma
                                                                a                         a
                                    adequada visibilidade do andamento (progresso) do software, de forma que
                                    o gerenciamento possa tomar a¸˜es corretivas se o planejamento original
                                                                  co
                                    n˜o estiver sendo seguido;
                                     a
                                  • Gerˆncia de Subcontratato de Software ` Selecionar fornecedores qualifi-
                                       e                                    a
                                    cados e gerenci´-los de forma eficiente;
                                                   a
                                  • Garantia da Qualidade de Software ` Fornecer ao gerenciamento visibili-
                                                                      a
                                    dade do processo em uso e dos produtos em constru¸˜o;
                                                                                     ca
                                  • Gerˆncia da Configura¸ao de Software ` Estabelecer e manter a integridade
                                        e                c˜              a
                                    dos produtos durante todo o ciclo de vida do software.

                                   As ´reas-chave do N´ 3 est˜o focadas tanto nas quest˜es do projeto, quanto
                                      a               ıvel     a                        o
                               da organiza¸˜o, conforme a organiza¸˜o estabelece uma infra-estrutura que efe-
                                           ca                       ca
                               tivamente institucionaliza os processos de engenharia de software e de gerenci-
                               amento de todos os projetos.

                                  As ´reas-chave do N´
                                      a                 ıvel 4 est˜o focadas no estabelecimento quantitativo
                                                                  a
                               tanto do processo de software, quanto dos produtos em constru¸˜o.
                                                                                             ca

                                  As ´reas-chave do N´ 5 cobrem quest˜es que tanto a organiza¸˜o, quanto
                                      a               ıvel             o                       ca
                               os projetos devem considerar para implementar melhorias no processo de soft-
                               ware que sejam cont´
                                                  ınuas e mensur´veis.
                                                                 a
http://www.candidatoreal.com




                                                        ´
                                           Figura 14.2: Areas-chave de processo no modelo CMM



                               14.3      Efeitos da evolu¸˜o do n´
                                                         ca      ıvel de maturidade
                               A evolu¸˜o no n´ de maturidade causa efeitos nas pessoas, nas tecnologias e
                                       ca      ıvel
                               nas pr´ticas de medidas. A seguir s˜o apresentados esses efeitos em cada n´
                                     a                            a                                      ıvel


                                                                      153
http://www.candidatoreal.com




                               de maturidade.


                                  • Pessoas

                                      – N´ 1: Sucesso depende de indiv´
                                         ıvel                            ıduos e her´is. Regime constante
                                                                                    o
                                        de emergˆncia (apagar incˆndio). Relacionamento entre grupos ´
                                                 e                e                                     e
                                        descoordenado e muitas vezes conflitante;
                                      – N´ 2: Sucesso ainda depende de indiv´
                                          ıvel                                 ıduos, mas passam a contar
                                        com apoio gerencial. Os compromissos s˜o compreendidos e gerenci-
                                                                              a
                                        ados. Existe treinamento para algumas fun¸˜es;
                                                                                  co
                                      – N´ıvel 3: Grupos de projeto trabalham de maneira coordenada. O
                                        treinamento ´ planejado de acordo com as necessidades de cada papel
                                                     e
                                        e aplicado convenientemente;
                                      – N´ 4: Existe um forte sentido de trabalho em equipe;
                                         ıvel
                                      – N´ 5: Todos est˜o engajados em atividades de melhoria cont´
                                         ıvel          a                                          ınua.

                                  • Tecnologia
                                      – N´ 1: A introdu¸˜o de novas tecnologias ´ arriscada;
                                         ıvel          ca                       e
                                      – N´ıvel 2: Atividades bem definidas facilitam a introdu¸˜o de novas
                                                                                             ca
                                        tecnologias;
                                      – N´ 3: Novas tecnologias s˜o avaliadas qualitativamente;
                                         ıvel                    a
                                      – N´ 4: Novas tecnologias s˜o avaliadas quantitativamente;
                                         ıvel                    a
                                      – N´ıvel 5: Novas tecnologias s˜o planejadas e introduzidas com total
                                                                     a
                                        controle.

                                  • Medidas

                                      – N´ 1: Coleta de dados ´ feita de maneira ad hoc;
                                         ıvel                 e
                                      – N´ 2: Coleta de dados de atividades de planejamento e acompan-
                                         ıvel
                                        hamento ´ feita de maneira sistem´tica;
                                                e                        a
                                      – N´ 3: Todos os processos definidos tˆm coleta sistem´tica de dados,
                                          ıvel                              e                a
                                        os quais s˜o compartilhados por todos os projetos da organiza¸˜o;
                                                  a                                                  ca
                                      – N´ıvel 4: A defini¸ao e coleta de dados s˜o padronizadas na orga-
                                                          c˜                     a
                                        niza¸˜o e os dados s˜o usados para entender os processos de maneira
                                             ca             a
                                        quantitativa e estabiliz´-los;
                                                                a
http://www.candidatoreal.com




                                      – N´
                                         ıvel 5: Os dados coletados s˜o usados para avaliar e selecionar
                                                                        a
                                        possibilidades de melhoria de processos.




                                                                  154
http://www.candidatoreal.com




                                       Parte IV

                               Linguagem de Programa¸˜o
                                                    ca
                                         Java
http://www.candidatoreal.com




                                          155
http://www.candidatoreal.com




                               Cap´
                                  ıtulo 15

                               Conceitos B´sicos de Java
                                          a

                               15.1      Pacotes
                               Em projetos pequenos ´ comum colocar todos os arquivos java em um unico
                                                      e                                                ´
                               diret´rio. Essa ´ uma abordagem r´pida, simples. No entanto, se o pequeno
                                    o           e                  a
                               projeto come¸ar a crescer, o n´mero de arquivos aumentar´ e administr´-los em
                                            c                u                         a            a
                               um unico diret´rio pode se tornar um problema.
                                   ´          o

                                  Pacotes n˜o s˜o nada mais que uma forma de organiza os arquivos que inte-
                                            a a
                               gram o projeto em diferentes diret´rios de acordo com suas funcionalidades ou
                                                                 o
                               categoria a qual eles perten¸am.
                                                           c

                                  Por exemplo, os arquivos no pacote java.io s˜o todos relacionados com fun-
                                                                              a
                               cionalidades de I/O, enquanto os arquivos do pacote java.net fornecem fun-
                               cionalidades para tratar de redes. Em aplica¸˜es com interface gr´fica, por
                                                                             co                    a
                               exemplo, ´ muito comum encontrar um diret´rio chamado ui (user interface).
                                         e                                 o

                                   Al´m de melhorar a organiza¸˜o dos arquivos que comp˜e o projeto, a uti-
                                      e                         ca                         o
                               liza¸˜o de pacotes ajuda a evitar colis˜o de nomes entre classes. Por exemplo:
                                   ca                                 a
                               Se um programador definir uma classe chamada Vector, esse nome iria colidir
                               com a classe Vector da JDK. No entanto, isso n˜o ocorre por que a JDK usa
                                                                                 a
                               java.util como um nome de pacote para a classe Vector. Dessa forma, a classe
                               implementada pelo programador pode se chamar Vector. A figura 15.1 mostra
                               uma estrutura de diret´rios criada pela utiliza¸˜o de pacotes.
                                                      o                       ca
http://www.candidatoreal.com




                                                                    156
http://www.candidatoreal.com




                                  Para indicar que uma classe pertence a um determinado pacote basta inciar
                               o arquivo java como mostrado no exemplo a seguir.


                               //Somente c´digo pode vir antes dessa linha
                                          o
                               package world;

                               public class HelloWorld {
                                 public static void main(String[] args) {
                                   System.out.println("Hello World");
                                 }
                               }


                               15.2      Modificadores de Acesso
                               Os modificadores de acesso s˜o keywords adicionadas ao c´digo para determinar
                                                            a                            o
                               se atributos, m´todos ou classes poderam ser acessados a partir de outras classes.
                                              e
                               Os modificadores de acesso presentes na linguagem Java s˜o: public, private,
                                                                                           a
                               protected e package-private (impl´ıcito quando n˜o ´ usado nenhum modificador
                                                                               a e
                               na declara¸˜o da classe, atributo ou m´todo).
                                          ca                           e

                                  Uma classe p´blica pode ser acessada por qualquer outra classe. Caso seja
                                               u
                               declarada sem o modificador public, a classe ser´ package-private, ou seja, s´
                                                                              a                            o
                               poder´ ser acessada por classes do mesmo pacote.
                                     a

                                  Os m´todos e atributos aceitam outros modificadores al´m do public. O
                                        e                                                  e
                               modificador private d´ acesso somente dentro da classe, enquanto o modificador
                                                   a
                               protected permite acesso dentro do pacote e `s subclasses.
                                                                           a
                               Assim como nas classes, caso nenhum modificador seja declarado, fica impl´ıcito
                               o modificador package-private.

                                  A tabela 15.1 abaixo resumo as permi¸˜es de acesso impostas por cada um
                                                                      co
                               dos modificadores:

                                                 Modificador      Pacote     Subclasse   Todos
                                                 public           sim         sim        sim
                                                 private          n˜o
                                                                   a          n˜o
                                                                               a         n˜o
                                                                                          a
                                                 protected        sim         sim        n˜o
                                                                                          a
                                                 nenhum           sim         n˜o
                                                                               a         n˜o
                                                                                          a
http://www.candidatoreal.com




                                                    Tabela 15.1: Modificadores de Acesso



                               15.3      Vari´veis
                                             a
                               Na linguagem de programa¸˜o Java s˜o definidos os seguintes tipos de vari´veis:
                                                       ca        a                                     a

                                  • Vari´veis de Instˆncia (Atributos n˜o est´ticos): Um objeto armazena seu
                                        a            a                  a    a
                                    estado individual em atributos n˜o est´ticos, ou seja, declarados sem o
                                                                      a     a


                                                                      157
http://www.candidatoreal.com




                                         modificador static. Atributos n˜o est´ticos s˜o conhecidos com vari´veis
                                                                        a     a       a                     a
                                         de instˆncia por que seus valores s˜o unicos para cada instˆncia de uma
                                                 a                          a ´                     a
                                         classe;

                                       • Vari´veis de Classe (Atributos est´ticas): Uma vari´vel de classe ´ todo
                                              a                             a                  a              e
                                         atributo declarado com o modificador static. Isso indica ao compilador
                                         que existe apenas uma c´pia da vari´vel, n˜o importando o n´mero de
                                                                   o           a      a                    u
                                         vezes que essa classe foi instanciada. Portanto, quando o valor de uma
                                         vari´vel de classe ´ alterada em um dos objetos, o novo valor se torna
                                             a              e
                                         vis´ para todos os outros objetos da mesma classe. Para impedir que
                                            ıvel
                                         uma vari´vel de classe tenha seu valor alterado ela deve ser declarada com
                                                  a
                                         o mofificador final.

                                       • Vari´veis Locais: As vari´veis locais s˜o utilizadas para armazenar o es-
                                              a                      a          a
                                         tado tempor´rio dos m´todos. A sintaxe de declara¸˜o de uma vari´vel
                                                       a           e                           ca              a
                                         local ´ similar a de declara¸˜o de uma vari´vel de instˆncia. O que deter-
                                                e                      ca            a          a
                                         mina se uma vari´vel ´ local ´ a parte do c´digo em que ela ´ declarada
                                                             a   e        e            o                e
                                         - entre as chaves que determinam o in´  ıcio e o fim de um m´todo. Uma
                                                                                                       e
                                         vari´vel ´ vis´
                                             a     e    ıvel apenas para o m´todo no qual foi declarada; n˜o pode
                                                                             e                             a
                                         ser acessada do resto da classe.

                               public class Bicicleta {

                                             // Vari´vel de Inst^ncia
                                                    a           a
                                             public int velocidade = 0;

                                             // Vari´vel de Classe
                                                    a
                                             public static int qtdRodas = 2;

                                             // Vari´vel de Classe com valor constante
                                                    a
                                             public static final String marca = "Caloi";

                                             public void aumentaVelocidade (int incremento){
                                                  // Vari´vel Local
                                                         a
                                                  int novaVelocidade; = velocidade + incremento;
                                                  velocidade = novaVelocidade;
                                             }

                               }
http://www.candidatoreal.com




                               15.4          Operadores
                               A lista abaixo sumariza os operadores suportados pela linguagem Java:

                                       • Operador de Atribui¸˜o Simples
                                                            ca


                                   =     Operador de Atribui¸˜o Simples
                                                            ca




                                                                         158
http://www.candidatoreal.com




                                   • Operadores aritm´ticos
                                                     e


                               +     Adi¸˜o (Tamb´m utilizado para concatena¸˜o de Strings)
                                        ca         e                        ca
                               -     Subtra¸˜o
                                            ca
                               ∗     Multiplica¸˜o
                                               ca
                               /     Divis˜o
                                          a
                               %     Resto da Divis˜o
                                                   a


                                   • Operadores Un´rios
                                                  a

                               +       Operador   un´rio mais
                                                    a
                               −       Operador   un´rio menos; Inverte o sinal de uma vari´vel
                                                    a                                      a
                               ++      Operador   de Incremento; Incrementa um valor de 1
                               −−      Operador   de Decremento; Decrementa o valor de 1
                               !       Operador   L´gico de complemento; Inverte o valor de um boolean
                                                   o


                                   • Operadores de Compara¸˜o
                                                          ca

                               ==            Igual
                               !=            Diferente
                               >             Maior
                               >=            Maior ou Igual
                               <             Menor
                               <=            Menor ou Igual
                               instanceof    Compara um objeto a um tipo espec´
                                                                              ıfico


                                   • Operadores Condicionais

                               &&      AND Condicional
                               ||      OR Condicional
                               ?:      Tern´rio (Forma curta para if-then-else)
                                           a


                                   • Operadores Bit a Bit e de Deslocamento (Shift)

                                        Complemento bit a bit un´rio
                                                                   a
http://www.candidatoreal.com




                               <<       shift para esquerda
                               >>       Shift para direita
                               >>>      Shift para direita sem sinal
                               &        AND bit a bit
                               ∧        OR exclusivo bit a bit
                               |        OR bit a bit




                                                                    159
http://www.candidatoreal.com




                               15.5      Express˜es, Senten¸as e Blocos
                                                o          c
                               Uma express˜o ´ uma constru¸˜o feita de vari´veis, operadores e chamadas de
                                           a e              ca             a
                               m´todos, descrita de acordo com a sintaxe da linguagem. A seguir, exemplos
                                 e
                               de express˜es:
                                         o


                               //Declara¸~o e inicializa¸~o de uma v´ri´vel do tipo int
                                        ca              ca          a a
                               int cadence = 0;
                               //Atribui¸~o de valor a uma posi¸~o de um vetor de int
                                        ca                     ca
                               anArray[0] = 100;
                               //Imprimindo um valor na tela
                               System.out.println("Element 1 at index 0: " + anArray[0]);
                               //Atribui¸~o de valor baseado no resultado de uma opera¸~o de adi¸~o
                                        ca                                            ca        ca
                               result = 1 + 2;
                               //Utiliza¸~o de par^ntesis para explicitar ordem de execu¸~o das opera¸~es
                                        ca        e                                      ca          co
                               zaz = x / (y+10);

                                   Em java uma senten¸a (statements) ´ definida como uma unidade completa
                                                      c                e
                               de execu¸˜o. Os seguintes tipos de express˜es podem se tornar senten¸as quando
                                        ca                               o                          c
                               terminadas com um ponto e v´    ırgula: (i) Express˜es de Atribui¸˜o; (ii) Ex-
                                                                                  o               ca
                               press˜es com ++ ou −−; (iii) Chamada de m´todos e (iv) Express˜es de Cria¸˜o
                                    o                                       e                   o         ca
                               de objetos.


                               // Statement de atribui¸~o
                                                      ca
                               aValue = 8933.234;
                               // Statement de incremento
                               aValue++;
                               // Statement de chamada de m´todo
                                                           e
                               System.out.println("Hello World!");
                               // Statement de cria¸~o de objeto
                                                   ca
                               Bicycle myBike = new Bicycle();

                                 Essas s˜o as chamadas statements de express˜o. Existem ainda as state-
                                         a                                       a
                               ments de declara¸˜o de vari´vel e de controle de fluxo.
                                               ca         a

                                  Um bloco ´ um grupo de zero ou mais statements entre um par de chaves.
                                            e
                               O exemplo a seguir ilustra o uso de blocos em Java:
http://www.candidatoreal.com




                               class BlockDemo {
                                    public static void main(String[] args) {
                                         boolean condition = true;
                                         if (condition) { // begin block 1
                                              System.out.println("Condition is true.");
                                         } // end block one
                                         else { // begin block 2
                                              System.out.println("Condition is false.");
                                         } // end block 2
                                    }
                               }


                                                                    160
http://www.candidatoreal.com




                               15.6     Comandos de Controle de Fluxo
                               As statements de um c´digo geralmente s˜o executadas na medida na ordem em
                                                     o                a
                               aparecem. No entanto, os comandos de controle de fluxo podem ser utilizadas
                               ara interromper o fluxo de execu¸˜o empregando decis˜es, looping e desvios,
                                                                ca                   o
                               permitindo que ao programa executar condicionalmente blocos de c´digo par-
                                                                                                 o
                               ticulares. Os principais comandos de controle de fluxo da linguagem Java s˜o
                                                                                                        a
                               mostrados a seguir.

                                  If-Then


                               void applyBrakes(){
                                    if (isMoving){       // the "if" clause: bicycle must moving
                                         currentSpeed--; // the "then" clause: decrease current speed
                                    }
                               }

                                  If-Then-Else


                               //Exemplo 1
                               void applyBrakes(){
                                   if (isMoving) {
                                        currentSpeed--;
                                   } else {
                                        System.err.println("The bicycle has already stopped!");
                                   }
                               }

                               //Exemplo 2
                               class IfElseDemo {
                                   public static void main(String[] args) {

                                        int testscore = 76;
                                        char grade;

                                        if (testscore >= 90) {
                                            grade = ’A’;
                                        } else if (testscore >= 80) {
http://www.candidatoreal.com




                                            grade = ’B’;
                                        } else if (testscore >= 70) {
                                            grade = ’C’;
                                        } else if (testscore >= 60) {
                                            grade = ’D’;
                                        } else {
                                            grade = ’F’;
                                        }
                                        //O resultado ser´ C pois, uma vez que a condi¸~o ´ atendida,
                                                         a                            ca e
                                        //o restante do c´digo If-Then-Else n~o ´ mais avaliado
                                                         o                   a e
                                        System.out.println("Grade = " + grade);


                                                                  161
http://www.candidatoreal.com




                                    }
                               }

                                   Switch

                               class SwitchDemo {
                                     public static void main(String[] args) {

                                            int month = 2;
                                            int year = 2000;
                                            int numDays = 0;

                                            switch (month) {
                                                   case 1:
                                                   case 3:
                                                   case 5:
                                                   case 7:
                                                   case 8:
                                                   case 10:
                                                   case 12:
                                                       numDays = 31;
                                                       break;
                                                   case 4:
                                                   case 6:
                                                   case 9:
                                                   case 11:
                                                       numDays = 30;
                                                       break;
                                                   case 2:
                                                       if ( ((year % 4 == 0) && !(year % 100 == 0))
                                                             || (year % 400 == 0) )
                                                            numDays = 29;
                                                       else
                                                            numDays = 28;
                                                       break;
                                                   default:
                                                       System.out.println("Invalid month.");
                                                       break;
                                            }
http://www.candidatoreal.com




                                            //O resultado ser´ 29
                                                              a
                                            System.out.println("Number of Days = " + numDays);
                                        }
                               }

                                   While e Do-While
                               //Exemplo While
                               class WhileDemo {
                                    public static void main(String[] args){
                                         int count = 1;
                                         //Teste realizado antes da execu¸~o do bloco de c´digo
                                                                         ca               o

                                                                  162
http://www.candidatoreal.com




                                           //Pode acontecer do codigo n~o ser executado nenhuma vez
                                                                       a
                                           while (count < 11) {
                                                System.out.println("Count is: " + count);
                                                count++;
                                           }
                                     }
                               }

                               //Exemplo Do-While
                               class DoWhileDemo {
                                    public static void main(String[] args){
                                         int count = 1;
                                         do {
                                              System.out.println("Count is: " + count);
                                              count++;
                                         //Teste ao fim da execu¸~o do bloco de c´digo
                                                                ca               o
                                         //C´digo ´ executado ao menos uma vez
                                            o     e
                                         } while (count <= 11);
                                    }
                               }
                                   For

                               //Exemplo 1
                               class ForDemo {
                                    public static void main(String[] args){
                                         for(int i=1; i<11; i++){
                                              System.out.println("Count is: " + i);
                                         }
                                    }
                               }

                               //Exemplo 2
                               for ( ; ; ) { //infinite loop
                                    // c´digo
                                        o
                               }

                               //Exemplo 3
                               class EnhancedForDemo {
http://www.candidatoreal.com




                                    public static void main(String[] args){
                                         int[] numbers = {1,2,3,4,5,6,7,8,9,10};
                                         for (int item : numbers) {
                                           System.out.println("Count is: " + item);
                                         }
                                    }
                               }

                                   Break

                               //Exemplo 1
                               class BreakDemo {

                                                                163
http://www.candidatoreal.com




                                   public static void main(String[] args) {
                                        int[] arrayOfInts = {32,87,3,589,12,1076,2000,8,622,127};
                                       int searchfor = 12;
                                       int i;
                                       boolean foundIt = false;

                                       for (i = 0; i < arrayOfInts.length; i++) {
                                           if (arrayOfInts[i] == searchfor) {
                                                foundIt = true;
                                                //Encerra o loop for
                                                break;
                                           }
                                       }
                                       if (foundIt) {
                                           System.out.println("Found " + searchfor + " at index " + i);
                                       } else {
                                           System.out.println(searchfor + " not in the array");
                                       }
                                   }
                               }

                               //Exemplo 2
                               class BreakWithLabelDemo {
                                   public static void main(String[] args) {
                                        int[][] arrayOfInts = {{32,87,3,589},
                                                               {12,1076,2000,8},
                                                               {622,127,77,955}};

                                       int searchfor = 12;
                                       int i;
                                       int j = 0;
                                       boolean foundIt = false;

                                       search:
                                           for (i = 0; i < arrayOfInts.length; i++) {
                                               for (j = 0; j < arrayOfInts[i].length; j++) {
                                                   if (arrayOfInts[i][j] == searchfor) {
                                                       foundIt = true;
http://www.candidatoreal.com




                                                       //Encerra o loop for mais interno
                                                       //e desvia para o label search
                                                       break search;
                                                   }
                                               }
                                           }

                                          if (foundIt) {
                                              System.out.println("Found " + searchfor + " at " + i + ", " + j);
                                          } else {
                                              System.out.println(searchfor + " not in the array");


                                                              164
http://www.candidatoreal.com




                                              }
                                    }
                               }

                                   Continue

                               //Exemplo 1
                               class ContinueDemo {
                                   public static void main(String[] args) {

                                        String searchMe = "peter piper picked a peck of pickled peppers";
                                        int max = searchMe.length();
                                        int numPs = 0;

                                        for (int i = 0; i < max; i++) {
                                            //interested only in p’s
                                            if (searchMe.charAt(i) != ’p’){
                                                //Vai para o pr´ximo loop sem executar
                                                               o
                                                //o restante do c´digo do bloco for
                                                                 o
                                                continue;
                                            }
                                            //process p’s
                                            numPs++;
                                        }
                                        System.out.println("Found " + numPs + " p’s in the string.");
                                    }
                               }


                               //Exemplo 2
                               class ContinueWithLabelDemo {
                                   public static void main(String[] args) {

                                        String searchMe = "Look for a substring in me";
                                        String substring = "sub";
                                        boolean foundIt = false;

                                        int max = searchMe.length() - substring.length();
http://www.candidatoreal.com




                                    test:
                                        for (int i = 0; i <= max; i++) {
                                            int n = substring.length();
                                            int j = i;
                                            int k = 0;
                                            while (n-- != 0) {
                                                if (searchMe.charAt(j++)!= substring.charAt(k++)) {
                                                    //Interrompe a itera¸~o do loop while e vai
                                                                        ca
                                                    //para proxima itera¸~o do loop for,
                                                                        ca
                                                    //marcada pelo label test
                                                    continue test;


                                                               165
http://www.candidatoreal.com




                                                  }
                                              }
                                              foundIt = true;
                                              break test;
                                          }
                                          System.out.println(foundIt ? "Found it" : "Didn’t find it");
                                     }
                               }


                               15.7       Classes Aninhadas
                               No Java existe a possibilidade de se definir classes dentro de outra classe, como
                               se fossem atributos ou m´todos. Algumas das vantagens de se utilizar esse
                                                          e
                               recurso do Java s˜o:
                                                a

                                   • Legibilidade: Classes podem ser sgrupadas por similaridade;
                                   • Ocultamento: Podem ser privadas ou protegidas;
                                   • Redigibilidade: Classes internas possuem acesso aos membros privados da
                                     classe que a definiu e vice-versa. Na verdade, o recurso de classes internas
                                     surgiu no Java 1.1 com esse prop´sito.
                                                                       o

                                   Como s˜o definidas dentro de outras classes, o c´digo fonte fica no mesmo
                                           a                                         o
                               arquivo .java. Ao compilar, gera-se v´rios arquivos .class, compondo o nome da
                                                                    a
                               classe externa e interna. Exemplo: Externa.java cont´m a classe Externa, que
                                                                                       e
                               define uma classe interna chamada Interna. Ao compilar, gera-se Externa.class
                                                         ´
                               e Externa$Interna.class. E importante ressaltar que a classe interna n˜o pode
                                                                                                      a
                               ter o mesmo nome da classe externa que a define.

                                   No Java existem os seguintes tipos de classes internas:

                                   • Classes Aninhadas
                                   • Classes Instanciadas
                                         – Classes Membro
                                         – Classes Locais
                                         – Classes Anˆnimas
                                                     o
http://www.candidatoreal.com




                                   As classes aninhadas s˜o os tipos mais simples de classes internas. Uma
                                                           a
                               classe ´ definida dentro da outra como se fosse um membro static. Elas permitem
                                      e
                               definir acesso privado ou protegido e agrupa classes logicamente relacionadas.
                               S˜o referenciadas via Externa.Interna, como se fosse um atributo est´tico. A
                                a                                                                     a
                               seguir um exemplo de classe aninhada e de como referenci´-la:
                                                                                         a


                               //Classe externa
                               class Par {

                                   private Chave chave;

                                                                      166
http://www.candidatoreal.com




                                   private Valor valor;

                                   public Par(Chave chave, Valor valor) {
                                      this.chave = chave;
                                      this.valor = valor;
                                   }

                                   //Classe interna
                                   static class Chave {
                                      private String nome;
                                      public Chave(String nome) {
                                        this.nome = nome;
                                      }
                                   }

                                   //Classe interna com prote¸~o de acesso
                                                             ca
                                   protected static class Valor {
                                      private int valor;
                                      public Valor(int valor) {
                                        this.valor = valor;
                                      }
                                   }

                               }

                               public class Teste {

                                   public static void main(String[] args) {
                                      Par.Chave chave = new Par.Chave("Nota");
                                      Par.Valor valor = new Par.Valor(10);
                                      Par par = new Par(chave, valor);
                                   }

                               }


                               15.8      Tipos Enumerados
                               Tipos enumerados s˜o aqueles que possuem um conjunto finitos de valores que
                                                   a
http://www.candidatoreal.com




                               as vari´veis podem assumir. Por exemplo: esta¸˜es do ano, naipes ou cartas do
                                      a                                        co
                               baralho, planetas do sistema solar etc. Originalmente, a forma padr˜o utilizada
                                                                                                  a
                               para representar tipos enumerados era o chamado int Enum Pattern (tipos enu-
                               merados baseados em inteiros).


                               // int   Enum Pattern
                               public   static final   int   SEASON_WINTER   =   0;
                               public   static final   int   SEASON_SPRING   =   1;
                               public   static final   int   SEASON_SUMMER   =   2;
                               public   static final   int   SEASON_FALL     =   3;


                                                                    167
http://www.candidatoreal.com




                                   Esse tipo de padroniza¸˜o apresentava os seguintes problemas:
                                                         ca

                                   • N˜o seguro quanto ao tipo: Como uma season ´ representada por um
                                       a                                                e
                                     int, pode-se passar qualquer valor inteiro (inclusive diferente de 0,1,2,3)
                                     quando uma season for requerida;
                                                      ´
                                   • Sem namespace: E necess´rio criar um padr˜o de nomenclatura para evi-
                                                               a                a
                                     tar colis˜o com outros tipos enumerados. (Exemplo: SEASON ).
                                              a

                                   • Valores imprimidos n˜o s˜o explicativos: Como os valores s˜o int, quando
                                                         a a                                   a
                                     impressos n˜o apresentam a informa¸˜o que representam diretamente.
                                                a                        ca

                                  Para contornar esses problemas a partir do Java 5 foi introduzido o Typesafe
                               Enum Pattern, a partir do qual os tipos enumerados podem ser expressos de
                               forma mais simples. O c´digo abaixo mostra o uso do novo padr˜o para tipos
                                                       o                                         a
                               enumerados:


                               public class Weather {

                                    //Define tipo enumerado Refrigerante
                                    public enum Season = {winter, spring, summer, fall};

                                    private printSeasons() {
                                        //Loop recuperando cada um dos valores poss´veis de Season
                                                                                   ı
                                        for (Season s : Season.values()){
                                           System.out.println(s);
                                        }
                                    }
                               }


                               15.9       Anota¸˜es
                                               co
                               Anota¸˜es (annotations) provˆem dados sobre o programa mas n˜o s˜o parte do
                                      co                     e                                 a a
                               do programa propriamente dito. Elas n˜o possuem efeito direto na opera¸˜es do
                                                                       a                              co
                               c´digo com o qual est˜o relacionadas. Esse recurso da linguagem Java permite
                                o                     a
                               que o programador n˜o se preocupe em escrever c´digo auxiliar (arquivos de
                                                      a                           o
                               configura¸˜o, por exemplo). A id´ia ´ que o programador diga o que tem que
                                         ca                      e e
                               ser feito utilizando as anota¸˜es e ferramentas auxiliares fa¸am o restante do
                                                            co                              c
http://www.candidatoreal.com




                               trabalho. Alguns exemplos do uso de anota¸˜es s˜o:
                                                                          co    a

                                   • Informa¸˜es para o compilador: Anota¸˜es podem ser utilizadas pelo com-
                                             co                           co
                                     pilador para detectar erros ou sumprimir mensagens de warning;

                                   • Processamento em tempo de Compila¸˜o ou Deploy: Ferramentas aux-
                                                                          ca
                                     iliares podem processar as anota¸˜es para gerar c´digo, arquivos XML
                                                                     co               o
                                     etc;

                                   • Processamento em tempo de Execu¸˜o: Algumas anota¸˜es podem ser
                                                                       ca             co
                                     processsadas em tempo de execu¸˜o;
                                                                   ca



                                                                     168
http://www.candidatoreal.com




                                  • Documenta¸˜o: Anota¸oes podem ser utilizadas para substituir coment´rios
                                               ca      c˜                                              a
                                    no c´digo.
                                        o
                                  Os trˆs pr´-defindos de anota¸˜es utilizadas pelo compilador s˜o:
                                       e    e                 co                               a
                                  • @Deprecated: Indica que o elemento marcado est´ deprecated e n˜o deve
                                                                                  a               a
                                    ser mais utilizado. O compilador gera um warning sempre que um pro-
                                    grama utilizar um uma classe, um m´todo ou um atributo marcado como
                                                                       e
                                    @Deprecated;


                                  • @Override: Informa ao compilador que o elemento marcado deve sobre-
                                    screver o elemento de mesmo nome declarado na superclasse. Embora
                                    a anota¸˜o n˜o seja obrigat´rio para sobrescrever um m´todo, utiliz´-la
                                            ca a               o                          e            a
                                    ajuda a prevenir erros;
                                  • @SuppressWarnings: Indica ao compilador situa¸˜es em que os warnings
                                                                                 co
                                    devem ser suprimidos;
                                  A seguir alguns exemplos de utiliza¸˜o das anota¸˜es descritas.
                                                                     ca           co


                               //Marca o m´todo como deprecated
                                           e
                               @Deprecated
                               static void deprecatedMethod() { //c´digo }
                                                                   o

                               //Indica que o m´todo ir´ sobrescrever o m´todo da superclasse
                                               e       a                 e
                               @Override
                               int overriddenMethod() { //c´digo }
                                                           o

                               //Indica ao compilador para suprimir warning gerados pelo uso
                               //de m´todos deprecated
                                     e
                               @SuppressWarnings("deprecation")
                               void useDeprecatedMethod() {
                                      //O uso de um m´todo deprecated geraria um warning
                                                     e
                                      objectOne.deprecatedMethod();
                               }



                               15.10       Gen´ricos
                                              e
http://www.candidatoreal.com




                               Os gen´ricos s˜o um recurso introduzido a partir Java 5 e permite ao progra-
                                       e      a
                               mador escrever c´digo abstraindo tipos de dados. Os gen´ricos s˜o tipicamente
                                                 o                                      e      a
                               utilizados em conjunto com interfaces ex: List) que herdam da interface Collec-
                               tion ou de classes que a implementam (ex: AbstractList, ArrayList, LinkedList,
                               Vector)

                                   Quando um elemento ´ retirado de uma Collection ´ necess´rio realizar um
                                                         e                             e       a
                               cast para o tipo do elemento armazenado na Collection. Al´m de incoveniente,
                                                                                           e
                               isso ´ inseguro. O compilador n˜o checa se o cast realizado ´ do mesmo tipo do
                                    e                         a                            e
                               armazenado na cole¸˜o. Dessa forma, o cast pode falhar em tempo de execu¸˜o.
                                                   ca                                                    ca



                                                                    169
http://www.candidatoreal.com




                               //Cria¸~o de uma collection do tipo LinkedList
                                     ca
                               List myIntList = new LinkedList();
                               //Adi¸~o de um elemento do tipo Integer a collection
                                    ca
                               myIntList.add(new Integer(0));
                               //Recuperando um elemento da collection. Cast para Integer ´ necess´rio
                                                                                          e       a
                               Integer x = (Integer) myIntList.iterator().next();

                                   Os gen´ricos provˆem uma forma de comunicar ao compilador o tipo ar-
                                          e         e
                               mazenado na cole¸˜o, permitindo que a checagem seja feita em tempo de com-
                                                 ca
                               pila¸˜o. Al´m de evitar erros em tempo de execu¸˜o, a utiliza¸˜o de gen´ricos
                                   ca      e                                  ca            ca        e
                               elimina a necessidade de casts.


                               //Cria¸~o de uma collection LinkedList para armazenar objetos do tipo Integer
                                     ca
                               List<Integer> myIntList = new LinkedList<Integer>();
                               //Adi¸~o de um elemento do tipo Integer a collection
                                    ca
                               myIntList.add(new Integer(0));
                               ////Recuperando um elemento da collection. Cast n~o ´ necess´rio
                                                                                a e        a
                               Integer x = myIntList.iterator().next();

                                   Os tipos gen´ricos tˆm como grande vantagem o aproveitamento de c´digo.
                                               e       e                                                 o
                               A interface Collection ´ um exemplo disso. As opera¸˜es de adicionar ou re-
                                                       e                              co
                               mover um novo elemento, determinar o tamanho, verificar se a collection est´    a
                               vazia ou recuperar o ´ ındice de um determinado elemento, por exemplo, cer-
                               tamente s˜o aplic´veis a collections do tipo Integer, String ou de outra classe
                                         a       a
                               qualquer. Exemplos de interfaces gen´ricas s˜o List e Iterator. A seguir, alguns
                                                                    e      a
                               trechos dessas duas interfaces como definidas no pacote java.util.


                               public interface Iterator<E> {
                                 E next();
                                 boolean hasNext();
                                 //mais c´digo ...
                                         o
                               }

                               public interface List<E> {
                                 void add(E x);
                                 Iterator<E> iterator();
                                 //mais c´digo ...
                                         o
http://www.candidatoreal.com




                               }

                                  Gen´ricos permitem implementa¸˜es mais sofisticadas como:
                                     e                         co

                               //Wildcards ou Coringas
                               //M´todo com par^metro Casulo. Aceita Casulo de qualquer tipo
                                  e            a
                               void imprimir (Casulo<?> c) {
                                    // c´digo do m´todo ...
                                        o         e
                               }

                               //Limitando o tipo gen´rico aceito pelo m´todo
                                                     e                  e
                               //M´todo s´ aceita Casulo de Forma ou Casulos de subclasses de Forma
                                  e      o

                                                                     170
http://www.candidatoreal.com




                               void desenhar (Casulo<? extends Forma> c){
                                    // c´digo do m´todo ...
                                        o         e
                               }


                               15.11       Reflex˜o
                                                a
                               A Reflection permite um programa Java examinar ou fazer a introspec¸˜o nele
                                                                                                     ca
                               mesmo, ou seja, olhar e examinar suas propriedades e estrutura. Com isso, vocˆ
                                                                                                            e
                               pode, por exemplo obter o nome de todos os membros de uma classe, como
                               atributos e m´todos, bem como executar um m´todo usando a Introspection.
                                             e                                 e
                               Esse recurso ´ utilizado, por exemplo, pelos ambientes de desenvolvimento (as
                                            e
                               IDEs) para examinar e exibir a estrutura e conte´do das classes e beans. A
                                                                                 u
                               seguir um exemplo do uso de refetions.



                               import java.lang.reflect.*;

                               public class Classe1 {

                                private int funcao1( Object p, int x ) throws NullPointerException {
                                    if (p == null) throw new NullPointerException();
                                    return x;
                                }

                                public static void main(String args[]) {
                                       try {
                                          //Carrega a classe
                                          Class cls = Class.forName("Classe1");
                                          //Recupera a lista de m´todos da classe
                                                                 e
                                          Method methlist[] = cls.getDeclaredMethods();
                                          //Imprime informa¸~es (m´todos, modificadores, exce¸~es)
                                                           co      e                         co
                                          //sobre cada um dos m´todos da classe
                                                               e
                                          for (int i = 0; i < methlist.length; i++) {
                                               Method m = methlist[i];
                                               System.out.println("-------------------------------------");
                                               System.out.println("nome = " + m.getName());
                                               System.out.println("-------------------------------------");
http://www.candidatoreal.com




                                               System.out.println("membro de:" + m.getDeclaringClass());
                                               System.out.println("modificador:" + Modifier.toString(m.getModifiers()));

                                                 //Recupera lista de par^metros do m´todo
                                                                        a           e
                                                 Class pvec[] = m.getParameterTypes();
                                                 for (int j = 0; j < pvec.length; j++)
                                                     System.out.println("par^metro #" + j + " " + pvec[j]);
                                                                            a

                                                 //Recupera a lista de excess~es do m´todo
                                                                             o       e
                                                 Class evec[] = m.getExceptionTypes();
                                                 for (int j = 0; j < evec.length; j++)


                                                                    171
http://www.candidatoreal.com




                                                 System.out.println("exce¸~o #" + j + " " + evec[j]);
                                                                         ca

                                              //Recupera o tipo de retorno do m´todo
                                                                               e
                                              System.out.println("tipo de retorno = " + m.getReturnType());
                                         }
                                      }
                                      catch (Throwable e) {
                                          System.err.println(e);
                                      }
                                }
                               }


                               //Sa´da da execu¸~o da classe Classe1:
                                   ı           ca
                               //Lista de m´todos da Classe1 com todas as suas propriedades
                                           e

                               -------------------------------------
                               nome = funcao1
                               -------------------------------------
                               membro de:class Classe1
                               modificador:private
                               par^metro #0 class java.lang.Object
                                  a
                               par^metro #1 int
                                  a
                               exce¸~o #0 class java.lang.NullPointerException
                                    ca
                               tipo de retorno = int
                               -------------------------------------
                               nome = main
                               -------------------------------------
                               membro de:class Classe1
                               modificador:public static
                               par^metro #0 class [Ljava.lang.String;
                                  a
                               tipo de retorno = void
http://www.candidatoreal.com




                                                              172
http://www.candidatoreal.com




                               Cap´
                                  ıtulo 16

                               Classes Essenciais

                               16.1      Exception e Controle de Exce¸˜es
                                                                     co
                               Uma exce¸˜o ´ um evento que ocorre durante a execu¸˜o de um programa in-
                                        ca e                                     ca
                               terrompendo seu fluxo normal de execu¸˜o.
                                                                   ca

                                  Quando um erro ocorre dentro de um m´todo, o m´todo cria um objeto
                                                                           e          e
                               chamado exception e o entrega ao controle de execu¸˜o (runtime system), que
                                                                                  ca
                               cont´m informa¸˜es sobre o erro, incluindo seu tipo e o estado do programa
                                   e          co
                               quando o erro ocorreu. O ato de criar um objeto exception e a entreg´-lo ao
                                                                                                   a
                               runtime system ´ chamado lan¸amento de uma exce¸˜o (throwing an exception).
                                              e            c                    ca

                                   O runtime system ent˜o pesquisa na pilha de chamadas por um m´todo que
                                                        a                                          e
                               contenha um bloco de c´digo capaz de tratar a exce¸˜o. Esse bloco de c´digo
                                                       o                           ca                 o
                               ´ chamado tratador de exce¸˜es (exception handler). A pesquisa come¸a no
                               e                            co                                        c
                               m´todo onde o erro ocorreu e procede na pilha na ordem reversa em que os
                                 e
                               m´todos foram chamados. Quando um tratador adequado ´ encontrado, o run-
                                 e                                                       e
                               time syste o entrega a exce¸˜o. Um tratador ´ considerado adequado quando o
                                                          ca                e
                               tipo da exce¸˜o lan¸ada coincide com o tipo definido no tratador (IOException,
                                           ca     c
                               ClassNotFoundException, etc.).

                                  Quando um tratador ´ escolhido diz-se que ele capturou a exce¸˜o (catches
                                                       e                                       ca
                               the exception). Se o runtime system pesquisa em toda a pilha de m´todos e
                                                                                                   e
                               n˜o encontrar um tratador adequado, o programa ser´ encerrado. A figura 16.1
                                a                                                 a
                               mostra a ordem de pesquisa por um tratador para a exce¸˜o.
                                                                                      ca
http://www.candidatoreal.com




                               16.1.1    Exce¸˜es t´
                                             co    ıpicas
                               Em Java exce¸˜es s˜o objetos. A classe Exception ´ a superclasse de todas as
                                            co   a                              e
                               exce¸˜es. Exemplos t´
                                   co              ıpicos de exce¸˜es s˜o:
                                                                 co    a
                                  • ´
                                    Indice de uma array fora do intervalo permitido (ArrayIndexOutOfBound-
                                    sException);
                                  • Problemas em opera¸˜es aritm´ticas, como overflows e divis˜es por zero
                                                       co       e                            o
                                    (ArithmeticException);


                                                                   173
http://www.candidatoreal.com




                                               Figura 16.1: Procura pelo tratador de exce¸˜es
                                                                                         co


                                  • Argumentos inv´lidos numa chamada a um m´todo (IllegalArgumentEx-
                                                  a                         e
                                    ception);
                                  • Uso de uma referˆncia que n˜o aponta para nenhum objeto (NullPoint-
                                                    e          a
                                    erException);
                                  • Acesso a um arquivo inexistente (FileNotFoundException);
                                  • Erros de banco de dados (SQLException);

                                  A classe Exception, por sua vez, ´ subclasse de Throwable, o que permite
                                                                    e
                               que as exce¸˜es sejam lan¸adas. Se o programador desejar que a exce¸˜o assim
                                          co             c                                            ca
                               lan¸ada seja tratada fora do m´todo que a gerou, ele deve explicitar isto usando
                                  c                          e
                               a palavra chave throws seguida do tipo de exce¸˜o, na declara¸˜o do m´todo.
                                                                             ca               ca        e


                               //Exemplo 1: M´todo indica que todas exce¸~es ser~o lan¸adas, ou seja,
                                             e                          co      a     c
                               //           n~o ser~o tratadas internamente.
                                             a     a

                               public void simpleMethod1 (String x) throws Exception {
                                      //...
                                      if (problema1) throw Exception;
                                      //...
                               }

                               //Exemplo 2: M´todo indica que as exce~es do tipo excecao1
                                             e                       o
http://www.candidatoreal.com




                               //           e excecao2 nao ser~o tratadas internamente.
                                                              a

                               public void simpleMethod2 (int a, int b) throws excecao1, excecao2 {
                                      //...
                                      if (problema1) throw excecao1;
                                      if (problema2) throw excecao2;
                                      //...
                               }

                                  Na verdade, existe uma classe de exce¸˜es, a RuntimeException, que n˜o
                                                                         co                               a
                               precisam ser lan¸ada explicitamente. RuntimeException ´ uma superclasse das
                                               c                                      e
                               exce¸˜es que podem ocorrer durante a opera¸˜o normal da m´quina virtual Java.
                                   co                                    ca             a


                                                                     174
http://www.candidatoreal.com




                               Uma vez que a exce¸˜o foi lan¸ada, a execu¸˜o do m´todo ´ interrompida e o
                                                    ca        c            ca      e    e
                               controle volta ao objeto que chamou este m´todo. Exemplos de classes que her-
                                                                         e
                               dam de RuntimeException s˜o ArithmeticException, BufferOverflowException,
                                                            a
                               ClassCastException, IllegalArgumentException, IndexOutOfBoundsException,
                               NullPointerException, SystemException, etc.

                                   A figura 16.2 mostra como as exce¸˜es est˜o organizadas na hierarquia de
                                                                   co      a
                               classes da linguagem Java.




                                                     Figura 16.2: Exceptions e Errors

                                   Al´m das exce¸˜es t´
                                     e           co    ıpicas, a figura 16.2 mostra tamb´m a classe Error. Er-
                                                                                       e
                               ror ´ uma subclasse de Throwable que indica situa¸˜es excepcionais externas a
                                   e                                              co
                               aplica¸˜o, das quais a aplica¸˜o nem sempre ´ capaz de se recuperar, por exem-
                                     ca                     ca              e
                               plo, um problema de hardware. Uma aplica¸˜o pode decidir por capturar um
                                                                            ca
                               erro com objetivo de notificar o usu´rio sobre o problema, no entanto, quase
                                                                     a
                               sempre faz mais sentido para o programa imprimir um stack trace e encerrar.

                                  A classe VirtualMachineError ´ um exemplo de subclasse de Error, que en-
                                                               e
                               globa problemas como falta de mem´ria (OutOfMemoryError) e estouro de pilha
                                                                o
                               (StackOverflowError).


                               16.1.2    Capturando Exce¸˜es
                                                        co
                               Para capturar uma exce¸˜o ´ utilizada a seguinte estrutura de c´digo:
                                                     ca e                                     o

                               try {
http://www.candidatoreal.com




                                  // C´digo que pode gerar exce¸~es dos tipos
                                      o                        co
                                  // ExceptionType1 e ExceptionType2

                               }catch(ExceptionType1 opa1){
                                  // C´digo para lidar com uma exce¸~o do tipo
                                      o                            ca
                                  // ExceptionType1

                               }catch( ExceptionType2 opa2 ){
                                  // C´digo para lidar com uma exce¸~o do tipo
                                      o                            ca
                                  // ExceptionType2



                                                                    175
http://www.candidatoreal.com




                               }finally{
                                  // C´digo que deve ser executado em qualquer caso
                                      o

                               }

                                   Quando ocorre uma exce¸˜o, os blocos catch s˜o examinados sucessivamente
                                                          ca                   a
                               at´ que o argumento corresponda ao tipo da exce¸˜o. No exemplo acima, se
                                 e                                                ca
                               ExceptionType2 for uma subclasse de ExceptionType1, o segundo bloco catch
                               nunca ser´ alcan¸ado. Neste caso, deve-se inverter a ordem dos blocos catch.
                                        a      c

                                   O bloco finally ´ opcional, e normalmente ´ usado para realizar a¸˜es que
                                                   e                          e                      co
                               independem da ocorrˆncia de uma exce¸˜o em um dado bloco de comandos.
                                                     e                  ca
                               Por exemplo, em um sistema que escreve informa¸˜es em um banco de dados,
                                                                                 co
                               ´ necess´rio fechar a conex˜o com este ultimo ao final da opera¸˜o de escrita,
                               e        a                 a            ´                       ca
                               independentemente da opera¸˜o ter sido bem-sucedida ou n˜o. Tendo isso em
                                                            ca                             a
                               vista, o comando respons´vel por fechar a conex˜o deve ficar dentro de um bloco
                                                        a                     a
                               finally.



                               16.2      Threads e Concorrˆncia
                                                          e
                               Em programa¸˜o concorrente existem duas unidades b´sicas de execu¸˜o: pro-
                                             ca                                    a              ca
                               cessos e threads. Em java, os recrsos para programa¸˜o concorrente s˜o mais
                                                                                  ca               a
                               voltados para o uso de threads.

                                   Threads s˜o comumente chamadas de processos leves. Processos e threads
                                            a
                               provˆem um ambiente de execu¸˜o, mas criar uma thread requer menos recursos
                                     e                       ca
                               que criar um processo. As threads existem dentro dos processos - cada processo
                               possui pelo menos uma. As threads compartilham os recursos do processo, in-
                               cluindo mem´ria e arquivos abertos, favorecendo a eficiˆncia da comunica¸˜o,
                                            o                                         e                  ca
                               por´m a tornando potencialmente problem´tica.
                                   e                                     a

                                   Cada aplica¸˜o possui pelo menos uma thread - ou v´rias, se considerarmos
                                               ca                                     a
                               a threads de sistema. Do ponto de vista do programador, uma aplica¸˜o come¸a
                                                                                                  ca      c
                               com apenas uma unica thread chamada main, e essa possui a habilidade para
                                                  ´
                               criar novas threads.
http://www.candidatoreal.com




                               16.2.1    Definindo e Iniciando uma Thread
                               Existem duas formas b´sicas de se definir uma thread em Java: implementar a
                                                     a
                               interface Runnable ou extender a classe Thread. O c´digo para cada um das
                                                                                   o
                               formas segue abaixo:


                               //Implementando a interface Runnable
                               public class HelloRunnable implements Runnable {
                                   public void run() {
                                       System.out.println("Hello from a thread!");
                                   }

                                                                    176
http://www.candidatoreal.com




                                   public static void main(String args[]) {
                                       (new Thread(new HelloRunnable())).start();
                                   }
                               }

                               //Extendendo a classe Thread
                               public class HelloThread extends Thread {
                                   public void run() {
                                       System.out.println("Hello from a thread!");
                                   }
                                   public static void main(String args[]) {
                                       (new HelloThread()).start();
                                   }
                               }

                                  A primeira forma ´ mais geral e flex´
                                                     e                 ıvel, porque objetos Runnable podem
                               herdar de outras classes diferentes de Thread. No entanto, a segunda forma ´
                                                                                                          e
                               mais simples e funciona bem para aplica¸˜es que pouco complexas.
                                                                       co

                                  Em ambos os casos, a tarefa executada pela thread deve ser implementada
                               no m´todo Thread.run e para inici´-la deve ser utilizado o m´todo Thread.start.
                                   e                            a                          e


                               16.2.2    Pausando a execu¸˜o com sleep
                                                         ca
                               Thread.sleep faz com que a thread corrente suspenda sua execu¸˜o por um
                                                                                              ca
                               per´ıodo de tempo espec´ıfico. Essa uma forma de liberar o processador para
                               outras threads ou processos que estejam rodando no sistema. O parˆmetro do
                                                                                                a
                               m´todo Thread.sleep ´ o tempo em milissegundos.
                                 e                  e


                               public class SleepMessages {
                                   public static void main(String args[]) throws InterruptedException {
                                       String importantInfo[] = {
                                           "Mares eat oats",
                                           "Does eat oats",
                                           "Little lambs eat ivy",
                                           "A kid will eat ivy too"
                                       };
http://www.candidatoreal.com




                                        for (int i = 0; i < importantInfo.length; i++) {
                                            //Pausa a thread corrente (main) por 4 segundos
                                            Thread.sleep(4000);
                                            //Imprime uma mensagem
                                            System.out.println(importantInfo[i]);
                                        }
                                   }
                               }




                                                                    177
http://www.candidatoreal.com




                               16.2.3     Interrup¸˜es
                                                  co
                               Uma interrup¸˜o indica que a thread deve parar o que est´ fazendo e come¸ar
                                             ca                                        a               c
                                                    ´
                               a fazer outra coisa. E o programador quem deve definir como a thread deve
                               responder a uma interrup¸˜o. O uso mais comum de interrup¸˜es ´ finalizar a
                                                        ca                                 co e
                               execu¸˜o de uma thread.
                                     ca


                               for (int i = 0; i < importantInfo.length; i++) {
                                   //Pause for 4 seconds
                                   try {
                                       Thread.sleep(4000);
                                   } catch (InterruptedException e) {
                                       //We’ve been interrupted: no more messages.
                                       return;
                                   }
                                   //Print a message
                                   System.out.println(importantInfo[i]);
                               }

                               16.2.4     Joins
                               O m´todo join ´ usado para fazer com que uma thread aguarde at´ que outra
                                    e          e                                                   e
                               thread termine. Em geral, o join ´ utilizado para a thread esperar pelo t´rmino
                                                                e                                       e
                               da execu¸˜o de suas threads filhas. Imagine uma aplica¸˜o que dependa da
                                         ca                                               ca
                               execu¸˜o de trˆs tarefas independentes A, B e C. A aplica¸˜o s´ pode continuar
                                     ca      e                                           ca o
                               quando cada uma das tarefas estiver sido completada. Portanto, a aplica¸˜o  ca
                               (thread principal) deve executar o m´todo join para cada uma das tarefas A,B
                                                                    e
                               e C. O c´digo java para essa situa¸˜o teria a seguinte estrutura:
                                        o                        ca

                               public static void main(String args[]) {
                                      System.out.println("Thread main iniciada");

                                        //C´digo inicial da thread main
                                           o

                                        //Threads auxiliares A, B e C
                                        Thread a = new thread_tarefaA();
                                        Thread b = new thread_tarefaB();
                                        Thread c = new thread_tarefaC();
http://www.candidatoreal.com




                                        //Iniciando as threads auxiliares
                                        a.start();
                                        b.start();
                                        c.start();

                                        //Aguardando as threads auxiliares terminarem
                                        a.join();
                                        b.join();
                                        c.join();

                                        //C´digo restante da thread main
                                           o

                                                                    178
http://www.candidatoreal.com




                                        System.out.println("Thread main encerrada");
                               }

                               16.2.5     Sincroniza¸˜o
                                                    ca
                               As threads se comunicam entre si essencialmente por meio de compartilhamento
                               no acesso de atributos e referˆncias a objetos. Essa ´ uma forma de comunica¸˜o
                                                             e                      e                       ca
                               eficiente, por´m permite a ocorrˆncia de dois tipos de erros: interferˆncia entre
                                            e                    e                                   e
                               threads e erros de consistˆncia de mem´ria. Para contornar esses problemas o
                                                          e             o
                               Java oferece o recurso de sincroniza¸˜o.
                                                                     ca

                                  O problema da interferˆncia ocorre quando duas opera¸˜es, rodando em
                                                          e                               co
                               threads diferentes, mas atuando sobre o mesmo dado, se intercalam.



                                //Interfer^ncia entre threads
                                          e

                                //Tr^s threads que atuam sobre o mesmo dado
                                    e
                                //N~o ´ poss´vel garantir a ordem de execu¸~o das opera¸~es
                                   a e      ı                             ca           co
                                //pois em princ´pio, as threads s~o iniciadas ao mesmo tempo.
                                               ı                 a

                                int a = 0;
                                thread_incrementa_a.start();
                                thread_decrementa_a.start();
                                thread_imprime_a.start();

                                   Os erros de inconsistˆncia de mem´ria ocorrem quando diferentes threads
                                                        e            o
                               tˆm diferentes vis˜es daquilo que deveria ser o mesmo dado. As causas dos
                                e                 o
                               erros de inconsistˆncia de mem´ria s˜o complexas e est˜o fora do escopo dessa
                                                 e            o    a                 a
                               se¸˜o.
                                  ca

                                   A chave para evitar esse tipo de erro est´ em entender o que o Java chama de
                                                                            a
                               relacionamento happens-before. Esse relacionamento consiste em garantir que a
                               mem´ria escrita por uma statement espec´
                                    o                                     ıfica est´ vis´ para uma outra state-
                                                                                  a ıvel
                               ment. Para criar esse tipo de relacionamento entre threads pode ser utilizado o
                               m´todo Thread.join, como discutido anteriormente. A linguagem Java tamb´m
                                 e                                                                          e
                               provˆ outros dois idiomas para sincroniza¸˜o que s˜o: m´todos sincronizados e
                                    e                                      ca       a     e
http://www.candidatoreal.com




                               statements sincronizadas.

                                   Com os m´todos sincronizados n˜o ´ poss´
                                              e                     a e         ıvel realizar duas chamadas si-
                               multˆneas do m´todo sobre um unico objeto. Quando uma thread est´ execu-
                                    a           e              ´                                       a
                               tando um m´todo sincronizado sobre um objeto, todas as outras threads que
                                            e
                               invocam m´todos sincronizados para o mesmo objeto suspendem sua execu¸˜o
                                          e                                                                ca
                               at´ que a primeira thread libere o objeto. Al´m disso, os m´todos sincroniza-
                                 e                                            e                e
                               dos estabelecem automaticamente uma rela¸˜o de happens-before com todas as
                                                                           ca
                               chamadas subsequentes de m´todos sincronizados. Isso garante que a as mu-
                                                            e
                               dan¸as no estado do objeto estar˜o vis´
                                   c                            a    ıveis para todas as threads.

                               public class SynchronizedCounter {

                                                                     179
http://www.candidatoreal.com




                                    private int c = 0;

                                    //M´todos sincronizados para manipular um contador
                                       e
                                    public synchronized void increment() {c++;}
                                    public synchronized void decrement() {c--;}
                                    public synchronized int value() {return c;}

                               }

                                  Ao contr´rio dos m´todos sincronizados, as statements sincronizadas devem
                                           a         e
                               espec´
                                    ıficar para qual objeto dever´ ser obtido o lock. Essa t´cnica pode ser util
                                                                a                          e               ´
                               quando ´ implementar concorrˆncia com uma granularidade mais fina. Uma
                                       e                      e
                               exemplo de c´digo para cria¸˜o de statements sincronizadas ´ mostrado abaixo:
                                            o             ca                               e

                               public class MsLunch {

                                    private   long c1 = 0;
                                    private   long c2 = 0;
                                    private   Object lock1 = new Object();
                                    private   Object lock2 = new Object();

                                    public void inc1() {
                                        //Lock somente sobre o objeto lock1
                                        synchronized(lock1) {c1++;}
                                    }

                                    public void inc2() {
                                        //Lock somente sobre o objeto lock2
                                        synchronized(lock2) {c2++;}
                                    }
                               }

                               16.2.6     Executores e Thread Pools
                               Nos exemplos mostrados, existe uma conex˜o direta entre a tarefa executada
                                                                            a
                               por uma nova thread, como definida no objeto Runnable, e a nova thread em
                               sim, definida por um objeto Thread. Isso funciona bem para aplica¸˜es pe-
                                                                                                      co
                               quenas. Em aplica¸˜es de grande porte ´ mais apropriado separar a cria¸˜o e
                                                  co                   e                                  ca
http://www.candidatoreal.com




                               gerenciamento da threads do resto da aplica¸˜o. Os objetos que encapsulam as
                                                                           ca
                               fun¸˜es de gerenciamento de threads s˜o chamados executores (executors).
                                   co                                a
                                   O pacote java.util.concurrency define trˆs interfaces executoras que s˜o Ex-
                                                                          e                             a
                               ecutor, ExecutorService e ScheduledExecutorService. Essas interfaces definem
                               m´todos para gerenciamento de threads na aplica¸˜o. Exemplo: Se r ´ um
                                 e                                                 ca                     e
                               objeto do tipo Runnable, e e ´ um objeto do tipo Executor o trecho de c´digo
                                                             e                                           o

                                     (new Thread(r)).start();

                                   poderia ser substitu´ por
                                                       ıdo

                                     e.execute(r);

                                                                     180
http://www.candidatoreal.com




                                   Na primeira forma, uma nova thread seria criada para realizar a tarefa
                               definida em r, enquanto na segunda, isso dependeria da implementa¸˜o da in-
                                                                                               ca
                               terface executora.

                                   Geralmente, as interfaces executoras s˜o criadas utilizando as chamadas
                                                                         a
                               ThreadPools, que consistem de um conjunto de threads (worker threads) re-
                               spons´veis pela execu¸˜o das tarefas. Quando o m´todo execute ´ chamado
                                    a                ca                             e             e
                               sobre o objeto r, uma worker thread ´ alocada para rodar a tarefa definida em
                                                                   e
                               r. Caso n˜o exista nenhuma worker thread dispon´ no momento, r ´ colocada
                                        a                                      ıvel                e
                               em uma fila de espera at´ que uma worker thread seja liberada.
                                                        e

                                  Usando pools de threads ´ poss´
                                                             e      ıvel minimizar o overhead de cria¸˜o de
                                                                                                     ca
                               threads e otimizar o gerenciamento de mem´ria, uma vez que ´ poss´ definir o
                                                                          o               e     ıvel
                               n´mero m´ximo de threads no pool de acordo com as necessidades da aplica¸˜o
                                u        a                                                              ca
                               e quantidade de recursos do sistema.



                               16.3      Streams e Serializa¸˜o
                                                            ca
                               16.3.1    I/O Streams
                               Um I/O stream pode representar diferentes tipos de fonte e destino, incluindo
                               arquivos em discos, dispositivos, outros programas e mem´ria. Os streams su-
                                                                                         o
                               portam diversos tipos de dados, como simples bytes, tipos de dados primitivos e
                               at´ mesmo objetos complexos. Alguns streams simplesmente passam os dados,
                                 e
                               enquanto outros realizam algum tipo de manipula¸˜o e transforma¸˜o conforme
                                                                                ca               ca
                               necess´rio. A seguir ser˜o mostrados alguns exemplos da utiliza¸˜o de streams.
                                     a                 a                                      ca

                                  Streams de Bytes

                                   Byte streams s˜o utilizados para realizar input e output de bytes. Todas
                                                   a
                               as classes byte stream herdam de InputStream e outputStream. Os streams de
                               bytes representam o n´ ıvel mais baixo que pode ser alcan¸ado, e devem evita-
                                                                                         c
                               dos. Todas as outras classes de stream s˜o constru´
                                                                        a         ıdas com base na opera¸˜es
                                                                                                        co
                               definidas pelas classes de byte stream.

                               //Exemplo 1: Stream de Bytes
                               //Copia o arquivo xanadu.txt para outagain.txt byte a byte.
http://www.candidatoreal.com




                               import java.io.FileInputStream;
                               import java.io.FileOutputStream;
                               import java.io.IOException;

                               public class CopyBytes {
                                   public static void main(String[] args) throws IOException {
                                       FileInputStream in = null;
                                       FileOutputStream out = null;
                                       try {
                                           in = new FileInputStream("xanadu.txt");
                                           out = new FileOutputStream("outagain.txt");

                                                                    181
http://www.candidatoreal.com




                                            int c;
                                            while ((c = in.read()) != -1) {
                                                out.write(c);
                                            }
                                        } finally {
                                            if (in != null) {in.close();}
                                            if (out != null) {out.close();}
                                        }
                                    }
                               }

                                   Streams de Caracteres

                                  A plataforma java armazena os valores dos caracteres utilizando a conve¸˜o
                                                                                                         ca
                               Unicode. As opera¸˜es de com streams de caracteres automaticamente con-
                                                  co
                               vertem do formato Unicode para o formato local.

                               //Exemplo 1: Stream de Caracteres
                               //Copia o arquivo xanadu.txt para characteroutput.txt caracter e caracter

                               import java.io.FileReader;
                               import java.io.FileWriter;
                               import java.io.IOException;

                               public class CopyCharacters {
                                   public static void main(String[] args) throws IOException {
                                       FileReader inputStream = null;
                                       FileWriter outputStream = null;
                                       try {
                                           inputStream = new FileReader("xanadu.txt");
                                           outputStream = new FileWriter("characteroutput.txt");
                                           int c;
                                           while ((c = inputStream.read()) != -1) {
                                               outputStream.write(c);
                                           }
                                       } finally {
                                           if (inputStream != null) {inputStream.close();}
                                           if (outputStream != null) {outputStream.close();}
                                       }
http://www.candidatoreal.com




                                   }
                               }

                                   No entanto, I/O de caracteres geralmente ocorrem linha a linha. Uma linha
                               ´ um conjunto de caracteres terminada por um caracter especial de fim de linha.
                               e
                               O c´digo a seguir executa a mesma tarefa do exemplo 1, por´m copia o arquivo
                                   o                                                      e
                               linha a linha e utiliza estrat´gias de buffering.
                                                             e

                               //Exemplo 2: Stream de Caracteres linha a linha
                               //Copia o arquivo xanadu.txt para characteroutput.txt linha a linha

                               import java.io.FileReader;

                                                                    182
http://www.candidatoreal.com




                               import   java.io.FileWriter;
                               import   java.io.BufferedReader;
                               import   java.io.PrintWriter;
                               import   java.io.IOException;

                               public class CopyLines {
                                   public static void main(String[] args) throws IOException {
                                       BufferedReader inputStream = null;
                                       PrintWriter outputStream = null;
                                       try {
                                           inputStream = new BufferedReader(new FileReader("xanadu.txt"));
                                           outputStream =new PrintWriter(new FileWriter("characteroutput.txt"));
                                           String l;
                                           while ((l = inputStream.readLine()) != null) {
                                               outputStream.println(l);
                                           }
                                       } finally {
                                           if (inputStream != null) {inputStream.close();}
                                           if (outputStream != null) {outputStream.close();}
                                       }
                                   }
                               }

                                   No exemplo 1 o c´digo utiliza opera¸˜e de I/O n˜o bufferizadas. Isso significa
                                                   o                  co          a
                               que a cada requisi¸˜o de leitura ou escrita expressa no c´digo ´ prontamente
                                                  ca                                     o     e
                               tratada pelo sistema operacional, disparando, por exemplo, acesso ao disco ou
                               a
                               ` rede.

                                   Para reduzir esse tipo de overhead a plataforma Java implementa I/O streams
                               bufferizados. Os input streams lˆem dados de uma ´rea de buffer; a API in-
                                                                  e                   a
                               put nativa s´ ´ chamada quando esse buffer est´ vazio ou n˜o cont´m os dados
                                            oe                                  a           a     e
                               procurados. Similarmente, os output streams escrevem dados para uma ´rea de
                                                                                                       a
                               buffer, enquanto a API nativa de output s´ ´ chamada quando o buffer de es-
                                                                            oe
                               crita est´ cheio ou quando algum comando que implique no flushing ´ utilizado,
                                        a                                                           e
                               por exemplo, println.

                               16.3.2     Serializa¸˜o - Streams de Objetos
                                                   ca
                               Os streams apresentados at´ agora s˜o chamados data streams. Assim como
                                                            e       a
http://www.candidatoreal.com




                               os data streams suportam I/O de tipos primitivos de dados, os object streams
                               suportam I/O para objetos. A maioria das classes padr˜o do java suportam
                                                                                         a
                               a serializa¸˜o de seus objetos. Para que uma objetos de uma classe possam
                                           ca
                               ser serializados a classe deve implementar a interface Serializable. A interface
                               Serializable n˜o define m´todos ou atributos, servindo apenas para indicar que
                                              a           e
                               uma classe ´ serializ´vel.
                                            e       a

                                  As classes de streams de objetos s˜o ObjectInputStream e ObjectOutput-
                                                                    a
                               Stream. Essas classes implementam as interfaces ObjectInput e ObjectOutput,
                               que por sua ve s˜o subitnerfaces de DataInput and DataOutput. Isso significa
                                               a
                               dizer que todos os m´todos para I/O de tipos de dados primitivos tamb´m s˜o
                                                   e                                                e   a


                                                                     183
http://www.candidatoreal.com




                               implementados nas classes de stream para objetos. A seguir, um exemplo sim-
                               ples para serializa¸˜o de objetos em Java.
                                                  ca


                               import java.io.*;

                               public class Pessoa implements Serializable{

                                        public String nome = "Maria";
                                        public int idade = 30;
                                        public String sexo = "feminino";

                                        public Pessoa (String p_nome, int p_idade, String p_sexo){
                                           nome = p_nome;
                                           idade = p_idade;
                                           sexo = p_sexo;
                                        }

                                        public static void main (String [] args){

                                                 Pessoa p = new Pessoa("Maria",10,"feminino");

                                                 try {
                                                          // Serializa o objeto para um arquivo
                                                          ObjectOutput out = new ObjectOutputStream(
                                                                                 new FileOutputStream("pessoa.ser")
                                                                             );
                                                          out.writeObject(p);
                                                          out.close();

                                                           // Desserializa o objeto a partir do arquivo
                                                          File file = new File("pessoa.ser");
                                                          ObjectInputStream in = new ObjectInputStream(
                                                                                     new FileInputStream(file)
                                                                                 );
                                                          Pessoa clone = (Pessoa) in.readObject();
                                                          in.close();

                                                          // Testa um atributo do novo objeto clone
http://www.candidatoreal.com




                                                          System.out.println("Nome de p: " + p.nome);
                                                          System.out.println("Nome do clone de p: " + clone.nome);

                                                          }catch (IOException e) {
                                                               //Pode ser gerado na serializa¸~o ou desserializa¸~o
                                                                                              ca                ca
                                                               System.out.println(e.getMessage());
                                                          }catch (ClassNotFoundException e) {
                                                               //Pode ser gerado desserializa¸~o
                                                                                              ca
                                                               System.out.println(e.getMessage());
                                                          }
                                        }


                                                                  184
http://www.candidatoreal.com




                               }

                                   Embora as classes ObjectInputStream e ObjectOutputStream sejam sufi-
                               cientes para serializar e desserializar a maioria dos objetos no Java, ela possui
                               o incoveniente de utilizar arquivos bin´rios, o que dificulta a leitura direta por
                                                                        a
                               um usu´rio ou por outras aplica¸˜es (escritas em outras linguagens, por exem-
                                       a                         co
                               plo). Muitas aplica¸˜es realiz˜o serializa¸˜o com arquivos XML, o que permite
                                                   co         a           ca
                               contornar os problemas da legibilidade e integra¸˜o mais facilmente.
                                                                                 ca

                                   Existem in´meros pacotes para serializa¸˜o de objetos em arquivos XML.
                                               u                           ca
                               Quando se est´ trabalhando com java beans, por exemplo, duas classes muito
                                               a
                               utilizadas para serializa¸˜o de objetos em XML s˜o java.beans.XMLEncoder e
                                                        ca                     a
                               java.beans.XMLDecoder. A seguir, um trecho de c´digo exemplificando o uso
                                                                                 o
                               dessas classes.



                               PessoaXML p = new PessoaXML("Maria",10,"feminino");

                               // Serializa o objeto para um arquivo XML
                               XMLEncoder e = new XMLEncoder(
                                                  new BufferedOutputStream(
                                                      new FileOutputStream("pessoa.xml")));
                               e.writeObject(p);
                               e.close();

                               // Desserializa o objeto a partir do arquivo XML
                               XMLDecoder d = new XMLDecoder(
                                                  new BufferedInputStream(
                                                      new FileInputStream("pessoa.xml")));
                               PessoaXML clone = (PessoaXML) d.readObject();
                               d.close();



                               16.4      Classes e Opera¸˜es de I/O
                                                        co
                               16.5      Classes para manipula¸˜o de propriedades
                                                              ca
http://www.candidatoreal.com




                               Boa parte das aplica¸˜es necessitam de algum tipo de configura¸˜o adicional que
                                                   co                                       ca
                               n˜o pode ser embutida diretamente no c´digo. Em java, uma forma tradicional
                                a                                       o
                               de se fazer isso envolve a utiliza¸˜o ddos chamados arquivos de propriedades,
                                                                 ca
                               que podem ser manipulados a partir da classe java.util.Properties, que ´ uma
                                                                                                       e
                               extens˜o da classe java.util.Hashtable.
                                     a

                                  Um arquivo de propriedades guarda conjunto de pares nome/valor, que po-
                               dem ser lidos ou alterados. O formato t´
                                                                      ıpico de um arquivo de propriedades ´
                                                                                                          e
                               motrado a seguir:



                                                                     185
http://www.candidatoreal.com




                               #Esta ´ uma linha de coment´rio
                                     e                     a
                               #Mon Jun 11 22:37:16 BRT 2007
                               app.diretorio=/zaz/traz/bin
                               app.usuario=camatchones
                               app.mododeoperacao=producao

                                  E a seguir ´ mostrado um exemplo de c´digo Java para manipula¸˜o de um
                                             e                         o                       ca
                               arquivo de propriedades.

                               import java.util.Properties;
                               import java.io.*;

                               public class Exemplo {

                                   public Exemplo (){}

                                   public static void main (String [] args){
                                       try{
                                            // Cria e le os valores padrao para um objeto Propertie
                                            Properties defaultProps = new Properties();
                                            FileInputStream in = new FileInputStream("exemplo.properties");
                                            defaultProps.load(in);
                                            in.close();

                                           // Utilizacao as propriedades quando precisarmos
                                           String diretorio = defaultProps.getProperty("app.diretorio");
                                           String usuario = defaultProps.getProperty("app.usuario");

                                           // Modificamos/Criando valores das propriedades
                                           if (usuario.equals("joao")){
                                              defaultProps.setProperty("app.dataDir", "/home/joao");
                                              defaultProps.setProperty("app.nova_configuracao", "12345");
                                           }

                                           // Salvamos para uma proxima execussao
                                           FileOutputStream out = new FileOutputStream("exemplo.properties");
                                           defaultProps.store(out, "Isso ´ um coment´rio!");
                                                                         e          a
                                           out.close();
http://www.candidatoreal.com




                                        }catch(Exception e){
                                   System.out.println(e.getMessage());
                                        }
                                   }
                               }

                                   Uma observa¸˜o importante ´ que o m´todo getProperty sempre retorna
                                                ca             e       e
                               uma String, de modo que se uma propriedade ´ de algum outro tipo, essa deve
                                                                          e
                               ser convertida no momento da leitura.

                                   Atualmente o uso de arquivos XML para armazenamento de configura¸˜es
                                                                                                  co


                                                                  186
http://www.candidatoreal.com




                               vem ganahando popularidade, no entanto, os arquivos de propriedades contin-
                               uam ser uma forma simples e eficaz de gerenciar configuracoes simples.
http://www.candidatoreal.com




                                                                  187
http://www.candidatoreal.com




                               Cap´
                                  ıtulo 17

                               Cole¸˜es
                                   co

                               Uma cole¸˜o ´ simplesmente um grupo de objetos em uma unica unidade. As
                                         ca e                                             ´
                               cole¸˜es s˜o usadas para armazenar, recuperar, manipular e comunicar dados
                                   co    a
                               agregados. Tipicamente, representam itens de dados que d˜o forma a um grupo
                                                                                       a
                               natural, tal como uma m˜o do poker (uma cole¸˜o dos cart˜es) e uma pasta de
                                                       a                     ca         o
                               correspondˆncia (uma cole¸˜o das letras).
                                           e             ca

                                  Uma framework de cole¸˜es ´ uma arquitetura unificada para representa¸˜o e
                                                         co e                                         ca
                               manipula¸˜o das cole¸˜es, permitindo que elas sejam manipuladas independen-
                                       ca          co
                               temente dos detalhes de sua implementa¸˜o. Todos os frameworks de cole¸˜es
                                                                      ca                               co
                               contˆm:
                                   e

                                  • Interfaces: Estes s˜o os tipos de dados abstratos que representam as
                                                        a
                                    cole¸˜es. As interfaces permitem que as cole¸˜es sejam manipuladas inde-
                                        co                                      co
                                    pendentemente dos detalhes de sua representa¸˜o. Em linguagem orien-
                                                                                   ca
                                    tadas ` objeto as interfaces d˜o forma geralmente a uma hierarquia;
                                           a                      a
                                  • Implementa¸˜es: Estas s˜o as implementa¸˜es concretas das rela¸˜es da
                                                co           a                 co                 co
                                    cole¸˜o. Essencialmente, s˜o estruturas de dados reus´veis;
                                        ca                     a                         a

                                  • Algoritmos: Estes s˜o os m´todos que executam computa¸˜es uteis, tais
                                                       a         e                           co ´
                                    como procurar e ordenar objetos de uma determinada cole¸˜o. Os algorit-
                                                                                            ca
                                    mos s˜o polim´rficos, isto ´, o mesmo m´todo pode ser usado em diferentes
                                         a        o           e           e
                                    implementa¸˜es.
                                               co

                                  As principais vantagens do framework de cole¸˜es (collection framework)
                                                                              co
http://www.candidatoreal.com




                               s˜o:
                                a

                                  • Redu¸˜o do esfor¸o de programa¸˜o, fornecendo estruturas de dados e
                                         ca           c               ca
                                    algoritmos uteis, para que n˜o seja necess´rio reescrevˆ-los;
                                               ´                a             a            e

                                  • Aumento da performance: fornecendo implementa¸˜es de alta perfor-
                                                                                       co
                                    mance. Como as v´rias implementa¸˜es de cada interface s˜o substitu´
                                                     a                co                    a          ıveis,
                                    os programas podem ser facilmente refinados trocando-se as implementa¸˜es;
                                                                                                         co

                                  • Interoperabilidade entre APIs n˜o relacionadas, estabelecendo uma lin-
                                                                   a
                                    guagem comum para passagem de cole¸˜es;
                                                                         co



                                                                   188
http://www.candidatoreal.com




                                  • Redu¸˜o do esfor¸o de aprendizado de APIs, eliminando a necessidade de
                                         ca          c
                                    se aprender v´rias APIs de cole¸˜es diferentes;
                                                 a                 co

                                  • Redu¸˜o do esfor¸o de projetar e implementar APIs, eliminando a neces-
                                         ca           c
                                    sidade de se criar APIs de cole¸˜es pr´prias;
                                                                   co     o

                                  • Promover o re´so de software, fornecendo uma interface padr˜o para
                                                    u                                          a
                                    cole¸˜es e algoritmos para manipul´-los.
                                        co                            a

                                  As cole¸˜es s˜o necess´rias, devido o uso dos arrays possuir uma s´rie de
                                          co   a        a                                           e
                               limita¸˜es, como por exemplo:
                                     co

                                  • Um array n˜o pode ter o tamanho modificado depois de criado;
                                              a
                                  • Somente pode conter elementos de um mesmo tipo;

                                  • Para inserir ou retirar um elemento ´ necess´rio modificar a posi¸˜o de
                                                                        e       a                   ca
                                    outros elementos.




                                                      Figura 17.1: Interfaces Collection



                               17.1      Interface Collection
                               Interface base para todos os tipos de cole¸˜o. Ela define as opera¸˜es mais
                                                                            ca                       co
                               b´sicas para cole¸˜es de objetos, como adi¸˜o (add) e remo¸˜o (remove) ab-
                                a                co                         ca               ca
                               stratos (sem informa¸˜es quanto ` ordena¸˜o dos elementos), esvaziamento
                                                      co           a         ca
                               (clear), tamanho (size), convers˜o para array (toArray), objeto de itera¸˜o (it-
                                                                a                                       ca
                               erator), e verifica¸˜es de existˆncia (contains e isEmpty). A seguir ´ mostada a
                                                 co           e                                    e
                               Interface Collection:


                               public interface Collection<E> extends Iterable<E> {
http://www.candidatoreal.com




                                   // Basic operations
                                   int size();
                                   boolean isEmpty();
                                   boolean contains(Object element);
                                   boolean add(E element);         //optional
                                   boolean remove(Object element); //optional
                                   Iterator<E> iterator();

                                   // Bulk operations
                                   boolean containsAll(Collection<?> c);
                                   boolean addAll(Collection<? extends E> c); //optional


                                                                     189
http://www.candidatoreal.com




                                    boolean removeAll(Collection<?> c);               //optional
                                    boolean retainAll(Collection<?> c);               //optional
                                    void clear();                                     //optional

                                    // Array operations
                                    Object[] toArray();
                                    <T> T[] toArray(T[] a);

                               }


                               17.2      Interface Set
                               Interface que define uma cole¸˜o, ou conjunto, que n˜o cont´m objetos dupli-
                                                             ca                      a      e
                               cados. Isto ´, s˜o ignoradas as adi¸˜es caso o objeto ou um objeto equivalente
                                            e a                   co
                               j´ exista na cole¸˜o. Por objetos equivalentes, entenda-se objetos que tenham
                                a               ca
                               o mesmo c´digo hash (retornado pelo m´todo hashCode()) e que retornem ver-
                                          o                             e
                               dadeiro na compara¸˜o feita pelo m´todo equals().
                                                    ca             e

                                  N˜o ´ garantida a ordena¸˜o dos objetos, isto ´, a ordem de itera¸˜o dos
                                    a e                     ca                   e                  ca
                               objetos n˜o necessariamente tem qualquer rela¸˜o com a ordem de inser¸˜o dos
                                        a                                    ca                     ca
                               objetos. Por isso, n˜o ´ poss´
                                                   a e      ıvel indexar os elementos por ´
                                                                                          ındices num´ricos,
                                                                                                     e
                               como em uma List. A seguir ´ mostada a Interface Set:
                                                            e


                               public interface Set<E> extends Collection<E> {

                                    // Basic operations
                                    int size();
                                    boolean isEmpty();
                                    boolean contains(Object element);
                                    boolean add(E element);         //optional
                                    boolean remove(Object element); //optional
                                    Iterator<E> iterator();

                                    // Bulk operations
                                    boolean containsAll(Collection<?> c);
                                    boolean addAll(Collection<? extends E> c); //optional
                                    boolean removeAll(Collection<?> c);        //optional
http://www.candidatoreal.com




                                    boolean retainAll(Collection<?> c);        //optional
                                    void clear();                              //optional

                                    // Array Operations
                                    Object[] toArray();
                                    <T> T[] toArray(T[] a);

                               }

                                   Existem 3 implementa¸˜es da interface Set:
                                                       co




                                                                    190
http://www.candidatoreal.com




                                   • HashSet: Implementa¸˜o de Set que utiliza uma tabela hash para guardar
                                                           ca
                                     seus elementos. N˜o garante a ordem de itera¸˜o, nem que a ordem per-
                                                        a                           ca
                                     manecer´ constante com o tempo (uma modifica¸˜o da cole¸˜o pode al-
                                              a                                        ca          ca
                                     terar a ordena¸˜o geral dos elementos). Por utilizar o algoritmo de tabela
                                                   ca
                                     hash, o acesso ´ r´pido, tanto para leitura quanto para modifica¸˜o.
                                                    e a                                               ca

                                   • LinkedHashSet: Implementa¸˜o de Set que estende HashSet, mas adi-
                                                                  ca
                                     ciona previsibilidade ` ordem de itera¸˜o sobre os elementos, isto ´, uma
                                                           a                ca                          e
                                     itera¸˜o sobre seus elementos (utilizando o Iterator) mant´m a ordem de
                                          ca                                                    e
                                     inser¸˜o (a inser¸˜o de elementos duplicados n˜o altera a ordem anterior).
                                          ca           ca                          a
                                     Internamente, ´ mantida uma lista duplamente encadeada que mant´m
                                                     e                                                      e
                                     esta ordem. Por ter que manter uma lista paralelamente ` tabela hash, a
                                                                                               a
                                     modifica¸˜o deste tipo de cole¸˜o acarreta em uma leve queda na perfor-
                                              ca                   ca
                                     mance em rela¸˜o ` HashSet, mas ainda ´ mais r´pida que uma TreeSet,
                                                    ca a                       e       a
                                     que utiliza compara¸˜es para determinar a ordem dos elementos.
                                                          co

                                   • TreeSet: Implementa¸˜o de SortedSet. SortedSet ´ uma interface que es-
                                                          ca                            e
                                     tende Set, adicionando a semˆntica de ordena¸˜o natural dos elementos.
                                                                   a                ca
                                     A posi¸˜o dos elementos no percorrimento da cole¸˜o ´ determinado pelo
                                            ca                                          ca e
                                     retorno do m´todo compareTo(o), caso os elementos implementem a inter-
                                                  e
                                     face Comparable, ou do m´todo compare(o1,o2) de um objeto auxiliar que
                                                                e
                                     implemente a interface Comparator. A TreeSet utiliza internamente uma
                                     TreeMap, que por sua vez utiliza o algoritmo Red-Black para a ordena¸˜o
                                                                                                           ca
                                     da ´rvore de elementos. Isto garante a ordena¸˜o ascendente da cole¸˜o, de
                                        a                                         ca                    ca
                                     acordo com a ordem natural dos elementos, definida pela implementa¸˜o  ca
                                     da interface Comparable ou Comparator. Use esta classe quando precisar
                                     de um conjunto (de elementos unicos) que deve estar sempre ordenado,
                                                                     ´
                                     mesmo sofrendo modifica¸˜es.
                                                               co

                                   A seguir s˜o mostrados alguns exemplos:
                                             a


                               import java.util.*;

                               public class FindDups {

                                    public static void main(String[] args) {
                                        Set<String> s = new HashSet<String>();
                                        for (String a : args)
                                            if (!s.add(a))
http://www.candidatoreal.com




                                                System.out.println("Duplicate detected: " + a);
                                        System.out.println(s.size() + " distinct words: " + s);
                                    }

                               }

                               Rodando o programa:

                               prompt#> java FindDups i came i saw i left

                               A sa´da produzida ser´:
                                   ı                a


                                                                     191
http://www.candidatoreal.com




                               Duplicate detected: i

                               Duplicate detected: i

                               4 distinct words: [i, left, saw, came]

                                  O tipo de implementa¸˜o Set no exemplo anterior ´ HashSet, que como dito
                                                        ca                         e
                               anteriormente n˜o faz nenhuma garantia a respeito da ordem dos elementos no
                                               a
                               Set. Caso seja necess´rio imprimir a lista em ordem alfab´tica basta mudar o
                                                    a                                   e
                               tipo de implementa¸˜o de HashSet para TreeSet. A nova sa´ do programa
                                                  ca                                        ıda
                               anterior para TreeSet seria a seguinte:


                               Rodando o programa:

                               prompt#> java FindDups i came i saw i left

                               A sa´da produzida ser´:
                                   ı                a

                               Duplicate detected: i

                               Duplicate detected: i

                               4 distinct words: [came, i, left, saw]

                                  Caso fosse utilizado uma LinkedHashSet a sa´ seria a seguinte:
                                                                             ıda

                               Rodando o programa:

                               prompt#> java FindDups i came i saw i left

                               A sa´da produzida ser´:
                                   ı                a

                               Duplicate detected: i

                               Duplicate detected: i

                               4 distinct words: [i, came, saw, left]
http://www.candidatoreal.com




                                  E agora um outro exemplo, modificando a classe FindDups:

                               import java.util.*;

                               public class FindDups2 {

                                   public static void main(String[] args) {
                                       Set<String> uniques = new HashSet<String>();
                                       Set<String> dups    = new HashSet<String>();
                                       for (String a : args)
                                           if (!uniques.add(a))


                                                                   192
http://www.candidatoreal.com




                                                dups.add(a);
                                        // Destructive set-difference
                                        uniques.removeAll(dups);
                                        System.out.println("Unique words:    " + uniques);
                                        System.out.println("Duplicate words: " + dups);
                                   }

                               }

                                  Executando o c´digo anterior com os mesmos argumentos dos programas
                                                   o
                               anteriores (i came i saw i left) a sa´ deste programa seria:
                                                                    ıda

                               Unique words:       [left, saw, came]

                               Duplicate words: [i]

                                  H´ duas implementa¸˜es Set com finalidades especiais: EnumSet e CopyOn-
                                    a               co
                               WriteArraySet.


                               17.3      Interface List
                               Interface que extende Collection, e que define cole¸˜es ordenadas (seq¨ˆncias),
                                                                                 co                  ue
                               onde se tem o controle total sobre a posi¸˜o de cada elemento, identificado por
                                                                        ca
                               um ´ındice num´rico. Na maioria dos casos, pode ser encarado como um ”array
                                               e
                               de tamanho vari´vel”, pois, como os arrays primitivos, ´ acess´ por ´
                                                 a                                     e      ıvel    ındices,
                               mas al´m disso possui m´todos de inser¸˜o e remo¸˜o. A seguir ´ mostada a
                                      e                 e               ca        ca               e
                               Interface List:


                               public interface List<E> extends Collection<E> {

                                   // Positional access
                                   E get(int index);
                                   E set(int index, E element);           //optional
                                   boolean add(E element);                //optional
                                   void add(int index, E element);        //optional
                                   E remove(int index);                   //optional
                                   boolean addAll(int index,
                                   Collection<? extends E> c);            //optional
http://www.candidatoreal.com




                                   // Search
                                   int indexOf(Object o);
                                   int lastIndexOf(Object o);

                                   // Iteration
                                   ListIterator<E> listIterator();
                                   ListIterator<E> listIterator(int index);

                                   // Range-view
                                   List<E> subList(int from, int to);


                                                                    193
http://www.candidatoreal.com




                               }

                                   Existem 2 implementa¸˜es da interface List:
                                                       co

                                   • ArrayList: Implementa¸˜o de List que utiliza internamente um array de
                                                              ca
                                     objetos. Em uma inser¸˜o onde o tamanho do array interno n˜o ´ su-
                                                               ca                                      a e
                                     ficiente, um novo array ´ alocado (de tamanho igual a 1.5 vezes o ar-
                                                                 e
                                     ray original), e todo o conte´do ´ copiado para o novo array. Em uma
                                                                    u e
                                     inser¸˜o no meio da lista o conte´do posterior ao ´
                                          ca                             u               ındice ´ deslocado em
                                                                                                e
                                     uma posi¸˜o. Esta implementa¸˜o ´ a recomendada quando o tamanho
                                               ca                      ca e
                                     da lista ´ previs´
                                              e        ıvel (evitando realoca¸˜es) e as opera¸˜es de inser¸˜o e
                                                                             co              co           ca
                                     remo¸˜o s˜o feitas, em sua maioria, no fim da lista (evitando deslocamen-
                                           ca a
                                     tos), ou quando a lista ´ mais lida do que modificada (otimizado para
                                                                e
                                     leitura aleat´ria).
                                                  o

                                   • LinkedList: Implementa¸˜o de List que utiliza internamente uma lista
                                                                ca
                                     encadeada. A localiza¸˜o de um elemento na n-´sima posi¸˜o ´ feita
                                                              ca                          e          ca e
                                     percorrendo-se a lista da ponta mais pr´xima at´ o ´
                                                                               o        e ındice desejado. A
                                     inser¸˜o ´ feita pela adi¸˜o de novos n´s, entre os n´s adjacentes, sendo
                                           ca e                ca            o              o
                                     que antes ´ necess´ria a localiza¸˜o desta posi¸˜o. Esta implementa¸˜o ´
                                                 e       a            ca            ca                     ca e
                                     recomendada quando as modifica¸˜es s˜o feitas em sua maioria tanto no
                                                                       co    a
                                     in´ quanto no final da lista, e o percorrimento ´ feito de forma seq¨en-
                                       ıcio                                            e                    u
                                     cial (via Iterator) ou nas extremidades, e n˜o aleat´ria (por ´
                                                                                 a       o         ındices). Um
                                     exemplo de uso ´ como uma fila (FIFO - First-In-First-Out), onde os ele-
                                                       e
                                     mentos s˜o retirados da lista na mesma seq¨ˆncia em que s˜o adicionados.
                                               a                                 ue             a

                                   A seguir s˜o mostrados alguns exemplos:
                                             a


                               import java.util.*;

                               public class ExemploArrayList {

                               public static void main(String[] args) {
                                  List c = new ArrayList();
                                  c.add("Maria");
                                  c.add("Joao");
                                  c.add("Ana");
                                  c.add("Joao");
http://www.candidatoreal.com




                                  c.add("Jose");
                                  Iterator i = c.iterator();
                                  while( i.hasNext() ) {
                                     System.out.print( i.next() + " " );
                                  }
                                  System.out.println();
                                  System.out.println(c.get(2));
                                  System.out.println(c);
                               }

                               }

                                                                     194
http://www.candidatoreal.com




                                  A sa´ produzida ser´:
                                      ıda            a

                               Maria Joao Ana Joao Jose
                               Ana
                               [Maria, Joao, Ana, Joao, Jose]

                                   ArrayList e LinkedList tem algumas diferen¸as, entre elas temos os m´todos
                                                                              c                        e
                               addFirst, addLast, getFirst, getLast, removeFirst e removeLast para LinkedList
                               que inserem, retornam e retiram um elemento no inicio ou no fim de uma lista
                               , com estes m´todos podemos simular pilhas e filas.
                                             e

                                  H´ uma implementa¸˜o List com finalidades especiais: CopyOnWriteAr-
                                    a              ca
                               rayList.


                               17.4      Interface Map
                               Interface que define um array associativo, isto ´, ao inv´s de n´meros, objetos
                                                                               e        e       u
                               s˜o usados como chaves para se recuperar os elementos. As chaves n˜o podem se
                                a                                                                   a
                               repetir (seguindo o mesmo princ´ıpio da interface Set), mas os valores podem ser
                               repetidos para chaves diferentes. Um Map tamb´m n˜o possui necessariamente
                                                                                e     a
                               uma ordem definida para o percorrimento. A seguir ´ mostada a Interface Map:
                                                                                    e


                               public interface Map<K,V> {

                                   // Basic operations
                                   V put(K key, V value);
                                   V get(Object key);
                                   V remove(Object key);
                                   boolean containsKey(Object key);
                                   boolean containsValue(Object value);
                                   int size();
                                   boolean isEmpty();

                                   // Bulk operations
                                   void putAll(Map<? extends K, ? extends V> m);
                                   void clear();

                                   // Collection Views
http://www.candidatoreal.com




                                   public Set<K> keySet();
                                   public Collection<V> values();
                                   public Set<Map.Entry<K,V>> entrySet();
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos
Handbook de ti_para_concursos

Mais conteúdo relacionado

PDF
Hardware CDTC
PDF
PDF
PDF
Notas sobre Sistemas Operacionais
PDF
Arquitetura computadores
PDF
Manual controlador lógico zelio
PDF
H376985
PDF
Scilab programacao
Hardware CDTC
Notas sobre Sistemas Operacionais
Arquitetura computadores
Manual controlador lógico zelio
H376985
Scilab programacao

Mais procurados (18)

PDF
Guide por
PDF
Apostila winplot
PDF
apostila sistmas digitais
PDF
Klavaro manual-pt-1.0.8
PDF
Ncl e Lua - desenvolvendo aplicações interativas para tv digital
PDF
Apostila de computação gráfica (2006)
PDF
Curso estatistica descritiva no r
PDF
Introdução à programação em R
PDF
Engenharia Elétrica
PDF
249371958 guia-seguranca-debian
PDF
Guiao aluno pic
PDF
Apostila r gen melhor
PDF
ROBÔ LOCALIZADOR DE SERES HUMANOS
PDF
K19 k01-logica-de-programacao-em-java
PDF
Foca linux 1
PDF
Introdução às redes
PDF
Focalinux iniciante
PDF
Estrutura de dados
Guide por
Apostila winplot
apostila sistmas digitais
Klavaro manual-pt-1.0.8
Ncl e Lua - desenvolvendo aplicações interativas para tv digital
Apostila de computação gráfica (2006)
Curso estatistica descritiva no r
Introdução à programação em R
Engenharia Elétrica
249371958 guia-seguranca-debian
Guiao aluno pic
Apostila r gen melhor
ROBÔ LOCALIZADOR DE SERES HUMANOS
K19 k01-logica-de-programacao-em-java
Foca linux 1
Introdução às redes
Focalinux iniciante
Estrutura de dados
Anúncio

Destaque (20)

DOCX
Cuestionario
PPTX
Portafolio 2 del curso innovación educativa con rea [autoguardado]
PDF
Panorama Comex MG 2012 Abril
DOCX
La democracia
PPT
A escola na perspectiva da educ inclusiva
PDF
Acordo ortográfico lousa
PPTX
Programa de Férias em Salt Lake City + Califórnia, Estados Unidos
PDF
Reestruturação inativos
PDF
Regl reg acad
PPTX
Lectura n° 5 Blogger Blogsport
PPTX
PROYECTO PRIMERA PARCIAL DE INFORMATICA
PDF
Taba Cia Aérea - Manual de Identidade Visual
PDF
PDF Catalogo Portugal 2010
PPTX
Palomeque cristian + ta03
PPTX
Opera
PDF
Plantilla
PPTX
TRIBUS URBANAS
PPT
Para reflexionar
Cuestionario
Portafolio 2 del curso innovación educativa con rea [autoguardado]
Panorama Comex MG 2012 Abril
La democracia
A escola na perspectiva da educ inclusiva
Acordo ortográfico lousa
Programa de Férias em Salt Lake City + Califórnia, Estados Unidos
Reestruturação inativos
Regl reg acad
Lectura n° 5 Blogger Blogsport
PROYECTO PRIMERA PARCIAL DE INFORMATICA
Taba Cia Aérea - Manual de Identidade Visual
PDF Catalogo Portugal 2010
Palomeque cristian + ta03
Opera
Plantilla
TRIBUS URBANAS
Para reflexionar
Anúncio

Semelhante a Handbook de ti_para_concursos (20)

PDF
Microcontroladores pic
PDF
257553303-Resumo-TI-Para-Concursos.pdf
PDF
Apostila de PIC
PDF
Curso C
PDF
Drivers de Dispositivos Linux
PDF
Handbook de ti para concursos
PDF
Apostila completa de eletronica digita(fct)
PDF
Aula 3 com propostas
PDF
Joaopaulofguimaraes
PDF
F ferrari ccechinel-introducao-a-algoritmos
PDF
F ferrari ccechinel-introducao-a-algoritmos
PDF
F ferrari ccechinel-introducao-a-algoritmos
PDF
F ferrari ccechinel-introducao-a-algoritmos
PDF
Algoritmos
PDF
Fortran_95_curso_basico_Editora_XXX.pdf
PDF
Algoritmos jabour
PDF
SistemasOperacionais-peter-jandl-jr.pdf
PDF
Ap apostila arduino-rev4
PDF
PDF
Ebook controle classico
Microcontroladores pic
257553303-Resumo-TI-Para-Concursos.pdf
Apostila de PIC
Curso C
Drivers de Dispositivos Linux
Handbook de ti para concursos
Apostila completa de eletronica digita(fct)
Aula 3 com propostas
Joaopaulofguimaraes
F ferrari ccechinel-introducao-a-algoritmos
F ferrari ccechinel-introducao-a-algoritmos
F ferrari ccechinel-introducao-a-algoritmos
F ferrari ccechinel-introducao-a-algoritmos
Algoritmos
Fortran_95_curso_basico_Editora_XXX.pdf
Algoritmos jabour
SistemasOperacionais-peter-jandl-jr.pdf
Ap apostila arduino-rev4
Ebook controle classico

Mais de fernandao777 (20)

PDF
Walking dead 51 59
PDF
Walking dead 97
PDF
Walking dead 96
PDF
Walking dead 95
PDF
Walking dead 94
PDF
Walking dead 90 93
PDF
Walking dead 85 89
PDF
Walking dead 80 84
PDF
Walking dead 75 79
PDF
Walking dead 70 74
PDF
Walking dead 66 69
PDF
Walking dead 61 65
PDF
Walking dead 60
PDF
Walking dead 41 50
PDF
Walking dead 31 40
PDF
Walking dead 21 30
PDF
Walking dead 11 20
PDF
Walking dead 1 10
PDF
Walking dead 98 100
PDF
Linux training
Walking dead 51 59
Walking dead 97
Walking dead 96
Walking dead 95
Walking dead 94
Walking dead 90 93
Walking dead 85 89
Walking dead 80 84
Walking dead 75 79
Walking dead 70 74
Walking dead 66 69
Walking dead 61 65
Walking dead 60
Walking dead 41 50
Walking dead 31 40
Walking dead 21 30
Walking dead 11 20
Walking dead 1 10
Walking dead 98 100
Linux training

Handbook de ti_para_concursos

  • 2. http://www.candidatoreal.com Sum´rio a I Fundamentos de Computa¸˜o ca 16 1 Arquitetura e Organiza¸˜o de Computadores ca 17 1.1 Conceitos B´sicos . . . . . . . . . . . . . . . . . a . . . . . . . . . . 17 1.2 Estrutura e Funcionamento da CPU . . . . . . . . . . . . . . . . 18 1.2.1 Pipelines . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.3 Conjunto de Instru¸˜es . . . . . . . . . . . . . . co . . . . . . . . . . 22 1.4 Unidade de Controle . . . . . . . . . . . . . . . . . . . . . . . . . 24 1.5 Modos de Endere¸amento . . . . . . . . . . . . c . . . . . . . . . . 25 1.6 Organiza¸˜o de Mem´ria . . . . . . . . . . . . . ca o . . . . . . . . . . 26 1.7 Desempenho do computador . . . . . . . . . . . . . . . . . . . . . 28 1.7.1 Tempo de execu¸˜o de um programa . . ca . . . . . . . . . . 29 1.7.2 Desempenho da CPU . . . . . . . . . . . . . . . . . . . . 29 1.7.3 Programas para medir desempenho . . . . . . . . . . . . . 30 1.7.4 Comparando desempenho . . . . . . . . . . . . . . . . . . 30 1.7.5 Lei de Amdahl . . . . . . . . . . . . . . . . . . . . . . . . 31 2 Componentes de um Computador 33 2.1 Principais componentes de Hardware . . . . . . . . . . . . . . . . 34 2.1.1 Discos R´ıgidos . . . . . . . . . . . . . . . . . . . . . . . . 34 2.1.2 Teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.1.3 Mouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.1.4 Placa de rede . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.1.5 Impressora . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.1.6 Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3 Aritm´tica Computacional e 39 3.1 N´meros Com Sinal e N´meros Sem Sinal . . . u u . . . . . . . . . . 39 http://www.candidatoreal.com 3.1.1 Sinal e amplitude/magnitude . . . . . . . . . . . . . . . . 39 3.1.2 Complemento de 1 . . . . . . . . . . . . . . . . . . . . . . 39 3.1.3 Complemento de 2 . . . . . . . . . . . . . . . . . . . . . . 39 3.1.4 Nota¸˜o em excesso . . . . . . . . . . . ca . . . . . . . . . . 40 3.2 Adi¸˜o e Subtra¸˜o . . . . . . . . . . . . . . . . ca ca . . . . . . . . . . 41 3.3 Opera¸˜es L´gicas . . . . . . . . . . . . . . . . co o . . . . . . . . . . 41 3.4 Constru¸˜o de uma Unidade L´gica Aritm´tica ca o e . . . . . . . . . . 42 3.5 Ponto Flutuante . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 1
  • 3. http://www.candidatoreal.com 4 Sistemas Operacionais 44 4.1 Introdu¸˜o . . . . . . . . . . . . . . . . . . . . . . . ca . . . . . . . . 44 4.2 Conceitos B´sicos . . . . . . . . . . . . . . . . . . . a . . . . . . . . 46 4.2.1 Multiprograma¸˜o . . . . . . . . . . . . . . ca . . . . . . . . 46 4.2.2 Processo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.2.3 Interrup¸˜es . . . . . . . . . . . . . . . . . . co . . . . . . . . 47 4.2.4 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.3 Escalonamento de Processos . . . . . . . . . . . . . . . . . . . . . 49 4.4 Entrada e Sa´ . . . . . . . . . . . . . . . . . . . . ıda . . . . . . . . 50 4.4.1 Camadas do subsistema de Entrada e Sa´ ıda . . . . . . . . 51 4.5 Gerˆncia de Mem´ria . . . . . . . . . . . . . . . . . e o . . . . . . . . 52 4.6 Sistemas de Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.6.1 Conceitos b´sicos sobre arquivos . . . . . . a . . . . . . . . 54 4.6.2 Implementa¸ao de arquivos . . . . . . . . . c˜ . . . . . . . . 56 4.6.3 Cache de Sistema de Arquivos . . . . . . . . . . . . . . . 57 4.6.4 Gerenciamento do espa¸o livre . . . . . . . c . . . . . . . . 58 4.6.5 Diret´rios . . . . . . . . . . . . . . . . . . . o . . . . . . . . 59 4.6.6 Implementa¸ao de diret´rios . . . . . . . . . c˜ o . . . . . . . . 61 4.7 Sistemas Operacionais Distribu´ ıdos . . . . . . . . . . . . . . . . . 61 4.7.1 Estrutura¸˜o de Sistemas Distribu´ ca ıdos . . . . . . . . . . . 63 5 Principais Processadores de Mercado 65 5.1 Processadores Intel . . . . . . . . . . . . . . . . . . . . . . . . . . 65 5.1.1 Fam´ Pentium . ılia . . . . . . . . . . . . . . . . . . . . . . 65 5.1.2 Fam´ Celeron . . ılia . . . . . . . . . . . . . . . . . . . . . . 68 5.1.3 Fam´ Core . . . ılia . . . . . . . . . . . . . . . . . . . . . . 69 5.1.4 Xeon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 5.1.5 Itanium . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.2 AMD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 5.2.1 Sempron . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 5.2.2 Athlon 64 . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 5.2.3 Turion 64 . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 5.2.4 Opteron . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 II L´gica de Programa¸˜o o ca 83 6 Orienta¸˜o a Objetos ca 84 6.1 Introdu¸˜o . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . 84 http://www.candidatoreal.com 6.2 Conceitos fundamentais . . . . . . . . . . . . . . . . . . . . . . . 84 6.3 Princ´ıpios de programa¸˜o ca orientada a objetos . . . . . . . . . . 90 6.4 Tratamento de exce¸oes . c˜ . . . . . . . . . . . . . . . . . . . . . . 90 III Metodologia de Desenvolvimento 92 7 Ciclo de Vida 93 7.1 Modelo seq¨encial linear . . . . . . . . . . . . . . . . . . . . . . . 95 u 7.2 Modelo em V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 7.3 Modelo de prototipagem . . . . . . . . . . . . . . . . . . . . . . . 96 2
  • 4. http://www.candidatoreal.com 7.4 Modelo RAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 7.5 Modelos de processo de software evolucion´rios a . . . . . . . . . . 97 7.5.1 Modelo incremental . . . . . . . . . . . . . . . . . . . . . 97 7.5.2 Modelo espiral . . . . . . . . . . . . . . . . . . . . . . . . 98 7.5.3 Modelo espiral ganha-ganha . . . . . . . . . . . . . . . . . 99 7.5.4 Modelo de desenvolvimento concorrente . . . . . . . . . . 100 7.6 Desenvolvimento baseado em componentes . . . . . . . . . . . . . 100 7.7 Modelo de m´todos formais . . . . . . . . . . . e . . . . . . . . . . 100 7.8 T´cnicas de quarta gera¸˜o . . . . . . . . . . . e ca . . . . . . . . . . 100 8 An´lise Comparativa de Processos de Desenvolvimento a 102 8.1 RUP - Rational Unified Process . . . . . . . . . . . . . . . . . . . 102 8.2 XP - Extreme Programming . . . . . . . . . . . . . . . . . . . . . 105 8.3 Scrum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 8.4 Crystal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 8.5 Feature Driven Development (FDD) . . . . . . . . . . . . . . . . 106 8.6 Dynamic Systems Development Method (DSDM) . . . . . . . . 107 8.7 Adaptive Software Development (ASD) . . . . . . . . . . . . . . 107 9 Engenharia de Requisitos 109 9.1 O Processo de Engenharia de Requisitos . . . . . . . . . . . . . . 109 9.2 T´cnicas de Levantamento de Requisitos e . . . . . . . . . . . . . . 110 9.2.1 Observa¸˜o . . . . . . . . . . . . ca . . . . . . . . . . . . . . 110 9.2.2 Entrevista . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 9.2.3 An´lise de Protocolo . . . . . . . a . . . . . . . . . . . . . . 111 9.2.4 JAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 9.2.5 PD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 9.2.6 QFD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 9.2.7 CRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 9.2.8 Prototipa¸˜o . . . . . . . . . . . ca . . . . . . . . . . . . . . 112 9.2.9 Cen´rios . . . . . . . . . . . . . . a . . . . . . . . . . . . . . 112 9.2.10 FAST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 9.3 An´lise de Requisitos . . . . . . . . . . . a . . . . . . . . . . . . . . 113 9.3.1 M´todos de an´lise . . . . . . . . e a . . . . . . . . . . . . . . 114 9.3.2 Modelagem da an´lise . . . . . . a . . . . . . . . . . . . . . 114 9.4 Gerenciamento de Requisitos . . . . . . . . . . . . . . . . . . . . 116 10 M´tricas e 118 10.1 M´tricas de processo e aperfei¸oamento de processo e c de software . 118 http://www.candidatoreal.com 10.2 M´tricas de projeto . . . . . . . . . . . . . . . . . . e . . . . . . . . 119 10.3 Medi¸˜o de software . . . . . . . . . . . . . . . . . ca . . . . . . . . 119 10.3.1 M´tricas orientadas a tamanho . . . . . . . e . . . . . . . . 120 10.3.2 M´tricas orientadas a fun¸˜o . . . . . . . . e ca . . . . . . . . 120 10.3.3 M´tricas de pontos por fun¸ao estendidas . e c . . . . . . . . 122 10.4 M´tricas de qualidade de software . . . . . . . . . e . . . . . . . . 122 10.4.1 Fatores de qualidade de McCall . . . . . . . . . . . . . . . 123 10.4.2 FURPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 10.4.3 ISO 9126 . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 10.5 Estimativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 10.5.1 COCOMO (Constructive Cost Model) . . . . . . . . . . . 125 3
  • 5. http://www.candidatoreal.com 11 Testes 127 11.1 Teste de caminho b´sico . . . . . . . . . . . . . . . . . . . . a . . . 127 11.2 Teste de estrutura de controle . . . . . . . . . . . . . . . . . . . . 129 11.2.1 Teste de condi¸˜o . . . . . . . . . . . . . . . . . . . . ca . . . 129 11.2.2 Teste de fluxo de dados . . . . . . . . . . . . . . . . . . . 130 11.2.3 Teste de ciclo . . . . . . . . . . . . . . . . . . . . . . . . . 130 11.3 Teste caixa-preta . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 11.3.1 M´todos de teste baseados em grafo . . . . . . . . . e . . . 131 11.3.2 Particionamento de equivalˆncia . . . . . . . . . . . e . . . 131 11.3.3 An´lise de valor limite . . . . . . . . . . . . . . . . . a . . . 132 11.3.4 Teste de compara¸˜o . . . . . . . . . . . . . . . . . . ca . . . 132 11.3.5 Teste de matriz ortogonal . . . . . . . . . . . . . . . . . . 132 11.4 Teste de ambientes, arquiteturas e aplica¸˜es especializadas co . . . 133 11.5 Estrat´gia de teste de software . . . . . . . . . . . . . . . . e . . . 134 12 UML 136 12.1 Diagrama de caso de uso . . . . . . . . . . . . . . . . . . . . . . . 136 12.1.1 Ator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 12.1.2 Descri¸˜o do caso de uso . ca . . . . . . . . . . . . . . . . . . 137 12.2 Diagrama de classe . . . . . . . . . . . . . . . . . . . . . . . . . . 137 12.2.1 Associa¸˜es de classe . . . co . . . . . . . . . . . . . . . . . . 138 12.3 Diagramas de seq¨ˆncia . . . . . ue . . . . . . . . . . . . . . . . . . 140 12.4 Diagramas de colabora¸˜o . . . . ca . . . . . . . . . . . . . . . . . . 140 12.5 Diagramas de estado . . . . . . . . . . . . . . . . . . . . . . . . . 141 12.6 Diagramas de atividade . . . . . . . . . . . . . . . . . . . . . . . 143 12.7 Elementos auxiliares . . . . . . . . . . . . . . . . . . . . . . . . . 144 12.8 Diagramas de componente . . . . . . . . . . . . . . . . . . . . . . 144 12.9 Diagramas de distribui¸˜o . . . . ca . . . . . . . . . . . . . . . . . . 144 13 Gerˆncia de Configura¸˜o e Mudan¸as e ca c 145 13.1 As Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 13.2 Artefatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 13.3 Pap´is e Responsabilidades . . . . . . . . . . . . . . . . . . . . . e 147 14 CMM - Capability Maturity Model 149 14.1 Os n´ıveis de maturidade no CMM . . . . . . . . . . . . . . . . . 150 14.1.1 N´ 1 - Inicial . . . . . . . . . . . . ıvel . . . . . . . . . . . . 150 14.1.2 N´ 2 - Repetitivo . . . . . . . . . ıvel . . . . . . . . . . . . 150 14.1.3 N´ 3 - Definido . . . . . . . . . . . ıvel . . . . . . . . . . . . 151 http://www.candidatoreal.com 14.1.4 N´ 4 - Gerenciado . . . . . . . . . ıvel . . . . . . . . . . . . 152 14.1.5 N´ 5 - Otimizado . . . . . . . . . ıvel . . . . . . . . . . . . 152 14.2 Um pouco mais sobre KPA’s . . . . . . . . . . . . . . . . . . . . 152 14.3 Efeitos da evolu¸˜o do n´ de maturidade ca ıvel . . . . . . . . . . . . 153 IV Linguagem de Programa¸˜o Java ca 155 15 Conceitos B´sicos de Java a 156 15.1 Pacotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 15.2 Modificadores de Acesso . . . . . . . . . . . . . . . . . . . . . . . 157 4
  • 6. http://www.candidatoreal.com 15.3 Vari´veis . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . 157 15.4 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 15.5 Express˜es, Senten¸as e Blocos . o c . . . . . . . . . . . . . . . . . . 160 15.6 Comandos de Controle de Fluxo . . . . . . . . . . . . . . . . . . 161 15.7 Classes Aninhadas . . . . . . . . . . . . . . . . . . . . . . . . . . 166 15.8 Tipos Enumerados . . . . . . . . . . . . . . . . . . . . . . . . . . 167 15.9 Anota¸˜es . . . . . . . . . . . . . co . . . . . . . . . . . . . . . . . . 168 15.10Gen´ricos . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . 169 15.11Reflex˜o . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . 171 16 Classes Essenciais 173 16.1 Exception e Controle de Exce¸˜es . . . . . co . . . . . . . . . . . . . 173 16.1.1 Exce¸˜es t´ co ıpicas . . . . . . . . . . . . . . . . . . . . . . . 173 16.1.2 Capturando Exce¸˜es . . . . . . . co . . . . . . . . . . . . . 175 16.2 Threads e Concorrˆncia . . . . . . . . . . e . . . . . . . . . . . . . 176 16.2.1 Definindo e Iniciando uma Thread . . . . . . . . . . . . . 176 16.2.2 Pausando a execu¸˜o com sleep . . ca . . . . . . . . . . . . . 177 16.2.3 Interrup¸˜es . . . . . . . . . . . . . co . . . . . . . . . . . . . 178 16.2.4 Joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 16.2.5 Sincroniza¸˜o . . . . . . . . . . . . ca . . . . . . . . . . . . . 179 16.2.6 Executores e Thread Pools . . . . . . . . . . . . . . . . . 180 16.3 Streams e Serializa¸˜o . . . . . . . . . . . ca . . . . . . . . . . . . . 181 16.3.1 I/O Streams . . . . . . . . . . . . . . . . . . . . . . . . . 181 16.3.2 Serializa¸˜o - Streams de Objetos . ca . . . . . . . . . . . . . 183 16.4 Classes e Opera¸˜es de I/O . . . . . . . . co . . . . . . . . . . . . . 185 16.5 Classes para manipula¸˜o de propriedades ca . . . . . . . . . . . . . 185 17 Cole¸˜es co 188 17.1 Interface Collection . . . . . . . . . . . . . . . . . . . . . . . . . . 189 17.2 Interface Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 17.3 Interface List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 17.4 Interface Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 17.5 Interface Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 18 JDBC - Java Database Connectivity 199 18.1 Conceitos B´sicos . . . . . . . . . . . a . . . . . . . . . . . . . . . . 199 18.2 Carregamento de drivers . . . . . . . . . . . . . . . . . . . . . . . 200 18.3 Conex˜o . . . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . . 200 18.4 Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 http://www.candidatoreal.com 18.5 Prepared Statements . . . . . . . . . . . . . . . . . . . . . . . . . 203 18.6 Transa¸˜o . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . 203 18.7 Informa¸˜es Complementares . . . . co . . . . . . . . . . . . . . . . 204 18.8 Exemplo Extra . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 19 A plataforma J2EE 207 19.1 Containers J2EE . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 19.2 Clientes J2EE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 19.3 Um pouco mais sobre Servlets . . . . . . . . . . . . . . . . . . . . 209 19.3.1 Ciclo de Vida dos Servlets . . . . . . . . . . . . . . . . . . 211 19.3.2 Mantendo o estado do cliente . . . . . . . . . . . . . . . . 212 5
  • 7. http://www.candidatoreal.com 19.4 Um pouco mais sobre p´ginas JSP a . . . . . . . . . . . . . . . . . 213 19.4.1 JSP vs. Servlets . . . . . . . . . . . . . . . . . . . . . . . 215 19.5 Um pouco mais sobre EJB’s . . . . . . . . . . . . . . . . . . . . . 216 19.5.1 Ciclo de Vida dos EJB’s . . . . . . . . . . . . . . . . . . . 217 V Desenvolvimento Web 220 20 Usabilidade 221 20.1 Defini¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 ca 20.2 Princ´ ıpios da usabilidade . . . . . . . . . . . . . . . . . . . . . . . 222 20.3 T´cnicas de avalia¸˜o de usabilidade . . . . . . . . . . . . . . . . 223 e ca 21 Acessibilidade 224 21.1 Defini¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca 224 21.2 Princ´ ıpios da acessibilidade . . . . . . . . . . . . . . . . . . . . . 224 21.3 T´cnicas de avalia¸˜o de acessibilidade . . . . . . . . . . . . . . . e ca 227 22 Padr˜es Web W3C o 229 23 XML 233 23.1 O que ´ XML? . . . . . . . . . . . e . . . . . . . . . . . . . . . . . 233 23.2 Caracter´ısticas do XML . . . . . . . . . . . . . . . . . . . . . . . 234 23.3 Compara¸˜o entre XML e HTML . ca . . . . . . . . . . . . . . . . . 234 23.4 Sintaxe b´sica do XML . . . . . . a . . . . . . . . . . . . . . . . . 234 23.5 Conjunto de tags . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 23.6 NameSpaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 23.7 Gram´tica de um documento XML a . . . . . . . . . . . . . . . . 239 23.8 Tecnologias XML . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 23.9 Benef´ ıcios da linguagem XML . . . . . . . . . . . . . . . . . . . . 245 23.10Ferramentas de desenvolvimento . . . . . . . . . . . . . . . . . . 246 24 XSLT 247 24.1 O que ´ uma folha de estilo? . . e . . . . . . . . . . . . . . . . . . 247 24.2 Compara¸˜o entre o CSS e XSL . ca . . . . . . . . . . . . . . . . . . 247 24.3 O que ´ o XSL? . . . . . . . . . . e . . . . . . . . . . . . . . . . . . 248 24.4 O que ´ o XSLT? . . . . . . . . . e . . . . . . . . . . . . . . . . . . 248 24.5 Caracter´ ısticas do XSLT . . . . . . . . . . . . . . . . . . . . . . . 249 24.6 Declarando um documento XSL . . . . . . . . . . . . . . . . . . . 249 24.7 Elemento <xsl:template> . . . . . . . . . . . . . . . . . . . . . . 250 http://www.candidatoreal.com 24.8 Elemento <xsl:value-of> . . . . . . . . . . . . . . . . . . . . . . . 251 24.9 Elemento <xsl:for-each> . . . . . . . . . . . . . . . . . . . . . . . 252 24.10Elemento <xsl:sort> . . . . . . . . . . . . . . . . . . . . . . . . . 252 24.11Elemento <xsl:if> . . . . . . . . . . . . . . . . . . . . . . . . . . 252 24.12Elemento <xsl:choose> . . . . . . . . . . . . . . . . . . . . . . . 253 24.13Elemento <xsl:apply-templates> . . . . . . . . . . . . . . . . . . 253 24.14XSL no lado Cliente . . . . . . . . . . . . . . . . . . . . . . . . . 254 24.15XSL no lado Servidor . . . . . . . . . . . . . . . . . . . . . . . . 254 24.16Processadores XSLT . . . . . . . . . . . . . . . . . . . . . . . . . 255 6
  • 8. http://www.candidatoreal.com 25 Gerenciador de Conte´ do Web Zone/Plone u 256 25.1 Gest˜o de Conte´do . . . . . . . . . . . . . . a u . . . . . . . . . . . 256 25.2 Sistema de Gest˜o de Conte´do . . . . . . . . a u . . . . . . . . . . . 257 25.3 Zope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 25.4 Plone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 26 Web Services 263 26.1 O que ´ Web Services? e . . . . . . . . . . . . . . . . . . . . . . . . 263 26.2 SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 26.3 WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 26.4 UDDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 26.5 Seguran¸a . . . . . . . c . . . . . . . . . . . . . . . . . . . . . . . . 269 VI Redes de Comunica¸˜o ca 270 27 T´cnicas B´sicas de Comunica¸˜o e a ca 271 27.1 Base Te´rica da Comunica¸˜o de Dados . . . . . . . . . o ca . . . . . 271 27.2 Taxa M´xima de Dados em um Canal . . . . . . . . . . a . . . . . 272 27.3 Sinais Digitais Bin´rios . . . . . . . . . . . . . . . . . . a . . . . . 272 27.4 Transmiss˜o em Banda Base . . . . . . . . . . . . . . . . a . . . . . 273 27.5 Classifica¸˜o dos Sinais . . . . . . . . . . . . . . . . . . . ca . . . . . 273 27.6 T´cnicas de Codifica¸˜o de Linha . . . . . . . . . . . . . e ca . . . . . 274 27.6.1 Codifica¸˜o NRZ . . . . . . . . . . . . . . . . . . ca . . . . . 274 27.6.2 Codifica¸˜o RZ . . . . . . . . . . . . . . . . . . . ca . . . . . 275 27.6.3 Codifica¸˜o AMI (Alternate Mark Invertion) . . ca . . . . . 275 27.6.4 Codifica¸˜o HDB-3 (High Density Bipolar with ca 3 Zero Maximum Tolerance) . . . . . . . . . . . . . . . . . . . . 275 27.6.5 Codifica¸˜o Manchester . . . . . . . . . . . . . . ca . . . . . 276 27.7 Modula¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . ca . . . . . 276 27.7.1 Modula¸˜o de Onda Cont´ ca ınua . . . . . . . . . . . . . . . . 277 27.7.2 Modula¸˜o de Pulsos . . . . . . . . . . . . . . . . ca . . . . . 279 27.8 T´cnicas de Multiplexa¸˜o . . . . . . . . . . . . . . . . . e ca . . . . . 280 27.8.1 FDM - Frequency Division Multiplexing . . . . . . . . . . 281 27.8.2 TDM - Time Division Multiplexing . . . . . . . . . . . . . 281 27.8.3 OFDM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 27.8.4 WDM -Wavelength Division Multiplexing . . . . . . . . . 282 27.9 Protocolos de Acesso M´ltiplo . . . . . . . . . . . . . . . u . . . . . 283 http://www.candidatoreal.com 28 Topologias de Redes 284 29 Arquitetura de Redes 286 29.1 Organiza¸˜o em Camadas . . . . . . . . . . . . . . . . . . . . . . 286 ca 30 Protocolos de Rede 287 30.1 ARP - Address Resolution Protocol . . . . . . . . . . . . . . . . 287 30.2 DHCP - Dynamic Host Configuration Protocol . . . . . . . . . . 287 30.3 DNS - Domain Name System . . . . . . . . . . . . . . . . . . . . 289 30.4 TCP - Transmission Control Protocol . . . . . . . . . . . . . . . 291 30.5 UDP - User Datagram Protocol . . . . . . . . . . . . . . . . . . . 293 7
  • 9. http://www.candidatoreal.com 30.6 HTTP - Hyper Text Transfer Protocol . . . . . . . . . . . . . . . 294 30.7 SMTP - Simple Mail Transfer Protocol . . . . . . . . . . . . . . . 299 30.8 POP3 - Post Office Protocol Version 3 . . . . . . . . . . . . . . . 301 30.9 IMAP - Internet Mail Access Protocol . . . . . . . . . . . . . . . 303 30.10LDAP - LightWeight Directory Access Protocol . . . . . . . . . . 305 30.11SNMP - Simple Network Management Protocol . . . . . . . . . . 305 30.12FTP - File Transfer Protocol . . . . . . . . . . . . . . . . . . . . 306 30.13IP - Internet Protocol . . . . . . . . . . . . . . . . . . . . . . . . 310 30.14TELNET - TELetype NETwork . . . . . . . . . . . . . . . . . . 311 31 O Modelo de Referˆncia OSI e 314 32 Roteamento 316 32.1 Link State e Distance Vector . . . . . . . . . . . . . . . . . . . . 317 32.1.1 Vetor de Distˆncias vs. Estado do Link a . . . . . . . . . . 319 32.2 Protocolos de Roteamento . . . . . . . . . . . . . . . . . . . . . . 320 32.2.1 RIP - Routing Information Protocol . . . . . . . . . . . . 320 32.2.2 OSPF - Open Shortest Path First . . . . . . . . . . . . . 320 32.2.3 IGRP e EIGRP . . . . . . . . . . . . . . . . . . . . . . . . 321 33 Redes Ethernet 322 33.1 Protocolo CSMA/CD . . . . . . . . . . . . . . . . . . . . . . . . 322 33.2 Fast Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 33.3 Gigabit Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 34 Cabeamento Estruturado 326 34.1 Par Tran¸ado . . . . . . . . . . . . . . . . . . . . . c . . . . . . . . 326 34.1.1 Interferˆncias nos Cabos de Par Tran¸ado . e c . . . . . . . . 326 34.2 Categorias 5e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 34.3 Categoria 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 34.4 Categoria 5e vs. Categoria 6 . . . . . . . . . . . . . . . . . . . . 328 34.5 Cabea¸˜o Estruturada – Norma EIA/TIA 568 . . . ca . . . . . . . . 329 34.5.1 Sistemas de Cabeamento Estruturado . . . . . . . . . . . 329 34.6 Desempenho do Hardware e Meios de Transmiss˜o a . . . . . . . . 333 34.6.1 Cabeamento UTP . . . . . . . . . . . . . . . . . . . . . . 334 ´ 34.6.2 Fibra Optica . . . . . . . . . . . . . . . . . . . . . . . . . 335 34.7 C´digo de Cores para Sistemas de Cabe¸˜o UTP . o ca . . . . . . . . 336 35 Redes sem fio 337 35.1 O padr˜o IEEE 802.11 . . . . . . . . . . . . . . . . . . . . . . . . 337 a http://www.candidatoreal.com 35.1.1 CSMA/CA . . . . . . . . . . . . . . . . . . . . . . . . . . 338 35.1.2 Formato do Quadro 802.11 . . . . . . . . . . . . . . . . . 339 36 Elementos de Interconex˜o de Redes a de Computadores 340 36.1 Repetidores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 36.2 Hubs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 36.3 Switches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 36.4 Bridges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 36.5 Roteadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 36.6 Gateways . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 8
  • 10. http://www.candidatoreal.com 37 Redes Multim´ ıdia 344 37.1 Qualidade de Servi¸o . . . . . . . . . . . . . . . . . . . . . . . . . c 344 37.2 Servi¸os Integrados - IntServ . . . . . . . . . . . . . . . . . . . . c 346 37.3 Servi¸os Diferenciados - DiffServ . . . . . . . . . . . . . . . . . . c 347 38 Redes X.25 e Frame Relay 348 38.1 X.25 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 38.2 Frame Relay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 38.2.1 Estrutura do Frame . . . . . . . . . . . . . . . . . . . . . 349 38.2.2 Envio de um datagrama IP de Ethernet para Frame Relay e Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 38.3 Interliga¸˜o de Redes LAN . . . . . . . . . . . . . . . . . . . . . ca 351 38.3.1 Voz sobre Frame Relay (VoFR) . . . . . . . . . . . . . . . 351 38.3.2 Intera¸˜o entre Frame Relay e ATM . . . . . . . . . . . . ca 352 38.3.3 CIR (Taxa de Informa¸˜o Comprometida) . . . . . . . . . ca 352 39 Redes Virtuais Locais 354 39.1 VLANs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 39.1.1 Defini¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 ca 39.1.2 Protocolo 802.1q . . . . . . . . . . . . . . . . . . . . . . . 354 40 Redes de Circuito Virtuais 356 40.1 Redes ATM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 40.2 MPLS - Multiprotocol Label Switching . . . . . . . . . . . . . . . 358 41 Arquitetura TCP/IP 360 41.1 Vis˜o geral . . . . . . . . . . . . . . . . . . . . a . . . . . . . . . . 360 41.2 Compara¸˜o entre a arquitetura OSI e TCP/IP ca . . . . . . . . . . 360 41.3 Camada F´ ısica (host/rede) . . . . . . . . . . . . . . . . . . . . . 361 41.4 Camada de Inter-Rede . . . . . . . . . . . . . . . . . . . . . . . . 361 41.5 Camada de Transporte . . . . . . . . . . . . . . . . . . . . . . . . 362 41.6 Camada de Aplica¸˜o . . . . . . . . . . . . . . ca . . . . . . . . . . 362 42 Camada de Aplica¸˜o ca 364 42.1 Proxy Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 VII Gerˆncia de Redes e 366 43 O protocolo SNMP 367 http://www.candidatoreal.com 43.1 Management Information Base . . . . . . . . . . . . . . . . . . . 368 VIII Seguran¸a da Informa¸˜o c ca 370 44 Pol´ıticas de Seguran¸a de Informa¸˜o c ca 371 44.1 Pol´ıticas de Seguran¸a . . . . . . . . . c . . . . . . . . . . . . . . . 371 44.2 Projeto de Seguran¸a . . . . . . . . . . c . . . . . . . . . . . . . . . 372 44.3 Plano de Seguran¸a . . . . . . . . . . . c . . . . . . . . . . . . . . . 372 44.4 Normas de Seguran¸a . . . . . . . . . c . . . . . . . . . . . . . . . 373 44.4.1 ISO/IEC 17799 . . . . . . . . . . . . . . . . . . . . . . . . 373 9
  • 11. http://www.candidatoreal.com 44.4.2 Fam´ ISO 27000 . . . . . ılia . . . . . . . . . . . . . . . . . 375 44.4.3 Diferen¸as entre a ISO/IEC c 17799 e a ISO 27001 . . . . . 376 44.5 Procedimentos de Seguran¸a . . . . c . . . . . . . . . . . . . . . . . 376 44.6 Arquitetura de Seguran¸a . . . . . c . . . . . . . . . . . . . . . . . 377 44.7 Classifica¸˜o de Informa¸˜es . . . . ca co . . . . . . . . . . . . . . . . . 377 45 Seguran¸a F´ c ısica e L´gica o 379 45.1 Seguran¸a F´ c ısica . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 45.2 Seguran¸a L´gica . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 c o 45.2.1 Matrizes de acesso, listas de controle de acesso e capabilities379 45.2.2 Modelos de Controle de Acesso . . . . . . . . . . . . . . . 380 46 Backup de Dados 384 46.1 Meios de Armazenamento . . . . . . . . . . . . . . . . . . . . . . 384 47 V´ırus e Ataques 386 47.1 Estrat´gias de combate ` pragas eletrˆnicas . . . . . . . . . . . . 388 e a o 47.1.1 Antiv´ırus . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 48 Princ´ıpios de Criptografia 390 48.1 Tipos de Criptografia . . . . . . . . . . . . . . . . . . . . . . . . 391 48.2 Algoritmos de Criptografia Sim´tricos . e . . . . . . . . . . . . . . 392 48.3 Algoritmos de Criptografia Assim´tricos e . . . . . . . . . . . . . . 393 48.4 T´cnicas de Quebra de Criptografia . . . e . . . . . . . . . . . . . . 394 49 Autentica¸˜o ca 395 49.1 Autentica¸˜o de Mensagens . . . . . . . . . . . . . ca . . . . . . . . 395 49.2 Protocolos de Autentica¸˜o . . . . . . . . . . . . . ca . . . . . . . . 396 49.2.1 M´todos de Autentica¸˜o . . . . . . . . . . e ca . . . . . . . . 396 49.2.2 Autentica¸˜o baseada em uma chave secreta ca compartilhada396 49.3 Certificado Digital . . . . . . . . . . . . . . . . . . . . . . . . . . 397 50 Seguran¸a em diversas camadas c 399 50.1 Secure Sockets Layer . . . . . . . . . . . . . . . . . . . . . . . . . 399 50.2 IPSec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 50.3 Virtual Private Network (VPN) . . . . . . . . . . . . . . . . . . . 401 50.4 Filtragem de Pacotes e Firewalls . . . . . . . . . . . . . . . . . . 403 50.4.1 Regras iptables - Exemplo 1 . . . . . . . . . . . . . . . . . 405 50.4.2 Regras iptables - Exemplo 2 . . . . . . . . . . . . . . . . . 405 50.4.3 Firewall Stateful . . . . . . . . . . . . . . . . . . . . . . . 406 http://www.candidatoreal.com 50.4.4 Application Gateway . . . . . . . . . . . . . . . . . . . . . 407 50.4.5 Arquitetura de firewall e DMZ . . . . . . . . . . . . . . . 407 50.5 Sistemas de Detec¸˜o de Intrus˜o (IDS) ca a . . . . . . . . . . . . . . 409 50.6 Seguran¸a em Redes Wireless 802.11 . . c . . . . . . . . . . . . . . 409 50.6.1 WEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 50.7 802.11i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 10
  • 12. http://www.candidatoreal.com IX Alta Disponibilidade 411 51 Solu¸˜es de Armazenamento RAID, SAN e NAS co 412 51.1 RAID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 51.1.1 RAID 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 51.1.2 RAID 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 51.1.3 RAID 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 51.1.4 RAID 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 51.1.5 RAID 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 51.1.6 RAID 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 51.1.7 RAID 6 (Redundˆncia de P+Q) . . . . . . . . . . . . . . 419 a 51.1.8 Tipos H´ ıbridos . . . . . . . . . . . . . . . . . . . . . . . . 419 51.1.9 Comparativo de Desempenho entre as diversas configura¸˜es co RAID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420 51.2 SAN - Storage Area Network . . . . . . . . . . . . . . . . . . . . 420 51.2.1 Hardware para SAN . . . . . . . . . . . . . . . . . . . . . 421 51.2.2 Topologias de SAN . . . . . . . . . . . . . . . . . . . . . . 422 51.3 NAS - Network Attached Stotage . . . . . . . . . . . . . . . . . . 423 51.4 Comparativo entre SAN e NAS . . . . . . . . . . . . . . . . . . . 424 52 Clusters de servidores 427 52.0.1 Princ´ ıpios de um Cluster . . . . . . . . . . . . . . . . . . 427 52.0.2 Abstra¸˜es em um Cluster . . . . co . . . . . . . . . . . . . . 428 52.0.3 Arquitetura de um Cluster . . . . . . . . . . . . . . . . . 429 52.0.4 Cluster X Sistemas Distribu´ıdos . . . . . . . . . . . . . . 430 52.0.5 Cluster de Alta Disponibilidade . . . . . . . . . . . . . . . 431 52.0.6 Cluster de Alto Desempenho . . . . . . . . . . . . . . . . 433 53 Balanceamento de Carga 436 53.1 Balanceamento de armazenamento (storage) . . . . . . . . . . . . 436 53.2 Balanceamento de rede . . . . . . . . . . . . . . . . . . . . . . . . 436 53.2.1 NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 53.2.2 IP Tunneling . . . . . . . . . . . . . . . . . . . . . . . . . 437 53.2.3 Direct Routing . . . . . . . . . . . . . . . . . . . . . . . . 438 53.3 Algoritmos de balanceamento . . . . . . . . . . . . . . . . . . . . 438 53.4 Balanceamento de CPU . . . . . . . . . . . . . . . . . . . . . . . 439 53.4.1 Sistema de processamento distribu´ ıdo . . . . . . . . . . . 439 http://www.candidatoreal.com X Sistemas Operacionais 442 54 Ambiente Microsoft Windows 2000/2003 443 54.1 DHCP - Dynamic Host Configuration Protocol . . . . . . . . . . 443 54.1.1 Processo de Instala¸˜o/Configura¸˜o . . . . ca ca . . . . . . . . 443 54.1.2 Integra¸˜o do DHCP com o DNS . . . . . . ca . . . . . . . . 445 54.1.3 APIPA - Automatic Private IP Addressing . . . . . . . . 445 54.1.4 Comandos ipconfig Relacionados ao DHCP . . . . . . . . 446 54.1.5 Regra ”80/20” . . . . . . . . . . . . . . . . . . . . . . . . 446 54.2 DNS - Domain Name System . . . . . . . . . . . . . . . . . . . . 446 54.2.1 Processo de Instala¸˜o/Configura¸˜o . . . . ca ca . . . . . . . . 447 11
  • 13. http://www.candidatoreal.com 54.2.2 Seguran¸a de Acesso . . . . . . . . . . . . . . . . . . . . . c 449 54.2.3 Integra¸˜o do DNS com o Active Directory . . . . . . . . ca 449 54.2.4 Servidor DNS somente Cache . . . . . . . . . . . . . . . . 451 54.2.5 Arquivo Hosts . . . . . . . . . . . . . . . . . . . . . . . . 451 54.2.6 Distribui¸˜o de Carga . . . . . . . . . . . . . . . . . . . . ca 451 54.2.7 Comando ipconfig/dnscmd Relacionadas ao DNS . . . . . 451 54.3 Active Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . 452 54.3.1 Tipos de Servidores . . . . . . . . . . . . . . . . . . . . . 453 54.3.2 Defini¸˜es de Floresta, Dom´ co ınio, Site e Unidade Organi- zacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 54.3.3 Recursos do Active Directory . . . . . . . . . . . . . . . . 454 54.3.4 Seguran¸a com o Active Directory . . . . . . . . . . . . . c 455 54.3.5 Ferramentas de Controle . . . . . . . . . . . . . . . . . . . 456 54.4 IIS - Internet Information Services . . . . . . . . . . . . . . . . . 456 54.4.1 IIS versus Apache HTTP Server . . . . . . . . . . . . . . 456 54.4.2 Principais Componentes do IIS . . . . . . . . . . . . . . . 459 54.4.3 Principais Recursos do IIS . . . . . . . . . . . . . . . . . . 460 54.4.4 Principais Diferen¸as entre IIS4, IIS5 e IIS6 . . . . . . . . c 461 54.5 Terminal Services . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 54.5.1 Principais Benef´ ıcios . . . . . . . . . . . . . . . . . . . . . 462 54.5.2 Protocolos de Comunica¸˜o . . . . . . . . . . . . . . . . . ca 463 54.5.3 Licen¸as . . . . . . . . . . . . . . . . . . . . . . . . . . . . c 464 XI Banco de Dados 465 55 Conceitos B´sicos a 466 56 Abordagem Relacional 468 56.1 Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468 56.2 Esquemas e Restri¸˜es de Integridade . . . . . . . . . . . . . . . 468 co 57 Modelagem Entidade Relacionamento 470 57.1 Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470 57.2 Cardinalidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 57.3 Representa¸˜o Gr´fica . . . . . . . . . . . . . . ca a . . . . . . . . . . 471 57.4 Recursos do Modelo Entidade Relacionamento . . . . . . . . . . 471 58 Normaliza¸˜oca 473 58.1 Aspectos desej´veis em um bom projeto . . . . . . . . . . . . . . 473 a http://www.candidatoreal.com 58.2 Forma normal de Boyce-Codd . . . . . . . . . . . . . . . . . . . . 473 58.3 Terceira forma normal . . . . . . . . . . . . . . . . . . . . . . . . 474 59 Transforma¸˜o do Modelo Conceitual ca 475 60 Linguagem SQL 476 60.1 Cria¸˜o de tabela . . . . ca . . . . . . . . . . . . . . . . . . . . . . . 476 60.2 Consultas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476 60.3 Fun¸˜es de agrega¸˜o . . co ca . . . . . . . . . . . . . . . . . . . . . . . 477 60.4 Atualiza¸˜es e exclus˜es co o . . . . . . . . . . . . . . . . . . . . . . . 478 60.5 Vis˜es . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . 479 12
  • 14. http://www.candidatoreal.com 60.6 Chaves estrangeiras . . . . . . . . . . . . . . . . . . . . . . . . . . 479 61 Conceitos de Datawarehousing e Bussiness Inteligence 480 61.1 Banco de Dados Multidimensionais . . . . . . . . . . . . . . . . . 480 61.1.1 Modelagem Multidimensional . . . . . . . . . . . . . . . . 481 61.2 Datawarehousing . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 61.3 OLTP, OLAP, MOLAP, ROLAP e HOLAP . . . . . . . . . . . . 485 61.4 Outros conceitos importantes . . . . . . . . . . . . . . . . . . . . 487 XII Administra¸˜o de Bancos de Dados Relacionais 489 ca 62 Gerˆncia de Transa¸˜es e co 490 63 Controle de Concorrˆncia e 492 64 Gerˆncia de Desempenho e 494 XIII Oracle e Microsoft SQL Server 497 65 Administra¸˜o de Bancos de Dados Oracle ca 498 65.1 Arquitetura de um Servidor Oracle . . . . . . . . . . . . . . . . . 498 65.1.1 Estruturas em mem´ria . . . . . . . . . . o . . . . . . . . . 498 65.1.2 Processos server . . . . . . . . . . . . . . . . . . . . . . . 499 65.1.3 Processos user . . . . . . . . . . . . . . . . . . . . . . . . 499 65.1.4 Processos em Background . . . . . . . . . . . . . . . . . . 499 65.1.5 Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 500 65.2 Arquitetura Oracle de Armazenamento de Dados . . . . . . . . . 501 65.3 Tratamento de Transa¸˜es no Oracle . . . . . . . co . . . . . . . . . 501 65.3.1 Gerenciamento do Redo Log . . . . . . . . . . . . . . . . . 501 65.3.2 Checkpoints . . . . . . . . . . . . . . . . . . . . . . . . . . 502 65.3.3 Segmentos de rollback . . . . . . . . . . . . . . . . . . . . 502 65.3.4 Consistˆncia de leitura . . . . . . . . . . . e . . . . . . . . . 503 65.4 Configura¸˜o do Servidor . . . . . . . . . . . . . ca . . . . . . . . . 503 65.5 Tipos de Usu´rios Oracle . . . . . . . . . . . . . a . . . . . . . . . 504 65.5.1 Administradores de banco de dados . . . . . . . . . . . . 504 65.5.2 Outros p´peis . . . . . . . . . . . . . . . . a . . . . . . . . . 505 66 Administra¸˜o de Bancos de Dados SQL Server ca 506 http://www.candidatoreal.com 66.1 Arquitetura de um Servidor SQL Server . . . . . . . . . . . . . . 506 66.1.1 Cat´logos de sistema . . . . . . . . . . . . . . . a . . . . . . 506 66.1.2 Processos em background . . . . . . . . . . . . . . . . . . 507 66.2 Arquitetura SQL Server de Armazenamento de Dados . . . . . . 507 66.3 Tratamento de Transa¸˜es no SQL Server . . . . . . . co . . . . . . 507 XIV ITIL 509 67 Suporte a Servi¸os c 510 67.1 Service Desk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510 13
  • 15. http://www.candidatoreal.com 67.1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 510 67.1.2 Responsabilidades . . . . . . . . . . . . . . . . . . . . . . 510 67.1.3 V´rios Tipos de Central . . a . . . . . . . . . . . . . . . . . 511 67.2 Gerenciamento de Incidentes . . . . . . . . . . . . . . . . . . . . 511 67.2.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 67.2.2 Atividades do Processo . . . . . . . . . . . . . . . . . . . 511 67.2.3 Pap´is e Responsabilidades e . . . . . . . . . . . . . . . . . 512 67.3 Gerenciamento de Problemas . . . . . . . . . . . . . . . . . . . . 512 67.3.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 512 67.3.2 Defini¸˜es Importantes . . . co . . . . . . . . . . . . . . . . . 513 67.3.3 Atividades do Processo . . . . . . . . . . . . . . . . . . . 513 67.3.4 Pap´is e Responsabilidades e . . . . . . . . . . . . . . . . . 513 67.4 Gerenciamento de Configura¸˜o . . ca . . . . . . . . . . . . . . . . . 514 67.4.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 67.4.2 Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 67.4.3 Pap´is e Responsabilidades e . . . . . . . . . . . . . . . . . 515 67.5 Gerenciamento de Mudan¸as . . . c . . . . . . . . . . . . . . . . . 515 67.5.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 515 67.5.2 Responsabilidades . . . . . . . . . . . . . . . . . . . . . . 515 67.5.3 Defini¸˜es Importantes . . . co . . . . . . . . . . . . . . . . . 515 67.6 Gerenciamento de Libera¸˜o . . . . ca . . . . . . . . . . . . . . . . . 516 67.6.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516 67.6.2 Atividades do Processo . . . . . . . . . . . . . . . . . . . 516 67.6.3 Defini¸˜es Importantes . . . co . . . . . . . . . . . . . . . . . 517 67.6.4 Pap´is e Responsabilidades e . . . . . . . . . . . . . . . . . 517 68 Entrega de Servi¸osc 518 68.1 Gerenciamento do N´ de Servi¸o ıvel c . . . . . . . . . . . . . . . . . 518 68.1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 68.2 Gerenciamento Financeiro . . . . . . . . . . . . . . . . . . . . . . 519 68.2.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 519 68.2.2 Responsabilidades . . . . . . . . . . . . . . . . . . . . . . 519 68.2.3 Atividades do Processo . . . . . . . . . . . . . . . . . . . 519 68.2.4 Elementos de Custo . . . . . . . . . . . . . . . . . . . . . 520 68.3 Gerenciamento da Capacidade . . . . . . . . . . . . . . . . . . . 521 68.3.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 68.3.2 Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 68.4 Gerenciamento de Disponibilidade . . . . . . . . . . . . . . . . . 522 68.4.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 http://www.candidatoreal.com 68.4.2 Ciclo de vida do incidente . . . . . . . . . . . . . . . . . . 522 68.5 Gerenciamento de Continuidade . . . . . . . . . . . . . . . . . . . 523 68.5.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 68.5.2 Est´gios . . . . . . . . . . . a . . . . . . . . . . . . . . . . . 523 68.5.3 Tipos de Continuidade . . . . . . . . . . . . . . . . . . . . 524 XV Gerˆncia de Projetos segundo PMBOK e 525 69 Gerenciamento de Escopo 526 69.1 WBS e Defini¸˜o do Escopo . . . . . . . . . . . . . . . . . . . . . 526 ca 14
  • 16. http://www.candidatoreal.com 70 Gerenciamento de Recursos Humanos 528 70.1 Estruturas Organizacionais . . . . . . . . . . . . . . . . . . . . . 528 70.1.1 Organiza¸˜o Funcional . . . . . ca . . . . . . . . . . . . . . . 528 70.1.2 Organiza¸˜o por Projeto . . . . ca . . . . . . . . . . . . . . . 529 70.1.3 Organiza¸˜o Matricial . . . . . ca . . . . . . . . . . . . . . . 530 70.2 Planejamento Organizacional . . . . . . . . . . . . . . . . . . . . 531 70.3 Desenvolvimento da Equipe . . . . . . . . . . . . . . . . . . . . . 531 71 Gerenciamento do Tempo 534 71.1 T´cnicas de Desenvolvimento do Cronograma e . . . . . . . . . . . 534 71.1.1 An´lise Matem´tica . . . . . . . . . . a a . . . . . . . . . . . 535 71.1.2 Compress˜o do Cronograma . . . . . . a . . . . . . . . . . . 535 71.1.3 Simula¸˜o . . . . . . . . . . . . . . . . ca . . . . . . . . . . . 536 71.1.4 Heur´ıstica do nivelamento de recursos . . . . . . . . . . . 536 71.1.5 Estrutura de Codifica¸˜o . . . . . . . ca . . . . . . . . . . . 536 72 Gerenciamento de Custo 537 72.1 T´cnicas de Estimativas de Custos e . . . . . . . . . . . . . . . . . 537 72.1.1 Estimativas An´logas . . . a . . . . . . . . . . . . . . . . . 537 72.1.2 Modelagem Param´trica . . e . . . . . . . . . . . . . . . . . 538 72.1.3 Estimativa bottom-up . . . . . . . . . . . . . . . . . . . . 538 73 Gerenciamento de Riscos 539 73.1 An´lise Qualitativa . . . . . . . . . . . . . . . . . . . . . . . . . . 539 a 73.2 An´lise Quantitativa de Riscos . . . . . . . . . . . . . . . . . . . 540 a 74 Gerenciamento de Qualidade 542 74.1 T´cnicas de Planejamento da Qualidade e . . . . . . . . . . . . . . 542 74.1.1 An´lise Custo/Benef´ a ıcio . . . . . . . . . . . . . . . . . . . 542 74.1.2 Benchmarking . . . . . . . . . . . . . . . . . . . . . . . . 543 74.1.3 Fluxograma . . . . . . . . . . . . . . . . . . . . . . . . . . 543 74.1.4 Elabora¸˜o de Experimentos . . ca . . . . . . . . . . . . . . 543 74.1.5 Custo da Qualidade . . . . . . . . . . . . . . . . . . . . . 544 74.2 T´cnicas de Controle da Qualidade . . . e . . . . . . . . . . . . . . 544 74.2.1 Gr´ficos de Controle . . . . . . . a . . . . . . . . . . . . . . 545 74.2.2 Diagramas de Pareto . . . . . . . . . . . . . . . . . . . . . 545 74.2.3 Diagramas de Dispers˜o . . . . . a . . . . . . . . . . . . . . 546 75 Gerenciamento da Comunica¸˜o ca 547 75.1 Um mais sobre Planejamento da Comunica¸˜o . . . . . . . . . . 547 ca http://www.candidatoreal.com 76 Gerenciamento das Aquisi¸˜es co 548 76.1 Um pouco mais sobre Planejamento de Aquisi¸˜es . . . . . . . . 548 co 77 Gerenciamento da Integra¸˜o ca 550 77.1 Ferramentas de Apoio ` Integra¸˜o . . . . . . . . . . . . . . . . . 550 a ca 78 Sobre os Ciclos do Projeto e Processos de Gerenciamento 551 15
  • 17. http://www.candidatoreal.com Parte I Fundamentos de Computa¸˜o ca http://www.candidatoreal.com 16
  • 18. http://www.candidatoreal.com Cap´ ıtulo 1 Arquitetura e Organiza¸˜o ca de Computadores 1.1 Conceitos B´sicos a Dois conceitos fundamentais no estudo dos sistemas de computa¸˜o s˜o o de ca a Arquitetura e Organiza¸˜o de computadores. O termo arquitetura refere-se aos ca atributos do ponto de vista do programador, e portanto, tˆm impacto direto e sobre sobre a execu¸˜o l´gica de um programa. O termo organiza¸˜o, refere-se ca o ca a `s unidades operacionais e suas interconex˜es. Desta forma, uma mesma ar- o quitetura pode ser implementadas por meio de diferentes organiza¸˜es. co As fun¸˜es b´sicas de um computador s˜o o processamento de dados, ar- co a a mazenamento de dados, transferˆncia de dados e controle. Para desempenhar e essas fun¸˜es o computador precisa executar um conjunto de instru¸˜es (pro- co co grama). Os computadores que conhecemos s˜o baseados no conceito de pro- a grama armazenado, introduzido por Von-Neuman. As instru¸˜es do programa co e os dados s˜o armazenados em uma mem´ria, de forma que a altera¸˜o de um a o ca programa consiste na altera¸ao de um endere¸o de mem´ria. c˜ c o O ciclo de execu¸˜o de cada uma das instru¸˜es de um programa ´ divi- ca co e dido nos seguintes estados: (i)Calculo do Endere¸o de Instru¸˜o; (ii)Busca da c ca Instru¸˜o (Instruction Fetch); (iii) Decodifica¸˜o da Instru¸˜o; (iv)C´lculo do ca ca ca a Endere¸o do Operando; (v)Busca do Operando (Operand Fetch); (vi)Execu¸˜o c ca http://www.candidatoreal.com da Opera¸˜o; (vii)Armazenamento do Resultado. No entanto, os computadores ca modernos utilizam o conceito de interrup¸˜o para diminuir o tempo de ociosi- ca dade dos processadores, o ciclo de execu¸˜o das instru¸˜es ganham mais alguns ca co estados. As classes de interrup¸˜es mais comuns s˜o interrup¸˜es de software, co a co de rel´gio, de E/S e de falha de hardware. o A estrutura b´sica de um computador ´ composta pelos seguintes compo- a e nentes: • (i)Unidade Central de Processamento(CPU); • (ii)Mem´ria Principal; o 17
  • 19. http://www.candidatoreal.com • (iii)Dispositivos de E/S; • (iv)Sistemas de Interconex˜o. a Esses componentes tamb´m possuem suas subdivis˜es. A CPU por exemplo e o se subdivide em: Unidade de Controle, Unidade L´gica e Aritm´tica (ALU), o e Registradores e por fim as Interconex˜es da CPU. Cada um desses componentes o er´ melhor descrito posteriormente. Para interconectar dois ou mais dispositivos a em um sistema s˜o utilizados os chamados barramentos. Os barramentos s˜o a a compostos por linhas que podem ser de Dados, Endere¸o ou Controle. Os c barramentos de controle podem ser utilizados por exemplo para controlar direito de leitura ou escrita em mem´ria ou E/S, interrup¸˜es, confirma¸˜es, rel´gio o co co o e reset. O projeto dos barramentos que comp˜e um sistema s˜o de grande o a importˆncia no desempenho do sistema. Quest˜es importantes no projeto de a o barramentos s˜o: a • (i)Tipo - dedicado ou multiplexado; • (ii)M´todo de Arbitra¸˜o - Centralizado ou Distribu´ e ca ıdo; • (iii)Temporiza¸˜o - S´ ca ıncrona ou Ass´ ıncrona; • (iv)Largura - n´mero de linhas; u • (v) Tipo de Transferˆncia - leitura, escrita, leitura/modifica¸˜o/escrita, e ca escrita/leitura, em bloco. Para aumentar o desempenho do sistema, os barramentos s˜o organizados de a forma hier´rquica, de forma isolar o tr´fego de dados entre CPU e mem´ria do a a o tr´fego proveniente de opera¸˜es de E/S. Os chamados barramentos de expans˜o a co a proporcionam maior flexibilidade ao sistema (ex: SCSI), enquanto os barramen- tos de alta velocidade s˜o utilizados para dispositivos de alta capacidade (ex: a FireWire). 1.2 Estrutura e Funcionamento da CPU Os principais elementos da CPU s˜o a Unidade de Controle , a Unidade L´gica a o e Aritm´tica (ULA) e os Registradores. Esses elementos se conectam interna- e mente atrav´s do barramento interno da CPU. e http://www.candidatoreal.com A CPU se comunica com o mundo externo atrav´s dos barramentos do sis- e tema. Ao longo da execu¸˜o de um programa, os barramentos constituem os ca chamados caminho dos dados. No topo da organiza¸˜o hier´rquica de mem´ria ca a o em um sistema se encontram os registradores. Esses se dividem em dois tipos: Registradores vis´ ıveis ao Usu´rio e Registradores de Controle e de Estado. a Os registradores vis´ ıveis ao usu´rio s˜o aqueles que podem ser referenciados a a pela linguagem de montagem. Eles podem ser registradores de dados, endere¸o c ou ent˜o de prop´sito geral. Os registradores de Controle e de Estado s˜o uti- a o a lizados para controlar a opera¸˜o da CPU. Na maioria das vezes n˜o s˜o vis´ ca a a ıveis aos usu´rios. Exemplos de registradores de Controle e de Estado s˜o o Program a a 18
  • 20. http://www.candidatoreal.com Counter (PC), Instruction Register (IR), Memory Address Register (MAR), Memory Buffer Register (MBR), Program Status Word (PSW), Stack Pointer (SI), Page Table Base Register (PTBR), Page Table Base Limit (PTBL). A seq¨ˆncia de eventos ao longo de um ciclo de instru¸˜o depende do projeto ue ca da CPU, no entanto, em termos gerais, pode-se indicar o que acontece em nos subciclos de busca, indireto e interrup¸˜o. O ciclo de execu¸˜o depende do ca ca c´digo da opera¸˜o que ser´ executada. A figura 1.1 mostra o diagrama de o ca a transi¸˜o de estados do ciclo de instru¸˜o. ca ca Figura 1.1: Transi¸˜o de Estados do Ciclo de Instru¸˜o ca ca Durante o ciclo de busca, o contador de programa cont´m o endere¸o da e c pr´xima instru¸˜o a ser buscada na mem´ria. Esse endere¸o ´ movido para o o ca o c e registrador MAR e a unidade de controle requisita uma leitura na mem´ria. O o resultado da leitura e colocado no registrador MBR, que em seguida ´ copiado e para o registrador IR. Enquanto isso o PC ´ incrementado de 1 para preparar e a busca da pr´xima instru¸˜o. O fluxo de dados do ciclo de busca ´ mostrado o ca e na figura 1.2. Ao fim do ciclo de busca, o unidade de controle examina se a instru¸˜o ca especifica algum operando com endere¸amento indireto. Os n bits mais a direita c de MBR s˜o colocados em MAR, e ent˜o a unidade de controle requisita uma a a leitura a mem´ria para carregar o valor do operando para MBR. O fluxo de o dados do ciclo de indireto ´ mostrado na figura 1.3. e http://www.candidatoreal.com No ciclo de interrup¸˜o, o conte´do do registrador PC dever ser salvo, para ca u que mais tarde a CPU possa retornar sua atividade normal depois de processar a interrup¸˜o. O conte´do do PC ´ transferido para MBR. A endere¸o de ca u e c mem´ria reservado para guardar o valor de PC (ex: topo da pilha) ´ carregado o e para MAR, e ent˜o a unidade de controle solicita uma escrita na mem´ria. Por a o fim o PC ´ carregado com o endere¸o da rotina de interrup¸˜o, para que o no e c ca pr´ximo ciclo de instru¸˜o seja feita a busca da instru¸˜o apropriada. A figura o ca ca 1.4 mostra o fluxo de dados do ciclo de interrup¸˜o. ca 19
  • 21. http://www.candidatoreal.com Figura 1.2: Fluxo de Dados do Ciclo de Busca Figura 1.3: Fluxo de Dados do Ciclo de Indireto http://www.candidatoreal.com Figura 1.4: Fluxo de Dados do Ciclo de Interrup¸˜o ca 1.2.1 Pipelines Como pudemos ver, um ciclo de instru¸˜o pode subdividido em etapas menores. ca Uma divis˜o comum ´ a baseada nos ciclos de busca, indireto, execu¸˜o e inter- a e ca rup¸˜o. A id´ia da t´cnica de pipeline ´ trabalhar as diversas etapas do ciclo ca e e e de instru¸˜o de forma paralela, e n˜o de forma serial, de forma aumentar o ca a 20
  • 22. http://www.candidatoreal.com desempenho da CPU. A t´cnica de pipeline pode ser descrita genericamente como uma estrat´gia e e de aceitar novas entradas em uma extremidade sem que as entradas pr´vias e tenha aparecido como sa´ ıdas na outra extremidade. Imaginemos um esquema em que o ciclo de instru¸˜o ´ subdividido em 2 etapas que s˜o a busca da in- ca e a stru¸˜o e a execu¸˜o. Enquanto uma instru¸˜o est´ sendo executada, a pr´xima ca ca ca a o instru¸˜o pode estar sendo buscada. Este esquema configura um pipeline de 2 ca est´gios, e a t´cnica utilizada ´ a de busca antecipada de instru¸˜o (Instruction a e e ca Prefetch ou Fetch Overlap). Embora possa ser obtido um ganho de desempenho, o pipeline de 2 est´gios ainda ´ muito fraco para lidar com instru¸˜es de desvio, a e co nas quais a busca da pr´xima instru¸˜o depende do resultado da execu¸˜o da o ca ca instru¸˜o corrente. ca Portanto, uma subdivis˜o do ciclo de instru¸˜o em um n´mero maior de a ca u est´gios pode proporcionar maior desempenho. Imaginemos o ciclo de instru¸˜o a ca como sendo composto dos seguintes est´gios: a • (1)BI - Busca da Instru¸˜o; ca • (2)DI - Decodifica¸˜o da Instru¸˜o; ca ca • (3)CO - Calculo dos Endere¸os dos Operandos; c • (4)BO - Busca dos Operandos; • (5)EI - Execu¸˜o da instru¸˜o; ca ca • (6)EO - Escrita do Operando. Essa subdivis˜o busca fazer com que os tempos gastos em cada um dos 6 a est´gios seja parecido. Se os 6 est´gios pudessem ser executados em paralelo, o a a desempenho seria aproximadamente 6 vezes maior. No entanto, podem existir conflitos de acesso ` mem´ria por parte dos a o est´gios e nem todas as instru¸˜es possuem os seis est´gios. Somam-se ` esses a co a a dois problemas, a existˆncia de instru¸˜es de desvios, principais inimigas da e co t´cnica de pipeline. Para lidar com os problemas introduzidos pelas instru¸˜es e co de desvio s˜o utilizadas t´cnicas como: a e • M´ltiplos Fluxos (duplica¸˜o de est´gios iniciais); u ca a http://www.candidatoreal.com • Busca Antecipada de Instru¸˜o-Alvo de Desvio; ca • Mem´ria de La¸o de Repeti¸˜o (loop buffer ); o c ca • Previs˜o de Desvio baseadas no opcode; a • Previs˜o de Desvio baseadas em hist´rico (BTB - Branch Target Buffer, a o tamb´m conhecida como BHT - Branch History Table). e As figuras 1.5 e 1.6 mostram os diagramas de tempo para o pipeline de instru¸˜es com e sem instru¸˜es de desvio. co co 21
  • 23. http://www.candidatoreal.com Figura 1.5: Diagrama do Tempo para Pipeline de Instru¸˜es co Figura 1.6: Efeito do desvio condicional no Pipeline de Instru¸˜es co 1.3 Conjunto de Instru¸˜es co A opera¸˜o da CPU ´ determinada pelo conjunto de instru¸˜es que ela executa. ca e co S˜o as chamadas instru¸˜es de m´quina. A cole¸˜o de instru¸˜es que uma CPU a co a ca co pode executar ´ chamada Conjunto de Instru¸˜es. O conjunto de instru¸˜es e co co deve ser suficiente para traduzir programas escritos em uma linguagem de alto n´ ıvel para a linguagem de m´quina. Os principais elementos e uma instru¸˜o a ca http://www.candidatoreal.com s˜o: a • (i)C´digo da opera¸˜o (opcode): especifica a opera¸˜o a ser efetuada; o ca ca • (ii)Referˆncia ` Operando Fonte: indica as entradas para a opera¸˜o; e a ca • (iii)Referˆncia ao operando Destino: A opera¸˜o pode produzir um resul- e ca tado; • (iv)Endere¸o da pr´xima instru¸˜o: Pode ser indicado implicitamente (ex: c o ca registrador PC). 22
  • 24. http://www.candidatoreal.com Os operandos fonte e destino podem estar localizados em mem´ria (principal o ou virtual), em algum registrador, ou em algum dispositivo de E/S. Cada instru¸˜o de um computador ´ representada internamente como um ca e conjunto de bits. A instru¸˜o ´ dividida em campos correspondentes aos ele- ca e mentos da instru¸˜o. O papel da CPU e ler a instru¸˜o, extrair informa¸˜o de ca ca ca cada um dos campos e efetuar a opera¸˜o. Devido `s dificuldades de se lidar ca a com a representa¸˜o bin´ria, ´ utilizada uma esp´cie de nota¸˜o simb´lica para ca a e e ca o representar as instru¸˜es de m´quina. Os c´digos das opera¸˜es s˜o representa- co a o co a dos por mnemˆnicos. (ex: ADD, SUB, MPY, DIV, LOAD, STOR). O mesmo o ocorre para os operandos. Um conjunto de instru¸˜es pode apresentar mais de co um formato de instru¸˜o. ca As instru¸˜es podem ser classificadas em: co • (i)Processamento de Dados: instru¸˜es l´gicas e aritm´ticas; co o e • (ii)Armazenamento de dados: instru¸˜es de mem´ria; co o • (iii)Movimenta¸˜o: instru¸˜es de E/S; ca co • (iv)Controle: instru¸˜es de teste e desvio. co No projeto do conjunto de instru¸˜es as quest˜es mais relevantes s˜o o co o a repert´rio de opera¸˜es, os tipos de dados, o formato e tamanho das instru¸˜es, o co co os registradores acess´ ıveis, e os modos de endere¸amento. As classes de dados c sobre as quais as instru¸˜es de m´quina operam s˜o endere¸os, n´meros (ex: co a a c u ponto fixo, ponto flutuante, decimal), caracteres (ex: ASCII e EBCDIC) e da- dos l´gicos. o Os tipos de opera¸˜es mais comuns s˜o: co a • (i)Transferˆncia de Dados: mov,push/pop,xlat,in/out; e • (ii)Aritm´ticas: add,sub,mul,idiv; e • (iii)L´gicas: and,or,shl/shr; o • (iv)Convers˜o de Tipos: jmp,call,loop,int/into; a • (vi)Controle do Sistema: hlt,wait; http://www.candidatoreal.com • (vii)Transferˆncia de Controle: blt,bgt,beq,call,jmp. e Nas opera¸˜es de salto e desvio, ´ importante conhecer cada um dos c´digos co e o de condi¸˜o envolvidos. (ex: Vai-Um, Zero, Paridade, Sinal, Overflow) Na im- ca plementa¸˜o das chamadas de procedimento ´ importante ressaltar a utiliza¸˜o ca e ca de pilhas para permitir chamadas reentrantes (uma chamada dentro da outra). 23
  • 25. http://www.candidatoreal.com 1.4 Unidade de Controle A unidade de controle coordena os diversos elementos do processador para que este possa realizar todas as suas fun¸˜es. A execu¸˜o de um programa consiste co ca de uma seq¨ˆncia de ciclos de instru¸˜o. Um ciclo de instru¸˜o pode ser sub- ue ca ca dividido em quatro subciclos que s˜o busca, indireto, execu¸˜o e interrup¸˜o. a ca ca Somente os ciclos de busca e execu¸˜o est˜o presentes em todos os ciclos de ca a instru¸˜o. Cada subciclo, por sua vez, ´ composto por microopera¸˜es. ca e co Os quatro registradores b´sicos da unidade de controle s˜o: a a • PC (Program Counter ): Mant´m o endere¸o da pr´xima instru¸˜o a ser e c o ca buscada na mem´ria; o • MAR (Memory Address Register ): Especifica endere¸o de memoria para c uma opera¸˜o de leitura ou escrita; ca • MBR (Memory Buffer Register ): Conectado ao barramento do sistema. Cont´m um valor a ser armazenado na mem´ria ou o ultimo valor dela e o ´ lido; • IR (Instruction Register ): Mant´m a ultima instru¸˜o buscada na mem´ria. e ´ ca o O ciclo de busca ocorre no in´ıcio de cada ciclo de instru¸˜o, fazendo com ca que a instru¸˜o seja obtida na mem´ria no endere¸o indicado pelo registrador ca o c PC, e armazenada no registrador IR. Uma vez completada essa etapa, pode ser necess´rio que se busquem operandos para a instru¸˜o. Isso ´ realizado no ciclo a ca e de indireto. Ap´s o termino do ciclo de execu¸˜o, ´ feita uma checagem para o ca e determinar se ocorreu alguma interrup¸˜o, e neste caso o conte´do de PC ´ ca u e salvo em mem´ria e PC ´ carregado com um endere¸o da rotina de interrup¸˜o o e c ca apropriada. Os ciclos de busca, indireto e de interrup¸˜o envolvem um n´mero ca u pequeno e fixo de microopera¸˜es. Isso n˜o ocorre nos ciclos de execu¸˜o. Em co a ca uma m´quina com N c´digos de instru¸˜o podem existir N diferentes seq¨ˆncias a o ca ue de microopera¸˜es para o ciclo de execu¸˜o. co ca Todas as microopera¸˜es caem em uma das seguintes categorias: co • (i)Transferˆncia de dados entre registradores; e • (ii)Transferˆncia de dados entre registrador e interface externa (barra- e http://www.candidatoreal.com mento); • (iii)Transferˆncia de dados de interface externa para registrador; e • (iv)Execu¸˜o de opera¸˜es l´gicas e aritm´ticas, usando registradores como ca co o e entrada e sa´ ıda. Portanto, a unidade de controle desempenha duas tarefas b´sicas que s˜o o a a seq¨enciamento e a execu¸˜o das microopera¸˜es. A base para o funcionamento u ca co da unidade de controle s˜o os sinais de controle, que constituem as entradas e a sa´ ıdas. 24
  • 26. http://www.candidatoreal.com As unidades de controle podem ser implementadas tanto em hardware quanto em software (Microprograma¸˜o). A implementa¸˜o baseada em micropro- ca ca grama¸˜o ´ mais simples e tamb´m mais barata do que as implementa¸˜es em ca e e co hardware. As implementa¸˜es em hardware envolvem a cria¸˜o de uma l´gica co ca o complexa para sequenciamento das microopera¸˜es, o que a torna mais cara. co No entanto, ´ mais eficiente dos que as implementa¸˜es basadas em micropro- e co grama¸˜o. As arquiteturas CISC geralmente utilizam unidades de controle mi- ca croprogramadas, devido ao grande n´mero de instru¸˜es e sua complexidade. J´ u co a as arquiteturas RISC, geralmente utilizam implementa¸˜es baseadas em hard- co ware uma vez que o n´mero de instru¸˜es ´ reduzido e de baixa complexidade. u co e As t´cnicas de microprograma¸˜o tamb´m podem ser aplicadas em em- e ca e ula¸˜es, permitindo que m´quinas rodem programas escritos originalmente para co a outras m´quinas. Microprogramas podem conferir maior desempenho ao sis- a tema operacional se forem utilizados na implementa¸˜o de certas primitivas. ca Al´m disso, as t´cnicas de microprograma¸˜o podem ser utilizadas na imple- e e ca menta¸˜o de dispositivos de prop´sito especial, por exemplo uma placa de rede ca o (firmware). 1.5 Modos de Endere¸amento c Os modos de endere¸amento est˜o relacionados com a forma utilizada para c a especificar o valor ou endere¸o de um operando de uma instru¸˜o. Quest˜es im- c ca o portantes na escolha do modo de endere¸amento s˜o a quantidade de posi¸˜es de c a co mem´ria endere¸´veis, flexibilidade de endere¸amento, n´mero de referˆncias a o ca c u e mem´ria feitas pela instru¸˜o e complexidade do c´lculo do endere¸o. Em geral, o ca a c as arquitetura n˜o oferecem s´ um modo de endere¸amento, mas sim um con- a o c junto de modos. Por este motivo, ´ necess´rio que exista uma forma de se e a identificar qual o modo de endere¸amento que se est´ utilizando. Isso ´ feito c a e atrav´s do campo de modo de endere¸amento, que consiste em um subconjunto e c dos bits de uma instru¸˜o. ca • Imediato: o valor do operando ´ especificado diretamente na instru¸˜o. e ca Sua principal vantagem ´ n˜o requer acesso a mem´ria para obter o e a o operando. A desvantagem ´ que esse modo imp˜e uma limita¸˜o no e o ca tamanho do operando; • Direto: o campo de endere¸o contem o endere¸o efetivo do operando na c c http://www.candidatoreal.com mem´ria. Requer portanto apenas um acesso para determinar o valor do o operando. Sua limita¸˜o ´ fornecer um espa¸o de endere¸amento limitado; ca e c c • Indireto: o campo de endere¸o aponta para uma posi¸˜o de mem´ria que c ca o contem o endere¸o de mem´ria do operando. Sua principal desvantagem c o ´ a necessidade de dois acessos ` mem´ria. A vantagem em rela¸˜o ao e a o ca modo de endere¸amento direto ´ o aumento do espa¸o de endere¸amento, c e c c que passa a ser igual 2n onde n ´ o tamanho da palavra; e • Registrador : ´ semelhante ao modo direto, no entanto o modo de endere¸o e c se refere a um registrador e n˜o ` uma posi¸˜o de mem´ria. Geralmente ´ a a ca o e 25
  • 27. http://www.candidatoreal.com composto por 3 ou 4 bits, o que permite referenciar de 8 a 16 registradores de prop´sito geral. Suas vantagens s˜o o tamanho pequeno do campo de o a endere¸o e n˜o necessidade de se acessar a mem´ria. Sua desvantagem ´ c a o e o espa¸o de endere¸amento limitado pelo n´mero de registradores; c c u • Indireto via Registrador : semelhante ao modo de endere¸amento indireto. c O campo de endere¸o aponta para o registrado que contem a posi¸˜o de c ca mem´ria do operando. Sua vantagem ´ a necessidade de um unico acesso o e ´ a mem´ria, um a menos que no modo indireto; o • Deslocamento: requer que uma instru¸˜o tenha dois campos de endere¸o, ca c com pelo menos um expl´ ıcito. O valor de um dos campos ´ usado dire- e tamente (valor = A). O outro campo ´ baseado no c´digo da opera¸˜o, e e o ca especifica um registrador cujo conte´do ´ adicionado a A, para produzir o u e endere¸o efetivo. Os trˆs modos de endere¸amento por deslocamento s˜o c e c a relativo, via registrador-base e indexado; • Pilha: A pilha ´ um bloco reservado de posi¸˜es em mem´ria. Elementos e co o podem ser colocados e removidos do topo da pilha. o apontador do topo da pilha (stack-pointer ) ´ mantido em um registrador. Portanto, de fato, e referˆncias a pilha s˜o feitas por endere¸amento indireto via registrador. e a c 1.6 Organiza¸˜o de Mem´ria ca o Um sistema de computador t´ ıpico ´ equipado com uma hierarquia de subsis- e temas de mem´ria, algumas internas (diretamente acess´ o ıveis pelo processador, como registradores, cache e mem´ria principal) e outras externas (acess´ o ıveis pelo processador por meio de um m´dulo de E/S, como disco e cdrom). As o caracter´ ısticas fundamentais de um sistema de mem´ria s˜o: o a 1. Localiza¸˜o - processador, interna (principal), externa (secund´ria); ca a 2. Capacidade - tamanho da palavra e n´mero da palavra; u 3. Unidade de Transferˆncia - palavra, bloco; e 4. M´todo de Acesso - seq¨encial, direto, aleat´rio, associativo; e u o 5. Desempenho - tempo de acesso, tempo de ciclo e taxa de transferˆncia; e 6. Tecnologia - semicondutores, magn´tica, ´ptica, magneto-´ptico; e o o http://www.candidatoreal.com 7. Caracter´ ısticas F´ ısicas - vol´til/n˜o vol´til, apag´vel/n˜o apag´vel. a a a a a a Quanto ao m´todo de acesso das mem´rias internas, vale a pena destacar os e o acessos aleat´rio e associativo. No acesso aleat´rio, cada unidade endere¸´vel o o ca possui um mecanismo de endere¸amento unico e fisicamente conectado a ela. E c ´ ´ o m´todo utilizado na mem´ria principal. O esquema associativo consiste em e o um tipo de mem´ria de acesso aleat´rio que possibilita comparar simultanea- o o mente um certo n´mero de bits de uma palavra com todas palavras da mem´ria u o (totalmente associativo) ou com um conjunto de palavras de mem´ria (associa- o tivo por conjunto). O m´todo associativo ´ empregado pelas mem´rias cache. e e o 26
  • 28. http://www.candidatoreal.com As restri¸˜es de um projeto de mem´ria podem ser resumidos por 3 quest˜es: co o o Capacidade, Velocidade e Custo. Neste cen´rio, valem as seguintes rela¸˜es: a co 1. Menor tempo de acesso, maior custo por bit; 2. Maior capacidade, menor custo por bit; 3. Maior capacidade, menor tempo de acesso. A organiza¸˜o hier´rquica dos sistemas de mem´ria visa lidar com o dilema ca a o imposto pelas rela¸˜es apresentadas. A hierarquia ´ elaborada de forma que as co e a medida que nela descemos as seguintes rela¸˜es s˜o tamb´m v´lidas: co a e a 1 O custo por bit diminui; 2 A capacidade aumenta; 3 O tempo de acesso aumenta; 4 A freq¨ˆncia de acesso pelo processador diminui. ue Desse modo, as mem´rias menores, mais caras e mais r´pidas s˜o combi- o a a nadas com mem´ria de maior capacidade, mais lentas e baratas. o A chave do sucesso dessa organiza¸˜o baseia-se principalmente na rela¸˜o ca ca 4, que resume o princ´ıpio da Localidade das Referˆncias. Este princ´ e ıpio diz que ao longo da execu¸˜o de um programa, as referˆncias feitas ` mem´ria pelo ca e a o processador, tanto no caso de instru¸˜es como dados, tendem a formar grupos co no qual est˜o pr´ximas umas das outras. Desse modo ´ poss´ a o e ıvel organizar os dados ao longo de uma hierarquia de forma que a porcentagem de acessos ` um a certo n´ seja sucessivamente bem inferior do que a porcentagem de acessos ` ıvel a um n´ imediatamente superior. ıvel Registradores, mem´ria cache e mem´ria principal s˜o as trˆs formas de o o a e mem´ria interna que empregam tecnologias de semicondutores. O uso de trˆs o e n´ıveis explora as diferen¸as de velocidade e custo dessas mem´rias. Al´m de- c o e las, alguns sistemas utilizam tecnologias e t´cnicas adicionais na hierarquia de e mem´ria. o A Mem´ria Expandida emprega uma tecnologia mais lenta que a mem´rias o o principais. Ela funciona como um ramo lateral a mem´ria principal, n˜o se o a http://www.candidatoreal.com comunicando com a mem´ria externa. J´ a t´cnica de Mem´ria Virtual permite o a e o que os discos funcionem como uma extens˜o da mem´ria principal, aumentando a o o desempenho do sistema. A utiliza¸˜o de mem´rias cache tem por objetivo proporcionar uma veloci- ca o dade de acesso pr´xima a velocidade de acesso aos registradores, no entanto o oferecendo uma capacidade maior do que o conjunto de registradores, e custo n˜o muito superior ao da mem´ria principal. Os principais elementos de projeto a o de mem´rias cache s˜o: o a i Tamanho - deve ser projetado para conjugar bem velocidade, capacidade e custo; 27
  • 29. http://www.candidatoreal.com ii Fun¸˜o de Mapeamento - direto, associativo, associativo por conjuntos; ca iii Algoritmo de Substitui¸˜o - LRU, FIFO, LFU, Aleat´rio; ca o iv Pol´ ıtica de Escrita - direta (write-through), de volta (write-back) e unica ´ (write-once); v Tamanho da Linha; vi N´mero de Mem´rias Cache - um ou dois n´ u o ıveis, unificada/separada. Entre os elementos de projeto de mem´ria cache vale destacar trˆs. O o e primeiro ´ a Fun¸˜o de Mapeamento, que diz respeito a determinar onde um e ca bloco da mem´ria principal pode ser encontrado na mem´ria cache. Para re- o o alizar este mapeamento s˜o necess´rios o endere¸o do bloco na mem´ria prin- a a c o cipal e a fun¸˜o de mapeamento. No esquema de mapeamento direto, um de- ca terminado conjunto de blocos da mem´ria principal s´ pode ser encontrado em o o uma linha espec´ o ´ ıfica da mem´ria cache. E de f´cil implementa¸˜o, por´m pode a ca e utilizar de forma ineficiente o espa¸o da cache. No mapeamento associativo c um bloco da mem´ria principal pode ser colocado em qualquer linha da cache. o Maximiza a ocupa¸˜o da cache, por´m exige uma l´gica de controle que real- ca e o ize compara¸˜o do r´tulo com todas as linhas do cache simultaneamente. No ca o esquema associativo por conjuntos, um bloco da mem´ria principal pode se en- o contrar em um conjunto de linhas da cache, e n˜o nela toda. Visa conjugar a vantagens dos m´todos direto e associativo. e O segundo elemento ´ Pol´ e ıtica de Escrita, que visa garantir a coerˆncia das e informa¸˜es nos diferentes mem´rias acess´ co o ıveis pelo processador e dispositivos de E/S. Na t´cnica ´ a de escrita direta (write-through), todas as opera¸˜es de e e co escrita s˜o feitas na mem´ria principal e no cache. Esta garante a coerˆncia em a o e todas as mem´rias do sistema, no entanto ´ de baixo desempenho. Na t´cnica o e e de escrita de volta (write-back), as escritas s˜o feitas apenas na cache. Minimiza a as opera¸˜es de escrita em mem´ria principal, por´m imp˜e que opera¸˜es de co o e o co E/S acessem o cache. O terceiro elemento ´ o n´mero de mem´rias cache do sistema. Atualmente, e u o a organiza¸˜o mais comuns ´ baseada em 2 n´ ca e ıveis, um interno ao processador (L1) e outro externo (L2). Originalmente, a maioria dos projetos de cache inclui uma unica mem´ria cache, que armazenava tanto instru¸˜es como da- ´ o co dos. Recentemente, tornou-se comum a utiliza¸˜o de mem´rias separadas para ca o http://www.candidatoreal.com instru¸˜es e dados. Em processadores modernos que se valem de t´cnicas de co e busca antecipada de instru¸˜o (Pipeline), t´cnicas de Cache Separadas s˜o mais ca e a eficientes que as de Cache Unificada. 1.7 Desempenho do computador O desempenho de um computador pode ser definido como: 1 Desempenho = (1.1) T empo de Execucao 28
  • 30. http://www.candidatoreal.com O tempo ´ a medida de desempenho de um sistema computacional. Em e geral, ele ´ medido em segundos e pode ser definido de diferentes maneiras. O e tempo de resposta ou tempo decorrido (elapsed time) define o tempo total para se completar uma tarefa computacional, incluindo os acessos ` mem´ria e ao a o disco, as atividades de entrada e sa´ e o overhead do sistema operacional. ıda O tempo do processador (CPU time) define o tempo gasto pelo proces- sador para executar um programa em particular, n˜o considerando o tempo de a execu¸˜o de outros programas, tempo de espera por I/O, etc. Este tempo ´ ca e dividido em tempo do usu´rio e tempo do sistema. O tempo do usu´rio ´ o a a e tempo gasto na execu¸˜o das instru¸˜es do programa do usu´rio. J´ o tempo ca co a a do sistema ´ o tempo gasto pelo sistema operacional para executar tarefas em e benef´ do programa do usu´rio. A medida de tempo que mais interessa ´ o ıcio a e tempo de usu´rio. a Os projetistas medem a velocidade do hardware na execu¸˜o de suas fun¸˜es ca co b´sicas com o clock. O clock possui uma taxa constante e determina o momento a da ocorrˆncia de eventos do pr´prio hardware. O tamanho de um per´ e o ıodo de clock ´ referenciado tanto como o tempo necess´rio para completar um ciclo de e a clock quanto como a freq¨ˆncia do clock (inverso do ciclo de clock). Por exemplo, ue um ciclo de clock igual a 2 ηs corresponde a uma freq¨ˆncia de 500MHz, que ´ ue e o inverso do ciclo de clock. 1.7.1 Tempo de execu¸˜o de um programa ca F´rmulas bastante simples relacionam a medida do tempo de execu¸˜o gasto no o ca processador com a m´trica b´sica baseada nos ciclos de clock e tempo do ciclo e a de clock: Tempo de CPU do programa = N de ciclos x Per´ ıodo de clock = N de ciclos / Freq¨ˆncia do clock ue Essas f´rmulas n˜o incluem qualquer referˆncia ao n´mero de instru¸˜es o a e u co necess´rias ` execu¸˜o de um programa. O tempo de execu¸˜o tamb´m depende a a ca ca e do n´mero de instru¸˜es do programa. O n´mero de ciclos de clock necess´rios u co u a a ` execu¸˜o de uma instru¸˜o ´ dado por: ca ca e No de ciclos de clock = No instru¸˜es do programa x CPI co (1.2) http://www.candidatoreal.com A CPI ´ a m´dia do n´mero de ciclos por instru¸˜o. Este parˆmetro permite e e u ca a a compara¸˜o entre diferentes implementa¸˜es de uma mesma arquitetura do ca co conjunto de instru¸˜es, uma vez que o n´mero de instru¸˜es para a execu¸˜o do co u co ca programa nas diferentes implementa¸˜es ´ o mesmo. co e 1.7.2 Desempenho da CPU O desempenho da CPU na execu¸˜o de um programa pode ser medido em termos ca quantidade de instru¸˜es, do CPI e do per´ co ıodo do clock: 29
  • 31. http://www.candidatoreal.com Tempo de CPU = No de instru¸˜es x CPI x Per´ co ıodo do clock (1.3) O tempo de CPU ´ medido executando o programa, o per´ e ıodo do clock ´e divulgado pelo fabricante e o n´mero de instru¸˜es ´ obtido por meio de soft- u co e wares conhecidos como execution profilers ou por simuladores de arquitetura. Em uma primeira aproxima¸˜o, o n´mero de instru¸˜es, a CPI e o per´ ca u co ıodo do clock s˜o afetados respectivamente pela capacidade de otimiza¸˜o do com- a ca pilador, pela arquitetura do processador e de seu conjunto de instru¸˜es; e pela co tecnologia empregada na implementa¸˜o da m´quina. ca a 1.7.3 Programas para medir desempenho Existem quatro n´ıveis de programas que podem ser usados para avalia¸˜o de ca desempenho, eles est˜o listados em ordem decrescente de precis˜o de previs˜o: a a a • Programas reais; • N´cleos ou kernels (peda¸os de programas reais); u c • Toy Benchmarks (programas com 10 a 100 linhas de c´digo que produzem o um resultado conhecido a priori); • Benchmarks sint´ticos (similar em filosofia aos n´cleos, tentam casar a e u freq¨ˆncia m´dia de opera¸˜es de um grande conjunto de programas). ue e co Os benchmarks s˜o conjuntos de aplica¸˜es que representam cargas de tra- a co balho cujo objetivo ´ estimar o desempenho das cargas de trabalho reais. Os e benchmarks podem conter aplica¸˜es t´ co ıpicas de processamento cient´ ıfico, com- piladores, processadores de texto entre outras. Um Benchmark Suite ´ um conjunto de programas de avalia¸˜o. A Stan- e ca dard Performance Evaluation Corporation (SPEC) tem lan¸ado v´rios bench- c a mark suites: SPEC89, SPEC92, SPEC95 e SPEC2000. Estas benchmark suites s˜o compostas por programas reais, escolhidos para serem representativos de a programas que tipicamente demandam muita CPU e pouco I/O. 1.7.4 Comparando desempenho http://www.candidatoreal.com Uma vez selecionados os programas adequados para usar como benchmarks e decidida a m´trica de avalia¸ao, tempo de resposta ou throughput (n´mero de e c˜ u tarefas executadas por unidade de tempo), ´ necess´rio decidir como comparar e a os dados de desempenho obtidos a partir de diferentes benchmarks. A maneira mais simples de considerar o desempenho relativo ´ usar o tempo e total de execu¸˜o de dois programas em m´quinas diferentes. Por exemplo, os ca a tempos de execu¸˜o de dois programas conforme a tabela 1.1. ca Outra maneira de sumarizar os tempos ´ utilizando as m´dias aritm´tica, e e e harmˆnica ou geom´trica. A m´dia geom´trica ´ inadequada, pois n˜o prediz o o e e e e a tempo de execu¸˜o. ca 30
  • 32. http://www.candidatoreal.com Computador A Computador B Programa 1 (s) 1 10 Programa 2 (s) 1000 100 Total (s) 1001 110 Tabela 1.1: Tempo total de execu¸˜o de 2 programas ca 1 M´dia Aritm´tica = Tempo (i,n) = e e (1.4) n n M´dia Harmˆnica = Taxa (i,n) = e o n 1 (1.5) i=1 T axai n M´dia Geom´trica = Tempo Normalizado (i,n) = e e n T normalizadoi (1.6) i=1 Al´m das m´dia, existem ainda outras medidas de desempenho. Uma das e e alternativas ´ a m´trica MIPS (million instruction per second), que ´ dada por e e e um das seguintes express˜es: o N´mero de instru¸˜es u co MIPS = Tempo de execu¸˜o x 106 ca Freq¨ˆncia de Clock ue = CPI 106 Existem problemas com o uso da m´trica MIPS. Ela especifica a taxa de e execu¸˜o de instru¸˜es, mas n˜o considera a capacidade de executar mais ou ca co a menos trabalho. Portanto, n˜o podemos comparar m´quinas com conjuntos de a a instru¸˜es diferentes. Outro problema ´ que os resultados obtidos variam en- co e tre programas no mesmo computador, o que impede que determinada m´quina a tenha um MIPS caracter´ ıstico. Outra alternativa ´ a m´trica denominada MFLOPS (million floating-point e e operations per second), que ´ dada pela seguinte express˜o: e a N´mero de op. de ponto flutuante u http://www.candidatoreal.com MFLOPS = (1.7) Tempo de execu¸˜o x 106 ca Uma opera¸˜o de ponto flutuante pode ser uma opera¸˜o de adi¸˜o, sub- ca ca ca tra¸˜o, multiplica¸˜o ou divis˜o aplicada a operandos expressos em precis˜o ca ca a a simples ou dupla. 1.7.5 Lei de Amdahl A lei de Amdhal pode ser utilizada para demonstrar o ganho de desempenho de uma m´quina. Este ganho ´ dito acelera¸˜o ou speedup. Entende-se por a e ca acelera¸˜o a medida de como a m´quina se comporta ap´s a implementa¸˜o ca a o ca 31
  • 33. http://www.candidatoreal.com de uma melhora em rela¸˜o ao seu comportamento anterior. Podemos definir ca speedup como: Desempenho ap´s a melhora o speedup = (1.8) Desempenho antes da melhora A lei de Amdhal demonstra que ´ errado esperar que a melhora em um dos e aspectos que influenciam no desempenho da m´quina resulte numa melhora no a desempenho total proporcional ao tamanho do ganho inicial da fra¸˜o. ca http://www.candidatoreal.com 32
  • 34. http://www.candidatoreal.com Cap´ ıtulo 2 Componentes de um Computador O computador est´ organizado em dois componentes que s˜o: a a • Hardware: corresponde a parte f´ısica que est´ dividida em: unidade de a entrada e sa´ ıda, processador, mem´ria principal e mem´ria secund´ria; o o a e a a a ´ • Software: ´ o conjunto de programas que d´ vida ` m´quina. E classificado em software aplicativo (jogos, planilha, etc.) e software b´sico (sistema a operacional, compiladores, editores de texto, etc.). Para interligar os componentes do hardware existe uma placa de suporte especial, chamada placa-m˜e. A placa-m˜e ´ respons´vel por gerenciar toda a a a e a transa¸˜o entre o processador e os perif´ricos. Os componentes principais da ca e placa-m˜e s˜o: chipset, BIOS, barramentos, e slots. a a Chipset ´ o chip respons´vel pelo controle de diversos dispositivos de entrada e a e sa´ como o barramento, o acesso ` mem´ria, o acesso ao HD, perif´ricos ıda a o e on-board e off-board, comunica¸˜o do processador com a mem´ria RAM e en- ca o tre outros componentes da placa-m˜e. Uma placa-m˜e possui dois chipsets: o a a chipset sul e o chiset norte. O chipset sul (south bridge) ´ respons´vel pelo cont- e a role de dispositivos de entrada ou sa´ enquanto o chipset norte (north bridge) ıda faz a comunica¸˜o entre o processador e a mem´ria principal. ca o http://www.candidatoreal.com O BIOS (Basic Input/Output System) ´ o primeiro programa executado e pelo computador ao ser ligado. Sua fun¸˜o prim´ria ´ preparar a m´quina para ca a e a que o sistema operacional, que pode estar armazenado em diversos tipos de dispositivos (discos r´ ıgidos, disquetes, CDs, etc) possa ser executado. O BIOS ´ armazenado num chip ROM (Read-Only Memory) localizado na placa-m˜e, e a chamado ROM BIOS. O BIOS tamb´m ´ respons´vel por controlar o uso dos e e a dispositivos e manter informa¸˜es de data e hora. O BIOS trabalha junto com co o post, um software que testa os componentes do micro em busca de eventuais erros. Pode-se alterar as configura¸˜es de hardware atrav´s do setup. co e 33
  • 35. http://www.candidatoreal.com Os barramentos permitem a interliga¸˜o entre os dispositivos da placa-m˜e. ca a S˜o divididos em trˆs conjuntos: via de dados, via de endere¸os e via de cont- a e c role. O desempenho do barramento pode ser medido pela sua largura de banda (32, 64 bits, etc.) e pela sua velocidade de transmiss˜o (100 Mbps, 1G bps, etc.). a Os slots s˜o respons´veis por ligar os perif´ricos aos barramentos e suas a a e velocidades e largura de banda s˜o correspondentes as dos seus respectivos bar- a ramentos. Na placa-m˜e s˜o encontrados v´rios slots para encaixe de placas a a a (v´ ıdeo, som, rede, modem, etc.). Alguns exemplos de slots: ISA, PCI, AGP, PCI Express, etc. 2.1 Principais componentes de Hardware 2.1.1 Discos R´ ıgidos Os discos r´ ıgidos s˜o dispositivos de armazenamento destinados a grandes quan- a tidades de dados. Fisicamente, um disco r´ ıgido pode ser visto como um com- posto por dois grandes blocos, como na figura 2.2. O primeiro bloco ´ um e conjunto de discos magn´ticos superpostos em alturas diferentes com aux´ de e ılio um eixo central. No momento de acesso ao disco, essa estrutura ´ mantida em e uma rota¸˜o constante. O segundo bloco ´ uma estrutura mecˆnica que suporta ca e a um conjunto de cabe¸otes, um para cada superf´ de disco. Essa estrutura ´ c ıcie e capaz de realizar movimentos de vai-e-vem de maneira que os cabe¸otes possam c ser deslocados desde a borda do disco at´ o centro. e http://www.candidatoreal.com Figura 2.1: Organiza¸˜o f´ ca ısica do disco Do ponto de vista da organiza¸˜o l´gica, cada superf´ de um disco ´ di- ca o ıcie e vidida em circunferˆncias concˆntricas denominadas trilhas. Cada trilha, por e e sua vez, ´ subdividida radialmente em unidades chamadas setores. Em geral, e os setores tˆm o mesmo tamanho. O setor possui a unidade m´ e ınima de leitura e grava¸˜o em um disco. O conjunto de todas as superf´ ca ıcies do disco que fi- cam exatamente ` mesma distˆncia do eixo central forma o cilindro, conforme a a a figura ??. As abstra¸˜es cilindro, trilha e setor s˜o utilizadas para designar a co a organiza¸˜o l´gica da unidade de disco. A defini¸˜o de trilhas e de setores em ca o ca 34
  • 36. http://www.candidatoreal.com um disco chama-se formata¸˜o f´ ca ısica e ´ um procedimento realizado pelo fabri- e cante. A capacidade total do disco ´ obtida multiplicando-se cabe¸as x cilindros e c x setores x tamanho do setor. Figura 2.2: Organiza¸˜o l´gica da unidade de disco ca o Para acessar dados no disco, ´ necess´rio informar ` controladora o cilin- e a a dro, a superf´ e o setor a ser acessado. Esse m´todo ´ denominado de CHS ıcie e e (Cylinder, Head, Sector). Outra maneira ´ acessar o disco ´ enxerg´-lo como e e a um conjunto de blocos, no qual cada bloco ´ um ou mais setores. O n´mero de e u blocos ´ ent˜o convertido em cilindros, superf´ e setores por um procedimento e a ıcie que se denomina de LBA (Linear Block Addressing). Outros termos bastante comuns associados a disco r´ ıgidos s˜o formata¸˜o a ca l´gica e parti¸˜es. A formata¸˜o l´gica consiste em gravar informa¸˜es no disco o co ca o co de forma que arquivos possam ser escritos, lidos e localizados pelo sistema op- eracional. O conceito de parti¸˜o est´ associado ` capacidade de dividir logica- ca a a mente um disco em v´rios outros discos. a Para realizar um acesso a um disco, ´ necess´rio posicionar o cabe¸ote de e a c leitura e escrita sob um determinado setor e trilha onde dado ser´ lido ou es- a crito. O tempo total de acesso aos disco, seja para leitura ou para escrita, ´ e dado pela seguinte f´rmula: o Ta cesso = Ts eek + Tl atencia + Tt ransf erencia (2.1) http://www.candidatoreal.com A descri¸˜o de cada um dos termos da soma ´ a seguinte: ca e • Tempo de Seek: tempo necess´rio para deslocar o cabe¸ote de leitura e a c escrita at´ o cilindro correspondente ` trilha a ser acessada; e a • Tempo de Latˆncia: tempo necess´rio, uma vez o cabe¸ote posicionado j´ e a c a na trilha correta, para o setor a ser lido, ou escrito, se posicionar sob o cabe¸ote de leitura e escrita no in´ do setor a ser lido (ou escrito); c ıcio • Tempo de Transferˆncia: corresponde ao tempo necess´rio ` transferˆncia e a a e dos dados, isso ´, ` leitura ou a escrita dos dados. e a 35
  • 37. http://www.candidatoreal.com Outro fator relacionado com a redu¸˜o do tempo de acesso a um disco ´ ca e o entrela¸amento (interleaving). Essa t´cnica numera os setores n˜o mais de c e a forma cont´ıgua, mas sim com um espa¸o entre eles. O disco 2 da Ilustra¸˜o 14 c ca possui um fator de entrela¸amento igual a 2. Isso significa que entre o setor k c e o setor k+1, existem dois outros setores. O melhor fator de entrela¸amento c para uma determinada unidade de disco depende da velocidade do processador, do barramento, do controlador e da velocidade de rota¸˜o do disco. ca Figura 2.3: Trilha com 16 setores e diferentes fatores de entrela¸amento c 2.1.2 Teclado O teclado ´ o principal perif´rico de entrada de dados utilizado na integra¸˜o e e ca direta de usu´rios com o computador. O princ´ de opera¸˜o do teclado ´ bas- a ıpio ca e tante simples: gerar um s´ımbolo para cada tecla pressionada. Mecanicamente, um teclado pode ser visto como uma matriz de i linhas e j colunas as quais entram em contato quando uma tecla ´ pressionada. A cada elemento i,j da e matriz correspondente um caractere. Quando uma tecla ´ pressionada, o teclado identifica a linha e a coluna e associadas a essa tecla e gera um c´digo que ´ denominado de scan mode (c´digo o e o de varredura). O pressionar da tecla gera ainda uma interrup¸˜o de hardware, ca e por conseq¨ˆncia, a execu¸˜o de um tratador de interrup¸˜es espec´ ue ca co ıfico para o teclado. Com base no scan mode, o tratador de interrup¸˜es consulta uma co tabela interna, substituindo o scan mode pelo c´digo ASCII correspondente ` o a tecla pressionada. O c´digo ASCII da tecla, em seguida, ´ armazenado em o e uma regi˜o especial da mem´ria (buffer do teclado) de onde ´ recuperado por a o e chamadas do sistema operacional. http://www.candidatoreal.com Um teclado brasileiro difere de um teclado inglˆs na posi¸˜o dos acentos e e ca da cedilha, por exemplo. A solu¸˜o empregada ´ associar a certos programas ca e aplicativos mapas de c´digos. Atrav´s desses mapas de c´digos, os programas o e o aplicativos s˜o capazes de consumir caracteres do buffer de teclado e convertˆ- a e los de forma apropriada. O procedimento de ler os dados do teclado e escrevˆ-los na tela denomina-se e ecoamento. Quando se tem v´rias janelas abertas, os caracteres digitados devem a ser direcionados ` janela correta. Dois m´todos s˜o normalmente empregados: a e a centralizado e dedicado. 36
  • 38. http://www.candidatoreal.com No m´todo centralizado o driver de teclado disponibiliza um conjunto de e mini-buffers os quais podem ser encadeados para formar um buffer maior. Nesse caso, para cada janela aberta o sistema operacional atribui uma estrutura de dados na qual um dos seus elementos ´ um ponteiro utilizado para referenciar e e lista encadeada de mini-buffers. No m´todo dedicado, a bufferiza¸˜o ´ feita e ca e diretamente em uma ´rea de mem´ria provida pela estrutura de dados associada a o ao terminal. Nesse caso, o n´mero de entradas para o terminal ´ limitado pelo u e tamanho do buffer dessa estrutura. 2.1.3 Mouse O mouse ´ um perif´rico de entrada que historicamente se juntou ao teclado e e como auxiliar no processo de entrada de dados, especialmente em programas com interface gr´fica. O mouse tem como fun¸˜o movimentar o cursor (apon- a ca tador) pela tela do computador. O formato mais comum do cursor ´ uma seta, e contudo, existem op¸˜es no sistema operacional e softwares que permitem per- co sonalizarmos o cursor do mouse. O mouse funciona como um apontador sobre a tela do monitor, e disponibi- liza, normalmente, quatro tipos de opera¸˜es: movimento, click (clique), duplo co click e drag and drop (arrastar e largar). Existem modelos com um, dois, trˆs ou mais bot˜es cuja funcionalidade e o depende do ambiente de trabalho e do programa que est´ a ser utilizado. Clara- a mente, o bot˜o esquerdo ´ o mais utilizado. a e O mouse ´ normalmente ligado ao computador atrav´s de portas: serial, PS2 e e ou, mais recentemente, USB (Universal Serial Bus). Tamb´m existem conex˜es e o sem fio, as mais antigas em infra-vermelho, as atuais em Bluetooth. Outros dis- positivos de entrada competem com o mouse: Touchpads (usados basicamente em notebooks) e Trackballs. O mouse original possu´ dois discos que rolavam nos eixos X e Y e tocavam ıa diretamente na superf´ıcie. O modelo mais conhecido de rato ´ provavelmente o e mouse baseado em uma esfera, que roda livremente, mas que na pr´tica gira dois a discos que ficam em seu interior. O movimento dos discos pode ser detectado tanto mecanicamente quanto por meio ´tico. o Os modelos mais modernos de mouse s˜o totalmente ´ticos, n˜o tendo pe¸as a o a c http://www.candidatoreal.com m´veis. De modo muito simplificado, eles tiram fotografias que s˜o comparadas o a e que permitem deduzir o movimento que foi feito. 2.1.4 Placa de rede Uma placa de rede ´ um dispositivo de hardware respons´vel pela comunica¸˜o e a ca entre os computadores em uma rede. A placa de rede ´ o hardware que permite e aos computadores conversarem entre si atrav´s da rede. Sua fun¸˜o ´ controlar e ca e todo o envio e recebimento de dados atrav´s da rede. Cada arquitetura de rede e exige um tipo espec´ıfico de placa de rede, sendo as arquiteturas mais comuns as 37
  • 39. http://www.candidatoreal.com redes Ethernet e Token Ring. Al´m da arquitetura usada, as placas de rede ` venda no mercado diferenciam- e a se tamb´m pela taxa de transmiss˜o, cabos de rede suportados e barramento e a utilizado (On-Board, PCI, ISA ou Externa via USB). As placas de rede para Notebooks podem ser on-board ou por uma placa PCMCIA. Quanto ` taxa de transmiss˜o, as placas mais comuns s˜o Ethernet de 10, a a a 100 ou 1000 Mbps e placas Token Ring de 4 Mbps e 16 Mbps. Usando placas Ethernet de 10 Mbps, por exemplo, devemos utilizar cabos de par tran¸ado de c categoria 3 ou 5, ou ent˜o cabos coaxiais. Usando uma placas de 100 Mbps o a requisito m´ınimo a n´ de cabeamento s˜o cabos de par tran¸ado n´ 5. No ıvel a c ıvel caso de redes Token Ring, os requisitos s˜o cabos de par tran¸ado categoria 2 a c (recomend´vel o uso de cabos categoria 3) para placas de rede de 4 Mbps, e a cabos de par tran¸ado blindado categoria 4 para placas de 16 Mbps. Devido `s c a exigˆncias de uma topologia em estrela das redes Token Ring, nenhuma placa e de rede Token Ring suporta o uso de cabos coaxiais. 2.1.5 Impressora As impressoras s˜o dispositivos de sa´ que tem por finalidade imprimir em a ıda papel ou filme pl´stico os resultados do processamento. Da mesma forma que a os monitores, a imagem impressa ´ resultado de muitos pontos impressos indi- e vidualmente que no conjunto formam o texto ou a imagem desejados. Tamb´m e de forma semelhante aos monitores, as impressoras evolu´ ıram a partir de dis- positivos que imprimiam apenas caracteres em uma unica cor para as modernas ´ impressoras capazes de reproduzir imagens sofisticadas, de alta resolu¸˜o gr´fica, ca a em milhares de cores. As impressoras s˜o classificadas em: a • Impressoras alfanum´ricas: Esses equipamentos recebem do computador e c´digos que representam caracteres alfanum´ricos e portanto tem capaci- o e dade de imprimir apenas esses caracteres. Geralmente ´ poss´ usar ape- e ıvel nas uma fonte gr´fica, caracter´ a ıstica do equipamento. Algumas impresso- ras permitem trocar o dispositivo de impress˜o, viabilizando a utiliza¸˜o a ca de um pequeno n´mero de fontes gr´ficas; u a • Impressoras gr´ficas: Esses equipamentos recebem do computador a in- a forma¸˜o sobre os pontos a serem impressos. Dessa forma, podem im- ca http://www.candidatoreal.com primir gr´ficos. Na impress˜o de textos, os caracteres s˜o impressos como a a a pontos, que em determinada configura¸˜o formam a imagem gr´fica do ca a caractere a ser impresso. Quando se utiliza uma impressora gr´fica para a imprimir texto, existe a possibilidade de utilizar um grande n´mero de u diferentes fontes gr´ficas, definidas por software. a 2.1.6 Monitor 38
  • 40. http://www.candidatoreal.com Cap´ ıtulo 3 Aritm´tica Computacional e 3.1 N´ meros Com Sinal e N´ meros Sem Sinal u u Existe uma grande variedade de op¸˜es para representar os n´meros inteiros co u com ou sem sinal. Apenas quatro se destacam: sinal e amplitude/magnitude (S + M ), complemento de 1, complemento de 2 e nota¸˜o em excesso (biased ). ca 3.1.1 Sinal e amplitude/magnitude Neste sistema de representa¸˜o o bit mais a esquerda representa o sinal: 0 (zero) ca para indicar o valor positivo e 1 (um) para indicar o valor negativo. Os bits restantes representam o m´dulo. A amplitude ou faixa de representa¸˜o para n o ca bits ´ [−(2n−1 − 1); 2n−1 − 1]. Por exemplo, para n=8 a faixa de representa¸˜o e ca ´ [−127; 127]. Neste sistema o zero possui duas representa¸˜es, por exemplo, e co n = 4 (0000 e 1000). 3.1.2 Complemento de 1 Neste sistema de representa¸˜o o bit mais a esquerda representa o sinal: 0 (zero) ca para indicar o valor positivo e 1 (um) para indicar o valor negativo. Para os n´meros positivos, os n-1 bits representam o m´dulo. O sim´trico de um n´mero u o e u positivo ´ obtido pelo complemento de todos os seus d´ e ıgitos (trocando 0 por 1 e vice-versa) incluindo o bit de sinal. A amplitude ou faixa de representa¸˜o ca para n bits ´ [−(2n−1 − 1); 2n−1 − 1]. Por exemplo, para n = 8 a faixa de e representa¸˜o ´ [−127; 127]. Neste sistema o zero possui duas representa¸˜es, ca e co http://www.candidatoreal.com por exemplo, n = 4 (0000 e 1000). 3.1.3 Complemento de 2 Neste sistema de representa¸˜o o bit mais a esquerda representa o sinal: 0 (zero) ca para indicar o valor positivo e 1 (um) para indicar o valor negativo. Para os n´meros positivos, os bits restantes representam o m´dulo. A amplitude ou u o faixa de representa¸˜o para n bits ´ [−(2n−1 ); 2n−1 − 1]. Por exemplo, para ca e n=8 a faixa de representa¸˜o ´ [−128; 127]. Este sistema possui representa¸˜o ca e ca assim´trica, o n´mero de representa¸˜es negativas ´ maior do que a positiva. e u co e Este sistema o zero possui uma unica representa¸˜o, por exemplo, n=4 (0000). ´ ca 39
  • 41. http://www.candidatoreal.com O complemento de 2 de um n´mero ´ obtido em dois passos: primeiro obt´m- u e e se o complemento de todos os bits (inclusive o de sinal); e ao resultado obtido soma-se 1 (um) em bin´rio, desprezando o ultimo transporte, se houver. a ´ Uma maneira pr´tica de se obter o complemento de 2 de um n´mero ´ copiar a u e da direita para a esquerda todos os bits at´ encontrar o primeiro bit 1 (copiar e inclusive este bit), e inverter todos os demais bits. Um exemplo para n=4: 0110 (6 na base 10) usando a regra: 1001 (n´mero bin´rio invertido) u a 0110 < − > 1001 + 0001 (soma bin´ria com 1) a 1010 (complemento de 2) Os computadores manipulam tanto n´mero inteiros positivos quanto negativos, u que s˜o representados em complemento de 2. a 3.1.4 Nota¸˜o em excesso ca Neste sistema de representa¸˜o o bit mais a esquerda representa o sinal: 1 ca (um) para indicar o valor positivo e 0 (zero) para indicar o valor negativo. A amplitude ou faixa de representa¸˜o para n bits ´ [−(2n−1 ); 2n−1 − 1]. Por ca e exemplo, para n=8 a faixa de representa¸˜o ´ [−128; 127]. Neste sistema cada ca e n´mero inteiro corresponde ao valor desejado acrescido de um excesso de 2n−1 , u onde n pode ser 4, 5, 7, 8, 16, etc. Este sistema tem uma vantagem em rela¸˜o aos outros sistemas apresenta- ca dos anteriormente: o valor em bin´rio com todos os bits a 0 (zero) representa o a menor valor inteiro, que este tenha sinal ou n˜o, e o mesmo se aplica ao maior a valor em bin´rio, i.e., com todos os bits 1: representa o maior inteiro, com ou a sem sinal. Bin´rio (4 bits) a S+M C1 C2 Excesso de 8 (n=4) 0000 +0 +0 0 -8 (0 - 8) 0001 1 1 1 -7 (1 - 8) 0010 2 2 2 -6 (2 - 8) 0011 3 3 3 -5 (3 - 8) 0100 4 4 4 -4 (4 - 8) 0101 5 5 5 -3 (5 - 8) 0110 6 6 6 -2 (6 - 8) 0111 7 7 7 -1 (7 - 8) 1000 -0 -7 -8 0 (8 - 8) 1001 -1 -6 -7 1 (9 - 8) http://www.candidatoreal.com 1010 -2 -5 -6 2 (10 - 8) 1011 -3 -4 -5 3 (11 - 8) 1100 -4 -3 -4 4 (12 - 8) 1101 -5 -2 -3 5 (13 - 8) 1110 -6 -1 -2 6 (14 - 8) 1111 -7 -0 -1 7 (15 - 8) 40
  • 42. http://www.candidatoreal.com 3.2 Adi¸˜o e Subtra¸˜o ca ca Numa soma os bits s˜o somados um a um da direita para a esquerda, com os a carries sendo passados para o pr´ximo bit ` esquerda. A opera¸˜o de sub- o a ca tra¸˜o usa a adi¸˜o. O subtraendo ´ simplesmente negado antes de ser somado ca ca e ao minuendo. Lembre-se que a m´quina trata com n´meros representados em a u complemento a 2. O exemplo a seguir mostra as opera¸˜es de soma (6 + 7) e co subtra¸˜o (7 − 6) (complemento 2) bit a bit entre dois n´meros representados ca u com 4 d´ ıgitos bin´rios. a 7 = 0111 6 = 0110 13 = 1101 (soma) 1 = 0001 (subtra¸˜o) ca Tanto a soma como a subtra¸˜o podem gerar overflow ou underflow, se ca o resultado obtido n˜o puder ser representado pela quantidade de bits que a formam uma palavra. Se somarmos ou subtrairmos dois n´meros com sinais u contr´rios, nunca ocorrer´ overflow ou underflow. Isto porque operandos com a a sinais contr´rios nunca podem ser maior do que qualquer dos operandos. a O overflow ocorre quando somamos dois operandos positivos e obtemos um resultado negativo, ou vice-versa. Isto significa que utilizamos o bit de sinal, gerando um carry, para armazenar um valor pertencente ao resultado da opera¸˜o. Racioc´ ca ınio semelhante ´ realizado para detectar a ocorrˆncia do e e underflow numa subtra¸˜o. Neste caso, o bit de sinal tamb´m ´ usado para ca e e armazenar um valor pertencente ao resultado da opera¸˜o. ca Os projetistas de um sistema devem decidir onde tratar a ocorrˆncia de e overflow ou de underflow em opera¸˜es aritm´ticas. Elas podem ser tratadas co e tanto por hardware quanto por software. Pode existir a detec¸˜o por hardware ca que gera uma exce¸˜o, e que depois ´ tratada por software. ca e 3.3 Opera¸˜es L´gicas co o Os computadores manipulam palavras, mas ´ muito util, tamb´m, manipular e ´ e campos de bits dentro de uma palavra ou mesmo bits individuais. O exame de caracteres individuais (8 bits) dentro de uma palavra ´ um bom exemplo e dessa necessidade. Assim, as arquiteturas de conjuntos de instru¸˜es incluem co instru¸˜es para manipula¸˜o de bits. co ca http://www.candidatoreal.com Um dos tipos de instru¸˜o utilizado ´ a de deslocamento de bits. As in- ca e stru¸˜es podem deslocar bits tanto ` direita quanto ` esquerda. Todos os bits co a a s˜o movidos para o lado determinado e os bits que ficam vazios s˜o preenchidos a a com 0s. Outras instru¸˜es l´gicas muito uteis s˜o implementadas na unidade co o ´ a l´gica e aritm´tica de um processador s˜o as opera¸˜es NOT, AND, OR e XOR. o e a co O exemplo abaixo mostra as opera¸˜es l´gicas, bit a bit, de deslocamento ` di- co o a reita, ` esquerda, NOT, AND, OR e XOR. a 41
  • 43. http://www.candidatoreal.com 3.4 Constru¸˜o de uma Unidade L´gica Aritm´tica ca o e A ALU (Arithmetic and Logic Control) ´ a parte central do hardware de uma e CPU. Ela ´ respons´vel por realizar opera¸˜es aritm´ticas e l´gicas b´sicas, e e a co e o a pode ser implementada com quatro componentes: AND, OR, INVERTER e MULTIPLEXOR (3.4). Figura 3.1: Multiplexador Para implementar um somador de um bit, precisa-se de duas entradas para os operandos, uma sa´ para o resultado, uma entrada relativa ao carry in e ıda um sa´ relativa ao carry out. A tabela abaixo mostra a tabela verdade para o ıda somador de um bit. Entrada Sa´ ıda a b carry in soma carry out 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 As sa´ ıdas soma e carry out s˜o: a soma = (a.b.carryin + a.b.carryin + a.b.carryin + a.b.carryin) carryout = (b.carryin + a.carryin + a.b) http://www.candidatoreal.com Para completar o projeto de uma ALU de n bits, podemos conectar n so- madores de um bit. Os carry outs gerados pelos bits menos significativos s˜oa propagados por toda extens˜o do somador. a A opera¸˜o de subtra¸˜o pode ser realizada somando-se o minuendo com ca ca a nega¸˜o do subtraendo. Este efeito ´ realizado acrescentando uma entrada ca e complementada de b ao somador e ativando o carry in do bit menos significativo para um. O somador ent˜o calcula a + b + 1. a Outras fun¸˜es de interesse, com o XOR podem ser inclu´ co ıdas na ALU. Al- gumas opera¸˜es n˜o s˜o, em geral, implementadas na ALU (3.4). Exemplos: co a a shift, multiplica¸˜o, divis˜o e opera¸˜es de ponto flutuante. ca a co 42
  • 44. http://www.candidatoreal.com Figura 3.2: ALU 3.5 Ponto Flutuante Para somar dois n´meros na base 10 em nota¸˜o cient´ u ca ıfica temos que: • Alinhar os pontos; • Somar os n´meros; u • Normalizar o resultado; • Arredondar o resultado para o n´mero m´ximo de casas permitidas. u a Um hardware para somar n´meros de ponto flutuante tem que fazer as mes- u mas opera¸˜es com n´meros bin´rios. Vejamos um exemplo: co u a Exemplo: Somar os n´meros 0.5 e -0.4375 em bin´rio e apresente com 4 bits u a de precis˜o; trunque o resultado na fase de arredondamento. a 0.5 = 0.1 (bin´rio) = 0.1 × 20 = 1.000 × 2−1 a −0.4375 = −0.0111 (bin´rio) = −0.0111 × 20 = −1.110 × 2−2 a 1. Igualar os expoentes (modificar o n´mero menor) u −1.110 × 2−2 = −0.111 × 2−1 2. Somar as partes significantes (mantissas) 1.000 × 2−1 + (−0.111 × 2−1 ) = 1.000 × 2−1 + (1.001 × 2−1 ) = 0.001 × 2−1 3. Normalizar o resultado 0.001 × 2−1 = 1.0 × 2−4 4. Arredondamento http://www.candidatoreal.com O n´mero final est´ OK. u a 43
  • 45. http://www.candidatoreal.com Cap´ ıtulo 4 Sistemas Operacionais 4.1 Introdu¸˜o ca O sistema operacional ´ uma camada de software colocada entre o hardware e e os programas que executam tarefas para os usu´rios. O sistema operacional a ´ respons´vel pelo o acesso aos perif´ricos, ou seja, sempre que um programa e a e necessita de algum tipo de opera¸˜o de entrada e sa´ ca ıda, ele solicita ao sistema operacional. Figura 4.1: Sistema Operacional http://www.candidatoreal.com O objetivo do sistema operacional ´ tornar a utiliza¸˜o do computador mais e ca eficiente e mais conveniente. Uma utiliza¸˜o mais eficiente do computador ´ ca e obtida por meio da distribui¸ao de seus recursos (mem´ria principal, tempo de c˜ o processador, impressora, espa¸o em disco, etc.) entre os programas. Uma uti- c liza¸˜o mais conveniente ´ obtida escondendo-se do programador detalhes do ca e hardware, em especial os perif´ricos. Para atingir esses objetivos, o sistema op- e eracional oferece uma s´rie de servi¸os como: gerˆncia de mem´ria, gerˆncia do e c e o e processador, mem´ria virtual, sistema de arquivos, sistema de entrada e sa´ o ıda. A arquitetura de um sistema operacional corresponde ` imagem que o usu´rio a a tem do sistema, a forma como ele percebe o sistema. Esta imagem ´ definida e 44
  • 46. http://www.candidatoreal.com pela interface por meio da qual o usu´rio acessa os servi¸os do sistema opera- a c cional. Essa interface ´ formada pelas chamadas de sistema e pelos programas e de sistema. Os programas solicitam servi¸os ao sistema operacional por meio das chamadas c de sistema que transferem a execu¸˜o dos programas para o sistema operacional. ca A parte do sistema operacional respons´vel para implementar as chamadas de a sistema ´ normalmente chamadas de n´cleo ou kernel. Os principais compo- e u nentes do kernel de qualquer sistema operacional s˜o a gerˆncia de processador, a e gerˆncia de mem´ria, sistema de arquivos e gerˆncia de entrada e sa´ e o e ıda. Os programas de sistemas, algumas vezes chamados de utilit´rios, s˜o pro- a a gramas normais executados fora do kernel do sistema operacional. Eles imple- mentam tarefas b´sicas para utiliza¸˜o do sistema e muitas vezes s˜o confun- a ca a didos com pr´prio sistema operacional. Exemplos de programas de sistemas o s˜o os utilit´rios para manipula¸˜o de arquivos, listar arquivos, imprimir ar- a a ca quivos, trocar nome de arquivos, data, hora e etc. O programa de sistema mais importante ´ o interpretador de comando. Sua tarefa ´ receber comandos e e e execut´-los. Esses comandos podem ser enviados de forma textual ou por meio a de uma interface gr´fica de usu´rio (GUI). a a O sistema operacional n˜o resolve problemas do usu´rio final. Somente a a quando ocorre algum evento especial que o sistema operacional ´ ativado. Dois e tipos de eventos ativam o sistema operacional: uma chamada de sistema ou uma interrup¸˜o de perif´rico. ca e Os sistemas operacionais podem ser classificados segundo in´meros crit´rios, u e dentre os quais os mais comuns s˜o: a • N´mero de usu´rios u a – Monousu´rios: projetados para suportar um unico usu´rio. Exemp- a ´ a los de desse tipo de sistema s˜o o MS DOS, Windows 3x, Windows a 9x, etc; – Multiusu´rios: projetados para suportar v´rias sess˜es de usu´rios. a a o a Exemplos desse sistema s˜o Windows NT, UNIX, etc; a • N´mero de tarefas u – Monotarefa: capazes de executar apenas uma tarefa de cada vez. Por http://www.candidatoreal.com exemplo, o MS DOS, etc; – Multitarefa: capazes de executar v´rias tarefas simultaneamente, a como uma compila¸˜o e um processamento de texto. Por exemplo, ca Windows, Unix, etc; • Tipo de servi¸o oferecido ao usu´rio c a – Sistemas de processamento em lote (batch); – Sistemas de tempo compartilhado (time sharing); – Sistemas de tempo real (real time); 45
  • 47. http://www.candidatoreal.com – Sistemas Mainframes; – Sistemas desktop; – Sistemas distribu´ ıdos; – Sistemas handheld; – Sistemas paralelos. 4.2 Conceitos B´sicos a 4.2.1 Multiprograma¸˜o ca A multiprograma¸˜o torna mais eficiente o aproveitamento dos recursos do com- ca putador. Isso ´ conseguido por meio da execu¸˜o simultˆnea de v´rios progra- e ca a a mas. Em um sistema multiprogramado diversos programas s˜o mantidos na a mem´ria ao mesmo tempo. o A id´ia da multiprograma¸˜o ´ aproveitar o tempo ocioso do processador e ca e durante as opera¸˜es de entrada e sa´ co ıda, ou seja, enquanto o perif´rico executa e o comando enviado, o sistema operacional inicia a execu¸˜o de outro programa. ca Isso faz com que exista uma maximiza¸˜o do uso do processador e da mem´ria. ca o Em um ambiente monoprogramado, o processador ficaria parado durante a re- aliza¸˜o do acesso a um perif´rico. ca e 4.2.2 Processo Um processo pode ser definido como um programa em execu¸˜o. O processo ´ ca e considerado um elemento ativo, pois altera o seu estado ` medida que executa a ´ um programa. E o processo que realiza as chamadas de sistema. Em muitos sistemas operacionais os processos s˜o criados por outros pro- a cessos, por meio de chamada de sistema. Nesse caso, ´ poss´ e ıvel definir uma hierarquia de processos. O processo que faz a chamada de sistema ´ chamado e de processo pai e o processo criado ´ chamado de processo filho. Um mesmo e processo pai pode estar associado a v´rios processos filhos. Os processos filhos, a por sua vez, podem criar outros processos. Durante a sua execu¸˜o, um processo passa por diversos estados, refletindo ca http://www.candidatoreal.com o seu comportamento dinˆmico, isto ´, sua evolu¸˜o no tempo. Os poss´ a e ca ıveis estados para um processo s˜o: cria¸˜o (new), apto (ready), executando (run- a ca ning), bloqueado (blocked) e terminado (exit). A figura 4.2 mostra esses cincos estados e as transi¸˜es do processo entre eles. co No estado New um novo processo ´ criado. Ap´s ser criado, o processo entra e o em um ciclo de processador. Ele precisa do processador para executar, mas o processador poder´ estar ocupado com outro processo, ele dever´ esperar. Di- a a versos processos podem estar no nesse mesmo estado. Nesse caso, ´ necess´rio e a manter uma fila com os processos aptos a ganhar o processador. Essa fila ´ e chamada de fila de aptos (ready queue). No estado New, o sistema operacional 46
  • 48. http://www.candidatoreal.com Figura 4.2: Ciclo de vida dos processos aloca recursos para o processo, mas n˜o existe uma garantia de que o processo a ser´ executado. a Os processos na fila do processador est˜o no estado Ready. Um unico pro- a ´ cesso ocupa o processador a cada instante. O processo que ocupa o processador est´ no estado Running. Neste estado processo pode realizar as chamadas de a sistema. Enquanto o sistema espera pelo t´rmino da chamada de sistema, o e processo est´ no estado Blocked. a O processo fica no estado Blocked at´ ser atendido. Com isso, o processador e fica livre. O sistema operacional seleciona outro do processo da fila de aptos para receber o processador. O estado Exit indica que o processo terminou sua execu¸˜o ou foi abortado. ca A mudan¸a de estado de qualquer processo ´ iniciada por um evento. Esse c e evento aciona o sistema operacional, que ent˜o altera o estado de um ou mais a processos. O evento pode ser uma chamada de sistema ou uma interrup¸˜o de ca hardware. Alguns outros caminhos s˜o poss´ a ıveis no grafo de estado. Por exemplo, pode ocorrer de nenhum processo na mem´ria principal est´ no estado Ready, pois o a todos est˜o aguardando uma opera¸˜o de entrada e sa´ a ca ıda. Nesse caso, o sistema operacional realiza o swap (mover todo ou parte de um processo da mem´ria o para o disco) de um dos processos bloqueados para disco, e coloca numa fila de processo suspensos. O estado para essa situa¸˜o ´ o Suspend. Quando a ca e opera¸˜o de entrada e sa´ de um dos processos ´ finalizada, o sistema opera- ca ıda e cional tr´s do disco o processo da fila de suspenso colocando no estado de Ready. a http://www.candidatoreal.com 4.2.3 Interrup¸˜es co O mecanismo de interrup¸˜o constitui a base de opera¸˜o de um sistema mul- ca ca tiprograma¸˜o. O mecanismo de interrup¸˜o permite que o controlador de ca ca perif´rico chame a aten¸˜o do processador. A fun¸˜o b´sica do controlador e ca ca a de perif´rico ´ conectar o dispositivo em quest˜o ao processador. e e a Uma interrup¸˜o sempre sinaliza a ocorrˆncia de algum evento. Quando ca e ela acontece, desvia a execu¸ao da posi¸˜o atual de programa para uma rotina c˜ ca 47
  • 49. http://www.candidatoreal.com espec´ ıfica. Essa rotina, respons´vel por atender a interrup¸˜o ´ chamada de a ca e tratador de interrup¸˜o. O tratador realiza as a¸˜es necess´rias em fun¸˜o da ca co a ca ocorrˆncia da interrup¸˜o. e ca Em computador podem existir diversos controladores capazes de gerar inter- rup¸˜es. A forma mais simples de identificar a origem da interrup¸˜o ´ associar co ca e a cada controlador um tipo diferente de interrup¸˜o. Por exemplo, cada tipo de ca interrup¸˜o ´ identificado por um n´mero. ca e u Existem momentos que um programa n˜o pode ser interrompido enquanto a realiza uma tarefa cr´ıtica. Para isso, o processador possui instru¸˜es para habil- co itar e desabilitar as interrup¸˜es. Enquanto as interrup¸˜es estiverem desabil- co co itadas, elas ser˜o ignoradas pelo processador. Elas n˜o s˜o perdidas, apenas a a a ficam pendentes. Quando o programa tornar a habilitar as interrup¸˜es, elas co ser˜o imediatamente atendidas pelo processador. a Interrup¸˜es de software, tamb´m chamadas de traps, s˜o causadas pela ex- co e a ecu¸˜o de uma instru¸˜o espec´ ca ca ıfica para isso. O efeito ´ semelhante a uma e chamada de sub-rotina, pois o pr´prio programa interrompido ´ quem gera a o e interrup¸˜o. O maior uso para interrup¸˜es de software ´ a implementa¸˜o ca co e ca de chamadas de sistemas, por meio das quais os programas solicitam servi¸os c ao sistema operacional. N˜o ´ poss´ desabilitar as interrup¸˜es de software, a e ıvel co mesmo porque n˜o ´ necess´rio. a e a Existe uma terceira classe de interrup¸˜es geradas pelo pr´prio processador. co o S˜o as interrup¸˜es por erro, muitas vezes chamadas de interrup¸˜es de exce¸˜o. a co co ca Elas acontecem quando o processador detecta algum tipo de erro na execu¸˜o do ca programa. Por exemplo, uma divis˜o por zero, um acesso a posi¸˜o de mem´ria a ca o inv´lido, etc. a 4.2.4 Threads Uma thread nada mais ´ que um fluxo de execu¸˜o. Na maior parte das vezes, e ca cada processo ´ formado por um conjunto de recursos mais uma unica thread. e ´ A id´ia do multithreading ´ associar v´rios fluxos de execu¸˜o (v´rias threads) e e a ca a a um unico processo. Em determinadas aplica¸˜es, ´ conveniente disparar v´rias ´ co e a ´ threads dentro de um mesmo processo (programa¸˜o concorrente). E importante ca http://www.candidatoreal.com notar que as threads existem no interior de um processo, compartilhando entre elas os recursos de processo, como espa¸o de endere¸amento, c´digo e dados. c c o Devido a essa caracter´ ıstica, a gerˆncia de threads (cria¸˜o, destrui¸˜o, troca e ca ca de contexto, sincroniza¸˜o) ´ mais leve quando comparada com processos. O ca e chaveamento entre duas threads de um mesmo processo ´ muito mais r´pido e a que o chaveamento entre dois processos. Em fun¸˜o disso, threads s˜o muitas ca a vezes chamadas de processos leves. 48
  • 50. http://www.candidatoreal.com 4.3 Escalonamento de Processos Os mecanismos de gerenciamento de processador visam permitir que v´rios pro- a cessos compartilham o processador de forma aumentar a Utiliza¸˜o, aumentar ca o Throughput, diminuir o Tempo de Resposta e o Tempo Total de Execu¸˜o. ca Estas s˜o as principais m´tricas de desempenho de um sistema operacional no a e que diz respeito ` gerencia de processador. a Para alcan¸ar bons resultados, os sistemas operacionais empregam v´rias c a pol´ ıticas de escalonamento para determinar qual processo tomar´ posse do pro- a cessador em um determinado instante. Essas pol´ ıticas s˜o os chamados Al- a goritmos de Escalonamento. Exemplo de algoritmos de escalonamento s˜o: a First In First Out (FIFO), Prioridades, Round-Robin, Shortest Job First (SJF), M´ltiplas Filas com Realimenta¸˜o, entre outras. u ca A parte do sistema operacional respons´vel por escolher qual o processo a tomar´ posse do processador em um determinado instante ´ o Scheduller, en- a e quanto o respons´vel por entregar o processador de fato a um processo ´ o a e Dispatcher. ´ E o Dispatcher quem realiza o chaveamento de contexto, que consiste em salvar o estado dos registradores do processo que deixar´ o processador e car- a regar os registradores para o novo processo. O algoritmo FIFO ´ o mais simples e de implementa¸˜o mais f´cil. No en- e ca a tanto, n˜o ´ dos mais eficiente no quesito tempo de resposta. Caso um processo a e muito grande tome posse do processador, outros processos podem ter que es- perar um tempo muito longo at´ que possam executar. e O algoritmo Shortest Job First d´ posse do processador ao processo que a gastar´ menos tempo executando. O tempo de resposta m´dio ´ otimizado em a e e rela¸˜o ao FIFO, no entanto, essa pol´ ca ıtica n˜o pode ser implementada de forma a perfeita uma vez que n˜o ´ poss´ determinar quanto tempo um processo gas- a e ıvel tar ´ no processador na pr´xima vez em que tomar posse. Implementa¸˜es do a o co SJF estimam esse tempo utilizando informa¸˜es passadas do processo. co Os algor´ ıtimos Round-Robin consistem em dividir o tempo de processamento em fatias de tempo chamadas time slots. Cada processo na fila de prontos tem direito de executar durante um per´ıodo de tempo fixo antes de perder a posse http://www.candidatoreal.com do processador. Um problema neste algoritmo ´ a necessidade de determinar a e fatia de tempo ideal, de forma que a impress˜o de paralelismo na execu¸˜o n˜o a ca a seja perdida. Uma fatia de tempo muito pequena,por exemplo, pode fazer com que o tempo gasto com chaveamento de contexto diminua a performance. Filas de Prioridades s˜o a base das pol´ a ıticas de escalonamento nos sistemas operacionais modernos. A cada processo ´ associada uma prioridade. O pro- e cesso de maior prioridade ´ quem toma a posse do processador no momento e oportuno. Uma variante dos algoritmos de prioridades pura, s˜o os os algo- a ritmos de Prioridade com Preemp¸˜o. Neste esquema, um processo da fila de ca prontos que tenha prioridade maior que o processo em execu¸˜o pode tomar ca 49
  • 51. http://www.candidatoreal.com posse do processador antes do processo em execu¸˜o terminar de executar. ca Na verdade, nos sistema operacionais, n˜o s´ um algoritmo de escalonamento a o ´ utilizado na gerˆncia de processador. Usualmente, esse algoritmos s˜o com- e e a binados de forma melhorar o desempenho do sistema. Algoritmos de m´ltiplas u filas com realimenta¸˜o s˜o exemplos de combina¸˜o de v´rias pol´ ca a ca a ıticas. Esses algoritmos permitem que seja dado um tratamento adequado ` um determinado a processo de acordo com o seu comportamento. Em gerˆncia de processador existem tamb´m os conceitos de execu¸˜o em e e ca Background e Foreground. Processos em background s˜o geralmente s˜o aque- a a les que est˜o rodando com uma prioridade muito baixa, necessitam de muito a pouco input e geram tamb´m um m´ e ınimo de output. Processos em foreground funcionam da forma oposta. O escalonador respons´vel por determinar qual processo receber´ o direito de a a executar ´ chamado Escalonador de Curto Prazo. Existem tamb´m os escalon- e e adores de Longo e M´dio Prazo. O escalonador de M´dio Prazo ´ parte por e e e exemplo do processo swapper e est´ intimamente ligado a gerencia de mem´ria, a o enquanto o escalonador de longo prazo determina quando um processo novo ´ ´ de fato admitido no sistema para disputa dos recursos. E o escalonador de e longo prazo quem determina o grau de multiprograma¸˜o do sistema e tamb´m ca e ´ conhecido como Job Scheduller. e 4.4 Entrada e Sa´ ıda Uma das atribui¸˜es dos sistemas operacionais ´ realizar a gerˆncia de perif´ricos, co e e e tamb´m conhecida como gerˆncia de entrada e sa´ e e ıda. Os perif´ricos s˜o dispos- e a itivos que permitem que o computador se comunique com o mundo externo. A primeira preocupa¸˜o dos sistemas operacionais no que diz respeito a gerˆncia ca e de E/S ´ a forma de comunica¸˜o que ser´ utilizada, que pode ser serial ou e ca a paralela. As trˆs formas b´sicas de se implementar o controle de perif´ricos s˜o: e a e a • E/S programada: O controle dos estado da opera¸˜o de E/S ´ feito atrav´s ca e e de loops de status. A responsabilidade ´ do programador; A t´cnica uti- e e lizar o estado da opera¸ao de E/S utilizada E/S programada ´ conhecida c˜ e como polling; http://www.candidatoreal.com • Interrup¸˜es: Os perif´ricos chamam a aten¸˜o do processador atrav´s co e ca e de um sinal de hardware. Cabe ao processador identificar, priorizar e mascarar as interrup¸˜es geradas pelos perif´ricos; co e • Acesso Direto ` Mem´ria (DMA): Em situa¸˜es em que o volume de dados a o co ´ muito grande, utiliza-se esta t´cnica para permitir que perif´ricos tenham e e e acesso direto a mem´ria sem a necessidade da intermedia¸˜o por parte do o ca processador. O localiza¸˜o dos perif´ricos do ponto de vista da arquitetura do sistema ca e pode ser feita de basicamente de duas maneiras: Mapeamento em Mem´ria eo 50
  • 52. http://www.candidatoreal.com Espa¸o de E/S. Os drivers de dispositivos consistem em uma camada superior c ao hardware e tˆm por objetivo esconder as diferen¸as entre dispositivos de e c mesmo tipo. Existe tamb´m a necessidade de se empregar t´cnicas de escalonamento de e e E/S de forma otimizar o atendimento das requisi¸˜es feitas aos perif´ricos. Nos co e discos magn´ticos, por exemplo, s˜o utilizados algoritmos de escalonamento e a como: • FCFS: First Come Fisrt Served. Atende as requisi¸˜es na ordem de co chegada; • SSTF: Shortest Seek Time First. Atende primeiro as requisi¸˜es que ne- co cessitam de menor tempo de seek (seek time ´ o tempo necess´rio para e a mover o cabe¸ote para a trilha adequada); c • SLTF: Shortest Latency Time First. Atende primeiro as requisi¸˜es de co menor latˆncia (latˆncia ´ o tempo necess´rio para localizar um setor e e e a dentro de uma trilha do disco. Diretamente relacionado com a velocidade de rota¸˜o do disco.); ca • Scan: Varre o disco na dire¸˜o radial atendendo requisi¸˜es. S´ atende ca co o requisi¸˜es em um sentido; co • CScan: Similar ao Scan, por´m atende requisi¸˜es na subida e na descida. e co Al´m de pol´ e ıticas de escalonamento de E/S, tamb´m s˜o utilizadas t´cnicas e a e de Buffer e Cache para aumentar o desempenho. A t´cnica empregada para e realizar a aloca¸˜o e libera¸˜o de recursos ´ conhecida como Spooling. A gerˆncia ca ca e e de perif´ricos tamb´m se responsabiliza pelo controle de acesso aos perif´ricos e e e e tratamentos de erros. 4.4.1 Camadas do subsistema de Entrada e Sa´ ıda O objetivo do subsistema de entrada e sa´ ´ padronizar ao m´ximo as rotinas ıda e a de acesso aos perif´ricos de forma a reduzir o n´mero de rotinas de entrada e e u sa´ ıda. Para isso, o subsistema de entrada e sa´ ´ organizado em uma estrutura ıda e de quatro camadas: hardware dos dispositivos de entrada e sa´ ıda, os drivers, a E/S independente de dispositivo e E/S n´ ıvel de usu´rio. A figura 4.3 mostra a essas camadas. http://www.candidatoreal.com A camada inferior de software (drivers) ´ composta por um conjunto de e m´dulos de software implementados para fornecer os mecanismos de acesso a o um dispositivo de entrada e sa´ espec´ ıda ıfico. A camada de software de E/S independente do dispositivo implementa procedimentos e fun¸˜es gerais a todos co os dispositivos de entrada e sa´ como: escalonamento de E/S, denomina¸˜o, ıda ca bufferiza¸˜o, cache de dados, aloca¸˜o e libera¸˜o, direitos de acesso e tratamen- ca ca ca tos de erro. A E/S n´ de usu´rio ´ uma interface de programa¸˜o associada ıvel a e ca a `s bibliotecas de entrada e sa´ ´ ıda, ou aplicativos de desenvolvimento. E impor- tante notar que as bibliotecas de entrada e sa´ n˜o fazem parte do sistema ıda a operacional. 51
  • 53. http://www.candidatoreal.com Figura 4.3: Camadas do Subsistema de E/S 4.5 Gerˆncia de Mem´ria e o Umas das fun¸˜es fundamentais de um sistema operacional moderno ´ realizar a co e gerencia da mem´ria principal do computador de forma permitir que os diversos o processos executem de forma eficiente e protegida. Quando o assunto ´ gerˆncia e e de mem´ria, dois conceitos b´sicos s˜o os de mem´ria l´gica e mem´ria f´ o a a o o o ısica. Os programas fazem referˆncia ` endere¸os l´gicos que no momento da execu¸˜o s˜o e a c o ca a traduzidos em um endere¸o real chamado endere¸o f´ c c ısico. As primeiras t´cnicas e de tradu¸˜o de endere¸os eram baseadas em registradores de base e limites. ca c Nos sistemas multiprogramados, ´ necess´rio tamb´m implementar t´cnicas e a e e para que os diversos programas possam utilizar a mem´ria ao mesmo tempo. Ini- o cialmente, a mem´ria era dividida em parti¸˜es de tamanho fixo. Dois problemas o co decorrentes desta t´cnica s˜o conhecidos como Fragmenta¸˜o Interna e a Frag- e a ca menta¸˜o Externa. A fragmenta¸˜o interna ocorre quando um programa aloca ca ca uma parti¸˜o de mem´ria que excede a quantidade necess´ria. O espa¸o exce- ca o a c dente naquela parti¸˜o ´ desperdi¸ado. A fragmenta¸˜o externa ocorre quando ca e c ca apesar da quantidade total de mem´ria ser suficiente, n˜o existe uma parti¸˜o o a ca cont´ ıgua capaz de atender as necessidades de um programa. Para solucionar o problema da fragmenta¸˜o interna, foi criado o mecanismo ca de particionamento dinˆmico, no qual um programa aloca somente a quantidade a exata de mem´ria. No entanto, esse m´todo aumenta a fragmenta¸˜o externa o e ca uma vez que permite o aparecimento de lacunas pequenas demais para serem utilizadas por algum programa. Neste m´todo de particionamento s˜o utilizadas e a v´rias t´cnicas de preenchimento de lacunas. Exemplos s˜o: First-Fit, Best-Fit, a e a http://www.candidatoreal.com Worst-Fit e Circular-Fit. Para evitar o aparecimento de lacunas muito peque- nas, foi criada uma t´cnica chamada Par´grafo, que consiste em determinar a e a menor unidade de aloca¸˜o de mem´ria. ca o Todas as t´cnicas apresentadas at´ aqui levam em considera¸˜o o fato de e e ca que os programas devem ocupar ´reas cont´ a ıguas de mem´ria. Os sistema op- o eracionais modernos supriram esta necessidade atrav´s da t´cnica de Pagina¸˜o. e e ca Aqui aparecem os conceitos de p´ginas l´gicas e p´ginas f´ a o a ısicas, semelhantes aos de endere¸os l´gicos e f´ c o ısicos. Neste contexto, o endere¸o l´gico ´ formado c o e 52
  • 54. http://www.candidatoreal.com por duas partes que s˜o o n´mero da p´gina mais o deslocamento dentro dela. a u a Existe tamb´m a necessidade de traduzir uma p´gina l´gica em uma p´gina e a o a f´ ısica. A Tabela de P´ginas ´ a respons´vel por essa tarefa. Existem v´rias a e a a formas de implement´-la. a A primeira preocupa¸˜o ´ onde armazenar a tabela de p´ginas. Em sistemas ca e a com tabelas muito pequenas, as tabelas de p´ginas podem ser armazenadas a em registradores, no entanto, em geral a tabela de p´ginas ´ armazenada na a e pr´pria mem´ria principal utilizando registradores (PTBR e PTBL) para in- o o dicar a posi¸˜o da tabela na mem´ria. Um problema inerente a esta t´cnica ca o e ´ a necessidade de se acessar a mem´ria duas vezes quando se deseja ler um e o dado. Um acesso a tabela de p´ginas e outra ao dado em si. Para minimizar a este problema ´ utilizado um mecanismo chamado Translation LookAside Buffer e (TLB). O TLB consiste em uma mem´ria de r´pido acesso que armazena partes o a da tabela de p´ginas. Quando a tradu¸˜o de uma pagina l´gica em uma p´gina a ca o a f´ ısica ´ poss´ e ıvel utilizando apenas o TLB, ´ dito que ocorreu um HIT, caso e contr´rio dizemos que ocorreu um MISS. a A t´cnica de Segmenta¸˜o ´ utilizada para implementar a prote¸˜o de en- e ca e ca dere¸os de mem´ria utilizados por um processo. Usualmente isso ´ feito atrav´s c o e e de registradores de limite. Quando um processo tenta acessar uma regi˜o de a mem´ria protegida ocorre uma falha de segmenta¸˜o (Segmentation Fault). Esta o ca t´cnica n˜o deve ser confundida com a t´cnica de segmenta¸˜o de mem´ria pre- e a e ca o sente em algumas arquiteturas, onde a mem´ria ´ dividida em partes como o e Segmento de Dados, Segmento de C´digo, Pilha etc. o O Swapping ´ uma outra t´cnica utilizada para gerenciamento de mem´ria. e e o Nesta t´cnica, um processo ´ suspenso e todas suas p´ginas de mem´ria s˜o e e a o a descarregadas para o disco (swap-out), liberando a mem´ria para que algum o outro processo possa executar. Quando processo suspenso pode voltar para mem´ria, as p´ginas do processo s˜o novamente carregadas para a mem´ria o a a o (swap-in). O swapper ´ respons´vel pelo swap-in e swap-out. e a Na t´cnica de pagina¸˜o pura, o processo n˜o precisa mais ocupar um tre- e ca a cho cont´ıguo de mem´ria, no entanto, ainda ´ necess´rio que todas as p´gina o e a a de um processo estejam carregadas na mem´ria no momento da execu¸˜o. Uma o ca evolu¸˜o do esquema de pagina¸˜o ´ a t´cnica de Mem´ria Virtual. Mem´ria ca ca e e o o Virtual consiste em um esquema de pagina¸˜o sob demanda, no qual somente ca as p´ginas necess´rias para a execu¸˜o de um processo s˜o carregadas para a a a ca a http://www.candidatoreal.com mem´ria. o Al´m de aumentar o desempenho do sistema, esta t´cnica permite que ex- e e istam programas com espa¸o de endere¸amento l´gico maiores. Para indicar c c o se uma p´gina se encontra ou n˜o carregada na mem´ria em um determinado a a o instante, ´ utilizado um bit adicional para cada entrada da tabela. Quando um e processo tenta acessar uma p´gina que n˜o est´ carregada na mem´ria ´ dito a a a o e que ocorreu um page-fault. O processo ´ ent˜o suspenso e at´ que esteja pronto e a e para executar novamente ocorre a seguinte seq¨ˆncia de eventos: ue 53
  • 55. http://www.candidatoreal.com 1. Aloca¸˜o de uma p´gina f´ ca a ısica; 2. Localiza¸˜o da P´gina F´ ca a ısica no Disco; 3. Leitura da P´gina no Disco; a 4. Atualiza¸˜o da Tabela de P´ginas; ca a 5. Processo vai para fila de pronto. O respons´vel por carregar a p´gina solicitada ´ o pager. Para carregar a a e uma nova p´gina l´gica para mem´ria muitas vezes ´ necess´rio descarregar a o o e a uma p´gina para o disco. Os algoritmos de substitui¸˜o de p´ginas s˜o os a ca a a respons´veis por decidir qual p´gina ser´ escolhida para deixar a mem´ria. Ex- a a a o emplos de algoritmos de substitui¸˜o de p´gina s˜o: ca a a • FCFS: Escolhe a p´gina que est´ a mais tempo na mem´ria; a a o ´ • Otimo: Escolhe a p´gina que vai ser acessada mais remotamente no futuro a (n˜o ´ implement´vel); a e a • LRU: Escolhe a que a mais tempo n˜o ´ acessada (obs: algoritmo imple- a e mentado por hist´rico de bits); o • Second Chance: Organiza p´ginas em forma de um fila circular e utiliza a bits de controle. O Trashing ´ a situa¸˜o em que um processo possui poucas p´ginas f´ e ca a ısicas e o tempo gasto em page-faults ´ muito alto, predominando no tempo total de e processamento. Uma forma de solucionar este problema ´ utilizar a t´cnica de e e swap para permitir que o processo possa executar de forma satisfat´ria. o 4.6 Sistemas de Arquivos O sistema de arquivos ´ a parte do sistema operacional mais vis´ e ıvel para os usu´rios. Durante todo tempo, os usu´rios manipulam arquivos contento tex- a a tos, planilhas, desenhos, figuras, jogos e etc. Este fato exige que o sistema operacional apresente uma interface coerente e simples. Para isso, o sistema de arquivos implementa o conceito de arquivo e diret´rio. o http://www.candidatoreal.com 4.6.1 Conceitos b´sicos sobre arquivos a Um arquivo ´ um recipiente no qual dados s˜o armazenados. Em geral, cada e a arquivo cont´m um conjunto de dados que possui algum significado pr´tico para e a o usu´rio ou para o sistema. Um arquivo pode conter um programa execut´vel, a a um m´dulo de um programa fonte, um texto, uma figura, etc. Cada arquivo ´ o e identificado por um nome, o qual permite que o usu´rio fa¸a referˆncias a ele. a c e Al´m do nome, cada arquivo possui uma s´rie de outros atributos que s˜o man- e e a tidos pelo sistema operacional como tipo de conte´do, tamanho, data e hora u do ultimo acesso, data e hora da ultima altera¸˜o, lista de usu´rios que podem ´ ´ ca a 54
  • 56. http://www.candidatoreal.com acessar o arquivo, etc. Em geral, o sistema operacional suporta diversas opera¸˜es sobre os arquivos, co como cria¸˜o e destrui¸˜o do arquivo, leitura e altera¸˜o do conte´do, troca de ca ca ca u nome do arquivo, etc. Essas opera¸˜es correspondem a chamadas de sistema co que os programas de usu´rio podem usar para manipular os arquivos. a Em sistemas multiusu´rios, ´ importante controlar o acesso aos arquivos. a e Sistemas operacionais multiusu´rios implementam mecanismos que permitem a controlar quais os usu´rios podem fazer o que em quais arquivos. a O controle de acesso inicia com a identifica¸˜o dos usu´rios por meio de um ca a c´digo de usu´rio e uma senha. A partir do momento que a identifica¸˜o do o a ca usu´rio ´ aceita, todos os processos disparados a partir do terminal em quest˜o a e a a ´ passam a ter os direitos de acesso associados com aquele usu´rio. E poss´ ıvel associar a cada arquivo uma lista de usu´rios e direitos de acesso. A forma a usual ´ permitir que apenas o usu´rio que criou o arquivo possa alterar a lista e a contendo os direitos de acesso do arquivo. A forma como os dados s˜o dispostos dentro de um arquivo determina sua a estrutura interna. Cada tipo de arquivo possui uma estrutura interna apropri- ada para a sua finalidade. Por exemplo, arquivos de texto s˜o organizados em a linha ou par´grafos. Arquivos que contˆm programas execut´veis s˜o organiza- a e a a dos em termos de segmento de c´digo e segmentos de dados. o Em geral, os sistemas operacionais ignoram a estrutura interna dos arquivos. Para o sistema operacional, cada arquivo corresponde a uma seq¨ˆncia de bytes, ue cujo significado ´ conhecido pelo usu´rio que o criou. A unica exce¸˜o s˜o os e a ´ ca a arquivos que contˆm programas execut´veis. Nesse caso, a estrutura interna ´ e a e definida pelo pr´prio sistema operacional. Como o conceito de tipo de arquivo ´ o e util para os usu´rios, muitos sistemas operacionais suportam nomes de arquivos ´ a onde o tipo ´ indicado. A forma usual ´ acrescentar extens˜o de nome que e e a identifique o tipo de arquivo em quest˜o.a O m´todo de acesso diz respeito ` forma como o conte´do de um arquivo e a u ´ acessado. O m´todo de acesso mais simples ´ o seq¨encial. Este m´todo ´ e e e u e e usado pelos compiladores, para a impress˜o de um arquivo, etc. Outro m´todo a e de acesso ´ o acesso relativo. Neste m´todo, o programa inclui na chamada de e e sistema qual posi¸˜o do arquivo a ser lida. As posi¸˜es do arquivo s˜o numer- ca co a http://www.candidatoreal.com adas a partir de 0 (ou a partir de 1 em alguns sistemas), sendo que cada posi¸˜o ca corresponde a um byte. Em muitos sistemas operacionais, existe o conceito de posi¸˜o corrente no ca arquivo. Nesse caso, a chamada de sistema para leitura ou escrita n˜o informa a uma posi¸˜o. Essa sempre acontece a partir da posi¸˜o corrente. O sistema op- ca ca eracional tamb´m permite que o programa altere a posi¸˜o corrente do arquivo e ca por meio de uma chamada de sistema. Existem outros m´todos de acesso mais sofisticados, tais como seq¨encial e u indexado, indexado, direto, etc. Tais m´todos de acesso s˜o implementados a e a 55
  • 57. http://www.candidatoreal.com partir dos m´todos seq¨encial e relativo. e u 4.6.2 Implementa¸˜o de arquivos ca A forma b´sica de implementar arquivos ´ criar, para cada arquivo no sistema, a e um descritor de arquivo. O descritor de arquivo ´ um registro no qual s˜o e a mantidas as informa¸˜es a respeito do arquivo. Essas informa¸˜es incluem os co co seus atributos, al´m de outros dados que n˜o s˜o vis´ e a a ıveis aos usu´rios, mas s˜o a a necess´rios para o que o sistema operacional implemente as opera¸˜es sobre os a co arquivos. Um descritor de arquivo cont´m as seguintes informa¸˜es: nome do arquivo, e co extens˜o do nome do arquivo, tamanho em byte, data e hora do ultimo acesso, a ´ data e hora da ultima altera¸ao, identifica¸˜o do usu´rio que criou o arquivo, lo- ´ c˜ ca a cal no disco onde o conte´do do arquivo foi alocado, etc. A forma usual ´ manter u e o descritor de um arquivo na mesma parti¸˜o onde est´ o seu conte´do. Dessa ca a u forma, esse disco poder´ ser at´ mesmo fisicamente removido de um computador a e e conectado a outro. Os arquivos nele poder˜o ser acessados normalmente no a novo computador. O descritor ´ acessado a cada opera¸˜o de escrita ou leitura para determinar e ca a localiza¸˜o no disco dos dados a serem escritos ou lidos. Para tornar mais ca r´pido o acesso aos arquivos, o sistema de arquivos mant´m na mem´ria uma a e o tabela contendo todos os descritores dos arquivos em uso. Quando um arquivo entra em uso, o seu descritor ´ copiado do disco para a mem´ria. Quando o ar- e o quivo deixa de ser usado, o seu descritor em mem´ria pode ter sido alterado em o rela¸˜o ` c´pia do descritor em disco. Nesse caso, o sistema de arquivos escreve ca a o o descritor atualizado que est´ na mem´ria sobre a c´pia original do descritor a o o em disco. A maioria dos sistemas operacionais exige que os pr´prios programas o informem quando um arquivo entra em uso e quando ele n˜o ´ mais necess´rio. a e a Para tanto, existem as chamadas de sistema open e close. Tamb´m ´ util passar e e´ como parˆmetro o tipo de acesso que ser´ feito, isto ´, leitura (READONLY ou a a e RD) ou leitura e escrita (READWRITE ou RW). O sistema de arquivos utiliza uma Tabela de Descritores de Arquivos Aber- tos (TDAA) para manter em mem´ria os descritores dos arquivos abertos. A o TDAA mant´m informa¸˜es relativas aos arquivos abertos por todos os proces- e co sos no sistema. Isso ´ necess´rio porque normalmente ´ permitido que v´rios e a e a http://www.candidatoreal.com processos abram um mesmo arquivo simultaneamente. Cada entrada armazena uma c´pia do descritor do arquivo mantido em disco, assim como algumas in- o forma¸˜es adicionais, necess´rias apenas enquanto o arquivo est´ aberto. Por co a a exemplo, n´mero de processos utilizando o arquivo no momento. u As entradas da TDAA armazenam informa¸˜es que n˜o variam conforme co a o processo que est´ acessando o arquivo. Entretanto, existem informa¸˜es di- a co retamente associadas com o processo que acessa o arquivo. Essas informa¸˜esco n˜o podem ser mantidas na TDAA, pois como v´rios processos podem aces- a a sar o mesmo arquivo, elas possuir˜o um valor diferente para cada processo. Um a exemplo de informa¸˜o que depende do processo ´ a posi¸˜o corrente no arquivo. ca e ca 56
  • 58. http://www.candidatoreal.com Uma solu¸˜o t´ ca ıpica ´ criar, para cada processo, uma Tabela de Arquivos e Abertos por Processo (TAAP). Cada entrada ocupada na TAAP corresponde a um arquivo aberto pelo processo correspondente. No m´ ınimo, a TAAP cont´m e em cada entrada as seguintes informa¸˜es: posi¸˜o corrente no arquivo, tipo de co ca acesso (leitura ou leitura e escrita) e apontador para a entrada correspondente na TDAA. A figura 4.4 mostra as tabelas TDAA e TAAP. Toda TDAA como as TAAP devem ficar na mem´ria do sistema operacional, fora do acesso dos o processos de usu´rio. a Figura 4.4: TAAP vs. TDAA Uma vez aberto um arquivo, o processo utiliza chamadas de sistema com read e write para acessar o seu conte´do. N˜o ´ necess´rio, nem conveniente, u a e a que a cada chamada de sistema, o processo forne¸a novamente o nome do ar- c quivo. Como resultado de um open com sucesso, o sistema de arquivos retorna para o processo o n´mero da entrada na TAAP associada com o arquivo aberto. u Dessa forma, nas chamadas de sistemas ap´s o open, o processo indica o ar- o quivo atrav´s do n´mero de sua correspondente entrada na TAAP. A partir da e u TAAP, o sistema de arquivos pode imediatamente localizar o descritor no ar- quivo TDAA. Muitos sistemas operacionais chamam esse n´mero de handle do u arquivo. Existem duas fun¸˜es importantes que o sistema de arquivos deve realizar co na implementa¸˜o das chamadas de sistema read e write. S˜o elas a montagem ca a e desmontagem de blocos l´gicos e a localiza¸˜o dos blocos l´gicos no disco. Es- o ca o http://www.candidatoreal.com sas fun¸˜es s˜o implementadas baseando-se em trˆs formas b´sicas de aloca¸˜o co a e a ca de arquivos: aloca¸˜o com ´reas cont´ ca a ıguas, aloca¸˜o encadeada e a aloca¸˜o ca ca indexada. 4.6.3 Cache de Sistema de Arquivos Uma importante estrutura de dados presente na implementa¸˜o de um sistema ca de arquivos ´ a sua cache. A cache n˜o oferece nenhuma funcionalidade nova, e a isto ´, a presen¸a ou ausˆncia de uma cache n˜o adiciona ou elimina nenhuma e c e a 57
  • 59. http://www.candidatoreal.com fun¸˜o, chamada de sistema ou opera¸˜o sobre arquivos. Entretanto, caches rep- ca ca resentam um grande aumento no desempenho de qualquer sistema de arquivos, pois o uso do disco tente a ser intenso em sistemas operacionais de prop´sito o gerais. O objetivo do cache ´ manter na mem´ria principal uma certa quanti- e o dade de blocos do disco. Dessa forma, se algum bloco for requisitado para leitura ou escrita, ele ser´ encontrado na mem´ria principal, evitando o acesso ao disco. a o A cache do sistema de arquivos utiliza uma ´rea da mem´ria principal e ´ a o e controlada pelo sistema operacional. Na verdade, existem diversos locais onde ´ uma cache de disco pode ser mantida. E poss´ haver uma cache global, uma ıvel cache exclusiva para cada sistema de arquivos, etc. A forma b´sica de opera¸ao ´ bem simples. Toda vez que um bloco de disco a c˜ e ´ necess´rio para leitura e/ou escrita, a cache ´ pesquisada. Se o bloco estiver e a e na cache, essa c´pia ´ usada. Se o bloco n˜o estiver na cache, ele ´ lido do disco, o e a e colocado na cache e ent˜o utilizado. a Uma quest˜o importante ´ quando atualizar o disco ap´s um bloco presente a e o na cache ter sido alterado. Do ponto de vista de desempenho, o ideal ´ poster- e gar a atualiza¸˜o do disco ao m´ximo no sentido de minimizar as escritas em ca a disco. Por outro lado, caso ocorra uma pane do sistema, toda a informa¸˜o na ca cache ser´ perdida, o disco ficar´ desatualizado e, possivelmente, o sistema de a a arquivos ficar´ corrompido. Existem diversas pol´ a ıticas que podem ser utilizadas. Uma cache de sistema de arquivo pode possuir milhares de blocos, o que torna invi´vel uma pesquisa seq¨encial da mesma para localizar determinado a u bloco. Dada a natureza dinˆmica dessa estrutura e sua importˆncia para o de- a a sempenho do sistema como um todo, uma tabela hash ´ utilizada. O sistema de e arquivos fornece o n´mero da parti¸˜o e o n´mero do bloco, e uma fun¸˜o hash ´ u ca u ca e utilizada para determinar o endere¸o do bloco na cache, caso ele esteja na cache. c Eventualmente, a cache pode se encontrar completamente ocupada, sendo necess´rio liberar espa¸o para algum outro bloco. A solu¸˜o t´ a c ca ıpica ´ escolher e um bloco da cache, atualizar o seu conte´do no disco se necess´rio, declarar esse u a bloco da cache como livre e utiliz´-lo para hospedar um novo bloco de disco. A a pol´ ıtica para escolher o bloco da cache a ser liberado geralmente ´ a LRU (Least e Recently Used ). http://www.candidatoreal.com 4.6.4 Gerenciamento do espa¸o livre c Uma das tarefas do sistema de arquivos ´ gerenciar o espa¸o livre nos discos. e c Em outras palavras, determinar quais setores do disco est˜o livres e podem a ser alocados para aumentar o tamanho de um arquivo. Uma forma simples de gerenciar o espa¸o livre em disco ´ por meio de um mapa de bits. A figura 4.5 c e mostra esse mecanismo. Cada bit presente no mapa representa um bloco f´ısico do disco. Os bits s˜o a considerados numerados da direita para esquerda, isto ´, o bit menos significa- e tivo do primeiro byte ´ o bit n´mero zero. Bit ligado indica bloco ocupado, e u 58
  • 60. http://www.candidatoreal.com Figura 4.5: Mapa de bits para gerenciamento de espa¸o livre c e bit desligado indica bloco livre. O endere¸o do bloco representado por um c determinado bit ´ definido pela pr´pria posi¸˜o do bit dentro do mapa. e o ca Para alocar mais um bloco f´ ısico para um arquivo, basta percorrer o mapa de bits at´ encontrar um bit zero. O bit ´ ent˜o ligado para indicar que o e e a respectivo bloco agora est´ ocupado. Quando um arquivo ´ destru´ e seus a e ıdo blocos liberados, basta desligar os bits correspondentes. O mapa de bits deve ser mantido na mem´ria principal para que a busca seja r´pida. o a O espa¸o livre em disco tamb´m pode ser gerenciado por meio de uma lista c e contendo os n´meros de todos os blocos f´ u ısicos livres (Lista de Blocos Livres). Como essa lista ´ grande no caso de um disco quase vazio, ela deve ser mantida e no pr´prio disco. Para acelerar o processo de aloca¸˜o e libera¸˜o de blocos o ca ca f´ ısicos, alguns blocos da lista s˜o copiados para a mem´ria principal. Logo, so- a o mente ser´ necess´rio acessar o disco quando todos os endere¸os de blocos livres a a c copiados para a mem´ria principal tiverem sido alocados. Ou ainda, quando o remo¸˜es de arquivos liberarem blocos f´ co ısicos em tal quantidade que alguns blo- cos de endere¸os tenham que ser escritos em disco. Alguns sistemas operacionais c atualizam periodicamente a lista de endere¸os em disco para minimizar a cor- c rup¸˜o do sistema de arquivos em caso de falha no computador. ca 4.6.5 Diret´rios o http://www.candidatoreal.com Os diret´rios s˜o as estruturas do sistema de arquivos que contˆm a informa¸˜o o a e ca quais arquivos existem no disco. Um diret´rio pode ser entendido como sendo o um conjunto de arquivos ou um conjunto de referˆncias a arquivos. Existem e diversas formas de estruturar os diret´rios de um sistema. A mais simples ´ ter o e um unico diret´rio para o disco inteiro. Nesse caso, o diret´rio corresponde a ´ o o uma lista de todos os (possivelmente milhares) arquivos do disco. Essa solu¸˜o, ca conhecida como diret´rio linear, ´ aceit´vel apenas para sistemas de arquivo o e a muito pequenos. Por exemplo, pode ser utilizada para discos flex´ ıveis de pe- quena capacidade. 59
  • 61. http://www.candidatoreal.com Para sistemas multiusu´rios, o diret´rio linear ´ problem´tico, pois os ar- a o e a quivos de diferentes usu´rios ficam misturados. Esse problema pode ser re- a solvido com uma estrutura de diret´rios organizada em dois n´ o ıveis. O diret´rio o principal cont´m uma entrada para cada usu´rio do sistema. Essa entrada n˜o e a a corresponde a um arquivo, mas sim a um subdiret´rio que, por sua vez, cont´m o e os arquivos do usu´rio correspondente. Tamb´m ´ necess´rio criar no diret´rio a e e a o principal uma entrada para conter os arquivos do sistema. As entradas do di- ret´rio principal s˜o usualmente chamadas de subdiret´rios. o a o ´ E poss´ estender o conceito de subdiret´rios de tal forma que os usu´rios ıvel o a tamb´m possam criar livremente os seus pr´prios subdiret´rios. Dessa forma, e o o cada usu´rio tem a liberdade de organizar os seus arquivos de forma lhe for a mais conveniente. O resultado ´ um sistema de diret´rios organizado na forma e o de ´rvore conforme a figura 4.6. a Figura 4.6: Diret´rio organizado em forma de ´rvore o a Em um sistema de diret´rios organizado na forma de ´rvore, qualquer ar- o a quivo ou subdiret´rio pode ser identificado de forma n˜o amb´ o a ıgua por meio do caminho (pathname) para atingi-lo a partir da raiz da ´rvore. Facilmente, a a ´rvore de diret´rio cresce at´ uma altura tal que passa a ser desconfort´vel a o e a fornecer sempre o caminho completo at´ cada arquivo ou diret´rio. O conceito e o de diret´rio corrente facilita a identifica¸˜o de arquivos nesse contexto. Dessa o ca forma, um arquivo pode ser identificado por seu caminho absoluto, que inicia a raiz da ´rvore, ou pelo seu caminho relativo, que inicia no diret´rio corrente do a o http://www.candidatoreal.com usu´rio em quest˜o. a a Uma flexibilidade adicional presente em muitos sistemas operacionais est´ a na possibilidade de incluir o mesmo arquivo ou subdiret´rio em v´rios diret´rios. o a o Dessa forma, o mesmo arquivo passa a ter diversos nomes absolutos (mesmo na a ´rvore, cada arquivo possui diversos nomes relativos, uma vez que o caminho relativo depende do diret´rio corrente em quest˜o. Essa facilidade ´ denomi- o a e nada de link e efetivamente transforma a estrutura de diret´rios em um grafo. o 60
  • 62. http://www.candidatoreal.com 4.6.6 Implementa¸˜o de diret´rios ca o A forma mais simples de implementar diret´rios ´ consider´-lo como arquivos o e a especiais, cujo conte´do ´ manipulado pelo pr´prio sistema operacional. Dessa u e o forma, todo o mecanismo de aloca¸˜o, libera¸˜o e localiza¸˜o de blocos f´ ca ca ca ısicos no disco, dispon´ para arquivos, tamb´m ´ usado para os diret´rios. Diret´rios ıvel e e o o passam a ser arquivos cujo conte´do ´ definido pelo sistema operacional e cujo u e acesso ´ controlado por parte do usu´rio. e a Como diret´rios s˜o implementados como arquivos, cada diret´rio possui o a o tamb´m seu descritor. Os diret´rios s˜o implementados como conjunto de de- e o a scritores de arquivos, ou conjuntos de endere¸os de descritores de arquivos. c Quando diret´rios s˜o implementados como conjunto de descritores de arquivos, o a o conte´do de um diret´rio corresponde aos descritores dos arquivos e dos sub- u o diret´rios contidos naquele diret´rio, conforme a figura 4.7. Nesse caso, o nome o o do arquivo ou subdiret´rio faz parte do seu descritor. o Figura 4.7: Diret´rios contendo descritores de arquivos o Outra possibilidade ´ separar um conjunto de blocos da parti¸˜o para ar- e ca mazenar exclusivamente os descritores de arquivos e de subdiret´rios. Esse o conjunto de blocos forma um vetor de descritores, no qual cada descritor pode ser identificado pelo n´mero da parti¸˜o e pela posi¸˜o nesse vetor. Essa estru- u ca ca tura de dados forma o que ´ normalmente conhecido como um flat file system, e pois os descritores n˜o incluem nomes, n˜o existe nenhuma estrutura¸˜o dos ar- a a ca quivos em diret´rios, apenas um diret´rio unico (vetor) e arquivos identificados o o ´ pela posi¸˜o do vetor. ca http://www.candidatoreal.com Em qualquer solu¸˜o, cada diret´rio nada mais ´ que uma tabela. Existem ca o e diversas implementa¸˜es poss´ co ıveis para tabelas que podem ser usadas na im- plementa¸˜o de um diret´rio. Entre elas, destaca-se a lista n˜o ordenada, lista ca o a ordenada e a tabela hash. 4.7 Sistemas Operacionais Distribu´ ıdos Um sistema distribu´ ´ uma cole¸˜o de computadores independentes que pare- ıdo e ca cem ao usu´rio como um unico computador. Essa defini¸˜o implica hardware a ´ ca 61
  • 63. http://www.candidatoreal.com formado por m´quinas autˆnomas e software fornecendo a abstra¸˜o de uma a o ca m´quina unica. As principais vantagens s˜o: a ´ a • Econˆmicas: aproveitar m´quinas potencialmente ociosas; mais barato o a v´rios processadores interconectados do que um supercomputador. a • Distribui¸˜o inerente: algumas aplica¸˜es s˜o distribu´ ca co a ıdas por natureza. • Tolerˆncia a falhas: em caso de falha de uma m´quina, o sistema como a a um todo pode sobreviver, apresentando apenas uma degrada¸˜o de de- ca sempenho. • Crescimento incremental: o poder computacional pode ser aumentado atrav´s da inclus˜o de novos equipamentos. e a • Flexibilidade: sistemas distribu´ ıdos s˜o mais flex´ a ıveis do que m´quinas a isoladas, por isso muitas vezes s˜o utilizados at´ mesmo que n˜o se es- a e a ´ teja buscando desempenho. E essa flexibilidade que permite que v´riosa usu´rios compartilhem dados e perif´ricos. a e E as desvantagens: • Pouco software de alto n´ dispon´ para sistemas distribu´ ıvel ıvel ıdos. • Dificuldades para evitar acesso indevido (seguran¸a). c • A rede de interconex˜o pode causar problemas ou n˜o dar vaz˜o a de- a a a manda. Sistemas distribu´ ıdos consistem de v´rias CPUs interconectadas. No en- a tanto, h´ v´rias formas diferentes no qual esse hardware pode estar organizado. a a Dentre as v´rias classifica¸˜es existentes, Flynn prop˜e uma taxonomia con- a co o siderando o n´mero de fluxo de instru¸˜es e o n´mero de fluxo de dados. u co u • SISD(Single Instruction Single Data): fluxo de instru¸˜es e dados unico ´ co ´ e a caracter´ ıstica dos uniprocessadores tradicionais • MIMD(Multiple Instructions Multiple Data): caracteriza-se por v´rios a processadores interconectados. Tanembaum apresenta a seguinte subclas- sifica¸˜o, onde os dois primeiros s˜o definidos em rela¸˜o a organiza¸˜o da ca a ca ca mem´ria e os dois ultimos em rela¸˜o a forma de interconex˜o: o ´ ca a – Multiprocessador: m´quinas MIMD com mem´ria compartilhada (um a o http://www.candidatoreal.com unico espa¸o de endere¸amento virtual compartilhado por todas as ´ c c CPUs). – Multicomputador: m´quinas que n˜o possuem mem´ria compartil- a a o hada, isto ´, cada processador possui sua mem´ria privada. e o – Barramento: um unico cabo, rede, barramento ou outro meio que ´ conecte todas as m´quinas. Analogia: TV a cabo. a – Switch: existem cabos individuais conectando m´quina a m´quina, a a com v´rios padr˜es poss´ a o ıveis. 62
  • 64. http://www.candidatoreal.com Outra classifica¸˜o: Fortemente acoplado(Tightly Coupled): comunica¸˜o ca ca r´pida entre os processadores (grande n´mero de bits por segundo). Fracamente a u acoplado(Loosely Coupled): atraso para troca de mensagem entre m´quinas ´ a e alto. Com a cria¸˜o de novas arquiteturas de computadores, surgiram novas de- ca mandas de software e, em especial, novas fun¸˜es exigidas ao S.O. Pode-se con- co siderar como uma boa classifica¸˜o da evolu¸˜o dos Sistemas Operacionais a ca ca tabela abaixo. A tabela 4.1 apresenta uma compara¸˜o entre as caracter´ ca ısticas dos S.O modernos Gera¸˜o ca Sistema Caracter´ ıstica Objetivo 1a SO Centralizado Gerenciamento de Processos Gerenciamento de Gerenciamento de Mem´ria o recursos Gerenciamento de E/S Mem´ria estendida o Gerenciamento de Arquivos Virtualidade 2a SO de Rede Acesso Remoto Compartilhamento de Troca de Informa¸˜es co recursos Navega¸˜o na rede ca Interoperabilidade 3a SO Distribu´ ıdo Vis˜o global do Sistema de a Vis˜o de computador a arquivos, ´ Unico em sistema Espa¸o de nomes c de M´ltiplos u Tempo, Seguran¸a c Computadores Poder Computacional Transparˆncia e 4a SO Cooperativo Aplica¸˜es Distribu´ co ıdas Trabalho cooperativo Autˆnomo o Abertas e Cooperativas Autonomia Tabela 4.1: Sistemas Operacionais 4.7.1 Estrutura¸˜o de Sistemas Distribu´ ca ıdos Estrutura¸˜o baseada na distribui¸˜o f´ ca ca ısica Dentre os v´rios modelos baseados da distribui¸˜o f´ a ca ısica, encontram-se o modelo hier´rquico, o do cache de CPU, o usu´rio servidor e o modelo de conjunto de a a processadores. No modelo hier´rquico, os computadores s˜o dispostos em uma rede sob a a a forma de ´rvore, de maneira que quanto mais pr´ximos estiverem da raiz, mais a o potentes dever˜o ser. O computador da raiz tratar´, de forma geral, do sistema a a como um todo, enquanto que os computadores distantes da raiz tratar˜o de a tarefas espec´ıficas e especializadas. http://www.candidatoreal.com O modelo de cache de CPU consiste na utiliza¸˜o de computadores de menor ca porte como elementos que interligam terminais com uma grande CPU. Nesse caso, uma parte do processamento ser´ executada no computador ligado ao a terminal, e a outra parte no computador central. O modelo usu´rio-servidor(cliente/servidor) surgiu na medida em que os a computadores pequenos, crescendo em potˆncia e tendo seus pre¸os reduzidos, e c diminu´ıram gradativamente a importˆncia do computador central do modelo a cache de CPU. 63
  • 65. http://www.candidatoreal.com Estrutura¸˜o L´gica ca o Modelo de processos: Esses processos podem encapsular tanto elementos ativos com natureza, con- sistindo dos programas referentes `s atividades do sistema e do usu´rio quanto a a elementos naturalmente passivos correspondendo aos recursos e suas respecti- vas opera¸˜es, confinados em gerenciadores de recursos. A comunica¸˜o entre os co ca processos, implementada pelo sistema operacional, pode ocorrer de duas formas: • Chamada remota de procedimento: este tipo de comunica¸˜o entre pro- ca cessos ´ bastante dependente da linguagem usada para implementa¸˜o e ca do sistema, devendo satisfazer suas restri¸˜es com rela¸˜o a chamada de co ca procedimento e a passagem de parˆmetros. a • Troca expl´ıcita de mensagem: este j´ ´ mais flex´ a e ıvel do que o anterior, suas restri¸˜es est˜o relacionadas com a existˆncia de liga¸˜es impl´ co a e co ıcitas ou expl´ ıcitas entre os processos e com a interpreta¸˜o da mensagem. ca Modelo de objetos: O modelo de objetos baseia-se no encapsulamento das v´rias partes de um sis- a tema em elementos denominados objetos que s˜o estruturados de forma a apre- a sentarem um conjunto de opera¸˜es respons´veis pelo seu comportamento. Para co a conseguir acessar um objeto, um processo deve ter capacidade de fazˆ-lo, usando e o conhecimento do nome do objeto e a posse da autoriza¸˜o para cessar algu- ca mas ou todas as suas opera¸˜es. Cada objeto distribu´ n˜o opera sozinho. A co ıdo a princ´ ele ´ constru´ para trabalhar com outros objetos e, para isso, precisa ıpio e ıdo de uma esp´cie de “barramento”. Tais “barramentos” fornecem infra-estrutura e para os objetos, adicionando novos servi¸os que podem ser herdados durante c a constru¸˜o do objeto, ou mesmo em tempo de execu¸˜o para alcan¸ar altos ca ca c n´ ıveis de colabora¸˜o com outros objetos independentes. CORBA ´ um exemplo ca e de “barramento”. http://www.candidatoreal.com 64
  • 66. http://www.candidatoreal.com Cap´ ıtulo 5 Principais Processadores de Mercado 5.1 Processadores Intel 5.1.1 Fam´ Pentium ılia Pentium 4 O processador Pentium 4 da Intel foi lan¸ado em novembro de 2000, usando a c microarquitetura x86 de s´tima gera¸˜o da Intel, chamada Netburst, que veio e ca com um pipeline muito longo com a inten¸˜o de permitir clocks mais altos. ca Os processadores Pentium 4 podem encontrados em trˆs vers˜es de n´cleos: e o u Willamette, Northwood e Prescott. Os primeiros modelos de Pentium 4 utilizavam soquete 423, que, como o pr´prio nome j´ sugere, possu´ 423 terminais. Depois foram lan¸ados modelos o a ıa c de Pentium 4 com soquete 478, que, apesar de possu´ırem mais contatos do que os modelos anteriores (soquete 423), eram fisicamente menores. Os modelos de Pentium 4 atuais utilizam um novo tipo de soquete, chamado Soquete 775. Willamette Os primeiros modelos de Pentium 4 eram baseados no n´cleo Willamette, u que tinha 8 KB de cache L1 para dados; 12 KB de cache L1 para instru¸˜o; ca 256 KB de cache L2; trabalhava externamente a 400 MHz (100 MHz trans- http://www.candidatoreal.com ferindo quatro dados por pulso de clock); padr˜o de pinagem soquete 423 a e 478; clock interno de 1,30 a 2 GHz; suporte a instru¸˜es MMX (oferece co um modelo de execu¸˜o SIMD (Single Instruction Multiple Data, ou seja, ca fluxo unico de instru¸˜es e m´ltiplos de dados) simples, capaz de efetuar ´ co u processamentos de dados inteiros, empacotados em registros de 64 bits. As instru¸˜es MMX melhoraram a execu¸˜o das assim chamadas tarefas co ca multim´ ıdias, como codificar e decodificar v´ıdeo), SSE (Streaming SIMD Extensions) e SSE2; tecnologia de constru¸˜o de 180 nanˆmetro. ca o Northwood Em seguida vieram os modelos de Pentium 4 baseados no n´cleo North- u 65
  • 67. http://www.candidatoreal.com wood. Este n´cleo ´ cerca de 60% menor do que o n´cleo Willamette dev- u e u ido ao seu processo de fabrica¸˜o de 130 nanˆmetros. O n´cleo Northwood ca o u possui 8 KB de cache L1 para dados; 12 KB de cache L1 para instru¸˜o; ca 512 KB ou 2 MB de cache L2; barramento externo rodando a 400 MHz, 533 MHz ou 800 MHz (100 MHz, 133 MHz e 200 MHz transferindo quatro dados por pulso de clock, respectivamente); clock interno de 1,60 a 3,4 GHz; suporte a instru¸oes MMX, SSE e SSE2. Alguns modelos possuem c˜ suporte a tecnologia Hyper-Threading. Prescott O n´cleo Prescott ´ constru´ com tecnologia de 90 nanˆmetros ´ uti- u e ıdo o e lizado nos processadores Pentium 4 modernos. Ele pode ser encontrado com 16 KB de cache L1 para dados; 12 KB de cache L1 para instru¸˜o; ca 512 KB, 1 MB ou 2 MB de cache L2; trabalha externamente a 533 MHz ou 800 MHz (133 MHz e 200 MHz transferindo quatro dados por pulso de clock, respectivamente); com clock interno de 2,26 a 3,80 GHz; suporte a `s novas instru¸˜es MMX, SSE, SSE2 e SSE3. Alguns modelos possuem co suporte a tecnologia Hyper-Threading, XD, EM64T, SpeedStep (permite que o sistema operacional ajuste o clock do processador, diminuindo-o ao executar aplicativos que exigem menos poder e economizando energia) e a VT (Virtualization Technology ), originalmente conhecida como Van- derpool. A tecnologia VT permite que um processador funcione como se fosse v´rios processadores trabalhando em paralelo de modo a permitir a que v´rios sistemas operacionais sejam executados ao mesmo tempo em a uma mesma m´quina. Embora o clock de um Prescott seja o mesmo de a um Northwood, alguns softwares de teste mostraram que um Northwood ´ e ligeiramente mais veloz que um Prescott. Prescott 2M O Pentium 4 Extreme Edition foi lan¸ado em novembro de 2003 e foi o c primeiro processador para desktop a possuir o cache L3 integrado, carac- ter´ ıstica esta presente apenas em processadores voltados para o mercado corporativo. Este processador possui 2 MB de cache L3 sendo acessado na mesma freq¨ˆncia de opera¸˜o interna do processador. Os primeiros modelos de ue ca Pentium 4 Extreme Edition eram baseados no n´cleo Gallatin, que tinha u 8 KB de cache L1 para dados; 12 KB de cache L1 para instru¸˜o; 512 KB ca de cache L2 e 2 MB de cache L3; trabalhava externamente a 800 MHz e 1066MHz (200 MHz ou 266 MHz transferindo quatro dados por pulso http://www.candidatoreal.com de clock, respectivamente); clock interno de 3,20 a 3,46 GHz; suporte `s a instru¸˜es MMX, SSE e SSE2; tecnologia Hyper-Threading; tecnologia de co constru¸˜o de 130 nanˆmetros. ca o Os modelos de Pentium 4 Extreme Edition atuais s˜o baseados no n´cleo a u Prescott 2M com tecnologia de 90 nanˆmetros. Possuem 16 KB de cache o L1 para dados; 12 KB de cache L1 para instru¸˜o; 2 MB de cache L2; n˜o ca a possuem cache L3; trabalhava externamente a 1066 MHz (266 MHz trans- ferindo quatro dados por pulso de clock); clock interno de 3,73 GHz; su- porte `s instru¸˜es MMX, SSE, SSE2 e SSE3; tecnologia Hyper-Threading, a co EM64T. 66
  • 68. http://www.candidatoreal.com Pentium D e Pentium Extreme Edition O processador Pentium D ´ a vers˜o de dois n´cleos do Pentium 4, e o Pentium e a u Extreme Edition ´ a vers˜o do Pentium D com tecnologia HyperThreading ha- e a bilitada. Os processadores Pentium D e Pentium Extreme Edition podem ser encontrados em duas vers˜es de n´cleos: Smithfield e Presler. o u O Pentium D e o Pentium Extreme Edition s˜o baseados na microarquitetura a x86 de s´tima gera¸˜o da Intel, chamada Netburst, ou seja, apesar do nome e ca diferente, eles s˜o internamente um Pentium 4 (ou melhor, dois processadores a Pentium 4 em um unico encapsulamento). A diferen¸a b´sica entre o Pentium ´ c a D e o Pentium Extreme Edition ´ a ausˆncia da tecnologia HyperThreading nos e e processadores Pentium D. Smithfield Os processadores Pentium D e Pentium Extreme Edition da s´rie 800 s˜o e a baseados no n´cleo Smithfield. O n´cleo Smithfield consiste na verdade u u em duas pastilhas de sil´ ıcio do n´cleo Prescott montadas em um unico u ´ processador. As principais caracter´ısticas dos processadores Pentium D da s´rie 800 s˜o: e a tecnologia de n´cleo duplo; 16 KB de cache L1 de dados por n´cleo; 12 KB u u de cache L1 de instru¸˜o por n´cleo; 2 MB de cache L2 (1 MB por n´cleo); ca u u barramento externo de 800 MHz (200 MHz transferindo quatro dados por pulso de clock), 533 MHz no caso do Pentium D 805 (133 MHz transferindo quatro dados por pulso de clock); clock interno de 2,66 a 3,20 GHZ para o Pentium D e 3,20 GHz para o Extreme Edition; suporte `s instru¸˜es a co SSE3; soquete 775; processo de fabrica¸˜o de 90 nm; tecnologia EM64T, ca XD e SpeedStep (modelos 840 e 830); e tecnologia Hyper-Threading nos processadores Pentium Extreme Edition. Os processadores Pentium D n˜o tˆm esta tecnologia. a e Presler Os processadores Pentium D e Pentium Extreme Edition da s´rie 900 s˜o e a baseados no n´cleo Presler. u As principais caracter´ ısticas dos processadores Pentium D e Pentium Ex- treme Edition da s´rie 900 s˜o: tecnologia de n´cleo duplo; 16 KB de e a u cache L1 de dados por n´cleo; 12 KB de cache L1 de instru¸˜o por n´cleo; u ca u 4 MB de cache L2 (2 MB por n´cleo); barramento externo de 800 MHz u (200 MHz transferindo quatro dados por pulso de clock) nos processadores Pentium D ou 1.066 MHz (266 MHz transferindo quatro dados por pulso http://www.candidatoreal.com de clock) nos processadores Pentium Extreme Edition; clock interno de 2,80 a 3,60 GHZ para o Pentium D e 3,46 a 3,73 GHz para o Extreme Edition; suporte `s instru¸˜es SSE3; soquete 775; processo de fabrica¸˜o a co ca de 65 nm; tecnologia EM64T, XD, VT e SpeedStep (modelos 840 e 830); e tecnologia Hyper-Threading nos processadores Pentium Extreme Edition. Os processadores Pentium D n˜o tˆm esta tecnologia. a e Pentium M O Pentium M ´ o processador da Intel voltado para o mercado de notebooks e e utilizado pela plataforma Centrino. A plataforma Centrino da Intel ´ um con- e 67
  • 69. http://www.candidatoreal.com junto de tecnologias desenvolvidas para notebooks e ´ formada por trˆs compo- e e nentes: • Processador Pentium M • Intel Chipsets 855 ou 915 • Rede Wireless Intel/PRO Um notebook s´ pode ser considerado Centrino se ele possuir todos esses o trˆs componentes. O processador Pentium M da Intel foi lan¸ado em mar¸o de e c c 2003, usando a microarquitetura x86 de sexta gera¸˜o da Intel, ou seja, a mesma ca arquitetura usada pelos processadores Pentium Pro, Pentium II e Pentium III. Podem ser encontrados em duas vers˜es de n´cleos: Banias e Dothan. o u Banias Os primeiros modelos de Pentium M eram baseados no n´cleo Banias, u que tinha 32 KB de cache L1 de instru¸˜es e 32 KB de cache L1 de co dados; 1 MB de cache L2; trabalhava externamente a 400 MHz (100 MHz transferindo quatro dados por pulso de clock); clock interno de 1,10 a 1,50GHz; suporte as instru¸˜es SSE2; tecnologia Enhanced SpeedStep; co tecnologia de constru¸˜o de 0, 13µm; padr˜o de pinagem soquete 478 e ca a 479. Dothan O n´cleo Dothan ´ constru´ com tecnologia de 90 nanˆmetros ´ utilizado u e ıdo o e nos processadores Pentium M modernos. Ele possui 32 KB de cache L1 de instru¸˜es e 32 KB de cache L1 de dados; 2 MB de cache L2; trabalha co externamente a 400 MHz ou 533 MHz (100 MHz e 133 MHz transferindo quatro dados por pulso de clock, respectivamente); clock interno de 1,10 a 2,26 GHz; suporte as instru¸˜es SSE2; tecnologia Enhanced SpeedStep, co Execute Disable (alguns modelos); padr˜o de pinagem soquete 478 e 479. a 5.1.2 Fam´ Celeron ılia O nome Celeron ´ utilizado pela Intel para designar sua linha de processadores de e baixo custo. Na verdade, o Celeron ´ uma vers˜o econˆmica dos processadores e a o topo de linha da Intel. Ou seja, o Celeron ´ uma vers˜o ?capada? do Pentium e a II, Pentium III ou do Pentium 4, com algumas caracter´ ısticas reduzidas ou removidas. O Celeron diferencia-se do Pentium II, Pentium III ou do Pentium 4 em basicamente trˆs aspectos: e http://www.candidatoreal.com • Tamanho do cache L2 • Clock interno • Clock do barramento externo Essas diferen¸as fazem com que o Celeron seja mais barato e tenha um de- c sempenho menor do que os processadores Pentium II, Pentium III e Pentium 4, sendo, portanto, destinado para o mercado de usu´rios dom´sticos ou para a e aqueles que n˜o necessitam de grande poder computacional. a 68
  • 70. http://www.candidatoreal.com Existem v´rios modelos de Celeron, mas atualmente o comercializado pela a Intel ´ o Celeron D. O sufixo D ´ apenas para diferenci´-lo das gera¸˜es anteri- e e a co ores. O Celeron D ´ a vers˜o topo de linha dos processadores Celeron. Esse pro- e a cessador ´ baseado no Pentium 4 com n´cleo Prescott e possui tecnologia de 65 e u e 90 nanˆmetros. o O Celeron D possui 16 KB de cache L1 de dados, 256 e 512 KB de cache L2, trabalha externamente a 533 MHz (133 MHz transferindo quatro dados por pulso de clock), suporte ?s instru¸˜es multim´ co ıdia SSE3, encapsulamento FC- PGA e FC-LGA, padr˜o de pinagem soquete 478 ou 775, e pode ser encontrado a com clocks de 2,13 GHz a 3,60 GHz. Por ser uma vers˜o ?capada? do Pentium 4 a Prescott, que permite alcan¸ar com maior facilidade freq¨ˆncias mais elevadas, c ue o Celeron D n˜o suporta a tecnologia Hyper-Threading, que permite simular a em um unico processador f´ ´ ısico dois processadores l´gicos, e n˜o possui n´cleo o a u duplo. Alguns processadores Celeron D possuem a tecnologia EM64T (Extended Memory 64-bit Technology), que permite ao processador acessar mais mem´ria o RAM, e a tecnologia XD (eXecute Disable), que impede que determinados tipos de v´ ırus ataquem o micro. Antes do Celeron D, vieram alguns outros modelos: Celeron SEPP (Conving- ton), Celeron A (Medocino), Celeron PPGA (Mendocino), Celeron Coppermine, Celeron Tualatin, Celeron Willamette, Celeron Northwood e o Celeron M. 5.1.3 Fam´ Core ılia Core Duo O Core Duo (conhecido anteriormente pelo nome-c´digo Yonah) ´ o primeiro o e processador da Intel voltado para o mercado de notebooks a ter tecnologia de dois n´cleos, isto ´, dentro dele h´ dois processadores completos. Curiosamente u e a este ´ tamb´m o primeiro processador da Intel adotado pela Apple. e e Na realidade este processador ´ um Pentium M com dois n´cleos de pro- e u cessamento e constru´ com tecnologia de 65 nm (O Pentium M ´ atualmente ıdo e constru´ com tecnologia de 90 nm). ıdo http://www.candidatoreal.com Apesar de ter dois n´cleos de processamento dentro de um unico proces- u ´ sador, o tamanho do n´cleo do Core Duo ´ praticamente o mesmo do Pentium u e M (n´cleo Dothan). Isto significa que o custo para a Intel produzir um Core Duo u ´ quase o mesmo para produzir um Pentium M, que tem apenas um unico n´cleo. e ´ u O cache de mem´ria L2 do Core Duo ´ de 2 MB compartilhado entre o e os n´cleos (a Intel chama esta implementa¸˜o de cache L2 compartilhado de u ca ”Smart Cache”, ou ”cache inteligente”). No Pentium D 840, por exemplo, que ´ e um processador de n´cleo duplo, o tamanho do seu cache L2 ´ de 2 MB, sendo u e 1 MB destinado para cada n´cleo. Ou seja, no Pentium D existem dois cache u 69
  • 71. http://www.candidatoreal.com L2 de 1 MB, um por n´cleo. J´ no Core Duo, existe apenas um cache L2 de 2 u a MB que ´ compartilhado entre os dois n´cleos. e u Com o cache compartilhado, a quantidade de mem´ria cache que cada n´cleo o u utiliza n˜o ´ fixa. Com um cache L2 de 2 MB, em um dado momento um n´cleo a e u pode estar usando 1,5 MB de cache e o outro 512 KB (0,5 MB), por exemplo. Se em um processador de n´cleo duplo com cache separado o cache L2 de um u n´cleo ”acabe”(isto ´, seu 1 MB est´ sendo totalmente usado), ele precisa ir ` u e a a lenta mem´ria RAM buscar os dados, diminuindo o desempenho do sistema. No o caso do cache compartilhado, cada n´cleo pode simplesmente ”redimensionar”o u seu cache L2. Outra vantagem do cache L2 compartilhado ´ que se um n´cleo buscou um e u dado ou uma instru¸˜o e a armazenou no cache L2, esta mesma informa¸˜o ca ca pode ser aproveitada pelo outro n´cleo. Em processadores de n´cleo duplo u u com mem´rias cache separadas o segundo n´cleo teria de acessar este dado (ou o u instru¸˜o) atrav´s do barramento local do processador, isto ´, ”pelo lado de ca e e fora”do processador, usando o clock do barramento local, que ´ muito inferior e ao clock interno do processador, diminuindo o desempenho do sistema. As principais caracter´ ısticas do Core Duo s˜o as seguintes: tecnologia de a n´cleo duplo; Nome-c´digo: Yonah; 32 KB de cache L1 de instru¸˜es e 32 KB u o co de cache L1 de dados 2 MB de cache L2 compartilhado entre os dois n´cleos; u Soquete 478 ou 479; tecnologia de 65 nm; barramento externo de 667 MHz (166 MHz transferindo quatro dados por pulso de clock); tecnologia de Virtual- iza¸˜o; tecnologia Execute Disable; tecnologia Enhanced SpeedStep; suporte `s ca a instru¸˜es SSE3. co Podemos dividir a plataforma Centrino em trˆs fam´ e ılias. A primeira fam´ılia ´ formada pelo processador Pentium M, chipset Intel 855/915 Express e rede e sem fio Intel PRO/Wireless. A segunda fam´ ´ formada pelo processador ılia e Intel Core Solo (vers˜o do processador Intel Core Duo, mas com um unico a ´ n´cleo de processamento ? at´ o momento somente um modelo de Core Solo foi u e lan¸ado, T1300, rodando internamente a 1,66 GHz, externamente a 667 MHz, 2 c MB de cache L2), chipset Intel 945 Express e rede sem fio Intel PRO/Wireless 3945ABG. J´ a terceira fam´ a ılia, tamb´m conhecida como Centrino Duo (antes e chamada Napa), traz para os notebooks o poder computacional dos proces- sadores de dois n´cleos e ´ formada pelo processador Intel Core Duo com clock u e interno de 1,50 a 2,16 GHz, chipset 945 Express e rede Intel PRO/Wireless http://www.candidatoreal.com 3945ABG. Core 2 Duo O Core 2 ´ a gera¸˜o mais recente de processadores lan¸ada pela Intel (os e ca c primeiros modelos foram lan¸ados oficialmente em 27 de julho de 2006). A c chegada do Core 2 significa a substitui¸˜o da marca Pentium, que estava sendo ca usada pela companhia desde 1993. Os modelos mais comuns e conhecidos dessa linha se chamam Core 2 Duo (com n´cleo duplo), que substitui o Pentium 4 e o u Pentium D, mas existe tamb´m um modelo Core 2 Quad (com n´cleo qu´druplo) e u a e os modelos Core 2 Extreme (”high end”), que substitui o Pentium Extreme 70
  • 72. http://www.candidatoreal.com Edition. O Core 2 Duo ´ o primeiro processador para desktop a usar a nova microar- e quitetura Core. O lan¸amento do processador Core 2 Duo (nome-c´digo Conroe c o para desktop e Meron para port´teis) marca o in´ de uma nova gera¸˜o de a ıcio ca processadores baseados na nova microarquitetura Core, e declara de uma vez por todas o fim da microarquitetura Netburst usada desde 2000 pelos processadores Intel de 7a gera¸˜o. Como a microarquitetura Core ´ baseada na arquitetura do ca e Pentium M e do Pentium III, podemos dizer que o Core 2 Duo ´ um processador e Intel de 6a gera¸˜o. ca A diferen¸a entre o Core 2 Duo e o Core 2 Extreme ´ que este ultimo tra- c e ´ balha com clocks mais elevados e tem o multiplicador de clock destravado, o que permite fazer overclock alterando o multiplicador de clock do processador. Cuidado para n˜o confundir o processador Core 2 Duo com o Core Duo. O a Core Duo (conhecido anteriormente pelo nome-c´digo Yonah) ´ o nome com- o e ercial para um Pentium M com dois n´cleos de processamento constru´ com u ıdo tecnologia de 65 nm. J´ o Core 2 Duo ´ o nome comercial para o processador de a e nome-c´digo Merom (para notebooks) ou Conroe (para desktops), que utiliza a o nova microarquitetura Core da Intel. As principais caracter´ ısticas t´cnicas dos processadores da fam´ Core 2 e ılia (Core 2 Duo e Core 2 Extreme) s˜o as seguintes: arquitetura Core; 64 KB de a cache L1 (32 KB de dados + 32 KB de instru¸˜es) por n´cleo; tecnologia de dois co u n´cleos (o Core 2 Extreme QX6700 tem tecnologia de quatro n´cleos); tecnolo- u u gia de 65 nm; soquete 775; barramento externo de 800 MHz (200 MHz trans- ferindo quatro dados por pulso de clock) ou 1.066 MHz (266 MHz transferindo quatro dados por pulso de clock); 2 MB, 4 MB ou 8 MB (Extreme QX6700) de cache de mem´ria L2 compartilhado; tecnologia de Virtualiza¸˜o (exceto o Core o ca 2 Duo E4300); tecnologia Intel EM64T; instru¸˜es SSE3 e SSSE3 (atualiza¸˜o co ca da SSE3); Execute Disable; Intelligent Power Capability; tecnologia Enhanced SpeedStep. O modelos Core 2 Duo possuem clock interno de 1,80 a 2,66 GHz, o Core 2 Quad possuiu clock interno de 2,40 GHz e o Core 2 Extreme 2,66 e 2,93 GHz. Existem os modelos Core 2 Duo para notebook com as caracter´ ısticas men- cionadas anteriormente, mas com um barramento externo de 667 ou 533 MHz. http://www.candidatoreal.com 5.1.4 Xeon Em 1998 a Intel estabeleceu uma distin¸˜o entre seus processadores voltados ca para o mercado de servidores e esta¸˜es de trabalho dos voltados para o mer- co cado de usu´rios dom´sticos. Desde ent˜o, a Intel passou a incluir o termo a e a ”Xeon”(pronuncia-se ”z´ ıon”) no nome dos processadores voltados para o mer- cado de servidores e esta¸˜es de trabalho. Esses processadores reconhecem mais co mem´ria RAM, permitem trabalhar em ambiente multiprocessado (isto ´, com o e placas-m˜e com v´rios processadores instalados sobre ela) e possui um desem- a a 71
  • 73. http://www.candidatoreal.com penho maior que os processadores voltados para o mercado dom´stico. e A Intel lan¸ou vers˜es para o mercado de servidores e esta¸˜es de trabalho c o co dos seus processadores Pentium II e Pentium III, chamadas, respectivamente, de Pentium II Xeon e Pentium III Xeon. Assim, o processador Pentium II era direcionado para o mercado de usu´rios dom´sticos enquanto que o Pentium II a e Xeon era um processador voltado para o mercado de servidores e esta¸˜es de co trabalho. A mesma coisa acontece com o Pentium III e Pentium III Xeon. No caso do Pentium 4, em vez do nome escolhido ter sido Pentium 4 Xeon, optou-se pelo nome Xeon. Ou seja, o Xeon ´ um processador voltado para o mercado de e servidores e esta¸˜es de trabalho baseado no Pentium 4. Atualmente, existem co os modelos Xeon Core 2 Duo e Core 2 Quad. Pentium 4 Xeon Este processador deveria se chamar Pentium 4 Xeon, mas a Intel optou pelo nome Xeon. Como comentamos anteriormente, o Xeon ´ um processador voltado e para o mercado de servidores e esta¸˜es de trabalho baseado no Pentium 4, co sendo, portanto, um processador Intel de 7a gera¸˜o. Como vimos, os proces- ca sadores anteriores da s´rie Xeon usavam a arquitetura Intel de 6a gera¸˜o (a e ca mesma do Pentium Pro). A diferen¸a entre os processadores Xeon MP e Xeon ´ que o primeiro per- c e mite multiprocessamento sim´trico com quatro ou mais processadores, enquanto e que o Xeon permite multiprocessamento com no m´ximo dois processadores. a Antigamente, o processador Xeon era chamado ”Xeon DP”(multiprocessamento sim´trico com at´ dois processadores), sendo posteriormente renomeado para e e apenas ”Xeon”. Os processadores Xeon possuem 8 KB de mem´ria cache L1 para dados (16 o KB nos modelos que possuem a tecnologia de 64 bits EM64T) e um cache L1 de execu¸˜o de 150 KB. O cache L2 pode ser de 512 KB, 1 MB ou 2 MB, sendo ca que alguns modelos possuem um cache L3, que pode ser de 1 MB, 2 MB, 4 MB ou 8 MB. O barramento externo pode ser de 667, 1066 ou 1333 MHz. Alguns modelos possuem suporte `s instru¸˜es SSE3, e `s tecnologias XD, EM64T e a co a Hyper-Threading. Os modelos Xeon DP 53xx possuem suporte a tecnologia Quad-Core e n˜o a http://www.candidatoreal.com suportam a tecnologia Hyper-Threading. Xeon MP Como j´ explicamos, a diferen¸a entre o Xeon MP e o Xeon ´ a quantidade de a c e processadores suportados no modo de multiprocessamento sim´trico: o Xeon e suporta at´ dois processadores em uma mesma placa-m˜e, enquanto que o Xeon e a MP suporta at´ quatro processadores por barramento. e 72
  • 74. http://www.candidatoreal.com Na realidade ´ poss´ e ıvel construir servidores com mais de quatro proces- sadores Xeon MP em uma mesma placa-m˜e. Para isso, no entanto, os pro- a cessadores devem ser agrupados de quatro em quatro ? j´ que eles s´ suportam a o at´ quatro processadores por barramento ? devendo haver uma conex˜o entre e a os chipsets. Por exemplo, em um servidor com oito processadores Xeon MP, os quatro primeiros processadores estar˜o interligados atrav´s do mesmo barra- a e mento, enquanto os outros quatro processadores estar˜o interligados atrav´s de a e um segundo barramento. A comunica¸˜o entre os barramentos locais ser´ feita ca a pelo chipset. As principais caracter´ ısticas dos processadores Xeon MP s˜o: soquete 603; a cache L1 de execu¸˜o de 150 KB; cache L1 de dados de 8 KB ou de 16 KB ca nos modelos com suporte ` tecnologia EM64T; multiprocessamento sim´trico a e diretamente com at´ quatro processadores; tecnologia Hyper-Threading. Alguns e modelos possuem suporte `s instru¸˜es SSE3, e `s tecnologias XD, EM64T. a co a Xeon N´ cleo Duplo (50xx e 7xxx) u A tecnologia de n´cleo duplo traz dois processadores inteiros dentro de um u mesmo inv´lucro. Como os processadores Xeon de n´cleo duplo modelos 50xx o u e 7xxx tˆm a tecnologia HyperThreading ? que simula a existˆncia de dois pro- e e cessadores em cada n´cleo ? o sistema operacional reconhece cada processador u Xeon de n´cleo duplo como sendo quatro processadores. Assim, em um servidor u com dois processadores Xeon de n´cleo duplo, o sistema operacional reconhecer´ u a oito processadores (quatro n´cleos, dois por processador, e dois processadores u l´gicos por n´cleo). o u Todos os processadores Xeon de n´cleo duplo possuem as seguintes carac- u ter´ ısticas: soquete 604 (modelos 7xxx) ou 771 (modelos 50xx); Mesma arquite- tura interna no Pentium 4 (Netburst); instru¸˜es SSE3; cache L1 de dados de 16 co KB e cache de execu¸˜o de 150 KB; suporte a multiprocessamento sim´trico com ca e at´ dois processadores por placa-m˜e; barramento externo de 667, 800 ou 1066 e a MHz; tecnologia Execute Disable; tecnologia EM64T; tecnologia HyperThread- ing; tecnologia de Virtualiza¸˜o nos modelos 7xxx e 50xx; tecnologia Demand- ca Based Switching (DBS), exceto nos modelos 5060 e 5063; tecnologia Enhanced SpeedStep; tecnologia de constru¸˜o 90 nanˆmetros ou 65 nanˆmetros. ca o o http://www.candidatoreal.com Xeon N´ cleo Duplo (51xx) u Intel lan¸ou recentemente uma nova s´rie de processadores Xeon (51xx) baseada c e na nova microarquitetura Core, a mesma usada pelos processadores Core 2 Duo. Esta nova s´rie era conhecida anteriormente por seu nome-c´digo, Woodcrest. e o Tenha em mente que os processadores Xeon de n´cleo duplo de outras s´ries u e (50xx e 7xxx) s˜o baseados na microarquitetura do Pentium 4 (Netburst) e por a isso possuem a tecnologia HyperThreading, que n˜o est´ presente na microar- a a quitetura Core. 73
  • 75. http://www.candidatoreal.com Todos os processadores Xeon da s´rie 51xx possuem as seguintes carac- e ter´ ısticas: tecnologia de n´cleo duplo; tecnologia de 65 nm; soquete 771; in- u stru¸˜es SSE3; cache L1 dividido, sendo 32 KB para dados e 32 KB para in- co stru¸˜es por n´cleo; 4 MB de cache L2 compartilhado entre os n´cleos; barra- co u u mento externo de 1066 ou 1333 MHz; tecnologia EM64T; tecnologia de Virtual- iza¸˜o; tecnologia Execute Disable; tecnologia Demand-Based Switching (DBS), ca nos modelos 5160, 5150, 5148 e 5140; tecnologia Enhanced SpeedStep; tecnolo- gia Dual Independent Bus (DIB), onde cada n´cleo tem seu pr´prio barramento u o externo em vez de ter apenas um barramento compartilhado entre nos n´cleos u para a comunica¸˜o com os outros dispositivos do micro. ca 5.1.5 Itanium O projeto de processadores de 64 bits da Intel j´ se arrasta por muitos anos. a O primeiro processador lan¸ado usando essa tecnologia foi o Itanium e recente- c mente a Intel lan¸ou mais um processador IA-64, o Itanium 2. c Esses dois processadores possuem caracter´ ısticas de hardware bastante ”pe- sadas”. O Itanium tem os dois caches de mem´ria (L1 e L2) dentro do pr´prio o o processador, como ocorre com os demais processadores atualmente, e ainda um cache extra (L3) dentro de seu cartucho, podendo esse circuito ter 2 MB ou 4 MB, dependendo da vers˜o do processador. Ele consegue acessar at´ 16 EB a e (Exabytes, 1 EB = 26 0) de mem´ria RAM e usa um barramento externo de o 64 bits rodando a 266 MHz, atingindo uma taxa de transferˆncia de 2,1 GB/s. e Esse processador usa uma mistura de soquete com cartucho. J´ o Itanium 2 tem uma mem´ria cache L1 de 32 KB, uma mem´ria cache a o o L2 de 256 KB e uma mem´ria cache L3 de 1,5 MB ou de 3 MB, dependendo o do modelo. Os mais atuais possuem uma cache L3 de 6, 8, 12, 18 ou 24 MB dependendo do modelo. Seu barramento externo ´ de 128 bits, rodando a 400 e ou 533 MHz. Possuem suporte a tecnologia Dual-Core, EM64T, VT. Esses dois processadores s˜o voltados exclusivamente para o mercado de a servidores de alto desempenho. Isso deixa a AMD em grande vantagem, j´ que a haver´ processadores de 64 bits da AMD voltados para usu´rios comuns (como a a o Clawhammer ). Outra vantagem da arquitetura de 64 bits da AMD sobre a arquitetura de 64 http://www.candidatoreal.com bits da Intel ´ que a arquitetura da Intel n˜o roda nativamente c´digo de 32 bits e a o usado pelos programas atuais, ao contr´rio do que ocorre nos processadores da a AMD, que rodam diretamente esse tipo de c´digo. Isso significa que para rodar o sistemas operacionais e aplicativos de 32 bits, os processadores IA-64 (Itanium, Itanium 2 e futuros processadores) precisam traduzir as instru¸˜es de 32 bits co em instru¸˜es equivalentes de 64 bits. Isso faz com que haja uma demora na co execu¸˜o da instru¸˜o, pois h´ tempo perdido com essa convers˜o. O resultado ca ca a a disso ´ ´bvio: em alguns casos pode ocorrer de sistemas operacionais e progra- eo mas de 32 bits rodarem mais lentamente nos processadores IA-64 da Intel do que em processadores de 32 bits como o Pentium 4 e o Athlon XP. 74
  • 76. http://www.candidatoreal.com Mas, como esses processadores da Intel foram destinados ao mercado de servidores, isso n˜o tem muita importˆncia, j´ que m´quinas usando esses pro- a a a a cessadores com certeza rodar˜o programas e sistemas escritos diretamente com a instru¸˜es de 64 bits. Mas como essa ´ uma nova tecnologia, n˜o s´ ´ de- co e a o e morado reescrever programas antigos como escrever novos programas para essa ´ nova plataforma. E claro que esse mesmo problema existe nos processadores da AMD, isto ´, possivelmente demorar´ algum tempo at´ existirem sistemas e a e operacionais e programas escritos usando c´digo de 64 bits desses processadores. o Mas, por outro lado, eles podem rodar diretamente c´digo de 32 bits, facilitando o a entrada desses processadores no mercado. 5.2 AMD 5.2.1 Sempron O Sempron ´ o processador da AMD voltado para o mercado low-end, ou seja, e ele ´ destinado a usu´rios que n˜o precisam de grande poder computacional e e a a que est˜o mais preocupados com pre¸o do que com desempenho. O concorrente a c do Sempron ´ Celeron D da Intel. e O processador Sempron est´ dispon´ a ıvel em trˆs vers˜es de soquete: 462 e o (Socket A), 754 e AM2 (940 pinos). Os processadores Sempron soquete 462 s˜o a vers˜es mais simples do Athlon XP, enquanto que os processadores Sempron o soquete 754 e soquete AM2 s˜o vers˜es mais simples do Athlon 64. a o Como o Sempron soquete 462 usa uma arquitetura interna completamente diferente dos processadores Sempron soquete 754 e soquete AM2, uma com- para¸˜o direta entre esses dois processadores n˜o ´ poss´ ca a e ıvel. A nomenclatura ”PR”(Performance Rating) usada pelo Sempron s´ serve o para a compara¸˜o entre modelos de Sempron usando o mesmo tipo de soquete. ca N˜o ´ poss´ a e ıvel comparar a nomenclatura PR do Sempron com a do Athlon XP ou com a do Athlon 64. Por exemplo, um Sempron 3000+ n˜o ´ necessaria- a e mente mais r´pido do que um Athlon XP 2800+ ou do que um Athlon 64 2800+. a Soquete 462 http://www.candidatoreal.com Os processadores Sempron soquete 462 s˜o, na realidade, processadores Athlon a XP com barramento externo de 333 MHz (166 MHz transferindo dois dados por pulso de clock) e 256 KB de mem´ria cache L2 (ou 512 KB no caso do modelo o 3000+). Essa categoria de Sempron possui as demais caracter´ ısticas do Athlon XP, tais como: 64 KB de cache L1 de instru¸˜es e 64 KB de cache L1 de dados; co 256 KB ou 512 KB de cache de mem´ria L2; suporte `s instru¸˜es MMX, o a co 3DNow!, SSE e SSE2 (mas n˜o `s instru¸˜es SSE3); processo de fabrica¸˜o de a a co ca 130 nanˆmetro. o 75
  • 77. http://www.candidatoreal.com Soquete 754 Os processadores Sempron soquete 754 s˜o na realidade processadores Athlon a 64 com menos mem´ria cache e sem as extens˜es de 64 bits, sendo que modelos o o lan¸ados mais recentemente passaram a contar com as extens˜es de 64 bits. c o As principais caracter´ ısticas dos processadores Sempron soquete 754 s˜o:a 64 KB de cache de L1 de instru¸˜es e 64 KB de cache L1 de dados; 128 co KB ou 256 KB de cache de mem´ria L2; barramento HyperTransport (bar- o ramento externo para acesso ao chipset Northbridge. Esta tecnologia permite o processador comunicar-se com a mem´ria RAM e com os demais circuitos o do micro ao mesmo tempo, pois existe outro barramento externo para acesso a ` mem´ria RAM. Antigamente, era apenas um barramento de acesso externo) o trabalhando a 800 MHz (este clock pode tamb´m ser referenciado como ”1.600 e MHz”) para os modelos atuais; configura¸˜o de mem´ria single channel; suporte ca o a instru¸˜es SSE3 nos modelos que tˆm as extens˜es de 64 bits habilitadas; pro- co e o cesso de fabrica¸˜o de 90 nanˆmetros. ca o Soquete AM2 Ao contr´rio dos processadores Sempron soquete 754, que trabalham apenas a na configura¸˜o de um unico canal (single channel), os processadores Sempron ca ´ soquete AM2 podem utilizar a configura¸˜o de dois canais (dual channel), do- ca brando a taxa de transferˆncia no acesso ` mem´ria desde que vocˆ use dois e a o e ou quatro m´dulos de mem´ria em seu micro. Lembre-se que os processadores o o Sempron soquete 754 aceitam somente mem´rias DDR, enquanto que os pro- o cessadores Sempron soquete AM2 aceitam somente mem´rias DDR2. o As principais caracter´ısticas t´cnicas do Sempron AM2 s˜o as seguintes: 64 e a KB de cache de L1 de instru¸oes e 64 KB de cache L1 de dados; 128 KB ou 256 c˜ KB de cache de mem´ria L2; barramento HyperTransport trabalhando a 800 o MHz (3.2 GB/s). Este clock pode tamb´m ser referenciado como ”1.600 MHz”; e o controlador de mem´ria integrado suporta mem´rias DDR2-400, DDR2-533 o o e DDR2-667 na configura¸˜o de dois canais (dual channel), o que significa que ca o processador acessa a mem´ria a 128 bits, se dois ou quatro m´dulos forem o o usados; conjunto de instru¸˜es SSE3; extens˜es de 64 bits habilitadas; processo co o de fabrica¸˜o de 90 nanˆmetros. ca o ´ http://www.candidatoreal.com Existem os modelos de Semprom chamados Mobile Semprom. E concorrente direto do Pentium M. O Mobile Semprom possui as seguintes caracter´ ısticas: 64 KB de cache de L1 de instru¸˜es e 64 KB de cache L1 de dados; 128KB ou co 256KB de cache L2 incorporado ao processador; Northbridge integrado; prote¸˜o ca avan¸ada contra v´ c ırus; suporte a instru¸˜es SSE2; processo de fabrica¸˜o 90 co ca nanˆmetros. o 5.2.2 Athlon 64 Os processadores mais novos da AMD encontrados no mercado atualmente s˜o a baseados na arquitetura do Athlon 64, tamb´m conhecida como x86-64 ou ”ham- e 76
  • 78. http://www.candidatoreal.com mer”. Os modelos de Athlon 64 s˜o o Athlon 64, Athlon 64 FX e o Athlon 64 X2. a Esses trˆs processadores mais o Sempron s˜o voltados para o mercado de e a desktops. O Athlon 64 ´ voltado para o mercado mid-range (usu´rios entusi- e a astas ou aqueles que necessitam de um poder computacional maior do que o proporcionado pelo Sempron) e o Athlon 64 FX e o Athlon 64 X2 s˜o voltados a para o mercado high-end (alto desempenho). Existem trˆs outros processadores e baseados na arquitetura do Athlon 64: Athlon 64 Mobile e Turion 64, que s˜o a voltados para o mercado de notebooks, e o Opteron, que ´ voltado para o mer- e cado de servidores. A principal caracter´ ıstica da arquitetura do Athlon 64 ´ a presen¸a do con- e c trolador de mem´ria dentro do pr´prio processador e n˜o no chipset, como o o a acontece com outros processadores. Por causa desta arquitetura a comunica¸˜oca entre o processador e os m´dulos de mem´ria ´ feita atrav´s de um barramento o o e e dedicado, enquanto que a comunica¸˜o entre o processador e o chipset ´ feita ca e atrav´s de um barramento independente, chamado HyperTransport. e Processadores da AMD baseados na arquitetura do Athlon 64 podem ser encontrados com os seguintes padr˜es de pinagem: o Soquete 754 Usado pelas primeiras vers˜es de Athlon 64, alguns modelos de Sempron o e Turion 64. Seu controlador de mem´ria usa somente um canal (single o channel), o que significa que o processador acessa a mem´ria a 64 bits; o Soquete 939 Usado pelos processadores Athlon 64, Athlon 64 FX, Athlon 64 X2 e o Opteron. Seu controlador de mem´ria usa dois canais (dual channel), o o que significa que o processador acessa ` mem´ria a 128 bits, se dois a o m´dulos de mem´ria forem usados. o o Soquete 940 Usado pelos primeiros processadores Athon 64 FX e pelo Opteron. Seu controlador de mem´ria usa dois canais (dual channel), o que significa que o o processador acessa a mem´ria a 128 bits, se dois m´dulos forem usados o o o o ´ (ou um n´mero par de m´dulos de mem´ria for usado). E necess´ria a u a utiliza¸˜o de mem´rias do tipo ECC; ca o Soquete AM2 http://www.candidatoreal.com Usado pelos novos processadores Athlon 64, Athlon 64 FX e Athlon 64 X2. Nesses processadores o controlador de mem´ria integrado suporta o mem´rias DDR2-533, DDR2-667 e DDR2-800 na configura¸˜o de dois o ca canais (dual channel), o que significa que o processador acessa a mem´ria o a 128 bits, se dois m´dulos forem usados. Lembre-se que o controlador o de mem´ria dos processadores soquete 754, 939 e 940 suportam apenas o mem´rias DDR; o Soquete F Este soquete de 1.207 pinos criado para os novos modelos do Opteron tamb´m ´ usado pelos processadores Athlon 64 FX utilizados na plataforma e e 77
  • 79. http://www.candidatoreal.com Quad FX da AMD (Athlon 64 FX modelos 7x). Os processadores que uti- lizam este soquete trabalham no modo SMP (multiprocessamento sim´trico), e podendo trabalhar com mais de um processador em paralelo. Assim como os processadores soquete AM2, nesses processadores o controlador de mem´ria integrado tamb´m suporta mem´rias DDR2-533, DDR2-667 o e o e DDR2-800 na configura¸˜o de dois canais (dual channel), o que significa ca que o processador acessa a mem´ria a 128 bits, se um n´mero par de o u m´dulos de mem´ria for usado. o o O controlador de mem´ria integrado nos novos processadores Athlon 64 so- o quete AM2 e Athlon 64 FX soquete F suporta mem´rias DDR2-533, DDR2-667 e o DDR2-800. O problema, no entanto, ´ como o clock do barramento de mem´ria e o ´ obtido. Em vez de ser gerado atrav´s do clock base do processador (clock e e HTT, que ´ de 200 MHz), ´ usada uma divis˜o do clock interno do processador. e e a O valor desta divis˜o ´ metade do valor do multiplicador do processador. a e Por exemplo, um processador AMD64 com um multiplicador de clock 12x ter´ um divisor do barramento de mem´ria de 6. Este processador trabalhar´ a o a a 2,4 GHz (200 MHz x 12) e sua mem´ria funcionar´ a 400 MHz (DDR2-800, o a 2.400 MHz / 6). Tenha em mente que as mem´rias DDR e DDR2 s˜o rotuladas o a com o dobro dos seus clocks reais. O problema ´ quando o multiplicador de clock do processador ´ um n´mero e e u ´ ımpar. Para um processador AM2 com um multiplicador de clock 13x teori- camente o divisor do seu barramento de mem´ria seria de 6,5. Como o barra- o mento de mem´ria do AMD64 n˜o trabalha com divisores ”quebrados”este valor o a ´ arredondado para o pr´ximo n´mero inteiro, sete neste caso. Enquanto este e o u processador funcionar´ a 2,6 GHz (200 MHz x 13) seu barramento de mem´ria a o funcionar´ a 371 MHz (742 MHz DDR) e n˜o a 400 MHz (800 MHz DDR), a a fazendo com que o processador n˜o alcance a largura de banda m´xima que as a a mem´rias DDR2 podem fornecer. o Outras caracter´ısticas encontradas nos processadores baseados na arquite- tura do Athlon 64 s˜o as seguintes: O processador n˜o ´ vendido com base a a e em seu clock de opera¸˜o, mas sim atrav´s de um indicativo de desempenho ca e chamado ”performance rating”(PR); podem acessar at´ 1 TB de mem´ria RAM e o (barramento de endere¸os de 40 bits, 240 = 1 TB); suporte `s instru¸˜es MMX, c a co 3Dnow!, SSE e SSE2 (SSE3 apenas nos modelos mais novos); tecnologia EVP (Enhanced V´ ırus Protection, tamb´m conhecida como ”NX Bit Disable”); tec- e http://www.candidatoreal.com nologia Cool’n’Quiet (tecnologia que permite reduzir o barulho, o calor e o consumo de energia). Athlon 64 O Athlon 64 pode ser encontrado em vers˜es para o soquete 754, soquete 939 e o o novo soquete AM2. E pode ser encontrado com diferentes vers˜es de n´cleo o u (90 nanˆmetros ou 130 nanˆmetros). O concorrente direto do Atlhon 64 ´ o o o e Pentium 4. As principais caracter´ ısticas t´cnicas do Athlon 64 s˜o as seguintes: 64 KB e a 78
  • 80. http://www.candidatoreal.com de cache de L1 de instru¸˜es e 64 KB de cache L1 de dados; 512 KB ou 1 MB co de cache de mem´ria L2; barramento HyperTransport trabalhando a 800 MHz o (3,2 GB/s) ou a 1 GHz (4 GB/s). Esses clocks podem tamb´m ser referenciados e como ”1.600 MHz”ou ”2.000 MHz”, respectivamente; configura¸˜o de mem´ria ca o DDR dual channel nos modelos soquete 939 e AM2 (precisa de dois m´dulos de o m´dulos de mem´ria para usar este recurso); conjunto de instru¸˜es SSE3 em o o co alguns modelos. Athlon 64 X2 O Athlon 64 X2 ´ um Athlon 64 com tecnologia de n´cleo duplo, ou seja, ele e u possui dois processadores dentro de um s´. Todos os processadores Athlon 64 o X2 s˜o encontrados para soquete 939 e AM2. O principal corrente do Athlon a 64 X2 ´ o Pentium D Dual Core. e As principais caracter´ ısticas t´cnicas do Athlon 64 X2 s˜o as seguintes: 64 e a KB de cache de L1 de instru¸oes e 64 KB de cache L1 de dados por n´cleo; 512 c˜ u KB ou 1 MB de cache de mem´ria L2 por n´cleo; barramento HyperTransport o u trabalhando a 1 GHz (4 GB/s). Esse clock pode tamb´m ser referenciado como e ”2.000 MHz”; configura¸˜o de mem´ria DDR dual channel em todos os modelos; ca o conjunto de instru¸˜es SSE3 em alguns modelos. co Athlon 64 FX Originalmente a diferen¸a entre o Athlon 64 e o Athlon 64 FX era a quanti- c dade de mem´ria cache L2 (512 KB no Athlon 64 vs. 1 MB no Athlon 64 FX) o e maior flexibilidade para overclock, j´ que ele vinha com o multiplicador de a clock destravado. As principais caracter´ ısticas t´cnicas do Athlon 64 FX s˜o as seguintes: 64 e a KB de cache de L1 de instru¸˜es e 64 KB de cache L1 de dados por n´cleo; co u 1 MB de cache de L2; barramento HyperTransport trabalhando a 800 MHz (3,2 GB/s) ou 1 GHz (4 GB/s); configura¸˜o de mem´ria DDR dual channel ca o em todos os modelos; conjunto de instru¸˜es SSE3 em alguns modelos; n´cleo co u duplo nos modelos terminados em um n´mero par. O Athlon 64 FX-60 foi o u primeiro Athlon 64 FX de n´cleo duplo lan¸ado. Esta tecnologia faz com que u c o processador possua dois processadores completos em seu interior; O Athlon http://www.candidatoreal.com 64 FX-62 ´ baseado no novo soquete AM2 e, portanto, o seu controlador de e mem´ria suporta as mem´rias DDR2. o o 5.2.3 Turion 64 Lan¸ado para ser o principal concorrente do Pentium M da Intel, o Turion 64 da c AMD ´ um processador de baixo consumo voltado para o mercado de notebooks. e O Turion 64 ´ baseado na arquitetura do Athlon 64 e a principal diferen¸a e c entre o Turion 64 e o Athlon 64 Mobile ´ o consumo de energia. Uma outra e 79
  • 81. http://www.candidatoreal.com diferen¸a entre eles ´ a quantidade de mem´ria cache L2, que ´ de 1 MB nos c e o e processadores Athlon 64 Mobile, enquanto que os processadores Turion 64 po- dem ter mem´ria cache L2 de 512 KB ou 1 MB, dependendo do modelo. o Tanto o Turion 64 quanto o Athlon 64 Mobile possuem a tecnologia Pow- erNow! da AMD, que ´ similar a tecnologia Cool’n’Quiet usado pelos proces- e sadores desktop. Esta tecnologia altera o clock e a tens˜o de alimenta¸˜o do a ca processador de acordo com a carga de trabalho que esteja sendo realizada, de modo a economizar bateria. As principais caracter´ ısticas do Turion 64 s˜o as seguintes: o processador a n˜o ´ vendido com base em seu clock de opera¸˜o, mas atrav´s de um ”n´mero a e ca e u de modelo”; 64 KB de cache de L1 de instru¸˜es e 64 KB de cache L1 de dados; co 512 KB ou 1 MB de cache de mem´ria L2; barramento HyperTransport trabal- o hando a 800 MHz (3,2 GB/s); configura¸˜o de mem´ria DDR single channel; ca o soquete 754; podem acessar at´ 1 TB (terabyte) de mem´ria RAM; suporte e o a `s instru¸˜es MMX, 3Dnow!, SSE e SSE2 e SSE3; tecnologia PowerNow!; tec- co nologia EVP (Enhanced Virus Protection), tamb´m conhecida como ”NX Bit e Disable”; tecnologia de 90 nanˆmetros. o Os processadores Turion 64 est˜o dispon´ a ıveis em duas s´ries: ML, que tem e consumo m´ximo (TDP, Thermal Design Power) de 35 W, e MT, que tem con- a sumo m´ximo de 25 W. a Turion 64 X2 O Turion 64 X2 ´ um Turion 64 com tecnologia de dois n´cleos e com suporte as e u mem´rias DDR2 na configura¸˜o de dois canais (dual channel), o que significa o ca que o processador pode acessar a mem´ria a 128 bits. o O Turion 64 X2 ´ o primeiro processador para notebook da AMD com tec- e nologia de dois n´cleos e a usar o novo padr˜o de pinagem soquete S1, que uti- u a liza 638 pinos em vez dos 754 pinos usados no soquete do Turion 64. Portanto, fisicamente um Turion 64 X2 ´ menor do que um Turion 64 por ter menos pinos. e Enquanto que o concorrente do Turion 64 ´ o Pentium M, os concorrentes e do Turion 64 X2 s˜o os processadores da Intel Core Duo e Core 2 Duo (nome- a c´digo Merom). o http://www.candidatoreal.com As principais caracter´ ısticas do Turion 64 X2 s˜o as seguintes: 64 KB de a cache de L1 de instru¸˜es e 64 KB de cache L1 de dados por n´cleo; 256 ou co u 512 KB de cache de mem´ria L2 por n´cleo; barramento HyperTransport tra- o u balhando a 800 MHz (3,2 GB/s); configura¸˜o de mem´ria DDR2 dual channel; ca o soquete S1; podem acessar at´ 1 TB (terabyte) de mem´ria RAM; suporte `s e o a instru¸˜es MMX, 3Dnow!, SSE e SSE2 e SSE3; tecnologia PowerNow!; tecnolo- co gia de Virtualiza¸˜o; tencnologia EVP (Enhanced V´ ca ırus Protection); tecnologia de 90 nanˆmetros. o 80
  • 82. http://www.candidatoreal.com 5.2.4 Opteron O Opteron ´ o processador da AMD voltado para o mercado de servidores de e rede. Ele ´ baseado na arquitetura do Athlon 64. Os principais concorrentes e s˜o o Intel Xeon e Intel Itanium. a Existem duas diferen¸as principais entre o Opteron e os outros processadores c baseados na arquitetura do Athlon 64. Primeiro, v´rios modelos de Opteron a permitem o multiprocessamento sim´trico (SMP), ou seja, permitem trabalhar e com mais de um processador na placa-m˜e, enquanto que os outros proces- a sadores n˜o. a Os processadores Opteron s˜o identificados atrav´s de um ”numero de mod- a e elo”e o primeiro d´ ıgito deste n´mero indica qual ´ o grau de processamento u e sim´trico que o processador aceita: os modelos de Opteron come¸ando com e c ”1”n˜o permitem multiprocessamento sim´trico, enquanto que os modelos come¸ando a e c com ”2”permitem multiprocessamento sim´trico com at´ 2 processadores e os e e modelos come¸ando com ”8”permitem multiprocessamento sim´trico com at´ 8 c e e processadores. Processadores Opteron com suporte a mem´rias DDR usam um n´mero o u de modelo de trˆs d´ e ıgitos, enquanto que processadores Opteron com suporte a mem´rias DDR2 usam um n´mero de modelo de quatro d´ o u ıgitos. A segunda diferen¸a principal ´ no n´mero de barramentos HyperTransport c e u suportados. Todos os processadores baseados na arquitetura do Athlon 64 e os processadores Opteron iniciados com ”1”tˆm apenas um barramento Hy- e perTransport. Processadores Opteron iniciados com ”2”tˆm dois barramentos e HyperTransport (ou trˆs, no caso dos processadores Opteron de quatro d´ e ıgitos), enquanto que processadores Opteron iniciados com ”8”tˆm trˆs barramentos e e HyperTransport. Os processadores Opteron podem ser encontrados para v´rios tipos de so- a quete: Soquete 939 Existem alguns modelos de Opteron da s´rie 1 para este soquete. Eles e n˜o passam de modelos de Athlon 64 ou de Athlon 64 X2 (se tiver dois a n´cleos) com outro nome. Estes modelos trabalham com mem´rias DDR u o http://www.candidatoreal.com comuns; Soquete 940 Estes modelos necessitam mem´rias DDR ”registradas”(isto ´, com buffer), o e que ´ um tipo ”especial”de mem´ria para servidores; e o Soquete AM2 Existem alguns modelos de Opteron da s´rie 1 para este soquete. Eles e n˜o passam de modelos de Athlon 64 X2 com outro nome (por´m com a a e tecnologia de virtualiza¸ao, n˜o presente no Athlon 64 X2). Estes modelos c˜ a trabalham com mem´rias DDR2 comuns; o 81
  • 83. http://www.candidatoreal.com Soquete F Estes modelos trabalham com mem´rias DDR2 ”registradas”(isto ´, com o e buffer), que ´ um tipo ”especial”de mem´ria para servidores. e o Processadores Opteron que trabalham com mem´rias DDR2 tamb´m s˜o o e a chamados de ”Opteron de Segunda Gera¸˜o”. ca Em todos os modelos de Opteron o controlador de mem´ria usa dois canais o (dual channel), ou seja, o processador acessa a mem´ria a 128 bits, se dois o m´dulos forem usados (ou se um n´mero par de m´dulos de mem´ria forem o u o o usados). As principais caracter´ısticas t´cnicas do Opteron s˜o as seguintes: suporte e a a multiprocessamento Sim´trico; 64 KB de cache de L1 de instru¸˜es e 64 KB e co de cache L1 de dados; 1 MB de cache de mem´ria L2 por n´cleo; barramento o u HyperTransport trabalhando a 800 MHz (3,2 GB/s) ou 1 GHz (4 GB/s); con- figura¸˜o de mem´ria em dois canais (vocˆ precisa instalar dois ou um n´mero ca o e u par de m´dulos de mem´ria para usar este recurso); podem acessar at´ 1 TB o o e (terabyte) de mem´ria RAM; suporte `s instru¸˜es MMX, 3Dnow!, SSE e SSE2 o a co (SSE3 apenas nos modelos mais novos); tencnologia EVP (Enhanced V´ ırus Pro- tection); tecnologia de virtualiza¸˜o AMD-V nos modelos de quatro d´ ca ıgitos. Os seguintes modelos de Opteron s˜o encontrados: Opteron Modelos 1xx a (DDR) (soquete 940); Opteron Modelos 2xx (DDR) (soquete 940); Opteron Modelos 8xx (DDR) (soquete 940); Opteron Modelos 1xxx (DDR2) (soquete AM2); Opteron Modelos 2xxx (DDR2) (soquete F); Opteron Modelos 8xxx (DDR2) (soquete F). http://www.candidatoreal.com 82
  • 84. http://www.candidatoreal.com Parte II L´gica de Programa¸˜o o ca http://www.candidatoreal.com 83
  • 85. http://www.candidatoreal.com Cap´ ıtulo 6 Orienta¸˜o a Objetos ca 6.1 Introdu¸˜o ca A an´lise e o projeto orientados a objetos tˆm como meta identificar o melhor a e conjunto de objetos para descrever um sistema de software. O funcionamento deste sistema se d´ por meio do relacionamento e troca de mensagens entres os a objetos. Na programa¸˜o orientada a objetos, implementa-se um conjunto de classes ca que definem os objetos presentes no sistema de software. Cada classe determina o comportamento (definido nos m´todos) e os estados poss´ e ıveis (atributos) de seus objetos, assim como o relacionamento com outros objetos. As linguagens de programa¸˜o que d˜o suporte a orienta¸˜o a objetos s˜o: ca a ca a Smaltalk, Perl, Python, Ruby, PHP, ColdFusion, C++, Object Pascal, Java, JavaScript, ActionScript, Delphi e C#. 6.2 Conceitos fundamentais 1. Objetos Os objetos do mundo real compartilham duas caracter´ ısticas: possuem um estado e tem um comportamento. Por exemplo, cachorro tem um estado (nome, cor, ra¸a) e um comportamento (latindo, comendo, lambendo). c Analogamente, objetos de software s˜o modelados de acordo com os ob- a jetos do mundo real, ou seja, possuem estado e comportamento (objeto ´ e uma abstra¸˜o do mundo real). Um objeto de software armazena seu es- ca http://www.candidatoreal.com tado em vari´veis e implementa seu comportamento com m´todos. Estas a e vari´veis e m´todos s˜o formalmente chamados de vari´veis de instˆncia a e a a a e m´todos de instˆncia a fim de distingu´ e a ı-los de vari´veis e m´todos de a e classe. As vari´veis de um objeto fazem parte do seu n´cleo (centro). Os m´todos a u e envolvem e escondem o n´cleo do objeto de outros componentes da aplica¸˜o, u ca 1. Empacotar as vari´veis de um objeto sobre prote¸˜o de seus m´todos ´ a ca e e chamado de encapsulamento. O encapsulamento ´ utilizado para esconder e detalhes de implementa¸˜o pouco importante. Este ´ um dos princ´ ca e ıpios fundamentais da programa¸˜o orientada a objetos. ca 84
  • 86. http://www.candidatoreal.com Figura 6.1: Representa¸˜o de um objeto ca ` As vezes, por raz˜es de eficiˆncia ou implementa¸˜o, um objeto deseja o e ca expor algumas de suas vari´veis ou esconder alguns de seus m´todos. Esta a e capacidade de controlar quais componentes podem acessar seus m´todos e e suas vari´veis ´ chamada de Controle de Acesso. a e Cada objeto tem sua identidade que significa que dois objetos s˜o dis- a tintos mesmo que eles apresentem exatamente as mesmas caracter´ ısticas (atributos iguais). Esta identifica¸˜o de objeto deve ser unica, uniforme e ca ´ independente do conte´do do objeto. u A estrutura de dados de um objeto ´ representada em termos de atributos e (tamb´m chamados de campos (fields)), ou seja, os dados ou informa¸˜es e co do objeto. A 1 mostra um exemplo da representa¸˜o de objeto do mundo real para o ca objeto de software. Os atributos Raio, x e y s˜o as vari´veis de instˆncia. a a a Em Java, para declarar uma vari´vel de classe basta acrescentar a palavra a static. O mesmo vale para o m´todo. e http://www.candidatoreal.com Figura 6.2: Representa¸˜o do objeto do mundo real para o objeto de software ca 2. M´todos e ´ E uma rotina que ´ executada por um objeto ao receber uma mensagem. e Os m´todos determinam o comportamento dos objetos de uma classe e e s˜o an´logos `s fun¸˜es ou procedimentos da programa¸˜o estruturada. O a a a co ca envio de mensagens (chamado de m´todos) pode alterar o estado de um e objeto. 3. Atributos Os atributos s˜o os elementos que definem a estrutura de uma classe. Os a 85
  • 87. http://www.candidatoreal.com atributos tamb´m s˜o conhecidos como vari´veis de classe, e podem ser e a a divididos em dois tipos b´sicos: atributos de instˆncia e de classe. Os a a valores dos atributos de instˆncia determinam o estado de cada objeto. a Um atributo de classe possui um estado que ´ compartilhado por todos os e objetos de uma classe. Atributos de classe podem ser chamados tamb´m e de atributos est´ticos ou constantes. a As mensagens enviadas a um objeto (chamada de m´todo) podem mudar e o valor de um ou mais atributos, alterando o estado de um objeto. 4. Classes Uma classe ´ um modelo (prot´tipo) que defini as vari´veis (estado) e os e o a m´todos (comportamento) comuns a todos os objetos do mesmo tipo. Na e classe s˜o definidas as vari´veis e implementados os m´todos. Os objetos a a e s˜o criados a partir de suas classes. a As classes n˜o s˜o diretamente suportadas em todas as linguagens de ob- a a jetos, e n˜o s˜o necess´rias para que a linguagem seja orientada a objetos. a a a Al´m dos m´todos e atributos de uma classe, outros poss´ e e ıveis membros s˜o: a Construtor: define o comportamento no momento da cria¸˜o de um ob- ca jeto de uma classe; Destrutor: define o comportamento no momento da destrui¸˜o do objeto de uma classe. Normalmente utilizado para liberar ca recurso (mem´ria) do sistema; Propriedade: define o acesso a um estado o do objeto; Evento: define um ponto em que o objeto pode chamar outros procedimentos de acordo com seu comportamento e estado interno; Obs.: Lembrar sempre que a classe define as caracter´ ısticas comuns e os objetos s˜o instˆncias dessa classe, com estado pr´pria. a a o 5. Mensagens Objetos se comunicam entre si por meio do envio de mensagens. Quando um objeto A deseja que o objeto B realize um dos seus m´todos (de B), o e objeto A envia uma mensagem para o objeto B. Algumas vezes, o objeto que recebe a mensagem precisa de mais informa¸˜es para saber exata- co mente o que fazer. Por exemplo, quando vocˆ quer trocar as marchas de e uma bicicleta, deve-se indicar qual a marcha desejada. Esta informa¸˜o ca acompanha a mensagem como um parˆmetro. a Assim, trˆs componentes fazem parte de uma mensagem: e o objeto para onde a mensagem ´ endere¸ada (bicicleta); o nome do e c http://www.candidatoreal.com m´todo a realizar (mudar marcha); parˆmetro(s) necess´rios para realizar e a a o m´todo (segunda marcha); e A mensagem, tamb´m, pode ser direcionada diretamente a uma classe por e meio da invoca¸˜o de um m´todo dinˆmico. ca e a 6. Heran¸a c A heran¸a ´ um mecanismo que permite criar novas classes a partir de c e classes j´ existentes, aproveitando-se das caracter´ a ısticas existentes na classe a ser extendida. Com a heran¸a ´ poss´ c e ıvel criar classes derivadas (sub- classes) a partir de classes bases (superclasses). 86
  • 88. http://www.candidatoreal.com As subclasses herdam todas as caracter´ısticas de suas superclasses, como suas vari´veis (estado) e seus m´todos (comportamento). Entretanto, as a e subclasses n˜o est˜o limitadas ao comportamento herdado de sua super- a a classe. As subclasses podem adicionar vari´veis e m´todos a aqueles her- a e dados. As subclasses, tamb´m, podem redefinir (override) m´todos herdados e e e oferecer implementa¸˜es especializadas para estes m´todos. co e O conceito de heran¸a pode ser aplicado para mais de um n´ c ıvel. A a ´rvore de heran¸a, ou hierarquia de classe, pode ser t˜o profunda quanto c a necess´rio. Os m´todos e vari´veis s˜o herdados por meio dos n´ a e a a ıveis. Em geral, quanto mais baixa na hierarquia for a posi¸˜o da classe, mais es- ca pec´ ıfico ´ o seu comportamento. e Como benef´ ıcios do conceito de heran¸a, podemos citar: c Subclasses oferecem comportamentos especializados a partir de elementos b´sicos comuns, oferecidos pela superclasse. A utiliza¸˜o do conceito de a ca heran¸a ´ muito interessante, pois promove um grande reuso e reaproveita- c e mento de c´digo existente; Programadores podem definir classes abstratas o que determinam comportamentos gen´ricos. A superclasse abstrata define e e pode implementar parcialmente o comportamento de uma classe, mas a maioria das informa¸˜es da classe fica indefinida ou n˜o ´ implementada. co a e A heran¸a m´ltipla ocorre quando uma classe pode estender caracter´ c u ısticas de v´rias outras classes ao mesmo tempo, ou seja, quando a subclasse a possui mais de uma superclasse. Algumas linguagens evitam utilizar este mecanismo, pois pode levar uma codifica¸˜o confusa o que dificulta a ca manuten¸˜o do c´digo. A linguagem Java n˜o suporta heran¸a m´ltipla, ca o a c u apenas heran¸a simples. J´ a linguagem C++ oferece suporte ` heran¸a c a a c m´ltipla. u Uma linguagem ao utilizar heran¸a m´ltipla est´ sujeita a dois proble- c u a mas: colis˜o de nomes (nomes idˆnticos nas classes superiores) e heran¸a a e c repetida (classe herda de uma classe superior que herda de uma classe comum); 7. Polimorfismo Segundo a terminologia de orienta¸˜o a objetos, polimorfismo significa que ca uma mesma mensagem enviada a diferentes objetos resulta em um com- portamento que ´ dependente da natureza do objeto que est´ recebendo a e a mensagem. Ou seja, duas ou mais classes derivadas de uma mesma super- http://www.candidatoreal.com classe podem invocar m´todos que tˆm a mesma assinatura (nome, lista e e de parˆmetros e retorno), mas comportamentos distintos, especializado a para cada classe derivada, usando para tanto uma referˆncia a um objeto e do tipo superclasse. A decis˜o sobre qual m´todo deve ser selecionado, de acordo com o tipo da a e classe derivada, ´ tomada em tempo de execu¸˜o por meio do mecanismo e ca de liga¸˜o tardia. No caso do polimorfismo, ´ necess´rio que os m´todos ca e a e tenham exatamente a mesma identifica¸˜o, sendo utilizado o mecanismo ca de redefini¸˜o de m´todos. A seguir um exemplo de polimorfismo. ca e 87
  • 89. http://www.candidatoreal.com public abstract class OperacaoMatematica { public abstract double calcular(double x, double y); } public class Soma extends OperacaoMatematica { public double calcular(double x, double y) { return x+y; } } public class Subtracao extends OperacaoMatematica { public double calcular(double x, double y) { return x-y; } } public class Contas { public static void mostrarCalculo(OperacaoMatematica operacao, double x, double y) { system.out.println("O resultado ´: " + operacao.calcular(x, y); e } public static void main( String args[] ) { //Primeiro calculamos uma soma Contas.mostrarCalculo(new Soma(), 5, 5); //Imprime o resultado ´: 10 e Contas.mostrarCalculo(new Subtracao(), 5, 5); //Imprime o resultado ´: 0 e } } Note que, embora o m´todo calcular tenha sido chamado duas vezes no in- e terior de mostrarCalculo, o comportamento apresentado variou de acordo com a classe ao qual ele representava no momento. http://www.candidatoreal.com Os benef´ıcios do polimorfismo s˜o: a clareza e manuten¸˜o do c´digo, a a ca o divis˜o da complexidade e aplica¸˜es flex´ a co ıvies. Algumas linguagens promovem o polimorfismo principalmente por meio do uso de classes abstratas e interfaces, como ´ o caso da linguagem Java. e 8. Sobrecarga A sobrecarga ´ um tipo de polimorfismo que permite a existˆncia de v´rios e e a m´todos de mesmo nome, por´m com assinaturas levemente diferentes, ou e e seja, variando no n´mero e tipo de argumentos e o valor de retorno. Ficar´ u a a cargo de o compilador escolher de acordo com as listas de argumento os procedimentos ou m´todos a serem executados. Por exemplo: e 88
  • 90. http://www.candidatoreal.com public class Soma { public int Soma (int x, int y) { return x+y; } public String Soma (String x, String y) { return x+y; } public double Soma (double x, double y) { return x+y; } } 9. Interfaces Uma interface ´ uma cole¸˜o de defini¸˜es de m´todos abstratos (sem im- e ca co e ´ plementa¸˜o). E utilizada para os objetos interagirem entre si. A classe ca que implementa a interface deve implementar todos os m´todos definidos e na interface. Uma interface, tamb´m, pode incluir declara¸˜es de con- e co stantes. Apesar de uma classe abstrata implementar m´todos abstratos, n˜o se e a pode confundir interface com classe abstrata. As classes abstratas n˜o a podem ser instanciadas, e estas s´ s˜o utilizadas como superclasses. Por o a exemplo, comida no mundo real. N˜o existe uma instˆncia (objeto) do a a tipo comida. O que existe s˜o instˆncias de cenouras, ma¸˜s, bananas, etc. a a ca Comida representa o conceito abstrato e n˜o ´ capaz de criar uma instˆncia a e a pr´pria. As classes abstratas podem possuir m´todos implementados. o e Em Java, para definir uma interface utiliza-se a palavra interface. Emb- ora, uma classe n˜o possa conter mais de uma superclasse, a classe pode a implementar mais de uma interface. Por este motivo, muitas das vezes as interfaces s˜o apresentadas como uma alternativa para heran¸a m´ltipla a c u de classes. http://www.candidatoreal.com 10. Pacotes Para tornar as classes mais f´ceis de serem encontradas e utilizadas, para a evitar conflitos de nomes e para controlar o acesso, pode-se agrupar classes relacionadas em pacotes (packages). Os pacotes organizam as classes e as interfaces relacionadas. Cada pacote criado corresponde a um diret´rio, o ou seja, as classes e as interfaces de um mesmo pacote devem estar em um mesmo diret´rio. o A utiliza¸˜o de pacotes proporciona as seguintes vantagens: ca Fica mais f´cil para outros programadores determinar quais classes e in- a terfaces est˜o relacionadas; Os nomes das classes de um pacote n˜o ir˜o a a a 89
  • 91. http://www.candidatoreal.com conflitar com nomes e classes de outros pacotes; Pode-se permitir que classes dentro de um mesmo pacote tenham acesso irrestrito entre si, e restringir o acesso por parte de classes definidas fora do pacote. Em Java, para criar um pacote coloca-se a palavra chave package no in´ ıcio do arquivo onde a classe ou interface ´ definida. e Obs.: Apenas os membros (classe, vari´veis e m´todos) p´blicos s˜o acess´ a e u a ıveis fora do pacote onde foram definidos. Obs.: Para uma linguagem ser considerada verdadeiramente orientada a objetos, a linguagem de programa¸˜o deve oferecer, no m´ ca ınimo, as carac- ter´ ısticas de: encapsulamento, heran¸a e polimorfismo. c 6.3 Princ´ıpios de programa¸˜o orientada a ob- ca jetos Basicamente, os princ´ıpios de programa¸˜o orientada a objetos s˜o: ca a Classes, objetos e instˆncias; Campos, m´todos e propriedades; Sobrecarga; a e Heran¸a e classes hier´rquicas; Polimorfismo; Interfaces. c a 6.4 Tratamento de exce¸˜es co O termo exce¸˜o ´ usado para designar um evento que ocorre durante a execu¸˜o ca e ca de um programa que desvia o fluxo normal de instru¸˜es. Em outras palavras, co uma exce¸˜o ´ uma condi¸˜o provocada por uma situa¸˜o excepcional que requer ca e ca ca uma a¸˜o espec´ ca ıfica imediata. Muitos tipos de erros podem causar exce¸˜es: co problemas que variam desde erros s´rios de hardware, tal como uma falha no e disco r´ ıgido, a erros simples de programa¸˜o, tal como tentar acessar um ´ ca ındice inexistente de um vetor, divis˜o por zero, um objeto n˜o inicializado, etc. a a Erros causam exce¸˜es, mas podem existir exce¸˜es que n˜o s˜o erros. Por co co a a exemplo, numa fun¸˜o que lˆ dados de um arquivo, a chegada ao final do arquivo ca e ´ uma condi¸˜o excepcional que pode ser considerada como exce¸˜o. e ca ca Linguagens como ADA, C++, JAVA e EIFFEL possuem mecanismos pr´prios o de tratamento de exce¸˜es que facilitam a vida dos programadores tornando co ainda o c´digo mais leg´ uma vez que separam o c´digo principal do c´digo o ıvel o o de tratamento do erro. Quando uma exce¸˜o ocorre, ela necessita ser tratada. A unidade ou bloco ca de c´digo que manipula a exce¸˜o ´ denominada tratador de exce¸˜o e a a¸˜o o ca e ca ca http://www.candidatoreal.com de indicar a ocorrˆncia de exce¸˜o e transferir o controle para o tratador de e ca exce¸˜o ´ denominada sinaliza¸˜o da exce¸˜o. ca e ca ca Tratadores de exce¸˜o se comportam como procedimentos chamados implici- ca tamente pela ocorrˆncia de uma exce¸˜o. Como tratadores de exce¸˜o n˜o s˜o e ca ca a a chamados diretamente, eles n˜o possuem nome. Em sua defini¸˜o costumam a ca conter vari´veis locais e bloco de c´digo de tratamento. J´ as exce¸˜es devem a o a co possuir nome bem definido para que possam ser identificadas. Caso o tratador que capturou a exce¸˜o n˜o tenha conhecimento suficiente ca a para tratar a exce¸˜o ele pode lan¸ar a exce¸˜o para um n´ superior (propaga¸˜o ca c ca ıvel ca da exce¸˜o). Assim pode-se gerar uma cadeia de propaga¸˜o at´ que um trata- ca ca e dor capture a exce¸˜o ou at´ atingir-se o n´ ca e ıvel mais alto da hierarquia dos 90
  • 92. http://www.candidatoreal.com tratadores onde normalmente um tratador padr˜o ser´ executado na sa´ do a a ıda programa. Outra quest˜o importante ´ o ponto de retorno ap´s a execu¸˜o do bloco a e o ca de c´digo do tratador. Isto depender´ do modelo de continua¸˜o adotado pelo o a ca mecanismo de tratamento de exce¸˜o. Em geral, adota-se um dos seguintes ca modelos de continua¸˜o: ca Termina¸˜o: assume que o erro ´ cr´ ca e ıtico e que n˜o existem condi¸˜es de a co retornar ao ponto onde a exce¸˜o foi gerada, retornando o controle para o n´ ca ıvel superior. Nesta alternativa a unidade onde ocorreu a exce¸˜o e todas as unidades ca na pilha de chamada de subprogramas at´ onde o tratador de exce¸˜o foi execu- e ca tado s˜o encerradas, continuando-se a execu¸˜o do programa na unidade onde a ca o tratador foi encontrado, ap´s a regi˜o de tratamento; Retomada: assume-se o a que o erro pode ser corrigido e a execu¸˜o pode retornar para o bloco onde ca ocorreu a exce¸˜o. Portanto, o retorno ´ feito para o bloco gerador do erro. ca e Embora, em princ´ ıpio, essa solu¸˜o pare¸a ser a mais apropriada, a experiˆncia ca c e tem mostrado que essa alternativa raramente ´ efetiva. e Normalmente, as linguagens tˆm adotado o modelo de termina¸˜o. Em Java, e ca a exce¸˜o ´ um tipo especial de objeto que ´ criado quando algo sai de errado ca e e em um programa. Ap´s criar uma exce¸˜o, o ambiente de execu¸˜o envia este o ca ca ca ´ objeto ao seu programa, numa a¸˜o denominada levantar uma exce¸˜o. E re- ca sponsabilidade do programa capturar esta exce¸˜o. Para capturar uma exce¸˜o ca ca utilizam-se as cl´usulas try (blocos de c´digos protegidos) e catch (tratadores a o de exce¸˜es). Para passar para frente a exce¸˜o, utiliza-se a palavra trhows. As co ca exce¸˜es em Java s˜o instˆncias da classe Exception (superclasse) ou de suas co a a herdeiras. http://www.candidatoreal.com 91
  • 93. http://www.candidatoreal.com Parte III Metodologia de Desenvolvimento http://www.candidatoreal.com 92
  • 94. http://www.candidatoreal.com Cap´ ıtulo 7 Ciclo de Vida Um modelo de ciclo de vida ou modelo de processo pode ser visto como uma representa¸˜o abstrata de um esqueleto de processo, incluindo tipicamente algu- ca mas atividades principais, a ordem de precedˆncia entre elas e, opcionalmente, e artefatos requeridos e produzidos. De maneira geral, um modelo de processo de- screve uma filosofia de organiza¸˜o de atividades, estruturando as atividades do ca processo em fases e definindo como essas fases est˜o relacionadas. Entretanto, a ele n˜o descreve um curso de a¸˜es preciso, recursos, procedimentos e restri¸˜es. a co co Ou seja, ele ´ um importante ponto de partida para definir como o projeto deve e ser conduzido, mas a sua ado¸˜o n˜o ´ o suficiente para guiar e controlar um ca a e projeto de software na pr´tica. a Ainda que os processos tenham de ser definidos caso a caso, de maneira geral, o ciclo de vida de um software envolve, pelo menos, as seguintes fases: Planejamento O objetivo do planejamento de projeto ´ fornecer uma estru- e tura que possibilite ao gerente fazer estimativas razo´veis de recursos, a custos e prazos. Uma vez estabelecido o escopo de software, com os req- uisitos esbo¸ados, uma proposta de desenvolvimento deve ser elaborada, c isto ´, um plano de projeto deve ser elaborado configurando o processo e ` a ser utilizado no desenvolvimento de software. A medida que o projeto progride, o planejamento deve ser detalhado e atualizado regularmente. Pelo menos ao final de cada uma das fases do desenvolvimento (an´lise a e especifica¸˜o de requisitos, projeto, implementa¸˜o e testes), o planeja- ca ca mento como um todo deve ser revisto e o planejamento da etapa seguinte deve ser detalhado. O planejamento e o acompanhamento do progresso http://www.candidatoreal.com fazem parte do processo de gerˆncia de projeto. e An´lise e Especifica¸˜o de Requisitos Nesta fase, o processo de levanta- a ca mento de requisitos ´ intensificado. O escopo deve ser refinado e os req- e uisitos mais bem definidos. Para entender a natureza do software a ser constru´ıdo, o engenheiro de software tem de compreender o dom´ ınio do problema, bem como a funcionalidade e o comportamento esperados. Uma vez capturados os requisitos do sistema a ser desenvolvido, estes devem ser modelados, avaliados e documentados. Uma parte vital desta fase ´ e a constru¸˜o de um modelo descrevendo o que o software tem de fazer (e ca n˜o como fazˆ-lo). a e 93
  • 95. http://www.candidatoreal.com Projeto Esta fase ´ respons´vel por incorporar requisitos tecnol´gicos aos req- e a o uisitos essenciais do sistema, modelados na fase anterior e, portanto, re- quer que a plataforma de implementa¸˜o seja conhecida. Basicamente, ca envolve duas grandes etapas: projeto da arquitetura do sistema e projeto detalhado. O objetivo da primeira etapa ´ definir a arquitetura geral do e software, tendo por base o modelo constru´ na fase de an´lise de req- ıdo a uisitos. Essa arquitetura deve descrever a estrutura de n´ ıvel mais alto da aplica¸˜o e identificar seus principais componentes. O prop´sito do ca o projeto detalhado ´ detalhar o projeto do software para cada componente e identificado na etapa anterior. Os componentes de software devem ser su- cessivamente refinados em n´ ıveis maiores de detalhamento, at´ que possam e ser codificados e testados. Implementa¸˜o O projeto deve ser traduzido para uma forma pass´ ca ıvel de execu¸˜o pela m´quina. A fase de implementa¸˜o realiza esta tarefa, isto ca a ca ´, cada unidade de software do projeto detalhado ´ implementada. e e Testes inclui diversos n´ ıveis de testes, a saber, teste de unidade, teste de in- tegra¸˜o e teste de sistema. Inicialmente, cada unidade de software im- ca plementada deve ser testada e os resultados documentados. A seguir, os diversos componentes devem ser integrados sucessivamente at´ se obter o e sistema. Finalmente, o sistema como um todo deve ser testado. Entrega e Implanta¸˜o uma vez testado, o software deve ser colocado em ca produ¸˜o. Para tal, contudo, ´ necess´rio treinar os usu´rios, configurar ca e a a o ambiente de produ¸˜o e, muitas vezes, converter bases de dados. O ca prop´sito desta fase ´ estabelecer que o software satisfaz os requisitos o e dos usu´rios. Isto ´ feito instalando o software e conduzindo testes de a e aceita¸˜o. Quando o software tiver demonstrado prover as capacidades ca requeridas, ele pode ser aceito e a opera¸˜o iniciada. ca Opera¸˜o nesta fase, o software ´ utilizado pelos usu´rios no ambiente de ca e a produ¸˜o. ca Manuten¸˜o Indubitavelmente, o software sofrer´ mudan¸as ap´s ter sido en- ca a c o tregue para o usu´rio. Altera¸˜es ocorrer˜o porque erros foram encon- a co a trados, porque o software precisa ser adaptado para acomodar mudan¸asc em seu ambiente externo, ou porque o cliente necessita de funcionalidade adicional ou aumento de desempenho. Muitas vezes, dependendo do tipo e porte da manuten¸˜o necess´ria, essa fase pode requerer a defini¸˜o de ca a ca http://www.candidatoreal.com um novo processo, onde cada uma das fases precedentes ´ re-aplicada no e contexto de um software existente ao inv´s de um novo. e Os modelos de processo, de maneira geral, contemplam as fases An´lise e Especi- a fica¸˜o de Requisitos, Projeto, Implementa¸˜o, Testes e Entrega e Implanta¸˜o. ca ca ca A escolha de um modelo de processo ´ fortemente dependente das caracter´ e ısticas do projeto. Assim, ´ importante conhecer alguns modelos de ciclo de vida e em e que situa¸˜es s˜o aplic´veis. co a a 94
  • 96. http://www.candidatoreal.com 7.1 Modelo seq¨ encial linear u Algumas vezes chamado de ciclo de vida cl´ssico ou modelo em cascata, o modelo a seq¨encial linear requer uma abordagem sistem´tica seq¨encial para o desem- u a u penho do software. Abrange as seguintes atividades: Modelagem e engenharia do sistema. Estabelecimento de todos os requi- sitos do sistema, aloca¸˜o de algum desses requisitos para o software. ca An´lise de requisitos de software. O processo de defini¸˜o de requisitos ´ a ca e intensificado e focalizado especificamente no software. Os requisitos do sistema do spftware s˜o documentados e revistos com o cliente. a Projeto. Traduz os requisitos para uma representa¸˜o do software, que pode ca ser avaliada quanto ` qualidade, antes que a codifica¸˜o tenha in´ a ca ıcio. En- foca quatro atributos distintos: estrutura de dados, arquitetura do soft- ware, representa¸˜es da interface e detalhes procedimentais (algoritmicos). co Gera¸˜o de c´digo. O projeto ´ traduzido para linguagem de m´quina. ca o e a Teste. S˜o conduzidos para descobrir erros e garantir que entradas definidas a produzir˜o resultados reais, que concordam com os resultados exigidos. a Manuten¸˜o. O software ir´ inevitavelmente sofrer modifica¸˜es. A manuten¸˜o ca a co ca reaplica cada uma das fases precedentes a um programa existente. O modelo seq¨encial linear ´ o mais amplamente usado. Entre os problemas u e encontrados quando esse modelo ´ aplicado s˜o: e a 1. Modifica¸˜es podem causar confus˜o ` medida que o projeto prossegue, co a a pois o modelo acomoda intera¸˜o apenas indiretamente. ca 2. Exige que o cliente estabele¸a todos os requisitos explicitamente. c 3. Uma vers˜o execut´vel do programa s´ ficar´ dispon´ quando o projeto a a o a ıvel terminar. 7.2 Modelo em V O modelo em V ´ uma varia¸˜o do modelo em cascata que procura enfatizar e ca a estreita rela¸˜o entre as atividades de teste (teste de unidade, teste de in- ca tegra¸˜o, teste de sistema e teste de aceita¸˜o) e as demais fases do processo, ca ca http://www.candidatoreal.com como mostra a figura 7.1. O modelo em V sugere que os testes de unidade s˜o utilizados basicamente a para verificar a implementa¸ao e o projeto detalhado. Uma vez que os testes c˜ de integra¸˜o est˜o focados na integra¸˜o das unidades que comp˜em o soft- ca a ca o ware, eles tamb´m s˜o usados para avaliar o projeto detalhado. Assim, testes e a de unidade e integra¸˜o devem garantir que todos os aspectos do projeto do ca sistema foram implementados corretamente no c´digo. Quando os testes de in- o tegra¸˜o atingem o n´ do sistema como um todo (teste de sistema), o projeto ca ıvel da arquitetura passa a ser o foco. Neste momento, busca-se verificar se o sis- tema atende aos requisitos definidos na especifica¸˜o. Finalmente, os testes de ca aceita¸˜o, conduzidos tipicamente pelos usu´rios e clientes, valida os requisitos, ca a 95
  • 97. http://www.candidatoreal.com confirmando que os requisitos corretos foram implementados no sistema (teste de valida¸˜o). A conex˜o entre os lados direito e esquerdo do modelo em V ca a implica que, caso sejam encontrados problemas em uma atividade de teste, a correspondente fase do lado esquerdo e suas fases subseq¨entes podem ter de u ser executadas novamente para corrigir ou melhorar esses problemas. Figura 7.1: O modelo em V Os modelos seq¨enciais pressup˜em que o sistema ´ entregue completo, ap´s u o e o a realiza¸˜o de todas as atividades do desenvolvimento. Entretanto, nos dias ca de hoje, os clientes n˜o est˜o mais dispostos a esperar o tempo necess´rio para a a a tal, sobretudo, quando se trata de grandes sistemas. Dependendo do porte do sistema, podem se passar anos at´ que o sistema fique pronto, sendo invi´vel e a esperar. Assim, outros modelos foram propostos visando a, dentre outros, re- duzir o tempo de desenvolvimento. A entrega por partes, possibilitando ao usu´rio dispor de algumas funcionalidades do sistema enquanto outras est˜o a a sendo ainda desenvolvidas, ´ um dos principais mecanismos utilizados por esses e modelos, como veremos a seguir. 7.3 Modelo de prototipagem O paradigma de prototipagem come¸a com a defini¸˜o dos requisitos. Um projeto c ca r´pido ´ realizado e concentra-se na representa¸˜o daqueles aspectos que ficar˜o a e ca a vis´ ıveis pelo cliente. O prot´tipo ´ criado e avaliado e ´ ajustado para satisfazer o e e as necessidades do cliente. http://www.candidatoreal.com Idealmente, o prot´tipo serve como um mecanismo para identifica¸˜o dos o ca requisitos do software. A prototipagem pode ser problem´tica, pois o cliente vˆ a e o que parece ser uma vers˜o execut´vel do software, ignorando que o prot´tipo a a o apenas consegue funcionar precariamente. 7.4 Modelo RAD O desenvolvimento r´pido de aplica¸ao (rapid application development, RAD ´ a c˜ e um modelo incremental que enfatiza o ciclo de desenvolvimento extremamente curto. Abrange as seguintes fases: 96
  • 98. http://www.candidatoreal.com Modelagem do neg´cio. O fluxo de informa¸˜o entre as fun¸˜es do neg´cio o ca co o ´ modelado. e Modelagem dos dados. O fluxo de informa¸˜o ´ refinado num conjunto de ca e objetos de dados. Modelagem do processo. Os objetos de dados s˜o tranformados para con- a seguir o fluxo de informa¸˜o necess´rio para implementar uma fun¸˜o do ca a ca neg´cio. Descri¸˜es do processamento s˜o criadas. o co a Gera¸˜o da aplica¸˜o. O RAD considera o uso de t´cnicas de quarta gera¸˜o. ca ca e ca O processo RAD trabalha para reusar componentes de programas exis- tentes ou criar componentes reus´veis. a Teste e entrega. Os componentes novos devem ser testados e todas as inter- faces devem ser exaustivamente exercitadas. As desvantagens do RAD s˜o: a 1. O RAD exige desenvolvedores e clientes compromissados com atividades continuamente r´pidas. a 2. Nem todos tipo de de aplica¸˜o s˜o apropriados para o RAD. ca a 3. Quando riscos t´cnicos s˜o elevados o RAD n˜o ´ adequado. e a a e 7.5 Modelos de processo de software evolucion´rios a 7.5.1 Modelo incremental Este modelo ´ uma extens˜o do modelo espiral sendo por´m mais formal e e a e rigoroso. O desenvolvimento de um produto comercial de software ´ uma grande e tarefa que pode ser estendida por v´rios meses, possivelmente um ano ou mais. a Por isso, ´ mais pr´tico dividir o trabalho em partes menores ou itera¸˜es. Cada e a co itera¸˜o resultar´ num incremento. Itera¸˜es s˜o passos em fluxo de trabalho e ca a co a incrementos s˜o crescimentos do produto. a O princ´ ıpio subjacente ao processo incremental e iterativo ´ que a equipe e envolvida possa refinar e alargar paulatinamente a qualidade, detalhe e ˆmbito a do sistema envolvido. Por exemplo, numa primeira itera¸˜o deve-se identificar a vis˜o global e de- ca a terminar a viabilidade econˆmica do sistema, efetuar a maior parte da an´lise o a http://www.candidatoreal.com e um pouco de desenho e implementa¸˜o. Numa segunda gera¸˜o, deve-se con- ca ca cluir a an´lise, fazer uma parte significativa do desenho e um pouco mais de a implementa¸˜o. Numa terceira itera¸˜o, deve-se concluir o desenho, fazer-se ca ca parte substancial da implementa¸˜o, testar e integrar um pouco, etc. Ou seja, ca a principal consequˆncia da aproxima¸˜o iterativa ´ que os produtos finais de e ca e todo o processo v˜o sendo amadurecidos e completados ao longo do tempo, mas a cada itera¸˜o produz sempre um conjunto de produtos finais. ca A cada itera¸˜o s˜o realizadas as seguintes tarefas: ca a An´lise. Refinamento de requisitos, refinamento do modelo conceitual. a Projeto. Refinamento do projeto arquitetural, projeto de baixo n´ ıvel. 97
  • 99. http://www.candidatoreal.com Implementa¸˜o. Codifica¸˜o e testes. ca ca Transi¸˜o para produto. Ddocumenta¸˜o, instala¸˜o, . . .. ca ca ca Vantagens do processo incremental e iterativo: • Possibilidade de avaliar mais cedo os riscos e pontos cr´ ıticos do projeto, e identificar medidas para os eliminar ou controlar. • Redu¸˜o dos riscos envolvendo custos a um unico incremento. Se a equipe ca ´ que desenvolve o software precisar repetir a itera¸˜o, a organiza¸˜o perde ca ca somente o esfor¸o mal direcionado de uma itera¸˜o, n˜o o valor de um c ca a produto inteiro. • Defini¸˜o de uma arquitetura que melhor possa orientar todo o desenvolvi- ca mento. • Disponibiliza¸˜o natural de um conjunto de regras para melhor controlar ca os inevit´veis pedidos de altera¸˜es futuras. a co • Permite que os v´rios intervenientes possam trabalhar mais efetivamente a pela intera¸˜o e partilha de comunica¸˜o da´ resultante. ca ca ı 7.5.2 Modelo espiral O modelo original em espiral organiza o desenvolvimento como um processo it- erativo em que v´rios conjuntos de fases se sucedem at´ se obter o sistema final. a e Um ciclo se inicia com a determina¸˜o de objetivos, alternativas e restri¸˜es ca co (primeira tarefa) onde ocorre o comprometimento dos envolvidos e o estabeleci- mento de uma estrat´gia para alcan¸ar os objetivos. Na segunda tarefa, an´lise e c a e avalia¸˜o de alternativas, identifica¸˜o e solu¸˜o de riscos, executa-se uma ca ca ca an´lise de risco. Prototipa¸˜o ´ uma boa ferramenta para tratar riscos. Se o a ca e risco for considerado inaceit´vel, pode parar o projeto. Na terceira tarefa ocorre a o desenvolvimento do produto. Neste quadrante pode-se considerar o modelo cascata. Na quarta tarefa o produto ´ avaliado e se prepara para iniciar um e novo ciclo. Varia¸˜es do modelo espiral consideram entre trˆs e seis tarefas ou setores co e da espiral, que podem ser: • comunica¸˜o com o cliente; ca • planejamento; http://www.candidatoreal.com • an´lise de risco; a • engenharia; • constru¸˜o e libera¸˜o; ca ca • avalia¸˜o do cliente. ca O modelo espiral ´, atualmente a abordagem mais real´ e ıstica para desen- volvimento de software em grande escala, e usa uma abordagem que capacita a empresa que presta o servi¸o, e o cliente a entender e reagir aos riscos em c cada etapa evolutiva. Este tipo de modelo exige consider´vel experiˆncia na a e determina¸˜o de riscos e depende dessa experiˆncia para ter sucesso. ca e 98
  • 100. http://www.candidatoreal.com Vantagens deste modelo: • O modelo em espiral permite que ao longo de cada itera¸˜o se obtenham ca vers˜es do sistema cada vez mais completas, recorrendo ` prototipagem o a para reduzir os riscos. • Este tipo de modelo permite a abordagem do refinamento seguido pelo modelo em cascata, mas que incorpora um enquadramento iterativo que reflete, de uma forma bastante real´ ıstica, o processo de desenvolvimento. Desvantagens: • Pode ser dif´ convencer grandes clientes (particularmente em situa¸˜es ıcil co de contrato) de que a abordagem evolutiva ´ control´vel. e a • A abordagem deste tipo de modelo exige consider´vel experiˆncia na avalia¸˜o a e ca dos riscos e baseia-se nessa experiˆncia para o sucesso. Se um grande risco e n˜o for descoberto, poder˜o ocorrer problemas. a a • Este tipo de modelo ´ relativamente novo e n˜o tem sido amplamente e a usado. ´ • E importante ter em conta que podem existir diferen¸as entre o prot´tipo c o e o sistema final. O prot´tipo pode n˜o cumprir os requisitos de desem- o a penho, pode ser incompleto, e pode refletir somente alguns aspectos do sistema a ser desenvolvido. • O modelo em espiral pode levar ao desenvolvimento em paralelo de m´ltiplas u partes do projeto, cada uma sendo abordada de modo diferenciado, por isso ´ necess´rio o uso de t´cnicas espec´ e a e ıficas para estimar e sincronizar cronogramas, bem como para determinar os indicadores de custo e pro- gresso mais adequados. 7.5.3 Modelo espiral ganha-ganha As melhores noegocia¸˜es buscam um resultado ganha-ganha. Isto ´, o cliente co e ganha obtendo um produto ou sistema que satisfaz ` maior parte das necessi- a dades do cliente, e o desenvolvedor ganha trabalhando com or¸amentos e prazos c de entrega real´ ısticos e poss´ ıveis de serem cumpridos. O modelo espiral ganha-ganha define um conjunto de atividades de nego- cia¸˜o no come¸o de cada passagem, em torno da espiral. Ao inv´s de uma unica ca c e ´ atividade de comunica¸˜o com o cliente,as seguintes atividades s˜o definidas: ca a http://www.candidatoreal.com 1. Identifica¸˜o dos principais interessados do sistema ou do subsistema. ca 2. Determina¸˜o das condi¸˜es de lucro do interessado. ca co 3. Negocia¸˜o das condi¸˜es de ganho do interessado para reconcili´-las no ca co a a ˆmbito das condi¸˜es ganha-ganha para todos os envolvidos. co Al´m da ˆnfase na negocia¸˜o inicial, o modelo espiral ganha-ganha introduz e e ca trˆs marcos de processo, chamados pontos de ancoragem, que ajudam a esta- e belecer quendo um ciclo ´ completado em torno da espiral e fornecem marcos e de decis˜o antes do projeto de software presseguir. Esses pontos de ancoragem a s˜o: a 99
  • 101. http://www.candidatoreal.com Objetivos de ciclo de vida (life cycle objectives, LCO). Define um con- junto de objetivos para cada atividade principal. Arquitetura do ciclo de vida (life cycle architecture, LCA). Estabelece objetivos que precisam ser satisfeitos, ` medida que a arquitetura do sis- a tema, e do software, ´ definida. e Capacidade operacional inicial (initial operational capability, IOC). Representa um conjunto de objetivos associado com a prepara¸˜o do software para ca instala¸˜o e distribui¸˜o. ca ca 7.5.4 Modelo de desenvolvimento concorrente O modelo de desenvolvimento concorrente ´ representado como uma s´rie de e e grandes atividades t´cnicas, tarefas e seus estados associados. Ele define uma e s´rie de eventos que podem disparar transi¸˜es de um estado para outro, para e co ´ cada uma das atividades da engenharia de software. E freq¨entemente usado u como um paradigma para o desenvolvimento de aplica¸˜es Cliente/Servidor. co Pode ser aplicado a todo tipo de desenvolvimento de software e fornece uma vis˜o exata de como est´ o estado do projeto. a a 7.6 Desenvolvimento baseado em componentes O desenvolvimento baseado em componentes incorpora caracter´ ısticas de tec- nologias orientadas a objetos no modelo espiral. A atividade de engenharia come¸a com a identifica¸˜o de classes candidatas. Se a classe existe, ela ser´ re- c ca a utilizada. Se a classe n˜o existe, ela ser´ desenvolvida nos moldes do paradigma a a de orienta¸˜o a objetos. ca 7.7 Modelo de m´todos formais e O modelo de m´todos formais compreende um conjunto de atividades que de- e terminam uma especifica¸˜o matem´tica para o software. Uma variante dessa ca a abordagem ´ denominada engenharia de software cleanroon (Sala Simpa). Uti- e lizando m´todos formais eliminam-se muitos problemas encontrados nos outros e modelos, como p.ex., ambig¨idade, incompletitude e inconsistˆncia, que podem u e ser corrigidas mais facilmente de forma n˜o ad hoc, mas atrav´s de an´lise a e a matem´tica. a http://www.candidatoreal.com 7.8 T´cnicas de quarta gera¸˜o e ca As t´cnicas de quarta gera¸˜o concentram-se na capacidade de se especificar o e ca software a uma m´quina em um n´ que esteja pr´ximo ` linguagem natural. a ıvel o a Engloba um conjunto de ferramentas de software que possibilitam que: • O sistema seja especificado em uma linguagem de alto n´ ıvel. • O c´digo fonte seja gerado automaticamente a partir dessas especifica¸˜es. o co Atividades das t´cnicas de quarta gera¸˜o englobam: e ca 100
  • 102. http://www.candidatoreal.com Obten¸˜o dos Requisitos. O cliente descreve os requisitos os quais s˜o traduzi- ca a dos para um prot´tipo operacional. Os principais problemas s˜o: o a • O cliente pode estar inseguro quanto aos requisitos. • O cliente pode ser incapaz de especificar as informa¸˜es de um modo co que uma ferramenta 4GL possa realizar. • As 4GLs atuais n˜o s˜o sofisticadas suficientemente para acomodar a a a verdadeira linguagem natural. Estrat´gia de projeto. : Para pequenas aplica¸˜es ´ poss´ e co e ıvel mover-se do passo de obten¸˜o dos requisitos para o passo de implementa¸˜o usando ca ca uma Linguagem de 4G. Para grandes projetos ´ necess´rio desenvolver e a uma estrat´gia de projeto. De outro modo ocorrer˜o os mesmos problemas e a encontrados quando se usa abordagem convencional (baixa qualidade). Implementa¸˜o usando 4GL. Os resultados desejados s˜o representados de ca a modo que haja gera¸˜o autom´tica de c´digo. Deve existir uma estrutura ca a o de dados com informa¸oes relevantes e que seja acess´ pela 4GL . c˜ ıvel Teste. O desenvolvedor deve efetuar testes e desenvolver uma documenta¸˜o ca significativa. O software desenvolvido deve ser constru´ de maneira que ıdo a manuten¸˜o possa ser efetuada prontamente. ca http://www.candidatoreal.com 101
  • 103. http://www.candidatoreal.com Cap´ ıtulo 8 An´lise Comparativa de a Processos de Desenvolvimento Um processo de desenvolvimento de software pode ser visto como um guia para o desenvolvimento e deve estabelecer: as atividades a serem realizadas durante o desenvolvimento de software, sua estrutura e organiza¸˜o (decomposi¸˜o e ca ca precedˆncia de atividades), incluindo a defini¸˜o de um modelo de ciclo de vida; e ca os artefatos requeridos e produzidos por cada uma das atividades do processo; os procedimentos (m´todos, t´cnicas e normas) a serem adotados na realiza¸˜o e e ca das atividades; os recursos necess´rios para a realiza¸˜o das atividades, dentre a ca eles recursos humanos, recursos de hardware e recursos de software, incluindo as ferramentas a serem utilizadas para apoiar a aplica¸˜o dos procedimentos na ca realiza¸˜o das atividades; e roteiros para a elabora¸˜o dos principais documentos ca ca (artefatos) gerados no desenvolvimento. Entre as principais metodologias em uso no mercado de software atualmente est˜o RUP e XP. a De maneira geral, o ciclo de vida de um software envolve, pelo menos, as atividades de planejamento, levantamento de requisitos, an´lise, projeto, imple- a menta¸˜o, testes, implanta¸˜o, opera¸˜o e manuten¸˜o. ca ca ca ca Uma vez que o software ´ sempre parte de um sistema (ou neg´cio) maior, e o o trabalho come¸a pelo estabelecimento dos requisitos para todos os elementos c do sistema e, na seq¨ˆncia, procede-se a aloca¸˜o para software de algum sub- ue ca conjunto destes requisitos. Esta etapa ´ a Engenharia de Sistemas e antecede a e http://www.candidatoreal.com todas as demais relacionadas. 8.1 RUP - Rational Unified Process O Processo Unificado proposto pela Rational (Rational Unified Process – RUP) foi criado para apoiar o desenvolvimento orientado a objetos, fornecendo uma forma sistem´tica para se obter reais vantagens no uso da Linguagem de Mod- a elagem Unificada (Unified Modeling Language – UML). De fato, ele n˜o ´ ex- a e atamente um processo: ´ uma infraestrutura gen´rica de processo que pode ser e e 102
  • 104. http://www.candidatoreal.com especializada para uma ampla classe de sistemas de software, para diferentes a ´reas de aplica¸˜o, tipos de organiza¸˜o, n´ ca ca ıveis de competˆncia e tamanhos de e projetos. O RUP est´ fundamentado em trˆs princ´ a e ıpios b´sicos: orienta¸˜o a casos a ca de uso, arquitetura e itera¸˜o. Ele ´ dito dirigido a casos de uso, pois s˜o os ca e a casos de uso que orientam todo o processo de desenvolvimento. Com base no modelo de casos de uso, s˜o criados uma s´rie de modelos de an´lise, projeto a e a ´ e implementa¸˜o, que realizam estes casos de uso. E centrado em arquitetura, ca pois defende a defini¸˜o de um esqueleto para a aplica¸˜o (a arquitetura), a ca ca ganhar corpo gradualmente ao longo do desenvolvimento. Finalmente, o RUP ´ e iterativo e incremental, oferecendo uma abordagem para particionar o trabalho em por¸˜es menores ou mini-projetos. Esses trˆs conceitos s˜o igualmente im- co e a portantes. A arquitetura provˆ a estrutura para guiar o desenvolvimento do e sistema em itera¸˜es, enquanto os casos de uso definem as metas e conduzem o co trabalho de cada itera¸˜o. ca O ciclo de vida adotado no RUP ´ tipicamente evolutivo. Contudo, uma e forma de organiza¸˜o em fases ´ adotada para comportar os ciclos de desen- ca e volvimento, permitindo uma gerˆncia mais efetiva de projetos complexos. Ao e contr´rio do tradicionalmente definido como fases na maioria dos modelos de a ciclo de vida – planejamento, levantamento de requisitos, an´lise, projeto, im- a plementa¸˜o e testes, s˜o definidas fases ortogonais a estas, a saber: ca a Concep¸˜o nesta fase, ´ estabelecido o escopo do projeto e suas fronteiras, ca e determinando os principais casos de uso do sistema. Esses casos de uso devem ser elaborados com a precis˜o necess´ria para se proceder estima- a a tivas de prazos e custos. As estimativas devem ser globais para o projeto como um todo e detalhadas para a fase seguinte. Assim, a ˆnfase nesta e etapa recai sobre o planejamento e, por conseguinte, ´ necess´rio levan- e a tar requisitos do sistema e preliminarmente analis´-los. Ao t´rmino dessa a e fase, s˜o examinados os objetivos do projeto para se decidir sobre a con- a tinuidade do desenvolvimento; Elabora¸˜o o prop´sito desta fase ´ analisar mais refinadamente o dom´ ca o e ınio do problema, estabelecer uma arquitetura de funda¸˜o s´lida, desenvolver um ca o plano de projeto para o sistema a ser constru´ e eliminar os elementos ıdo de projeto que oferecem maior risco. Embora o processo deva sempre acomodar altera¸˜es, as atividades da fase de elabora¸˜o asseguram que co ca os requisitos, a arquitetura e os planos est˜o suficientemente est´veis e que a a os riscos est˜o suficientemente mitigados, de modo a se poder prever com a http://www.candidatoreal.com precis˜o os custos e prazos para a conclus˜o do desenvolvimento. a a Constru¸˜o durante esta fase, um produto completo ´ desenvolvido de maneira ca e iterativa e incremental, para que esteja pronto para a transi¸˜o ` comu- ca a nidade usu´ria. a Transi¸˜o nesta fase, o software ´ disponibilizado ` comunidade usu´ria. Ap´s ca e a a o o produto ter sido colocado em uso, naturalmente surgem novas consid- era¸˜es que v˜o demandar a constru¸˜o de novas vers˜es para permitir co a ca o ajustes do sistema, corrigir problemas ou concluir algumas caracter´ısticas que foram postergadas. 103
  • 105. http://www.candidatoreal.com ´ E importante real¸ar que dentro de cada fase, um conjunto de itera¸˜es, c co envolvendo planejamento, levantamento de requisitos, an´lise, projeto e imple- a menta¸˜o e testes, ´ realizado. Contudo, de uma itera¸˜o para outra e de uma ca e ca fase para a pr´xima, a ˆnfase sobre as v´rias atividades muda, como mostra o e a a figura 8.1, em que a cor preta indica grande ˆnfase, enquanto a cor branca e indica muito pouca ˆnfase. Na fase de concep¸˜o, o foco principal recai sobre e ca o entendimento dos requisitos e a determina¸˜o do escopo do projeto (plane- ca jamento e levantamento de requisitos). Na fase de elabora¸˜o, o enfoque est´ ca a na captura e modelagem dos requisitos (levantamento de requisitos e an´lise), a ainda que algum trabalho de projeto e implementa¸˜o seja realizado para pro- ca totipar a arquitetura, evitando certos riscos t´cnicos. Na fase de constru¸˜o, o e ca enfoque concentra-se no projeto e na implementa¸˜o, visando evoluir e rechear ca o prot´tipo inicial, at´ obter o primeiro produto operacional. Finalmente, a o e fase de transi¸˜o concentra-se nos testes, visando garantir que o sistema pos- ca sui o n´ıvel adequado de qualidade. Al´m disso, usu´rios devem ser treinados, e a caracter´ısticas ajustadas e elementos esquecidos adicionados. Figura 8.1: A ˆnfase principal de cada uma das fases e Al´m dos conjuntos de itera¸˜es em cada fase, as fases em si podem ocorrer e co de forma iterativa. Como mostra a figura 8.2, elas n˜o necessariamente tˆm a a e mesma dura¸˜o. O esfor¸o realizado em cada uma varia fortemente em fun¸˜o ca c ca das circunstˆncias espec´ a ıficas do projeto. http://www.candidatoreal.com Figura 8.2: O modelo de ciclo de vida proposto no RUP 104
  • 106. http://www.candidatoreal.com 8.2 XP - Extreme Programming A metodologia XP (Extreme Programming) ´ destinada a grupos pequenos de e desenvolvimento, e em projetos de dura¸˜o de at´ 36 meses. Os principais papeis ca e nesta metodologia s˜o: Programador - foco da metodologia; Coach - respons´vel a a por quest˜es t´cnicas do projeto, maior conhecimento do processo,valores e o e pr´ticas XP. Verifica o comportamento da equipe; Tracker - Coletar sinais vi- a tais do projeto uma ou 2 vezes por semana e mantem todos informados; Gerente - respons´vel pelos assuntos administrativos,mantem um forte relacionamento a com o cliente. Entre as principais caracteristicas da metodologia XP est˜o: (i) Met´foras a a - Utiliza¸˜o de compara˜es e analogias para facilitar entendimento; (ii)Design ca o Simples do Sistema; (iii)Testes Automatizados - Testes de Unidade e de Aceita¸˜o; ca (iv)Refactoring - Todo desenvolvedor tem o dever de melhorar um c´digo que es- o teja funcionado por´m mal escrito; (v)Programa¸ao de Dupla- Todo c´digo deve e c˜ o ser implementado em dupla; (vi)Propriedade Coletiva do C´digo; (vii)Semana o de 40 horas - Evitar trabalhar a mais. Incialmente se obtem resultados, mas depois h´ o desgaste; (viii)Integra¸˜o cont´ a ca ınua - Eliminar erros graves de in- tegra¸˜o; (ix)Releases Curtos - Release ´ um conjunto de funcionalidade bem ca e definidas e que representam algum valor para o cliente. Um projeto XP pode ter um ou mais releases no seu ciclo; (x)Story Cards - Cartoes escritos pelos usu´rios onde s˜o descritas funcionalidades do sistema; (xi)CRC - Linguagem a a para Modelagem de Classes do XP. Utiliza os story cards. 8.3 Scrum Scrum ´ um processo para construir software incrementalmente em ambientes e complexos, onde os requisitos n˜o s˜o claros ou mudam com muita freq¨ˆncia. a a ue Em Rugby, Scrum ´ um time de oito integrantes que trabalham em conjunto e para levar a bola adiante no campo. Ou seja: times trabalhando como uma unidade altamente integrada com cada membro desempenhando um papel bem definido e o time inteiro focando num unico objetivo. ´ O objetivo do Scrum ´ fornecer um processo conveniente para projetos e e desenvolvimento orientado a objetos. A metodologia ´ baseada em princ´ e ıpios semelhantes aos de XP: equipes pequenas, requisitos pouco est´veis ou descon- a hecidos, e itera¸˜es curtas para promover visibilidade para o desenvolvimento. co No entanto, as dimens˜es em Scrum diferem de XP. o http://www.candidatoreal.com Scrum divide o desenvolvimento em sprints de 30 dias. Equipes pequenas, de at´ 7 pessoas, s˜o formadas por projetistas, programadores, engenheiros e e a gerentes de qualidade. Estas equipes trabalham em cima de funcionalidade (os requisitos, em outras palavras) definidas no in´ de cada sprint. A equipe toda ıcio ´ respons´vel pelo desenvolvimento desta funcionalidade. e a Todo dia, ´ feita uma reuni˜o de 15 minutos onde o time exp˜es ` gerˆncia e a o a e o que ser´ feito no pr´ximo dia, e nestas reuni˜es os gerentes podem levantar a o o os fatores de impedimento, e o progresso geral do desenvolvimento. Scrum ´ interessante porque fornece um mecanismo de informa¸˜o de status e ca que ´ atualizado continuamente, e porque utiliza a divis˜o de tarefas dentro e a da equipe de forma explicita. Scrum e XP s˜o complementares pois Scrum a 105
  • 107. http://www.candidatoreal.com provˆ pr´ticas ´geis de gerenciamento enquanto XP provˆ pr´ticas integradas e a a e a de engenharia de software. 8.4 Crystal Crystal/Clear faz parte, na realidade, de um conjunto de metodologias criado por Cockburn. As premissas apresentadas para a existˆncia deste conjunto s˜o: e a • Todo projeto tem necessidades, conven¸˜es e uma metodologia diferentes. co • O funcionamento do projeto ´ influenciado por fatores humanos, e h´ e a melhora neste quando os indiv´ ıduos produzem melhor. • Comunica¸˜o melhor e lan¸amentos freq¨entes reduzem a necessidade de ca c u construir produtos intermedi´rios do processo. a Crystal/Clear ´ uma metodologia direcionada a projetos pequenos, com e equipes de at´ 6 desenvolvedores. Assim como com SCRUM, os membros da e equipe tem especialidades distintas. Existe uma forte ˆnfase na comunica¸˜o e ca entre os membros do grupo. Existem outras metodologias Crystal para grupos maiores. Toda a especifica¸˜o e projeto s˜o feitos informalmente, utilizando quadros ca a publicamente vis´ ıveis. Os requisitos s˜o elaborados utilizando casos de uso, um a conceito similar `s est´rias de usu´rio em XP, onde s˜o enunciados os requisitos a o a a como tarefas e um processo para sua execu¸˜o. ca As entregas das novas vers˜es de software s˜o feitos em incrementos regu- o a lares de um mˆs, e existem alguns subprodutos do processo que s˜o respons- e a abilidade de membros espec´ ıficos do projeto. Grande parte da metodologia ´ e pouco definida, e segundo o autor, isto ´ proposital; a id´ia de Crystal/Clear ´ e e e permitir que cada organiza¸˜o implemente as atividades que lhe parecem ade- ca quadas, fornecendo um m´ ınimo de suporte util do ponto de vista de comunica¸˜o ´ ca e documentos. 8.5 Feature Driven Development (FDD) • M´todo ´gil e adaptativo e a • Foco nas fases de desenho e constru¸˜o. ca • Interage com outras metodologias. http://www.candidatoreal.com • N˜o exige nenhum processo espec´ a ıfico de modelagem. • Possui desenvolvimento iterativo. • Enfatiza aspectos de qualidade durante o processo e inclui entregas freq¨entes u e tang´ ıveis. • Suporta desenvolvimento ´gil com r´pidas adapta¸˜es `s mudan¸as de a a co a c requisitos e necessidades do mercado. O FDD consiste de 5 processos principais: 106
  • 108. http://www.candidatoreal.com • Desenvolver um modelo compreens´ (Develop an overall model). ıvel • Construir uma lista de funcionalidades (Build a features list). • Planejar por funcionalidade (Plan By Feature). • Projetar por funcionalidade (Design by feature). • Construir por funcionalidade (Build by feature). 8.6 Dynamic Systems Development Method (DSDM) ´ Progenitor do XP. E um arcabou¸o para desenvolvimento r´pido de aplica¸˜es c a co (RAD). Fixa tempo e recursos ajustando a quantia de funcionalidades. Funciona com pequenas equipes. Suporta mudan¸as nos requisitos durante o ciclo de vida. c Consiste em cinco fases: • Estudo das possibilidades (Feasibility study). • Estudo dos neg´cios (Business study). o • Itera¸˜o do modelo funcional (Functional model iteration). ca • Itera¸˜o de projeto e constru¸˜o (Design and build iteration). ca ca • Implementa¸˜o final (Final implementation). ca Pr´ticas: a • Usu´rio sempre envolvido. a • Equipe do DSDM autorizada a tomar decis˜es. o • Foco na frequente entrega de produtos. • Adapta¸˜o ao neg´cio ´ o crit´rio para entregas. ca o e e • ”Construa o produto certo antes de vocˆ constru´ corretamente”. e ı-lo • Desenvolvimento iterativo e incremental. • Mudan¸as s˜o revers´ c a ıveis utilizando pequenas itera¸˜es. co • Requisitos s˜o acompanhados em alto n´ a ıvel. http://www.candidatoreal.com • Testes integrados ao ciclo de vida. 8.7 Adaptive Software Development (ASD) ´ E iterativo e incremental. Funciona bem em sistemas grandes e complexos. E´ ´ Arcabou¸o para evitar o caos. O cliente deve estar sempre presente. E uma c metodologia voltada para o desenvolvimento de aplica¸˜es em conjunto (Joint co Application development - JAD). Possui trˆs ciclos de fase: e 107
  • 109. http://www.candidatoreal.com Especular (Speculate). Fixa prazos e objetivos e define um plano baseado em componentes. Colaborar (Collaborate). Constru¸˜o concorrente de v´rios componentes. ca a Aprender (Learn). Repetitivas revis˜es de qualidade e foco na demostran¸˜o o ca das funcionalidades desenvolvidas (Learning loop). H´ presen¸a do cliente a c e de especialistas do dom´ ınio. ´ Os ciclos duram de 4 a 8 semanas. E orientado a miss˜es (Mission-driven), o pois atividades s˜o justificadas atrav´s de uma miss˜o, que pode mudar ao longo a e a ´ do projeto. E baseado em componentes e interativo. Os prazos s˜o pr´-fixados a e (time-boxed), pois for¸a os participantes do projeto a definir severamente de- c cis˜es do projeto. Uma propriedade interessante ´ a tolerˆncia a mudan¸as o e a c (Change-tolerant). As mudan¸as s˜o freq¨entes, ent˜o ´ sempre melhor es- c a u a e tar pronto a adapt´-las do que control´-las. Isso ´ feito atrav´s de constante a a e e avalia¸˜o de quais componentes podem mudar. ca http://www.candidatoreal.com 108
  • 110. http://www.candidatoreal.com Cap´ ıtulo 9 Engenharia de Requisitos 9.1 O Processo de Engenharia de Requisitos As descri¸˜es das fun¸˜es que um sistema deve incorporar e das restri¸˜es que co co co devem ser satisfeitas s˜o os requisitos para o sistema. Isto ´, os requisitos de a e um sistema definem o que o sistema deve fazer e as circunstˆncias sob as quais a deve operar. Em outras palavras, os requisitos definem os servi¸os que o sistema c deve fornecer e disp˜em sobre as restri¸˜es ` opera¸˜o do mesmo. o co a ca Requisitos s˜o, normalmente, classificados em requisitos funcionais e n˜o a a funcionais. Requisitos funcionais, como o pr´prio nome indica, apontam as o fun¸˜es que o sistema deve fornecer e como o sistema deve se comportar em de- co terminadas situa¸˜es. J´ os requisitos n˜o funcionais descrevem restri¸˜es sobre co a a co as fun¸˜es oferecidas, tais como restri¸˜es de tempo, de uso de recursos etc. Al- co co guns requisitos n˜o funcionais dizem respeito ao sistema como um todo e n˜o a a a funcionalidade espec´ıfica. Dependendo da natureza, os requisitos n˜o funcionais a podem ser classificados de diferentes maneiras, tais como requisitos de desem- penho, requisitos de portabilidade, requisitos legais, requisitos de conformidade etc. Os processos de engenharia de requisitos variam muito de uma organiza¸˜o ca para outra, mas, de maneira geral, a maioria dos processos de Engenharia de Requisitos ´ composta das seguintes atividades: e Levantamento (ou Descoberta ou Elicita¸˜o) de Requisitos Nesta fase, ca os usu´rios, clientes e especialistas de dom´ a ınio s˜o identificados e trabal- a ham junto com os engenheiros de requisitos para descobrir, articular e http://www.candidatoreal.com entender a organiza¸˜o como um todo, o dom´ ca ınio da aplica¸˜o, os proces- ca sos de neg´cio espec´ o ıficos, as necessidades que o software deve atender e os problemas e deficiˆncias dos sistemas atuais. e An´lise de Requisitos visa a estabelecer um conjunto acordado de requisitos a consistentes e sem ambig¨idades, que possa ser usado como base para u o desenvolvimento do software. Para tal, diversos tipos de modelos s˜o a constru´ıdos. Documenta¸˜o de Requisitos ´ a atividade de representar os resultados da ca e Engenharia de Requisitos em um documento (ou conjunto de documentos), contendo os requisitos do software. 109
  • 111. http://www.candidatoreal.com Verifica¸˜o e Valida¸˜o de Requisitos A verifica¸˜o de requisitos avalia se ca ca ca o documento de Especifica¸˜o de Requisitos est´ sendo constru´ de ca a ıdo forma correta, de acordo com padr˜es previamente definidos, sem con- o ter requisitos amb´ ıguos, incompletos ou, ainda, requisitos incoerentes ou imposs´ıveis de serem testados. J´ a valida¸˜o diz respeito a avaliar se esse a ca documento est´ correto, ou seja, se os requisitos e modelos documentados a atendem `s reais necessidades e requisitos dos usu´rios / cliente. a a Gerˆncia de Requisitos se preocupa em gerenciar as mudan¸as nos requisi- e c tos j´ acordados, manter uma trilha dessas mudan¸as, gerenciar os rela- a c cionamentos entre os requisitos e as dependˆncias entre o documento de e requisitos e os demais artefatos produzidos no processo de software, de forma a garantir que mudan¸as nos requisitos sejam feitas de maneira c controlada e documentada. 9.2 T´cnicas de Levantamento de Requisitos e 9.2.1 Observa¸˜o ca A observa¸˜o possibilita um contato pessoal e estreito do pesquisador com o ca fenˆmeno pesquisado, o que apresenta uma s´rie de vantagens. As t´cnicas de o e e observa¸˜o s˜o extremamente uteis para ”descobrir”aspectos novos de um prob- ca a ´ lema. Isto se torna crucial nas situa¸˜es em que n˜o existe uma base te´rica co a o s´lida que oriente a coleta de dados. Ao mesmo tempo em que o contato direto o e prolongado do pesquisador com a situa¸˜o pesquisada apresenta as vantagens ca mencionadas, envolve tamb´m uma s´rie de problemas. Algumas cr´ e e ıticas s˜o a feitas ao m´todo de observa¸ao, primeiramente por provocar altera¸˜es no am- e c˜ co biente ou no comportamento das pessoas observadas. Outra cr´ ıtica ´ a de que e este m´todo se baseia muito na interpreta¸˜o pessoal. Al´m disso h´ criticas no e ca e a sentido de que o grande envolvimento do pesquisador leve a uma vis˜o distorcida a do fenˆmeno ou a uma representa¸˜o parcial da realidade. o ca 9.2.2 Entrevista Entrevista ´ uma t´cnica de elicita¸˜o de requisitos muito usada. O engenheiro e e ca de requisitos ou analista discute o sistema com diferentes usu´rios , a partir da a qual elabora um entendimento de seus requisitos. H´, basicamente, 2 tipos de a entrevista: a) entrevistas fechadas onde o engenheiro de requisitos procura as perguntas para um conjunto um pr´-definido de quest˜es; b) entrevistas abertas e o http://www.candidatoreal.com onde n˜o h´ agenda pr´definida e o engenheiro de requisitos discute, de modo a a e aberto, o que os usu´rios querem do sistema. Entrevistas podem ser efetivas a para desenvolver um entendimento do problema e para elicitar muitos requisitos gerais do sistema. Usu´rios finais s˜o usualmente felizes para descreverem seus a a trabalhos e as dificuldades que eles enfrentam de forma relativamente natural, entretanto eles podem ter expectativas n˜o realistas sobre o suporte que o com- a putador dar´. Portanto, entrevistas s˜o muito menos efetivas para entendimento a a do dom´ ınio da aplica¸˜o e para o entendimento das quest˜es organizacionais as ca o quais afetam os requisitos. 110
  • 112. http://www.candidatoreal.com 9.2.3 An´lise de Protocolo a A an´lise de protocolo pede a pessoa se engajar em alguma tarefa e corrente- a ` mente falar sobre esta tarefa, explicando o seu pensamento do processo. Usu´rios a alegam que esse tipo de linguagem pode ser considerada uma ”verbaliza¸˜o di- ca reta do processo cognitivo espec´ ıfico”. A an´lise de protocolo n˜o ´ um guia a a e confi´vel sobre o que as pessoas est˜o pensando, ela est´ sujeita a problemas a a a de interpreta¸˜es pelos analistas. A restri¸˜o em estudar protocolos ´ que as co ca e pessoas podem produzir linguagens que oferece um perfil de atividade cogni- tiva autˆnoma. Segundo (Goguen, 1997), mesmo se fosse poss´ conseguir um o ıvel perfil de atividade cognitiva autˆnoma da pessoa, tal objeto seria inapropriado o para o processo de requisitos, porque o cliente n˜o tem qualquer modelo mental a pr´-existente do sistema desejado. Os clientes tˆm conhecimento sobre neg´cios e e o e necessidades organizacionais, enquanto o time de requisitos tem conhecimento sobre as possibilidade t´cnicas. e 9.2.4 JAD JAD ´ uma marca registrada da IBM. O tema principal do JAD ´ colocar e e autoridades representativas e gerenciais juntas dentro de um workshop estrutu- rado para promover decis˜es. Segundo (Damian, 1997) JAD consiste de 5 fases: o defini¸˜o do projeto, pesquisa, prepara¸˜o para a sess˜o JAD, a sess˜o JAD, o ca ca a a documento final. As fases de defini¸˜o de projeto e pesquisa no processo JAD ca lidam com a coleta de informa¸˜es. A sess˜o JAD ´ ent˜o usada para validar co a e a as informa¸˜es recolhidas nas fases anteriores. O processo JAD concentrase na co sess˜o JAD, e deste modo JAD contribui para a elicita¸˜o de requisitos como a ca significado para validar as informa¸˜es j´ colhidas. Na sess˜o JAD, as pessoas co a a certas tˆm que estar envolvidas, e a presen¸a de um facilitador pode ajudar a e c manter a sess˜o focalizada e minimizar ataques e defesas emocionais improdu- a tivas. JAD promove coopera¸˜o, entendimento, e trabalho em grupo entre os ca v´rios grupos de usu´rios e o pessoal de sistemas de informa¸˜o. a a ca 9.2.5 PD Tradicionalmente valores democr´ticos, os quais tem sido levados em conta no a processo de projeto, tem sido somente aqueles concentrados em fatores t´cnicos e e econˆmicos. Mas com o uso do PD fatores t´cnicos-sociais tem sido levados em o e conta. O projeto deveria ser feito com o usu´rio. Aprendizado m´tuo deveria a u ser uma parte importante do trabalho em um grupo de projeto, n˜o sendo a meramente uma visita aos laborat´rios de pesquisa. Trabalhadores e clientes s˜o o a http://www.candidatoreal.com inteligentes e criativos, contribuidores produtivos para as organiza¸˜es, desde co que sejam encorajados a expressarem seus desejos, aplicarem sua esperteza e exercitarem suas capacidades de tomar decis˜es, assumindo responsabilidades o do impacto de suas a¸˜es. co 9.2.6 QFD O termo qualidade ´ definido como ”um conjunto de meios para produzir eco- e nomicamente produtos ou servi¸os, os quais satisfa¸am os requisitos do cliente”. c c QFD ´ ”um conceito que provˆ meios de interpretar requisitos do cliente em req- e e uisitos t´cnicos, apropriados para cada est´gio do desenvolvimento e produ¸˜o e a ca 111
  • 113. http://www.candidatoreal.com do produto”(Damian, 1997). As fases iniciais do QFD podem ser descritas como sendo ”simplesmente um sistema de identifica¸˜o e prioriza¸˜o das necessidades ca ca do cliente obtidas de cada recurso avaliado”. QFD ´ um conceito que aplica-se e bem para a elicita¸˜o de requisitos, especialmente num modelo de elicita¸˜o ca ca onde a voz do cliente ´ o guia para a cria¸˜o de requisitos. e ca 9.2.7 CRC Como definido em (Zhu, 1998), CRC ´ uma sess˜o de grupo, que ´ similar ao e a e JAD, onde os pap´is dos participantes e o papel do facilitador s˜o claramente e a definidos. Em CRC, participantes consistem n˜o somente de usu´rios e facilita- a a dor, mas tamb´m de outras pessoas envolvidas indiretamente no sistema. CRC e ´ diferente de JAD e QFD pois ele foca-se no usu´rio operativo. e a 9.2.8 Prototipa¸˜o ca Este m´todo para elicita¸˜o de requisitos utiliza-se do uso de uma t´cnica de e ca e prototipa¸˜o para a avalia¸˜o do usu´rio. O conjunto inicial de requisitos ´ ca ca a e usado como base para criar o Prot´tipo de Interface do Usu´rio com o sis- o a tema inicial (simplificado). Para essa cria¸˜o, o projetista precisa manter o ca prot´tipo t˜o simples quanto poss´ o a ıvel. O ponto forte desta atividade ´ apre- e sentar muitas alternativas para o usu´rio antes de se gastar muito esfor¸o para a c qualquer prot´tipo em particular. Ap´s a aceita¸˜o do prot´tipo pelos usu´rios, o o ca o a os desenvolvedores precisam criar um documento de especifica¸˜o dos requisitos ca paralelo ao prot´tipo de interface (McConnel, 1998). o 9.2.9 Cen´rios a Usu´rios finais e outros agentes do sistema acham a utiliza¸˜o de cen´rios mais a ca a f´ceis para relacionar-se aos exemplos da vida real do que descri¸˜es abstratas a co das fun¸˜es realizadas pelo sistema. Por essa raz˜o, ´ freq¨entemente util desen- co a e u ´ volver um conjunto de intera¸ao dos cen´rios, e usar estes para elicitar e clarear c˜ a requisitos de sistema. Cen´rios s˜o exemplos de sess˜es de intera¸˜o as quais a a o ca s˜o concentradas com um tipo unico de intera¸˜o entre um usu´rio final e o sis- a ´ ca a tema. Usu´rios finais simulam suas intera¸˜es usando cen´rios. Eles explicam a co a para o time de engenheiros de requisito o que eles est˜o fazendo e a informa¸˜o a ca da qual eles precisam do sistema para descrever a tarefa descrita no cen´rio. a 9.2.10 FAST http://www.candidatoreal.com T´cnicas facilitadas de especifica¸˜o de aplica¸˜es (facilitated application spec- e ca co ification techniques). Consiste nos seguintes passos: 1. Reuni˜es iniciais entre o cliente e o desenvolvedor (sess˜o de perguntas e o a respostas). Produzem como resultado a solicita¸˜o de produto. ca 2. S˜o selecionados local, hor´rio e data para o FAST e ´ escolhido um facil- a a e itador. 3. A solicita¸˜o de produto ´ distribu´ para todos os participantes antes ca e ıda da data da reuni˜o. a 112
  • 114. http://www.candidatoreal.com ´ 4. E solicitado a cada participante que fa¸a uma lista dos objetos que s˜o c a parte do ambiente , uma lista de servi¸os (processos ou fun¸˜es), uma c co lista de restri¸˜es (custo, tamanho, regras de neg´cio) e crit´rios de de- co o e sempenho. 5. Quando a reuni˜o a FAST come¸a, o primeiro t´pico de discuss˜o ´ a a c o a e necessidade e a justificativa do produto. 6. Cada um apresenta suas listas, cr´ ıticas e debates s˜o proibidos nesta etapa. a 7. Uma lista combinada que elimina objetos redundantes ´ produzida, mas e n˜o apaga nada. a 8. A lista ´ modificada com uma discuss˜o dirigida pelo facilitador. O pro- e a duto ´ a lista de consenso. e 9. A equipe ´ subdividida em equipes menores; cada uma trabalha para e produzir miniespecifica¸oes, ou seja, detalham cada objeto da lista de c˜ consenso. 10. As equipes apresentam suas miniespecifica¸˜es e a lista ´ modificada no- co e vamente atrav´s de discuss˜es. e o 11. Cada participante da reuni˜o cria os crit´rios de valida¸˜o para os elemen- a e ca tos da lista. 12. Uma lista de consenso de crit´rios de valida¸˜o ´ criada. e ca e 13. Algu´m fica respons´vel em redigir o rascunho completo das especifica¸˜o. e a ca 9.3 An´lise de Requisitos a A an´lise de requisitos ´ uma atividade de engenharia de software que vence a e o espe¸o entre a engenharia de requisitos, no n´ c ıvel de sistema, e o projeto de software. As atividades de engenharia de requisitos resultam na especifica¸˜o ca das caracter´ısticas operacionais do software (fun¸˜o, dados e comportamento). ca A an´lise de requisitos constr´i modelos de dom´ a o ınio que fornecem ao projetista uma vis˜o do software. a A especifica¸˜o de requisitos ´ produzida no auge da tarefa de an´lise. Alguns ca e a padr˜es sugerem que uma especifica¸˜o de requisitos deve conter: o ca http://www.candidatoreal.com Introdu¸˜o. Declara as metas e objetivos do software. ca Descri¸˜o da informa¸˜o. Fornece uma descri¸˜o detalhada do problema que ca ca ca o software deve resolver. O conte´do, fluxo e estrutura da informa¸˜o s˜o u ca a documentados. Descri¸˜o funcional. Uma narrativa de processamento ´ fornecida para cada ca e fun¸˜o. ca Descri¸˜o comportamental. Examina a opera¸˜o do software como conseq¨ˆncia ca ca ue de eventos externos e caracter´ ısticas de controle geradas internamente. 113
  • 115. http://www.candidatoreal.com Crit´rios de valida¸˜o. Informa como devemos reconhecer uma implementa¸˜o e ca ca bem-sucedida e quais classes de testes devem ser conduzidas para validar a fun¸˜o, o desempenho e as restri¸˜es. ca co Bibliografia e apˆndice. A bibliografia cont´m todos os documentos que se e e relacionam ao software. O apˆndice cont´m informa¸˜es que suplementa e e co as especifica¸˜es. co 9.3.1 M´todos de an´lise e a Entre os mais importantes m´todos de an´lise, trˆs se destacam: A an´lise estru- e a e a turada, a an´lise essencial e a an´lise orientada a objetos. A seguir discutiremos a a suas principais caracter´ ısticas. An´lise estruturada a A An´lise Estruturada adota uma vis˜o de desenvolvimento baseada em um a a modelo entrada-processamento-sa´ıda. No paradigma estruturado, os dados s˜o a considerados separadamente das fun¸˜es que os transformam e a decomposi¸˜o co ca funcional ´ usada intensamente. e An´lise essencial a Os m´todos orientados a fun¸oes conduzem o desenvolvimento de software estru- e c˜ turando as aplica¸˜es segundo a ´tica das fun¸˜es (a¸˜es) que o sistema dever´ co o co co a realizar. Os m´todos orientados a dados, por sua vez, enfatizam a identifica¸˜o e ca e estrutura¸˜o dos dados, subjugando a an´lise das fun¸˜es para um segundo ca a co plano. Esses m´todos tˆm origem no projeto de bancos de dados e, geralmente, e e tˆm no modelo de Entidades e Relacionamentos (ER) sua principal ferramenta. e A an´lise essencial ´ uma metodologia estruturada, sendo uma evolu¸˜o da a e ca an´lise estruturada. Essa metodologia procurou conciliar as abordagens ori- a entadas a dados e a fun¸˜es em um unico m´todo, utilizando modelos para co ´ e dados, fun¸˜es e controles (DFDs, DERs e Diagramas de Transi¸˜o de Estados, co ca respectivamente) como ferramentas para a modelagem de sistemas. An´lise orientada o objeto a A orienta¸˜o a objetos pressup˜e que o mundo ´ composto por objetos, onde ca o e um objeto ´ uma entidade que combina estrutura de dados e comportamento e funcional. No paradigma orientado a objetos, os sistemas s˜o estruturados a a http://www.candidatoreal.com partir dos objetos que existem no dom´ ınio do problema, isto ´, os sistemas s˜o e a modelados como um n´mero de objetos que interagem. u 9.3.2 Modelagem da an´lise a DFD’s Ferramenta de modelagem utilizada para descrever a transforma¸˜o de entradas ca em sa´ıdas. Representa um sistema como uma rede de processos interligados ´ entre si por fluxos de dados e dep´sitos de dados. E a ferramenta de modelagem o mais importante da an´lise estruturada. Junto com o DER, ´ a ferramenta mais a e importante da an´lise essencial. Seus componentes s˜o: a a 114
  • 116. http://www.candidatoreal.com Processo. Tamb´m chamado de fun¸˜o, bolha ou transforma¸˜o, o processo e ca ca representa as transforma¸˜es realizadas sobre os dados em um sistema e co correspondem a fun¸˜es ou procedimentos que um sistema tem que prover. co ´ E representado graficamente por c´ ırculos e deve ter um nome composto por um verbo e um objeto. Fluxo de dados. Representa uma cole¸˜o de itens de dados em movimento. E ca ´ representado graficamente atrav´s de uma seta entrando ou saindo de um e processo, com a ponta indicando o sentido do fluxo. Deve ter associado um nome o mais significativo poss´ıvel, de modo a facilitar a valida¸˜o do ca diagrama com os usu´rios. Esse nome deve ser um substantivo que facilite a a identifica¸˜o da cole¸˜o de dados transportada. ca ca Dep´sito de dados. O dep´sito de dados ´ utilizado para modelar um reposit´rio o o e o ´ de uma cole¸˜o de pacotes de dados em repouso. E representado grafica- ca mente por duas linhas paralelas com um nome que represente seu conte´do u e que normalmente ´ o plural do nome dos pacotes transportados pelos e fluxos para dentro e para fora do dep´sito. o Terminador ou entidade externa. Entidades externas ou terminadores s˜o a fontes ou destinos de dados do sistema. Representam os elementos do am- biente com os quais o sistema se comunica. Tipicamente, uma entidade externa ´ uma pessoa (p.ex. um cliente), um grupo de pessoas (p. ex. um e departamento da empresa ou outras institui¸˜es) ou um outro sistema que co interaja com o sistema em quest˜o. Uma entidade externa deve ser iden- a tificada por um nome e representada por um retˆngulo. Assim como no a caso dos dep´sitos de dados, em diagramas complexos, podemos desenhar o um mesmo terminador mais de uma vez, para se evitar o cruzamento de linhas de fluxos de dados ou para impedir que longas linhas de fluxos de dados saiam de um lado a outro do diagrama. Quando o software ´ complexo, devemos organizar o DFD em n´ e ıveis. Dois DFDs especiais est˜o presentes em qualquer modelo funcional: a Contexto. Mostra o sistema como uma caixa-preta, trocando informa¸˜es (fluxos co de dados) com entidades externas ao sistema. N´ ´ ıvel 0 - Geral ou de Sistema. E uma decomposi¸˜o do diagrama de con- ca texto, mostrando o funcionamento do sistema em quest˜o, isto ´, as grandes a e fun¸˜es do sistema e as interfaces entre elas. Os processos nesse diagrama co u ´ recebem os n´meros 1, 2, 3, etc. . . E necess´rio assegurar a coerˆncia en- a e http://www.candidatoreal.com tre os diagramas de contexto e de n´ 0, isto ´, assegurar que os fluxos ıvel e de dados entrando ou saindo do diagrama efetivamente reproduzem as en- tradas e sa´ ıdas do diagrama de contexto. Neste diagrama, devem aparecer os dep´sitos de dados necess´rios para a sincroniza¸˜o dos processos. o a ca Dicion´rio de Dados a O dicion´rio de dados ´ uma listagem organizada de todos os elementos de a e dados pertinentes ao sistema, com defini¸˜es precisas para que os usu´rios e co a desenvolvedores possam conhecer o significado de todos os itens de dados. Ex- emplificando para uma estrutura de dados ”nome”: nome = t´ ıtulo-cortesia + 115
  • 117. http://www.candidatoreal.com primeiro-nome + (nome-intermedi´rio) + ultimo-nome, t´ a ´ ıtulo-cortesia = [Sr. — Sra. — Srta. — Dr. — Professor] etc. . . Aspectos de an´lise essencial a O modelo comportamental determina o comportamento interno do sistema para que este possa interagir corretamente com o ambiente. Ap´s a constru¸˜o do o ca modelo comportamental, teremos os seguintes artefatos: Diagrama de Entidades e Relacionamentos. Diagramas de Fluxos de Dados Preliminar (DFD Particionado por Eventos). Para cada evento do sistema, deve ser constru´ um DFD. ıdo Diagramas de Fluxos de Dados Organizados em N´ ıveis Hier´rquicos. a Representa os processos em n´ ıveis hier´rquicos, a partir do diagrama zero. a Diagramas de Transi¸˜o de Estados. Representa o comportamento das en- ca tidades e relacionamentos com atributos ao longo do tempo. Ser´ con- a stru´ um DTE para cada entidade ou relacionamento com atributo do ıdo DER que possuir comportamento significativo, isto ´, possuir mais de um e estado ao longo de seu ciclo de vida. Dicion´rio de Dados. Descreve os dados representados no DER, nos DFDs a e nos DTEs. Especifica¸˜o da L´gica dos Processos (Mini-especifica¸˜es). Descreve ca o co a l´gica dos processos do DFD que n˜o foram detalhados em diagramas o a de n´ inferior (l´gica dos processos primitivos). ıvel o Como podemos perceber, a an´lise essencial faz uso praticamente das mesmas a t´cnicas de modelagem da an´lise estruturada, a saber a modelagem de dados e a (utilizando modelos de entidades e relacionamentos), a modelagem funcional (utilizando Diagramas de Fluxo de Dados - DFDs) e a modelagem de controle (utilizando diagramas de transi¸˜o de estados). Isso ´ bastante natural, j´ ca e a que a an´lise essencial ´, de fato, uma extens˜o da an´lise estruturada. Na a e a a realidade, a principal diferen¸a entre a an´lise essencial e a an´lise estruturada c a a est´ na estrat´gia para atacar o problema: a primeira defende uma abordagem a e baseada em eventos, onde a an´lise de eventos passa a ser um passo fundamental, a a segunda ´ baseada apenas na decomposi¸˜o top-down da funcionalidade do e ca sistema. http://www.candidatoreal.com 9.4 Gerenciamento de Requisitos Gerenciar requisitos consiste de procedimentos para coletar, verificar e avaliar c a ´ mudan¸as, de forma melhor administr´-las. E o considerado uma das primeiras a ´reas chave para melhoria de qualidade. No gerenciamento de requisitos um conceito importante ´ o de rastreabilidade. A rastreabilidade pode ser vista e como a habilidade de acompanhar e descrever a vida de um requisito em ambas as dire¸˜es. Rastrear envolve identificar links entre requisitos, fontes dos requi- co sitos e design do sistema. As ferramentas mais utilizadas para rastreamento de 116
  • 118. http://www.candidatoreal.com requisitos s˜o as Matrizes de Rastreabibilidade (Traceability Matrix ), que usual- a mente correlacionam requisitos com casos de testes, e t´cnicas de Referˆncias e e Cruzadas. Entre os produtos de mercado utilizadas para realizar gerenciamento e rastreamento de requisitos podemos citar o Rational RequisitePro, Caliber-RM, RTS e RDT. http://www.candidatoreal.com 117
  • 119. http://www.candidatoreal.com Cap´ ıtulo 10 M´tricas e M´tricas devem ser coletadas de modo que os indicadores de processo e de e produto possam ser determinados. Indicadores de processo permitem ` orga- a niza¸˜o de engenharia de software ter id´ia da efic´cia de um processo existente ca e a (o paradigma, as tarefas de engenharia de software, os produtos de trabalho e os marcos de tempo). J´ os indicadores de projeto permitem ao gerente de projeto a de software: • Avaliar o status de um projeto em andamento. • Acompanhar riscos potenciais. • Descobrir ´reas-problemas anter que elas se tornem cr´ a ıticas. • Ajustar fluxo de trabalho ou tarefas. • Avaliar a capacidade da equipe de projeto de controlar a qualidade dos produtos do trabalho de software. Em alguns casos, as mesmas m´tricas podem ser usadas para determinar e indicadores de projeto e de processo. 10.1 M´tricas de processo e aperfei¸oamento de e c processo de software N´s medimos a efic´cia de um processo de software indiretamente. H´ usos o a a p´blicos e privados de diferentes tipos de dados do processo. As m´tricas co- u e http://www.candidatoreal.com letadas com base individual dever ser privadas e servir como indicador apenas para o indiv´ ıduo. Exemplo de m´tricas privadas incluem porpor¸˜o de defeitos e ca (por ind´ıviduo e por m´dulo) e erros encontrados durante o desenvolvimento. o M´tricas p´blicas geralmente assimilam informa¸˜es, que eram originalmente e u co privadas. Porpor¸˜es de defeitos de projeto (absolutamente n˜o atribu´ co a ıveis a um certo indiv´ ıduo), esfor¸o, tempo transcorrido e dados relacionados s˜o coleta- c a dos e avaliados numa tentativa de sescobrir indicadores, que possam aperfei¸oar c o desempenho do processo organizacional. H´ uma sutil diferen¸a entre erros e defeitos. Um defeito ocorre quando a c atividades de garantia de qualidade deixam de descobrir um erro num produto produzido durante o processo de software. 118
  • 120. http://www.candidatoreal.com ` A medida que uma organiza¸˜o sente-se mais confort´vel, coletanto e usando ca a m´tricas de processo de software, a deriva¸˜o de indicadores simples d´ lugar e ca a a uma abordagem mais rigorosa, chamada melhoria estat´ ıstica do processo de software (statistical software process improvemente, SPPI). Essencialmente, a SSPI usa a an´lise de falhas de software para coletar informa¸˜o sobre todos a ca erros e defeitos. A an´lise de falhas funciona da seguinte maneira: a 1. Todos os erros e defeitos s˜o categorizados por origem (falha de especi- a fica¸˜o, falha de l´gica, n˜o atendimento a padr˜es). ca o a o 2. O custo para corrigir cada erro e defeito ´ registrado. e 3. A quantidade de erros e defeitos de cada categoria ´ contada e ordenada e de forma decrescente. 4. O custo total de erros e defeitos de cada categoria ´ calculado. e 5. Os dados resultantes s˜o analisados, para descobrir as categorias que pro- a duzem um maior custo para a organiza¸˜o. ca 6. S˜o desenvolvidos planos para modificar o processo, com o objetivo de a eliminar (ou reduzir a freq¨ˆncia das) classes de erros e defeitos que s˜o ue a mais dispendiosas. Para a organiza¸˜o dessas m´tricas s˜o utilizados o gr´fico de pizza que associa ca e a a os erros e defeitos `s suas origens e o diagrama espinha de peixe. a 10.2 M´tricas de projeto e As m´tricas de projeto s˜o usadas para evitar atrasos, avaliar a qualidade e n˜o e a a ultrapassar os custos permitidos. A primeira aplica¸˜o das m´tricas de projeto, ca e na maioria dos projetos de software, ocorre durante a estimativa. M´tricas e coletadas de projetos anteriores s˜o usadas como base e ` medida que o projeto a a prossegue, medidas de esfor¸o e de tempo s˜o comparadas com as estimativas c a originais. Dessa maneira, o gerente do projeto monitora e controla o progresso. ` A medida que o trabalho t´cnico se inicia, outras m´tricas de projeto come¸am e e c a ter importˆncia. A taxa de produ¸˜o, representada em termos de p´ginas de a ca a documenta¸˜o, horas de revis˜o, pontos por fun¸˜o e linhas de c´digo fonte ca a ca o ` entregue, ´ medida. A medida que o software evolui, m´tricas t´cnicas s˜o e e e a coletadas para avaliar a qualidade do projeto. http://www.candidatoreal.com 10.3 Medi¸˜o de software ca As medi¸˜es s˜o categorizadas em medidas diretas e indiretas. As medidas di- co a retas do processo de engenharia de software incluem custo, linhas de c´digo o (lines of code, LOC) produzidas, velocidade de execu¸˜o, tamanho de mem´ria ca o e defeitos relatados durante um certo per´ ıodo. Medidas indiretas do produto in- cluem funcionalidade, qualidade, complexidade, eficiˆncia, confiabilidade, manuteni- e bilidade e muitas outras habilidades. 119
  • 121. http://www.candidatoreal.com 10.3.1 M´tricas orientadas a tamanho e S˜o m´tricas baseadas em linhas de c´digo. M´tricas orientadas a tamanho a e o e n˜o s˜o universalmente aceitas como o melhor modo de medir o processo de a a desenvolvimento de software. Os opositores argumentam que essas m´tricas pe- e nalizam programas curtos e bem feitos e que medidas de LOC s˜o dep´ndentes a e da linguagem de programa¸˜o. Por outro lado, existem muitos modelos de esti- ca mativas que usam LOC ou KLOC como entrada chave e essas m´tricas podem e ser facilmente coletadas. As m´tricas orientadas a tamanho mais utilizadas e incluem: • Erros por KLOC (milhares de linha c´digo). o • Defeitos por KLOC. • $ por LOC. • P´ginas de documenta¸˜o por KLOC. a ca • Erros por pessoa-mˆs. e • LOC por pessoa-mˆs. e • $ por p´gina de documenta¸˜o. a ca 10.3.2 M´tricas orientadas a fun¸˜o e ca M´tricas de software orientadas a fun¸˜o usam uma medida da funcionalidade e ca entregue pela aplica¸˜o como valor de normaliza¸˜o. ca ca Pontos por fun¸˜o s˜o calculados completando a tabela 10.1. Cinco carac- ca a ter´ısticas do dom´ ınio da informa¸˜o s˜o determinadas e as contagens s˜o reg- ca a a istradas na tabela. Essas caracter´ ısticas s˜o definidas da seguinte maneira: a Quantidade de entradas do usu´rio. S˜o contadas as entradas do usu´rio a a a que fornecem dados distintos. Quantidade de sa´ ıdas do usu´rio. S˜o contados telas, relat´rios, mensagens a a o de erros etc. N´ mero de consultas do usu´rio. S˜o contadas consultas distintas. Uma u a a consulta ´ definida como um entrada que resulta na gera¸˜o de alguma e ca resposta imediata. Quantidade de arquivos. Cada grupo de dados l´gico (que pode ser parte o de uma base de dados maior ou um arquivo separado) ´ contado. Esses e http://www.candidatoreal.com grupos de dados tamb´m s˜o conhecidos como arquivos mestres l´gicos. e a o Quantidade de interfaces externas. Todas as interfaces em linguagem de m´quina (p. ex., arquivos de dados em um meio de armazenamento), que a s˜o usadas para transmitir informa¸˜o a outro sistema s˜o contadas. a ca a Uma vez coletados esses dados, um valor de complexidade ´ associado com e cada contagem. Para contar pontos por fun¸˜o (function points, FP), ´ usada ca e a seguinte rela¸˜o: ca FP = total da contagem ×[0, 65 + 0, 01 × (Fi )] Os Fi s˜o valores de ajuste de complexidade, baseados nas respostas das a seguintes perguntas: 120
  • 122. http://www.candidatoreal.com Parˆmetro de medi¸˜o a ca Contagem Simples M´dio e Complexo Total Quantidade de entradas do usu´rio a x 3 4 6 Quantidade de sa´ ıdas do usu´rio a x 4 5 7 Quantidade de consultas do usu´rio a x 3 4 6 N´mero de arquivos u x 7 10 15 Quantidade de interfaces externas x 5 7 10 Tabela 10.1: Tabelas das caracter´ ısticas dos pontos de fun¸˜o ca 1. O sistema requer salvamento (backup) e recupera¸˜o (recovery)? ca 2. Comunica¸˜es de dados s˜o necess´rias? co a a 3. H´ fun¸˜es de processamento distribu´ a co ıdo? 4. O desempenho ´ cr´ e ıtico? 5. O sistema vai ser executado em um ambiente operacional existente, inten- samente utilizado? 6. O sistema requer entradas de dados on-line? 7. A entrada de dados on-line exige que a transa¸˜o de entrada seja con- ca stru´ atrav´s de v´rias telas ou opera¸˜es? ıda e a co 8. Os arquivos mestre s˜o atualizados on-line? a 9. As entradas, sa´ ıdas, arquivos ou consultas s˜o complexas? a 10. O processomento interno ´ complexo? e 11. O c´digo ´ projetado para ser reusado? o e 12. A convers˜o e a instala¸˜o est˜o inclu´ a ca a ıdas no projeto? 13. O sistema est´ projetado para instala¸˜es m´ltiplas em diferentes orga- a co u niza¸˜es? co 14. A aplica¸˜o est´ projetada para facilitar modifica¸˜es e para facilidade de ca a co uso pelo usu´rio? a Cada uma dessas quest˜es ´ respondida usando uma escala que varia entre 0 a o e http://www.candidatoreal.com 5. Os valores constantes e os fatores de peso podem ser ajustado empiricamente para a equa¸˜o dos pontos de fun¸˜o. S˜o exemplos importantes de medidas de ca ca a produtividade, qualidade e outros atributos de software as m´tricas: e • Erros por FP. • Defeitos por FP. • $ por FP. • P´ginas de documenta¸ao por FP. a c˜ • FP por pessoa-mˆs. e 121
  • 123. http://www.candidatoreal.com 10.3.3 M´tricas de pontos por fun¸ao estendidas e c A medida de pontos por fun¸˜o foi originalmente projetada para ser usada ca em aplica¸˜es de sistemas de informa¸˜o comerciais. A medida de pontos por co ca fun¸˜o ficou inadequada para muitos sistemas embutidos e de engenharia (que ca enfatizam fun¸˜o e controle). ca Uma extens˜o de pontos por fun¸˜o, chamada pontos por caracter´ a ca ıstica uti- lizada em eplica¸˜es de software de sistemas. Para calcular pontos por carac- co ter´ ıstica, valores de dom´ ınio de informa¸˜o s˜o novamente contados e ponder- ca a ados. Al´m disso, a m´trica pontos por caracter´ e e ıstica trata uma nova carac- ter´ ısitca do software: algoritmos. Outra extens˜o de pontos por fun¸˜o, para sistemas em tempo real e pro- a ca dutos de engenharia, foi desenvolvida pela Boeing. Essa abordagem integra a dimens˜o de dados do software com as dimens˜es funcional e de controle para a o forncer uma medida orientada a fun¸˜o, adequada a aplica¸˜es que enfatizam ca co as capacidades de fun¸˜o e controle. Essa extens˜o ´ chamada de pontos por ca a e fun¸˜o 3D. As trˆs dimens˜es s˜o: ca e o a Dimens˜o de dados. Semelhante a contagem de pontos por fun¸˜o tradi- a ca cional. Dimens˜o funcional. Considera a quantidade de opera¸˜es internas necess´rias a co a para transformar dados de entrada para transformar dados de entrada em sa´ ıda. a ´ Dimens˜o de controle. E medida contando a quantidade de transi¸˜es entre co estados. 10.4 M´tricas de qualidade de software e A medi¸˜o da qualidade de software ´ uma atividade de natureza subjetiva. ca e Qualidade de software ´ uma mistura complexa de fatores que v˜o variar com e a cada aplica¸˜o diferente e com os clientes que as encomendam. As principais ca medidas s˜o mostradas a seguir: a Corre¸˜o. A medida mais comum ´ defeitos por KLOC. Para fins de avalia¸˜o ca e ca de qualidade, defeitos s˜o contados durante um per´ a ıodo padr˜o, tipica- a mente um ano. Manutenibilidade. Uma m´trica utilizada ´ o tempo m´dio para modica¸˜o e e e ca http://www.candidatoreal.com (mean-time-to-change, MTTC), que ´ o tempo despendido para analisar o e pedido de modifica¸˜o, projetar uma modifica¸˜o adequada, implementar ca ca a modifica¸˜o, test´-la e distribu´ para todos os usu´rios. Outra m´trica ca a ı-la a e ´ chamada preju´ - custo para corrigir defeitos encontrados depois que e ızo o software foi entregue a seus usu´rios finais. a ´ Integridade. E a capacidade do sistema resistir ` ataques (tanto acidentais a quanto intencionais). Amea¸a ´ a probabilidade de um ataque ocorrer c e dentro de um certo per´ c ´ ıodo. Seguran¸a. E a probabilidade de um ataque ser repelido. A integridade do sistema pode ser ent˜o definido como inte- a gridade = (1 − ameaca) × (1 − seguranca). 122
  • 124. http://www.candidatoreal.com Utiliza¸˜o. Se ´ amig´vei ao uso. Pode ser medida em quatro t´picos: (1) ca e a o aptid˜o f´ a ısica ou intelectual necess´ria para aprender a lidar com o sistema, a (2) o tempo necess´rio para se tornar moderadamente eficiente no uso a do sistema, (3) o aumento l´ ıquido de produtividade e (4) uma avalia¸˜oca subjetiva das atitudes dos usu´rios com rela¸˜o ao sistema. a ca Outra medi¸˜o muito utilizada ´ a eficiˆncia na remo¸˜o de defeitos defect ca e e ca removal efficiency, DRE). A DRE ´ uma medida da capacidade de filtragem das e atividades de controle e garantia de qualidade de software, ` medida que s˜o a a aplicadas. A f´rmula utilizada ´ DRE = E/(E + D). Onde E ´ a quantidade o e e de erros encontrados e D a quantidade de defeitos. As principais formas de classificar fatores de qualidade s˜o apresentadas nas a subse¸˜es a seguir. co 10.4.1 Fatores de qualidade de McCall Os fatores de qualidade de McCall concentram-se nos trˆs aspectos importantes e de um produto de software: suas caracter´ ısticas operacionais, sua habilidade de passar por modifica¸˜es e sua adaptabilidade a novos ambientes. A seguir s˜o co a listados esses aspectos e os seus respectivos fatores: Opera¸˜o do produto. Corre¸˜o, confiabilidade, utiliza¸˜o, integridade e eficiˆncia. ca ca ca e Revis˜o do produto. Mantenabilidade, flexibilidade e testabilidade. a Transi¸˜o do produto. Portabilidade, reutiliza¸˜o e interoperabilidade. ca ca ´ E dif´ desenvolver medidas diretas desses fatores. Assim, um conjunto de ıcil m´tricas ´ definido e usado para desenvolver express˜es para cada um dos fatores e e o de acordo com a seguinte rela¸˜o: Fq = c1 × m1 + c2 × m2 ... + cn × mn , em que ca Fq ´ um fator de qualidade de software, cn s˜o coeficientes de regress˜o, mn s˜o e a a a as m´tricas que afetam o fator de qualidade. Infelizmente, muitas das m´tricas e e definidas podem ser medidas apenas sunjetivamente. As m´tricas podem estar e em forma de checklist que ´ usada para atribuir um grau a atributos espec´ e ıficos do software. O peso atribu´ a cada m´trica ´ dependente de produtos e ıdo e e preocupa¸˜es locais. co 10.4.2 FURPS A Hewlett-Packard desenvolveu um conjunto de fatores de qualidade que re- cebeu a sigla FURPS: funcionalidade, utiliza¸˜o, confiabilidade, desempenho e ca http://www.candidatoreal.com suportabilidade. Esses fatores podem ser definidos da seguinte maneira: Funcionalidade. Avaliada pelo conjunto de caracter´ ısticas e capacidades do programa. Utiliza¸˜o. Avaliada considerando fatores humanos como est´tica, consistˆncia ca e e e documenta¸˜o. ca Confiabilidade. Avaliada medindo a freq¨ˆncia e a severidade das falhas, a ue precis˜o dos resultados de sa´ a ıda, o tempo m´dio entre falhas (MTTF), a e capacidade de recupera¸˜o de falhas e previsibilidade do programa. ca 123
  • 125. http://www.candidatoreal.com Desempenho. Medido pela velocidade de processamento, tempo de resposta, consumo de recursos, throughput e eficiˆncia. e Suportabilidade. Combina a capacidade de estender o programa (estensibili- dade), adaptabilidade e reparabilidade. 10.4.3 ISO 9126 A norma da ISO identifica seis atributos-chave de qualidade: Funcionalidade. Grau com que o software satisfaz as necessidades declaradas com os subatributos - adequabilidade, precis˜o, interoperabilidade, atendibil- a idade e seguran¸a. c Confiabilidade. Per´ıodo de tempo em que o software est´ dispon´ para uso a ıvel com os subatributos - maturidade, tolerˆncia a falha e recuperabilidade a Utiliza¸˜o. Grau em que o software ´ f´cil de usar com os subatributos - ca e a inteligibilidade, adestrabilidade e operabilidade. Eficiˆncia. Grau em que o software faz uso otimizado dos recursos do sistema e com os subatributos - comportamento em rela¸˜o ao tempo e comporta- ca mento em rela¸˜o aos recursos. ca Mantenabilidade. Facilidade com a qual podem ser feitos reparos no soft- ware com os subatributos - analisabilidade, mutabilidade, estabilidade e testabilidade. Portabilidade. Facilidade com a qual o software pode ser transposto de um ambiente para outro com os subatributos - adaptabilidade, instabilidade, conformidade e permutabilidade. Esses fatores n˜o necessariamente se prestam a medidas diretas. No entanto, a fornecem de fato uma base valiosa para medidas indiretas e uma excelente lista de verifica¸˜o para avaliar a qualidade de um sistema. ca 10.5 Estimativas Muitas vezes, as estimativas s˜o feitas usando-se a experiˆncia passada como a e unico guia. Mas se um novo projeto for totalmente diferente dos projetos re- ´ alizados at´ o momento? Assim, apenas a experˆncia passada talvez n˜o seja e e a http://www.candidatoreal.com suficiente. V´rias t´cnicas de estimativa est˜o dispon´ a e a ıveis. Embora cada uma tenha suas particularidades, todas tˆm os seguintes atributos: e 1. O escopo do projeto deve estar estabelecido. 2. M´tricas de software s˜o utilizadas e o hist´rico ´ usado como uma base e a o e a partir da qual estimativas s˜o feitas. a 3. O projeto ´ dividido em pequenas partes que s˜o estimadas individual- e a mente. 124
  • 126. http://www.candidatoreal.com 10.5.1 COCOMO (Constructive Cost Model) O COCOMO ´ o modelo de estimativa emp´ e ırico mais utilizado na ind´stria. u Existem trˆs modelos neste m´todo: e e a ´ COCOMO B´sico. E um modelo est´tico de valor simples que computa o a esfor¸o (e custo) de desenvolvimento de software como uma fun¸˜o do c ca tamanho de programa expresso em linha de c´digo estimadas. o COCOMO Intermedi´rio. Computa o esfor¸o de desenvolvimento de soft- a c ware como uma fun¸˜o do tamanho do programa e de um conjunto de ca direcionadores de custo que incluem avalia¸˜es subjetivas do produto, do co hardware, do pessoal e dos atributos do projeto. COCOMO Avan¸ado. Incorpora todas as caracter´ c ısticas da vers˜o inter- a medi´ria, com uma avalia¸˜o do impacto dos direcionadores de custo sobre a ca cada passo (an´lise, projeto, etc.) do processo de engenharia de software. a O COCOMO classifica os projetos em trˆs tipos: e Modelo orgˆnico (ou convencional). Projetos de software simples, relati- a vamente pequenos, nos quais pequenas equipes com boa experiˆncia em e aplica¸˜es trabalham num conjunto de requisitos n˜o t˜o r´ co a a ıgidos. Outras caracter´ısticas: ambiente est´vel de desenvolvimento, algoritmos simples, a prˆmio relativamente baixo para t´rmino antes do prazo, tamanho relati- e e vamente pequeno, projetos na faixa de 50.000 linhas de c´digo. o Modelo semidestacado (ou difuso). Projeto de software intermedi´rio (em a tamanho e complexidade) onde a equipe mescla grande e pouca experiˆncia e com aplica¸˜es, grande e pouca experiˆncia com a tecnologia, o tamanho co e dos software varia at´ 300.000 linhas de c´digo. e o Modelo embutido (ou restrito). Um projeto que deve ser desenvolvido den- tro de um conjunto r´ ıgido de restri¸˜es operacionais, de hardware e de co software. O COCOMO II, assim como o seu predecessor ´ na verdade uma hierarquia e de modelos que trata das seguintes ´reas: a Modelo de composi¸˜o de aplica¸˜o. Usado durante os primeiros est´gios ca ca a do processo. Modelo do primeiro est´gio de projeto. Usado ap´s os requisitos terem a o http://www.candidatoreal.com sido estabilizados e a arquitetura b´sica do software ter sido estabelecida. a Modelo para o est´gio ap´s a arquitetura. Usado durante a constru¸˜o do a o ca software. O COCOMO II usa pontos por objeto. Como pontos por fun¸˜o, o pontos por ca objeto ´ uma medida indireta de software que ´ calculada usando-se a contagem e e da quantidade de telas (na interface com o usu´rio, relat´rios e componentes. a o Cada instˆncia de objeto em um dos trˆs n´ a e ıveis de complexidade (simples, m´dio, e dif´ ıcil). Essencialmente, a complexidade ´ fun¸˜o da quantidade e fonte das e ca tabelas de dados do cliente e servidores, que s˜o necess´rias para gerar a tela ou a a 125
  • 127. http://www.candidatoreal.com relat´rio, e da quantidade de vistas ou se¸˜es apresentadas como parte da tela o co ou relat´rio. o Deve-se notar que outros modelos de estimativa mais sofisticados (usando FP e KLOC) tamb´m est˜o dispon´ e a ıveis como parte do COCOMO II. http://www.candidatoreal.com 126
  • 128. http://www.candidatoreal.com Cap´ ıtulo 11 Testes Teste ´ um processo de execu¸˜o de um programa com a finalidade de encontrar e ca um erro. Os teses podem ser planejados e projetados antes que qualquer c´digo o tenha sido gerado. Os primeiros testes planejados e executados geralmente ` concentram-se nos componentes individuais. A medida que o teste progride, o foco se desloca numa tentativa de encontrar erros em conjuntos integrados de componente e finalmente em todo o sistema. A testabilidade de software ´ a facilidade com que o programa pode ser e testado. Existem m´tricas que podem medir a testabilidade do software. e Quando o software para computador ´ considerado, teste caixa-preta refere- e se a testes que s˜o conduzidos na interface do software. a Um teste de caixa-branca ´ baseado num exame rigoroso do detalhe pro- e cedimental. Caminhos l´gicos internos do software s˜o testados, definindo ca- o a sos de testes que exercitam conjuntos espec´ıficos de condi¸˜es ou ciclos. Teste co caixa-branca completo ´ imposs´ e ıvel para grandes sistemas de software. Um teste caixa-branca n˜o deve, no entanto, ser descartado como n˜o pr´tico. Um a a a n´mero limitado de caminhos l´gicos importantes pode ser selecionado e exerci- u o tado. H´ trˆs motivos importantes pelos quais se deve usar testes caixa-branca: a e • Os erros tendem a ocorrer em condi¸˜es ou controle que est˜o fora da co a fun¸˜o principal. ca • Freq¨entemente acreditamos que um caminho l´gico n˜o ´ prov´cel de ser u o a e a executado quando, na realidade, ele pode ser executado em base regular. ´ • E prov´vel que um erro tipogr´fico exista tanto num caminho l´gico ob- a a o http://www.candidatoreal.com scuro quanto num caminho principal. 11.1 Teste de caminho b´sico a Teste de caminho b´sico ´ uma t´cnica de teste caixa-branca proposta inicial- a e e mente por Tom McCabe. O m´todo de caminho b´sico permite ao projetista e a de casos de teste originar uma medida da complexidade l´gica de um projeto o procedimental e usar essa medida como guia para definir um conjunto b´sico a de caminhos de execu¸˜o. Casos de testes derivados para exercitar o conjunto ca b´sico executam garantidamente cada comando programa pelo menos uma vez a durante o teste. 127
  • 129. http://www.candidatoreal.com O grafo de fluxo mostra mostra o fluxo de controle l´gico. Cada n´ do o o grafo de fluxo representa um ou mais comando procedimentais. As arestas representam o fluxo de controle. As ´reas dlimitadas por arestras e n´s s˜o a o a chamadas regi˜es. Cada n´ que cont´m uma condi¸˜o ´ chamado de n´ predicado o o e ca e o e ´ caracterizada por duas ou mais arestas saindo dele. e Complexidade ciclom´tica ´ a m´trica de software que fornce uma medida a e e quantitativa da complexidade l´gica do programa. O valor calculado para a o complexidade ciclom´tica define o n´mero de caminhos independentes no con- a u junto base de um programa e nos fornece um limite superior para a quantidade de testes que deve ser conduzida para garantir que todos os comandos tenho sido executados pelo menos uma vez. Um caminho independente ´ qualquer caminho ao longo do programa que e introduz pelo menos um novo conjunto de comandos de processamento ou uma nova condi¸˜o. Um conjunto-base ´ um conjunto de caminhos em que todo ca e comando do programa ter´ sido garantidamente executado pelo menos uma vez a e cada condi¸˜o ter´ sido executada no seu lado verdadeiro e no seu lado falso. ca a A complexidade ciclom´tica ´ calculada de trˆs maneiras: a e e 1. O n´mero de regi˜es do grafo de fluxo. u o 2. V (G) = E − N + 2 em que E ´ o n´mero de arestas e N o n´mero de n´s. e u u o 3. V (G) = P + 1 em que P ´ o n´mero de n´s predicados. e u o Os seguintes passos podem ser aplicados para deriva¸˜o de casos de teste: ca 1. Usando o projeto ou c´digo como base, desenhe o grafo de fluxo corre- o spondente. 2. Determine a complexidade ciclom´tica do grafo de fluxo resultante. a 3. Determine um conjunto-base de caminhos linearmente independentes. 4. Prepare casos de teste que v˜o for¸ar a execu¸˜o de cada caminho do a c ca conjunto-base. Uma matriz de grafo ´ uma matriz quadrada, cujo n´mero de colunas e e u linhas ´ igual ao n´mero de n´s do grafo de fluxo. Adicionando um peso de e u o liga¸˜o a cada entrada da matriz, a matriz de grafo pode tornar-se uma possante ca ferramenta para avaliar a estrutura de controle do programa durante o teste. Em sua forma mais simples, o peso da liga¸˜o ´ 1 (existe uma conex˜o) ou ca e a 0 (n˜o existe uma conex˜o). Outros pesos podem ser atribu´ a a ıdos com outras http://www.candidatoreal.com propriedades: • A probabilidade de que uma liga¸˜o (aresta) ser´ executada. ca a • O tempo de processamento gasto durante o percurso de uma liga¸˜o. ca • A mem´ria necess´ria durante o percurso de uma liga¸˜o. o a ca • Os recursos necess´rios durante o percurso de uma liga¸˜o. a ca Existem algoritmos que podem ser aplicados `s matrizes de grafo. Usando a essaas t´cnicas, a an´lise necess´ria para projetar casos de teste pode ser parcial e a a ou totalmente automatizada. 128
  • 130. http://www.candidatoreal.com 11.2 Teste de estrutura de controle A t´cnica de teste de estrutura de controle ampliam a cobertura da t´cnica de e e teste de caminho b´sico e melhoram a qualidade do teste caixa-branca. a 11.2.1 Teste de condi¸˜o ca Teste de condi¸˜o ´ um m´todo de projeto de caso de teste que exercita as ca e e condi¸˜es l´gicas contidas em um m´dulo de programa. Uma condi¸˜o simples co o o ca ´ uma vari´vel booleana ou uma express˜o relacional, possivelmente precedida e a a por um operador de nega¸˜o. Uma condi¸˜o composta ´ composta de duas ou ca ca e mais condi¸˜es simples, operadores booleanos e parˆnteses. co e Diversas estrat´gias para teste de condi¸˜o tˆm sido propostas. O teste de e ca e desvio ´ provavelmente a estrat´gia de teste de condi¸˜o mais simples. Para e e ca uma condi¸˜o composta C, os ramos verdadeiro e falso de C e cada condi¸˜o ca ca simples de C precisam ser executadas pelo menos uma vez. O teste de dom´ ınio requer que trˆs ou quatro testes sejam derivados para e uma express˜o relacional. Para uma express˜o relacional da forma a a E1 < operador − relacional > E2 trˆs testes s˜o necess´rios para tornar o valor de E1 maior que, igual a, ou menor e a a que o de E2 . Para uma express˜o booleana com n vari´veis, todos os 2n poss´ a a ıveis testes s˜o necess´rios (n > 0), mas ´ pr´tica somente quando n ´ pequeno. a a e a e Caso uma express˜o booleana seja singular (na qual cada vari´vel ocorre a a apenas uma vez), h´ como gerar um conjunto de testes com menos do que 2n a testes tal que esse conjunto de testes garante a detec¸˜o de erros de operadores ca booleanos m´ltiplos e ´ tamb´m efetivo para detectar outros erros. Uma delas ´ u e e e a t´cnica de teste de desvio e operador relacional (branch and relational operator, e BRO). Ela usa restri¸˜es de condi¸˜o para uma condi¸˜o C. Uma restri¸˜o de co ca ca ca condi¸˜o para C com n condi¸˜es simples ´ definida como (D1 , D2 , . . . , Dn ), ca co e em que Di (0 < i ≤ n) ´ um s´ e ımbolo que especifica uma restri¸˜o sobre o ca resultado da i-´sima condi¸˜o simples da condi¸˜o C. Diz-se que uma restri¸˜o e ca ca ca de condi¸˜o D para uma condi¸˜o C ´ coberta por uma execu¸˜o de C se, ca ca e ca durante a execu¸˜o de C, o resultado de cada condi¸˜o simples de C satisfaz a ca ca correspondente restri¸˜o em D. N˜o entendeu nada? Como exemplo, considere ca a a condi¸˜o: ca C1 : B1 &B2 http://www.candidatoreal.com em que B1 e B2 s˜o vari´veis booleanas. A restri¸˜o de condi¸˜o para C1 ´ a a ca ca e da forma (D1 , D2 ), em que cada um de D1 e D2 ´ t ou f . O valor (t, f ) ´ e e uma restri¸˜o de condi¸˜o para C1 . A estrat´gia de teste BRO exige que o ca ca e conjunto de restri¸˜es {(t, t), (t, f ), (f, t)} seja coberto pelas execu¸˜es de C1 . co co Se C1 est´ incorreto, pelo menos uma das condi¸˜es do conjunto vai fazer C1 a co falhar. Outro exemplo: C2 : B1 &(E3 = E4 ) possui o conjunto de restri¸˜es co {(t, =), (f, =), (t, <), (t, >)}, sendo E3 e E4 express˜es aritm´ticas. o e 129
  • 131. http://www.candidatoreal.com 11.2.2 Teste de fluxo de dados O met´do de teste de fluxo de dados seleciona caminhos de teste de um pro- o grama de acordo com a localiza¸˜o das defini¸˜es e do uso das vari´veis no ca co a programa. Para ilustrar a abordagem de teste de fluxo de dados, considere que cada comando de um programa ´ atribu´ um n´mero de comando unico e e ıdo u ´ que cada fun¸˜o n˜o modifica seus parˆmetros ou vari´veis globais. Para um ca a a a comando com S como seu n´mero de comando, u DEF (S) = {X/comando S cont´m uma defini¸˜o de X} e ca U SO(S) = {X/comando S cont´m um uso de X} e Se o comando S ´ um comando se ou de ciclo, seu conjunto DEF ´ vazio e e e seu conjunto USO ´ baseado na condi¸˜o do comando S. A defini¸˜o da vari´vel e ca ca a X no comando S ´ considerada como estando viva no comando S ′ se existe um e caminho do comando S para o comando S ′ que n˜o cont´m qualquer outra a e defini¸˜o de X. ca Uma cadeia defini¸˜o-uso (DU) da vari´vel X ´ da forma [X, S, S ′ ] em que S ca a e e S s˜o n´meros de comandos, X pertence a DEF (S) e U SO(S ′ ), e a defini¸˜o ′ a u ca de X no comando S est´ viva no comando S ′ . a A estrat´gia de teste DU exige que cada cadeia DU seja coberta pelo menos e uma vez. Foi mostrado que o teste DU n˜o cobre todos os ramos em situa¸˜es a co raras. A abordagem de teste de fluxo de dados ´ efetiva para detec¸˜o de erros. e ca No entanto, os problemas de medida da cobertura e de sele¸˜o dos caminhos ca de teste s˜o mais dif´ a ıceis do que os problemas correspondentes para o teste de condi¸˜o. ca 11.2.3 Teste de ciclo Teste de ciclo ´ uma t´cnica de teste caixa-branca que focaliza exclusivamente e e a validade de constru¸˜es de ciclo. Quatro diferentes classes de ciclos podem co ser definidas: Ciclos simples. O seguinte conjunto de teste pode ser aplicado a ciclos simples em que n ´ o n´mero m´ximo de passagens permitidas no ciclo. e u a 1. Pule o ciclo completamente. 2. Apenas uma passagem pelo ciclo. 3. Duas passagens pelo ciclo. 4. m passagens pelo ciclo em que m < n. 5. n − 1, n, n + 1 passagens pelo ciclo. http://www.candidatoreal.com Ciclos aninhados. Seria muito complicado adotar as mesmas t´cnicas de cic- e los simples neste caso. Uma abordagem ´ sugerida: e 1. Comece no ciclo mais interno. Ajuste todos os outros cilos para o valores m´ ınimos. 2. Conduze testes de ciclo simples para o ciclo mais interno enquanto mant´m os ciclos externo nos seus valores m´ e ınimos de itera¸˜o. ca 3. Trabalhe em dire¸ao ao extereior, conduzindo testes para o ciclo c˜ seguinte. 4. Continue at´ que todos os ciclos tenham sido testados. e 130
  • 132. http://www.candidatoreal.com Ciclos concatenados. A mesma abordagem para o ciclo simples a menos que o mesmo contador ´ utilizado nos ciclos concatenados. Neste caso, ´ re- e e comendada a abordagem a ciclos aninhados. Ciclos desestruturados. Sempre que poss´ ıvel essa classe de ciclos deve ser reprojetada. 11.3 Teste caixa-preta Um teste caixa-preta, tamb´m chamado de teste comportamental, focaliza os req- e uisitos funcionais do software. O teste caixa-preta tende a ser aplicado durante os ultimos est´gios do teste. ´ a 11.3.1 M´todos de teste baseados em grafo e Os objetos que est˜o modelados no software e as rela¸˜es que conectam esses a co objetos s˜o utilizadas para criar um grafo. Os n´s representam os objetos, as a o arestas representam as liga¸˜es, os pesos de n´ descrevem as propriedade de um co o objeto, assim como os pesos das arestas representam propriedades das liga¸˜es. co Uma liga¸˜o direcionada (representada por uma seta) indica que a rela¸˜o se ca ca move em apenas uma dire¸˜o. Liga¸˜es paralelas s˜o usadas quando diversas ca co a rela¸˜es s˜o estabelecidas entre os n´s. co a o Os m´todos de teste de comportamento que podem fazer usos de grafos s˜o: e a Modelagem de fluxo de transa¸˜o. Os n´s representam passos em alguma ca o transa¸˜o e as arestam representam conex˜es l´gicas. ca o o Modelagem de estado finito. Os n´s representam diferentes estados do soft- o ware observ´veis pelo usu´rio e as aresta representam as transi¸˜es. a a co Modelagem do fluxo de dados. Os n´s s˜o objetos de daods e as liga¸˜es o a co s˜o transforma¸˜es que ocorrem para traduzir um objeto de dados em a co outro. 11.3.2 Particionamento de equivalˆncia e O particionamento de equivalˆncia ´ um m´todo de teste caixa-preta que divide e e e o dom´ ınio de entrada de um programa em classes de dados, das quais casos de teste podem ser derivados. Uma classe de equivalˆncia representa um con- e junto de estados v´lidos ou inv´lidos para condi¸˜es de entrada. Classes de a a co http://www.candidatoreal.com equivalˆncia podem ser definidas de acordo com as seguintes diretrizes: e 1. Se uma condi¸˜o de entrada especifica um intervalo, uma classe de equivalˆncia ca e v´lida e duas inv´lidas s˜o definidas. a a a 2. Se uma condi¸˜o de entrada exige um valor espec´ ca ıfico, uma classe de equivalˆncia v´lida e duas inv´lidas s˜o definidas. e a a a 3. Se uma condi¸˜o de entrada especifica um membro de um conjunto, uma ca classe de quivalˆncia v´lida e uma inv´lida s˜o definidas. e a a a 4. Se uma condi¸˜o de entrada ´ booleana, uma classe de equivalˆncia v´lida ca e e a e uma inv´lida s˜o definidas. a a 131
  • 133. http://www.candidatoreal.com Um elemento pode ter mais de uma condi¸˜o de entrada. Por exemplo, ca considere uma entrada de senha , h´ condi¸˜o de entrada booleana (pode estar a ca ou n˜o presente) e condi¸˜o de entrada de valor (cadeia de seis caracteres). a ca 11.3.3 An´lise de valor limite a Um grande n´mero de erros tende a ocorrer nas fronteiras do dom´ u ınio de en- ´ trada. E por essa raz˜o que a an´lise de valor-limite (boundary value analysis, a a BVA) foi desenvolvida como t´cnica de teste. e A BVA leva ` sele¸˜o de casos de teste nas bordas da classe. Em vez de a ca focalizar somente as condi¸˜es de entrada, a BVA deriva casos de teste tamb´m co e para o dom´ ınio de sa´ ıda. Se uma condi¸˜o de entrada especifica um intervalo ou um valor limitado ca pelos valores a e b, casos de teste devem ser projetados com os valores a e b e imediatamente acima e imediatamente abaixo de a e b. O mesmo vale para as condi¸˜es de sa´ co ıda. Se as estruturas de dados tˆm limites prescritos, certifique-se e de projetar um caso de teste para exercitar a estrutura de dados no seu limite. 11.3.4 Teste de compara¸˜o ca Quando um software redundante ´ desenvolvido (para aplica¸˜es cr´ e co ıticas), equipes de engenheiros de software separadas desenvolvem vers˜es independentes de uma o aplica¸˜o usando a mesma especifica¸˜o. Em tais situa¸˜es, cada vers˜o pode ca ca co a ser testada com os mesmos dados de teste para garantir que todas fornecem sa´ idˆntica. Depois, todas as vers˜es s˜o executadas em paralelo com com- ıda e o a para¸˜o em tempo real para garantir consistˆncia. Essas vers˜es independentes ca e o formam a base da t´cnica de teste caixa-preta chamada teste de compara¸˜o ou e ca teste de emparelhamento. Quando m´ltiplas implementa¸˜es da mesma especifica¸˜o tivem sido pro- u co ca duzidas, casos de teste projetadados usando outras t´cnicas de caixa-preta e fornecem entradas a cada vers˜o do software. Se a sa´ de cada vers˜o ´ a a ıda a e mesma, ´ considerado que todas as implementa¸˜es est˜o corretas. Se a sa´ ´ e co a ıda e diferente, cada uma das aplica¸˜es ´ investigada para determinar se um defeito co e em uma ou mais vers˜es ´ respons´vel pela diferen¸a. o e a c O teste de compara¸˜o n˜o ´ a toda prova, se a especifica¸˜o estiver errada, ca a e ca todas as vers˜es ir˜o provavelmente refletir o erro. Al´m disso, se cada uma das o a e vers˜es independentes produzir resultados idˆnticos mas incorretos, o teste de o e compara¸˜o vai falhar na detec¸˜o do erro. ca ca http://www.candidatoreal.com 11.3.5 Teste de matriz ortogonal Teste de matriz ortogonal pode ser aplicado a problemas nos quais o dom´ ınio de entrada ´ relativamente pequeno, mas grande demais para acomodar teste e exaustivo. Quando o teste de matriz ortogonal ocorre, ´ criada uma matriz e ortogonal L9 de casos de teste. A matriz ortogonal L9 tem uma propriedade de balanceamento (est˜o distribu´ a ıdos uniformemente pelo dom´ ınio de teste). A abordagem de teste de matriz ortogonal nos possibilita obter boa cobertura de teste com muito menos casos de teste que a estrat´gia exaustiva. Outras e defini¸˜es s˜o importantes: co a 132
  • 134. http://www.candidatoreal.com • Se todos os casos de teste com um determinado argumento igual a 1, por exemplo, falharem, trata-se de uma falha de modo singular. • Se existe um problema consistente quando n´ ıveis espec´ ıficos de dois parˆmetros a ´ ocorrem simultaneamente, ele ´ chamado de falha de modo duplo. E a in- e tera¸˜o danosa entre dois parˆmetros de teste. ca a • Matrizes ortogonais s´ podem garantir a detec¸˜o de falhas de modo sin- o ca gular e duplo. No entanto, muitas falhas de multimodo s˜o temb´m de- a e tectadas por esses testes. 11.4 Teste de ambientes, arquiteturas e aplica¸˜es co especializadas Podemos citar as t´cnicas especializadas de testes: e Teste de GUI. Como muitas GUI modernas tˆm a mesma aparˆncia e fun- e e cionamento, uma s´rie de testes padr˜o pode ser derivada. Devido ao e a grande n´mero de opera¸˜es GUI, o teste deve ser conduzido usando fer- u co ramentas automatizadas. Teste de arquiteturas cliente/servidor. A natureza distribu´ dificulta muito, ıda os teste s˜o consideravelmente mais dif´ que em aplica¸˜es isoladas. a ıcil co Teste da documenta¸˜o e dispositivos de ajuda. Pode ser abordado em ca duas fases. A primeira fase, revis˜o e inspen¸˜o, examina o documento a ca quanto ` clare editorial. A segunda fase, teste ao vivo, usa a documenta¸˜o a ca em conjunto com o uso do programa real. Nesta fase, os v´rios m´todos a e de caixa-preta podem ser utilizados. Teste de sistemas de tempo real. O projetista de casos de teste n˜o tema apenas que considerar casos de teste caixa-branca e caixa-preta, mas tamb´m manipula¸˜o de eventos (processamento de interrup¸˜es), a tem- e ca co pestividade dos dados e o paralelismo das tarefas que manipulam os dados. Uma estrat´gia global de quatro passoas pode ser proposta: e Teste de tarefa. Testes de caixa-branca e de caixa-preta s˜o projetados a e executados para cada tarefa. ´ Teste comportamental. E simulado o comportamento de um sistema de tempo real e examinado seu comportamento como conseq¨ˆnciaue http://www.candidatoreal.com de eventos externos. Testes intertarefas. Tarefas ass´ıncornas que se comunicam s˜o testadas a com diferentes taxas de dados e carga de processamento para detectar se erros de sincroniza¸˜o entre tarefas v˜o ocorrer. ca a Teste de sistema. O software e o hardware s˜o integrados e todo um a conjunto de testes de sistema ´ conduzido numa tentativa de descobrir e erros na interface software-hardware. 133
  • 135. http://www.candidatoreal.com 11.5 Estrat´gia de teste de software e O projeto efetivo de caso de testes ´ importante, mas n˜o suficiente para o e a sucesso da atividade de testes. A estrat´gia, isto ´, a s´rie planejada de re- e e e aliza¸˜o de testes, ´ tamb´m crucial. Basicamente, h´ trˆs grandes fases de ca e e a e teste: Teste de unidade. Tem por objetivo testar a menor unidade do projeto (um componente de software que n˜o pode ser subdividido), procurando iden- a tificar erros de l´gica e de implementa¸˜o em cada m´dulo separamente. o ca o Teste de integra¸˜o. Visa descobrir erros associados `s interfaces entre os ca a m´dulos quando esses s˜o integrados para formar a estrutura do produto o a de software. Teste de sistema. Tem por objetivo identificar erros de fun¸˜es (requisitos co funcionais) e caracter´ ısticas de desempenho (requisito n˜o funcional) que a n˜o estejam de acordo com as especifica¸˜es. a co Tipicamente, os primeiros testes focalizam componentes individuais e apli- cam testes caixa-branca e caixa-preta. Na integra¸˜o, o foco ´ o projeto e a ar- ca e quitetura do sistema. Finalmente, uma s´rie de testes de alto n´ ´ executada e ıvel e quando o sistema estiver operacional, visando descobrir erros nos requisitos. No teste de unidade, faz-se necess´rio construir pequenos componentes para a permitir testar m´dulos invidualmente, os ditos drivers e stubs. Um driver ´ um o e programa respons´vel pela ativa¸˜o e coordena¸˜o do teste de uma unidade. Ele a ca ca ´ respons´vel por receber dados de teste fornecidos pelo testador, passar esses e a dados para a unidade que est´ sendo testada, obter os resultados produzidos e a apresent´-los ao testador. Um stub ´ uma unidade que substitui, na hora do a e teste, uma outra unidade chamada pela unidade que est´ sendo testada. Em a geral, um stub simula o comportamento de uma unidade chamada com o m´ ınimo de computa¸˜o ou manipula¸˜o de dados. ca ca A abordagem de integra¸ao de m´dulos pode ter impacto na quantidade de c˜ o drivers e stubs a ser constru´ıda. Sejam as seguintes abordagens: Integra¸˜o ascendente (bottom-up). Cada m´dulo no n´ inferior da hi- ca o ıvel erarquia ´ testado individualmente. A seguir, s˜o testados m´dulos que e a o chamam os previamentes testados. Neste caso, apenas drivers s˜o necess´rios. a a Integra¸˜o descendente (top-down). Come¸a de cima para baixo. Apenas ca c stubs s˜o necess´rios. a a http://www.candidatoreal.com ıche. Considera uma camada alvo no meio da hierarquia e utiliza abor- Sandu´ dagens ascendente e descendente. Big-bang. Testar individualemte cada m´dulo e depois integr´-los de uma s´ o a o vez. Neste caso, tanto drivers quanto stubs s˜o necess´rios para cada a a m´dulo. Trabalhoso e suicida. o Os testes de sistema incluem diversos tipos de testes, realizados na seguinte ordem: Teste funcional. Verifica se o sistema integrado realiza as fun¸˜es especifi- co cadas nos requisitos. 134
  • 136. http://www.candidatoreal.com Teste de desempenho. Verifica se o sistema integrado atende os requisitos n˜o funcionais do sistema (eficiˆncia, seguran¸a e confiabilidade). a e c Teste de aceita¸˜o. Realizado pelos clientes. Assegura que o sistema solici- ca tado ´ o que foi constru´ e ıdo. Teste de instala¸˜o. Necess´rio quando os testes de aceita¸˜o n˜o s˜o feitos ca a ca a a onde o software ser´ realmente instalado. a http://www.candidatoreal.com 135
  • 137. http://www.candidatoreal.com Cap´ ıtulo 12 UML 12.1 Diagrama de caso de uso Diagramas de caso de uso descrevem relacionamentos e dependˆncias entre um e grupo de caso de uso e os atores participantes no processo. Um Caso de uso descreve do ponto de vista dos atores um grupo de atividades num sistema que produz um resultado concreto e tang´ ıvel. Casos de uso s˜o descri¸˜es de a co intera¸˜es t´ co ıpicas entre os usu´rios de um sistema e o sistema propriamente dito. a Eles representam a interface externa do sistema e especificam um conjunto de exigˆncias do que o sistema deve fazer. e Quando trabalhar com Casos de Uso, ´ importante lembrar-se de algumas e regras simples: • Cada Caso de Uso est´ relacionado com no m´ a ınimo um ator • Cada Caso de Uso possui um iniciador (isto ´ um ator) e • Cada Caso de Uso liga-se a um resultado relevante (um resultado com valor de neg´cio) o Casos de uso tamb´m podem ter relacionamentos com outros casos de uso. e Os trˆs tipos mais comuns de relacionamento entre casos de uso s˜o: e a inclui-se que especifica que um Caso de Uso toma lugar dentro de outro Caso de Uso estende que especifica que em determinadas situa¸˜es, ou em algum ponto co http://www.candidatoreal.com (chamado um ponto de extens˜o) um caso de uso ser´ estendido por outro. a a Generaliza¸˜o especifica que um caso de uso herda as caracter´ ca ısticas do super caso de uso, e pode sobrepor algumas delas ou adicionar novas de maneira semelhante a heran¸a entre classes. c 12.1.1 Ator Um ator ´ uma entidade externa (fora do sistema) que interage com o sistema e participando (e freq¨entemente iniciando) um caso de uso. Atores podem ser u pessoas reais (por exemplo usu´rios do sistema), outro sistema de computador a ou eventos externos. 136
  • 138. http://www.candidatoreal.com Atores n˜o representam as pessoa f´ a ısica ou sistemas, mas sua regra. Isto significa que quando uma pessoa interage com o sistema de diferentes maneiras (assumindo diferentes regras) ela ser´ representada por diversos atores. Por ex- a emplo, uma pessoa que fornece suporte ao cliente por telefone e recebe ordens do cliente para o sistema pode ser representado por um ator da equipe de suporte. 12.1.2 Descri¸˜o do caso de uso ca Descri¸˜o do caso de uso s˜o narrativas de texto do caso de uso. Elas usualmente ca a tomam a forma de uma nota ou um documento que ´ de alguma maneira ligado e ao caso de uso, e explana o processo ou atividades que tomar˜o lugar no caso a de uso. Figura 12.1: Exemplo de um diagrama de caso de uso 12.2 Diagrama de classe http://www.candidatoreal.com Diagramas de classe mostram as diferentes classes que fazem um sistema e como elas se relacionam. Os diagramas de classe s˜o chamados diagramas est´ticos a a porque mostram as classes, com seus m´todos e atributos bem como os rela- e cionamentos est´ticos entre elas: quais classes conhecem quais classes ou quais a classes s˜o parte de outras classes, mas n˜o mostram a troca de mensagens entre a a elas. Na UML, atributos s˜o mostrados com pelo menos seu nome, e podem a tamb´m mostrar seu tipo, valor inicial e outras propriedades. Atributos po- e dem tamb´m ser exibidos com sua visibilidade: e 137
  • 139. http://www.candidatoreal.com Figura 12.2: Exemplo de um diagrama de classe • + indica atributos p´blicos. u • # indica atributos protegidos. • − indica atributos privados As opera¸˜es tamb´m s˜o exibidas com pelo menos seu nome, e podem co e a tamb´m mostrar seus parˆmetros e valores de retorno. e a Classes podem ter modelos, um valor que ´ usado para uma classe ou tipo n˜o e a especificado. O tipo de modelo ´ especificado quando uma classe ´ iniciada (isto e e ´ um objeto ´ criado). Modelos existem no C + + moderno e foram introduzidos e e no Java 1.5 onde eles s˜o chamados de gen´ricos. a e 12.2.1 Associa¸˜es de classe co Classes podem relacionar-se (ser associada com) com outras de diferentes maneiras: http://www.candidatoreal.com Generaliza¸˜o ca EM UML, uma generaliza¸˜o entre duas classes coloca-as numa hierarquia rep- ca resentando o conceito de heran¸a de uma classe derivada de uma classe base. c Em UML, Generaliza¸˜es s˜o representadas por uma linha conectando duas co a classes, com uma seta no lado da classe base. Associa¸˜es co S˜o o mecanismo que permite objetos comunicarem-se entre si. Elas descrevem a a conex˜o entre diferentes classes (a conex˜o entre os objetos atuais ´ chamada a a e 138
  • 140. http://www.candidatoreal.com Figura 12.3: Exemplo de generaliza¸˜o ca conex˜o do objeto, ou link. Associa¸˜es podem ter um regra que especifica o a co prop´sito da associa¸˜o e pode ser uni ou bidirecional (indicadando se os dois o ca objetos participantes do relacionamento podem mandar mensagens para o outro, ou se apenas um deles sabe sobre o outro). Cada ponta da associa¸˜o tamb´m ca e possui uma valor de multiplicidade, que dita como muitos objetos neste lado da associa¸˜o pode relacionar-se com o outro lado. ca Em UML, associa¸˜es s˜o representadas como linhas conectando as classes co a participantes do relacionamento, e podem tamb´m mostrar a regra e a mul- e tiplicidade de cada um dos participantes. A multiplicidade ´ exibida como e um intervalo [min . . . max] de valores n˜o negativos, com um asterisco no lado a m´ximo representando infinito. a Figura 12.4: Exemplo de associa¸˜o ca Agrega¸˜o ca Agrega¸˜es s˜o um tipo especial de associa¸˜o no qual as duas classes partici- co a ca pantes n˜o possuem em n´ igual, mas fazem um relacionamento todo-parte. a ıvel Uma agrega¸˜o descreve como a classe que possui a regra do todo, ´ composta ca e (tem) de outras classes, que possuem a regra das partes. Para agrega¸˜es, a co classe que age como o todo sempre tem uma multiplicidade de um. Em UML, agrega¸˜es s˜o representadas por uma associa¸˜o que mostra co a ca um romb´ide no lado do todo. Representa¸˜o visual de um relacionamento o ca Agrega¸˜o em UML. ca http://www.candidatoreal.com Figura 12.5: Exemplo de agrega¸˜o ca Composi¸˜o ca Composi¸˜es s˜o associa¸˜es que representam agrega¸˜es muito fortes. Isto co a co co significa que composi¸˜es formam relacionamentos todo-parte tamb´m, mas o co e relacionamento ´ t˜o forte que as partes n˜o pode existir independentes. e a a Em UML, composi¸˜es s˜o representadas por um romb´ide s´lido no lado co a o o do todo. 139
  • 141. http://www.candidatoreal.com Figura 12.6: Exemplo de composi¸˜o ca 12.3 Diagramas de seq¨ˆncia ue Diagramas de seq¨ˆncia mostram a troca de mensagens entre diversos objetos, ue numa situa¸˜o espec´ ca ıfica e delimitada no tempo. Diagramas de seq¨ˆncia colo- ue cam ˆnfase especial na ordem e nos momentos nos quais mensagens para os e objetos s˜o enviadas. a Em diagramas de seq¨ˆncia, objetos s˜o representados atrav´s de linhas ue a e verticais tracejadas, com o nome do objeto no topo. O eixo do tempo ´ tamb´m e e vertical, aumentando para baixo, de modo que as mensagens s˜o enviadas de um a objeto para outro na forma de setas com a opera¸˜o e os nomes dos parˆmetros. ca a Figura 12.7: Exemplo de diagrama de seq¨ˆncia ue http://www.candidatoreal.com Mensagens podem ser s´ ıncronas, o tipo normal de mensagem de chamada em que o controle ´ passado para o objeto chamado at´ o m´todo ter terminado e e e sua execu¸˜o, ou ass´ ca ıncronas, em que o controle ´ passado diretamente para o e objeto chamado. Mensagens s´ ıncronas possuem uma caixa vertical no lado do objeto chamado para mostrar o controle do fluxo do programa. 12.4 Diagramas de colabora¸˜o ca Diagramas de colabora¸˜o mostram as intera¸˜es que ocorrem entre os objetos ca co participantes numa situa¸˜o espec´ ca ıfica. A informa¸˜o ´ parecida com a mostrada ca e 140
  • 142. http://www.candidatoreal.com pelos diagramas de seq¨ˆncia, mas neste, a ˆnfase ´ colocada em como as in- ue e e tera¸˜es ocorrem no tempo, enquanto os diagramas de colabora¸˜o colocam os co ca relacionamentos entre os objetos e sua topologia em destaque. Em diagramas de colabora¸˜o, as mensagens enviadas de um objeto para ca outro s˜o representadas por setas, mostrando o nome da mensagem, parˆmetros, a a e a seq¨ˆncia da mensagem. Diagramas de colabora¸˜o s˜o especialmente in- ue ca a dicados para mostrar um fluxo ou situa¸˜o espec´ ca ıfica do programa e podem, rapidamente, demonstrar ou explanar um processo na l´gica do programa. o Figura 12.8: Exemplo de diagrama de colabora¸˜o ca 12.5 Diagramas de estado Diagramas de Estado mostram os diferentes estados de um objeto durante sua vida, e o est´ımulo que faz com que o objeto mude seu estado. Diagramas de estado vˆem objetos como m´quinas de estado. e a Estados s˜o os blocos constru´ a ıdos dos Diagramas de estado. Um estado per- http://www.candidatoreal.com tence a exatamente uma classe e representa um resumo dos valores dos atributos que uma classe pode tomar. Um estado UML descreve o estado interno de um objeto para uma classe em particular Observe que nem toda mudan¸a em um dos atributos de um objeto pode ser c representada por um estado, mas somente aquelas mudan¸as que podem afetar c significativamente o trabalho do objeto. Existem dois tipos especiais de estados: inicial e final. Eles s˜o especiais a porque nenhum evento pode fazer com que um objeto retorne para seu estado inicial, e da mesma maneira nenhum evento pode tirar um objeto de seu estado final, uma vez que ele j´ o tenha alcan¸ado. a c 141
  • 143. http://www.candidatoreal.com Figura 12.9: Exemplo de diagrama de estado http://www.candidatoreal.com 142
  • 144. http://www.candidatoreal.com 12.6 Diagramas de atividade Uma atividade ´ um passo simples num processo. Uma atividade ´ um estado no e e sistema com atividade interna e, pelo menos, uma transi¸˜o de sa´ ca ıda. Atividades podem tamb´m ter mais de uma transi¸˜o de sa´ se elas possuem condi¸˜es e ca ıda co diferentes. O diagrama de atividade descreve a seq¨ˆncia de atividades num sistema ue com a ajuda das atividades. Diagramas de atividade s˜o uma forma especial de a diagramas de estado, que somente (ou principalmente) cont´m atividades. e Diagramas de atividade s˜o similares aos diagramas de fluxo de procedi- a mentos, com a diferen¸a de que todas as atividades s˜o claramente anexas aos c a objetos. Diagramas de atividade s˜o sempre associados a uma classe, uma opera¸˜o a ca ou um caso de uso. Diagramas de atividade suportam atividades seq¨enciais bem como parale- u las. A execu¸˜o paralela ´ representada pelos ´ ca e ıcones Forquilha/Esperar, e para as atividades executadas em paralelo, n˜o ´ importante a ordem na qual elas se a e executam (elas podem ser executadas ao mesmo tempo ou uma ap´s a outra). o Atividades podem formar hierarquias, isto significa que uma atividade pode ser composta por diversas atividades em detalhe, na qual as transi¸˜es de en- co trada e sa´ devem corresponder `s transi¸˜es de entrada e sa´ do diagrama ıda a co ıda de detalhe. http://www.candidatoreal.com Figura 12.10: Exemplo de diagrama de atividade 143
  • 145. http://www.candidatoreal.com 12.7 Elementos auxiliares Existem dois elementos em UML que n˜o possuem nenhum valor real semˆntico a a para o modelo, mas auxiliam a elucidar partes do diagrama. Estes elementos s˜o: a Linhas de texto. S˜o uteis para adicionar informa¸˜es curtas de texto ao di- a ´ co agrama. S˜o textos livres. a Notas. S˜o uteis para adicionar informa¸˜es mais detalhadas sobre um objeto a ´ co ou situa¸˜o espec´ ca ıfica. Elas possuem a grande vantagem de poderem ser ancoradas a elementos UML para mostrar que a nota pertence a um objeto espec´ıfico ou situa¸˜o. ca Caixas. S˜o retˆngulos de forma livre que podem ser usados para agrupar itens, a a tornando os diagramas mais leg´ ıveis. 12.8 Diagramas de componente Diagramas de componente mostram os componentes do software (sejam com- ponentes de tecnologias como KParts, componentes CORBA ou Java Beans ou apenas se¸˜es do sistema que s˜o claramente distintas) e os artefatos de que eles co a s˜o feitos como arquivos de c´digo fonte, bibliotecas de programa¸˜o ou tabelas a o ca de bancos de dados relacionais. Componentes podem possui interfaces (isto ´ classes abstratas com opera¸˜es) e co que permitem associa¸˜es entre componentes. co 12.9 Diagramas de distribui¸˜o ca Diagramas de distribui¸˜o mostram as instˆncias dos componentes de tempo ca a de execu¸˜o e suas associa¸˜es. Eles incluem n´s que s˜o recursos f´ ca co o a ısicos, tipi- camente um computador simples. Eles tamb´m mostram interfaces e objetos e (instˆncias da classe). a http://www.candidatoreal.com 144
  • 146. http://www.candidatoreal.com Cap´ ıtulo 13 Gerˆncia de Configura¸˜o e e ca Mudan¸as c A gest˜o da configura¸˜o do software ´ uma atividade guarda-chuva e ´ aplicada a ca e e ao longo de todo o processo de software. O gerenciamento de configura¸˜o e de ca solicita¸˜es de mudan¸a envolve os seguintes itens: co c • Identifica¸˜o dos itens de configura¸˜o; ca ca • Restri¸˜o das mudan¸as nesses itens; ca c • Auditoria das mudan¸as nesses itens; c • Defini¸˜o e o gerenciamento das configura¸˜es desses itens. ca co Os m´todos e ferramentas utilizadas para o controle das mudan¸as ´ consid- e c e erado com o Sistema de Gerenciamento de Mudan¸as de uma organiza¸˜o. Ele c ca ´ contem informa¸˜es chaves sobre os processos de desenvolvimento, promo¸˜o, e co ca implanta¸˜o e manuten¸˜o de produtos da organiza¸˜o e armazenam a base de ca ca ca ativos e de artefatos potencialmente reutiliz´veis resultantes da execu¸˜o desses a ca processos. Sendo assim, ele ´ parte integrante dos processos gerais de desen- e volvimento. Sem o controle dos in´meros artefatos produzidos pelas muitas pessoas que u trabalham em um projeto, s˜o criados artefatos conflitantes, gerando um grande a desperd´ ıcio para a organiza¸ao. Os principais problemas s˜o a atualiza¸˜o si- c˜ a ca http://www.candidatoreal.com multˆnea, a notifica¸˜o limitada e a existˆncia de v´rias vers˜es. A seguir, cada a ca e a o uma delas ´ descrita em detalhes. e • Atualiza¸˜o simultˆnea: ca a Quando dois ou mais membros da equipe trabalham separadamente no mesmo artefato, o ultimo membro a fazer mudan¸as desfaz o trabalho re- c alizado pelo anterior. O problema b´sico ´ que se um sistema n˜o permite a a e a atualiza¸˜o simultˆnea, isso leva as mudan¸as em s´rie e diminui o ritmo do ca a c e processo de desenvolvimento. Entretanto, com a atualiza¸˜o simultˆnea, ca a o desafio e detectar se ocorreram atualiza¸˜es simultaneamente e resolver co 145
  • 147. http://www.candidatoreal.com quaisquer problemas de integra¸˜o quando essas mudan¸as forem incor- ca c poradas. • Notifica¸˜o limitada: ca Quando um problema ´ corrigido nos artefatos compartilhados por v´rios e a desenvolvedores e alguns deles n˜o s˜o notificados da mudan¸a. a a c • V´rias vers˜es: a o A maioria dos programas de grande porte ´ desenvolvida em v´rias vers˜es e a o evolutivas. Uma vers˜o pode estar sendo usada pelo cliente, enquanto a outra est´ em teste e uma terceira ainda est´ em desenvolvimento. Se a a forem encontrados problema em qualquer uma das vers˜es, as corre¸˜es o co devem ser propagadas entre elas. Isso pode levar a confus˜es que levam o a confus˜es dispendiosas. Um sistema de Gerencia de Configura¸˜o ´ util o ca e ´ para gerenciar as diversas variantes de sistemas de software em desenvolvi- mento pois controla as vers˜es que s˜o utilizadas em determinadas builds o a do software ao compilar builds de programas individuais ou de uma nova vers˜o do software de acordo com a especifica¸˜o definida pelo usu´rio e ao a ca a impor pol´ıticas de desenvolvimento do sistema. Os principais benef´ ıcios do gerenciamento da mudan¸a s˜o: c a – Suporte a diversos m´todos de desenvolvimento; e – Preserva¸˜o da integridade do produto; ca – Garantia da abrangˆncia e precis˜o do produto configurado; e a – Ambiente est´vel no qual o produto ser´ desenvolvido; a a – Restri¸˜o das mudan¸as feitas nos artefatos com base nas pol´ ca c ıticas do projeto; – Trilha de auditoria indicando por que, quando e por quem um artefato foi alterado. Al´m disso, ele armazena dados detalhados sobre as altera¸˜es, tais como, e co quem criou uma vers˜o especifica, quais vers˜es dos c´digo fonte foram a o o utilizadas em determinado build, alem de outras informa¸˜es relevantes. co 13.1 As Atividades http://www.candidatoreal.com Na disciplina de Gerencia de Configura¸˜o as principais atividades s˜o: ca a • Configurar ambiente; • Estabelecer pol´ ıticas; • Escrever plano; • Criar unidade de implanta¸˜o; ca • Relatar status de configura¸˜o; ca • Realizar auditorias de configura¸˜o; ca 146
  • 148. http://www.candidatoreal.com • Estabelecer processo de controle de mudan¸as; c • Revisar solicita¸˜o de mudan¸a; ca c • Confirmar, duplicar ou recusar requisi¸˜o de mudan¸a; ca c • Crias espa¸os de trabalho de integra¸˜o; c ca • Criar baselines; • Promover baselines ( de desenvolvimento para testes, de testes para ho- mologa¸˜o, etc.); ca • Criar espa¸o de trabalho de desenvolvimento; c • Fazer mudan¸as; c • Liderar mudan¸as; c • Atualizar espa¸o de trabalho; c • Enviar solicita¸˜o de mudan¸a; ca c • Atualizar solicita¸˜o de mudan¸a. ca c 13.2 Artefatos Na disciplina de Gerencia de Configura¸˜o os principais artefatos s˜o: ca a • Reposit´rio do projeto; o • Plano de gerenciamento da configura¸˜o; ca • Unidade de implanta¸˜o; ca • M´tricas do projeto; e • Registro da auditoria de configura¸˜o. ca 13.3 Pap´is e Responsabilidades e Na disciplina de Gerencia de Configura¸˜o os principais pap´is e responsabili- ca e dades s˜o: a http://www.candidatoreal.com • Gerente de configura¸˜o ca – Configurar ambiente; – Estabelecer pol´ ıticas; – Escrever plano; – Criar unidades de implanta¸˜o; ca – Relatar status de configura¸˜o; ca – Realizar auditoria de configura¸˜o. ca 147
  • 149. http://www.candidatoreal.com • Gerente de controle de mudan¸a c – Estabelecer processo de controle de mudan¸as; c – Revisar solicita¸˜o de mudan¸a; ca c – Confirmar, duplicar ou recusar solicita¸˜o de mudan¸a. ca c • Integrador – Criar espa¸os de trabalho de integra¸˜o; c ca – Criar baselines; – Promover baselines. • Outros papeis – Criar espa¸o de trabalho de desenvolvimento; c – Fazer mudan¸as; c – Liderar mudan¸as; c – Atualizar espa¸o de trabalho; c – Enviar solicita¸˜o de mudan¸a; ca c – Atualizar solicita¸˜o de mudan¸a. ca c http://www.candidatoreal.com 148
  • 150. http://www.candidatoreal.com Cap´ ıtulo 14 CMM - Capability Maturity Model CMM, do acrˆnimo em inglˆs de Capability Maturity Model, ´ uma metodolo- o e e gia de diagn´stico e avalia¸˜o de maturidade do desenvolvimento de softwares o ca em uma organiza¸˜o. ca Ele descreve os principais elementos de um processo de desenvolvimento de software. O CMM descreve os est´gios de maturidade atrav´s dos quais orga- a e niza¸˜es passam enquanto evoluem o seu ciclo de desenvolvimento de software, co atrav´s de avalia¸˜o cont´ e ca ınua, identifica¸˜o de problemas e a¸˜es corretivas den- ca co tro de uma estrat´gia de melhoria dos processos. Este caminho de melhoria ´ e e definido por cinco n´ıveis de maturidade: 1. Inicial 2. Repetitivo 3. Definido 4. Gerenciado 5. Em Otimiza¸˜o ca O CMM fornece `s organiza¸˜es orienta¸˜o sobre como ganhar controle do a co ca processo de desenvolvimento de software e como evoluir para uma cultura de http://www.candidatoreal.com excelˆncia na gest˜o de software. O objetivo principal nas transi¸˜es desses e a co n´ ıveis de maturidade ´ a realiza¸˜o de um processo controlado e mensurado e ca como a funda¸˜o para melhoria cont´ ca ınua. Cada n´ de maturidade possui um ıvel conjunto de pr´ticas de software e gest˜o espec´ a a ıficas, denominadas ´reas-chave a do processo (KPA). Estas devem ser implantadas para a organiza¸˜o atingir o ca n´ de maturidade em quest˜o. ıvel a O CMM identifica os n´ıveis atrav´s dos quais uma organiza¸˜o deve evoluir e ca para estabelecer uma cultura de excelˆncia na engenharia de software. Como e cada n´ıvel de maturidade do CMM forma a base necess´ria sobre a qual o a pr´ximo n´ ser´ constru´ o ıvel a ıdo, normalmente tentar pular n´ıveis ´ improdutivo, e 149
  • 151. http://www.candidatoreal.com porque n˜o haver´ estabilidade na melhoria do processo, justamente pela falta a a da base que a sustentaria. Figura 14.1: Modelo CMM 14.1 Os n´ ıveis de maturidade no CMM 14.1.1 N´ ıvel 1 - Inicial No n´ 1 de maturidade os processos s˜o geralmente ad hoc e a organiza¸˜o ıvel a ca geralmente n˜o disp˜e de um ambiente est´vel. O sucesso nestas organiza¸˜es a o a co depende da competˆncia e hero´ e ısmo dos funcion´rios e n˜o no uso de processos a a estruturados. Devido ao imediatismo, um ambiente ca´tico, o n´ o ıvel 1 de ma- turidade raramente produz um produto ou servi¸o que funcione; assim, freq¨en- c u temente eles excedem o or¸amento e o prazo em seus projetos. c 14.1.2 N´ ıvel 2 - Repetitivo No n´ 2 de maturidade, o desenvolvimento do software ´ repetido. O processo ıvel e pode n˜o se repetir para todos os projetos da organiza¸˜o. A organiza¸˜o pode a ca ca usar ferramentas de Gerˆncia de Projetos para mapear os custos e o prazo do e projeto. A ado¸˜o de um processo de desenvolvimento ajuda a garantir que pr´ticas ca a existentes s˜o utilizadas em momentos de stress. Quando estas pr´ticas s˜o ado- a a a tadas, os projetos decorrem e s˜o gerenciados de acordo com o planejamento a inicial. http://www.candidatoreal.com O status do projeto e os servi¸os entregues s˜o vis´ c a ıveis ao gerenciamento (por exemplo: ´ poss´ e ıvel a visualiza¸˜o de marcos do projeto e o t´rmino da ca e maioria das tarefas). T´cnicas de gerenciamento de projetos s˜o estabelecidas para mapear custos, e a prazos, e funcionalidades. Um m´ ınimo de disciplina nos processos ´ estabelecido e para que se possa repetir sucessos anteriores em projetos com escopo e aplica¸˜o ca similar. Ainda h´ um risco significante de exceder os custos e estimativas de a prazo de desenvolvimento. 150
  • 152. http://www.candidatoreal.com As ´reas chaves de processo desse n´ de maturidade s˜o: a ıvel a • Gerˆncia de Requisitos (RM); e • Planejamento de Projeto de Software (SPP); • Acompanhamento e Supervis˜o de Projeto de Software (SPTO); a • Gerˆncia de Subcontratato de Software (SSM); e • Garantia da Qualidade de Software (SQA); • Gerˆncia da Configura¸ao de Software (SCM). e c˜ 14.1.3 N´ ıvel 3 - Definido A organiza¸˜o possui um conjunto de processos padr˜es, os quais s˜o a base ca o a do n´ıvel 3. Estes est˜o estabelecidos e s˜o melhorados periodicamente. Estes a a processos padr˜es s˜o usados para estabelecer uma consistˆncia dentro da orga- o a e niza¸˜o. Projetos estabelecem seus processos definidos pelo conjunto de padr˜es ca o processuais da organiza¸˜o. ca O gerenciamento da organiza¸˜o estabelece os objetivos dos processos baseado ca no conjunto de padr˜es pr´-definidos e garante que estes objetivos sejam encam- o e inhados de forma apropriada. Uma cr´ıtica distin¸˜o entre os n´ ca ıveis 2 e 3 ´ o escopo dos padr˜es, descri¸˜o e o ca dos processos e procedimentos. No n´ ıvel 2, os padr˜es, descri¸˜es de proces- o co sos e procedimentos podem ser bem diferentes em cada instˆncia espec´ a ıfica do processo (por exemplo, em um projeto particular). No n´ 3, os padr˜es, de- ıvel o scri¸˜es de processo e procedimentos para o projeto s˜o guiados pelo conjunto co a padr˜o de processos da organiza¸˜o. a ca As ´reas chaves de processo desse n´ de maturidade s˜o: a ıvel a • Foco no Processo da Organiza¸˜o (OPF); ca • Defini¸˜o do Processo da Organiza¸˜o (OPD); ca ca • Programa de Treinamento (TP); • Gerˆncia Integrada de Software (ISM); e http://www.candidatoreal.com • Engenharia de Produto de Software (SPE); • Coordena¸˜o entre Grupos (IC); ca • Revis˜es T´cnicas Formais (PR). o e 151
  • 153. http://www.candidatoreal.com 14.1.4 N´ ıvel 4 - Gerenciado Utilizando m´tricas precisas, o gerenciamento pode efetivamente controlar os es- e for¸os para desenvolvimento de software. Em particular, o gerenciamento pode c identificar caminhos para ajustar e adaptar o processo para projetos particu- lares sem perda de m´tricas de qualidade ou desvios das especifica¸˜es. e co Organiza¸˜es neste n´ co ıvel conseguem metas qualitativas para o processo de desenvolvimento de software e de manuten¸˜o. ca Subprocessos s˜o selecionados conforme a importˆncia na performance total a a do processo. Esses subprocessos selecionados s˜o controlados usando t´cnicas a e estat´ ısticas e qualitativas. Uma cr´ıtica distin¸˜o entre o n´ de maturidade 3 e 4 ´ a previsibilidade ca ıvel e do desempenho do processo. No n´ 4, o desempenho do processo ´ controlado ıvel e usando t´cnicas estat´ e ısticas e qualitativas, e ´ previs´ qualitativamente. No e ıvel n´ 3, os processos s˜o somente previs´ ıvel a ıveis qualitativamente. As ´reas chaves de processo desse n´ de maturidade s˜o: a ıvel a • Gerˆncia Quantitativa do Processo (QPM); e • Gerˆncia de Qualidade de Software (SQM). e 14.1.5 N´ ıvel 5 - Otimizado O n´ de maturidade 5 foca no cont´ ıvel ınuo aumento do desempenho dos proces- sos atrav´s de melhoras de inova¸˜o tecnol´gica e incremental. Objetivos de e ca o melhoria quantitativa dos processos para a organiza¸˜o s˜o estabelecidos, con- ca a tinuamente revisados, refletindo os objetivos da organiza¸˜o, e usando crit´rios ca e de gerˆncia de processos. e Os efeitos da melhora da revis˜o dos processos s˜o medidas e acompan- a a hadas utilizando-se de processos de melhoria de qualidade. Ambos, os processo definidos e o conjunto de processos padr˜es da organiza¸˜o s˜o alvos de melhoria o ca a de m´tricas. e As ´reas chaves de processo desse n´ de maturidade s˜o: a ıvel a http://www.candidatoreal.com • Preven¸˜o de Defeitos (DP); ca • Gerˆncia da Mudan¸a Tecnol´gica (TCM); e c o • Gerˆncia da Mudan¸a do Processo (PCM). e c 14.2 Um pouco mais sobre KPA’s As ´reas-chave de processo do N´ 2 est˜o focadas nas quest˜es do projeto de a ıvel a o software relacionadas ao estabelecimento de controles b´sicos de gerenciamento a do projeto, e tˆm os seguintes objetivos: e 152
  • 154. http://www.candidatoreal.com • Gerˆncia de Requisitos ` Estabelecer um entendimento comum entre o e a cliente e os requisitos (desejos, necessidades) do cliente que ser˜o atendidos a pela solu¸˜o a ser desenvolvida; ca • Planejamento de Projeto de Software ` Estabelecer planos coerentes para a realizar a engenharia de software e o gerenciamento do projeto; • Acompanhamento e Supervis˜o de Projeto de Software ` Estabelecer uma a a adequada visibilidade do andamento (progresso) do software, de forma que o gerenciamento possa tomar a¸˜es corretivas se o planejamento original co n˜o estiver sendo seguido; a • Gerˆncia de Subcontratato de Software ` Selecionar fornecedores qualifi- e a cados e gerenci´-los de forma eficiente; a • Garantia da Qualidade de Software ` Fornecer ao gerenciamento visibili- a dade do processo em uso e dos produtos em constru¸˜o; ca • Gerˆncia da Configura¸ao de Software ` Estabelecer e manter a integridade e c˜ a dos produtos durante todo o ciclo de vida do software. As ´reas-chave do N´ 3 est˜o focadas tanto nas quest˜es do projeto, quanto a ıvel a o da organiza¸˜o, conforme a organiza¸˜o estabelece uma infra-estrutura que efe- ca ca tivamente institucionaliza os processos de engenharia de software e de gerenci- amento de todos os projetos. As ´reas-chave do N´ a ıvel 4 est˜o focadas no estabelecimento quantitativo a tanto do processo de software, quanto dos produtos em constru¸˜o. ca As ´reas-chave do N´ 5 cobrem quest˜es que tanto a organiza¸˜o, quanto a ıvel o ca os projetos devem considerar para implementar melhorias no processo de soft- ware que sejam cont´ ınuas e mensur´veis. a http://www.candidatoreal.com ´ Figura 14.2: Areas-chave de processo no modelo CMM 14.3 Efeitos da evolu¸˜o do n´ ca ıvel de maturidade A evolu¸˜o no n´ de maturidade causa efeitos nas pessoas, nas tecnologias e ca ıvel nas pr´ticas de medidas. A seguir s˜o apresentados esses efeitos em cada n´ a a ıvel 153
  • 155. http://www.candidatoreal.com de maturidade. • Pessoas – N´ 1: Sucesso depende de indiv´ ıvel ıduos e her´is. Regime constante o de emergˆncia (apagar incˆndio). Relacionamento entre grupos ´ e e e descoordenado e muitas vezes conflitante; – N´ 2: Sucesso ainda depende de indiv´ ıvel ıduos, mas passam a contar com apoio gerencial. Os compromissos s˜o compreendidos e gerenci- a ados. Existe treinamento para algumas fun¸˜es; co – N´ıvel 3: Grupos de projeto trabalham de maneira coordenada. O treinamento ´ planejado de acordo com as necessidades de cada papel e e aplicado convenientemente; – N´ 4: Existe um forte sentido de trabalho em equipe; ıvel – N´ 5: Todos est˜o engajados em atividades de melhoria cont´ ıvel a ınua. • Tecnologia – N´ 1: A introdu¸˜o de novas tecnologias ´ arriscada; ıvel ca e – N´ıvel 2: Atividades bem definidas facilitam a introdu¸˜o de novas ca tecnologias; – N´ 3: Novas tecnologias s˜o avaliadas qualitativamente; ıvel a – N´ 4: Novas tecnologias s˜o avaliadas quantitativamente; ıvel a – N´ıvel 5: Novas tecnologias s˜o planejadas e introduzidas com total a controle. • Medidas – N´ 1: Coleta de dados ´ feita de maneira ad hoc; ıvel e – N´ 2: Coleta de dados de atividades de planejamento e acompan- ıvel hamento ´ feita de maneira sistem´tica; e a – N´ 3: Todos os processos definidos tˆm coleta sistem´tica de dados, ıvel e a os quais s˜o compartilhados por todos os projetos da organiza¸˜o; a ca – N´ıvel 4: A defini¸ao e coleta de dados s˜o padronizadas na orga- c˜ a niza¸˜o e os dados s˜o usados para entender os processos de maneira ca a quantitativa e estabiliz´-los; a http://www.candidatoreal.com – N´ ıvel 5: Os dados coletados s˜o usados para avaliar e selecionar a possibilidades de melhoria de processos. 154
  • 156. http://www.candidatoreal.com Parte IV Linguagem de Programa¸˜o ca Java http://www.candidatoreal.com 155
  • 157. http://www.candidatoreal.com Cap´ ıtulo 15 Conceitos B´sicos de Java a 15.1 Pacotes Em projetos pequenos ´ comum colocar todos os arquivos java em um unico e ´ diret´rio. Essa ´ uma abordagem r´pida, simples. No entanto, se o pequeno o e a projeto come¸ar a crescer, o n´mero de arquivos aumentar´ e administr´-los em c u a a um unico diret´rio pode se tornar um problema. ´ o Pacotes n˜o s˜o nada mais que uma forma de organiza os arquivos que inte- a a gram o projeto em diferentes diret´rios de acordo com suas funcionalidades ou o categoria a qual eles perten¸am. c Por exemplo, os arquivos no pacote java.io s˜o todos relacionados com fun- a cionalidades de I/O, enquanto os arquivos do pacote java.net fornecem fun- cionalidades para tratar de redes. Em aplica¸˜es com interface gr´fica, por co a exemplo, ´ muito comum encontrar um diret´rio chamado ui (user interface). e o Al´m de melhorar a organiza¸˜o dos arquivos que comp˜e o projeto, a uti- e ca o liza¸˜o de pacotes ajuda a evitar colis˜o de nomes entre classes. Por exemplo: ca a Se um programador definir uma classe chamada Vector, esse nome iria colidir com a classe Vector da JDK. No entanto, isso n˜o ocorre por que a JDK usa a java.util como um nome de pacote para a classe Vector. Dessa forma, a classe implementada pelo programador pode se chamar Vector. A figura 15.1 mostra uma estrutura de diret´rios criada pela utiliza¸˜o de pacotes. o ca http://www.candidatoreal.com 156
  • 158. http://www.candidatoreal.com Para indicar que uma classe pertence a um determinado pacote basta inciar o arquivo java como mostrado no exemplo a seguir. //Somente c´digo pode vir antes dessa linha o package world; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } } 15.2 Modificadores de Acesso Os modificadores de acesso s˜o keywords adicionadas ao c´digo para determinar a o se atributos, m´todos ou classes poderam ser acessados a partir de outras classes. e Os modificadores de acesso presentes na linguagem Java s˜o: public, private, a protected e package-private (impl´ıcito quando n˜o ´ usado nenhum modificador a e na declara¸˜o da classe, atributo ou m´todo). ca e Uma classe p´blica pode ser acessada por qualquer outra classe. Caso seja u declarada sem o modificador public, a classe ser´ package-private, ou seja, s´ a o poder´ ser acessada por classes do mesmo pacote. a Os m´todos e atributos aceitam outros modificadores al´m do public. O e e modificador private d´ acesso somente dentro da classe, enquanto o modificador a protected permite acesso dentro do pacote e `s subclasses. a Assim como nas classes, caso nenhum modificador seja declarado, fica impl´ıcito o modificador package-private. A tabela 15.1 abaixo resumo as permi¸˜es de acesso impostas por cada um co dos modificadores: Modificador Pacote Subclasse Todos public sim sim sim private n˜o a n˜o a n˜o a protected sim sim n˜o a nenhum sim n˜o a n˜o a http://www.candidatoreal.com Tabela 15.1: Modificadores de Acesso 15.3 Vari´veis a Na linguagem de programa¸˜o Java s˜o definidos os seguintes tipos de vari´veis: ca a a • Vari´veis de Instˆncia (Atributos n˜o est´ticos): Um objeto armazena seu a a a a estado individual em atributos n˜o est´ticos, ou seja, declarados sem o a a 157
  • 159. http://www.candidatoreal.com modificador static. Atributos n˜o est´ticos s˜o conhecidos com vari´veis a a a a de instˆncia por que seus valores s˜o unicos para cada instˆncia de uma a a ´ a classe; • Vari´veis de Classe (Atributos est´ticas): Uma vari´vel de classe ´ todo a a a e atributo declarado com o modificador static. Isso indica ao compilador que existe apenas uma c´pia da vari´vel, n˜o importando o n´mero de o a a u vezes que essa classe foi instanciada. Portanto, quando o valor de uma vari´vel de classe ´ alterada em um dos objetos, o novo valor se torna a e vis´ para todos os outros objetos da mesma classe. Para impedir que ıvel uma vari´vel de classe tenha seu valor alterado ela deve ser declarada com a o mofificador final. • Vari´veis Locais: As vari´veis locais s˜o utilizadas para armazenar o es- a a a tado tempor´rio dos m´todos. A sintaxe de declara¸˜o de uma vari´vel a e ca a local ´ similar a de declara¸˜o de uma vari´vel de instˆncia. O que deter- e ca a a mina se uma vari´vel ´ local ´ a parte do c´digo em que ela ´ declarada a e e o e - entre as chaves que determinam o in´ ıcio e o fim de um m´todo. Uma e vari´vel ´ vis´ a e ıvel apenas para o m´todo no qual foi declarada; n˜o pode e a ser acessada do resto da classe. public class Bicicleta { // Vari´vel de Inst^ncia a a public int velocidade = 0; // Vari´vel de Classe a public static int qtdRodas = 2; // Vari´vel de Classe com valor constante a public static final String marca = "Caloi"; public void aumentaVelocidade (int incremento){ // Vari´vel Local a int novaVelocidade; = velocidade + incremento; velocidade = novaVelocidade; } } http://www.candidatoreal.com 15.4 Operadores A lista abaixo sumariza os operadores suportados pela linguagem Java: • Operador de Atribui¸˜o Simples ca = Operador de Atribui¸˜o Simples ca 158
  • 160. http://www.candidatoreal.com • Operadores aritm´ticos e + Adi¸˜o (Tamb´m utilizado para concatena¸˜o de Strings) ca e ca - Subtra¸˜o ca ∗ Multiplica¸˜o ca / Divis˜o a % Resto da Divis˜o a • Operadores Un´rios a + Operador un´rio mais a − Operador un´rio menos; Inverte o sinal de uma vari´vel a a ++ Operador de Incremento; Incrementa um valor de 1 −− Operador de Decremento; Decrementa o valor de 1 ! Operador L´gico de complemento; Inverte o valor de um boolean o • Operadores de Compara¸˜o ca == Igual != Diferente > Maior >= Maior ou Igual < Menor <= Menor ou Igual instanceof Compara um objeto a um tipo espec´ ıfico • Operadores Condicionais && AND Condicional || OR Condicional ?: Tern´rio (Forma curta para if-then-else) a • Operadores Bit a Bit e de Deslocamento (Shift) Complemento bit a bit un´rio a http://www.candidatoreal.com << shift para esquerda >> Shift para direita >>> Shift para direita sem sinal & AND bit a bit ∧ OR exclusivo bit a bit | OR bit a bit 159
  • 161. http://www.candidatoreal.com 15.5 Express˜es, Senten¸as e Blocos o c Uma express˜o ´ uma constru¸˜o feita de vari´veis, operadores e chamadas de a e ca a m´todos, descrita de acordo com a sintaxe da linguagem. A seguir, exemplos e de express˜es: o //Declara¸~o e inicializa¸~o de uma v´ri´vel do tipo int ca ca a a int cadence = 0; //Atribui¸~o de valor a uma posi¸~o de um vetor de int ca ca anArray[0] = 100; //Imprimindo um valor na tela System.out.println("Element 1 at index 0: " + anArray[0]); //Atribui¸~o de valor baseado no resultado de uma opera¸~o de adi¸~o ca ca ca result = 1 + 2; //Utiliza¸~o de par^ntesis para explicitar ordem de execu¸~o das opera¸~es ca e ca co zaz = x / (y+10); Em java uma senten¸a (statements) ´ definida como uma unidade completa c e de execu¸˜o. Os seguintes tipos de express˜es podem se tornar senten¸as quando ca o c terminadas com um ponto e v´ ırgula: (i) Express˜es de Atribui¸˜o; (ii) Ex- o ca press˜es com ++ ou −−; (iii) Chamada de m´todos e (iv) Express˜es de Cria¸˜o o e o ca de objetos. // Statement de atribui¸~o ca aValue = 8933.234; // Statement de incremento aValue++; // Statement de chamada de m´todo e System.out.println("Hello World!"); // Statement de cria¸~o de objeto ca Bicycle myBike = new Bicycle(); Essas s˜o as chamadas statements de express˜o. Existem ainda as state- a a ments de declara¸˜o de vari´vel e de controle de fluxo. ca a Um bloco ´ um grupo de zero ou mais statements entre um par de chaves. e O exemplo a seguir ilustra o uso de blocos em Java: http://www.candidatoreal.com class BlockDemo { public static void main(String[] args) { boolean condition = true; if (condition) { // begin block 1 System.out.println("Condition is true."); } // end block one else { // begin block 2 System.out.println("Condition is false."); } // end block 2 } } 160
  • 162. http://www.candidatoreal.com 15.6 Comandos de Controle de Fluxo As statements de um c´digo geralmente s˜o executadas na medida na ordem em o a aparecem. No entanto, os comandos de controle de fluxo podem ser utilizadas ara interromper o fluxo de execu¸˜o empregando decis˜es, looping e desvios, ca o permitindo que ao programa executar condicionalmente blocos de c´digo par- o ticulares. Os principais comandos de controle de fluxo da linguagem Java s˜o a mostrados a seguir. If-Then void applyBrakes(){ if (isMoving){ // the "if" clause: bicycle must moving currentSpeed--; // the "then" clause: decrease current speed } } If-Then-Else //Exemplo 1 void applyBrakes(){ if (isMoving) { currentSpeed--; } else { System.err.println("The bicycle has already stopped!"); } } //Exemplo 2 class IfElseDemo { public static void main(String[] args) { int testscore = 76; char grade; if (testscore >= 90) { grade = ’A’; } else if (testscore >= 80) { http://www.candidatoreal.com grade = ’B’; } else if (testscore >= 70) { grade = ’C’; } else if (testscore >= 60) { grade = ’D’; } else { grade = ’F’; } //O resultado ser´ C pois, uma vez que a condi¸~o ´ atendida, a ca e //o restante do c´digo If-Then-Else n~o ´ mais avaliado o a e System.out.println("Grade = " + grade); 161
  • 163. http://www.candidatoreal.com } } Switch class SwitchDemo { public static void main(String[] args) { int month = 2; int year = 2000; int numDays = 0; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: numDays = 31; break; case 4: case 6: case 9: case 11: numDays = 30; break; case 2: if ( ((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0) ) numDays = 29; else numDays = 28; break; default: System.out.println("Invalid month."); break; } http://www.candidatoreal.com //O resultado ser´ 29 a System.out.println("Number of Days = " + numDays); } } While e Do-While //Exemplo While class WhileDemo { public static void main(String[] args){ int count = 1; //Teste realizado antes da execu¸~o do bloco de c´digo ca o 162
  • 164. http://www.candidatoreal.com //Pode acontecer do codigo n~o ser executado nenhuma vez a while (count < 11) { System.out.println("Count is: " + count); count++; } } } //Exemplo Do-While class DoWhileDemo { public static void main(String[] args){ int count = 1; do { System.out.println("Count is: " + count); count++; //Teste ao fim da execu¸~o do bloco de c´digo ca o //C´digo ´ executado ao menos uma vez o e } while (count <= 11); } } For //Exemplo 1 class ForDemo { public static void main(String[] args){ for(int i=1; i<11; i++){ System.out.println("Count is: " + i); } } } //Exemplo 2 for ( ; ; ) { //infinite loop // c´digo o } //Exemplo 3 class EnhancedForDemo { http://www.candidatoreal.com public static void main(String[] args){ int[] numbers = {1,2,3,4,5,6,7,8,9,10}; for (int item : numbers) { System.out.println("Count is: " + item); } } } Break //Exemplo 1 class BreakDemo { 163
  • 165. http://www.candidatoreal.com public static void main(String[] args) { int[] arrayOfInts = {32,87,3,589,12,1076,2000,8,622,127}; int searchfor = 12; int i; boolean foundIt = false; for (i = 0; i < arrayOfInts.length; i++) { if (arrayOfInts[i] == searchfor) { foundIt = true; //Encerra o loop for break; } } if (foundIt) { System.out.println("Found " + searchfor + " at index " + i); } else { System.out.println(searchfor + " not in the array"); } } } //Exemplo 2 class BreakWithLabelDemo { public static void main(String[] args) { int[][] arrayOfInts = {{32,87,3,589}, {12,1076,2000,8}, {622,127,77,955}}; int searchfor = 12; int i; int j = 0; boolean foundIt = false; search: for (i = 0; i < arrayOfInts.length; i++) { for (j = 0; j < arrayOfInts[i].length; j++) { if (arrayOfInts[i][j] == searchfor) { foundIt = true; http://www.candidatoreal.com //Encerra o loop for mais interno //e desvia para o label search break search; } } } if (foundIt) { System.out.println("Found " + searchfor + " at " + i + ", " + j); } else { System.out.println(searchfor + " not in the array"); 164
  • 166. http://www.candidatoreal.com } } } Continue //Exemplo 1 class ContinueDemo { public static void main(String[] args) { String searchMe = "peter piper picked a peck of pickled peppers"; int max = searchMe.length(); int numPs = 0; for (int i = 0; i < max; i++) { //interested only in p’s if (searchMe.charAt(i) != ’p’){ //Vai para o pr´ximo loop sem executar o //o restante do c´digo do bloco for o continue; } //process p’s numPs++; } System.out.println("Found " + numPs + " p’s in the string."); } } //Exemplo 2 class ContinueWithLabelDemo { public static void main(String[] args) { String searchMe = "Look for a substring in me"; String substring = "sub"; boolean foundIt = false; int max = searchMe.length() - substring.length(); http://www.candidatoreal.com test: for (int i = 0; i <= max; i++) { int n = substring.length(); int j = i; int k = 0; while (n-- != 0) { if (searchMe.charAt(j++)!= substring.charAt(k++)) { //Interrompe a itera¸~o do loop while e vai ca //para proxima itera¸~o do loop for, ca //marcada pelo label test continue test; 165
  • 167. http://www.candidatoreal.com } } foundIt = true; break test; } System.out.println(foundIt ? "Found it" : "Didn’t find it"); } } 15.7 Classes Aninhadas No Java existe a possibilidade de se definir classes dentro de outra classe, como se fossem atributos ou m´todos. Algumas das vantagens de se utilizar esse e recurso do Java s˜o: a • Legibilidade: Classes podem ser sgrupadas por similaridade; • Ocultamento: Podem ser privadas ou protegidas; • Redigibilidade: Classes internas possuem acesso aos membros privados da classe que a definiu e vice-versa. Na verdade, o recurso de classes internas surgiu no Java 1.1 com esse prop´sito. o Como s˜o definidas dentro de outras classes, o c´digo fonte fica no mesmo a o arquivo .java. Ao compilar, gera-se v´rios arquivos .class, compondo o nome da a classe externa e interna. Exemplo: Externa.java cont´m a classe Externa, que e define uma classe interna chamada Interna. Ao compilar, gera-se Externa.class ´ e Externa$Interna.class. E importante ressaltar que a classe interna n˜o pode a ter o mesmo nome da classe externa que a define. No Java existem os seguintes tipos de classes internas: • Classes Aninhadas • Classes Instanciadas – Classes Membro – Classes Locais – Classes Anˆnimas o http://www.candidatoreal.com As classes aninhadas s˜o os tipos mais simples de classes internas. Uma a classe ´ definida dentro da outra como se fosse um membro static. Elas permitem e definir acesso privado ou protegido e agrupa classes logicamente relacionadas. S˜o referenciadas via Externa.Interna, como se fosse um atributo est´tico. A a a seguir um exemplo de classe aninhada e de como referenci´-la: a //Classe externa class Par { private Chave chave; 166
  • 168. http://www.candidatoreal.com private Valor valor; public Par(Chave chave, Valor valor) { this.chave = chave; this.valor = valor; } //Classe interna static class Chave { private String nome; public Chave(String nome) { this.nome = nome; } } //Classe interna com prote¸~o de acesso ca protected static class Valor { private int valor; public Valor(int valor) { this.valor = valor; } } } public class Teste { public static void main(String[] args) { Par.Chave chave = new Par.Chave("Nota"); Par.Valor valor = new Par.Valor(10); Par par = new Par(chave, valor); } } 15.8 Tipos Enumerados Tipos enumerados s˜o aqueles que possuem um conjunto finitos de valores que a http://www.candidatoreal.com as vari´veis podem assumir. Por exemplo: esta¸˜es do ano, naipes ou cartas do a co baralho, planetas do sistema solar etc. Originalmente, a forma padr˜o utilizada a para representar tipos enumerados era o chamado int Enum Pattern (tipos enu- merados baseados em inteiros). // int Enum Pattern public static final int SEASON_WINTER = 0; public static final int SEASON_SPRING = 1; public static final int SEASON_SUMMER = 2; public static final int SEASON_FALL = 3; 167
  • 169. http://www.candidatoreal.com Esse tipo de padroniza¸˜o apresentava os seguintes problemas: ca • N˜o seguro quanto ao tipo: Como uma season ´ representada por um a e int, pode-se passar qualquer valor inteiro (inclusive diferente de 0,1,2,3) quando uma season for requerida; ´ • Sem namespace: E necess´rio criar um padr˜o de nomenclatura para evi- a a tar colis˜o com outros tipos enumerados. (Exemplo: SEASON ). a • Valores imprimidos n˜o s˜o explicativos: Como os valores s˜o int, quando a a a impressos n˜o apresentam a informa¸˜o que representam diretamente. a ca Para contornar esses problemas a partir do Java 5 foi introduzido o Typesafe Enum Pattern, a partir do qual os tipos enumerados podem ser expressos de forma mais simples. O c´digo abaixo mostra o uso do novo padr˜o para tipos o a enumerados: public class Weather { //Define tipo enumerado Refrigerante public enum Season = {winter, spring, summer, fall}; private printSeasons() { //Loop recuperando cada um dos valores poss´veis de Season ı for (Season s : Season.values()){ System.out.println(s); } } } 15.9 Anota¸˜es co Anota¸˜es (annotations) provˆem dados sobre o programa mas n˜o s˜o parte do co e a a do programa propriamente dito. Elas n˜o possuem efeito direto na opera¸˜es do a co c´digo com o qual est˜o relacionadas. Esse recurso da linguagem Java permite o a que o programador n˜o se preocupe em escrever c´digo auxiliar (arquivos de a o configura¸˜o, por exemplo). A id´ia ´ que o programador diga o que tem que ca e e ser feito utilizando as anota¸˜es e ferramentas auxiliares fa¸am o restante do co c http://www.candidatoreal.com trabalho. Alguns exemplos do uso de anota¸˜es s˜o: co a • Informa¸˜es para o compilador: Anota¸˜es podem ser utilizadas pelo com- co co pilador para detectar erros ou sumprimir mensagens de warning; • Processamento em tempo de Compila¸˜o ou Deploy: Ferramentas aux- ca iliares podem processar as anota¸˜es para gerar c´digo, arquivos XML co o etc; • Processamento em tempo de Execu¸˜o: Algumas anota¸˜es podem ser ca co processsadas em tempo de execu¸˜o; ca 168
  • 170. http://www.candidatoreal.com • Documenta¸˜o: Anota¸oes podem ser utilizadas para substituir coment´rios ca c˜ a no c´digo. o Os trˆs pr´-defindos de anota¸˜es utilizadas pelo compilador s˜o: e e co a • @Deprecated: Indica que o elemento marcado est´ deprecated e n˜o deve a a ser mais utilizado. O compilador gera um warning sempre que um pro- grama utilizar um uma classe, um m´todo ou um atributo marcado como e @Deprecated; • @Override: Informa ao compilador que o elemento marcado deve sobre- screver o elemento de mesmo nome declarado na superclasse. Embora a anota¸˜o n˜o seja obrigat´rio para sobrescrever um m´todo, utiliz´-la ca a o e a ajuda a prevenir erros; • @SuppressWarnings: Indica ao compilador situa¸˜es em que os warnings co devem ser suprimidos; A seguir alguns exemplos de utiliza¸˜o das anota¸˜es descritas. ca co //Marca o m´todo como deprecated e @Deprecated static void deprecatedMethod() { //c´digo } o //Indica que o m´todo ir´ sobrescrever o m´todo da superclasse e a e @Override int overriddenMethod() { //c´digo } o //Indica ao compilador para suprimir warning gerados pelo uso //de m´todos deprecated e @SuppressWarnings("deprecation") void useDeprecatedMethod() { //O uso de um m´todo deprecated geraria um warning e objectOne.deprecatedMethod(); } 15.10 Gen´ricos e http://www.candidatoreal.com Os gen´ricos s˜o um recurso introduzido a partir Java 5 e permite ao progra- e a mador escrever c´digo abstraindo tipos de dados. Os gen´ricos s˜o tipicamente o e a utilizados em conjunto com interfaces ex: List) que herdam da interface Collec- tion ou de classes que a implementam (ex: AbstractList, ArrayList, LinkedList, Vector) Quando um elemento ´ retirado de uma Collection ´ necess´rio realizar um e e a cast para o tipo do elemento armazenado na Collection. Al´m de incoveniente, e isso ´ inseguro. O compilador n˜o checa se o cast realizado ´ do mesmo tipo do e a e armazenado na cole¸˜o. Dessa forma, o cast pode falhar em tempo de execu¸˜o. ca ca 169
  • 171. http://www.candidatoreal.com //Cria¸~o de uma collection do tipo LinkedList ca List myIntList = new LinkedList(); //Adi¸~o de um elemento do tipo Integer a collection ca myIntList.add(new Integer(0)); //Recuperando um elemento da collection. Cast para Integer ´ necess´rio e a Integer x = (Integer) myIntList.iterator().next(); Os gen´ricos provˆem uma forma de comunicar ao compilador o tipo ar- e e mazenado na cole¸˜o, permitindo que a checagem seja feita em tempo de com- ca pila¸˜o. Al´m de evitar erros em tempo de execu¸˜o, a utiliza¸˜o de gen´ricos ca e ca ca e elimina a necessidade de casts. //Cria¸~o de uma collection LinkedList para armazenar objetos do tipo Integer ca List<Integer> myIntList = new LinkedList<Integer>(); //Adi¸~o de um elemento do tipo Integer a collection ca myIntList.add(new Integer(0)); ////Recuperando um elemento da collection. Cast n~o ´ necess´rio a e a Integer x = myIntList.iterator().next(); Os tipos gen´ricos tˆm como grande vantagem o aproveitamento de c´digo. e e o A interface Collection ´ um exemplo disso. As opera¸˜es de adicionar ou re- e co mover um novo elemento, determinar o tamanho, verificar se a collection est´ a vazia ou recuperar o ´ ındice de um determinado elemento, por exemplo, cer- tamente s˜o aplic´veis a collections do tipo Integer, String ou de outra classe a a qualquer. Exemplos de interfaces gen´ricas s˜o List e Iterator. A seguir, alguns e a trechos dessas duas interfaces como definidas no pacote java.util. public interface Iterator<E> { E next(); boolean hasNext(); //mais c´digo ... o } public interface List<E> { void add(E x); Iterator<E> iterator(); //mais c´digo ... o http://www.candidatoreal.com } Gen´ricos permitem implementa¸˜es mais sofisticadas como: e co //Wildcards ou Coringas //M´todo com par^metro Casulo. Aceita Casulo de qualquer tipo e a void imprimir (Casulo<?> c) { // c´digo do m´todo ... o e } //Limitando o tipo gen´rico aceito pelo m´todo e e //M´todo s´ aceita Casulo de Forma ou Casulos de subclasses de Forma e o 170
  • 172. http://www.candidatoreal.com void desenhar (Casulo<? extends Forma> c){ // c´digo do m´todo ... o e } 15.11 Reflex˜o a A Reflection permite um programa Java examinar ou fazer a introspec¸˜o nele ca mesmo, ou seja, olhar e examinar suas propriedades e estrutura. Com isso, vocˆ e pode, por exemplo obter o nome de todos os membros de uma classe, como atributos e m´todos, bem como executar um m´todo usando a Introspection. e e Esse recurso ´ utilizado, por exemplo, pelos ambientes de desenvolvimento (as e IDEs) para examinar e exibir a estrutura e conte´do das classes e beans. A u seguir um exemplo do uso de refetions. import java.lang.reflect.*; public class Classe1 { private int funcao1( Object p, int x ) throws NullPointerException { if (p == null) throw new NullPointerException(); return x; } public static void main(String args[]) { try { //Carrega a classe Class cls = Class.forName("Classe1"); //Recupera a lista de m´todos da classe e Method methlist[] = cls.getDeclaredMethods(); //Imprime informa¸~es (m´todos, modificadores, exce¸~es) co e co //sobre cada um dos m´todos da classe e for (int i = 0; i < methlist.length; i++) { Method m = methlist[i]; System.out.println("-------------------------------------"); System.out.println("nome = " + m.getName()); System.out.println("-------------------------------------"); http://www.candidatoreal.com System.out.println("membro de:" + m.getDeclaringClass()); System.out.println("modificador:" + Modifier.toString(m.getModifiers())); //Recupera lista de par^metros do m´todo a e Class pvec[] = m.getParameterTypes(); for (int j = 0; j < pvec.length; j++) System.out.println("par^metro #" + j + " " + pvec[j]); a //Recupera a lista de excess~es do m´todo o e Class evec[] = m.getExceptionTypes(); for (int j = 0; j < evec.length; j++) 171
  • 173. http://www.candidatoreal.com System.out.println("exce¸~o #" + j + " " + evec[j]); ca //Recupera o tipo de retorno do m´todo e System.out.println("tipo de retorno = " + m.getReturnType()); } } catch (Throwable e) { System.err.println(e); } } } //Sa´da da execu¸~o da classe Classe1: ı ca //Lista de m´todos da Classe1 com todas as suas propriedades e ------------------------------------- nome = funcao1 ------------------------------------- membro de:class Classe1 modificador:private par^metro #0 class java.lang.Object a par^metro #1 int a exce¸~o #0 class java.lang.NullPointerException ca tipo de retorno = int ------------------------------------- nome = main ------------------------------------- membro de:class Classe1 modificador:public static par^metro #0 class [Ljava.lang.String; a tipo de retorno = void http://www.candidatoreal.com 172
  • 174. http://www.candidatoreal.com Cap´ ıtulo 16 Classes Essenciais 16.1 Exception e Controle de Exce¸˜es co Uma exce¸˜o ´ um evento que ocorre durante a execu¸˜o de um programa in- ca e ca terrompendo seu fluxo normal de execu¸˜o. ca Quando um erro ocorre dentro de um m´todo, o m´todo cria um objeto e e chamado exception e o entrega ao controle de execu¸˜o (runtime system), que ca cont´m informa¸˜es sobre o erro, incluindo seu tipo e o estado do programa e co quando o erro ocorreu. O ato de criar um objeto exception e a entreg´-lo ao a runtime system ´ chamado lan¸amento de uma exce¸˜o (throwing an exception). e c ca O runtime system ent˜o pesquisa na pilha de chamadas por um m´todo que a e contenha um bloco de c´digo capaz de tratar a exce¸˜o. Esse bloco de c´digo o ca o ´ chamado tratador de exce¸˜es (exception handler). A pesquisa come¸a no e co c m´todo onde o erro ocorreu e procede na pilha na ordem reversa em que os e m´todos foram chamados. Quando um tratador adequado ´ encontrado, o run- e e time syste o entrega a exce¸˜o. Um tratador ´ considerado adequado quando o ca e tipo da exce¸˜o lan¸ada coincide com o tipo definido no tratador (IOException, ca c ClassNotFoundException, etc.). Quando um tratador ´ escolhido diz-se que ele capturou a exce¸˜o (catches e ca the exception). Se o runtime system pesquisa em toda a pilha de m´todos e e n˜o encontrar um tratador adequado, o programa ser´ encerrado. A figura 16.1 a a mostra a ordem de pesquisa por um tratador para a exce¸˜o. ca http://www.candidatoreal.com 16.1.1 Exce¸˜es t´ co ıpicas Em Java exce¸˜es s˜o objetos. A classe Exception ´ a superclasse de todas as co a e exce¸˜es. Exemplos t´ co ıpicos de exce¸˜es s˜o: co a • ´ Indice de uma array fora do intervalo permitido (ArrayIndexOutOfBound- sException); • Problemas em opera¸˜es aritm´ticas, como overflows e divis˜es por zero co e o (ArithmeticException); 173
  • 175. http://www.candidatoreal.com Figura 16.1: Procura pelo tratador de exce¸˜es co • Argumentos inv´lidos numa chamada a um m´todo (IllegalArgumentEx- a e ception); • Uso de uma referˆncia que n˜o aponta para nenhum objeto (NullPoint- e a erException); • Acesso a um arquivo inexistente (FileNotFoundException); • Erros de banco de dados (SQLException); A classe Exception, por sua vez, ´ subclasse de Throwable, o que permite e que as exce¸˜es sejam lan¸adas. Se o programador desejar que a exce¸˜o assim co c ca lan¸ada seja tratada fora do m´todo que a gerou, ele deve explicitar isto usando c e a palavra chave throws seguida do tipo de exce¸˜o, na declara¸˜o do m´todo. ca ca e //Exemplo 1: M´todo indica que todas exce¸~es ser~o lan¸adas, ou seja, e co a c // n~o ser~o tratadas internamente. a a public void simpleMethod1 (String x) throws Exception { //... if (problema1) throw Exception; //... } //Exemplo 2: M´todo indica que as exce~es do tipo excecao1 e o http://www.candidatoreal.com // e excecao2 nao ser~o tratadas internamente. a public void simpleMethod2 (int a, int b) throws excecao1, excecao2 { //... if (problema1) throw excecao1; if (problema2) throw excecao2; //... } Na verdade, existe uma classe de exce¸˜es, a RuntimeException, que n˜o co a precisam ser lan¸ada explicitamente. RuntimeException ´ uma superclasse das c e exce¸˜es que podem ocorrer durante a opera¸˜o normal da m´quina virtual Java. co ca a 174
  • 176. http://www.candidatoreal.com Uma vez que a exce¸˜o foi lan¸ada, a execu¸˜o do m´todo ´ interrompida e o ca c ca e e controle volta ao objeto que chamou este m´todo. Exemplos de classes que her- e dam de RuntimeException s˜o ArithmeticException, BufferOverflowException, a ClassCastException, IllegalArgumentException, IndexOutOfBoundsException, NullPointerException, SystemException, etc. A figura 16.2 mostra como as exce¸˜es est˜o organizadas na hierarquia de co a classes da linguagem Java. Figura 16.2: Exceptions e Errors Al´m das exce¸˜es t´ e co ıpicas, a figura 16.2 mostra tamb´m a classe Error. Er- e ror ´ uma subclasse de Throwable que indica situa¸˜es excepcionais externas a e co aplica¸˜o, das quais a aplica¸˜o nem sempre ´ capaz de se recuperar, por exem- ca ca e plo, um problema de hardware. Uma aplica¸˜o pode decidir por capturar um ca erro com objetivo de notificar o usu´rio sobre o problema, no entanto, quase a sempre faz mais sentido para o programa imprimir um stack trace e encerrar. A classe VirtualMachineError ´ um exemplo de subclasse de Error, que en- e globa problemas como falta de mem´ria (OutOfMemoryError) e estouro de pilha o (StackOverflowError). 16.1.2 Capturando Exce¸˜es co Para capturar uma exce¸˜o ´ utilizada a seguinte estrutura de c´digo: ca e o try { http://www.candidatoreal.com // C´digo que pode gerar exce¸~es dos tipos o co // ExceptionType1 e ExceptionType2 }catch(ExceptionType1 opa1){ // C´digo para lidar com uma exce¸~o do tipo o ca // ExceptionType1 }catch( ExceptionType2 opa2 ){ // C´digo para lidar com uma exce¸~o do tipo o ca // ExceptionType2 175
  • 177. http://www.candidatoreal.com }finally{ // C´digo que deve ser executado em qualquer caso o } Quando ocorre uma exce¸˜o, os blocos catch s˜o examinados sucessivamente ca a at´ que o argumento corresponda ao tipo da exce¸˜o. No exemplo acima, se e ca ExceptionType2 for uma subclasse de ExceptionType1, o segundo bloco catch nunca ser´ alcan¸ado. Neste caso, deve-se inverter a ordem dos blocos catch. a c O bloco finally ´ opcional, e normalmente ´ usado para realizar a¸˜es que e e co independem da ocorrˆncia de uma exce¸˜o em um dado bloco de comandos. e ca Por exemplo, em um sistema que escreve informa¸˜es em um banco de dados, co ´ necess´rio fechar a conex˜o com este ultimo ao final da opera¸˜o de escrita, e a a ´ ca independentemente da opera¸˜o ter sido bem-sucedida ou n˜o. Tendo isso em ca a vista, o comando respons´vel por fechar a conex˜o deve ficar dentro de um bloco a a finally. 16.2 Threads e Concorrˆncia e Em programa¸˜o concorrente existem duas unidades b´sicas de execu¸˜o: pro- ca a ca cessos e threads. Em java, os recrsos para programa¸˜o concorrente s˜o mais ca a voltados para o uso de threads. Threads s˜o comumente chamadas de processos leves. Processos e threads a provˆem um ambiente de execu¸˜o, mas criar uma thread requer menos recursos e ca que criar um processo. As threads existem dentro dos processos - cada processo possui pelo menos uma. As threads compartilham os recursos do processo, in- cluindo mem´ria e arquivos abertos, favorecendo a eficiˆncia da comunica¸˜o, o e ca por´m a tornando potencialmente problem´tica. e a Cada aplica¸˜o possui pelo menos uma thread - ou v´rias, se considerarmos ca a a threads de sistema. Do ponto de vista do programador, uma aplica¸˜o come¸a ca c com apenas uma unica thread chamada main, e essa possui a habilidade para ´ criar novas threads. http://www.candidatoreal.com 16.2.1 Definindo e Iniciando uma Thread Existem duas formas b´sicas de se definir uma thread em Java: implementar a a interface Runnable ou extender a classe Thread. O c´digo para cada um das o formas segue abaixo: //Implementando a interface Runnable public class HelloRunnable implements Runnable { public void run() { System.out.println("Hello from a thread!"); } 176
  • 178. http://www.candidatoreal.com public static void main(String args[]) { (new Thread(new HelloRunnable())).start(); } } //Extendendo a classe Thread public class HelloThread extends Thread { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[]) { (new HelloThread()).start(); } } A primeira forma ´ mais geral e flex´ e ıvel, porque objetos Runnable podem herdar de outras classes diferentes de Thread. No entanto, a segunda forma ´ e mais simples e funciona bem para aplica¸˜es que pouco complexas. co Em ambos os casos, a tarefa executada pela thread deve ser implementada no m´todo Thread.run e para inici´-la deve ser utilizado o m´todo Thread.start. e a e 16.2.2 Pausando a execu¸˜o com sleep ca Thread.sleep faz com que a thread corrente suspenda sua execu¸˜o por um ca per´ıodo de tempo espec´ıfico. Essa uma forma de liberar o processador para outras threads ou processos que estejam rodando no sistema. O parˆmetro do a m´todo Thread.sleep ´ o tempo em milissegundos. e e public class SleepMessages { public static void main(String args[]) throws InterruptedException { String importantInfo[] = { "Mares eat oats", "Does eat oats", "Little lambs eat ivy", "A kid will eat ivy too" }; http://www.candidatoreal.com for (int i = 0; i < importantInfo.length; i++) { //Pausa a thread corrente (main) por 4 segundos Thread.sleep(4000); //Imprime uma mensagem System.out.println(importantInfo[i]); } } } 177
  • 179. http://www.candidatoreal.com 16.2.3 Interrup¸˜es co Uma interrup¸˜o indica que a thread deve parar o que est´ fazendo e come¸ar ca a c ´ a fazer outra coisa. E o programador quem deve definir como a thread deve responder a uma interrup¸˜o. O uso mais comum de interrup¸˜es ´ finalizar a ca co e execu¸˜o de uma thread. ca for (int i = 0; i < importantInfo.length; i++) { //Pause for 4 seconds try { Thread.sleep(4000); } catch (InterruptedException e) { //We’ve been interrupted: no more messages. return; } //Print a message System.out.println(importantInfo[i]); } 16.2.4 Joins O m´todo join ´ usado para fazer com que uma thread aguarde at´ que outra e e e thread termine. Em geral, o join ´ utilizado para a thread esperar pelo t´rmino e e da execu¸˜o de suas threads filhas. Imagine uma aplica¸˜o que dependa da ca ca execu¸˜o de trˆs tarefas independentes A, B e C. A aplica¸˜o s´ pode continuar ca e ca o quando cada uma das tarefas estiver sido completada. Portanto, a aplica¸˜o ca (thread principal) deve executar o m´todo join para cada uma das tarefas A,B e e C. O c´digo java para essa situa¸˜o teria a seguinte estrutura: o ca public static void main(String args[]) { System.out.println("Thread main iniciada"); //C´digo inicial da thread main o //Threads auxiliares A, B e C Thread a = new thread_tarefaA(); Thread b = new thread_tarefaB(); Thread c = new thread_tarefaC(); http://www.candidatoreal.com //Iniciando as threads auxiliares a.start(); b.start(); c.start(); //Aguardando as threads auxiliares terminarem a.join(); b.join(); c.join(); //C´digo restante da thread main o 178
  • 180. http://www.candidatoreal.com System.out.println("Thread main encerrada"); } 16.2.5 Sincroniza¸˜o ca As threads se comunicam entre si essencialmente por meio de compartilhamento no acesso de atributos e referˆncias a objetos. Essa ´ uma forma de comunica¸˜o e e ca eficiente, por´m permite a ocorrˆncia de dois tipos de erros: interferˆncia entre e e e threads e erros de consistˆncia de mem´ria. Para contornar esses problemas o e o Java oferece o recurso de sincroniza¸˜o. ca O problema da interferˆncia ocorre quando duas opera¸˜es, rodando em e co threads diferentes, mas atuando sobre o mesmo dado, se intercalam. //Interfer^ncia entre threads e //Tr^s threads que atuam sobre o mesmo dado e //N~o ´ poss´vel garantir a ordem de execu¸~o das opera¸~es a e ı ca co //pois em princ´pio, as threads s~o iniciadas ao mesmo tempo. ı a int a = 0; thread_incrementa_a.start(); thread_decrementa_a.start(); thread_imprime_a.start(); Os erros de inconsistˆncia de mem´ria ocorrem quando diferentes threads e o tˆm diferentes vis˜es daquilo que deveria ser o mesmo dado. As causas dos e o erros de inconsistˆncia de mem´ria s˜o complexas e est˜o fora do escopo dessa e o a a se¸˜o. ca A chave para evitar esse tipo de erro est´ em entender o que o Java chama de a relacionamento happens-before. Esse relacionamento consiste em garantir que a mem´ria escrita por uma statement espec´ o ıfica est´ vis´ para uma outra state- a ıvel ment. Para criar esse tipo de relacionamento entre threads pode ser utilizado o m´todo Thread.join, como discutido anteriormente. A linguagem Java tamb´m e e provˆ outros dois idiomas para sincroniza¸˜o que s˜o: m´todos sincronizados e e ca a e http://www.candidatoreal.com statements sincronizadas. Com os m´todos sincronizados n˜o ´ poss´ e a e ıvel realizar duas chamadas si- multˆneas do m´todo sobre um unico objeto. Quando uma thread est´ execu- a e ´ a tando um m´todo sincronizado sobre um objeto, todas as outras threads que e invocam m´todos sincronizados para o mesmo objeto suspendem sua execu¸˜o e ca at´ que a primeira thread libere o objeto. Al´m disso, os m´todos sincroniza- e e e dos estabelecem automaticamente uma rela¸˜o de happens-before com todas as ca chamadas subsequentes de m´todos sincronizados. Isso garante que a as mu- e dan¸as no estado do objeto estar˜o vis´ c a ıveis para todas as threads. public class SynchronizedCounter { 179
  • 181. http://www.candidatoreal.com private int c = 0; //M´todos sincronizados para manipular um contador e public synchronized void increment() {c++;} public synchronized void decrement() {c--;} public synchronized int value() {return c;} } Ao contr´rio dos m´todos sincronizados, as statements sincronizadas devem a e espec´ ıficar para qual objeto dever´ ser obtido o lock. Essa t´cnica pode ser util a e ´ quando ´ implementar concorrˆncia com uma granularidade mais fina. Uma e e exemplo de c´digo para cria¸˜o de statements sincronizadas ´ mostrado abaixo: o ca e public class MsLunch { private long c1 = 0; private long c2 = 0; private Object lock1 = new Object(); private Object lock2 = new Object(); public void inc1() { //Lock somente sobre o objeto lock1 synchronized(lock1) {c1++;} } public void inc2() { //Lock somente sobre o objeto lock2 synchronized(lock2) {c2++;} } } 16.2.6 Executores e Thread Pools Nos exemplos mostrados, existe uma conex˜o direta entre a tarefa executada a por uma nova thread, como definida no objeto Runnable, e a nova thread em sim, definida por um objeto Thread. Isso funciona bem para aplica¸˜es pe- co quenas. Em aplica¸˜es de grande porte ´ mais apropriado separar a cria¸˜o e co e ca http://www.candidatoreal.com gerenciamento da threads do resto da aplica¸˜o. Os objetos que encapsulam as ca fun¸˜es de gerenciamento de threads s˜o chamados executores (executors). co a O pacote java.util.concurrency define trˆs interfaces executoras que s˜o Ex- e a ecutor, ExecutorService e ScheduledExecutorService. Essas interfaces definem m´todos para gerenciamento de threads na aplica¸˜o. Exemplo: Se r ´ um e ca e objeto do tipo Runnable, e e ´ um objeto do tipo Executor o trecho de c´digo e o (new Thread(r)).start(); poderia ser substitu´ por ıdo e.execute(r); 180
  • 182. http://www.candidatoreal.com Na primeira forma, uma nova thread seria criada para realizar a tarefa definida em r, enquanto na segunda, isso dependeria da implementa¸˜o da in- ca terface executora. Geralmente, as interfaces executoras s˜o criadas utilizando as chamadas a ThreadPools, que consistem de um conjunto de threads (worker threads) re- spons´veis pela execu¸˜o das tarefas. Quando o m´todo execute ´ chamado a ca e e sobre o objeto r, uma worker thread ´ alocada para rodar a tarefa definida em e r. Caso n˜o exista nenhuma worker thread dispon´ no momento, r ´ colocada a ıvel e em uma fila de espera at´ que uma worker thread seja liberada. e Usando pools de threads ´ poss´ e ıvel minimizar o overhead de cria¸˜o de ca threads e otimizar o gerenciamento de mem´ria, uma vez que ´ poss´ definir o o e ıvel n´mero m´ximo de threads no pool de acordo com as necessidades da aplica¸˜o u a ca e quantidade de recursos do sistema. 16.3 Streams e Serializa¸˜o ca 16.3.1 I/O Streams Um I/O stream pode representar diferentes tipos de fonte e destino, incluindo arquivos em discos, dispositivos, outros programas e mem´ria. Os streams su- o portam diversos tipos de dados, como simples bytes, tipos de dados primitivos e at´ mesmo objetos complexos. Alguns streams simplesmente passam os dados, e enquanto outros realizam algum tipo de manipula¸˜o e transforma¸˜o conforme ca ca necess´rio. A seguir ser˜o mostrados alguns exemplos da utiliza¸˜o de streams. a a ca Streams de Bytes Byte streams s˜o utilizados para realizar input e output de bytes. Todas a as classes byte stream herdam de InputStream e outputStream. Os streams de bytes representam o n´ ıvel mais baixo que pode ser alcan¸ado, e devem evita- c dos. Todas as outras classes de stream s˜o constru´ a ıdas com base na opera¸˜es co definidas pelas classes de byte stream. //Exemplo 1: Stream de Bytes //Copia o arquivo xanadu.txt para outagain.txt byte a byte. http://www.candidatoreal.com import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyBytes { public static void main(String[] args) throws IOException { FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream("xanadu.txt"); out = new FileOutputStream("outagain.txt"); 181
  • 183. http://www.candidatoreal.com int c; while ((c = in.read()) != -1) { out.write(c); } } finally { if (in != null) {in.close();} if (out != null) {out.close();} } } } Streams de Caracteres A plataforma java armazena os valores dos caracteres utilizando a conve¸˜o ca Unicode. As opera¸˜es de com streams de caracteres automaticamente con- co vertem do formato Unicode para o formato local. //Exemplo 1: Stream de Caracteres //Copia o arquivo xanadu.txt para characteroutput.txt caracter e caracter import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class CopyCharacters { public static void main(String[] args) throws IOException { FileReader inputStream = null; FileWriter outputStream = null; try { inputStream = new FileReader("xanadu.txt"); outputStream = new FileWriter("characteroutput.txt"); int c; while ((c = inputStream.read()) != -1) { outputStream.write(c); } } finally { if (inputStream != null) {inputStream.close();} if (outputStream != null) {outputStream.close();} } http://www.candidatoreal.com } } No entanto, I/O de caracteres geralmente ocorrem linha a linha. Uma linha ´ um conjunto de caracteres terminada por um caracter especial de fim de linha. e O c´digo a seguir executa a mesma tarefa do exemplo 1, por´m copia o arquivo o e linha a linha e utiliza estrat´gias de buffering. e //Exemplo 2: Stream de Caracteres linha a linha //Copia o arquivo xanadu.txt para characteroutput.txt linha a linha import java.io.FileReader; 182
  • 184. http://www.candidatoreal.com import java.io.FileWriter; import java.io.BufferedReader; import java.io.PrintWriter; import java.io.IOException; public class CopyLines { public static void main(String[] args) throws IOException { BufferedReader inputStream = null; PrintWriter outputStream = null; try { inputStream = new BufferedReader(new FileReader("xanadu.txt")); outputStream =new PrintWriter(new FileWriter("characteroutput.txt")); String l; while ((l = inputStream.readLine()) != null) { outputStream.println(l); } } finally { if (inputStream != null) {inputStream.close();} if (outputStream != null) {outputStream.close();} } } } No exemplo 1 o c´digo utiliza opera¸˜e de I/O n˜o bufferizadas. Isso significa o co a que a cada requisi¸˜o de leitura ou escrita expressa no c´digo ´ prontamente ca o e tratada pelo sistema operacional, disparando, por exemplo, acesso ao disco ou a ` rede. Para reduzir esse tipo de overhead a plataforma Java implementa I/O streams bufferizados. Os input streams lˆem dados de uma ´rea de buffer; a API in- e a put nativa s´ ´ chamada quando esse buffer est´ vazio ou n˜o cont´m os dados oe a a e procurados. Similarmente, os output streams escrevem dados para uma ´rea de a buffer, enquanto a API nativa de output s´ ´ chamada quando o buffer de es- oe crita est´ cheio ou quando algum comando que implique no flushing ´ utilizado, a e por exemplo, println. 16.3.2 Serializa¸˜o - Streams de Objetos ca Os streams apresentados at´ agora s˜o chamados data streams. Assim como e a http://www.candidatoreal.com os data streams suportam I/O de tipos primitivos de dados, os object streams suportam I/O para objetos. A maioria das classes padr˜o do java suportam a a serializa¸˜o de seus objetos. Para que uma objetos de uma classe possam ca ser serializados a classe deve implementar a interface Serializable. A interface Serializable n˜o define m´todos ou atributos, servindo apenas para indicar que a e uma classe ´ serializ´vel. e a As classes de streams de objetos s˜o ObjectInputStream e ObjectOutput- a Stream. Essas classes implementam as interfaces ObjectInput e ObjectOutput, que por sua ve s˜o subitnerfaces de DataInput and DataOutput. Isso significa a dizer que todos os m´todos para I/O de tipos de dados primitivos tamb´m s˜o e e a 183
  • 185. http://www.candidatoreal.com implementados nas classes de stream para objetos. A seguir, um exemplo sim- ples para serializa¸˜o de objetos em Java. ca import java.io.*; public class Pessoa implements Serializable{ public String nome = "Maria"; public int idade = 30; public String sexo = "feminino"; public Pessoa (String p_nome, int p_idade, String p_sexo){ nome = p_nome; idade = p_idade; sexo = p_sexo; } public static void main (String [] args){ Pessoa p = new Pessoa("Maria",10,"feminino"); try { // Serializa o objeto para um arquivo ObjectOutput out = new ObjectOutputStream( new FileOutputStream("pessoa.ser") ); out.writeObject(p); out.close(); // Desserializa o objeto a partir do arquivo File file = new File("pessoa.ser"); ObjectInputStream in = new ObjectInputStream( new FileInputStream(file) ); Pessoa clone = (Pessoa) in.readObject(); in.close(); // Testa um atributo do novo objeto clone http://www.candidatoreal.com System.out.println("Nome de p: " + p.nome); System.out.println("Nome do clone de p: " + clone.nome); }catch (IOException e) { //Pode ser gerado na serializa¸~o ou desserializa¸~o ca ca System.out.println(e.getMessage()); }catch (ClassNotFoundException e) { //Pode ser gerado desserializa¸~o ca System.out.println(e.getMessage()); } } 184
  • 186. http://www.candidatoreal.com } Embora as classes ObjectInputStream e ObjectOutputStream sejam sufi- cientes para serializar e desserializar a maioria dos objetos no Java, ela possui o incoveniente de utilizar arquivos bin´rios, o que dificulta a leitura direta por a um usu´rio ou por outras aplica¸˜es (escritas em outras linguagens, por exem- a co plo). Muitas aplica¸˜es realiz˜o serializa¸˜o com arquivos XML, o que permite co a ca contornar os problemas da legibilidade e integra¸˜o mais facilmente. ca Existem in´meros pacotes para serializa¸˜o de objetos em arquivos XML. u ca Quando se est´ trabalhando com java beans, por exemplo, duas classes muito a utilizadas para serializa¸˜o de objetos em XML s˜o java.beans.XMLEncoder e ca a java.beans.XMLDecoder. A seguir, um trecho de c´digo exemplificando o uso o dessas classes. PessoaXML p = new PessoaXML("Maria",10,"feminino"); // Serializa o objeto para um arquivo XML XMLEncoder e = new XMLEncoder( new BufferedOutputStream( new FileOutputStream("pessoa.xml"))); e.writeObject(p); e.close(); // Desserializa o objeto a partir do arquivo XML XMLDecoder d = new XMLDecoder( new BufferedInputStream( new FileInputStream("pessoa.xml"))); PessoaXML clone = (PessoaXML) d.readObject(); d.close(); 16.4 Classes e Opera¸˜es de I/O co 16.5 Classes para manipula¸˜o de propriedades ca http://www.candidatoreal.com Boa parte das aplica¸˜es necessitam de algum tipo de configura¸˜o adicional que co ca n˜o pode ser embutida diretamente no c´digo. Em java, uma forma tradicional a o de se fazer isso envolve a utiliza¸˜o ddos chamados arquivos de propriedades, ca que podem ser manipulados a partir da classe java.util.Properties, que ´ uma e extens˜o da classe java.util.Hashtable. a Um arquivo de propriedades guarda conjunto de pares nome/valor, que po- dem ser lidos ou alterados. O formato t´ ıpico de um arquivo de propriedades ´ e motrado a seguir: 185
  • 187. http://www.candidatoreal.com #Esta ´ uma linha de coment´rio e a #Mon Jun 11 22:37:16 BRT 2007 app.diretorio=/zaz/traz/bin app.usuario=camatchones app.mododeoperacao=producao E a seguir ´ mostrado um exemplo de c´digo Java para manipula¸˜o de um e o ca arquivo de propriedades. import java.util.Properties; import java.io.*; public class Exemplo { public Exemplo (){} public static void main (String [] args){ try{ // Cria e le os valores padrao para um objeto Propertie Properties defaultProps = new Properties(); FileInputStream in = new FileInputStream("exemplo.properties"); defaultProps.load(in); in.close(); // Utilizacao as propriedades quando precisarmos String diretorio = defaultProps.getProperty("app.diretorio"); String usuario = defaultProps.getProperty("app.usuario"); // Modificamos/Criando valores das propriedades if (usuario.equals("joao")){ defaultProps.setProperty("app.dataDir", "/home/joao"); defaultProps.setProperty("app.nova_configuracao", "12345"); } // Salvamos para uma proxima execussao FileOutputStream out = new FileOutputStream("exemplo.properties"); defaultProps.store(out, "Isso ´ um coment´rio!"); e a out.close(); http://www.candidatoreal.com }catch(Exception e){ System.out.println(e.getMessage()); } } } Uma observa¸˜o importante ´ que o m´todo getProperty sempre retorna ca e e uma String, de modo que se uma propriedade ´ de algum outro tipo, essa deve e ser convertida no momento da leitura. Atualmente o uso de arquivos XML para armazenamento de configura¸˜es co 186
  • 188. http://www.candidatoreal.com vem ganahando popularidade, no entanto, os arquivos de propriedades contin- uam ser uma forma simples e eficaz de gerenciar configuracoes simples. http://www.candidatoreal.com 187
  • 189. http://www.candidatoreal.com Cap´ ıtulo 17 Cole¸˜es co Uma cole¸˜o ´ simplesmente um grupo de objetos em uma unica unidade. As ca e ´ cole¸˜es s˜o usadas para armazenar, recuperar, manipular e comunicar dados co a agregados. Tipicamente, representam itens de dados que d˜o forma a um grupo a natural, tal como uma m˜o do poker (uma cole¸˜o dos cart˜es) e uma pasta de a ca o correspondˆncia (uma cole¸˜o das letras). e ca Uma framework de cole¸˜es ´ uma arquitetura unificada para representa¸˜o e co e ca manipula¸˜o das cole¸˜es, permitindo que elas sejam manipuladas independen- ca co temente dos detalhes de sua implementa¸˜o. Todos os frameworks de cole¸˜es ca co contˆm: e • Interfaces: Estes s˜o os tipos de dados abstratos que representam as a cole¸˜es. As interfaces permitem que as cole¸˜es sejam manipuladas inde- co co pendentemente dos detalhes de sua representa¸˜o. Em linguagem orien- ca tadas ` objeto as interfaces d˜o forma geralmente a uma hierarquia; a a • Implementa¸˜es: Estas s˜o as implementa¸˜es concretas das rela¸˜es da co a co co cole¸˜o. Essencialmente, s˜o estruturas de dados reus´veis; ca a a • Algoritmos: Estes s˜o os m´todos que executam computa¸˜es uteis, tais a e co ´ como procurar e ordenar objetos de uma determinada cole¸˜o. Os algorit- ca mos s˜o polim´rficos, isto ´, o mesmo m´todo pode ser usado em diferentes a o e e implementa¸˜es. co As principais vantagens do framework de cole¸˜es (collection framework) co http://www.candidatoreal.com s˜o: a • Redu¸˜o do esfor¸o de programa¸˜o, fornecendo estruturas de dados e ca c ca algoritmos uteis, para que n˜o seja necess´rio reescrevˆ-los; ´ a a e • Aumento da performance: fornecendo implementa¸˜es de alta perfor- co mance. Como as v´rias implementa¸˜es de cada interface s˜o substitu´ a co a ıveis, os programas podem ser facilmente refinados trocando-se as implementa¸˜es; co • Interoperabilidade entre APIs n˜o relacionadas, estabelecendo uma lin- a guagem comum para passagem de cole¸˜es; co 188
  • 190. http://www.candidatoreal.com • Redu¸˜o do esfor¸o de aprendizado de APIs, eliminando a necessidade de ca c se aprender v´rias APIs de cole¸˜es diferentes; a co • Redu¸˜o do esfor¸o de projetar e implementar APIs, eliminando a neces- ca c sidade de se criar APIs de cole¸˜es pr´prias; co o • Promover o re´so de software, fornecendo uma interface padr˜o para u a cole¸˜es e algoritmos para manipul´-los. co a As cole¸˜es s˜o necess´rias, devido o uso dos arrays possuir uma s´rie de co a a e limita¸˜es, como por exemplo: co • Um array n˜o pode ter o tamanho modificado depois de criado; a • Somente pode conter elementos de um mesmo tipo; • Para inserir ou retirar um elemento ´ necess´rio modificar a posi¸˜o de e a ca outros elementos. Figura 17.1: Interfaces Collection 17.1 Interface Collection Interface base para todos os tipos de cole¸˜o. Ela define as opera¸˜es mais ca co b´sicas para cole¸˜es de objetos, como adi¸˜o (add) e remo¸˜o (remove) ab- a co ca ca stratos (sem informa¸˜es quanto ` ordena¸˜o dos elementos), esvaziamento co a ca (clear), tamanho (size), convers˜o para array (toArray), objeto de itera¸˜o (it- a ca erator), e verifica¸˜es de existˆncia (contains e isEmpty). A seguir ´ mostada a co e e Interface Collection: public interface Collection<E> extends Iterable<E> { http://www.candidatoreal.com // Basic operations int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); //optional boolean remove(Object element); //optional Iterator<E> iterator(); // Bulk operations boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E> c); //optional 189
  • 191. http://www.candidatoreal.com boolean removeAll(Collection<?> c); //optional boolean retainAll(Collection<?> c); //optional void clear(); //optional // Array operations Object[] toArray(); <T> T[] toArray(T[] a); } 17.2 Interface Set Interface que define uma cole¸˜o, ou conjunto, que n˜o cont´m objetos dupli- ca a e cados. Isto ´, s˜o ignoradas as adi¸˜es caso o objeto ou um objeto equivalente e a co j´ exista na cole¸˜o. Por objetos equivalentes, entenda-se objetos que tenham a ca o mesmo c´digo hash (retornado pelo m´todo hashCode()) e que retornem ver- o e dadeiro na compara¸˜o feita pelo m´todo equals(). ca e N˜o ´ garantida a ordena¸˜o dos objetos, isto ´, a ordem de itera¸˜o dos a e ca e ca objetos n˜o necessariamente tem qualquer rela¸˜o com a ordem de inser¸˜o dos a ca ca objetos. Por isso, n˜o ´ poss´ a e ıvel indexar os elementos por ´ ındices num´ricos, e como em uma List. A seguir ´ mostada a Interface Set: e public interface Set<E> extends Collection<E> { // Basic operations int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); //optional boolean remove(Object element); //optional Iterator<E> iterator(); // Bulk operations boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E> c); //optional boolean removeAll(Collection<?> c); //optional http://www.candidatoreal.com boolean retainAll(Collection<?> c); //optional void clear(); //optional // Array Operations Object[] toArray(); <T> T[] toArray(T[] a); } Existem 3 implementa¸˜es da interface Set: co 190
  • 192. http://www.candidatoreal.com • HashSet: Implementa¸˜o de Set que utiliza uma tabela hash para guardar ca seus elementos. N˜o garante a ordem de itera¸˜o, nem que a ordem per- a ca manecer´ constante com o tempo (uma modifica¸˜o da cole¸˜o pode al- a ca ca terar a ordena¸˜o geral dos elementos). Por utilizar o algoritmo de tabela ca hash, o acesso ´ r´pido, tanto para leitura quanto para modifica¸˜o. e a ca • LinkedHashSet: Implementa¸˜o de Set que estende HashSet, mas adi- ca ciona previsibilidade ` ordem de itera¸˜o sobre os elementos, isto ´, uma a ca e itera¸˜o sobre seus elementos (utilizando o Iterator) mant´m a ordem de ca e inser¸˜o (a inser¸˜o de elementos duplicados n˜o altera a ordem anterior). ca ca a Internamente, ´ mantida uma lista duplamente encadeada que mant´m e e esta ordem. Por ter que manter uma lista paralelamente ` tabela hash, a a modifica¸˜o deste tipo de cole¸˜o acarreta em uma leve queda na perfor- ca ca mance em rela¸˜o ` HashSet, mas ainda ´ mais r´pida que uma TreeSet, ca a e a que utiliza compara¸˜es para determinar a ordem dos elementos. co • TreeSet: Implementa¸˜o de SortedSet. SortedSet ´ uma interface que es- ca e tende Set, adicionando a semˆntica de ordena¸˜o natural dos elementos. a ca A posi¸˜o dos elementos no percorrimento da cole¸˜o ´ determinado pelo ca ca e retorno do m´todo compareTo(o), caso os elementos implementem a inter- e face Comparable, ou do m´todo compare(o1,o2) de um objeto auxiliar que e implemente a interface Comparator. A TreeSet utiliza internamente uma TreeMap, que por sua vez utiliza o algoritmo Red-Black para a ordena¸˜o ca da ´rvore de elementos. Isto garante a ordena¸˜o ascendente da cole¸˜o, de a ca ca acordo com a ordem natural dos elementos, definida pela implementa¸˜o ca da interface Comparable ou Comparator. Use esta classe quando precisar de um conjunto (de elementos unicos) que deve estar sempre ordenado, ´ mesmo sofrendo modifica¸˜es. co A seguir s˜o mostrados alguns exemplos: a import java.util.*; public class FindDups { public static void main(String[] args) { Set<String> s = new HashSet<String>(); for (String a : args) if (!s.add(a)) http://www.candidatoreal.com System.out.println("Duplicate detected: " + a); System.out.println(s.size() + " distinct words: " + s); } } Rodando o programa: prompt#> java FindDups i came i saw i left A sa´da produzida ser´: ı a 191
  • 193. http://www.candidatoreal.com Duplicate detected: i Duplicate detected: i 4 distinct words: [i, left, saw, came] O tipo de implementa¸˜o Set no exemplo anterior ´ HashSet, que como dito ca e anteriormente n˜o faz nenhuma garantia a respeito da ordem dos elementos no a Set. Caso seja necess´rio imprimir a lista em ordem alfab´tica basta mudar o a e tipo de implementa¸˜o de HashSet para TreeSet. A nova sa´ do programa ca ıda anterior para TreeSet seria a seguinte: Rodando o programa: prompt#> java FindDups i came i saw i left A sa´da produzida ser´: ı a Duplicate detected: i Duplicate detected: i 4 distinct words: [came, i, left, saw] Caso fosse utilizado uma LinkedHashSet a sa´ seria a seguinte: ıda Rodando o programa: prompt#> java FindDups i came i saw i left A sa´da produzida ser´: ı a Duplicate detected: i Duplicate detected: i 4 distinct words: [i, came, saw, left] http://www.candidatoreal.com E agora um outro exemplo, modificando a classe FindDups: import java.util.*; public class FindDups2 { public static void main(String[] args) { Set<String> uniques = new HashSet<String>(); Set<String> dups = new HashSet<String>(); for (String a : args) if (!uniques.add(a)) 192
  • 194. http://www.candidatoreal.com dups.add(a); // Destructive set-difference uniques.removeAll(dups); System.out.println("Unique words: " + uniques); System.out.println("Duplicate words: " + dups); } } Executando o c´digo anterior com os mesmos argumentos dos programas o anteriores (i came i saw i left) a sa´ deste programa seria: ıda Unique words: [left, saw, came] Duplicate words: [i] H´ duas implementa¸˜es Set com finalidades especiais: EnumSet e CopyOn- a co WriteArraySet. 17.3 Interface List Interface que extende Collection, e que define cole¸˜es ordenadas (seq¨ˆncias), co ue onde se tem o controle total sobre a posi¸˜o de cada elemento, identificado por ca um ´ındice num´rico. Na maioria dos casos, pode ser encarado como um ”array e de tamanho vari´vel”, pois, como os arrays primitivos, ´ acess´ por ´ a e ıvel ındices, mas al´m disso possui m´todos de inser¸˜o e remo¸˜o. A seguir ´ mostada a e e ca ca e Interface List: public interface List<E> extends Collection<E> { // Positional access E get(int index); E set(int index, E element); //optional boolean add(E element); //optional void add(int index, E element); //optional E remove(int index); //optional boolean addAll(int index, Collection<? extends E> c); //optional http://www.candidatoreal.com // Search int indexOf(Object o); int lastIndexOf(Object o); // Iteration ListIterator<E> listIterator(); ListIterator<E> listIterator(int index); // Range-view List<E> subList(int from, int to); 193
  • 195. http://www.candidatoreal.com } Existem 2 implementa¸˜es da interface List: co • ArrayList: Implementa¸˜o de List que utiliza internamente um array de ca objetos. Em uma inser¸˜o onde o tamanho do array interno n˜o ´ su- ca a e ficiente, um novo array ´ alocado (de tamanho igual a 1.5 vezes o ar- e ray original), e todo o conte´do ´ copiado para o novo array. Em uma u e inser¸˜o no meio da lista o conte´do posterior ao ´ ca u ındice ´ deslocado em e uma posi¸˜o. Esta implementa¸˜o ´ a recomendada quando o tamanho ca ca e da lista ´ previs´ e ıvel (evitando realoca¸˜es) e as opera¸˜es de inser¸˜o e co co ca remo¸˜o s˜o feitas, em sua maioria, no fim da lista (evitando deslocamen- ca a tos), ou quando a lista ´ mais lida do que modificada (otimizado para e leitura aleat´ria). o • LinkedList: Implementa¸˜o de List que utiliza internamente uma lista ca encadeada. A localiza¸˜o de um elemento na n-´sima posi¸˜o ´ feita ca e ca e percorrendo-se a lista da ponta mais pr´xima at´ o ´ o e ındice desejado. A inser¸˜o ´ feita pela adi¸˜o de novos n´s, entre os n´s adjacentes, sendo ca e ca o o que antes ´ necess´ria a localiza¸˜o desta posi¸˜o. Esta implementa¸˜o ´ e a ca ca ca e recomendada quando as modifica¸˜es s˜o feitas em sua maioria tanto no co a in´ quanto no final da lista, e o percorrimento ´ feito de forma seq¨en- ıcio e u cial (via Iterator) ou nas extremidades, e n˜o aleat´ria (por ´ a o ındices). Um exemplo de uso ´ como uma fila (FIFO - First-In-First-Out), onde os ele- e mentos s˜o retirados da lista na mesma seq¨ˆncia em que s˜o adicionados. a ue a A seguir s˜o mostrados alguns exemplos: a import java.util.*; public class ExemploArrayList { public static void main(String[] args) { List c = new ArrayList(); c.add("Maria"); c.add("Joao"); c.add("Ana"); c.add("Joao"); http://www.candidatoreal.com c.add("Jose"); Iterator i = c.iterator(); while( i.hasNext() ) { System.out.print( i.next() + " " ); } System.out.println(); System.out.println(c.get(2)); System.out.println(c); } } 194
  • 196. http://www.candidatoreal.com A sa´ produzida ser´: ıda a Maria Joao Ana Joao Jose Ana [Maria, Joao, Ana, Joao, Jose] ArrayList e LinkedList tem algumas diferen¸as, entre elas temos os m´todos c e addFirst, addLast, getFirst, getLast, removeFirst e removeLast para LinkedList que inserem, retornam e retiram um elemento no inicio ou no fim de uma lista , com estes m´todos podemos simular pilhas e filas. e H´ uma implementa¸˜o List com finalidades especiais: CopyOnWriteAr- a ca rayList. 17.4 Interface Map Interface que define um array associativo, isto ´, ao inv´s de n´meros, objetos e e u s˜o usados como chaves para se recuperar os elementos. As chaves n˜o podem se a a repetir (seguindo o mesmo princ´ıpio da interface Set), mas os valores podem ser repetidos para chaves diferentes. Um Map tamb´m n˜o possui necessariamente e a uma ordem definida para o percorrimento. A seguir ´ mostada a Interface Map: e public interface Map<K,V> { // Basic operations V put(K key, V value); V get(Object key); V remove(Object key); boolean containsKey(Object key); boolean containsValue(Object value); int size(); boolean isEmpty(); // Bulk operations void putAll(Map<? extends K, ? extends V> m); void clear(); // Collection Views http://www.candidatoreal.com public Set<K> keySet(); public Collection<V> values(); public Set<Map.Entry<K,V>> entrySet();