Baixe o app para aproveitar ainda mais
Prévia do material em texto
Autor: Prof. Edson Quedas Moreno Colaboradores: Prof. Antônio Palmeira de Araújo Neto Prof. José Carlos Morilla Fundamentos de Engenharia de Software Professor conteudista: Edson Quedas Moreno Graduado em 1983 em Engenharia Eletrônica pela Faculdade de Engenharia Industrial (FEI), com ênfase em Computação. Possui pós-graduação lato sensu em Novas Tecnologias de Ensino-Aprendizagem pela UniÍtalo (2011). Mestre em Engenharia de Produção pela Universidade Paulista (UNIP), com ênfase em Sistemas de Informação (2002). Exerce há mais de 30 anos atividades na área da educação e do ensino. Desde 1989, é professor e conteudista nos cursos de graduação e pós-graduação, atuando nos cursos da área de Negócios, Computação e Informação da UNIP e da UniÍtalo. Foi coordenador de cursos entre 1989 e 2016 na UniÍtalo e na Kroton/Anhanguera. Desde 2002, já atuou como professor, tutor e conteudista no Senac, na Kroton/Anhanguera, na Fecap e no curso de MBA em Engenharia de Software e da Informação da Uninove. Trabalhou por mais de 25 anos na área corporativa. Desde 2002, é diretor da empresa Asserti; foi sócio das empresas Consultoria EaD e ITGVBR (2009 a 2012); gerente de sistemas na Panrotas Editora (1994 a 2000); analista de sistemas pela Cisco (1985 a 1994); programador pela Digilab/Bradesco (1983 a 1985). Áreas de conhecimento nas quais atuou: Computação e Informação, com ênfase em Engenharia de Software, Projetos de Software e de Sistemas e Tecnologias de Ensino a Distância; e em Engenharia de Produção, com ênfase em Administração, Projetos, Logística e Produção. Em 2015, arquitetou um Hackathon (maratona de programação de software por 30 horas contínuas com a participação de duzentos alunos), com apoio da Kroton/Anhanguera e da Microsoft, evento que foi promovido pela Secretaria Municipal de Promoção da Igualdade Racial da Prefeitura de São Paulo (SMPIR) e pelo Banco Interamericano de Desenvolvimento (BID). Em 2016, esse Hackathon recebeu da Braslider o Prêmio Excelência e Qualidade Brasil. © Todos os direitos reservados. Nenhuma parte desta obra pode ser reproduzida ou transmitida por qualquer forma e/ou quaisquer meios (eletrônico, incluindo fotocópia e gravação) ou arquivada em qualquer sistema ou banco de dados sem permissão escrita da Universidade Paulista. Dados Internacionais de Catalogação na Publicação (CIP) M843f Moreno, Edson Quedas. Fundamentos de Engenharia de Software / Edson Quedas Moreno. – São Paulo: Editora Sol, 2021. 160 p., il. Nota: este volume está publicado nos Cadernos de Estudos e Pesquisas da UNIP, Série Didática, ISSN 1517-9230. 1. Software. 2. Princípios. 3. Gerenciamento. I. Título. CDU 681.3.02 U511.31 – 21 Prof. Dr. João Carlos Di Genio Reitor Prof. Fábio Romeu de Carvalho Vice-Reitor de Planejamento, Administração e Finanças Profa. Melânia Dalla Torre Vice-Reitora de Unidades Universitárias Profa. Dra. Marília Ancona-Lopez Vice-Reitora de Pós-Graduação e Pesquisa Profa. Dra. Marília Ancona-Lopez Vice-Reitora de Graduação Unip Interativa – EaD Profa. Elisabete Brihy Prof. Marcello Vannini Prof. Dr. Luiz Felipe Scabar Prof. Ivan Daliberto Frugoli Material Didático – EaD Comissão editorial: Dra. Angélica L. Carlini (UNIP) Dr. Ivan Dias da Motta (CESUMAR) Dra. Kátia Mosorov Alonso (UFMT) Apoio: Profa. Cláudia Regina Baptista – EaD Profa. Deise Alcantara Carreiro – Comissão de Qualificação e Avaliação de Cursos Projeto gráfico: Prof. Alexandre Ponzetto Revisão: Vitor Andrade Giovanna Oliveira Lucas Ricardi Sumário Fundamentos de Engenharia de Software APRESENTAÇÃO ......................................................................................................................................................9 INTRODUÇÃO ........................................................................................................................................................ 10 Unidade I 1 FUNDAMENTOS DA ENGENHARIA DE SOFTWARE ............................................................................. 11 1.1 Engenharia de software ..................................................................................................................... 11 1.2 Engenharia de sistemas ..................................................................................................................... 13 1.3 O produto software ............................................................................................................................. 14 1.3.1 Tipos de produção de software ......................................................................................................... 16 1.4 Fábrica de software ............................................................................................................................. 18 1.4.1 Problemas enfrentados pelos fabricantes de software ........................................................... 20 1.5 Características do software .............................................................................................................. 20 1.5.1 Dualidade do software com o hardware ....................................................................................... 21 2 PRINCÍPIOS DO DESENVOLVIMENTO DE SISTEMAS .......................................................................... 25 2.1 Aplicações e desenvolvimento de sistemas computacionais ............................................. 25 2.1.1 O que diferencia um software de outro? ...................................................................................... 25 2.2 Ambiente computacional .................................................................................................................. 31 2.3 Problemas de relacionamento entre gerência, cliente e desenvolvedor ....................... 32 2.4 Projeto e construção do software ................................................................................................. 34 Unidade II 3 PROCESSO DE SOFTWARE ............................................................................................................................ 42 3.1 Processo de software e o desenvolvimento do projeto ........................................................ 42 3.1.1 Planejamento do processo .................................................................................................................. 43 3.1.2 Decomposição do processo ................................................................................................................ 44 3.2 Gestão de planejamento do software .......................................................................................... 46 3.2.1 Análise de recursos para os processos do projeto ..................................................................... 47 3.2.2 Recursos do projeto e do produto ................................................................................................... 47 3.3 Fusão do produto e do processo .................................................................................................... 49 3.3.1 Estrutura organizacional para o desenvolvimento de software .......................................... 49 3.3.2 Generalidades sobre o arcabouço do processo ........................................................................... 51 3.3.3 Gerenciamento da equipe de desenvolvimento......................................................................... 53 4 MODELOS DE PROCESSOS DE SOFTWARE ............................................................................................. 56 4.1 Modelos de processos de software tradicionais ...................................................................... 56 4.1.1 Modelo cascata (Waterfall ou sequencial linear) ...................................................................... 57 4.1.2 Modelo balbúrdia (codifica/corrige ou codifica/remenda) .................................................... 58 4.1.3 Prototipagem ............................................................................................................................................59 4.1.4 Incremental ............................................................................................................................................... 61 4.1.5 Modelo espiral .......................................................................................................................................... 62 4.1.6 RAD ............................................................................................................................................................... 63 4.2 Processo unificado ............................................................................................................................... 65 4.2.1 RUP ............................................................................................................................................................... 65 4.2.2 Praxis ............................................................................................................................................................ 72 4.3 Modelos de processo pessoal e de equipe ................................................................................. 72 4.3.1 PSP ................................................................................................................................................................ 72 4.3.2 TSP................................................................................................................................................................. 74 Unidade III 5 METODOLOGIAS ÁGEIS ................................................................................................................................. 80 5.1 Manifesto para Desenvolvimento Ágil de Software .............................................................. 80 5.2 Metodologias ágeis .............................................................................................................................. 82 5.2.1 Extreme Programming (XP) ................................................................................................................ 82 5.2.2 Scrum ........................................................................................................................................................... 84 5.2.3 FDD ............................................................................................................................................................... 86 5.2.4 DSDM ........................................................................................................................................................... 88 5.2.5 Crystal .......................................................................................................................................................... 90 5.2.6 Agile Modeling (AM) .............................................................................................................................. 91 6 ENGENHARIA DE REQUISITOS .................................................................................................................... 92 6.1 Processo da engenharia de requisitos do software ................................................................ 92 6.2 Estudo da viabilidade do sistema .................................................................................................. 95 6.3 Elicitação e análise de requisitos ................................................................................................... 96 6.3.1 Elicitação .................................................................................................................................................... 96 6.3.2 Levantamento e análise de requisitos ............................................................................................ 99 6.4 Especificação, documentação e modelagem dos requisitos ............................................... 99 6.4.1 O documento de requisitos de software .....................................................................................100 6.4.2 Requisitos do usuário (RU) ...............................................................................................................102 6.4.3 Requisitos funcionais (RF) .................................................................................................................103 6.4.4 Requisitos não funcionais (RNF).....................................................................................................105 6.4.5 Requisitos do sistema (RS) ................................................................................................................106 6.4.6 Validação dos requisitos .....................................................................................................................109 Unidade IV 7 PRINCÍPIOS QUE ORIENTAM A PRÁTICA ..............................................................................................115 7.1 A essência da prática ........................................................................................................................115 7.1.1 Princípios fundamentais ....................................................................................................................115 7.2 Princípios das atividades metodológicas ..................................................................................117 7.2.1 Princípios da comunicação ...............................................................................................................117 7.2.2 Princípios de planejamento ..............................................................................................................118 7.2.3 Princípios de modelagem ..................................................................................................................119 7.2.4 Princípios de construção ...................................................................................................................121 7.2.5 Princípios de codificação .................................................................................................................. 123 7.2.6 Princípios de disponibilização ......................................................................................................... 123 7.3 Atividade de verificação do código do software ...................................................................124 7.3.1 Abordagens top-down (de cima para baixo) e bottom-up (de baixo para cima) ..... 125 8 INTEGRAÇÃO E ENTREGA DO SISTEMA ................................................................................................126 8.1 Projeto de arquitetura ......................................................................................................................126 8.1.1 Evolução da arquitetura do sistema ............................................................................................ 129 8.1.2 Arquiteturas multiprocessadas e multicomputadorizadas ................................................. 132 8.2 Testes e diagnósticos ........................................................................................................................134 8.2.1 Testes alfa e beta .................................................................................................................................. 135 8.2.2 Testes caixa-preta e caixa-branca ................................................................................................. 136 8.3 Manutenção do software ................................................................................................................138 8.3.1 Fundamentos da manutenção ....................................................................................................... 140 8.3.2 Procedimentos de manutenção ......................................................................................................141 8.3.3 Prevenção de defeitos com Cleanroom .......................................................................................141 8.4 Gerenciamento de configuração do software ........................................................................1428.4.1 Gerenciamento de mudanças ......................................................................................................... 142 8.4.2 Gerenciamento de versões ............................................................................................................... 143 8.4.3 Construção de sistemas: entrega .................................................................................................. 145 8.4.4 Gerenciamento de releases .............................................................................................................. 146 9 APRESENTAÇÃO Esta disciplina contribui com a teoria, a prática do projeto e a construção do produto software de computador, observando o sistema a partir da perspectiva de um engenheiro. Destaca-se a evolução da construção do produto ao longo das etapas do ciclo de vida do desenvolvimento. Na pesquisa das possíveis causas, caminhos e soluções, são apresentados conceitos no seu contexto de aplicação, exemplos reais que contribuem para a compreensão das técnicas de desenvolvimento, gerenciamento de projetos de software em empresas, papéis das equipes de desenvolvimento em cada estágio do processo e mudanças que afetam o modo da prática da engenharia de software. Por se tratar de uma nova área de engenharia, a proposta desta disciplina é capacitar o aluno no conhecimento e nas práticas profissionais de desenvolvimento de software, fornecendo uma base suficiente de aprendizado para iniciar na engenharia de software. Este livro-texto foi dividido em quatro unidades, sendo cada unidade dividida em dois capítulos. Na unidade I, identifica-se a dualidade entre a engenharia de software e a engenharia de sistemas, apresentando o que é o produto de software, sua forma de produção, bem como suas características e aplicações. Após conceituar engenharia de software e o produto software, são destacados os princípios do desenvolvimento de software e de sistemas, mostrando problemas e soluções relativas ao produto, os perfis de profissionais que atuam nesse processo e como o software é construído. Por sua vez, a unidade II conceitua o processo de software, mostra suas etapas e como decompor o processo e determinar os recursos do projeto e do produto software, orientadas por estruturas organizacionais por meio de modelos de processo de software. Esses modelos ilustram os métodos e as técnicas aplicadas no ciclo de desenvolvimento de software desde os estágios iniciais de concepção, sua análise, construção, entrega e evolução. São acentuados os principais modelos, tais como: cascata, incremental, espiral, processos unificados, modelos pessoais e de equipe. Na unidade III, em contraponto às metodologias prescritivas, são elencadas as principais metodologias ágeis de desenvolvimento do software, tais como: XP, Scrum, FDD, DSDM, Crystal e AM, que servem de apoio aos modelos de processos de software. A concepção para o projeto de software constitui os procedimentos para criar o documento de requisitos do software, que define: requisitos do usuário, requisitos do sistema, requisitos funcionais e não funcionais. Contemplam-se, ainda, as principais atividades e práticas no estudo de viabilidade do sistema, elicitação, análise, especificação, modelagem e validação para o processo, o projeto e o produto software. Na unidade IV, falaremos sobre como, a partir dos requisitos e da disposição de processos para a construção do software, a engenharia de software apresenta os princípios das atividades metodológicas voltadas para a comunicação, o planejamento, a modelagem, a construção e a disponibilização do software. O objetivo é conduzir à prática de projetar, construir, dar garantias e dispor o software. Para garantir a mantenabilidade do software, são abordados processos de mudanças no software, durante o desenvolvimento e mesmo depois que ele tiver sido liberado. O acompanhamento dessas mudanças garante que o produto software foi construído de acordo com o que foi pedido. 10 A linguagem utilizada para a elaboração deste livro-texto é estritamente técnica. Os estudos, pesquisas e práticas apresentadas são resultados em campo das atividades de engenharia de software aplicadas no projeto e na construção de um software. Este livro-texto não apresenta a engenharia de software em sua totalidade. Contudo, traz diversas leituras, links de acesso, exemplos e casos aplicados da engenharia de software, dicas de ferramentas de desenvolvimento, tecnologia ao nosso alcance e melhor capacitação profissional. INTRODUÇÃO O computador surgiu durante a Segunda Guerra e se tornou público em 1947. Desde então, o mundo começou a consumir software e não parou mais. Sua demanda aumentou e novos produtos de software foram surgindo. Destaca-se que a produção de software ainda não conseguiu atender a demanda do consumidor. Foi necessário criar novas formas para produzir software. Pode-se dizer que estamos no início da era do software. Com o computador, o ser humano automatiza o conhecimento. Ademais, a humanidade prosperou nos últimos 50 anos o que não conseguiu em 5 mil anos, e o software foi o responsável. No início dos anos 1990, difundiu-se a internet e, em consequência, o e-mail. Houve também a promoção da agenda de grupo on-line e a informação em alto estilo com a world wide web (www). De fato, foi um dos avanços mais significativos da história da humanidade. Por meio desses elementos, vários outros sistemas de comunicação foram criados. Assim, a tecnologia da informação (TI) foi impulsionada. Na passagem do milênio, a questão passou a ser a velocidade. Os empresários precisavam ter rapidez em estratégias, processos, transações comerciais, em questões logísticas e no acesso às informações. A tecnologia e os sistemas produtivos passaram por muitas melhorias. Desse modo, começaram a ser usadas ferramentas digitais para controlar atividades básicas de produção e gestão dos negócios. A TI proporciona alta velocidade do conhecimento para competir no mundo dos negócios: é o começo de um novo ciclo na história, a era da informação e do conhecimento. Nesse novo ciclo, a engenharia de software fornece às empresas mecanismos de acesso instantâneo às informações, velocidade para lançar produtos antes da concorrência, estatísticas atualizadas em tempo real para cada produto em qualquer lugar do mundo e diversos outros meios facilitadores que possibilitam ao gestor ou ao operacionalizador se manter na vanguarda dos negócios. Software e sistemas poderosos auxiliam nesse desempenho. A indústria se automatiza, eletroeletrônicos se tornam digitais, a informação liga o planeta e as pessoas. Pode-se dizer que hoje vivemos em um “sistema de conhecimento distribuído”. 11 FUNDAMENTOS DE ENGENHARIA DE SOFTWARE Unidade I 1 FUNDAMENTOS DA ENGENHARIA DE SOFTWARE 1.1 Engenharia de software A engenharia de software projeta e constrói o produto software de computador. Abrange programas que são executados em computadores de qualquer tamanho e arquitetura, bem como o processamento de dados e informações, que incluem formas impressas e virtuais, combinando caracteres dos mais variados tipos, incluindo representações de informação no formato de imagens, vídeos e áudios. As tecnologias atuais resultam da convergência de sistemas de computadores, diversas mídias, sistemas de comunicação e sistemas mecatrônicos. O que suscita questões complexas para os engenheiros de software são: hardware diferente, diversos ambientes operacionais, regras do negócio que mudam constantemente, adaptações a novas tecnologias e interfaces, bem como a ligação de todos esses elementos. O software é uma tecnologia indispensável para os negócios, o entretenimento, a ciência e a engenharia. O desenvolvimento de um sistema computacional, seja ele voltado para negócios, web, aplicação científica, automação industrial e outras aplicações, inicia-se pelo software, ferramenta que atende a necessidade (ou resolve um problema) de cálculo, de automação,de manufatura, do negócio empresarial, da engenharia e da ciência. “Software de computadores continua a ser a tecnologia única mais importante no cenário mundial” (PRESSMAN, 2011). Os problemas de qualidade de hardware podem ser corrigidos pela substituição de peças, ao contrário do software, que é desenvolvido ou passa por um processo de engenharia, não é um produto industrializado. O software é um produto produzido a partir de perguntas e respostas, as quais levam à modelagem de componentes que fornecem detalhes para codificação. O custo do software está concentrado no trabalho de engenharia, que, por sua vez, contempla os seguintes itens: • especificação, documentação e procedimentos; • análise, projeto, codificação, implementação, testes, diagnósticos e implantação; • suporte ao cliente/usuário. 12 Unidade I Produzir software que apresente uma boa relação custo/benefício é essencial para o funcionamento das economias nacionais e internacionais (SOMMERVILLE, 2011). Por terem similaridades com a engenharia de software, algumas disciplinas se confundem, como é o caso da engenharia de sistemas – no aspecto profissional –, pois boa parte dos métodos e técnicas são semelhantes; contudo, são disciplinas distintas. A engenharia de software usa o conhecimento e os resultados de diversas áreas, fornece outros problemas de estudo, bem como auxilia na resolução de problemas. “O mundo moderno não poderia existir sem o software. Infraestruturas e serviços nacionais são controlados por sistemas computacionais, e a maioria dos produtos elétricos inclui um computador e um software que o controlam” (SOMMERVILLE, 2011, p. 2). Estudo de caso: modelagem de um sistema de bomba de insulina Do ponto de vista da engenharia de sistemas, a análise da bomba de insulina é apresentada em um diagrama de blocos, como mostrado na Figura 1. O modelo ilustra os componentes de hardware e o fluxo de controle para a bomba de insulina. Módulo de agulha Sensor Bomba Controlador Display 1 Relógio Alarme Display 2 Reservatório de insulina Fonte de energia Figura 1 – Hardware de bomba de insulina Sob o prisma da engenharia de software, a análise da bomba de insulina é apresentada em um modelo de negócio com um diagrama de atividades, conforme a Figura 2. O modelo expressa algumas funções de interface com o usuário e com o hardware que devem ser apresentadas pelo software. Sensor de sangue Dados da bomba Bomba de insulina Açúcar no sangue Registro de insulina Dose de insulina Calcular insulina Registro de dose Analisar a leitura do sensor Controlar bomba de insulina Processar comandos da bomba Figura 2 – Modelo de atividade da bomba de insulina 13 FUNDAMENTOS DE ENGENHARIA DE SOFTWARE 1.2 Engenharia de sistemas A engenharia de sistemas é uma disciplina presente em muitos projetos de desenvolvimento de software. Focaliza diversos elementos e, nesse sentido, analisa, projeta e organiza esses elementos em um sistema para atender um objetivo específico, que pode ser um produto ou uma tecnologia para transformar a informação ou auxiliar no controle de algum ambiente operacional. A engenharia de sistema tem a visão voltada para a interface e ligação entre os elementos. Também trata da integração dos principais elementos que compõem os sistemas computacionais, que são: software, hardware, pessoal, base de dados e redes de computadores. A integração desses elementos dará suporte ao software. Cada elemento da engenharia de sistemas em estudo possui suas características próprias referentes a projeto, modelos, procedimentos e documentos específicos do elemento em desenvolvimento. A Figura 3, um diagrama de componentes e implantação, mostra a ligação dos principais elementos que compõem o sistema computacional e a forma pela qual vão interagir para que, nesse sentido, possam funcionar com boa eficácia e eficiência quando reunidos em determinado conjunto. Cliente - PC Computer <<TCP/IP>> <<HTTP>> Cliente - SO Windows Cliente - Browser Nó 1 - Server computer 1 <<HTML>> Server - SOR Windows Web - Server - Microsoft Ils Server - Gerenciador de telas Server - Gerenciador de contas <<HTML>> <<HTML>><<TCP/IP>><<DNS>> <<JSP>> Nó 2 - Server computer 2 <<MySQL>> Server - SOR Linux Web Server - Apache/Tomcat Server - App-controle de estoque Server - SGBD MySQL <<JSP>> <<MySQL>> Figura 3 – Infraestrutura projetada pela engenharia de sistemas para atender a aplicação de controle de estoques Na Figura 3 são vistas as ligações dos elementos do sistema, representados pelos seus componentes, tais como: computadores, protocolos de rede, bibliotecas, linguagem de programação e detalhes de conexões. 14 Unidade I São bases para a engenharia de sistemas: procedimentos e documentos com elementos do sistema que devem ser identificados; requisitos operacionais que devem ser atingidos, analisados, especificados, modelados, validados e gerenciados. Exemplo de aplicação Como vimos, a engenharia de software projeta e constrói software para computador. O exemplo a seguir mostra um problema comum de software cuja solução está na engenharia de sistemas. Uma característica que mostra a influência da engenharia de sistemas em um projeto de software está no teste de determinada funcionalidade: a engenharia de software desenvolve uma funcionalidade que possui a particularidade de fazer múltiplos acessos a um banco de dados em determinada rede de computadores, porém o desenvolvimento do software é único e faz testes do código e ambiente restrito. Por essa razão, os múltiplos acessos, que podem ocorrer também em múltiplas estações de computadores, podem degradar o desempenho de uso do software. A engenharia de sistemas, por sua vez, cuida do aspecto de banda de rede e da capacidade do serviço de banco de dados em atender as requisições de múltiplos usuários do software. 1.3 O produto software Nos últimos 60 anos, o produto software tem sido responsável por grandes avanços da humanidade. O uso inteligente da informação e ideias inovadoras passaram a ser prioridades para o crescimento das empresas, as quais, na era informação, concorrem em um mercado complexo, que muda muito rápido, é globalizado, supercompetitivo e voltado para o cliente. O software muda o modo pelo qual as empresas são operadas, como as pessoas trabalham e como a TI apoia as operações empresariais e as atividades de trabalho do usuário final. O software propiciou melhoras na tecnologia, na educação, no entretenimento, nos sistemas produtivos, na ciência e na engenharia. Ferramentas digitais começaram a ser usadas nas atividades da sociedade e, em uma espécie de aceitação global, “a sociedade da informação reconfigura o modo de ser, agir, se relacionar e existir dos indivíduos” (KOHN; MORAES, 2007, p. 2). A TI proporciona velocidade do conhecimento, não cria apenas conhecimento, mas reforça ainda mais essa criação. Estamos no começo de um novo ciclo na história da humanidade: a era da informação. 15 FUNDAMENTOS DE ENGENHARIA DE SOFTWARE Observação Tecnologias modernas, avançadas e criativas não existiriam sem o software, o que faz dele o produto mais importante dessa era. O software continua sendo construído por encomenda. À medida que uma disciplina de engenharia evolui, novos componentes são criados. No mundo do software, tais componentes ainda estão sendo aprimorados e estão apenas começando a ser produzidos em ampla escala. Exemplo de aplicação O escopo do sistema deve ser determinado só após a conclusão da dimensão do tamanho, da complexidade e das exigências de processamento do software. O software que trabalha com imagens em 3D, por exemplo, exige um desempenho de processamento maior do que outro que opera em 2D. Se essas imagens estiverem sendo produzidas em servidores, comprometem o desempenho do servidor e da rede de computadores que o suporta. Dessa forma, só após especificar o software é possível definir a infraestrutura de TI e os componentes dosistema computacional. Os componentes do software devem ser produzidos de modo que possam ser reusados, ou seja, que possam ser adaptados a novas plataformas e ambientes operacionais. O reúso de um componente é uma atividade natural no processo de engenharia. A reusabilidade do software é uma métrica de qualidade usada para avaliar o quanto um programa ou parte dele pode ser usada em outras aplicações. Exemplo de aplicação Um exemplo de uso da métrica reusabilidade é o Crud (create, read, update e delete – criar, ler, atualizar e deletar), que envolve as quatro operações básicas para manipulação de arquivos. O programador pode aplicá-lo em uma biblioteca específica de formulários. Uma vez que esse software for codificado, testado e validado, com suas funções independentes de outro software, é possível fazer uma manutenção isolada. Esse software passa a constituir um componente reusável e que pode ser integrado como uma nova funcionalidade de outro software. Pesquise em seu computador a característica reusabilidade, que é aplicada em diversas funções do pacote Office. Por exemplo: observe que as funções do Word, Excel e Power Point, da Microsoft, são similares porque estão sendo reusáveis. No botão “Arquivo” de alguma dessas aplicações, você poderá verificar as mesmas funções: abrir, editar e salvar, imprimir, formatar fonte etc. 16 Unidade I Software e hardware são elementos distintos, todavia, um sistema computacional não existe se não existir um desses elementos. Com o tempo, o hardware melhora o desempenho, diminui de tamanho e tem o custo reduzido. O software incorpora novas funções, que permitem agilizar processos e resolver problemas complexos a custos cada vez mais baixos. À medida que o software evolui, exige hardware de melhor desempenho; a cada novo hardware, um novo software é criado e produzido. Observação Software e hardware estão em franca evolução e, apesar de possuírem princípios independentes, essa dualidade permite criar sistemas cada vez mais sofisticados a baixo custo. 1.3.1 Tipos de produção de software O software possui um duplo papel na produção, não só pode constituir um produto completo como também pode ser o veículo de melhora de outro produto. • Software como produto completo: podemos citar toda a linha de softwares que normalmente são comercializados, tais como software de sistema e de aplicação. Um exemplo simples seria o produto Word. Para Sommerville (2006), existem dois tipos de produtos de software: — Produtos genéricos: são sistemas do tipo stand-alone, produzidos e comercializados no mercado a qualquer cliente interessado. É o exemplo dos vários processadores de textos, planilhas, gerenciadores de projetos, sistemas de imagens, jogos, sistemas educacionais, sistemas de contabilidade, sistemas de informação de bibliotecas, sistemas clínicos etc. — Produtos sob encomenda (ou personalizados): são sistemas encomendados por um cliente em particular, sendo desenvolvidos com base em requisitos específicos para determinado negócio. Por exemplo: sistemas de gerenciamento da cadeia de suprimentos (supply chain), sistemas de controle de tráfego aéreo, simuladores, business inteligence (BI) e vários outros tipos de sistemas de controle dos negócios e financeiros. Os produtos de software sob encomenda são customizados, ou seja, são configuráveis por função ou implementação de novos algoritmos de acordo com a necessidade do cliente. Por essa razão, são consideradas várias mudanças no ciclo de vida desse tipo de software, pois sua principal evolução se baseia na necessidade do cliente. 17 FUNDAMENTOS DE ENGENHARIA DE SOFTWARE Saiba mais Para saber mais sobre produtos de software sob encomenda, acesse os sites indicados a seguir: IBM: https://www.ibm.com/br-pt Microsoft: https://www.microsoft.com/pt-br TOTVS: https://www.totvs.com SAP: https://www.sap.com/brazil/index.html • Software como veículo de melhora de outros produtos: um software pode melhorar outro software ou um produto industrial. • Software como veículo de melhora de outro software: são subprodutos que se instalam no computador para acrescentar melhorias em outro software. Esse software pode passar a dispor de uma nova funcionalidade ou ter acréscimo de algum recurso. Quando esses subprodutos de software são adaptados a outro software, produzem novas funções, melhoram o desempenho e, em alguns casos, podem ser usados de forma independente de quaisquer outros programas como um produto completo. Existem vários tipos desse software: — Plug-ins e os módulos de extensões, que estendem a funcionalidade de um software específico ou que geram recursos para adaptações de novas funcionalidades. Exemplo: plug-in para adaptar um escâner a um software de imagem. — Software completo, que pode ser adaptado a outro software, é o software que pode ser executado de forma independente e/ou que pode ser adaptado a outro software. Exemplo: tradutor de línguas – software para tradução de textos de línguas estrangeiras. Muito frequentemente, esse tipo de software, ao ser instalado no computador, cria uma nova função, que é inserida nas aplicações do ambiente operacional, agregando valor a este, ou pode ser executado isoladamente sem alguma perda de recurso computacional. — Nessa linha de software temos também os antivírus, os compactadores de arquivos, os gerenciadores de rede, os gerenciadores de arquivos e o browser, que, em sua maioria, se integram ao sistema operacional e melhoram o nível de manutenção, desempenho e segurança. • Software como veículo de melhora de um produto industrial: é a associação do software a um hardware específico de uma máquina, de sensores ou de outros dispositivos, que tem por finalidade melhorar o produto industrial. Tais produtos passam a ser automatizados e controlados por meio de um software. Exemplo: computadores de bordo, dispositivos de segurança predial, 18 Unidade I elevadores, robôs, eletroeletrônicos domésticos e industriais, simuladores industriais e vários outros que ainda estão por vir. Em decorrência da pesquisa de cenários cada vez mais dinâmicos, as tecnologias são atualizadas diariamente, ocasionam constantes mudanças na forma de agir, estudar e de ser dos humanos. As tecnologias se integram cada vez mais aos objetos reais, permitindo uma melhor compreensão e controle do elemento em estudo. Pode-se se citar como exemplo a realidade aumentada, que tem como base um software que, associado a câmeras ou sensores, integra o mundo real com a realidade virtual, permitindo uma análise detalhada de um objeto ou animal, como é o caso da ampliação de órgãos humanos, insetos e animais, materiais, minerais e plantas, sendo possível obter ampliações em alta definição e com visualização em três dimensões. Outro exemplo é a internet das coisas (IoT – Internet of Things), que tem como objetivo principal integrar por meio da internet a maioria dos dispositivos que utilizamos. Essa tecnologia envolve a conexão por meio da internet, interligando o mundo físico com o mundo digital. Na maioria das vezes, essa conexão se faz por sensores, análise de dados e identificação por ondas de rádio (RFID – Radio Frequency Identification). Uma aplicação da IoT é a “casa inteligente”, que permite controlar por smartphone a luminosidade do ambiente, a programação de eletrodomésticos inteligentes, os sistemas de alarme e refrigeração. Saiba mais Consulte as referências a seguir: REALIDADE aumentada é vista como solução por empresários. Computerworld, 7 abr. 2020. Disponível em: https://bit.ly/3qC8spn. Acesso em: 3 mar. 2021. INTERNET das coisas: como ela otimiza os recursos na indústria? Digicomp Engenharia e Tecnologia, 2019. Disponível em: https://bit.ly/2OtA2YS. Acesso em: 3 mar. 2021. 1.4 Fábrica de software Atualmente, uma enorme indústria de software tornou-se fator dominante nas economias do mundo industrializado. Equipes de especialistas em software, cada qual se concentrando numa parte da tecnologianecessária para distribuir uma aplicação complexa, substituíram o programador solitário de antigamente. Ainda assim, as questões levantadas por esse programador solitário continuam as mesmas feitas hoje, quando modernos sistemas computacionais são desenvolvidos (PRESSMAN, 2011, p. 31). 19 FUNDAMENTOS DE ENGENHARIA DE SOFTWARE O ponto de vista de Pressman (2011) reflete bem os problemas que há 70 anos acompanham o desenvolvimento do software. Nesse ponto, convém lembrar que antes os sistemas baseados em computador eram desenvolvidos pela administração orientada ao hardware. O hardware era customizado, não havia um padrão de hardware, logo, todo software a ser desenvolvido atendia um hardware específico, não era possível reusar o software. Hoje a distribuição dos custos está mais no trabalho de engenharia. Apesar de ao longo desse tempo terem surgido diversas técnicas e procedimentos que melhoram e aumentam o desempenho dos desenvolvedores na fabricação do software, os problemas no desenvolvimento do software ainda são os mesmos. Observe a seguir quais são eles: • Aumento contínuo em quantidade e diversidade da demanda: as necessidades de software pelas empresas e mudanças constantes de requisitos comprometem o desenvolvimento e cronogramas de entrega do software. Rezende (2005) destaca que, muito frequentemente, depara-se com a insatisfação do cliente em relação ao software “acabado”. Projetos de desenvolvimento de software são muitas vezes iniciados sem a clara especificação das necessidades do cliente e com uma avaliação imprecisa da especificação de requisitos para que o sistema realmente responda àquelas necessidades. “A comunicação entre o cliente e a equipe de desenvolvimento é, em geral, muito precária” (REZENDE, 2005, p. 9). • Índice baixo de planejamento do software: existem muitos desenvolvedores de software: pequenos, médios e grandes. Um único software muitas vezes é construído por várias mãos ou várias empresas. As dificuldades em integrar as diversas soluções implicam falhas ou omissões no planejamento do software, acarretando um alto índice de manutenção, suporte e retrabalhos, o que gera um aumento de custo na entrega do software construído. • Inexperiência dos desenvolvedores: apesar de todos os dias surgirem novas tecnologias e métodos de engenharia de software, sua produção frequentemente fica mais cara e menos confiável, porque não existe tempo hábil de assimilação e educação das novas técnicas e métodos da engenharia de software. Normalmente, a experiência é adquirida ao longo do tempo e a engenharia de software é uma disciplina nova, de apenas 50 anos, em detrimento da engenharia industrial, que tem cerca de 250. Cada projeto de desenvolvimento de software tende a constituir uma experiência única, mas que pouco contribui para assegurar o sucesso de projetos subsequentes. Essa carência torna extremamente difíceis avaliações comparativas de qualidade do software construído, bem como de custos e prazos de execução das diferentes etapas desse processo. O fabricante de software necessita investir no treinamento dos desenvolvedores para melhorar a experiência e manter o conhecimento alinhado com as técnicas atuais, que mudam constantemente. • Mantenabilidade do sistema: é a característica de um componente, produto, equipamento ou sistema de receber manutenção dentro de um determinado período a um custo preestabelecido. O software evolui de tempos em tempos e seu índice de obsolescência é alto. No sistema computacional, para o software as linguagens de programação e os sistemas operacionais estão 20 Unidade I sendo sempre atualizados; o hardware melhora em capacidade e desempenho constantemente; bancos de dados se tornam mais complexos; e as redes computacionais permitem cada vez mais distribuir e integrar outros sistemas. 1.4.1 Problemas enfrentados pelos fabricantes de software Segundo Sommervillle (2003), a engenharia de software enfrenta três principais desafios: o desafio do legado, o da heterogeneidade e o do fornecimento. • O desafio do legado. Atualmente, uma grande parte dos sistemas de software em utilização foi desenvolvida. Antes, as linguagens não eram orientadas a objetos, mas esses sistemas ainda operam importantes funções corporativas e controlam grandes quantidades de eventos em uma grande massa de dados. O desafio do legado é fazer a manutenção e atualização desses sistemas a custos baixos, com qualidade e prosseguir com a prestação de serviços corporativos. • O desafio da heterogeneidade. Exige-se cada vez mais que os sistemas operem como sistemas distribuídos atuando por meio de redes que possuam diferentes tipos de arquiteturas de computadores e diferentes tipos de sistemas operacionais. O desafio da heterogeneidade é desenvolver técnicas para construir sistemas confiáveis e flexíveis o bastante para lidar com essa heterogeneidade. • O desafio do fornecimento. Muitas técnicas de engenharia de software tradicionais são muito demoradas. Nos dias atuais, existe uma demanda enorme de sistemas para que eles sejam desenvolvidos no menor tempo possível e com facilidade de adaptação a mudanças. O desafio do fornecimento é fornecer sistemas grandes e complexos, com a qualidade desejada e em curto espaço de tempo. 1.5 Características do software O software é o arranjo lógico de programas de computador organizados para atingir um objetivo específico do negócio. O programa de computador é uma forma lógica de organizar intelectualmente instruções baseadas em linguagem de programação. Os programas de computador são responsáveis pelo processamento que transformam dados em informações ou as retrabalham para gerar novas informações O software é o resultado obtido pela interpretação do negócio por meio do processamento de dados, constituindo o principal elemento do sistema computacional, não funcionando sozinho, demandando apoio da combinação dos elementos baseados em computador, que são o hardware, o banco de dados e as redes de computadores, formando, nesse sentido, a base para a TI. A meta da engenharia de software é traduzir o desejo do cliente de um conjunto de capacidades definidas em um produto em funcionamento. 21 FUNDAMENTOS DE ENGENHARIA DE SOFTWARE A hierarquia de análise do produto software que leva a sua construção é mostrada na Figura 4. Os requisitos globais do produto são extraídos das necessidades do cliente e determinados pelo desenvolvedor. No caso, foram destacados os seguintes componentes: software, hardware, dados e redes. O objetivo da análise é verificar outros requisitos em cada componente que devem dar suporte ao software. Na Figura 4, para cada requisito de processamento do software a ser produzido, impõe-se a necessidade de dados, função e comportamento do produto. Com base na necessidade do software, podem ser considerados também outros requisitos de processamento, tais como: controle, configuração do software, desempenho global, restrições de projeto e outras necessidades especiais. Produto: software Software Dados Função Comportamento Hardware Dados Redes Característica Engenharia de requisitos (visão do mundo) Requisito de processamento Engenharia de componentes(visão de domínio) Modelagem da análise e projeto (visão do elemento) Programa Construção e integração (visão detalhada) Engenharia de software Figura 4 – Hierarquia e análise do produto software pela TI 1.5.1 Dualidade do software com o hardware A dualidade do software com o hardware permite a construção de sistemas computacionais, contudo, o que realmente justifica a função do computador é o uso do software. Veja bem: não é possível um editor de textos funcionar se este não for projetado e desenvolvido pela engenharia de software. O sistema de software compreende os módulos funcionais computadorizados, que interagem entre si para proporcionar a automatização de diversas tarefas. Conforme Bezerra (2003), complexidade é a característica intrínseca do desenvolvimento de sistemasde software. 22 Unidade I A Figura 5 mostra a analogia que Bezerra (2003) faz entre o aumento de módulos funcionais na construção de moradias com a construção do software. Casa de cachorro Casa Arranha-céus Aumento da complexidade Figura 5 O desenvolvimento do software é complexo porque lida com vários tipos de conhecimentos, várias técnicas, inteligências organizacionais, especialistas do negócio, da ciência, da saúde e dos próprios desenvolvedores. Para construí-lo, é necessário combinar aspectos específicos do conhecimento de todos os interessados no software. São necessários detalhes em modelos gráficos (diagramas), para trazer maior visibilidade e compreensão da parte do cliente, dos operadores e dos desenvolvedores. A engenharia combina todos esses elementos e conhecimentos até o nível de código. Cada software é especificado de acordo com a necessidade do cliente, é único. O software é desenvolvido ou passa por um processo de engenharia, não é manufaturado. Na manufatura, as mudanças necessárias a serem feitas nos produtos, seja por necessidade, correções ou melhorias, são feitas por substituição ou manutenção de peças. Os problemas de qualidade ou manutenção do hardware podem ser corrigidos pela manufatura, o que não ocorre com o software. “O software não ‘se desgasta’, mas ‘se deteriora’! O software não é suscetível aos males ambientais, que causam desgaste do hardware, mas sim devido às mudanças que ocorrem no ciclo de vida do software” (PRESSMAN, 2011, p. 33). Durante o ciclo de vida, o software passará por modificações (manutenção e/ou mudanças). Essas modificações causam a deterioração do software. À medida que as modificações são feitas, é provável que novos defeitos sejam introduzidos, causando dente na curva de taxa de falhas, como é mostrado no gráfico da direita da Figura 6. 23 FUNDAMENTOS DE ENGENHARIA DE SOFTWARE Curva de falhas do hardware Curva de falhas do software Aumento da taxa de falhas devido a efeitos colaterais Mortalidade infantil Mudanças Desgaste Tempo Tempo Índice de falhas Índice de falhas Curva real Estabilidade Curva idealizada Figura 6 – Gráficos comparativos da curva de falhas do hardware em relação a curvas de falhas do software Na Figura 6, o gráfico da esquerda se refere à curva de falhas do hardware, também chamado na engenharia de “curva da bacia”. Esse gráfico mostra que quando um produto é lançado no mercado ou adaptado a outros produtos (faixa da mortalidade infantil), o índice de falhas é alto. No decorrer do tempo – por processos revisionais e de manutenção –, essas falhas são reduzidas, até chegarem ao nível de estabilidade e com o menor índice de falhas. A vida útil é a soma entre os tempos da região da mortalidade infantil e da região de estabilidade. Como o hardware fica sujeito ao desgaste, isso provoca ao longo do tempo o aumento do índice de falhas e, consequentemente, o aumento do custo de manutenção. As manutenções sucessivas crescem e, assim, o custo para manter o produto acaba por inviabilizá-lo e é feito o seu descarte. Na Figura 6, o gráfico da direita se refere à curva de falhas do software, e nele, diferentemente do hardware, após a faixa de estabilidade, começam a ocorrer mudanças no software, sejam elas provocadas a pedido do cliente, sejam elas motivadas por algum outro fator, como a mudança no ambiente operacional (hardware, capacidade limitada do sistema, atualização do sistema operacional ou a inclusão/exclusão de outros drivers ou software). A cada mudança implementada no software, surge um “pico” de falhas, o que leva novamente a processos revisionais e de manutenção, até que essas falhas sejam reduzidas ao nível da curva real. Nessas mudanças existe a possibilidade de serem acrescentados novos códigos e serem criadas redundâncias de programas e de dados. Devido às mudanças causadas no software, no acompanhamento de sua evolução são registradas versões e releases. As versões são registros do software feitos sobre as mudanças que ocorrem na adaptação do software em relação às necessidades do cliente, adaptação a novos ambientes operacionais, correções de falhas ou quando o software está em desenvolvimento. O release (lançamento) é o registro da versão que é liberada para o usuário. 24 Unidade I Após várias mudanças causadas no software, ele deverá ser reestruturado. Para tanto, são feitas as seguintes ações: • fazer limpeza dos dados e dos códigos redundantes; • atualizar hardware; • atualizar com novas versões o sistema operacional e as linguagens de programação; • gerar novos algoritmos; • adaptar de forma correta as antigas e novas funcionalidades com base em uma nova arquitetura. Exemplo de aplicação Observe o cenário a seguir. Na deterioração do software, os usuários reclamam muito, por exemplo: “Isto está lento”; “Sumiu meu registro”; “Havia um relatório aqui”; “Este campo está vazio, deveria ter a informação...”. Nessa situação, o volume de chamadas aos desenvolvedores e equipes de manutenção aumenta. Para corrigir de vez esse problema e retomar um ciclo novo de vida do software, é necessário reestruturá-lo. Nem todo sistema é construído da mesma forma. Desenvolvedores citam pontos que tornam um código melhor do que outro. Há muitas e muitas linhas de código sustentando sistemas ao redor do mundo. Para se ter uma ideia, apenas a Google® soma mais 2 dois bilhões de linhas em sua estrutura. Mas nem todas as fontes são criadas de maneira semelhante (JOHSON, 2015). Em suas pesquisas, Johson (2015) lista seis pontos para um software “bem escrito”: • Ser facilmente legível: sistemas escritos de uma forma que podem ser lidos rapidamente por outros programadores são considerados trabalhos de alto nível. • Ter comentários úteis: o comentário explica o que passou na cabeça do programador durante a codificação. Não é preciso dizer o que um código de loop faz. • Ser simples: há uma correlação estatística comprovada entre a complexidade de códigos e bugs. Em geral, o melhor código é algo simples. 25 FUNDAMENTOS DE ENGENHARIA DE SOFTWARE • Ser flexível: a funcionalidade muitas vezes necessita ser alterada, expandida ou reutilizada em outros lugares no futuro. Bons softwares são escritos para atender tanto as exigências de hoje quanto as perspectivas para futuro. • Ser sustentável: a manutenção é um atributo-chave de um bom código. Johson (2015) orienta para evitar fazer coisas como “valores que podem mudar (URLs, teclas de acesso, senhas e outros)”. • Funcionar: essa é uma característica óbvia, contudo, deve ser reforçada. Conforme Johson (2015), não importa o quão grande ele pareça, “se o software não fizer o trabalho, não é bom”. 2 PRINCÍPIOS DO DESENVOLVIMENTO DE SISTEMAS 2.1 Aplicações e desenvolvimento de sistemas computacionais O objetivo e conteúdo de informação são fatores importantes na “determinância” da natureza de um aplicativo. A palavra conteúdo se refere ao significado e à forma de informações que entram e saem do sistema. Por exemplo, muitas aplicações comerciais fazem uso de dados de entrada altamente estruturada de um banco de dados e produzem “relatórios” formatados (REZENDE, 2005, p. 12). 2.1.1 O que diferencia um software de outro? Para responder essa questão, é necessário avaliar cinco características essenciais referentes à capacidade e usabilidade do software, as quais são descritas a seguir. • Captação de dados: a interface de entrada de dados pode se apresentar de diversas formas: entradas editadas, digitalizadas, entradas por terminais, dispositivos biométricos, sensores a laser, óticos, sonoros, luminosos, magnéticos e vários outros. Quanto à interface de entrada operacional humana, normalmente, os dados captados possuem um formato simples, diferentemente da captação de dados por dispositivos, que tem como objetivo captar um volume de dados maior e com resolução de boa varredura do ambiente. O formato de entrada dos dados a serem processados varia em confiabilidade, acuráciae quantidade. • Processamento dos dados: os dados a serem processados variam em seu formato de entrada. O software deverá isolar em campos os dados captados. Cada campo de dados é captado em um formato binário e identificado por meio de caracteres de controle, tamanho do pacote de dados, ciclos de tempos especificados na entrada de dados ou a combinação destes. A partir desse ponto, os algoritmos contidos no software resultam em novos dados ou informações, os quais permitem estruturar os resultados dessas operações de processamento. A precisão e eficiência de execução desses algoritmos determinam o nível de qualidade do software. • Apresentação da informação: dependendo da qualidade exigida do cliente e do usuário, a apresentação da informação pode ser feita por meio de textos, relatórios, diagramas, modelos 26 Unidade I gráficos, imagens em alta definição e cores ou ativação de dispositivos. A resposta do software é o que interessa ao cliente ou usuário. As principais características que se destacam aqui são: a adequação das funções do software às necessidades do cliente ou usuário; a eficácia para atingir objetivos específicos; a capacidade de adaptar mudanças na configuração do software ou adaptações de novos recursos; a usabilidade, que permite melhor compreensão; o aprendizado e a satisfação de uso; e a utilização, que mede o esforço necessário para aprender, operar, preparar entradas e interpretar as saídas. • Segurança: no produto software são estabelecidas medidas de segurança e a avaliação de níveis aceitáveis de riscos e danos para as pessoas, para os negócios, para a propriedade, para o ambiente, para proteger informações e dados de forma que pessoas ou sistemas não autorizados não possam lê-los nem modificá-los e que não seja negado o acesso às pessoas ou sistemas autorizados. • Desempenho: o sistema computacional deve garantir a integridade de todos os seus recursos com boa eficiência, para dar apoio às características já citadas. O software deve oferecer respostas rápidas às funções e apresentações da informação, busca de dados em redes de computadores com taxas de transferência equivalentes ou até mesmo superiores em relação ao volume de dados e, ainda, ser expansível para aceitar novas extensões ao sistema. O software é criado e desenvolvido por “várias mãos” e diversas opiniões. Perspectivas diferentes são projetadas para atender os stakeholders, os interessados no projeto. Veja bem: os dados da empresa são únicos, contudo, as apresentações desses dados para o cliente, usuário e desenvolvedor podem variar de diversas formas: modo texto, modo gráfico, figuras e outros meios de mídia. Estudo de caso: método de análise de um sistema ERP O planejamento dos recursos empresariais (ERP – enterprise resource planning) é o modelo mais comum de sistema de informação gerencial, formado basicamente por servidores e estações. Na análise do negócio, o princípio básico é dividir esse sistema em módulos, o que é chamado de modularidade. O ERP é composto de vários módulos, ou seja, esse tipo de sistema incorpora a modularidade. Na análise do negócio, o módulo começa a ser projetado a partir dos componentes que o integram e que irão dar a infraestrutura de apoio para o ERP. Um módulo surge a partir do momento em que cada componente que o constitui adquire sua independência funcional. Cada componente adquire sua independência funcional quando o componente puder ser nomeado separadamente e de maneira endereçável. Assim, integrados, satisfazem os requisitos de módulo do sistema. Cada processo possui suas respectivas atividades. Da análise desses processos derivam as funcionalidades do sistema ERP. Uma funcionalidade pode ou não ser um componente do sistema, dependendo do tamanho, da complexidade ou da qualidade exigida para o sistema. A funcionalidade é um conjunto de funções (ou apenas uma função) que possuem características e técnicas de 27 FUNDAMENTOS DE ENGENHARIA DE SOFTWARE desenvolvimento similares, identificadas pelo seu início, fim, processamento atribuído e procedimentos de desenvolvimento. Do ponto de vista do analista de negócios e do analista de processos, a Figura 7 representa um modelo de negócio que expressa as intenções de uso do ERP, com seus módulos empresariais (administração, contabilidade e marketing) e demais módulos que complementam a ideia do sistema (banco de dados e relatórios). Os dados de entrada são concentrados em um único banco de dados. Esse sistema integrado de gestão (SIG) usa os dados para gerar na saída diversos modelos de informações, tais como balanços, gráficos, listas, estatísticas, notas, tabelas e vários outros tipos de relatórios. Administração Contabilidade Marketing Relatórios Aprovação de pagamentos Aprovação de pedidos Controle de negócios Planejamento empresarial Análise de custos Caixa Controle de pedidos Contas a pagar Contas a receber Faturamento Análise dos negócios Especificação do negócio Exploração das informações Perfil do cliente Propaganda e publicidade Balanços Gráficos Lista de nomes Estatísticas Notas Tabela de valores Banco de dados Figura 7 – Esse conjunto de módulos forma um típico SIG para objetivos específicos O ponto de vista do analista de sistemas que irá praticar a engenharia de software se baseia em interpretar o modelo de negócios e convertê-lo em um modelo que traga visibilidade para os desenvolvedores do sistema/software. Para isso, inicia-se o processo de componentização dos módulos definidos pelos analistas de negócios e de processos, necessário para construir um SIG com acesso via intranet. Para customizar o sistema do cliente, cada módulo deverá ser dividido em componentes. Cada componente apresenta “peças”, que poderão ser outros componentes. Assim, juntos, deverão atender os requisitos do módulo que será construído e, consequentemente, integrá-los em um sistema de informação. A arquitetura do sistema ERP da Figura 8 mostra como ficaria a componentização do sistema com acesso pela intranet. Na Figura 8, os componentes são expandidos, mostrando as principais características tecnológicas e de configuração que deverão ser elaboradas. Baseado na análise do modelo de negócios, o engenheiro de software constrói um diagrama de componentes/implantação para ser validado pela gerência do sistema. 28 Unidade I Servidor SOR Servidor APP <<TCP>> Cliente - Browser SOR Conta do usuário Administração Contabilidade Marketing Documentos gerados Telas <<TCP>> <<HTTP, FTP>> <<TCP>> <<IP>> Servidor SGBD Figura 8 – Modelo de componentização de um sistema ERP, determinando uma arquitetura servidor/cliente, com acesso via intranet, apresentando as camadas da aplicação, do banco de dados e da rede de computadores, que irão formar a infraestrutura da TI, que dará apoio a um SIG “O objetivo e conteúdo de informação são fatores importantes na determinação de uma aplicação do software. Desenvolver categorias genéricas para as aplicações de software é uma tarefa um tanto difícil” (REZENDE, 2005, p. 12-13). Para determinar os fatores de uma aplicação, é necessário combinar várias áreas do conhecimento. As áreas de software a seguir indicam a amplitude do desenvolvimento de aplicações: • Software aplicativo para microcomputador. É considerado software aplicativo para microcomputador o programa que permite que o usuário realize uma tarefa específica no computador, seja de uso pessoal, empresarial ou para dar suporte e interagir com o sistema operacional. O software de computador pessoal continua a representar os mais inovadores projetos de interfaces com seres humanos de toda a indústria de software. O software aplicativo permite trabalhar com processadores de textos, planilhas eletrônicas, computação gráfica, diversões, gerenciamento de banco de dados, gerenciamento de arquivos, de redes de computadores e vários outros encontrados no comércio varejista ou na internet. Aliás, o software aplicativo é o que justifica aexistência dos computadores pessoais. • Software básico. Trata-se de uma coleção de programas escritos para dar apoio a outros programas. Normalmente, possui uma forte interação com o hardware e ambos são utilizados como processadores de telecomunicação, componentes do sistema operacional, compiladores, computadores com intenso uso de múltiplos usuários. Destaca-se que tais operações são concorrentes, exigindo escalonamento (schedule), compartilhamento de recursos, estrutura de dados complexas e múltiplas interfaces. Cada programa responsável por controlar um hardware específico ou uma parte deste é chamado de driver. Um conjunto de drivers organizados para o controle de uma determinada interface, um computador ou uma máquina, chama-se firmware. Um típico exemplo de software básico (ou firmware) é o sistema básico de entrada/saída (Bios – Basic I/O System). O Bios é um programa residente nos computadores, em interfaces inteligentes de hardware ou dispositivos inteligentes. Dependendo da utilização, o programa BIOS pode ser formado 29 FUNDAMENTOS DE ENGENHARIA DE SOFTWARE por um único driver ou por um conjunto de drivers responsáveis pela inicialização do computador. O Bios disponibiliza também um conjunto de funções primitivas do computador, tais como ler um caractere do teclado, ler/escrever em setores do HD e inicialização das principais interfaces que fazem parte da main board do computador. Em resumo: computadores pessoais, dispositivos e máquinas computadorizadas possuem um Bios. Na categoria de firmware, temos também o software embarcado, tipo de software que normalmente está embutido (embedded software – software embutido) em máquinas ou dispositivos computadorizados. Esse firmware reside em ROM e é escrito em código de máquina (assembler), que é ativado antes mesmo de qualquer sistema operacional. O software embutido é composto de várias pequenas funções que fazem parte de sistemas eletroeletrônicos inteligentes usados para controlar produtos e sistemas do mercado industrial e de consumo, tais como: computadores de bordo, controles automativos, eletrodomésticos, máquinas automatizadas, marca-passos, relógios digitais, elevadores e microcontroladores em geral. Lembrete Quando uma interface ou dispositivo é caracterizado como inteligente, significa que essa interface ou dispositivo possui uma unidade central de processamento (CPU – central processing unit). Se possuir CPU, será necessário um software. • Software de tempo real. Em sistemas computacionais, o tempo real (real time) se refere ao tempo de resposta do sistema, que independe do tempo de várias outras tarefas realizadas pelo sistema. Para entender melhor, imagine que você vá até o interruptor de luz e o desligue. Se levar mais que 0,5 segundo para a luz apagar, isso será perceptível para o ser humano. Em tempo real, isso não pode acontecer. O software de tempo real analisa e monitora eventos do mundo real, exige um controle de saída que responde ao ambiente externo e um componente de monitoração que coordena todos os demais componentes de forma a obter resposta em tempo real, que normalmente varia de 1 a 100 milissegundos para executar uma determinada operação. O termo “tempo real” difere do “interativo” ou time-sharing, que podem exceder o tempo de resposta sem resultados desastrosos. Um exemplo de software de tempo real é a IoT, que se refere à interconexão digital de objetos do cotidiano. Para esse tipo de software, o essencial é o sincronismo entre a execução das tarefas, que considera não só o número de linhas de códigos do programa como também o tempo de resposta do hardware. • Software científico e de engenharia: conforme Rezende (2005, p. 14), é caracterizado por algoritmos de processamento de números. As aplicações variam da astronomia à vulcanologia, da análise de fadiga de mecânica à dinâmica orbital de naves espaciais, e da biologia molecular à manufatura automatizada. 30 Unidade I A realidade aumentada faz parte da categoria de software científico e de engenharia. Outra aplicação comum dessa categoria de software são os sistemas CAD/CAE/CAM. A sigla CA é a abreviação de computer-aided (auxiliado por computador); D vem do termo design (arquitetura, projeto, desenho, planta); E, de engineering (engenharia); e M de manufacturing (manufatura). Cada um desses sistemas tem um objetivo específico. O CAD permite elaborar arquiteturas de produtos que podem ser exibidos em imagens 2D e 3D. O CAE permite realizar tarefas do ponto de vista da engenharia, tais como: resistência e fadiga do material, simulações do funcionamento de produtos, desempenho e melhoria de produtos industriais. O CAM controla máquinas e ferramentas relacionadas no processo de fabricação para produzir o produto, como é o caso das impressoras 3D. • Software empresarial. É o de maior área de aplicação. Envolve distintos sistemas de informação, que processam folhas de pagamentos, contas a pagar e receber, controle de estoques, cadastros, processamento de transições de compra/venda e várias outras aplicações. Na maioria das vezes, lida com um volume alto de dados para tomada de decisão. Essa categoria de software tem como objetivo reestruturar e filtrar dados, facilitar as operações e trazer maior visibilidade aos resultados das operações. Uma dessas tecnologias em destaque é a Big Data, que, além de tratar grandes volumes de dados, depara-se com dados não estruturados, ou seja, que não estão especificados dentro de determinados registros ou campos de busca no banco de dados. Uma das diversas aplicações da Big Data está na área de recursos humanos, quando é necessário cruzar informações sobre funções específicas de serviços com os dados de diversos currículos. Por sua vez, os SIGs não trabalham isoladamente, são constituídos por vários componentes interligados a uma base de dados interna e/ou externa à empresa. Esses sistemas fazem parte do planejamento estratégico da empresa. Os tipos mais comuns de subsistemas que compõem um SIG são: Sistema de Processamento de Transações (SPT); Sistema de Apoio à Decisão (SAD); Sistema de Apoio ao Executivo (SAE). Lembrete Cada programa responsável por controlar um hardware específico ou uma parte deste é chamado de driver. Um conjunto de drivers organizados para o controle de uma determinada interface, um computador ou uma máquina chama-se firmware. O BI (Business Intelligence) é um exemplo avançado de sistema integrado de gestão, tendo em vista que é formado de várias ferramentas que combinam diversos tipos de dados para análise, comparação e simulação de resultados que levam diretamente a tomada de decisão. No mundo dos negócios, o e-business (negócios eletrônicos) compõe também a categoria de software empresarial, que pode ser classificado em: ERP; gerenciamento das relações com o cliente (CRM – customer relationship manager); e gerenciamento da cadeia de suprimentos (SCM – supply chain management). 31 FUNDAMENTOS DE ENGENHARIA DE SOFTWARE • Software para web. As páginas da web recuperadas por um browser constituem software que incorpora instruções executáveis (como CGI, HTML, Pearl ou Java) e dados (hipertexto e uma variedade de formatos visuais e de áudio). Com esses recursos tecnológicos, surgiram os sistemas e aplicações baseadas na web, as webapps, que são pequenas aplicações embarcadas na internet. Aplicações das mais diversas, que comumente precisavam de processamento local, passaram a ser processadas em servidores que operam na internet. No mundo dos negócios, a amplitude dessa área está classificada pelo termo e-commerce (comércio eletrônico), estruturado pelas tecnologias B2B (business to business), B2C (business to consumer) e C2C (consumer to consumer). Em software para web existem também os serviços oferecidos pela tecnologia cloud computing (computação em nuvem), que reúne diversos recursos de processamento, aplicações e armazenamento em servidores que podem ser acessados e qualquer lugar do mundopela internet. • Software de inteligência artificial (AI – Artificial Inteligency). Faz uso de algoritmos não numéricos para resolver problemas complexos que não sejam favoráveis à computação ou à análise direta (PRESSMAN, 2011). Atualmente, a área de AI mais ativa é a dos sistemas especialistas, também chamados sistemas baseados em conhecimento (REZENDE, 2005). As aplicações mais comuns estão no reconhecimento de padrões de imagem e voz, entretenimento, carros autônomos, IoT, demonstração de teoremas, determinadas funções do Big Data e BI. Os sistemas de redes neurais são sistemas computacionais. Hoje, a chamada rede neural artificial simula a estrutura dos processos cerebrais e pode levar a uma nova classe de software, que consegue reconhecer padrões complexos e aprender com a experiência passada. A rede neural se baseia na interconexão de nós de sistemas em redes. Essa interconexão funciona como os neurônios do cérebro humano. 2.2 Ambiente computacional Como dito anteriormente, a engenharia de software é uma disciplina de engenharia que envolve todos os aspectos de produção do software. O desenvolvimento do software não se baseia apenas na construção de programas de computador, exige um controle rígido de procedimentos, padrões e normas que devem ser documentados para o acompanhamento e o controle dos serviços. Como mostra a Figura 9, cada projeto de software possui suas características próprias para um elenco de pessoas envolvidas, nomeadas como analistas do negócio, que representam o cliente e o usuário interessados no software. Feedback Analistas de negócio Feedbacks sucessivos Requisitos Especificação e modelo do negócio Analista do sistema Figura 9 – Modelo de relacionamento dos analistas de negócio com o analista de sistemas 32 Unidade I O engenheiro de software trabalhará com diversos tipos de pessoas que participarão do desenvolvimento do software/sistema. Os perfis de pessoas variam em cada tipo de projeto e por todo o projeto. Variam em áreas de conhecimentos, interesses em aspectos e características do sistema, ocupam diferentes graus na hierarquia da organização, são conhecedores do negócio, do processo e usam termos e linguagens próprias da profissão. Do ponto de vista do cliente/usuário, Stair (2006) ilustra na Figura 10 as principais áreas de negócio necessárias para construir um sistema de informação. O engenheiro de software não só deve dominar o conhecimento da TI, como é importante que ele conheça como o negócio empresarial funciona e o que os participantes do sistema esperam. A principal estratégia do engenheiro de software é saber sobre o ambiente de negócio e como extrair informações dos participantes. O objetivo principal do projeto é alinhar o negócio com o software/sistema a ser desenvolvido pela TI com base na engenharia de software. Por meio da engenharia do processo de negócio (EPN ou BPE – business process engineering), para iniciar o projeto, o analista de sistema assume uma visão do ambiente de negócio e das necessidades da TI, agrupa as ideias e define os requisitos do negócio e arquiteturas que permitam usar a informação de maneira efetiva. Desafios gerenciais Processos de desenvolvimento Conceitos básicos Aplicações empresariais Tecnologia da informação Sistemas de informação Figura 10 – Principais áreas de conhecimento em sistemas de informação necessárias aos usuários finais de uma empresa O ambiente computacional abrange uma série de componentes distribuídos por toda a empresa com um conjunto heterogêneo de computadores escaláveis e configuráveis para um grande número de tarefas. Os nomes mais conhecidos são: servidores, estações, terminais, processamento distribuído, periféricos, dispositivos de rede e instalações adequadas, elementos que prometem aos negócios maior funcionalidade e flexibilidade. 2.3 Problemas de relacionamento entre gerência, cliente e desenvolvedor O desenvolvimento do software deve atender as necessidades da empresa para implantar as funções organizacionais do negócio. Contudo, devido aos interesses gerenciais, dos clientes e dos desenvolvedores, combinados ainda com os processos para construir a infraestrutura da TI, surgem vários problemas de relacionamento, o que ocorre por causa de princípios e interesses dos stakeholders, que incluem fatores internos, externos e de uso do software, bem como os respectivos recursos necessários. Esses problemas de relacionamento propagam a desinformação e geram confusão. 33 FUNDAMENTOS DE ENGENHARIA DE SOFTWARE Todos os envolvidos no projeto possuem uma visão do que é para ser feito. O conhecimento e o ponto de vista de cada profissional surgem no início do desenvolvimento do software. Conforme o projeto e a construção do software vão evoluindo, os interesses dos stakeholders vão sendo alinhados e implementados. A seguir são apresentadas algumas questões relativas a problemas de relacionamento entre gerência, cliente e desenvolvedor e a realidade dos fatos: • Gerência. Agora que já temos o projeto e decidimos o que fazer, por que ainda é necessário dispor de mais tempo para começar a construção do sistema? — Fato. Porque é necessário conhecer e aprender sobre os componentes da TI disponíveis. • Gerência. Na construção do código, estamos atrasados com o cronograma? Podemos contratar mais programadores? — Fato. Atualmente os cronogramas para o desenvolvimento de software ainda são imprecisos, não é um processo manufaturado, é um trabalho de engenharia. Outro programador deverá conhecer o projeto antes, estudar o ambiente de desenvolvimento para poder trabalhar. Quando está atrasado, não há tempo para isso. • Gerência. Temos software de última geração e compramos os mais novos computadores. Por que ainda estamos atrasados? — Fato. É preciso muito mais do que o último modelo de computador para se trabalhar com um software de alta qualidade. As operações com software/sistemas são mais importantes do que o hardware para se conseguir boa qualidade e produtividade, e tais operações dependem do treinamento do pessoal. • Cliente. É necessário colocar um botão para extrair o relatório de fornecedores o mais rápido possível. — Fato. Uma definição inicial ruim é a principal causa de fracasso dos esforços de desenvolvimentos de software. Dominar aspectos como informação, função, desempenho, interfaces, restrições de projeto e critérios de validação é fundamental, mesmo para implementar um simples botão, porque esse botão estará vinculado a uma função do software, que pode ainda não existir ou não foi especificada nos requisitos funcionais. • Cliente. Os requisitos do software mudam continuamente, contudo, as mudanças podem ser facilmente acomodadas, porque o software/sistema é flexível. — Fato. É verdade que os requisitos de software/sistema se modificam, mas o impacto da mudança pode comprometer outras funções do software que só serão observadas de acordo com o tempo em que elas são introduzidas. 34 Unidade I • Desenvolvedor. Assim que escrevermos o programa e o colocarmos em uso, nosso trabalho estará completo. — Fato. Os dados de indústrias indicam que entre 50% e 70% de todo o esforço gasto num programa será despendido depois que ele for entregue pela primeira vez ao cliente. • Desenvolvedor. Enquanto o software não estiver funcionando, não tenho condições de avaliar sua qualidade. — Fato. Um dos mecanismos mais efetivos de avaliação do software/sistema é a revisão formal, que pode ser aplicada desde o início do projeto, que é considerada um filtro de qualidade. • Desenvolvedor. Um projeto bem-sucedido é o programa funcionando. — Realidade. Um programa funcionando é somente uma parte de uma configuração de software. A documentação e o projeto formam os alicerces para um desenvolvimento bem-sucedido e, o que é mais importante, fornecem um guia rápido para a tarefa de suporte e manutenção do software. 2.4 Projeto e construção do software O projeto e a construção do software/sistema
Compartilhar