Baixe o app para aproveitar ainda mais
Prévia do material em texto
Engenharia de Software I INTRODUÇÃO AO SOFTWARE INTRODUÇÃO AO SOFTWARE APRESENTAÇÃO Caro(a) aluno(a), seja muito bem-vindo(a)!Neste módulo, vamos mostrar uma visão geral dos conceitos relacionados aos softwares, os principais problemas do cenário do software e uma introdução sobre como a Engenharia de Software vem tentando melhorar alguns aspectos neste cenário. Abordaremos também alguns dos mitos existentes sobre os softwares. Conte comigo para orientá-lo(a) ao longo do curso. Desde já, parabenizo você por decidir aprofundar seus conhecimentos sobre os softwares e seus processos de criação. OBJETIVOS DE APRENDIZAGEM Ao final deste módulo, você deverá ser capaz de: • conhecer os conceitos básicos sobre software; • entender sobre o processo de evolução do software; • compreender os motivos que levaram ao cenário conhecido como “Crise do Software”; • refletir sobre o cenário atual dos softwares e sobre os problemas envolvidos no processo de software; • entender o papel da Engenharia de Software; • discutir sobre diversos mitos relacionados ao software. BELO HORIZONTE - 2016 FI CH A T ÉC N IC A FUMEC VIRTUAL - SETOR DE EDUCAÇÃO A DISTÂNCIA Coordenação Pedagógica Assessoria ao Professor, Assessoria do Aluno e Tutoria Coordenação Gabrielle Nunes Paixão Transposição Pedagógica Riane Gervásio Produção de Design Multimídia Coordenação Rodrigo Tito M. Valadares Design Multimídia Nathan Ackerman Chagas de Souza Infra-Estrututura e Suporte Coordenação Anderson Peixoto da Silva AUTORIA Prof. Ugo Caputo INTRODUÇÃO AO SOFTWARE Introdução ao Software O software é um sistema lógico composto de instruções que, quando executadas, forne- cem a função e o desempenho desejados. Porém, apenas esta definição não traduz toda a variedade e complexidade de elementos envolvidos por trás de um software. Atualmente, a maioria dos profissionais bem como a maior parte do público consideram que entendem o que é software. Será que entendem? O software é um elemento de sistema lógico, e não físico. Apesar disto, o software é implantado em um ambiente físico que, em muitos casos, pode ser altamente complexo e interferir, inclusive, nas características do próprio software. Para você começar a entender o que é um software, deve conhecer suas principais características: • O software é desenvolvido e projetado por engenharia, e não manufaturado no senti- do clássico. Seus custos estão associados à engenharia. • O software não se desgasta, não é sensível aos efeitos do tempo, que causam desgaste do hardware. • Apesar de não se desgastar, o software se deteriora. • Podem ser produtos genéricos ou podem ser desenvolvidos sob encomenda, para uma finalidade específica. EVOLUÇÃO DO SOFTWARE Inicialmente, nas três primeiras décadas da era do computador, o desafio maior estava concen- trado no desenvolvimento do hardware. Elementos de hardware menores, mais rápidos e com o custo mais baixo eram o principal ponto a ser evoluído. A partir da década de sessenta, o mundo presenciou o surgimento de novos computadores, mais modernos e com maior poder computacional. A demanda por novos softwares cresceu a uma velocidade que a capacidade de desenvolvimento de software não conseguia acompanhar. Uma série de problemas rela- cionados ao “amadorismo” utilizado na construção dos softwares ficou evidente, culminan- do na Crise do Software, momento caracterizado pelas dificuldades do desenvolvimento de software frente ao rápido crescimento da demanda existente, da complexidade dos problemas a serem resolvidos e da inexistência de técnicas estabelecidas para o desenvolvimento de sistemas que funcionassem adequadamente ou pudessem ser validados. Em decorrência deste cenário, uma série de problemas relacionados a projetos de software começaram a ocorrer, gerando prejuízos em diversos setores. A natureza destes problemas variava desde estouro de orçamento e prazo à qualidade do produto e à dificuldade em sua manutenção. Dados da pesquisa realizada pelo Standish Group, denominada Chaos Report, do ano de 2014, indicam que apenas 16% dos projetos foram entregues com sucesso (respeitando os prazos, os custos e o escopo). Indicam ainda que aproximadamente 31% dos projetos foram cancelados antes de estarem completos e que 53% foram entregues com prazos maiores, custos maiores e/ou com menos funcionalidades do que asespecificadas no início do projeto. CHAOS REPORT, 2014 Fonte: Standish Group - Chaos Report, 2014. 7 PROBLEMAS ASSOCIADOS AO SOFTWARE O termo Crise do Software é utilizado pelos autores para se referir a uma série de problemas associados ao software e ao período em que estes problemas “explo- diram”. Este conjunto de problemas não se limita apenas à qualidade do software tampouco aos programadores que o desenvolvem. Dentre os problemas relacionados ao software, podemos destacar: • estimativas de prazos e de custos, que são frequentemente imprecisos; • produtividade dos profissionais da área, que não têm acompanhado a deman- da por novos serviços; • a qualidade do software desenvolvido, que é insuficiente; • processo de software inadequado (falaremos sobre processos de software mais adiante na apostila). Algumas causas destes problemas podem também ser destacadas: • Não dedicamos tempo suficiente na coleta de dados sobre o software a ser desen- volvido e na realização das estimativas - estimativas realizadas “a olho”. • Fraca comunicação entre o cliente e o desenvolvedor. • Falta ou inadequação de testes sistemáticos e completos. • Gerentes de projetos sem background em desenvolvimento de software. • Falta de investimento em Engenharia de Software. EVOLUÇÃO DO CENÁRIO DO SOFTWARE O contexto no qual os softwares estão inseridos é dinâmico e vem passando por grandes evoluções ao longo de cinco décadas. Com o aumento da capacidade de produção de hardware e o surgimento de computadores mais potentes e velozes, capazes de processar um grande volume de informações em um curto espaço de tempo, assim como o “boom” da Internet, as empresas e o mercado passaram a ter acesso a todo tipo de informação e ferramentas quase que instantaneamente, o que impactou diretamente na forma como as relações comerciais acontecem. Sociedade industrial, da automação Sociedade da informação O mundo mudou. A sociedade mudou. A informação passou a ser o diferencial em todas as relações de negócio. A grande disponibilidade de informações tornou cada vez mais necessária a existência de softwa- res capazes de processá-las e dar o feedback desejado, de forma rápida e objetiva. O mundo dos negócios, comércio, indústrias, prestação de serviços, educação, enfim, todos os setores passaram a demandar software em um ritmo cada vez mais acelerado. Atualmente, até mesmo as relações sociais estão sendo altamente influenciadas pelos softwares e pelos dispositivos portáteis. A evolução do hardware continua, assim como a demanda por novos softwares capazes de operar estes hardwares. Introdução ao Software8 TIPOS DE SOFTWARE Existem diferentes situações nas quais os softwares podem ser aplicados. Podemos divi- dir estas aplicações em algumas categorias que nos permitem classificar estes softwares quanto a suas características: • Software Básico – é um conjunto de programas para dar apoio a outros programas. Tem como característica uma forte interação com o hardware, operações concorren- tes, compartilhamento de recursos, uso por múltiplos usuários e múltiplas interfaces. • Software de Tempo Real – são programas que monitoram, analisam e controlam eventos do mundo real, devendo responder aos estímulos do mundo externo com restrições de tempo predeterminadas. • Software Comercial – é a maior área de aplicação de softwares, são aplicações que gerenciam as operações comerciais de modo a facilitar o gerenciamento comercial do negócio da empresa, permitindo também a tomada de decisões. • Software Científico – são caracterizados por algoritmos de processamento numérico, dependentesda coleta e processamento de dados para as mais variadas áreas do conhecimento. • Software Embutido – são desenvolvidos para executar atividades muito específicas e inseridos em produtos inteligentes tanto para atividades comerciais como para atividades domésticas. • Software de Computador Pessoal – são produtos desenvolvidos para o uso pessoal do computador, tais como planilhas eletrônicas, processadores de textos, jogos, etc. • Software de Inteligência Artificial – fazem uso de algoritmos não numéricos para resolver problemas complexos que não apresentam facilidades computacionais numéricas ou de análise direta. CENÁRIO ATUAL DO SOFTWARE E a crise, acabou? Será que estamos livres dos problemas relacionados à alta demanda x capacidade produtiva, enfrentados no passado? Vamos analisar a figura abaixo: Esta é uma figura conhecida e altamente difundida no mundo do software e envolve diversas tarefas de diversos papéis envolvidos na criação de um software. Analisando-se a figura, fica clara a existência de algum problema. Muitas das empresas atuais enfrentam situações semelhantes às ilustradas pelos diversos quadros da figura. O problema ou o erro em questão não é apenas de uma pessoa, e simplesmente substituir um dos profis- sionais envolvidos por outro que não cometa o erro dificilmente irá solucionar o cenário ilustrado. A solução deste cenário passa pela utilização de Engenharia de Software, por meio de processos que contemplem etapas e tarefas que possibilitem que os erros ocor- ridos durante as fases não cheguem ao produto final. Engenharia de Software O QUE É ENGENHARIA DE SOFTWARE? Com o tempo, percebeu-se que é mais barato planejar do que corrigir um software. O desenvolvimento de software passou a ser baseado em princípios da engenharia para o desenvolvimento do produto, ou seja, levantar os requisitos associados, construir mode- los para representar a solução a ser desenvolvida, implementar as diversas unidades que irão compor o produto, verificando se tais unidades atendem aos requisitos identifica- dos, realizar a integração entre as unidades, também verificando seu funcionamento, até que tenhamos o produto por completo, que deve passar por uma série de verificações (testes funcionais, desempenho e estresse, usabilidade, etc.), para que possamos concluir o desenvolvimento construído a partir de um conjunto de etapas planejadas e bem defi- nidas. Em outras palavras, a engenharia de software é a aplicação de uma abordagem sistemática, disciplinada e quantificável para o desenvolvimento de um software. Uma primeira definição formal de engenharia de software foi proposta por Fritz Bauer, em 1969: “O estabelecimento e uso de sólidos princípios de engenharia para que se possa obter economicamente um software que funcione eficientemente com máquinas reais”. Em 1987, Arndt Von Staa apresentou a seguinte definição: “O desenvolvimento e a apli- cação de ciência, matemática, técnicas, métodos e ferramentas para o desenvolvimento e a manutenção econômica de software de qualidade preditível e controlável, operando de modo econômico em máquinas e ambientes reais”. A engenharia de software abrange um conjunto de três elementos fundamentais: méto- dos, ferramentas e procedimentos. Por meio destes elementos, a engenharia de software visa possibilitar aos gerentes o controle do processo produtivo dos softwares, os subsí- dios técnicos e as informações necessárias aos profissionais, para que estes tenham a base necessária para o desenvolvimento de um software com alta qualidade. Os métodos de engenharia de software proporcionam os detalhes de “como fazer” para construir o software. Envolvem um amplo conjunto de tarefas que inclui: planejamento e estimativa de projeto, análise de requisitos de software e de sistemas, projeto da estrutura de dados, arquitetura de programa e algoritmo de processamento, codificação, testes, manutenção, documentação, implantação, etc. Os métodos da engenharia de software muitas vezes introduzem uma notação gráfica ou orientada em linguagem especial e intro- duzem um conjunto de critérios para a qualidade do software. As ferramentas de engenharia de software proporcionam apoio automatizado ou semiau- tomatizado aos métodos. Atualmente, existem ferramentas para sustentar cada um dos métodos anotados anteriormente. Quando as ferramentas são integradas de forma que a informação criada por uma ferramenta possa ser usada por outra, é estabeleci- do um sistema de suporte ao desenvolvimento de software, chamado engenharia de software auxiliada por computador (CASE - Computer-Aided Software Engineering). Introdução ao Software10 O CASE combina software, hardware e um banco de dados de engenharia de software (uma estrutura de dados contendo importantes informações sobre análise, projeto, codificação e teste) para criar um ambiente de engenharia de software. Algumas ferramentas, denomi- nadas ferramentas de quarta geração ou 4GL permitem que, a partir de uma especificação de software em uma linguagem de alto nível, o código fonte seja gerado automaticamente. Os procedimentos da engenharia de software constituem o elo que liga os métodos às ferramentas, possibilitando o desenvolvimento racional e oportuno do software de compu- tador. Os procedimentos definem a sequência em que os métodos serão aplicados, os produtos que se exige que sejam entregues (documentos, relatórios, formulários etc.), os controles que ajudam a assegurar a qualidade e a coordenar as mudanças, e os marcos de referência, que possibilitam aos gerentes de software avaliar o progresso. O emprego dos diferentes conjuntos de etapas envolvendo os métodos, as ferramentas e os procedimentos muitas vezes são referenciados como paradigmas da engenharia de software. Um paradigma de engenharia de software é escolhido, tendo-se como base a natureza do projeto e da aplicação, os métodos e as ferramentas a serem usados, os controles e os produtos que precisam ser entregues e a disponibilidade de recursos físicos e humanos a serem empregados. Métodos, Ferramentas e Procedimentos definidos na Engenharia de Software • Permitem que o gerente controle todo o processo de desenvolvimento do software. • Oferecem ao profissional desenvolvedor uma base para a construção de software de alta qualidade. • Levam à produção de um software que atenda aos requisitos e expectativas do cliente. Resumidamente falando, a engenharia de software visa, por meio da utilização de méto- dos, ferramentas e procedimentos, em uma abordagem sistemática e controlável, condu- zir o processo de produção de softwares de qualidade, que atendam ao planejamento no que diz respeito a escopo, custos e prazos do projeto. PROBLEMAS ENVOLVIDOS NO PROCESSO DE SOFTWARE Voltando a falar do cenário atual do software, vamos repetir a mesma pergunta. E a crise, acabou? A resposta desta pergunta não é exata (sim ou não). Enquanto algumas empresas já implementam processos e métodos bem definidos e conseguem caminhar no sentido dos objetivos da engenharia de software com bastante eficiência, outras ainda estão “apanhando” na tentativa de se livrar dos diversos problemas envolvidos na produção de um software. A maior ou menor taxa de sucesso nos processos de engenharia de software pode variar de uma empresa para outra, de uma região geográfica para outra ou até mesmo de um projeto para outro dentro de uma mesma empresa. Para entender isto, vamos conhecer os três principais elementos do processo de software. Processos PessoasTecnologia Introdução ao Software 11 Cada um destes três elementos, processos, pessoas e tecnologia se completam. A falha em um destes três irá, possivelmente, culminar em problemas com o software a ser produzido. Não adianta ter um processo maduro e bem definido, com tecnologia avança- da, porém pessoas inadequadas. Da mesma forma, não adianta ter pessoas competentes, tecnologia avançada e processos antiquados e ineficientes ou, por fim, pessoas compe- tentes, um processomaduro e bem definido, mas tecnologia inadequada. Outra questão importante a ser colocada é a diferença entre um software desenvolvido por uma pessoa para uso próprio de um software desenvolvido para um cliente e que será vendido como um produto. Muitos alunos fazem a associação de software com aquele pequeno projeto que ele mesmo desenvolve para si ou para um pequeno cliente que solicitou um software pequeno e simples. Nestes casos, dificilmente se emprega algum tipo de processo, a tecnologia utilizada é a primeira disponível (normalmente aquela que o desenvolvedor do software já conhece), e há pouca ou nenhuma documentação, assim como o planejamento de custo, prazo e escopo a ser entregue é feito de forma intuitiva. Quando se trata de um “produto software” a ser produzido por uma empresa, envolvendo várias pessoas e um cliente que está patrocinando o desenvolvimento deste software, o cenário é bem diferente. Neste caso, o emprego da engenharia de software passa a ser fundamental. O software em questão será utilizado por diversas pessoas diferentes de áreas diferentes e com necessidades diferentes, sendo necessário entender a necessidade destas pessoas e a realidade do processo de negócios no qual estas pessoas estão inseri- das. Desde um bom levantamento de requisitos até a realização de uma bateria de testes e a entrega do software, uma série de etapas deve ser percorrida, devendo a equipe de desenvolvimento estar apta a lidar com as dificuldades e os diferentes pontos de erro que existem em cada uma destas etapas, que iremos conhecer mais adiante. OS DESAFIOS DA ENGENHARIA DE SOFTWARE Atualmente, os principais desafios da engenharia de software são: • O software legado Fazer a manutenção e a atualização dos softwares atuais, sem apresentar grandes custos, e ao mesmo tempo prosseguir com a prestação dos serviços corporativos essenciais é um grande desafio. Em alguns casos, não existe documentação dos softwares legados, e as pessoas que o desenvolveram não estão mais disponíveis para serem consultadas, sendo necessário um grande trabalho de levantamento e análise, para que as manutenções possam ocorrer. Em outros casos, os problemas com o software legado envolvem a estrutura sob a qual ele foi desenvolvido, que não suporta mais seu crescimento ou é incompatível com as novas necessidades do negócio, tornando a manutenção extremamente cara ou até mesmo inviável. • A heterogeneidade do software As técnicas utilizadas na construção de softwares devem ser confiáveis e flexíveis, para que os softwares desenvolvidos sejam capazes de funcionar em diferentes ambientes, equipamentos e sistemas. Não se pode mais pensar apenas em compu- tadores quando se fala de software. A variedade de hardware faz com que seja necessário o desenvolvimento de softwares capazes de funcionar ao mesmo tempo em computadores, celulares, tablets, na web (nuvem) e muitas outras configurações. • O fornecimento do software O fornecimento do software é atualmente um desafio, uma vez que é cada vez maior a demanda por novos softwares ou novas funcionalidades, em um tempo cada vez menor. É preciso entregar mais em menos tempo, sem que a qualidade seja comprometida. Mais adiante falaremos sobre a demanda reprimida por software nas empresas e na relação existente entre produtividade, confiabilidade e manute- nibilidade, que pode levar as empresas de software a enfrentar sérios problemas a médio e longo prazo. Introdução ao Software12 MITOS DO SOFTWARE Existem muitos mitos acerca do desenvolvimento de software, que podem causar proble- mas ao longo do processo. Muitos destes mitos são decorrentes de desinformação e podem causar grande confusão e desentendimentos, uma vez que são tomados como verdade e estão enraizados nas crenças dos envolvidos no processo de um software. Mitos administrativos São os mitos relacionados às pessoas ligadas à gestão/administração da empresa ligada ao software. • “Um bom manual oferece toda a informação necessária para que a equipe seja capaz de desenvolver o software.” Na prática, muitos problemas podem surgir ao longo do desenvolvimento. A equipe deve ter acesso à prática do negócio ao qual o software será destinado e ter condi- ções de refletir sobre os problemas e as mudanças que podem aparecer ao longo do processo. • “O acesso a computadores de última geração dá à equipe o que ela necessita para desenvolver softwares de última geração.” • Ter um computador moderno não garante à equipe aquilo que ela necessita para obter a qualidade do software. Ferramentas e processos de desenvolvimento adequados são mais importantes que um hardware de última geração. • “Caso o desenvolvimento do software esteja atrasado, basta aumentar a equipe de desenvolvimento para reduzir o tempo e o atraso será compensado.” Este mito é um clássico no qual os gerentes acreditam e ao qual se apegam forte- mente. Na prática, os componentes de um software não são como os tijolos de uma parede onde, aumentando-se o número de pessoas, aumenta-se a taxa de tijolos colocados em um intervalo de tempo. Aumentar a equipe de desenvolvimento em um projeto que já está atrasado provavelmente irá atrasá-lo ainda mais, uma vez que os novos membros precisarão ser treinados e este treinamento irá envolver os profissionais da equipe já atrasada. Mitos do cliente São os mitos relacionados ao software nos quais os clientes acreditam fortemente. • “Uma descrição breve e geral dos requisitos do software é o suficiente para iniciar o seu projeto. Maiores detalhes podem ser definidos posteriormente.” A falha na fase de levantamento dos requisitos pode levar o projeto ao fracasso. É importante que a definição dos requisitos seja o mais precisa e detalhada possível. Deixar para depois pode levar a não acontecer e os requisitos podem ficar incom- pletos ou serem insuficientes. • “As contínuas mudanças nos requisitos não representam um problema, uma vez que o software é flexível e poderá suportar facilmente as alterações”. Por mais flexível que um software possa ser, existe um limite até onde esta flexibili- dade pode ir. Em alguns casos o custo de uma alteração em um software após certo estágio de seu desenvolvimento pode ser muito alto, chegando a ser significativo em relação ao próprio custo do software. Introdução ao Software 13 Mitos do profissional São os mitos relacionados ao software os quais os próprios profissionais de software acreditam ser verdade. • “Após a finalização do desenvolvimento e implantação de um programa, o trabalho está terminado”. Na realidade, grande parte do trabalho ocorre após a implantação do software. Segundo Pressman (2002), de 50 a 70% do trabalho empregado em um software ocorre após sua entrega, na fase de manutenção do software, seja ela corretiva ou evolutiva. • “Quanto mais cedo o código começar a ser escrito, mais rápido o programa ficará pronto”. Existe um momento certo para que o desenvolvimento do software seja iniciado. Este momento pode variar de, acordo com o processo de software usado, com as características do software, dentre outras coisas. Iniciar o desenvolvimento antes da hora apropriada pode levar à necessidade de retrabalho para corrigir parte do desenvolvimento feito de forma errada. • “Só é possível avaliar a qualidade de um programa após a entrada desse programa em funcionamento”. A qualidade do software é testada e avaliada em vários momentos durante o seu desenvolvimento, mesmo antes de este estar pronto. Baterias de testes podem ocorrer em diferentes momentos do processo de software, por exemplo. • “O produto final a ser entregue é o programa funcionado”. O software funcionando é um dos entregáveis de um projeto do software. O treina- mento dos usuários, a documentação e uma série de outros elementos devem fazer parte da entrega de um projeto destes. Introdução ao Software14 15 Síntese Neste módulo, você viu os conceitos básicos da Engenharia de Software, o contexto no qual os softwares sãocriados e as principais características que envolvem o software como produto. Entendeu a evolução do software desde seu momento inicial até o momen- to da Crise do Software, que culminou com a necessidade da adoção de processos de criação de software mais bem definidos. Estas questões levaram o software a ser produ- zido de forma semelhante aos produtos criados por processos de engenharia, e não mais por processos manufaturados. Por fim, conheceu diversos problemas relacionados ao processo de software e os mecanismos encontrados pela Engenharia de Software para tentar minimizar estes problemas, indo ao encontro dos objetivos de produção de softwa- re com qualidade. Referências PARREIRA JÚNIOR, Walteno Martins; Engenharia de Software, UFMG, 2013. Apostila. PAULA FILHO, W. P. Engenharia De Software: Fundamentos, Métodos E Padrões. São Paulo: LTC, 2009. PRESSMAN, Roger S. Engenharia de Software. 6 ed. São Paulo: McGraw-Hill, 2006.
Compartilhar