You are on page 1of 10
Fundamentos da Engenharia de Software Danielle Rousy Dias da Silva VOLUME 1 Recife, 2010 CapituLo 1 - O SOFTWARE E SUA EVOLUGAO = __ Vamos conversar sobre o assunto? Sabemos que a invengdo de uma tecnologia pode mudar para sempre a vida de toda uma sociedade, esse foi 0 caso do software. N3o que essas mudancas tenham sido antecipadamente previstas, possivelmente no foram, quem viu o software nascer ‘em meados dos anos 50, no imaginava que ele revolucionaria tanto a vida atual. Hoje, © software é indispensivel para os negécios, para 2 ciéncia, para 2 medicina, e para 2 cengenharia. Em todo lugar & possivel encontrar exemplares de softwares sendo utlizados continuamente pela populagdo, ndo apenas em computadores pessoals, mas em outros tipos de hardware como eletrodomésticos, maquinas industriais, carros, etc. O software permitiu a construgdo de novas tecnologias, como, por exemplo, a Engenharia Genética, ea extensio de outras, como Telecomunicagées. Junto a essa revolug3o também encontramos os problemas. Hi milhares de softwares que precisam ser corrigidos, adaptados e aperfeigoados com o passar do tempo, ¢ 0 Gnus de realizar essas tarefas custam, em muitos casos, um prego maior do que a criagdo de novos softwares. Neste capitulo, exploraremos primeiramente 2 importancia, a definigo e as caracteristicas do software, para sé entdo apresentarmos os problemas normalmente encontrados no ciclo de produgao do software e quais as possiveis causas desses problemas. 1.1. IMPORTANCIA DO SOFTWARE HOJE O software hoje em dia assume um papel duplo (Pressman, 2006). Ele & tanto um produto, como os softwares de prateleiras que encontramos a venda em lojas e grandes supermercados (i.e, jogos, processadores de textos, folhas de pagamento, antivirus, ete) como também um veiculo para a entrega, por exemplo, de informacio. Devido as melhoras do desempenho do hardware, modificagées na arquitetura de computadores, aumento significativo de meméria e na capacidade de armazenamento, € uma variedade de opgies de periféricos de entrada e saida, surgem sistemas baseados em computador cada vez mais sofisticados e complexos. Consequentemente, esse cendrio tem cocasionado a expansio, o desenvolvimento e 0 uso de softwares (Figura 1.1). Por exemplo, hd um software sendo executado no celular que vocé usa para fazer uma ligacio comum, hé RR ai oe Serre ‘outro software que faz a conexdo entre a sua chamada telefénica e a chamada de destino, hd software para acionar o alarme de sua casa de forma remota, para acessar o material desse curso, dentre muitos outros exemplos, e vocé, inclusive, pode até citar alguns, ndo 621 Figura 1.1 ~ Importincia do software. Hoje, uma forte indtistria de software tornou-se fator dominante nas economias do mundo giobalizado, no é 8 toa que paises como os Estados Unidos e Japao direcionam forcas para dominar essa industria, contudo hé muito ainda que se trabalhar nesse sentido, possibilitando a qualquer outro pais também fazer parte dessa dominancia. 0 programador solitério de antigamente foi substituido por uma equipe de especialistas no desenvolvimento de software, cada um concentrando-se em uma parte da tecnologia necesséria para produzir uma aplicacdo complexa. No entanto, as questdes que eram feitas pelos antigos programadores continuam ainda sendo feitas pelos atuais apesar de toda ‘evolugdo encontrada hoje. Problemas antigos, como a dificuldade de mensurar 0 software, persistem até hoje e é fruto de continuas e gradativas investigacSes. Alguns outros exemplos de problemas séo apresentados no Quadro 1.1 em forma de questées chaves. £ por isso que os estudos na area de desenvolvimento de software ainda so muito expressivos € significantes. Quadro 1.1 - Questdes.chave no desenvolvimento de software Um dos caminhos encontrados para amenizar alguns dos problemas mencionados ‘acima foi a adocao de praticas da engenharia na drea de desenvolvimento de software, contudo e nesse sentido, hd ainda um longo caminho a percorrer, porque como veremos no decorrer deste curso, a natureza do software se diferencia e muito de outros tipos de produtos/servigos tratados e trabalhados em engenharia, Vamos entender mais sobre isso! FUNDAMENTOS DA ENGENHARIA DE SOFTWARE! Pode-se definir o software, numa forma cléssica, como sendo: “um conjunto de instrugées que, quando executadas, produzem a funclo e 0 desempenho desejados, estruturas de dados que permitam que as informagies relativas 20 problema a resolver sejam manipuladas adequadamente e a documentacgo necesséria para um melhor entendimento da sua operagao e uso” (PRESSMAN, 2006} Podemos dizer também que o software é um programa de computador, seja este, dedicado ou néo, que representa uma entidade abstrata e que nos proporciona a exploracéo 0 manuseio do hardware, a execucdo de tarefas, @ resolugo de problemas e, assim, torna o computador operacional. Por sua vez, um programa consiste em instrugbes legivels por maquina, seus componentes, dados, contetido audiovisual (tal como imagens, texto, gravacées ou figuras) e materiais licenciados relacionados conforme ilustrado no Quadra 12. ‘Quadro 1.2~ Andlise dos elementos de um programa, [A definiglo implica na existéncia de uma maquina que Ié instrugées. © termo “instrusBes” indica 9 intengio de enviar 8 méquina algo que esta, ppossa entender, e que tem por meta instrulta, orienté-la ou comandi-la a realizar algo. Podemos entio inferir que qualquer conjunto de instrugGes legivets por InstrusBeslegivels maquina, qualquer que seja a maquina, quaisquer quem sejam as instrusses, porméquina podem constitu parte do que chamamos de programa. Considerando ofato de que toda maquina Inventada pelo ser humano possul uma linguagem artificial com a qual nos comunicamos com a maquina, considerando ainda que esta inguagem é composta por cadelas de simbolos ue formam sentengas, entfo qualquer sentenca numa linguagem artificial pode consttuir parte do que chamamos de programa, Esta é uma parte recursiva da definigdo. Um programa 6 composto por Componentes _componentes, o que implica dizer que um programa pode ser constituido por outros programas menores ou sub-programas. Um programa pode conter dados, o que significa que um programa no é Dados composto apenas por istrugbes. Conteddo audiovisual tal Qualquer material escrito, impress, apresentvel em qualquer midia de comolmagens, _comunicagdo, de natureza textual, erica, audvel, etc, pode pertence ou texto, gravagdes ser parte de um programa, ov figuras) Do ponto de vista de naturera fica dos materials que compdem um rogram, este aspecto veleula a mesma esséncia de generalidade do isco eet enc eee a eee Peres a ene eee eset ete relacionades: progr p a € pertencem a organizagGes, € que portanto estio sujeltos as regras de comercializaglo,distribulgdo e/0u uso. \ Atencao Vocé sabe o que é um software dedicado/ cembarcado? Néo! Lela o texto apresentado no Sitio eletrnica.o i ener Podemos inferir que um programa é um artefato complexo, que envolve uma grande quantidade de aspectos distintos, como: » Habilidade de comunicag3o com méquinas (através das instrugdes © dados) e seres humanos (através de dados manipulados pela maquina e midias externas & maquina); > Organizagdo em uma estrutura hierdrquica (através de seus componentes); » Sujeito a regras comerciais explicitas, pois foi criado por organizagdes humanas que detem controle sobre sua existéncia ¢ uso através de uma licenca. Um produto de software (ou software, como vamos chamar a0 longo do curso}, 6 desenvolvido por pessoas (normalmente, uma equipe) e sistematicamente destinado 20 Uso de outras pessoas ~ chamados de usuarios. Os eventuais usuarios podem, ainda, ter formagdes e experiéncias diferentes, o que significa preocupagées adicionais no que diz respeito 20 desenvolvimento do produto em termos de interface, usabilidade e documentagao. Ainda, os produtos de software devem passar normalmente por uma exaustiva bateria de testes, dado que os usuirios ndo estar3o interessados (e nem terdo capacidade) de detectar e corrigir os eventuais erros de execucao. Dentro desta ética, & levantar algumas particularidades do software, quando comparadas a outros produtos. Vejamos algumas delas (PRESMAN, 2006): > O software é um elemento légico e nao fisico como a maioria dos produtos; » 0 software € concebido e desenvolvido como resultado de um trabalho de cengenaria © no manufaturado no sentido cléssico; » 0 software ndo se desgasta, ou seja, ao contrério da maioria dos produtos, o software no se caracteriza por um aumento na possibilidade de falhas a medida {que 0 tempo passa (como acontece com a maioria dos produtos manufaturados). Outro aspecto importante relativo ao software diz respeito a quantidade de falhas tencontradas ao longo do tempo. No desenvolvimento de um hardware, o numero de falhas 6 alto logo no inicio desse desenvolvimento, com a evolugao desse desenvolvimento 20 longo do tempo esse nimero é reduzido até chegar em um minimo aceitavel e estével, e 20 longo do tempo de utilizacao (desgaste), esse mesmo hardware tenders a ter o ntimero de falhas aumentado proveniente agora do desgaste de uso. Esse cenério esta ilustrado na Figura 1.2. Diferentemente do hardware, no software acontece como na Figura 1.3. Contudo, vale alguns comentarios. Primeiramente, como o software néo se desgasta, 0 que se esperava do comportamento do grafico do ntimero de falhas seria o ilustrado no gréfico azul da figura (indicado pelo nome de “curva idealizada”’, contudo, na realidade observar- se 0 grafico de cor laranja (indicado pelo nome de “curva real”). Com o tempo, o software 6 alterado em fungio da corrego de erros e/ou incluso de novos requisites e/ou remogo de velhos, Esse proceso continuo de mudanga normalmente introduz novos erros, 0 que faz com as falhas do software crescam com 0 passar do tempo e que tenhamos picos constantes de aumento e redugao de falhas. Figura 1.2 — indice de falhas do hardware, Fonte: Adaptado de (Pressman, 2006) Real indice de Falhas Curva Iealizada Figura 1.3 ~ indice de falhas do software. Fonte: Adaptado de (Pressman, 2006}. 1.3. CATEGORIAS E APLICACGES DE SOFTWARES De acordo com Mowery (1999), 0 software pode ser dividido em trés grandes categorias: software de pacote; servigas de software; software embarcado, © primeiro ¢ aquele com que lidamos todos os dias, como, por exemplo, um processador de texto ou um jogo para console ou PC. O segundo esté associado 20 desenvolvimento customizado de software, mas também a atividades como apoio 2 clientes, manutengo, treinamento etc. O terceiro € 0 menos conhecido e corresponde 2 software que funciona em conjunto com uma maquina, como, por exemplo, o software de um telefone celular. Além dessas categorias, o software também pode ser classificado em fungdo da aplicacdo, podendo ser dividido em: basico, de tempo real, comercial, cientifico e de engenharia, embutido, de computador pessoal e de inteligéncia artificial. No Quadro 1.3, descrevemos 0 que vem a ser cada tipo e alguns exemplos destes. ‘Quadro 1.3 ~Tipos de aplicagbes de software. Monitora, analisa e controla eventos do mundo real. Responde dentro Detemporeal de restricdes de tempo estritas, Exemplos: sistemas de controle de voo © sinaizagdo de trénsito. Caracterizase por softwares que processam funcSes mateméticas complexas. Clentifico ede Sto utilzados na Engenharia e em processamento cientiico. Exemplos: fengenharia sistemas de astronomia, sistema de controle da dindmica orbital de naves espacias, biologia molecular, ete. ‘Tem como maior caracteristca uma busca pela methoria das interfaces entre compar POMem/méquina, toad os softwares dest categoria cada ver mais ces nputador de uriizaglo. Fxemplos: processamento de textos, plaihas eletrnica, diversdes, ete. Nos primérdios da computagéo, 0 desenvolvimento dos programas (ou, 2 programa¢ao) fol visto como uma forma de arte, sem utilizagao de metodologias formals e ‘sem qualquer preocupacao com a documentagio, entre outros fatores importantes. Vamos. agora conhecer um pouco desse hist6rico evolutivo. 1.4. HISTORICO DA EVOLUGAO DO SOFTWARE Os primeiros softwares surgiram na década de 1950 como indicado na figura (Figura 1.3) Nessa época, cles eram produzidos de forma totalmente castca, sem qualquer processo sistemdtico de desenvolvimento, no existia qualquer documentagio de ajuda € muito menos alguma documentacdo que especificasse o que o software deveria fazer Normalmente, tudo estava na cabe¢a do progremador mesmo, e este era o responsével por manter como também utilizar. Agora, imagine a situagdo de Empresa quando essa pessoa pedlisse demissao, ficava em uma situagao diffl, n30?1 Além disso, também nessa época, os inns EI softwares produzidos s6 trabalhavam por lote (batch), isto é, os resultados produzidos pelo software nao eram processados de forma imediata quando requisitado por seus usuérios, eles eram processados em um momento posterior, o que acarretava a uma espera de horas ou dias pelos resultados. Figura 1.4 Processo evolutivo do software. Fonte: (PRESSMAN, 2006) 4J8 em meados da década de 60, os softwares passaram a ter uma maior Interatividade, trabalhar em tempo real, ser multiusuario, passaram a utilizar de bibliotecas e banco de dados para faciltar a programagdo. Nessa época se iniciou também as primeiras discussées sobre as dificuldades de manutengao dos softwares - dezenas de linhas de ccédigo, ndo documentadas, desenvolvidas de forma particular ao estilo do desenvolvedor, ‘em operacdo e algumas vezes, realizando atividades criticas. Na década seguinte (anos 70), houve a introdugo das redes de computadores, dos mecanismos de distribuigao dos softwares e também a concorréncia entre as empresas desenvolvedoras. Além disso, houve também a generalizacdo dos computadores pessoais e, consequentemente, o crescimento das empresas de softwares, Da década de 50 2 70, podemos dizer que o desenvolvimento de software foi ‘marcado pela falta de métodos e ferramentas, e uma programacio por tentativas e erros. Esse cenério trouxe muitas consenquencias para a indiistria de software e caracterizou 0 Inicio da crise de software. ‘Apés a década de 70 até os dias de hoje, 0 desenvolvimento de software foi ‘marcado pela introduco de tecnologias novas, como a orientagio a objetos, 0 surgimento e barateamento dos computadores com alto poder de processamento e armazenamento € @ introdugdo de sistemas de inteligéncia artificial (por exemplo, utilzando-se de redes neurais). A partir dessa época se acentua muito os problemas associados com o desenvolvimento de software em atender a demanda do mercado: atrasos frequentes na entrega do software, softwares mal projetados, dificuldade na manutengdo e etc. Vamos conhecer mais sobre cesses problemas e suas possiveis causas. Rea aah 0+ sorrvne Apartir de meados da década de 60, a produgao do software é marcada pelos dificeis, problemas comumente enfrentados durante o ciclo de desenvolvimento e manutengo do software. Alguns desses problemas tiveram consequéncias desastrosas para o mundo, como por exemplo, o desastre com o projeto Ariane 5. Esse projeto custou cerca de & bilhdes de délares para a Agéncia Espacial Europeia e levou 10 anos para ser efetivamente concluido, (© Ariane 5 era um langador de satélites e tinha o objetivo de manter a supremacia europeia no langamento de satélites espaciais. Contudo, apés 37 segundos de seu langamento 0 mesmo explode destruindo o foguete © a carga avaliada em 500 milhdes de délares. O desastre ocorreu por falha no software que calculava a trajetéria e altitude, levando a uma pane os sistemas adjacentes do lancador. O desastre ocorreu pela deficiéncia 1a execusio e elaboracdo dos testes do sistema. Infelizmente, esse néo é o Unico exemplo de desastres associado com o erro do software, existem exemplos piores que até custaram a Vida de pessoas. Foi em funcéo de desastres como esse que se passou a estudar e identificar mais claramente 0s problemas associados a0 desenvolvimento de software e suas possivels causas com a finalidade de encontrar solugdes para contornar esses problemas. Podemos citar como problemas mais comumente enfrentados os seguintes (PRESSMAN, 2006; SOMERVILLE, 2007): » Raramente, durante o desenvolvimento de um sofware, é dedicado tempo para coletar dados sobre o proceso de desenvolvimento em si; devido 4 pouca ‘quantidade deste tipo de informacio, as tentativas em estimar a duragdo/custo de produgio de um software tém conduzido a resultados bastante insatisfatérios; além disso, a falta destas informagées impede uma avaliacio eficiente das técnicas ‘e metodologias empregadas no desenvolvimento; 1» Ainsatisfagdo do cliente com o sistema “concluido” ocorre frequentemente, devido, principalmente, ao fato de que os projetos de desenvolvimento so baseados ‘em informagBes vagas sobre as necessidades e desejos do cliente (problema de comunicagdo entre cliente e fornecedor); » A qualidade do software é quase sempre suspeita, problema resultante da pouca tengo que foi dada, historicamente, as técnicas de teste de software (até porque Co conceito de qualidade de software é algo relativamente recente); » O software existente é normalmente muito dificil de manter em operagéo, o que significa que 0 custo do software acaba sendo incrementado significativamente devido as atividades relacionadas & manutencéo; isto é um reflexo da pouca importancia dada a manutenibilidade no momento da concepgio dos softwares. Ao se estudar as causas, especialistas como Pressman (2006) e Somerville (2007) identificaram como as principais causas: » Geréncia de requisitos sem processo definido » Comunicagdo ambigua e imprecisa entre partes envolvidas » Complexidade crescente >» Inconsisténcias ndo detectadas em nivel de andlise, pojeto e implementagdes » Testes insufcientes » Dificuldade em lidar e gerenciar riscos FumoaMenros os ENGENHARIA BE SOFWARE » Falta de controle sobre propagacio de mudangas » Automacdo insuficiente » Ubiquidade (disponivel o tempo todo em qualquer lugar) > Diversidade de plataformas » Comunicagao entre o cliente e o desenvolvedor & muito fraca. » A falta de experiéncia dos profissionais na conducao de projetos de software; > Afalta de treinamento no que diz respeito a0 uso de técnicas e métodos formals para o desenvolvimento de software; » A “cultura de programagio” que ainda difundida e facilmente aceita por estudantes e profissionais de Ciéncias da Computagio; » Aincrivel “resistencia” as mudancas (particularmente, no que diz respeito ao uso de novas técnicas de desenvolvimento de software) que os profissionais normalmente apresentam. Aiguns das causas desses problemas so provenientes do estabelecimento de falsas, verdades, que so conhecidas como os mitos de software e algumas delas ainda persistem até 0s dias de hoje. Os chamados “mitos e realidades” do software explicam alguns dos problemas de desenvolvimento de software apresentados. Presman (2006), divide os mitos em trés Categorias: mitos de gerenciamento, mitos do cliente e mitos do profissional. Veremos cada um deles. 1.6.1. Mitos de Gerenciamento Os mitos de gerenciamento ou administratives como chamados por alguns especialistas, advém, principalmente, da geréncia em fungio da pressio de mercado ou cliente pela redugao do tempo de entrega e custos dos projetos de softwares. Nessa categoria encontramos trés principais mitos. [Mito 1]. "Sea equipe cispe de manual repleto de padrées e procedimentos de desenvolvimento {do software, entSo a equine esté apta a encaminhar bem o desenvolvimento.” Isto ndo é 0 suficiente para realizar 0 desenvolvimento do software. € necessério que 0 que conste no dado manual reflita a moderna pratica de desenvolvimento de software e que este seja exaustivo com relagio a todos os problemas de desenvolvimento ue poderdo aparecer no percurso. Questées como as apresentadas a seguir deveriam ser primeiramente feitas e respondidas para validar 0 uso ou ndo do manual e no adoté-lo como verdade absoluta, » manual tem sido amplamente utilizado e validado pelos desenvolvedores? » As técnicas ilustradas ou apresentadas no manual so adequadas ao tipo de software em desenvolvimento? » manual realmente é completo?

You might also like