ENGENHARIA DE SOFT WARE Qualidade e Produtividade com Tecnologia K E C H I H I R A M A Preencha a ficha de cadastro no final deste livro e receba gratuitamente informações sobre os lançamentos e promoções da Elsevier. Consulte também nosso catálogo completo, últimos lançamentos e serviços exclusivos no site www.elsevier.com.br © 2012, Elsevier Editora Ltda. Todos os direitos reservados e protegidos pela Lei no 9.610, de 19/02/1998. Nenhuma parte deste livro, sem autorização prévia por escrito da editora, poderá ser reproduzida ou transmitida, sejam quais forem os meios empregados: eletrônicos, mecânicos, fotográfi cos, gravação ou quaisquer outros. Coordenação Editorial: Letícia Vendrame Tania Heglacy Preparação de Texto: Renata Mendonça Revisão: Alexandra Resende Editoração Eletrônica: Tony Rodrigues Elsevier Editora Ltda. Conhecimento sem Fronteiras Rua Sete de Setembro, 111 – 16o andar 20050-006 – Rio de Janeiro – RJ Rua Quintana, 753 – 8o andar 04569-011 – Brooklin – São Paulo – SP Serviço de Atendimento ao Cliente 0800 026 53 40 [email protected] ISBN: 978-85-352-4882-1 Nota: Muito zelo e técnica foram empregados na edição desta obra. No entanto, podem ocorrer erros de digitação, impressão ou dúvida conceitual. Em qualquer das hipóteses, solicitamos a comunicação à nossa Central de Atendimento, para que possamos esclarecer ou encaminhar a questão. Nem a editora nem o autor assumem qualquer responsabilidade por eventuais danos ou perdas a pessoas ou bens, originados do uso desta publicação. Cip-Brasil. Catalogação-na-fonte Sindicato Nacional dos Editores de Livros, RJ H559e Hirama, Kechi Engenharia de soft ware : qualidade e produtividade com tecnologia / Kechi Hirama. - Rio de Janeiro : Elsevier, 2011. Inclui bibliografi a ISBN 978-85-352-4882-1 1. Engenharia de soft ware. 2. Soft ware - Desenvolvimento. I. Título. 11-5976. CDD: 005.1 CDU: 004.41 D E D I C AT Ó R I A Dedico este livro aos meus pais Toshio e Hatuio (in memoriam) e aos meus filhos Yukari e Jun pelos anos de felicidade que passamos e pelos que ainda virão. A G R A D E C I M E N T O S À Universidade de São Paulo (USP) que me possibilita trabalhar em uma entidade de referência de ensino superior no Brasil. À Escola Politécnica da Universidade de São Paulo (Epusp) que me pos- sibilita trabalhar em um ambiente de excelência tecnológica. Ao Departamento de Engenharia de Computação e Sistemas Digitais – PCS da Epusp – que me possibilita trabalhar em um ambiente de pionei- rismo, que teve a sua origem com o Laboratório de Sistemas Digitais (LSD), onde nasceu o primeiro computador digital brasileiro em 1972. Ao Laboratório de Tecnologia de Software (LTS) que me possibilita trabalhar no desenvolvimento da área de Engenharia de Software e, em particular, à Profa. Dra. Selma Shin Shimizu Melnikoff pelos longos anos de amizade e apoio. Ao Grupo de Sistemas Complexos (GSC) que é jovem ainda, e me des- perta novas ideias e desafios nas pesquisas em sistemas computacionais complexos. Aos meus orientados de mestrado e de especialização pela troca de ideias e trabalhos concluídos e aos meus alunos de graduação das disciplinas Fun- damentos de Engenharia de Software, Fundamentos de Sistemas de Tempo Real e Gerência, Qualidade e Tecnologia de Software; aos de pós-graduação da disciplina Qualidade de Software: Conceitos e Paradigmas; e aos de extensão do curso de MBA – Tecnologia de Software das disciplinas Qua- lidade de Software e Projeto Integrado pelas discussões em salas de aula. ELSEVIER Engenharia de Software Aos funcionários do PCS pelo apoio e pelo ambiente amigável e descontraído. Aos meus irmãos (Morio e Tsuyako), cunhados (Eidi e Massako) e sobri- nhos (Daigo, Dandy, Marcelo e Henrique) que sempre me acompanharam nesta caminhada. VIII “Somos o que repetidamente fazemos. A excelência, portanto, não é um feito, mas um hábito.” (Aristóteles) P R E FÁ C I O S ou engenheiro eletricista de formação com ênfase em sistemas digi- tais. Desde o início da minha carreira, aplicar conceitos e técnicas aprendidas era a forma de me ver como um verdadeiro engenheiro, sempre balizando a solução pelo seu custo/benefício. Paralelamente, percebi que a tecnologia a cada dois anos mudava muito e em seguida, a cada um ano. Atualmente, além do ciclo vida das tecnologias ser menor, a tecnologia é muito mais variada e integrada. Como me formei no final da década de 1970, tive uma formação mais densa em hardware. O software invadiu o espaço à medida que o hardware evoluiu e o computador foi chamado para processar e controlar várias atividades de nossa vida, como produzir um veículo ou editar um texto. Portanto, o hardware deveria ser cada vez mais versátil para dar conta de novas aplicações. A evolução do hardware foi caracterizada por processa- dores mais potentes e memórias para armazenamento de dados de maior capacidade e mais baratos. Naquela época, o software era um componente menor do computador. A diversidade de possibilidades de uso do computador fez com que fossem tomadas decisões de padronização de uma plataforma e as aplicações foram desenvolvidas em software. Porém, este ainda era desenvolvido como o status hardware até ter o de um produto de engenharia. Entre as engenharias tradicionais, a engenharia de software é particular. Seu produto é novo e, muitas vezes, se começa do zero, desenvolve-se ELSEVIER Engenharia de Software inclusive os seus componentes. Além disso, necessita-se trabalhar com diversos níveis de abstração para poder dar conta de sua complexidade e, por fim, chegar a um software que atenda às necessidades do cliente. Todo produto de software é fruto de um projeto. Assim, o projeto deve ser geren- ciado para não comprometer os prazos e custos acordados com o cliente. Os primeiros softwares eram voltados para aplicações comuns de folha de pagamentos e controle de estoques. Atualmente, os softwares são fato- res de competitividade e os negócios não sobrevivem sem um apoio de softwares de qualidade. Uma falha ocorrida em uma transação financeira pode ocasionar muitas perdas aos clientes, uma falha na ativação de um motor reserva pode ocasionar a explosão de uma usina nuclear, uma falha em uma interface pode levar um piloto a tomar decisões erradas que levem à queda do avião. Um desafio constante é como desenvolver softwares cada vez maiores e integrados com outros softwares e, ainda, ter qualidade e produtividade adequada para atender às necessidades dos clientes e cumprir os prazos e custos. Este livro é um relato de uma trajetória vivida durante os meus 30 anos de carreira. Destes, 15 anos foram dedicados a dois grandes sistemas de automação e controle em laboratório e centro de pesquisa, e os outros 15 foram dedicados a ensino, pesquisa e extensão e consultoria a empresas na área de Tecnologia da Informação (TI). Por considerá-la muito rica, decidi colocar no papel uma série de aprendizados e experiências em projetos de software. Durante este longo período, tive influências de grandes autores de Enge- nharia de Software, tais como Ian Sommerville, Roger S. Pressman e Shari Lawrence Pfleeger, nessa ordem. Suas obras direcionaram minha carreira como engenheiro de software e como professor, pesquisador e consultor, e certamente, as ideias para este livro. Tentei escrever um livro mais leve, de fácil leitura e manipulação do que os de minhas influências. A intenção foi escrever algo mais adequado aos alunos de graduação e aos professores em sala de aula dos cursos de XII