Baixe o app para aproveitar ainda mais
Prévia do material em texto
Conceitos de Engenharia de Software O software O software • É a mais importante tecnologia do cenário mundial, ótimo exemplo da lei das consequências não intencionais • A manutenção de software absorve mais pessoas e recursos que a criação do mesmo • As pessoas apostam seu conforto, sua segurança, seu entretenimento, suas decisões e suas próprias vidas em software. Tomara que estejam certas! A natureza do software • Ele tem duplo papel: é o produto e também o veículo de distribuição do produto. • Ele distribui o produto mais importante da nossa era: a informação. • Ex.: Ele transforma a informação de quanto você tem na conta para dinheiro físico. • Com a evolução do hardware, e a criação de variadas opções de entrada, o software foi se tornando cada vez mais complexo, sofisticado (e problemático). Questões a serem respondidas ainda hoje Mesmo com toda a tecnologia moderna: • Por que a conclusão de software leva tanto tempo? • Por que os custos de desenvolvimento são tão altos? • Por que não conseguimos encontrar todos os erros antes de entregarmos o software ao cliente? • Por que gastamos tanto tempo e esforço realizando a manutenção de programas existentes? • Por que ainda temos dificuldades de medir o progresso de desenvolvimento e a manutenção de um software? A natureza do software • O “problema” de se lidar com software é que ele é mais um produto lógico que um produto físico. • Ele não se “desgata”, mas certamente se deteriora. (Curva da banheira para hardware [muitos defeitos no início e no fim da vida]/ curva da taxa de defeitos para software [defeitos no início e estabilidade no resto da vida {?}) • O desgaste contraditório vem por causa das modificações pelas quais o software passará. • Quando um hardware se desgasta, substituímos. Software não. E por fim, grandes desafios. • Softwares baseados na internet com todas as restrições de rede • Aplicativos para celular que devem “caber” em muitos tipos de dispositivos móveis A engenharia de software Fatos a se considerar • Software está profundamente incorporado em praticamente todos os aspectos de nossas vidas, o que faz com que tenha milhões de pessoas interessadas nos seus serviços. • Então: é preciso compreender o problema dessas pessoas antes de desenvolver o software. • Software se tornou muito complexo, muitas vezes desenvolvido por equipes grandes de profissionais com experiências diferentes e modos diferentes de trabalhar. • Então: projetar é essencial. Fatos a considerar • Pessoas, negócios e governos dependem de software para sobreviver. • Então, software deve ter uma qualidade elevada. • Se uma aplicação se tornar essencial à vida de pessoas, empresas e governo, sua longevidade também deve ser grande. • Então, software tem se ser passível de manutenção. • Ou seja, software precisa passa por processos de engenharia. Como tudo começa? • Todo projeto de software é motivado por alguma necessidade de negócios – 1. a necessidade de corrigir um defeito em uma aplicação existente; 2. a necessidade de adaptar um sistema legado a um ambiente de negócios em constante transformação; 3. a necessidade de ampliar a funções e os recursos de um aplicação existente ou 4. a necessidade de criar novo produto, serviço ou sistema. A pirâmide de Pressman Sobre engenharia de software • O principal foco da engenharia sempre vai ser a qualidade. • O processo é a base. Define metodologias a serem seguidas para a produção de artefatos, o desenvolvimento racional e a entrega no prazo. • Métodos são tarefas técnicas a serem executadas (comunicação, análise de requisitos, modelagem de projeto, construção de programa, testes e suporte) • Ferramentas fornecem suporte automatizado ou semi automatizado para o processo e para os métodos. O processo de software • Um processo define quem está fazendo o quê, quando e como para atingir determinado objetivo.” – Ivar Jacobson, Grady Booch e James Rumbaugh • Processo é o conjunto de atividades, ações e tarefas (nomes do vocabulário do engenheiro) para a produção de artefatos. • A atividade se concentra em objetivos amplos (comunicar, projetar, construir, etc.). • Sempre vai existir, em qualquer projeto. • A ação resulta em artefatos de software fundamentais (ex.: modelo arquitetural, lista de requisitos, protótipo) • A tarefa se concentra em objetivos pequenos e definidos (ex.: realizar testes de unidades, construir casos de uso, etc.) Processo de software • É apenas um guia, não uma prescrição rígida de como-se-deve-fazer. Metodologias de Processo • Também chamado de framework • Conjunto de atividades metodológicas aplicáveis a todos os projetos de software, independente do tamanho ou complexidade. • Engloba também atividades de apoio aplicáveis a todo processo de software • As atividades metodológicas genéricas são: comunicação, planejamento, modelagem, construção e entrega. Atividades metodológicas genéricas • Comunicação: entender os objetivos dos envolvidos (stakeholders) e reunir os requisitos dos clientes. O que desenvolver? • Planejamento: Criar um “mapa” (projeto de software), onde se define o trabalho de engenharia de software, descreve as tarefas técnicas a serem conduzidas, os riscos produzidos, os produtos resultantes e um cronograma de trabalho. • Modelagem: criar um “esboço” para que se possa ter ideia do todo e o refina até que se tenha uma compreensão boa do problema. • Construção: Geração de código e testes. • Entrega: implementação do software, treinamento e feedback do cliente. Atividades de apoio • São complementos das atividades metodológicas • Se concentram principalmente em gerenciamento, acompanhamento e controle do projeto. • São elas: Controle e acompanhamento do projeto, Administração de riscos, Garantia de qualidade de software, Revisões técnicas, Medição, Gerenciamento da configuração de software, Gerenciamento de capacidade de reutilização, Preparo e produção de artefatos de software. A essência da prática • Segundo George Polya, no livro How to solve it (Como resolver problemas), a solução de problema é (aplicável a Engenharia de Software): • Compreender o problema (comunicação e análise) • Planejar uma solução (modelagem e projeto de software) • Executar o plano (geração de código) • Examinar o resultado para ter precisão (testes e garantia de qualidade) 1º passo: Compreenda o problema Tente responder a essas perguntas: • Quem tem interesse na solução do problema? (os stakeholders?) • Quais são as incógnitas? (dados, funções e recursos necessários para resolver o problema?) • O problema pode ser compartimentalizado? (problemas menores, mas fáceis de serem compreendidos?) • O problema pode ser representado graficamente? (É possível criar um “esboço” [modelo analítico]?) 2º passo: Planeje a solução • Você já viu problemas semelhantes anteriormente? (Existem padrões ou algum software já projetado que resolva o problema?) • Algum problema semelhante já foi resolvido? (Existem elementos da solução que podem ser reutilizados?) • É possível definir subproblemas? (Existem soluções óbvias e imediatas pra eles?) • É possível criar um modelo pra esse problema? 3º passo: Leve o plano adiante • Obs.: O projeto elaborado serve como um mapa, mas ele não é exaustivo. Existem desvios que provavelmente teremos que fazer, no entanto segui-lo nos permite não nos perder. • A solução é adequada ao plano? • Todas as partes componentes da solução estão provavelmente corretas? (O projeto e o código gerado foram revisados?) 4º passo: examine o resultado Obs.: Não existe perfeição, mas existe uma quantidade suficiente de testes. •É possível testar cada parte componente da solução? • A solução produz resultados adequados aos dados, às funções e às características necessárias? (O software foi validado em todas as exigências do cliente?) Princípios gerais (no maior nível de abstração) • A razão de existir: O software existe sempre para agregar valor para seus usuários. Se algo não agrega valor real ao sistema, não o faça. • KISS (Simplifique!): O sistema deve ser o mais simples possível, mas isso não significa que ele deve abdicar de funções essenciais, nem que deva existir gambiarras nele. • Mantenha a visão: Manter o objetivo inicial coeso e claro é importantíssimo para que o sistema não vire uma bagunça. É aqui que entra o arquiteto. • O que um produz, o outro consome: Sempre especifique, projete e implemente ciente de que alguém mais terá que entender o que você está fazendo. Princípios gerais • Esteja aberto para o futuro: O sistema tem que ser implementado para ser longevo, portanto deve ser adaptável a mudanças e nunca ser limitado e “final”. (Principalmente WebApps) • Planeje com antecedência, visando reutilização: Ao planejar algo para ser reutilizável, há ganhos no tempo, no esforço e também nos custos para este projeto e para projetos futuros. • Pense!: Sempre analise algo antes de fazer. Se mesmo assim der errado, isso se tornará uma valiosa experiência. Mitos do desenvolvimento de software (meias verdades) Gerenciamento • Já temos um livro cheio de padrões e procedimentos para desenvolver software. Ele não supriria meu pessoal com tudo o que precisam saber? • Se o cronograma atrasar, poderemos acrescentar mais programadores e ficar em dia. • Se eu decidir terceirizar o projeto, eu posso simplesmente relaxar e deixar a outra empresa realiza-lo. Mitos de desenvolvimento de software Clientes • Uma definição geral dos objetivos é suficiente para começar a escrever programas – podemos preencher os detalhes posteriormente. • Os requisitos de software mudam continuamente, mas as mudanças podem ser facilmente assimiladas, pois o software é flexível. Mitos de desenvolvimento de software Profissionais da área • Uma vez que o programa foi feito e colocado em uso, nosso trabalho está terminado. • Até que o programa esteja em execução, não há como avaliar sua qualidade. • O único produto passível de entrega é o programa em funcionamento. • A engenharia de software nos fará criar documentação volumosa e desnecessária e, invariavelmente, vai nos retardar. Resumo do conteúdo • A engenharia de software engloba processos, métodos e ferramentas para a construção de software com qualidade e dentro do prazo. • São cinco atividades metodológicas genéricas da engenharia de software: comunicação, planejamento, modelagem construção e entrega • A prática de engenharia de software serve para resolver problemas e segue um conjunto de princípios básicos • Mitos em relação à engenharia de software continua a levar gerentes e profissionais por um mau caminho, mesmo com todo o conhecimento facilitado sobre esse assunto, por isso devem ser derrubados.
Compartilhar