Professional Documents
Culture Documents
Novatec
Copyright 2013 da Novatec Editora Ltda. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. proibida a reproduo desta obra, mesmo parcial, por qualquer processo, sem prvia autorizao, por escrito, do autor e da Editora. Editor: Rubens Prates Capa: Carolina Kuwabata Reviso gramatical: Marta Almeida de S Editorao eletrnica: Carolina Kuwabata ISBN: 978-85-7522-340-6 Histrico das impresses: Junho/2013 Primeira edio
Novatec Editora Ltda. Rua Lus Antnio dos Santos 110 02460-000 So Paulo, SP Brasil Tel.: +55 11 2959-6529 Fax: +55 11 2950-8869 E-mail: novatec@novatec.com.br Site: novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec
MP20130603
CAPTULO 1
Historicamente, temos um cenrio que registra muitos problemas e falhas em projetos de desenvolvimento de software, como tambm nos produtos por eles entregues aos clientes que contratam empresas e prossionais, para o desenvolvimento de softwares customizados para suas necessidades especcas. Entre essas falhas podemos citar a demora na entrega dos artefatos do projeto, a falta de qualidade desses, as diculdades encontradas na manuteno do software entregue, o desempenho desse aqum das expectativas dos contratantes e a falta de conabilidade nos resultados apresentados. Esse histrico demonstra a necessidade de melhoria nos processos de desenvolvimento de software utilizados pelas empresas de tecnologia da informao contratadas para esse m, como tambm na qualidade dos produtos por elas desenvolvidos e entregues. As empresas desenvolvedoras de software necessitam de mecanismos que permitam maior produtividade e qualidade dos produtos desenvolvidos. Existem diversas disciplinas que, em conjunto, permitem obter esses objetivos. Este livro aborda as disciplinas relacionadas anlise e ao design orientados a objetos, que so extremamente importantes no desenvolvimento de software mais robusto, ecaz e com maior qualidade e extensibilidade. So apresentados conceitos introdutrios de modelagem de sistemas e vrios aspectos considerados nas fases de anlise, design e implementao de software, fases essas contidas em metodologias de desenvolvimento de software utilizadas no mercado.
14
15
Com esta apresentao, tenta-se demonstrar a importncia da utilizao de modelagem e design na construo de sistemas ao apresentar as vantagens de utiliz-los juntamente com as melhores prticas de mercado relacionadas ao desenvolvimento de software. Tambm procura-se demonstrar a importncia do levantamento e gerenciamento ecaz dos requisitos nos projetos para que esses sejam bem-sucedidos. O desenvolvimento de software sem utilizao de processos denidos, orientao a objetos e melhores prticas pode trazer uma srie de consequncias negativas ao produto nal do desenvolvimento de software. Entre elas, podemos citar: softwares de difcil manuteno, tanto corretiva quanto evolutiva; dificuldade de se reutilizar cdigo que foi desenvolvido, permitindo a reutilizao de cdigo mal-elaborado, sujeita gerao e propagao de erros em outras partes do sistema em desenvolvimento; sistemas com baixa performance e escalabilidade inadequada; baixa eficincia no desenvolvimento, com analistas desenvolvendo as mesmas funcionalidades diversas vezes; falta de confiana nos dados apresentados pelo sistema, fazendo com que usurios deixem de utilizar o sistema por no conarem nas informaes apresentadas; baixa qualidade do cdigo-fonte; implantao de sistemas repletos de erros, constantemente entrando em manuteno e interrompendo o trabalho dos funcionrios, atendimento a clientes e/ou funcionalidades disponibilizadas a clientes; sistemas que podem no atender s expectativas dos stakeholders; softwares com alto custo de manuteno; softwares de difcil utilizao, que no atendem s necessidades dos stakeholders; grande insatisfao dos usurios; prejuzos de imagem junto a clientes; fracasso do projeto.
16
Nessa relao de consequncias negativas, a depreciao da imagem dos prossionais envolvidos e da empresa em que eles trabalham possui um valor imensurvel, podendo trazer grandes diculdades na intensicao e prospeco de novos negcios para todos os envolvidos. Um dos objetivos primordiais deste livro o de aumentar a competncia dos leitores na entusiasmada tarefa de se realizar o design ecaz de sistemas, produzindo-se um software de maior qualidade, reutilizvel e escalvel.
17
mostrando se ele possui mecanismos de proteo para situaes de contigncia, como backup de dados e tempo de retorno operao. Desempenho: relacionado ao desempenho esperado do sistema. Para um projeto ser bem-sucedido, a equipe que o desenvolve deve ter o escopo do projeto muito bem denido. Aqui entra uma rea de conhecimento muito importante para que projetos sejam bem-sucedidos: o levantamento e gerenciamento de requisitos juntamente com o controle efetivo de mudanas. Para o cliente importante que o sistema atenda s suas necessidades, realizando suas funcionalidades rapidamente e produzindo resultados conveis. Para ele no importam os aspectos tcnicos envolvidos no desenvolvimento da soluo nem os aspectos de manuteno do sistema em produo. Imagine que o cliente precisa vericar se o seu cliente tem alguma restrio no Serasa. Ele apenas deseja digitar o CPF dessa pessoa em alguma interface e executar a consulta. Geralmente ele no est interessado em saber como essa consulta ser tecnicamente implementada, ele deseja apenas ter essa funcionalidade para uso em seu dia a dia e espera que o resultado esteja correto e seja fornecido sempre o mais rpido possvel. Esse exemplo demonstra a necessidade de existir um processo de renamento de requisitos, em que o analista de requisitos deve especicar cenrios operacionais com base nas necessidades dos interessados, analisando-se o documento de viso e os requisitos funcionais. Os cenrios operacionais representam uxos completos de operao para os usurios nais. Existem algumas caractersticas relacionadas a sistemas que so desejadas pelos clientes em geral. Dentre elas, podemos citar: menor custo de propriedade; menor tempo de espera para se obter o sistema; maior qualidade do sistema; fidedignidade das informaes apresentadas e das operaes realizadas; confiabilidade; maior disponibilidade.
18
Os softwares possuem uma caracterstica intrnseca que aumenta os custos das empresas ao adquirir, utilizar e manter sistemas em operao conhecida como custo total de propriedade. Esse custo conhecido em ingls como TCO (Total Cost of Ownership) e aquele que a empresa assume ao manter um sistema em utilizao por seus funcionrios. Imagine uma empresa que pretende utilizar determinado software em 500 estaes de trabalho, sendo que esse sistema deve ser instalado e congurado em cada uma delas por um analista de suporte. Agora imagine que a instalao leva cerca de uma hora e que a empresa no utiliza nenhuma soluo de mercado para instalao e atualizao automtica de software. Nesse cenrio, torna-se fcil imaginar o custo envolvido na instalao e congurao desse aplicativo para uso na empresa. Agora imagine que o sistema apresenta algum problema de funcionamento ou que foi gerada uma nova verso contendo novas funcionalidades ou alterando as j existentes. Novamente ser necessrio contratar prossionais para realizar a atualizao em todas as mquinas. Isso faz parte do TCO, e todas as empresas tm por objetivo diminuir esse custo. Outro detalhe que os clientes nunca querem ou nunca podem esperar muito tempo para que a soluo que disponvel para ser utilizada, deixando clara a necessidade de usar procedimentos para agilizar o desenvolvimento e a manuteno de sistemas. A disciplina de anlise e design orientada a objetos pode auxiliar signicativamente a equipe a atingir objetivos comuns a todos os clientes.
19
Nas ltimas dcadas, tivemos vrias propostas para documentar, modelar e desenvolver sistemas. Este livro aborda o paradigma orientado a objetos (POO) e a linguagem de modelagem unicada (UML Unied Modeling Language) em todos os exemplos e nas prticas relacionadas anlise e ao design de sistemas. Esse tipo de modelagem nos permite criar solues elegantes, compartilhar ideias e acompanhar as solues em desenvolvimento por todo o ciclo de desenvolvimento de software. Em empresas que possuem uma metodologia de desenvolvimento de sistemas institucionalizada com responsabilidades denidas, geralmente h desenvolvedores que possuem a tarefa de implementao do software e que deveriam receber especicaes completas do que ser desenvolvido e de como ser desenvolvido. Essas especicaes devem fornecer todas as informaes que o programador necessita para elaborar o cdigo e so desenvolvidas por prossionais que devem se preocupar em especicar o sistema para corresponder no s aos requisitos que atendem s reas de negcio do cliente, mas tambm aos requisitos no funcionais. Alm dos requisitos no funcionais comentados anteriormente, os desenvolvedores devem se preocupar com outros no visualizados pelos usurios, como por exemplo: Escalabilidade: como a arquitetura do sistema suporta o aumento da concorrncia dos recursos do prprio sistema. Suportabilidade: existncia de diferentes sistemas operacionais ou plataformas, processamento distribudo, diferentes protocolos de comunicao. Restries de projeto: associadas a plataformas e/ou tecnologias a serem utilizadas. Requisitos de implementao: associados a restries relacionadas ao cdigo ou construo do sistema. Requisitos de interface: caractersticas especiais para integrao com outros sistemas ou de interface operacional com usurios humanos. Requisitos fsicos: associados a requisitos de hardware, tais como conguraes fsicas de rede.
20
Na verdade, estamos falando sobre tarefas relacionadas modelagem e construo de software. Em uma matriz de responsabilidades, cabe aos prossionais de anlise e design denir como o sistema deve ser construdo para se atingir os objetivos relacionados tanto aos requisitos de negcio quanto aos requisitos no funcionais, sendo que os desenvolvedores devem construir o cdigo utilizando-se das especicaes criadas por aqueles prossionais.
21
sistemas, no agregando nenhum valor para o negcio do cliente. Desse modo, em nosso sistema e nos dados por ele armazenados, em momento algum ser considerado esse mapeamento. Com relao s aes do objeto cliente, nosso modelo de desenvolvimento vai considerar apenas as aes que agregam valor ao sistema a ser desenvolvido, tais como realizar depsito, sacar dinheiro ou aplicao nanceira e realizar transferncias monetrias, desconsiderando as aes de andar ou falar, que no agregam valor ao sistema que ser desenvolvido. Considere o modelo como parte da especicao do que dever ser desenvolvido, mostrando todas as caractersticas do produto nal que agregam valor a esse. De fato, a modelagem aparece em vrias disciplinas das reas de conhecimento humano e utilizada por toda a indstria. Lembre-se, por exemplo, da fsica quando estudamos o modelo de movimento retilneo uniforme. Esse tipo de movimento somente existir se for criado articialmente pelo ser humano, mas pode trazer resultados satisfatrios em algumas situaes especcas.
22
Uma certeza do desenvolvimento de software que requisitos sempre mudam. Apesar de bem-vindas, as mudanas causam alteraes no produto nal do projeto e precisam ser gerenciadas adequadamente e aprovadas formalmente pelo cliente antes de serem atendidas. Essa necessidade fez surgir no desenvolvimento de software a disciplina de Gerenciamento de Mudanas, que controla de forma ecaz todas as mudanas solicitadas no projeto. Como ponto de partida, pergunta-se: quem est solicitando a alterao possui autoridade para solicitar mudanas? Caso tenha, essa pessoa deve se apresentar ao responsvel pelo projeto no cliente e a quem tem autoridade para tomar decises, e devem ser avaliados os impactos nos custos, prazos e riscos e tambm a qualidade da alterao que est sendo solicitada. E somente com o De Acordo formal do cliente pode-se ento dar incio implementao das mudanas. Outro aspecto importante relacionado a requisitos garantir que o escopo do projeto no seja alterado com a incluso aleatria de requisitos adicionais sem um controle adequado de mudanas. A delimitao das fronteiras do sistema essencial para prevenir a incluso de requisitos relacionados a outros sistemas. Com relao ao escopo de projetos, preciso se proteger de dois efeitos conhecidos internacionalmente como Scope Creep e Golden Plating. Scope Creep e Golden Platen ocorrem quando pessoas envolvidas no projeto decidem adicionar descontroladamente funcionalidades e requisitos no previstos no escopo inicial do projeto sem realizar o processo formal de gerenciamento de mudanas. A no utilizao dessa disciplina pode permitir que funcionalidades no alinhadas aos objetivos do projeto sejam adicionadas a ele, podendo ameaar o prazo, a qualidade, os custos envolvidos e a satisfao do cliente. Desse modo, deve-se levar em considerao um lema de mercado: no importa quo pequeno seja nosso projeto nem quo pequena seja a mudana, o processo de gerenciamento de mudanas deve sempre existir . De acordo com o relatrio de 2010 da agncia inglesa Arras People, de gerenciamento de programas e projetos, scope creep responsvel por 11,8% dos fracassos de projetos. Devemos nos lembrar de que a qualidade do produto que est sendo desenvolvido est diretamente relacionada ao que foi solicitado e especicado pelo cliente.
23
O processo de levantamento de requisitos deve vericar os objetivos do projeto e todas as particularidades a serem disponibilizadas pelo sistema a ser desenvolvido, com a preocupao de que o sistema atenda s necessidades e expectativas da empresa.
24
A UML fornece diagramas de modelagem que podem ser utilizados nos processos do ciclo de desenvolvimento de software, documentando e especicando o sistema. uma linguagem utilizada para documentar, especicar e at construir softwares, caso sejam utilizadas ferramentas adequadas para tal como o Enterprise Architect da Sparx Systems. A seguir sero tratados os diagramas que podem ser utilizados nos processos existentes no ciclo de desenvolvimento de software.
25
Observe como extremamente simples entender o uxo de atividades existentes em determinada funcionalidade. Esse tipo de diagrama facilmente entendido por qualquer pessoa que o visualize. Podemos utiliz-lo para atender a vrios objetivos, tais como compreender o que o cliente deseja, documentar o sistema, orientar o programador sobre a maneira que a funcionalidade dever ser implementada e a equipe de testes sobre como o sistema dever responder.
26
Observe que esse diagrama exemplo identica a matriz de responsabilidades das funcionalidades. Isso permite que o programador e o homologador saibam exatamente quem dever executar o qu.
27
Esse diagrama pode ser muito til na disciplina de testes ao se criar planos de teste e executar testes no sistema. Como todo diagrama UML, ele pode ser to completo ou to simplicado quanto se julgue necessrio. A gura 1.4 mostra um exemplo desse diagrama em nosso exemplo de modelagem, relacionado ao sistema desenvolvido para restaurantes e lanchonetes. Observe que esse diagrama mostra o relacionamento dos objetos levantados para o caso de uso e as respectivas classes que faro parte do sistema.
28
29
30
31
patrocinador ou iniciador do projeto normalmente descreve as necessidades, os produtos ou servios que devero ser providos como resultado nal do projeto.
Em projetos externos, esse documento pode ser recebido pelas empresas de desenvolvimento de software como parte de um processo de licitao para contratao do desenvolvimento. Se existente, esse documento elaborado antes de o projeto ser iniciado deve ser considerado como artefato de entrada no processo de levantamento e renamento de requisitos. O apndice A apresenta um exemplo de Declarao de Trabalho relacionado ao estudo de caso utilizado nos exemplos do livro, relacionado ao Banco Omega, um banco familiar ctcio que se encontra em crescimento e precisa automatizar gradativamente suas operaes bancrias. Processos de desenvolvimento de software tradicionalmente incluem os seguintes subprocessos: elicitao de requisitos; anlise dos requisitos; arquitetura; design; implementao; testes; implantao. A seguir sero apresentados detalhes introdutrios das fases de anlise, arquitetura e design envolvidas no desenvolvimento de sistemas orientados a objetos (DSOO). A partir do captulo 6, veremos com detalhes essas trs fases que ocorrem nos processos no Ad hoc de desenvolvimento de sistemas (Modelos informais utilizados pelo desenvolvedor de software).
32
33
A arquitetura possui um nvel de abstrao mais alto que o design, o qual se preocupa em projetar os detalhes da aplicao. Enquanto o design se preocupa com os requisitos funcionais, a arquitetura se preocupa com os requisitos no funcionais. Nesse processo, o arquiteto de software deve propor uma arquitetura para o sistema. Devido ao fato de haver vrios tipos de arquitetura, essa deciso deve se basear em quesitos como: plataformas utilizadas pela empresa e se elas estaro integradas com a nova soluo a ser desenvolvida; tipo de plataforma que a empresa deseja utilizar; sistemas legados aos quais o novo sistema poder ou dever ser integrado; tipo de interface que se deseja utilizar para os usurios do sistema; onde o sistema ser hospedado; caso necessrio, tipo de distribuio do sistema. Na seleo e denio da arquitetura, cabe ao arquiteto de software identicar os riscos relacionados aplicao a ser desenvolvida e analisar as opes de arquitetura, alm de analisar as opes que minimizem os custos do projeto sem deixar de atender s expectativas relacionadas a esse projeto. Tambm cabe a ele garantir que sua proposta de arquitetura atenda aos requisitos no funcionais do cliente, relacionados conabilidade, ao desempenho e escalabilidade pelo sistema a ser desenvolvido. Algumas vezes o cliente prefere correr algum risco do que arcar com os custos associados eliminao dos riscos identicados. Imagine o custo relacionado duplicao de um ambiente para minimizar o risco de indisponibilidade do sistema aos seus usurios. Muitas empresas preferem correr o risco de indisponibilidade do que pagar por essa duplicao.
34
com base nos requisitos de tecnologia, selecionando a que melhor atende s necessidades do projeto. O design descreve a soluo minuciosamente, especicando detalhes da tecnologia selecionada e de que maneira ela ser utilizada. Na abordagem orientada a objetos com UML, devemos produzir nessa fase todas as especicaes tcnicas que sero utilizadas pelos desenvolvedores na construo do sistema. Essas especicaes tcnicas podem possuir vrios diagramas previstos na UML, sendo que diagramas de atividade, de classes e de sequncia geralmente so sucientes para produzir uma especicao com qualidade. A fase de design deve atender aos seguintes objetivos: resolver o problema de negcio; verificar elementos de suporte que faro o sistema funcionar; definir uma estratgia para implementao do sistema; produzir especificaes detalhadas do sistema; produzir casos de teste. Na fase de design, o modelo de classes inicial desenvolvido na fase de anlise deve ser especicado com grande nvel de detalhes. Tambm deve ser produzido um detalhamento completo da soluo (Arquitetura da soluo, banco de dados, linguagem de programao, padres de design utilizados etc.). Como produtos dessa fase podemos ter tambm diagramas de sequncia e colaborao no nvel de projeto, diagramas de estado, quando necessrio, diagramas de componente e diagramas de distribuio. Veremos no prximo captulo como esses subprocessos apresentados se enquadram dentro de algumas metodologias de desenvolvimento de sistemas utilizadas pelo mercado.