Prévia do material em texto
A Engenharia de Software SST Cipriano, Cássio A Engenharia de Software / Cássio Cipriano Ano: 2020 nº de p.: 11 Copyright © 2020. Delinea Tecnologia Educacional. Todos os direitos reservados. A Engenharia de Software 3 Apresentação Neste momento, trataremos do conceito de Engenharia de Software, uma área de conhecimento relacionada à Tecnologia da Informação munida de processos, métodos e ferramentas empregadas no desenvolvimento de sistemas, com o objetivo de construir produto de qualidade que atenda, de fato, as necessidades e expectativas dos usuários. Para tanto, iremos tratá-la como um conjunto de camadas que encerram metodologia genérica composta de cinco atividades, a saber: comunicação, planejamento, modelagem, construção e emprego. Esses conceitos são fundamentais e encontram aplicabilidade em diferentes metodologias empregas atualmente O que é a Engenharia de Software? A engenharia de software possui diversas definições. No entanto, Fritz Bauer definiu o conceito de engenharia de software de forma bastante clara: "Engenharia de Software é o estabelecimento e o emprego de sólidos princípios de engenharia de modo a obter software de maneira econômica, que seja confiável e funcione de forma eficiente em máquinas reais". Reflita Essa definição fornece uma base que parece um tanto abstrata, não enfatizando aspectos mais técnicos, necessidades do cliente, prazo, métricas e processos. Para contornar esse problema, o Instituto de Engenheiros Eletricistas e Eletrônicos (IEEE) propôs definição mais objetiva ao dizer que: Engenharia de Software é: “(1) A aplicação de uma abordagem sistemática, disciplinada e quantificável no 4 desenvolvimento, na operação e na manutenção de software; isto é, a aplicação de engenharia de software. (2) O estudo de abordagens como definido em (1)". Sendo assim, a engenharia de software consiste em uma tecnologia, subdividida em camadas fortemente alicerçada na noção de qualidade. A figura a seguir mostra o que se conhece como camadas da Engenharia de Software, mas também podem ser entendidas como princípios, que englobam técnicas de gerenciamento empregadas no desenvolvimento de softwares: Camadas da Engenharia de Software Fonte: Adaptado de Pressman (2006). Segundo Medeiros (2013), a gestão da qualidade ajuda a promover uma cultura de aperfeiçoamento contínuo de processos, sendo esta a cultura que, no final das contas, sempre leva ao desenvolvimento de abordagens cada vez mais efetivas na engenharia de software. Portanto, podemos notar que a parte fundamental que sustenta a engenharia de software é o foco na qualidade, como mostrado na figura. A camada de processos é a responsável por manter as camadas de tecnologia coesas, além de possibilitar o desenvolvimento de software de forma racional e dentro do prazo. O processo define uma metodologia que deve ser estabelecida para que possamos ter uma entrega efetiva. Além disso, o processo também é a base para o controle do gerenciamento de projetos de software, pois permite aplicar métodos técnicos, produzir diferentes produtos como modelos, documentos, mudanças etc., e por fim estabelece marcos, garantia da qualidade e gestão de mudanças da forma apropriada. A camada de métodos é responsável por fornecer informações técnicas para desenvolver softwares e envolve diversas tarefas como a comunicação, a análise de requisitos, a modelagem de projeto, a construção de software, os testes e o suporte. Portanto, as ferramentas são responsáveis por fornecer suporte automatizado ou semiautomatizado para o processo e os métodos. Quando as ferramentas são interligadas, de forma que informações criadas por uma ferramenta são usadas 5 por outra, temos um sistema que suporta o desenvolvimento, também chamado de Engenharia de Software com o Auxílio do Computador ou Computer Aided Software Engeneering (CASE). Ferramentas CASE são uma classificação que abrange todas as ferramentas baseadas em computadores que auxiliam atividades de engenharia de software, desde análise de requisitos e modelagem até programação e testes. Atenção Processos de Software Booch, Jacobson & Rumbaugh (2006) definem um processo de software como: "é quem está fazendo o quê, quando e como para atingir um determinado objetivo". De forma geral, um processo é um conjunto de atividades (esforço para atingir um objetivo amplo como, por exemplo, comunicar-se com os interessados), ações (conjunto de tarefas que resultam num artefato de software como, por exemplo um modelo de projeto de arquitetura) e tarefas (objetivos pequenos e bem definidos como, por exemplo, realizar um teste unitário) realizadas na criação de um produto de software. Organização de fases, tarefas e atividades no processo de desenvolvimento de software Fonte: Elaborado pelo autor (2020). 6 De acordo com Medeiros (2013), cabe ressaltar que um processo não é algo rigidamente prescrito, pelo contrário, na engenharia de software o processo é uma abordagem adaptável que possibilita que a equipe de software selecione o trabalho a ser realizado e escolha um conjunto apropriado de ações e tarefas. O foco é sempre na entrega do software dentro do prazo e com qualidade suficiente para satisfazer aos clientes e àqueles que de fato usarão o sistema. Um conceito bastante importante dentro de processo é o de metodologia ou framework, que é o responsável por estabelecer uma base para um processo completo, através de um pequeno número atividades estruturais aplicáveis a todos projetos de software, independente de tamanho ou complexidade. Framework, ou arcabouço conceitual: é um conjunto de conceitos usado para resolver um problema de um domínio específico. Trata-se de uma estrutura conceitual básica que permite o manuseio homogêneo de diferentes objetos de negócio. Serve para incrementar a disciplina de gestão e predefinir entregáveis comuns para cada objeto de negócio. Curiosidade Metodologia Genérica de desenvolvimento De acordo com Pressman (2006), uma metodologia de processo genérica possui cinco atividades: Comunicação Antes do início do projeto comunicamos e colaboramos com os clientes e todos os interessados para compreender os seus objetivos e fazermos o levantamento das necessidades que ajudarão a definirmos as funções e características do software a ser construído. 7 Planejamento O planejamento é como um mapa que ajuda a guiar a equipe na jornada de construção do produto. No planejamento, define-se o trabalho de engenharia descrevendo suas tarefas técnicas, riscos, recursos necessários, produtos a serem construídos e um cronograma de trabalho. Modelagem Modelos são esboços de modo que possamos ter uma ideia melhor do todo. Caso necessários os modelos são mais detalhados a fim de compreender melhor o problema e como resolvê-lo. Construção Essa atividade é onde o software é construído. No entanto, atividades de testes também são realizadas nessa atividade com o intuito de revelar erros na codificação. Emprego O incremento do software ou o software completo é entregue ao cliente que avalia o produto e retorna feedbacks baseando-se na avaliação do produto. Essas cinco atividades podem ser utilizadas para criação de software simples, pequenos ou grandes e complexos, podendo ser empregadas em diferentes para diferentes tipos de projetos. Para a maioria dos projetos de software, poderemos ter essas cinco atividades aplicadas iterativamente quantas forem as iterações do projeto, sendo que cada iteração irá gerar um incremento de software. Ao final de cada incremento, teremos um software cada vez mais completo. Mas, o que é iteração? Iteração é a repetição de uma ou mais ações e, no contexto do processo de Engenharia de Software, ocorre quando se retorna a uma de suas atividades. Já incremento, segundo Bernardo (2017), entende-se como cada pedaço ou representa um subconjunto de funcionalidades completas de um software. O incremento pode ser pequeno ou grande, por exemplo,ele pode variar apenas de uma tela de relatórios simples, para um conjunto altamente flexível de telas de 8 gerenciamento de dados. Cada incremento é totalmente codificado e testado, e a expectativa geral é que o trabalho tenha a conclusão mais completa possível. Incremento Fonte: Plataforma Deduca (2020). Segundo Pressman (2006), as atividades acima também são complementadas por uma série de atividades de apoio, que são aplicadas ao longo de um projeto e ajuda a equipe no gerenciamento, controle de progresso, qualidade, mudanças e risco. As atividades de apoio são: Controle e acompanhamento Permite uma avaliação do progresso em relação ao plano do projeto e que sejam tomadas medidas necessárias para o cumprimento do cronograma proposto. Administração de Riscos Avalia os riscos que podem afetar o resultado ou a qualidade do produto ou do projeto. Garantia da Qualidade Define e conduz as atividades que garantem a qualidade do software. 9 Revisões técnicas Avaliam-se artefatos para identificar e eliminar erros antes que sejam propagadas para a atividade seguinte. Medição Define e coleta medidas do processo, projeto e do produto que auxiliarão na entrega do software de acordo com os requisitos. Gerenciamento da configuração de software Gerenciar os efeitos das mudanças. Gerenciamento da reusabilidade Define quais serão os critérios para reuso e estabelece mecanismos para obtenção de componentes reutilizáveis. Preparo e produção de artefatos de software Engloba atividades para criar artefatos como modelos, documentos, logs, formulários etc. Medeiros (2013) reforça que não podemos esquecer que os projetos devem ser ágeis e adaptáveis. Dessa forma, não precisamos de todas as atividades acima. O uso ou o não uso de determinada atividade será feita de acordo com as necessidades de um projeto. Segundo Soares (2004), muitas organizações desenvolvem software sem usar nenhum processo. Geralmente isso ocorre porque os processos tradicionais não são adequados às realidades das organizações. Em particular, pequenas e médias organizações não possuem recursos suficientes para adotar o uso de processos onerosos e, por isso, optam por não utilizar nenhum processo. 10 O resultado da falta de sistematização na produção de software é a baixa qualidade do produto final, além da dificuldade de entrega do produto nos prazos e custos pré-definidos, podendo inviabilizar a futura evolução do software. Atenção Existem vários processos de software definidos na literatura da Engenharia de Software. É comum mesmo algumas organizações criarem seu próprio processo ou adaptar algum processo à sua realidade. Dentre os vários processos existentes, existem as metodologias tradicionais, que são orientadas a documentação, e as metodologias ágeis, que procuram desenvolver softwares com o mínimo de documentação. Fechamento Iniciamos nosso estudo sobre Engenharia de Software destacando diferenças entre algumas definições relacionadas à essa importante área da Ciência da Computação e ressaltamos, como fator comum, a existência de camadas de desenvolvimento que envolvem processos, métodos e ferramentas, com foco na qualidade do produto desenvolvido. Depois, destacamos que diferentes metodologias de desenvolvimento empregam, de certa forma, atividades que envolvem comunicação, planejamento, modelagem, construção e emprego, delimitando assim as principais fases do ciclo de vida de um produto de software. Por fim, detalhamos algumas atividades de apoio, que tem impacto direto na qualidade do produto desenvolvido, e envolvem controle e acompanhamento, administração de riscos, gestão de qualidade, revisões técnicas, mediação, gerenciamento de configuração e reusabilidade, além do preparo e produção de artefatos de software. 11 Referências BERNARDO, K. Iterativo e Incremental: suas definições. In: Cultura Ágil. 11 jan. 2017. Disponível em: https://www.culturaagil.com.br/iterativo-e-incremental-suas- definicoes. Acesso em: 16 jul. 2020. BOOCH, G.; RUMBAUGH, J.; JACOBSON, I. UML: guia do usuário. Rio de Janeiro: Elsevier, 2006. 474 p. MEDEIROS, Higor. Princípios da Engenharia de Software. In: DevMedia. 2013. Disponível em: http://www.devmedia.com.br/principios-da-engenharia-de- software/29630. Acesso em: 16 jul. 2020 PRESSMAN, R. S. Engenharia de Software. 6. ed. Rio de Janeiro: McGraw-Hill, 2006, 720 p. SOARES, M. dos S. Comparação entre Metodologias Ágeis e Tradicionais para o Desenvolvimento de Software. Lavras: Infocomp, 2004. Disponível em: www.dcc. ufla.br/infocomp/index.php/INFOCOMP/article/view/68/53. Acesso em: 16 jul. 2020