·

Cursos Gerais ·

Engenharia de Software

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta
Equipe Meu Guru

Prefere sua atividade resolvida por um tutor especialista?

  • Receba resolvida até o seu prazo
  • Converse com o tutor pelo chat
  • Garantia de 7 dias contra erros

Recomendado para você

Texto de pré-visualização

Fundamentos da Engenharia de Software Danielle Rousy Dias da Silva VOLUME 1 SUMÁRIO Apresentação 4 Conhecendo o Volume 1 5 Capítulo 1 O Software e sua Evolução 7 11 Importância do Software Hoje 7 12 Definição e Características do Software 9 13 Categorias e Aplicações de Softwares 11 14 Histórico da Evolução do Software 12 15 Problemas no Desenvolvimento de Software e Causas 14 16 Mitos de Software 15 Capítulo 2 Introdução à Engenharia de Software 25 21 Introdução à Engenharia de Software 25 22 Conceitos Chaves da Engenharia de Software 27 23 Paradigmas da ES 28 Capítulo 3 Corpo de Conhecimento da Engenharia de Software SWEBOK 39 31 Corpo de Conhecimento da Engenharia de Software SWEBOK 39 32 Certificações e Reconhecimento da Profissão 42 Capítulo 4 Ética e Responsabilidade Profissional 46 41 Responsabilidade do Profissional da Engenharia de Software 47 42 Ética e a Engenharia de Software 47 43 Código de Ética do Profissional em Engenharia de Software 49 Considerações Finais 61 Conheça a Autora 62 4 Se você quer ser bem sucedido precisa ter dedicação total buscar seu último limite e dar o melhor de si mesmo APRESENTAçÃO Caroa Cursista Seja bemvindoa à primeira unidade do curso Fundamentos da Engenharia de Software Neste curso vamos estudar de forma abrangente diversos conceitos importantes envolvidos com a produção de um software desde as suas características básicas até modelos e paradigmas de processo para seu desenvolvimento Apesar de não ser objetivo do curso mostrar soluções prontas e acabadas você verá que isso é quase uma missão impossível na área de software os assuntos abordados nele serão fundamentais para o exercício da profissão de vocês Eles darão suporte por exemplo a decisões de que metodologia adotar no desenvolvimento de determinado software ajudarão a você entender o custo de um software e até mesmo poderá lhe auxiliar na seleção de um software a outro em uma consultoria sobre software educativo por exemplo Neste primeiro módulo explicaremos as características básicas do software e também a definição e os vieses do que se trata a Engenharia de Software Este módulo será fundamental para entender não apenas os demais módulos do curso mas também o movimento da área de Software no mundo tanto em termos de indústria quanto de pesquisa e academia Vale ressaltar que o assunto é extenso e exigirá certa dedicação de leitura e estudo sobre os assuntos do curso então planejese e siga firme como disse o Ayrton Senna Bons estudos Danielle R D da Silva Autora 5 FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE CONHECENDO O VOLUME 1 Neste primeiro volume você irá encontrar o Módulo 1 da disciplina Fundamentos da Engenharia de Software Para facilitar seus estudos veja a organização desta primeira unidade Módulo 1 Introdução à Engenharia de Software Carga Horária do Módulo 1 15 haula Objetivo do Módulo 1 Introduzir os conceitos chaves as características os mitos e importância do software para o mundo atual Introduzir a disciplina de Engenharia de Software e o guia que reúne o corpo de conhecimento básico dessa disciplina Também nesse módulo serão apresentadas algumas questões éticas associadas à profissão do engenheiro de software Conteúdo Programático do Módulo 1 A importância do software Características e aplicações do software Histórico e evolução do software Introdução a Engenharia de Software e seus paradigmas SWEBOK Ética e responsabilidade profissional FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 6 CAPíTULO 1 O que vamos estudar neste capítulo Neste capítulo vamos estudar os seguintes temas A importância do software para os dias de hoje A definição e característcas do software Fases evolutivas vividas na produção do software Problemas associados ao desenvolvimento de software e suas possíveis causas Os mitos e realidades encontrados na produção do software Metas Após o estudo deste capítulo esperamos que você consiga Identificar a importância do software para os dias de hoje Descrever o que é um software Identificar as características mais relevantes de software Identificar os principais problemas associados ao desenvolvimento de software Listar os mitos e realidades encontrados na produção do software FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 7 CAPíTULO 1 O SOFTWARE E SUA EvOLUçÃO Vamos conversar sobre o assunto Sabemos que a invenção de uma tecnologia pode mudar para sempre a vida de toda uma sociedade esse foi o caso do software Não que essas mudanças tenham sido antecipadamente previstas possivelmente não foram quem viu o software nascer em meados dos anos 50 não imaginava que ele revolucionaria tanto a vida atual Hoje o software é indispensável para os negócios para a ciência para a medicina e para a engenharia Em todo lugar é possível encontrar exemplares de softwares sendo utilizados continuamente pela população não apenas em computadores pessoais mas em outros tipos de hardware como eletrodomésticos máquinas industriais carros etc O software permitiu a construção de novas tecnologias como por exemplo a Engenharia Genética e a extensão de outras como Telecomunicações Junto a essa revolução também encontramos os problemas Há milhares de softwares que precisam ser corrigidos adaptados e aperfeiçoados com o passar do tempo e o ônus de realizar essas tarefas custam em muitos casos um preço maior do que a criação de novos softwares Neste capítulo exploraremos primeiramente a importância a definição e as características do software para só então apresentarmos os problemas normalmente encontrados no ciclo de produção do software e quais as possíveis causas desses problemas 11 IMPORTÂNCIA 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 à venda em lojas e grandes supermercados ie jogos processadores de textos folhas de pagamento antivírus etc como também um veículo para a entrega por exemplo de informação Devido às melhoras do desempenho do hardware modificações na arquitetura de computadores aumento significativo de memória e na capacidade de armazenamento e uma variedade de opções de periféricos de entrada e saída surgem sistemas baseados em computador cada vez mais sofisticados e complexos Consequentemente esse cenário tem ocasionado a expansão o desenvolvimento e o uso de softwares Figura 11 Por exemplo há um software sendo executado no celular que você usa para fazer uma ligação comum há Você Sabia Segundo dados da Softex o mercado brasileiro de software vem crescendo desde 1995 a uma taxa média anual de 11 a maior do setor de TI três vezes maior do que a de hardware e cerca de 5 vezes maior do que a do PIB Fonte Softex 2005 FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 8 1 Por que leva tanto tempo para concluir o software 2 Por que os custos de desenvolvimento são tão altos 3 Por que não podemos achar todos os erros antes de entregar o software aos clientes 4 Por que gastamos tanto tempo e esforço mantendo progamas existentes 5 Por que continuamos a ter dificuldade em avaliar o progresso enquanto o software é desenvolvido e mantido outro software que faz a conexão entre a sua chamada telefônica e a chamada de destino há 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 não é Figura 11 Importância do software Hoje uma forte indústria de software tornouse fator dominante nas economias do mundo globalizado não é à toa que países como os Estados Unidos e Japão direcionam forças para dominar essa indústria contudo há muito ainda que se trabalhar nesse sentido possibilitando a qualquer outro país também fazer parte dessa dominância O programador solitário de antigamente foi substituído por uma equipe de especialistas no desenvolvimento de software cada um concentrandose em uma parte da tecnologia necessária para produzir uma aplicação complexa No entanto as questões que eram feitas pelos antigos programadores continuam ainda sendo feitas pelos atuais apesar de toda evolução encontrada hoje Problemas antigos como a dificuldade de mensurar o software persistem até hoje e é fruto de contínuas e gradativas investigações Alguns outros exemplos de problemas são apresentados no Quadro 11 em forma de questões chaves É por isso que os estudos na área de desenvolvimento de software ainda são muito expressivos e significantes Quadro 11 Questõeschave no desenvolvimento de software Um dos caminhos encontrados para amenizar alguns dos problemas mencionados acima foi a adoção de práticas da engenharia na área de desenvolvimento de software contudo e nesse sentido há 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 produtosserviços tratados e trabalhados em engenharia Vamos entender mais sobre isso FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 9 12 DEFINIçÃO E CARACTERísTICAS DO SOFTWARE Podese definir o software numa forma clássica como sendo um conjunto de instruções que quando executadas produzem a função e o desempenho desejados estruturas de dados que permitam que as informações relativas ao problema a resolver sejam manipuladas adequadamente e a documentação necessária para um melhor entendimento da sua operação 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 exploração e o manuseio do hardware a execução de tarefas a resolução de problemas e assim torna o computador operacional Por sua vez um programa consiste em instruções legíveis por máquina seus componentes dados conteúdo audiovisual tal como imagens texto gravações ou figuras e materiais licenciados relacionados conforme ilustrado no Quadro 12 Quadro 12 Análise dos elementos de um programa Instruções legíveis por máquina A definição implica na existência de uma máquina que lê instruções O termo instruções indica a intenção de enviar à máquina algo que esta possa entender e que tem por meta instruíla orientála ou comandála a realizar algo Podemos então inferir que qualquer conjunto de instruções legíveis por máquina qualquer que seja a máquina quaisquer quem sejam as instruções podem constituir parte do que chamamos de programa Considerando o fato de que toda máquina inventada pelo ser humano possui uma linguagem artificial com a qual nos comunicamos com a máquina considerando ainda que esta linguagem é composta por cadeias de símbolos que formam sentenças então qualquer sentença numa linguagem artificial pode constituir parte do que chamamos de programa Componentes Esta é uma parte recursiva da definição Um programa é composto por componentes o que implica dizer que um programa pode ser constituído por outros programas menores ou subprogramas Dados Um programa pode conter dados o que significa que um programa não é composto apenas por instruções Conteúdo audiovisual tal como imagens texto gravações ou figuras Qualquer material escrito impresso apresentável em qualquer mídia de comunicação de natureza textual gráfica audível etc pode pertence ou ser parte de um programa Materiais licenciados relacionados Do ponto de vista de natureza física dos materiais que compõem um programa este aspecto veicula a mesma essência de generalidade do item anterior mas torna explícito o fato de que cada uma das partes do programa está relacionada à existência de produtos ou itens que são criados e pertencem a organizações e que portanto estão sujeitos às regras de comercialização distribuição eou uso Atenção Você sabe o que é um software dedicado embarcado Não Leia o texto apresentado no sítio eletrônicaorg disponível em httpwww2 eletronicaorgartigos eletronicadigital linuxemtemporeal FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 10 Podemos inferir que um programa é um artefato complexo que envolve uma grande quantidade de aspectos distintos como Habilidade de comunicação com máquinas através das instruções e dados e seres humanos através de dados manipulados pela máquina e mídias externas à máquina Organização em uma estrutura hierárquica através de seus componentes Sujeito a regras comerciais explícitas pois foi criado por organizações humanas que detem controle sobre sua existência e uso através de uma licença Um produto de software ou software como vamos chamar ao longo do curso é desenvolvido por pessoas normalmente uma equipe e sistematicamente destinado ao uso de outras pessoas chamados de usuários Os eventuais usuários podem ainda ter formações e experiências diferentes o que significa preocupações adicionais no que diz respeito ao desenvolvimento do produto em termos de interface usabilidade e documentação Ainda os produtos de software devem passar normalmente por uma exaustiva bateria de testes dado que os usuários não estarão interessados e nem terão capacidade de detectar e corrigir os eventuais erros de execução 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 não físico como a maioria dos produtos O software é concebido e desenvolvido como resultado de um trabalho de engenharia e não manufaturado no sentido clássico O software não se desgasta ou seja ao contrário da maioria dos produtos o software não se caracteriza por um aumento na possibilidade de falhas à medida que o tempo passa como acontece com a maioria dos produtos manufaturados Outro aspecto importante relativo ao software diz respeito a quantidade de falhas encontradas ao longo do tempo No desenvolvimento de um hardware o número de falhas é alto logo no inicio desse desenvolvimento com a evolução desse desenvolvimento ao longo do tempo esse número é reduzido até chegar em um mínimo aceitável e estável e ao longo do tempo de utilização desgaste esse mesmo hardware tenderá a ter o número de falhas aumentado proveniente agora do desgaste de uso Esse cenário está ilustrado na Figura 12 Diferentemente do hardware no software acontece como na Figura 13 Contudo vale alguns comentários Primeiramente como o software não se desgasta o que se esperava do comportamento do gráfico do número de falhas seria o ilustrado no gráfico azul da figura indicado pelo nome de curva idealizada contudo na realidade observar se o gráfico de cor laranja indicado pelo nome de curva real Com o tempo o software é alterado em função da correção de erros eou inclusão de novos requisitos eou remoção de velhos Esse processo contínuo de mudança normalmente introduz novos erros o que faz com as falhas do software cresçam com o passar do tempo e que tenhamos picos constantes de aumento e redução de falhas Atenção Você sabe o que é licença de uso de software Leia o texto apresentado em httpbloggnustavo com200703licenas desoftwarehtml Você Sabia O software Não é manufaturado Não se desgasta Normalmente é feito sob encomenda A componetização ainda é difícil FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 11 Figura 12 Índice de falhas do hardware Fonte Adaptado de Pressman 2006 Figura 13 Ïndice de falhas do software Fonte Adaptado de Pressman 2006 13 CATEGORIAS E APLICAçõES DE SOFTWARES De acordo com Mowery 1999 o software pode ser dividido em três grandes categorias software de pacote serviços de software software embarcado O 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 ao desenvolvimento customizado de software mas também a atividades como apoio a clientes manutenção treinamento etc O terceiro é o menos conhecido e corresponde a software que funciona em conjunto com uma máquina como por exemplo o software de um telefone celular Além dessas categorias o software também pode ser classificado em função da aplicação podendo ser dividido em básico de tempo real comercial científico e de engenharia embutido de computador pessoal e de inteligência artificial No Quadro 13 descrevemos o que vem a ser cada tipo e alguns exemplos destes Atenção Falamos sobre o que é software e o que software livre Você saberia dizer Leia o texto apresentado em httpptwikipedia orgwikisoftware livre FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 12 Quadro 13 Tipos de aplicações de software Básico Programas de apoio a outros programas Tem como característica maior a interação com o hardware Exemplos compiladores sistemas operacionais De tempo real Monitora analisa e controla eventos do mundo real Responde dentro de restrições de tempo estritas Exemplos sistemas de controle de voo e sinalização de trânsito Comercial Tem como característica maior o fato de serem oferecidas diversas soluções para se resolver o mesmo problema Deste modo fazse necessário avaliar cada produto para que seja feita a compra daquele que melhor lhe atender operações comerciais e tomadas de decisões administrativas Exemplos folhas de pagamento contas a pagar e receber estoques Científico e de engenharia Caracterizase por softwares que processam funções matemáticas complexas São utilizados na Engenharia e em processamento científico Exemplos sistemas de astronomia sistema de controle da dinâmica orbital de naves espaciais biologia molecular etc Embutido São softwares contidos em memória ROM ReadOnly e são usados para controlar produtos e sistemas industriais e de consumo Normalmente se limitam a funções particulares Exemplos sistema de freios ABS controle de combustível controle de teclado para forno microondas etc De computador pessoal Tem como maior característica uma busca pela melhoria das interfaces entre homemmáquina tornando os softwares desta categoria cada vez mais fáceis de utilização Exemplos processamento de textos planilhas eletrônicas diversões etc De inteligência artificial Caracterizase pelo uso de algoritmos não numéricos para resolver problemas que não sejam favoráveis à computação ou à análise direta Conhecidos também como software baseado em conhecimento Exemplos sistemas de reconhecimento de padrões voz digitais íris redes neurais lógica fuzzy sistemas especialistas etc Nos primórdios da computação o desenvolvimento dos programas ou a programação foi visto como uma forma de arte sem utilização de metodologias formais e sem qualquer preocupação com a documentação entre outros fatores importantes Vamos agora conhecer um pouco desse histórico evolutivo 14 HiSTÓRICO DA EvOLUçÃO DO SOFTWARE Os primeiros softwares surgiram na década de 1950 como indicado na figura Figura 13 Nessa época eles eram produzidos de forma totalmente caótica sem qualquer processo sistemático de desenvolvimento não existia qualquer documentação de ajuda e muito menos alguma documentação que especificasse o que o software deveria fazer Normalmente tudo estava na cabeça do programador mesmo e este era o responsável por manter como também utilizar Agora imagine a situação da Empresa quando essa pessoa pedisse demissão ficava em uma situação difícil não Além disso também nessa época os FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 13 softwares produzidos só trabalhavam por lote batch isto é os resultados produzidos pelo software não 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 14 Processo evolutivo do software Fonte PRESSMAN 2006 Já em meados da década de 60 os softwares passaram a ter uma maior interatividade trabalhar em tempo real ser multiusuário passaram a utilizar de bibliotecas e banco de dados para facilitar a programação Nessa época se iniciou também as primeiras discussões sobre as dificuldades de manutenção dos softwares dezenas de linhas de código não documentadas desenvolvidas de forma particular ao estilo do desenvolvedor em operação e algumas vezes realizando atividades críticas Na década seguinte anos 70 houve a introdução das redes de computadores dos mecanismos de distribuição dos softwares e também a concorrência entre as empresas desenvolvedoras Além disso houve também a generalização dos computadores pessoais e consequentemente o crescimento das empresas de softwares Da década de 50 a 70 podemos dizer que o desenvolvimento de software foi marcado pela falta de métodos e ferramentas e uma programação por tentativas e erros Esse cenário trouxe muitas consenquencias para a indústria de software e caracterizou o inicio da crise de software Após a década de 70 até os dias de hoje o desenvolvimento de software foi marcado pela introdução de tecnologias novas como a orientação a objetos o surgimento e barateamento dos computadores com alto poder de processamento e armazenamento e a introdução de sistemas de inteligência artificial por exemplo utilizandose 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 manutenção e etc Vamos conhecer mais sobre esses problemas e suas possíveis causas Saiba Mais Multisuário são softwares utilizados por várias pessoas ao mesmo tempo Atenção Vamos refletir um pouco Para você desenvolver o software é uma arte ou uma engenharia Leia o texto Alguns fundamentos da engenharia de software disponível em httpwww devmediacombr articlesviewcomp forprintasp comp8029 FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 14 15 PROBLEMAS NO DESENVOLVIMENTO DE SOFTWARE E CAUSAS A partir de meados da década de 60 a produção do software é marcada pelos difíceis problemas comumente enfrentados durante o ciclo de desenvolvimento e manutenção 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 8 bilhões de dólares para a Agência Espacial Europeia e levou 10 anos para ser efetivamente concluído O Ariane 5 era um lançador de satélites e tinha o objetivo de manter a supremacia europeia no lançamento de satélites espaciais Contudo após 37 segundos de seu lançamento o mesmo explode destruindo o foguete e a carga avaliada em 500 milhões 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 lançador O desastre ocorreu pela deficiência na execução e elaboração dos testes do sistema Infelizmente esse não é o único exemplo de desastres associado com o erro do software existem exemplos piores que até custaram a vida de pessoas Foi em função de desastres como esse que se passou a estudar e identificar mais claramente os problemas associados ao desenvolvimento de software e suas possíveis causas com a finalidade de encontrar soluções para contornar esses problemas Podemos citar como problemas mais comumente enfrentados os seguintes PRESSMAN 2006 SOMERVILLE 2007 Raramente durante o desenvolvimento de um software é dedicado tempo para coletar dados sobre o processo de desenvolvimento em si devido à pouca quantidade deste tipo de informação as tentativas em estimar a duraçãocusto de produção de um software têm conduzido a resultados bastante insatisfatórios além disso a falta destas informações impede uma avaliação eficiente das técnicas e metodologias empregadas no desenvolvimento A insatisfação do cliente com o sistema concluído ocorre frequentemente devido principalmente ao fato de que os projetos de desenvolvimento são baseados em informações vagas sobre as necessidades e desejos do cliente problema de comunicação entre cliente e fornecedor A qualidade do software é quase sempre suspeita problema resultante da pouca atenção que foi dada historicamente às técnicas de teste de software até porque o conceito de qualidade de software é algo relativamente recente O software existente é normalmente muito difícil de manter em operação o que significa que o custo do software acaba sendo incrementado significativamente devido às atividades relacionadas à manutenção isto é um reflexo da pouca importância dada à manutenibilidade no momento da concepção 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 Comunicação ambígua e imprecisa entre partes envolvidas Complexidade crescente Inconsistências não detectadas em nível de análise projeto e implementações Testes insuficientes Dificuldade em lidar e gerenciar riscos FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 15 Mito 1 Se a equipe dispõe de manual repleto de padrões e procedimentos de desenvolvimento do software então a equipe está apta a encaminhar bem o desenvolvimento Falta de controle sobre propagação de mudanças Automação insuficiente Ubiquidade disponível o tempo todo em qualquer lugar Diversidade de plataformas Comunicação entre o cliente e o desenvolvedor é muito fraca A falta de experiência dos profissionais na condução de projetos de software A falta de treinamento no que diz respeito ao uso de técnicas e métodos formais para o desenvolvimento de software A cultura de programação que ainda é difundida e facilmente aceita por estudantes e profissionais de Ciências da Computação A incrível resistência às mudanças particularmente no que diz respeito ao uso de novas técnicas de desenvolvimento de software que os profissionais normalmente apresentam Alguns das causas desses problemas são provenientes do estabelecimento de falsas verdades que são conhecidas como os mitos de software e algumas delas ainda persistem até os dias de hoje 16 MiTOS DE SOFTWARE 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 161 Mitos de Gerenciamento Os mitos de gerenciamento ou administrativos como chamados por alguns especialistas advém principalmente da gerência em função da pressão de mercado ou cliente pela redução do tempo de entrega e custos dos projetos de softwares Nessa categoria encontramos três principais mitos Isto não é o suficiente para realizar o desenvolvimento do software É necessário que o que conste no dado manual reflita a moderna prática de desenvolvimento de software e que este seja exaustivo com relação a todos os problemas de desenvolvimento que poderão aparecer no percurso Questões como as apresentadas a seguir deveriam ser primeiramente feitas e respondidas para validar o uso ou não do manual e não adotálo como verdade absoluta O manual tem sido amplamente utilizado e validado pelos desenvolvedores As técnicas ilustradas ou apresentadas no manual são adequadas ao tipo de software em desenvolvimento O manual realmente é completo FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 16 Mito 3 Se o desenvolvimento do software estiver atrasado basta aumentar a equipe para honrar o prazo de desenvolvimento Mito 4 Uma descrição breve e geral dos requisitos do software é o suficiente para iniciar o seu projeto maiores detalhes podem ser definidos posteriormente Mito 5 Os requisitos de projetos mudam continuamente durante o seu desenvolvimento mas isto não representa um problema uma vez que o software é flexível e poderá suportar facilmente as alterações Em relação ao mito 2 podese que dizer que ter à sua disposição o último modelo de computador pode ser bastante confortável para o desenvolvedor do software mas não oferece nenhuma garantia quanto à qualidade do software desenvolvido Mais importante do que ter um hardware de última geração é ter ferramentas para a automatização do desenvolvimento de software as ferramentas CASE Isto também dificilmente vai ocorrer na realidade Alguém disse um dia que acrescentar pessoas em um projeto atrasado vai tornálo ainda mais atrasado De fato a introdução de novos profissionais numa equipe em fase de condução de um projeto vai requerer uma etapa de treinamento dos novos elementos da equipe para isto serão utilizados elementos que estão envolvidos diretamente no desenvolvimento o que vai consequentemente implicar em maiores atrasos no cronograma 162 Mitos do Cliente Este é um dos problemas que certamente pode conduzir um projeto ao fracasso o cliente deve procurar definir o mais precisamente possível todos os requisitos importantes para o software funções desempenho interfaces restrições de projeto e critérios de validação são alguns dos pontos determinantes do sucesso de um projeto O mito 5 é muito importante e vale realmente entendêlo bem caso queira seguir realmente a profissão de desenvolvedor de software Ele diz respeito a um problema muito comum encontrado no desenvolvimento de software até os dias hoje É verdade que o software é flexível em relação a alteração de seus requisitos iniciais pelo menos mais flexível do que a maioria dos produtos manufaturados mas isso acarreta em alterações também nos prazos e custos do projeto por mais simples que a mudança possa aparentar O fator de multiplicação nos custos de desenvolvimento do software devido a alterações nos requisitos cresce em função do estágio de evolução do projeto como mostra a figura 15 Isto é quanto mais tardia uma falha nos requisitos é encontrada maior o custo de corrigila Isso é um ponto muito importante É importante ressaltar também que apesar desse mito ser classificado como do tipo cliente pois normalmente as mudanças de requisitos do software partem do cliente esse mito também pode estar associado ao gerenciamento e ao profissional desenvolvedor Que quando requisitado a estimar ou estudar os impactos de mudança de requisito o faz de maneira inadequada ou otimista demais esquecendo de avaliar os impactos possíveis da mudança Por exemplo avalia apenas o impacto de modificação do código mas esquece que aquela poderá demandar mudanças de documentação dos tipos e casos de testes da usabilidade etc Mito 2 A equipe tem ferramentas de desenvolvimento de software de última geração uma vez que eles dispõem de computadores de última geração Você Sabia De acordo com uma pesquisa realizada pela Standish Group 36 das falhas dos projetos de software estão associadas a espicificação e mudanças de requisitos Para saber mais leia o texto apresentado no sítio Byte Byte Disponível em wwwbatebyteprgov brmodulesconteudo conteudophp conteudo1599 FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 17 Mito 6 Após a edição do programa e sua colocação em funcionamento o trabalho está terminado Mito 7 Enquanto o programa não entra em funcionamento é impossível avaliar sua qualidade Mito 8 O produto a ser entregue no final do projeto é o programa funcionando Figura 15 Influência das alterações de requisitos no custo de um sistema 163 Mitos do Profissional Os mitos do profissional estão muito associados ao fato dos profissionais considerarem o desenvolvimento de software como uma arte e não uma engenharia A realidade é completamente diferente do que o mito 6 diz Segundo dados de pesquisas 50 a 70 do esforço de desenvolvimento de um software é despendido após a sua entrega ao cliente manutenção Observase normalmente que quando o software passa para operação são encontradas muitas novas falhas ou novas necessidades a serem corrigidas e incluídas no software em operação Essas mudanças demandam custos e prazos razoáveis para serem realizadas A garantia da qualidade do software deve ser uma preocupação continua e presente em todas as etapas e fases do desenvolvimento do software não apenas na entrega final Atualmente existem várias técnicas de revisão de software com esse objetivo Normalmente o programa em funcionamento é uma das componentes do software a ser entregue ao final do projeto Contudo outros componentes podem fazer parte dessa entrega Por exemplo faz parte dessa entrega de componentes os manuais de utilização os planos e os resultados de testes a especificação de requisitos dentre outros componentes desenvolvidos durante o ciclo de produção do software O que vimos até aqui demonstra que as características intrínsecas do software bem como a falta de métodos metodologias e ferramentas adequadas e sistemáticas para a produção desses levaram e levam a indústria de software a enfrentar diversos problemas muitos desses até difíceis de serem contornados até os dias de hoje Essa situação força tanto a indústria como academia a repensar os mecanismos adotados para a produção FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 18 do software encontrando na engenharia o suporte base para fazer dessa produção uma sistemática mais previsível e mensurável daí a Engenharia de Software é o que veremos no próximo capítulo Atividades e Orientações de Estudos Para melhor assimilar o conteúdo deste capítulo sugerimos algumas atividades de fixação Como o assunto é simples e bem objetivo teremos basicamente os seguintes tipos de atividades para esse capítulo Atividades práticas representam questões simples e objetivas sobre o assunto aqui abordado Na prática bastará estudar o assunto contido no capítulo para respondêlas corretamente Atividades de pesquisas representam tópicos de pesquisas dirigidos não muito extensos Para cada tópico de pesquisa sugerido indicaremos fontes que poderão auxiliar na pesquisa mas você terá total liberdade de consultar outras fontes caso deseje Em cima do tópico sugerido definimos algumas questões que deverão ser respondidas Sugerimos ainda que as atividades de pesquisa sejam feitas em equipe pois isso favorece o aprendizado e enriquece a discussão sobre o assunto Atividades de interação correspondem atividades que visam discutir sobre o assunto nos fóruns criados para o curso E não esqueça na dúvida sintase à vontade em perguntar Interaja com seus colegas nos fóruns e chats participe Estamos aqui para auxiliar uns aos outros na construção do saber Segue alguns exemplos de atividades respondidas eou comentadas que serão encontradas neste capítulo Não forneceremos exemplos de atividades de interação elas são atividades simples e caracterizadas pelas discussões abertas nos fóruns Atividades Práticas 1 Forneça duas definições para software Resposta Podemos mencionar várias definições já formalizadas para o que é software dentre elas as definidas por especialistas da área como Presmman 2006 ou Somerville 2003 e que inclusive foram citadas no texto Contudo iremos responder a pergunta com uma das definições dadas na Wikipedia do termo software e a outra em função do que foi mencionado no capítulo Assim duas definições corretas para o software são Software ou logiciário é uma sequência de instruções a serem seguidas eou executadas na manipulação redirecionamento ou modificação de um dado informação ou acontecimento Wikipedia O software também pode ser definido como um programa de computador representado uma entidade abstrata e que fornece meios pelos quais exploramos os recursos do hardware executamos determinadas tarefas resolvemos problemas interagimos com a máquina tornamos o computador operacional 2 Quais as características do software Você Sabia Wikipedia Termo Software disponível em http ptwikipediaorgwiki Software FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 19 Resposta De acordo com o explicado no capítulo podemos destacar as seguintes características para o software O software não é um elemento físico é um elemento lógico não tem propriedades físicas como visualizar medir Possui uma abstração maior o produto final é diferente O software não pode ser manufaturado isto é os custos estão concentrados no desenvolvimento e não na manufatura O processo de gerenciamento é diferente o relacionamento entre as pessoas é diferente Existem diferentes abordagens para se chegar no produto final O software não se desgasta com o uso mas deteriorase Não há peças de reserva manutenção correçãoaperfeiçoamento A construção através de componentes prontos ainda não é uma realidade total Um erro durante um teste erro de projeto mais difícil de testar Atividades de Pesquisa 1 Pesquise um problema causado por erros de software Descrevaos e comente sobre eles Analiseos e verifique se eles foram provenientes de algum mito de software Resposta Um problema que ficou muito conhecido na década de 80 foi referente a máquina Therac25 Essa máquina era responsável pela radioterapia controlada por computador muito moderna para sua época por permitir a utilização do mesmo equipamento para a aplicação de diversas doses de radiação nos pacientes Houve uma série de pelo menos 6 acidentes entre 1985 e 1987 nos quais os pacientes receberam overdose de radiação Pelo menos cinco mortes aconteceram devido aos acidentes causados por erros no software que controlava a máquina Este acidente mostrou o perigo que reside em softwares que controlam operações de segurança Pesquisadores que investigaram os acidentes encontraram diversas causas que contribuíram para os acidentes acontecerem Entre elas estavam alguns erros de desenvolvimento que poderiam ter sido evitados como O código do software não havia sido revisadotestado independentemente O projeto do software não havia sido documentado com detalhes suficientes para permitir o entendimento dos erros A documentação do sistema fornecida aos usuários não explicava o significado dos códigos de erro que a máquina retornava Os pesquisadores também encontraram diversos problemas de engenharia O projeto não continha travas de hardware para previnir que o feixe de elétrons de alta intensidade fosse aplicado sem o filtro estar em seu lugar Atenção Ficou curioso em conhecer mais sobre o problema do therac25 Uma versão completa do fato é encontrada no sítio descrito abaixo mas o texto está em inglês Thrac25 Disponível em httpsunnydaymit edupaperstherac pdf FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 20 Atenção As respostas das questões dessa seção podem ser facilmente encontradas relendo os texto do capítulo Aproveite a oportunidade para fixar melhor os pontos principais do conteúdo abordado no capítulo O software de modelos mais antigos havia sido reutilizado sem se considerar as diferenças no hardware Os modelos antigos possuiam travas de hardware quando o bug se manifestava nestes modelos eles reiniciavam o que sempre havia sido visto como algo perturbador mas nunca foi investigado O software considerava que os sensores sempre funcionavam corretamente e não havia como verificar isto O sistema de controle não operava sincronizado com a interface usada pelo operador da máquina e caso o operador mudasse a configuração da máquina muito rapidamente o sistema não atribuia os valores digitados para os controles o que levava a aplicação das doses letais Overflows podiam fazer o software não executar procedimentos de segurança O caso de Therac25 suas causas e consequências é hoje um tema de estudo constante na história da computação e da medicina Uma vez mostrado alguns exemplos de atividades respondidas na próxima seção passemos às atividades propostas a serem respondidas por você e colegas de curso Aprenda Praticando Exercício Proposto 11 Tomando com base o que foi explicado no capítulo responda as questões abaixo justificando suas respostas quando apropriado 1 O que é o software E quais suas características base 2 A definição de software dada nesse capítulo se aplica a sites web Indique as principais diferenças entre um site e um software convencional se houver Fonte PRESSMAN 2006 3 Qual a importância do software para a sociedade atual 4 À medida que o software tornase mais difundido os riscos para o público por causa de programas errados tornamse uma preocupação crescente e significativa Desenvolva um cenário catastrófico em que a falha de um programa de computador pode provocar grande prejuízo econômico ou humano Fonte PRESSMAN 2006 5 Qual a relação entre a evolução do software e a engenharia de software 6 Cite 2 problemas relacionados com o desenvolvimento de software e analise suas causas e consequências FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 21 Dica Segue algumas fontes para auxiliar na pesquisa sobre software livre Software livre Disponível em httpwwwsoftwarelivregovbrartigos BRlinux Faq sobre software livre Disponível em httpbrlinuxorgfaqsoftwarelivre Aprenda Pesquisando Pesquisa Proposta 11 A fim de aprofundar um pouco mais seu conhecimento sobre os conceitos e características básicas do software selecionamos alguns tópicos para pesquisa 1 Pesquise pelo menos 2 problemas causados por erros de software Descrevaos e comente sobre eles Analiseos e verifique se eles foram provenientes de algum mito de software 2 Pesquise pelo menos 2 produtos de categorias diferentes onde o software faz a diferença 3 Pesquise sobre o que é software livre e quais suas características Comente também que tipos de problemas são normalmente encontrados no desenvolvimento de software livre Eles são os mesmos encontrados no software proprietário Aprenda Interagindo Exercício de Interação 11 Utilizando os fóruns do curso realize as atividades de interação propostas a seguir Sugerimos que seja criado um fórum especifico para o capitulo dessa forma tornase fácil a indexação das discussões no curso para consulta e análise posterior 1 Adotando o fórum do curso como meio de comunicação e expressão de ideias comente sobre os seguintes tópicos a A habilidade em construir software deixa a desejar em relação ao potencial do hardware b A construção de software não é rápida o suficiente para atender as necessidades do mercado c Em sua opinião quais os mitos de software que mais persistem ainda hoje na produção do software Conheça Mais Para conhecer um pouco mais sobre os aspectos mais importantes do software recomendamos algumas leituras adicionais Para complementar o estudo do software e suas características recomendamos a FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 22 Você Sabia As exportações brasileiras de serviços de tecnologia da informação TI deverão ultrapassar 2 bilhões de dólares até o fim de 2009 mas a cifra não é motivo para comemoração A Índia vendeu a outros países no ano passado mais de 40 bilhões de dólares e pretende chegar a 47 bilhões neste ano Se quiser aumentar sua fatia no bolo mundial do setor o Brasil terá de deixar de lado a briga por custo e apostar nos segmentos em que é capaz de superar a concorrência como a produção de software livre A avaliação é do presidente do Everest Group Peter Bendor Samuel que veio a São Paulo participar da quinta edição do Seminário Brasil Outsourcing Fonte É possível brigar com os indianos online Disponivel em httpwwwabesorgbrtempl3aspxid434sub481 Você Sabia Enquanto os donos do mundo do software sofrem com a recessão o código aberto emerge e é adotado por cada vez mais pessoas Segundo pesquisa realizada em fevereiro pela IDC com executivos de tecnologia da informação 65 dos 330 entrevistados pretendem ampliar o uso de Linux em 10 ou mais em 2009 Para os pesquisadores tal aceleração é resultado de uma forte redução de custos e interoperabilidade com Windows Além disso o Linux é distribuído gratuitamente e o suporte técnico da Red Hat Novell e outros fornecedores é contratado via assinatura anual informa o site PSL Brasil De acordo com a pesquisa outra razão do crescimento do Linux é a influência de mercados emergentes onde o Windows ainda não domina os usuários finais Fonte Crise do software online Disponível em httpturcoluisblogspotcom200905crisedosoftwareproprietarioeohtml leitura do texto Qual a prática do desenvolvimento de software do prof Jorge Henrique Cabral Fernandes do Departamento de Informática e Matemática Aplicada da UFRN Esse texto pode ser encontrado em formato eletrônico em http cienciaeculturabvsbrscielophppids000967252003000200021scriptsci arttext Em forma de tópico o sítio Utilidades Públicas apresenta o ranking dos 10 maiores desastres causados por erros de softwares Ficou curioso em conhecer mais Consulteo o sítio está disponível em httputilidadespublicaswordpress com20090308top10osmaioresdesastrescausadosporerrosinformaticos dahistoria O texto é simples e a leitura rápida Sabemos que o termo software livre é bem divulgado nos últimos anos caso você ainda não saiba do que se trata o sítio GNU apresenta um texto com uma boa descrição sobre o tema Para saber mais consulte httpwwwgnuorg philosophyfreeswptbrhtml Outro sítio que também fala a respeito do software livre é httpbrlinuxorgfaqsoftwarelivre Veja algumas curiosidades atualizadas sobre a crise de software FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 23 Vamos Revisar Você estudou neste capítulo que o software representa uma entidade lógica e abstrata E que devido as suas características intrínsecas não manufaturado não se desgata etc ocasiona problemas adicionais em sua produção Contudo a importância adquirida pelo software nos dias de hoje exige uma produção mais eficiente e principalmente de maior qualidade Visando a atingir esse objetivo especialistas da área de desenvolvimento de software passam a adotar práticas da engenharia para que uma maior qualidade seja atingida na produção do software dando inicio a disciplina de Engenharia de Software FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 24 CAPíTULO 2 O que vamos estudar neste capítulo Neste capítulo vamos estudar os seguintes temas Introduzir o conceito de Engenharia de Software ES Apresentar o papel do processo do método e das ferramentas em ES Modelos de processo Metas Após o estudo deste capítulo esperamos que você consiga Descrever o que é Engenharia de Software Descrever o papel do processo dos métodos e ferramentas dentro da ES Identificar as características mais relevantes de software Identificar os principais problemas associados ao desenvolvimento de software FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 25 CAPíTULO 2 INTRODUçÃO À ENGENHARIA DE SOFTWARE Vamos conversar sobre o assunto Estudamos o que representa o software mas o que é mesmo Engenharia de Software Aqui veremos um pouco da importância desta disciplina na produção de softwares de maior qualidade tudo para atender uma exigência de mercado e sociedade que precisam de softwares cada vez mais sofisticados complexos corretos e com custos mais baixos Este capítulo tem como objetivo introduzir a disciplina de Engenharia de Software fornecendo a definição base e os modelos de desenvolvimento comumente encontrados 21 INTRODUçÃO À ENGENHARIA DE SOFTWARE A Engenharia de Software ES surgiu em meados dos anos 70 numa tentativa de contornar a crise do software e dar um tratamento de engenharia mais sistemático e controlado ao desenvolvimento de sistemas de software complexos como já mencionamos no capítulo anterior Um sistema de software complexo se caracteriza por um conjunto de componentes abstratos de software estruturas de dados e algoritmos encapsulados na forma de procedimentos funções módulos objetos ou agentes interconectados entre si compondo a arquitetura do software que deverão ser executados em sistemas computacionais Na Figura 21 é ilustrado os componentes que constituem um software segundo a ES FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 26 Figura 21 Componentes do software Como já mencionado muitos dos problemas associados a Engenharia de Software está associada a natureza do produto gerado o software Fica evidente que os problemas enfrentados pela Engenharia de Software não irão ser resolvidos da noite para o dia mas reconhecer a existência dos problemas e definílos da forma mais precisa e eficaz são sem dúvida um primeiro passo para a sua solução É preciso estar ciente também de que não existe uma abordagem mágica que seja a melhor para a solução dos problemas associados com a produção de software mas uma combinação de métodos que sejam abrangentes a todas as etapas do desenvolvimento de um software Além disto é importante e desejável que estes métodos sejam suportados por um conjunto de ferramentas que permita automatizar o desenrolar destas etapas juntamente com uma definição clara de critérios de qualidade e produtividade de software São estes aspectos que caracterizam de maneira mais influente a disciplina de Engenharia de Software Na literatura podese encontrar diversas definições da Engenharia de Software O estabelecimento e uso de sólidos princípios de engenharia para que se possa obter economicamente um software que seja confiável e que funcione eficientemente em máquinas reais NAU 1969 A aplicação prática do conhecimento científico para o projeto e a construção de programas computacionais e a documentação necessária à sua operação e manutenção BOEHM 1976 Abordagem sistemática para o desenvolvimento a operação e a manutenção de software AFNOR 83 Conjunto de métodos técnicas e ferramentas necessárias à produção de software de qualidade para todas as etapas do ciclo de vida do produto KRAKOWIAK 1985 Engenharia de Software é uma disciplina da engenharia que está concentrada em todos os aspectos da produção de software SOMMERVILLE 2007 Disciplina que integra processo métodos e ferramentas para o desenvolvimento de software PRESSMAN 2006 Num ponto de vista mais formal a Engenharia de Software pode ser definida Você Sabia Custo com software geralmente dominam os custos com sistemas computacionais O custo de software em um PC é normalmente maior que o custo de hardware FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 27 como sendo a aplicação da ciência e da matemática através das quais os equipamentos computacionais são colocados à disposição do homem por meio de programas procedimentos e documentação associada De modo mais objetivo podese dizer que a Engenharia de Software busca prover a tecnologia necessária para produzir software de alta qualidade a um baixo custo Os dois fatores motivadores são essencialmente a qualidade e o custo A qualidade de um produto de software é um parâmetro cuja quantificação não é trivial apesar dos esforços desenvolvidos nesta direção Por outro lado o fator custo pode ser facilmente quantificado desde que os procedimentos de contabilidade tenham sido corretamente efetuados 22 CONCEITOS CHAVES DA ENGENHARIA DE SOFTWARE A Engenharia de Software pode ser vista como uma tecnologia em camadas como ilustra na Figura 22 As camadas representadas pelas ferramentas métodos processos constituem os componentes chaves da disciplina ES e a última camada representa o objetivo maior da disciplina de Engenharia de Software Figura 22 Componentes da Engenharia de Software Fonte Adaptado de Pressman 2006 Na base indicada por 1 na figura acima temse o foco na qualidade objetivo principal pelo qual as práticas de engenharia têm sido adotadas na produção do software O gerenciamento da Qualidade Total e filosofias similares produzem uma mudança cultural que permite o desenvolvimento crescente de abordagens mais maduras para a Engenharia de Software No nível seguinte indicado por 2 temse a camada intermediaria que liga as camadas de tecnologia e permite um desenvolvimento de software racional e em tempo define um conjunto de áreas chave do processo que deve ser estabelecido para um uso efetivo da Engenharia de Software Essa camada contem o de guia de processo definindo quais atividades devem ser seguidas para produzir o software de qualidade Por exemplo todo código produzido deve ser testado primeiramente pelo programador antes de sua liberação Em outras palavras processo de software constitui um conjunto de atividades com o objetivo de desenvolver ou evoluir um software O nível 3 caracteriza o como fazer Os métodos englobam um conjunto de tarefas que inclui análise de requisitos projeto construção de programas teste e manutenção Métodos de software representam uma abordagem estuturada para desenvolvimento do software que incluem modelos de sistemas notações regras guias de processos recomendações etc Os modelos de sistemas representam modelos gráficos que devem ser produzidos Por exemplo diagramas de modelo de objetos diagrama de fluxo de FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 28 dados diagrama de máquina de estado definido pelo paradigma de orientação a objetos As regras são restrições aplicadas aos modelos gráficos Por exemplo toda entidade no diagrama de objetos deve ter um único nome As recomendações representam heurísticas que caracterizam boa prática de projeto nesse método Por exemplo nenhum objeto deve ter mais que sete subobjetos O nível superior representa o instrumento apropriado As ferramentas dão suporte automatizado ou semiautomatizado ao processo e aos métodos por exemplo editores ou geradores de código Quando as ferramenta se integram temse um sistema denominado CASE Computer Aided Software Engineering 23 PARADIGMAS DA ES Um modelo de desenvolvimento corresponde a uma representação abstrata do processo de desenvolvimento que vai em geral definir como as etapas relativas ao desenvolvimento do software serão conduzidas e interrelacionadas para atingir o objetivo do desenvolvimento que é a obtenção de um produto de software de alta qualidade a um custo relativamente baixo Por exemplo para a ES todo o software passa por um ciclo de desenvolvimento apoiado por um processo Porém independente do processo de software adotado haverá sempre um conjunto de atividades e fases básicas necessárias a produção do software Essas atividades e fases genéricas são Especificação o que o sistema deverá fazer e quais as restrições de desenvolvimento Desenvolvimento produção do sistema de software projetado e programado Validação verifica se o software é o que o cliente deseja Evolução mudanças do software em função da demanda que podem ser requisitos dos clientes ou do mercado Os modelos de processo representam paradigmas da ES Nesse sentido podemos dizer que há diversos paradigmas conjunto de etapas que envolvem métodos ferramentas e procedimentos relacionados As seções que seguem vão descrever alguns dos modelos de processos conhecidos e utilizados em desenvolvimento de software 231 O Modelo em Cascata Este é o modelo mais simples de desenvolvimento de software estabelecendo uma ordenação linear no que diz respeito à realização das diferentes etapas Como mostra a Figura 23 o ponto de partida do modelo é uma etapa de Engenharia de Sistemas onde o objetivo é ter uma visão global do sistema como um todo incluindo hardware software equipamentos e as pessoas envolvidas como forma de definir precisamente o papel do software neste contexto Em seguida a etapa de Análise de Requisitos vai permitir uma clara definição dos requisitos de software sendo que o resultado será utilizado como referência para as etapas posteriores de Projeto Codificação Teste e Manutenção FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 29 Figura 23 Modelo em Cascata O modelo em cascata apresenta características interessantes particularmente em razão da definição de um ordenamento linear das etapas de desenvolvimento Primeiramente como forma de identificar precisamente o fim de uma etapa de o início da seguinte um mecanismo de certificação ou revisão é implementado ao final de cada etapa isto é feito normalmente através da aplicação de algum método de validação ou verificação Isto significa que ao final de cada etapa realizada deve existir um resultado ou saída a qual possa ser submetida à atividade de certificação Estas saídas obtidas ao final de cada etapa são vistas como produtos intermediários e apresentamse normalmente na forma de documentos documento de especificação de requisitos documento de projeto do sistema etc Outra característica importante deste modelo é que as saídas de uma etapa são as entradas da seguinte o que significa que uma vez definidas elas não devem em hipótese alguma ser modificadas Apesar de ser um modelo bastante popular podese apontar algumas limitações apresentadas por este modelo O modelo assume que os requisitos são inalterados ao longo do desenvolvimento isto em boa parte dos casos não é verdadeira uma vez que nem todos os requisitos são completamente definidos na etapa de análise O modelo impõe que todos os requisitos sejam completamente especificados antes do prosseguimento das etapas seguintes em alguns projetos é às vezes mais interessante poder especificar completamente somente parte do sistema prosseguir com o desenvolvimento do sistema e só então encaminhar os requisitos de outras partes isto não é previsto a nível do modelo FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 30 As primeiras versões operacionais do software são obtidas nas etapas mais tardias do processo o que na maioria das vezes inquieta o cliente uma vez que ele quer ter acesso rápido ao seu produto De todo modo pode vir a ser mais interessante a utilização deste modelo para o desenvolvimento de um dado sistema do que realizar um desenvolvimento de maneira totalmente anárquica e informal 232 Prototipação O objetivo da Prototipação é um modelo de processo de desenvolvimento que busca contornar algumas das limitações existentes no modelo cascata A ideia por trás deste modelo é eliminar a política de congelamento dos requisitos antes do projeto do sistema ou da codificação Isto é feito através da obtenção de um protótipo com base no conhecimento dos requisitos iniciais para o sistema O desenvolvimento deste protótipo é feito obedecendo à realização das diferentes etapas já mencionadas a saber a análise de requisitos o projeto a codificação e os testes sendo que não necessariamente estas etapas sejam realizadas de modo muito explícito ou formal Este protótipo pode ser oferecido ao cliente em diferentes formas a saber Protótipo em papel ou modelo executável em PC retratando a interface homemmáquina capacitando o cliente a compreender a forma de interação com o software Um protótipo de trabalho que implemente um subconjunto dos requisitos indicados Um programa existente pacote que permita representar todas ou parte das funções desejadas para o software a construir Colocado à disposição do cliente o protótipo vai ajudálo a melhor compreender o que será o sistema desenvolvido Além disso através da manipulação deste protótipo é possível validar ou reformular os requisitos para as etapas seguintes do sistema Este modelo ilustrado na Figura 24 apresenta algumas características interessantes tais como É um modelo de desenvolvimento interessante para alguns sistemas de grande porte os quais representem um certo grau de dificuldade para exprimir rigorosamente os requisitos Através da construção de um protótipo do sistema é possível demonstrar a realizabilidade do mesmo É possível obter uma versão mesmo simplificada do que será o sistema com um pequeno investimento inicial FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 31 Figura 24 Esquema de evolução da prototipação Os protótipos não são sistemas completos e deixam normalmente a desejar em alguns aspectos Um destes aspectos é normalmente a interface com o usuário Os esforços de desenvolvimento são concentrados principalmente nos algoritmos que implementem as principais funções associadas aos requisitos apresentados a interface sendo a este nível parte supérflua do desenvolvimento o que permite caracterizar esta etapa por um custo relativamente baixo Por outro lado a experiência adquirida no desenvolvimento do protótipo vai ser de extrema utilidade nas etapas posteriores do desenvolvimento do sistema real permitindo reduzir certamente o seu custo resultando também num sistema melhor concebido 233 Desenvolvimento Iterativo Este modelo também foi concebido com base numa das limitações do modelo cascata e combinar as vantagens deste modelo com as do modelo Prototipação A ideia principal deste modelo ilustrada na Figura 25 é a de que um sistema deve ser desenvolvido de forma incremental sendo que cada incremento vai adicionando ao sistema novas capacidades funcionais até a obtenção do sistema final sendo que a cada passo realizado modificações podem ser introduzidas Uma vantagem desta abordagem é a facilidade em testar o sistema uma vez que a realização de testes em cada nível de desenvolvimento é sem dúvida mais fácil do que testar o sistema final Além disso como na Prototipação a obtenção de um sistema mesmo incompleto num dado nível pode oferecer ao cliente interessantes informações que sirvam de subsídio para a melhor definição de futuros requisitos do sistema No primeiro passo deste modelo uma implementação inicial do sistema é obtida na forma de um subconjunto da solução do problema global Este primeiro nível de sistema deve contemplar os principais aspectos que sejam facilmente identificáveis no que diz respeito ao problema a ser resolvido Um aspecto importante deste modelo é a criação de uma lista de controle de projeto a qual deve apresentar todos os passos a serem realizados para a obtenção do sistema final Ela vai servir também para se medir num dado nível o quão distante se está da última iteração Cada iteração do modelo de desenvolvimento iterativo consiste em retirar um passo da lista de controle de projeto através da realização de três etapas o projeto a implementação e a análise O processo avança sendo que a cada etapa de avaliação um passo é retirado da lista até que a lista esteja completamente vazia A lista de controle de FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 32 projeto gerencia todo o desenvolvimento definindo quais tarefas devem ser realizadas a cada iteração sendo que as tarefas na lista podem representar inclusive redefinições de componentes já implementados em razão de erros ou problemas detectados numa eventual etapa de análise Figura 25 O modelo Desenvolvimento Iterativo 234 O Modelo Espiral Este modelo proposto em 1988 sugere uma organização das atividades em espiral a qual é composta de diversos ciclos Como mostrado na figura 26 a dimensão vertical representa o custo acumulado na realização das diversas etapas a dimensão angular representa o avanço do desenvolvimento ao longo das etapas Cada ciclo na espiral inicia com a identificação dos objetivos e as diferentes alternativas para se atingir aqueles objetivos assim como as restrições impostas O próximo passo no ciclo é a avaliação das diferentes alternativas com base nos objetivos fixados o que vai permitir também definir incertezas e riscos de cada alternativa No passo seguinte o desenvolvimento de estratégias permitindo resolver ou eliminar as incertezas levantadas anteriormente o que pode envolver atividades de prototipação simulação avaliação de desempenho etc Finalmente o software é desenvolvido e o planejamento dos próximos passos é realizado A continuidade do processo de desenvolvimento é definida como função dos riscos remanescentes como por exemplo a decisão se os riscos relacionados ao desempenho ou à interface são mais importantes do que aqueles relacionados ao desenvolvimento do programa Com base nas decisões tomadas o próximo passo pode ser o desenvolvimento de um novo protótipo que elimine os riscos considerados Por outro lado caso os riscos de desenvolvimento de programa sejam considerados os mais importantes e se o protótipo obtido no passo corrente já resolve boa parte dos riscos ligados a desempenho e interface então o próximo passo pode ser simplesmente a evolução segundo o modelo cascata Como se pode ver o elemento que conduz este processo é essencialmente a consideração sobre os riscos o que permite de certo modo a adequação a qualquer processo de desenvolvimento FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 33 Figura 26 O modelo espiral Uma característica importante deste modelo é o fato de que cada ciclo é encerrado por uma atividade de revisão onde todos os produtos do ciclo são avaliados incluindo o plano para o próximo passo ou ciclo Numa aplicação típica do modelo podese imaginar a realização de um ciclo zero onde se avalie a viabilidade do projeto o resultado devendo ser a conclusão de que será possível implementar ou não o projeto de desenvolvimento As alternativas consideradas neste caso são de muito alto nível como por exemplo se a organização deve desenvolver o sistema ela própria ou se deve contratar o desenvolvimento junto a uma empresa especializada O modelo se adequa principalmente a sistemas que representem um alto risco de investimento para o cliente Atividades e Orientações de Estudos Para melhor assimilar o conteúdo deste capítulo sugerimos algumas atividades de fixação exatamente como o capitulo anterior Como o assunto é simples e bem objetivo teremos basicamente os mesmos tipos de atividades definidos para o capítulo anterior são elas Atividades práticas representam questões simples e objetivas sobre o assunto aqui abordado Na prática bastará estudar o assunto contido no capítulo para respondêlas corretamente Atividades de pesquisas representam tópicos de pesquisas dirigidos não muito FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 34 Atenção As respostas das questões dessa seção podem facilmente encontradas relendo os texto do capítulo Aproveite a oportunidade para fixar melhor os pontos principais do conteúdo abordado no capítulo extensos Para cada tópico de pesquisa sugerido indicaremos fontes que poderão auxiliar na pesquisa mas você terá total liberdade de consultar outras fontes caso deseje Em cima do tópico sugerido definimos algumas questões que deverão ser respondidas Sugerimos ainda que as atividades de pesquisa sejam feitas em equipe pois isso favorece o aprendizado e enriquece a discussão sobre o assunto Atividades de interação correspondem atividades que visam discutir sobre o assunto nos fóruns criados para o curso Como as atividades seguem o mesmo modelo do capitulo anterior não forneceremos exemplos respondidos Caso tenha duvidas a respeito consultenos Estamos aqui para auxiliar uns aos outros na construção do saber Aprenda Praticando Exercício Proposto 21 Tomando com base o que foi explicado no capítulo responda as questões abaixo justificando suas respostas quando apropriado 1 Forneça pelo menos 2 diferentes definições para a Engenharia de Software 2 O que é um processo de software 3 O que é um método 4 Para que servem as ferramentas em ES 5 O que é um modelo de processo de software 6 Faca um comparativo descrevendo as vantagens e desvantagens dos modelos de processo explicados neste capitulo 7 Descreva que fases e atividades de desenvolvimento são normalmente encontradas na produção de um software independente do modelo de processo adotado Aprenda Pesquisando Pesquisa Proposta 21 A fim de aprofundar um pouco mais seu conhecimento sobre a Engenharia de Software e seus paradigmas selecionamos alguns tópicos para pesquisa 1 Pesquise outros modelos de processos de software Descreva pelo menos 1 e diga em que situação eles são apropriados descreva as vantagens e as desvantagens sobre ele FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 35 Aprenda Interagindo Exercício de Interação 21 Utilizando os fóruns do curso realize as atividades de interação propostas a seguir Sugerimos que seja criado um fórum especifico para o capitulo dessa forma tornase fácil a indexação das discussões no curso para consulta e análise posterior 1 Com base nas figuras abaixo discuta com seus colegas seu significado para a Engenharia de Software a O que serve para um cliente pode não servir para um outro b Não estabeleça prazos que não possa cumprir c Usuários odeiam erros bugs FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 36 Você Sabia O portal da IEEE disponibiliza livremente um exemplo de curriculum base de conhecimento para o curso de Engenharia de Software Consulteo Disponivel em httpwwwcomputerorg portalcdocumentlibrarygetfileplid1330505folderId1337155nameDLFE22803 pdf Fonte Portal IEEE Cinema em Ação Para complementar o conhecimento que foi exposto neste capítulo você pode acessar algumas videoaulas de apenas 10 minutos cada disponibilizado livremente na Internet You Tube O conteúdo é claro objetivo e correto Vale a pena ser visto Videoaula Engenharia de Software Aula 01 Parte 01 Disponível em httpwww youtubecomwatchvFmBWDwTqMbofeaturePlayListp428F1718570CEB96index0 Videoaula Engenharia de Software Aula 01 Parte 02 Disponível em httpwww youtubecomwatchv7jXQlAWaQQfeaturePlayListp428F1718570CEB96index1 Conheça Mais Para conhecer um pouco mais sobre os aspectos mais importantes do software recomendamos algumas leituras adicionais Para complementar o estudo do software e suas características recomendamos a leitura do texto Qual a prática do desenvolvimento de software do prof Jorge Henrique Cabral Fernandes do Departamento de Informática e Matemática Aplicada da UFRN Esse texto pode ser encontrado em formato eletrônico em http cienciaeculturabvsbrscielophppids000967252003000200021scriptsci arttext No sitio da Softex Excellence in Software há várias publicações sobre a industria de software brasileira e internacional A leitura e recomendada caso queira conhecer um pouco mais sobre o desenvolvimento de software no Brasil e no Exterior Disponivel em httpwwwsoftexbrobservatorioindustriaBrasildefaultasp Quem deseja conhecer sobre novas metodologias de desenvolvimento recomendamos a leitura do artigo de Martim Fowler intitulado de A Nova metodologia Uma tradução esta disponivel em httpsimpluscombrartigosa novametodologia Saiba mais sobre o desenvolvimento de software no Brasil consultando a ABES Associacao Brasileira de Empresas de Software Disponivel em httpwwwabes orgbrtempl1aspxid1sub1 Veja algumas curiosidades atualizadas sobre Engenharia de Software FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 37 Vamos Revisar As economias de todos os países dependem de sistemas complexos baseado em computadores Mais e mais sistemas são controlados por software Crise de software 1968 originou o conceito de Engenharia de software Alem disso as despesas com software representam hoje uma fração significativa dos gastos de todos os países desenvolvidos Engenharia de Software se concentra nas teorias métodos e ferramentas para desenvolvimento de software profissional FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 38 CAPíTULO 3 O que vamos estudar neste capítulo Neste capítulo vamos estudar os seguintes temas O que é o SWEBOK Quais os objetivos do SWEBOK De que o SWEBOK é composto Quais os conhecimentos definidos como base para a ES Que disciplinas mantém relacionamentos com a ES Que tipo de certificação o SWEBOK define para o profissional da ES Metas Após o estudo deste capítulo esperamos que você consiga Descrever o que é SWEBOK e quais os seus objetivos Identificar as áreas de conhecimento chave para uma boa Engenharia de Software FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 39 CAPíTULO 3 CORPO DE CONHECIMENTO DA ENGENHARIA DE SOFTWARE SWEBOK Vamos conversar sobre o assunto Depois de expormos que o software tem uma natureza difícil de ser mensurada e isso tem como consequência uma série de problemas para o desenvolvimento de software e que visando uma melhoria nesse desenvolvimento passouse adotar práticas da engenharia Nesse sentido surge uma série de iniciativas para fortalecer o desenvolvimento de software como uma Engenharia uma delas é a criação de um guia contendo o corpo de conhecimento da Engenharia de Software denominado SWEBOK 31 CORPO DE CONHECIMENTO DA ENGENHARIA DE SOFTWARE SWEBOK A fim de promover uma visão consistente das fronteiras e conteúdo da Engenharia de Software no mundo evitando ambiguidades de conceitos e definições além de se transformar em uma iniciativa para fortificar o desenvolvimento de software como uma engenharia e também da própria profissão do engenheiro de software a IEEE Instituto de Engenharia Elétrica e Eletrônica do inglês Institute of Electrical and Electronics Engineers patrocinou o desenvolvimento de um guia chamado abreviadamente de SWEBOK SWEBOK é um acrônimo para a palavra do inglês Guide to the Software Engineering Body of Knowledge e representa um guia para o corpo de conhecimento que constitui a Engenharia de Software Este guia tem a finalidade de servir de referência em assuntos considerados de forma generalizada pela comunidade como pertinentes a área de Engenharia de Software Por exemplo nesse guia são especificadas as áreas de conhecimentos e disciplinas relacionadas da área De forma sumarizada o swebok visa atingir os 5 objetivos básicos mostrado no Quadro 31 Saiba Mais Pode participar da revisão e tradução do SWEBOK como voluntário Não Então consulte o sítio abaixo e veja como Acesse httpwww computerorg portalwebswebok volunteering FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 40 1 Promover uma visão consistente da engenharia de software 2 Deixar claro o lugar e quais os limites da engenharia de software considerando outras disciplinas 3 Caracterizar o conteúdo da engenharia de software 4 Fornecer um acesso local ao corpo de conhecimento da engenharia de software 5 Fornecer uma fundação para o desenvolvimento do currículo e certificação para engenharia de software Quadro 31 Objetivos básicos do SWEBOK O corpo de conhecimento reunido no SWEBOK foi baseado em três grandes categorias conhecimento normalmente aceito conhecimento de pesquisa avançada e conhecimento especializado Mas o que significa conhecimento normalmente aceito de pesquisa avançada e especializado Segundo o SWEBOK conhecimento normalmente aceito é aquele proveniente de práticas tradicionais estabelecidas consolidadas e recomendadas pela maior parte das organizações Esse conhecimento por exemplo representa a base de conhecimento obrigatória do engenheiro de software recomendando estar incluída no currículo base da formação do engenheiro pelo SWEBOK Por exemplo caso você estivesse fazendo uma graduação em Engenharia de Software seria recomendado que o conhecimento básico especificado pelo SWEBOK estivesse presente na grade curricular base desse curso As demais categorias de conhecimentos são consideradas colaborativas e complementares a essa formação Em se tratando de conhecimento de pesquisa avançada podese dizer que corresponde a uma constante averiguação e investigação de novos métodos a serem empregados na Engenharia de Software Enquanto o conhecimento especializado representa métodos específicos que possivelmente se tornarão como aceitos em torno de 3 a 5 anos Quadro 32 Conhecimento do SWEBOK Especializado Práticas usadas apenas por alguns tipos de software Geralmente Aceitas Práticas tradicionais estabelecidas e recomendadas pela maior parte das organizações Pesquisa Avançada Práticas inovadoras usadas apenas por algumas organizações com conceitos a serem desenvolvidos e testados e organizações de pesquisa Segundo o SWEBOK a Engenharia de Software é composta por 10 áreas básicas de conhecimento São elas Requisitos de software é constituída pela aquisição análise especificação e gestão de requisitos de software Projeto de software responsável pela transformação de requisitos de software FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 41 Áreas de conhecimento do SWEBOK 1 Engenharia de Requisitos 2 Projeto de Software 3 Construção do Software 4 Teste de Software 5 Manutenção do Software 6 Gerência de configuração de Software 7 Gerência da Engenharia de Software 8 Processo da Engenharia de Software tipicamente estabelecidos em termos relevantes ao domínio do problema em uma descrição explicando como solucionar os aspectos do problema relacionados com o software Construção do software é representado propriamente pela construção de programas funcionais e coerentes através da codificação autoavaliação e teste unitário Teste de software representa a verificação dinâmica do comportamento do programa através do uso de um conjunto finito de casos de teste contra o comportamento esperado deste Manutenção de software referencia todas as atividades de suporte a um sistema de software que pode ocorrer antes e após a entrega do software Gerência de configuração de software identifica a configuração do sistema características documentadas do hardware e software que o compõem em pontos discretos no tempo de modo a controlar sistematicamente suas mudanças e manter sua integridade e rastreabilidade durante o ciclo de vida do sistema Gerência de Engenharia de Software gerencia de projetos de desenvolvimento de software Processo de Engenharia de Software define implementa mede gerencia modifica e aperfeiçoa o processo de desenvolvimento de software Ferramentas e métodos as ferramentas automatizam o processo de Engenharia de Software e os métodos impõem estruturas sobre a atividade de desenvolvimento e manutenção de software com o objetivo de tornála sistemática e mais propensa ao sucesso Qualidade de software representa o conjunto de atividades relacionadas com a garantia de qualidade de software entre estas as atividades de verificação e validação Daremos uma breve visão de algumas delas durante este curso Quadro 33 Disciplinas que mantém relacionamento com a ES FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 42 Além das áreas de conhecimento mostradas no Quadro acima o SWEBOK também identifica as disciplinas com as quais a Engenharia de Software mantém algum tipo de relacionamento em relação ao conteúdo Em outras palavras queremos dizer que para você ser um bom engenheiro de software terá que possuir conhecimento pelo menos de algum conceito ou definição envolvido com outras disciplinas que mantém relacionamento com a Engenharia de Software dentre elas destacamse a Ciência da Computação Matemática e Ergonomia de Software A lista completa dessas disciplinas podem ser consultadas na Figura 31 Figura 31 Disciplinas que mantém relacionamento com a ES Na revisão prevista para o ano de 2010 o SWEBOK pretende transformar algumas das disciplinas apresentadas na figura acima em área de conhecimento base algumas delas são Ciência da Computação Matemática e Ergonomia de software Isso se deve ao fato dessas disciplinas estarem muito relacionadas ao conhecimento básico exigido do Engenheiro de Software na execução de suas atividades 32 CERTIFICAçõES E RECONHECIMENTO DA PROFISSÃO Como você deve imaginar um dos aspectos necessário para o reconhecimento da profissão é ter um mecanismo para validar a competência e o conhecimento do profissional além disso esse conhecimento deve ser validado com base científica Com base do conjunto básico de conhecimento definido pelo SWEBOK o IEEE oferece duas modalidades de certificação uma voltada para engenheiros e desenvolvedores inexperientes ou recémformados e outro para engenheiros e desenvolvedores experientes são elas CSDA Certificação para o Desenvolvimento de Software e CSDP Certificação do Desenvolvimento Profissional de Software As duas certificações possuem características semelhantes contudo o aprofundamento dos conhecimentos são distintos A certificação CSDA oferece validar os princípios fundamentais de conhecimento necessários ao avanço da carreira do Engenheiro de Software considerado uma forte alavanca na condicionante da experiência estudantil e as reais requisições do mercado de trabalho Já a certificação CSDP confirma a experiência e competência profissional demonstra o comprometimento para expandir a sua capacidade de assumir responsabilidades acrescidas distinção das habilidades e conhecimentos técnicos especializados pessoais e por ventura podem oferecer acesso a grandes redes profissionais 9 Ferramentas e metódos 10 Qualidade de Software Atenção Certamente você já ouviu falar de Ciências da computação e Matemática mas você sabe do que se trata Ergonomia de Software Você Sabia Ergonomia de Software trata do estudo de adaptação dos sistemas informatizados à inteligência humana WISNER 1987 Essa disciplina busca melhorar a capacidade de utilização usabilidade do inglês usability dos softwares por usuários de diferentes características e perfis Ela propõe padrões para apresentação de telas diálogos ferramentas de trabalho menus documentação técnicas de arquivos técnicas de otimização e auxilio help dentre outros Atenção Você saberia dizer qual a diferença entre Engenharia de Software e Engenharia de Sistemas Você saberia citar algum dos conhecimentos pertencentes a Ciência da computação do qual a Engenharia de software depende FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 43 Atividades e Orientações de Estudos Como no capitulo anterior sugerimos algumas atividades de fixação para assimilar melhor o conteúdo do capitulo SWEBOK Como o assunto é simples e bem objetivo exatamente como no capitulo anterior teremos basicamente os seguintes tipos de atividades para esse capítulo Atividades práticas representam questões simples e objetivas sobre o assunto aqui abordado Na prática bastará estudar o assunto contido no capítulo para respondêlas corretamente Atividades de interação correspondem atividades que visam discutir sobre o assunto nos fóruns criados para o curso E não esqueça na dúvida sintase à vontade em perguntar Interaja com seus colegas nos fóruns e chats participe Estamos aqui para auxiliar uns aos outros na construção do saber Seguem alguns exemplos de atividades respondidas eou comentadas que serão encontradas neste capítulo Não forneceremos exemplos de atividades de interação elas são atividades simples e caracterizadas pelas discussões abertas nos fóruns Atividades Práticas 1 Explique o que significa caracterizar o conteúdo da Engenharia de Software Que importância isso tem para área Resposta Caracterizar o conteúdo da Engenharia de Software pode ser entendido como uma definição base do conhecimento mínimo que o engenheiro de software deveria possuir para poder exercer melhor suas futuras responsabilidades profissionais Essa caracterização se torna importante dado que serve como referencia mínima de aprendizado e busca evitar os problemas relacionados com a crise de software como softwares mal projetados erros de estimativas etc 2 Em sua opinião qual o relacionamento entre Ciências da Computação e a Engenharia de software Resposta Ciência da computação se concentra nas teorias e métodos fundamentais da computação já a Engenharia de Software se concentra nos problemas práticos da produção de software Os engenheiros de software deveriam se apoiar nas teorias da computação para resolver os problemas práticos da produção de software Uma vez mostrados alguns exemplos de atividades respondidas na próxima seção passemos às atividades propostas a serem respondidas por você e colegas de curso FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 44 Aprenda Praticando Exercício Proposto 31 Tomando com base o que foi explicado no capítulo responda as questões abaixo justificando suas respostas quando apropriado 1 O que é SWEBOK 2 Quais os objetivos básicos do SWEBOK 3 Quais as áreas de conhecimentos básicas definidas pelo SWEBOK 4 Quais as disciplinas relacionadas com a Engenharia de Software que o SWEBOK estabelece Conheça Mais Para conhecer mais profundamente sobre o SWEBOK você pode consultar os sítios abaixo relacionados A versão online do SWEBOK e disponibilizada livremente no sitio da IEEE Para conhecêla acesse o site httpwwwcomputerorgportalwebswebok Vale salientar que o texto está em inglês Quer saber mais sobre as certificações em ES Leia o artigo disponível em httpwwwctpdifctunlptQUASARResourcesPapersothersencee94 pdf O texto está em português de Portugal Vamos Revisar Como uma iniciativa de sedimentar a área de desenvolvimento de software como uma Engenharia o IEEE juntamente com outros parceiros de renome no desenvolvimento de software formaram um guia contendo o corpo de conhecimento da Engenharia de Software Este guia chamado de SWEBOK contem tanto o conhecimento básico necessário para as atividades do engenheiro de software como também descreve o relacionamento desta disciplina com outras associadas ao exercício da profissão como Ciências da Computação Qualidade de Software Matemática e Ergonomia O intuito é uniformizar o conhecimento base dessa disciplina para que a produção de software seja feita com uma melhor qualidade e profissionalismo FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 45 CAPíTULO 4 O que vamos estudar neste capítulo Neste capítulo vamos estudar os seguintes temas A responsabilidade das atividades do profissional da Engenharia de Software Ética profissional Relacionamento entre ética e o engenheiro de software Código de conduta do engenheiro de software Metas Após o estudo deste capítulo esperamos que você consiga Descrever a importância da ética profissional para a Engenharia de Software Listar um código de conduta profissional para o engenheiro de software FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 46 CAPíTULO 4 ÉTICA E RESPONSABILIDADE PROFISSIONAL Vamos conversar sobre o assunto É muito provável que você já tenha estudado algo sobre a ética e a responsabilidade do profissional da Computação em alguma das disciplinas já estudadas do seu curso Seja você candidato a engenheiroa de software ou programadora ou analista de sistema ou gerente de projeto ou professora adotar uma conduta ética em suas atividades profissionais é essencial para não apenas seu crescimento e sucesso profissional como também para seu crescimento como cidadão Ética na verdade é importante para qualquer profissão não apenas o profissional da Computação no entanto este último hoje vem assumindo um papel cada vez mais importante na sociedade dado ao crescimento da aplicabilidade e importância dos softwares cada vez mais sofisticados complexos e executando atividades cada vez mais críticas Lembrese que você no decorrer de sua profissão provavelmente terá acesso a dezenas de dados confidenciais de Empresas ou pessoas manipuladas pelo software que você trabalhará em algum momento ou que o software que você implementará será responsável por vidas humanas Neste capítulo abordaremos a conduta ética na profissão do engenheiro de software Ao final do capítulo esperamos que você retenha o conhecimento em pontos como A responsabilidade das atividades do profissional da Engenharia de Software Saiba o que é ética profissional Conheça o relacionamento entre ética e o engenheiro de software Conheça o código de conduta do engenheiro de software FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 47 41 RESPONSABILIDADE DO PROFISSIONAL DA ENGENHARIA DE SOFTWARE É muito provável que você já tenha estudado algo sobre a ética e a responsabilidade do profissional da Computação e áreas correlatas como Sistemas de Informação Processamento de Dados etc Apesar dos nomes diferentes todos esses profissionais que atuam na produção de software atuam também na Engenharia de Software Devido a importância que esse tema possui para área iremos falar um pouco mais sobre esse assunto Primeiro vamos falar sobre o profissional da área Pelo que já foi estudado ao longo deste módulo é fácil perceber que o profissional da Engenharia de Software participará direta ou indiretamente das diversas fases de produção de um software seja na análise ou na especificação ou no projeto ou no desenvolvimento codificação na manutenção eou nos testes de software O profissional da Engenharia de Software poderá atuar como programador como um arquiteto como um analista dentre outros diversos papéis observados durante todo o ciclo de vida do software ou pertencente a qualquer área de conhecimento dentro da Engenharia de Software Também já sabemos que os softwares atualmente estão sendo aplicados nos mais diversos setores da indústria academia e do comércio e muitos desses ainda são feitos sob encomenda para atender as necessidades específicas Isto implica muitas vezes do profissional da Engenharia ter acesso a dados confidenciais da Empresa ou Organização ou mesmo dos Clientes da Empresa onde ele trabalha E por que não lembrar dos softwares que atendem sistemas críticos como os aeroespaciais ou relacionados à saúde que qualquer erro no software pode ocasionar mortes de dezenas ou centenas de pessoas E aqueles profissionais que trabalham na manutenção de softwares financeiros como os dos bancos Quanta informação preciosa e responsabilidade terão esses profissionais Assim é muito importante se convencer da responsabilidade que o profissional em Engenharia de Software assumirá no decorrer do ciclo de produção de um software É preciso assumir uma conduta que vise o respeito tanto a si próprio como também aos demais envolvidos nesse ciclo de produção mesmo que seja de forma indireta como é o caso dos usuários finais que utilizarão o software em outro momento Só a conduta ética pode garantir reconhecimento e respeito da sociedade pelo profissional ou por uma área profissional minimizando as chances de esteriótipos degradantes à área A ética profissional para o profissional de Engenharia de Software necessita do estabelecimento do conjunto de valores profissionais e de princípios que orientem as decisões a serem tomadas quanto às questões éticas intrinsecamente ligadas à natureza da profissão confidencialidade privacidade honestidade atualização e competência responsabilidade pelos dados manipulados uso autorizado dos recursos computacionais e de comunicação direito de propriedade de software Mas o que é ética para o profissional de Computação e Engenharia de Software 42 ÉTICA E A ENGENHARIA DE SOFTWARE O termo ética segundo o dicionário é definido como o estudo dos juízos de apreciação referentes à conduta humana suscetível de qualificação do ponto de vista do bem e do mal seja relativamente a determinada sociedade seja de modo absoluto Como disciplina a ética representa uma cadeira teórica da Filosofia configurando ciência por apresentar método e objeto próprios a Ética dedicase à reflexão da Moral ou Você Sabia Você sabia que boa parte de ataques a sistemas de informação ou espionagem industrial em empresas são causados por funcionários internos a empresas Atenção Ética é um ramo da filosofia que estuda o comportamento moral do ser humano classificandoo como bom ou ruim correto ou errado No contexto da Engenharia de Software o que você consideraria como conduta correta ou errada Já pensou sobre isso FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 48 seja dos costumes das tradições das condutas habituais circunscritas a tempo cultura e local específicos Contudo seu objetivo é prático viabilizar um ponto de convergência um modelo referencial que fuja dos paradigmas préconcebidos uma orientação da conduta cotidiana para o indivíduo na dinâmica social estabelecendo relações mais harmônicas e amistosas Ou seja sem querer parecermos pragmáticas a Ética é a reflexão sobre a conduta A palavra ética é há algum tempo frequentadora assídua dos jornais e da TV mas poucos se dão conta de que seu emprego se dá no contexto da ética profissional e de quão fundamental ela é para praticamente todas as profissões ela estabelece os princípios que regulamentam o relacionamento entre o profissional e seus clientes Sem ela não se estabelece o relacionamento de confiança que deve haver entre ambos A violação constante dos princípios éticos por um certo grupo profissional pode causar o descrédito e a desvalorização de qualquer profissão Como imaginar por exemplo que um diagnóstico médico pode estar mascarando o desejo de executar um procedimento mais caro e não o mais indicado para um caso Ou que ao consultar um advogado ele nos aconselhe a entrar num litígio desnecessário ou sem chances de sucesso apenas para ter a oportunidade de receber seus honorários Assim como muitas outras profissões das áreas médicas de humanas e de engenharia o profissional da área de computação também deve seguir rígidos princípios éticos pois se trata de uma profissão altamente técnica que o cliente geralmente não entende podendo facilmente ser enganado Como os computadores e os sistemas computacionais estão cada vez mais presentes em nossas vidas os problemas éticos relacionados aos profissionais da computação aumentaram bastante nos últimos tempos As principais áreas envolvendo problemas éticos são o acesso não autorizado hackers vírus etc a questão da confidencialidade e da inviolabilidade da comunicação por computadores as mensagens eletrônicas o conteúdo de sites da Web pedofilia racismo conteúdos perigosos ao ser humano etc e a violação da confidencialidade e da privacidade dos dados armazenados em um sistema computacional O caso ocorrido no Senado brasileiro não é uma exceção Podemos lembrar facilmente alguns casos ocorridos no Brasil o do Banco Nacional em que um programador alterou os dados do cadastro de contas correntes para esconder um rombo na contabilidade do banco o caso Proconsult ocorrido na contagem dos votos da eleição para governador do Rio de Janeiro em 1982 e o do funcionário de uma empresa que prestava serviços a uma prefeitura que quando foi despedido destruiu os dados do cadastro de IPTU causando enormes prejuízos Para assegurar tanto quanto possível o uso dos esforços dos profissionais da Engenharia de Software para o bem tais profissionais devem se comprometer com eles próprios a tornar a Engenharia de Software um profissão benéfica e respeitada Em acordo com este comprometimento é aconselhável que os engenheiros de software adotem algum código de ética profissional Existem organizações como o ACM Association for Computing Machinery e o IEEE Institute of Electrical and Electronic Engineers que são compostas por profissionais e acadêmicos da área da computação que possuem um dos mais completos códigos de conduta profissional e ética da computação Há uma versão mais detalhada do código de ética do ACM e do IEEE apresentada por Gotterbarn Miller entre outros e referenciada por Sommerville 2007 em seu livro Outras instituições como a SBC também estão se organizando para a construção de um código de ética por meio de debates que vêm ocorrendo atualmente A seguir transcrevemos alguns princípios estabelecidos pelo código de conduta estabelecido pela ACM Você Sabia Apesar de ter reduzido para 58 o índice de pirataria de software se comparados com os 65 registrados em 2007 o Brasil ainda está entre os primeiros países que mais registram perdas com esse tipo de falsificação Fonte IDC 2008 Você Sabia Os campeões de pirataria com 90 ou mais de softwares piratas são a Geórgia Bangladesh Armênia Zimbábue Sri Lanka Azerbaijão e Moldova A China está com 80 e Rússia para 68 Fonte IDC 2008 FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 49 43 CóDIGO DE ÉTICA DO PROFISSIONAL EM ENGENHARIA DE SOFTWARE O código contém oito princípios relacionados ao comportamento e decisões feitas por engenheiros de software profissionais incluindo praticantes educadores gerentes supervisores e aqueles responsáveis pela definição de políticas assim como trainees e estudantes da profissão Os princípios identificam os relacionamentos de responsabilidade ética nos quais indivíduos grupos e organizações participam e as principais obrigações com estes relacionamentos As cláusulas de cada princípio são ilustrações de algumas das obrigações incluídas nestes relacionamentos Tais obrigações estão fundamentadas na humanidade do engenheiro de software em particular no cuidado devido a pessoas afetadas pelo trabalho de engenheiros de software e nos elementos peculiares à prática da engenharia de software O código prescreve tudo isto como obrigações de qualquer um que se diga ou aspire ser um engenheiro de software Os princípios estabelecidos pelo código devem influenciar engenheiros de software a considerar amplamente o que é afetado pelo seu trabalho a examinar se eles e seus colegas estão tratando os seres humanos com o devido respeito a considerar como o público se razoavelmente bem informado interpretaria suas decisões a analisar como os mais fracos serão afetados pelas suas decisões e a considerar se seus atos seriam julgados dignos quanto ao trabalho profissional idealizado para o engenheiro de software Em todos estes julgamentos a preocupação principal deve ser a saúde a segurança e o bemestar do público ou seja o interesse público é central para o código O contexto dinâmico e exigente da engenharia de software demanda um código que é adaptável e relevante para novas situações à medida que ocorrerem Entretanto mesmo com essa diretriz geral o código fornece suporte a engenheiros de software e gerentes de engenheiros de software que necessitam tomar ações positivas em caso específico por meio da documentação do posicionamento ético da profissão O código fornece uma fundação ética na qual indivíduos em equipes e a equipe como um todo pode apelar O código ajuda a definir aquelas ações que são eticamente impróprias para serem exigidas de um engenheiro de software ou de equipes de engenheiros de software 431 Princípios Princípio 1 Público Os engenheiros de software devem agir consistentemente com o interesse público Eles devem quando apropriado 1 Aceitar a responsabilidade pelo seu próprio trabalho 2 Moderar o seu interesse do empregador do cliente e usuários com o bem público 3 Aprovar software que apenas seja seguro atenda as especificações passe nos testes apropriados e não diminui a qualidade de vida não diminui a privacidade ou prejudique o meioambiente As últimas consequencias do trabalho devem ser para o bem público 4 Alertar as devidas pessoas ou autoridades de algum perigo real ou potencial para o usuário o público ou meio ambiente que esteja razoavelmente associado ao software ou documentos relacionados 5 Cooperar para solucionar sérias preocupações públicas causadas por software sua instalação manutenção suporte ou documentação 6 Ser justo e evitar enganos nas suas declarações especialmente aquelas públicas FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 50 pertinentes a software ou documentos correlatos métodos e ferramentas 7 Considerar problemas de incapacidade física alocação de recursos desvantagem econômica ou outros fatores que possam diminuir o acesso aos benefícios de software 8 Ser encorajado a voluntariamente exercer habilidades profissionais para causas boas e contribuir para a educação pública pertinente à Engenharia de Software Princípio 2 Cliente e Empregador Os engenheiros de software devem decidir e agir de forma compatível com o que é melhor para os interesses dos seus clientes e empregadores além de consistente com o interesse público Em particular eles devem quando apropriado 1 Fornecer serviço em suas áreas de competência sendo honesto e franco acerca de qualquer limitação de suas experiências e educação 2 Não usar deliberadamente software que é obtido ilegalmente ou de forma não ética 3 Usar a propriedade de um cliente ou empregador apenas nas formas autorizadas e com o conhecimento e consentimento do cliente ou empregador 4 Assegurar que qualquer documento sobre o qual tomem como referência foi aprovado quando exigido por alguém autorizado a aproválo 5 Manter privada e confidencial a informação obtida no desempenho de trabalho profissional onde tal confidencialidade é consistente com o interesse público e com a lei 6 Identificar documentar coletar evidências e relatar prontamente ao cliente ou ao empregador se em sua opinião um projeto provavelmente irá falhar mostrarse muito oneroso ou violar lei de propriedade intelectual ou ser problemático de alguma outra forma 7 Identificar documentar e relatar questão relevante de interesse social do qual tornouse ciente pertinente a software ou documento relacionado para o empregador ou cliente 8 Não aceitar nenhum trabalho fora em detrimento do trabalho que realizada para seu empregador principal 9 Não promover nenhum interesse adverso ao seu empregador ou cliente exceto em caso de questão ética que está sendo comprometida e neste caso informar o empregador ou outra autoridade apropriada acerca da questão ética Princípio 3 Produto Os engenheiros de software devem assegurar que seus produtos e modificações relacionadas atendem os mais altos padrões profissionais possíveis Em particular engenheiros de software devem quando apropriado 1 Esforçarse para atingir alta qualidade custo aceitável e cronograma razoável assegurando que compromissos sejam claros e aceitos pelo empregador e pelo cliente e estão disponíveis para consideração pelo usuário e o público 2 Assegurar metas e objetivos adequados e exequíveis para qualquer projeto no qual eles trabalhem ou proponham 3 Identificar definir e tratar questões éticas econômicas culturais legais e de meio ambiente relacionadas a projetos do trabalho 4 Assegurar que estão qualificados para qualquer projeto no qual eles trabalhem ou proponham trabalhar por uma combinação adequada de educação treinamento e FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 51 experiência 5 Assegurar que o método apropriado é usado para qualquer projeto em que trabalhe 6 Trabalhar seguindo normas profissionais 7 Esforçarse para compreender as especificações de software com as quais venha trabalhar 8 Assegurar que especificações de software nas quais eles trabalhem são bem documentadas satisfazem os requisitos dos usuários e têm as aprovações apropriadas 9 Assegurar que estimativas de custo cronograma pessoal qualidade e resultados de qualquer projeto no qual eles trabalhem ou proponham trabalhar sejam realísticas 10 Assegurar que testes depuração e revisão do software e documentos relacionados sobre os quais trabalhe sejam executados de forma adequada 11 Assegurar documentação adequada incluindo problemas significativos descobertos e soluções adotadas para qualquer projeto nos quais trabalhe 12 Trabalhar para desenvolver software e documentos correlatos que respeitam a privacidade daqueles que serão afetados pelo software 13 Ser cuidadoso ao usar somente dados precisos obtidos por meios éticos e em conformidade com leis e usálos apenas da forma autorizada 14 Manter a integridade dos dados e a atenção às ocorrências desatualizadas ou com erros 15 Tratar todas as formas de manutenção de software com o mesmo profissionalismo de um novo desenvolvimento Princípio 4 Julgamento Os engenheiros de software devem manter a integridade e a independência em seu julgamento profissional Em particular engenheiros de software devem quando apropriado 1 Basear todo julgamento técnico pela necessidade de oferecer suporte a valores humanos e mantêlos 2 Apenas endoçar documentos preparados sob sua supervisão ou em sua área de competência e na qual eles estão de acordo 3 Manter objetividade profissional em relação a qualquer software ou documentos relacionados que eles estão avaliando 4 Não participar de práticas financeiras como propinas ou similares 5 Relatar a todas as partes interessadas os conflitos de interesse que podem ser razoavelmente evitados 6 Recusarse a participar como membro ou conselheiro em equipe privada governamental ou profissional interessada em questões relacionadas a software nas quais eles seus empregados ou clientes possuem conflitos de interesse velados Princípio 5 Gerência Gerentes e líderes devem subscrever e promover uma abordagem ética para a gerência de desenvolvimento e manutenção de software Em particular aqueles gerenciando ou liderando engenheiros de software devem quando apropriado 1 Assegurar boa gerência para qualquer projeto no qual eles trabalhem incluindo procedimentos efetivos para a promoção da qualidade e redução de risco FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 52 2 Assegurar que engenheiros de software são informados de padrões antes de serem cobrados por eles 3 Assegurar que engenheiros de software conhecem as políticas e procedimentos do empregador para proteger senhas arquivos e informações que são confidenciais para o empregador ou confidenciais para outros 4 Atribuir trabalho apenas após levar em consideração contribuições apropriadas de educação e experiência balanceadas com o desejo de estender esta educação e experiência 5 Assegurar que estimativas quantitativas e realísticas de custo cronograma pessoal qualidade e produtos de qualquer projeto nos quais eles trabalhem ou proponham trabalhar e fornecer uma avaliação de incerteza destas estimativas 6 Atrair potenciais engenheiros de software somente pela descrição completa e precisa das condições de emprego 7 Oferecer remuneração razoável e justa 8 Não evitar indevidamente a ocupação de cargo por pessoa que esteja adequadamente qualificada 9 Assegurar que há um acordo razoável pertinente à propriedade de qualquer software processo pesquisa escrito ou outra propriedade intelectual na qual o engenheiro de software contribua 10 Fornecer tratamento justo em processos ao ouvir acusações de violação da política do empregador ou deste Código 11 Não requisitar a um engenheiro de software a execução de tarefa ou qualquer coisa inconsistente com este Código 12 Não punir ninguém por expressar preocupações éticas acerca de um projeto Princípio 6 Profissão Os engenheiros de software devem avançar na integridade e reputação da profissão consistente com o interesse público Em particular engenheiros de software devem quando apropriado 1 Ajudar a desenvolver um ambiente organizacional favorável a ações éticas 2 Promover o conhecimento público da engenharia de software 3 Estender o conhecimento da engenharia de software pela participação em organizações profissionais encontros e publicações 4 Oferecer suporte como membros de profissão a outros engenheiros de software em situações nas quais o presente Código deve ser seguido 5 Não promover seus próprios interesses em detrimento da profissão cliente ou empregador 6 Obedecer todas as leis que regulam seu trabalho a menos em situações excepcionais nas quais a conformidade é inconsistente com o interesse público 7 Ser preciso ao estabelecer características de um software no qual eles trabalhem evitando não apenas afirmações falsas mas também afirmações que podem ser razoavelmente especulativas inócuas enganosas ou dúbias 8 Assumir responsabilidade por detectar corrigir e relatar erros em software e documentos associados nos quais eles trabalham 9 Assegurar que clientes empregadores e supervisores conhecem os compromissos do engenheiro de software com este Código de ética e as subsequentes FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 53 ramificações de tal comprometimento 10 Evitar associações com negócios e organizações que estejam em conflito com este código 11 Reconhecer que violações deste Código são inconsistentes com ser um profissional da engenharia de software 12 Expressar preocupações às pessoas envolvidas quando violações significativas deste Código são detectadas exceto se for impossível contraprodutivo ou perigoso 13 Relatar violações significativas deste Código às autoridades apropriadas quando é claro que a consulta às pessoas envolvidas nestas violações significativas é impossível contraprodutivo ou perigoso Princípio 7 Colegas Os engenheiros de software devem ser razoáveis com os seus colegas e também apoiálos Em particular engenheiros de software devem quando apropriado 1 Encorajar colegas a aderirem a este Código 2 Assistir colegas no desenvolvimento profissional 3 Dar o crédito completo ao trabalho de outros e negar crédito indevido 4 Revisar o trabalho de outros de forma objetiva cândida e de maneira documentada apropriadamente 5 Ouvir as opiniões preocupações ou reclamações de um colega 6 Assistir colegas ao tomar conhecimento das práticas de trabalho padrão incluindo políticas e procedimentos para proteção de senhas arquivos e outras informações confidenciais e medidas de segurança em geral 7 Não intervir indevidamente na carreira de qualquer colega contudo preocupação com o empregador o cliente ou o interesse público pode exigir que engenheiros de software em boa fé questionem a competência de um colega 8 Em situações fora de suas áreas de competência obter opiniões de outros profissionais que têm competência na área Princípio 8 O próprio engenheiro de software Os engenheiros de software devem participar de prática continuada de aprendizado da sua profissão e devem promover uma abordagem ética para a prática da profissão Em particular engenheiros de software devem continuamente procurar por 1 Estender seu conhecimento de desenvolvimentos em análise especificação projeto desenvolvimento manutenção e teste de software e documentos relacionados juntamente com a gerência do processo de desenvolvimento 2 Melhorar suas habilidades ao criar software de qualidade seguro confiável e útil a um custo razoável e dentro de tempo razoável 3 Melhorar sua habilidade ao produzir documentação precisa informativa e bem escrita 4 Melhorar sua compreensão de software e documentos relacionados nos quais trabalha e do ambiente no qual eles serão empregados 5 Melhorar o conhecimento de padrões relevantes e de leis que regulam software e documentos relacionados nos quais ele trabalha 6 Melhorar o conhecimento deste Código sua interpretação e sua aplicação ao seu trabalho FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 54 7 Não dar tratamento injusto a qualquer pessoa em decorrência de preconceito irrelevante 8 Não influenciar outros a executar qualquer ação que envolva quebra deste Código 9 Reconhecer que violações pessoais deste Código são inconsistentes com um profissional de engenharia de software Esses são os princípios de conduta ética recomendado pela ACM e associados no exercício da profissão do engenheiro de software Atividades e Orientações de Estudos Para melhor assimilar o conteúdo deste capítulo sugerimos algumas atividades de fixação Como o assunto é próprio de discussões e pesquisas as atividades serão predominantemente de pesquisa e discussão Isso é muito bom porque você poderá interagir muito mais com seus colegas de curso tutores e professores É importante ter em mente que poderão existir várias respostas corretas para a mesma questão ou atividade pois as respostas serão baseadas em opiniões dado que ainda não existe uma verdade consolidada sobre o assunto contudo a corretude da atividade será baseada na discussão do que está se julgando ser certo ou errado na conduta adotada pelo profissional da Computação e tomando como referência o código de ética apresentado no capítulo Por exemplo não venha responder que roubar informações confidenciais da Empresa é algo correto só por que a Empresa foi ruim com o funcionário pois sabemos que esse caminho é prejudicial para todos os envolvidos Opiniões diferentes poderão até ser aceitas porém preste muita atenção no que vai responder e na justificativa dada para a resposta Responda de forma original clara e objetiva e cuidados com as cópias de trabalho Esses são itens que estarão sendo avaliados em suas respostas E não esqueça na dúvida sintase à vontade em perguntar Estamos aqui para auxiliar uns aos outros na construção do saber Teremos basicamente quatro tipos de atividades para esse capítulo Atividades práticas representam questões simples e objetivas sobre o assunto aqui abordado Na prática bastará estudar o assunto contido no capítulo para respondêlas corretamente Atividades de pesquisas representam tópicos de pesquisas dirigidos não muito extensos Para cada tópico de pesquisa sugerido indicaremos fontes que poderão auxiliar na pesquisa mas você terá total liberdade de consultar outras fontes caso deseje Em cima do tópico sugerido definimos algumas questões que deverão ser respondidas Sugerimos ainda que as atividades de pesquisa sejam feitas em equipe pois isso favorece o aprendizado e enriquece a discussão sobre o assunto Atividades de interação correspondem atividades que visam discutir sobre o assunto nos fóruns criados para o curso Webquest ao final do capitulo também sugerimos uma atividade complementar relacionada ao assunto Segue alguns exemplos de atividades respondidas eou comentadas que serão encontradas neste capítulo FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 55 Atividades Práticas 1 Suponha que você seja convocado a propor um código de conduta ética resumido com cerca de 5 itens básicos para o profissional da Computação Que princípios você definiria para esse código Resposta Uma resposta possível para esta atividade seria os itens definidos por Sá Carvalho em seu livro como itens básicos para a conduta do profissional da Computação são eles a Trabalhar para a obtenção de benefícios reais ao nível da empresa e do país através da elaboração de sistemas de informações úteis eficazes que atendam às efetivas necessidades de informações dos usuários dentro de uma perspectiva de apoio as suas ações concretas no seu meio ambiente evitar a simples mecanização geradora de desemprego de outros profissionais b Disseminar a informação tecnológica aberta e claramente traduzindo para o público leigo todos os aspectos que por terem possível influência sobre suas vidas lhe interessarem desmistificar permanentemente o jargão e as colocações publicitárias que tendam a transmitir ideias falsas acerca de custos benefícios e consequências práticas da tecnologia sobre a vida das pessoas e das empresas c Manter perfeito sigilo acerca de todas as informações que tiver por força de sua atividade profissional acesso concernentes a pessoas físicas e jurídicas sua intimidade e interesse diretos d Defender e desenvolver por todos os meios a tecnologia nacional adequada e adaptada às necessidades do país evitando contribuir para a desnacionalização de nossos meios de produção de nossa economia e principalmente de nossa cultura e Não estudar ou projetar sistemas que possam representar prejuízos sociais ou ambientais Luiz Carlos de Sá Carvalho Análise de Sistemas O Outro Lado da Informática Editora LTC 1988 Aprenda Praticando Exercício Proposto 41 Tomando com base o que foi explicado no capítulo responda as questões abaixo justificando suas respostas quando apropriado 1 O que e ética 2 Qual a função da adoção de um código de ética para o profissional da Engenharia de Software 3 Cite alguns problemas éticos envolvidos com os profissionais da Engenharia de Software ou Computacao 4 Quais os princípios do código de ética definido pela ACM Descreva o que representa cada um 5 É ético utilizar um software proprietário e não pagar sua licença de uso Essa FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 56 Atenção As respostas das questões dessa seção podem facilmente encontradas relendo os texto do capítulo Aproveite a oportunidade para fixar melhor os pontos principais do conteúdo abordado no capítulo questão esta associada ao exercício da profissão do engenheiro de software ou de forma mais abrangente ao usuário de tecnologias da informação TI 6 É ético se apropriar de um software livre e distribuílo como sendo de sua autoria 7 É ético prometer e não entregar o software na data correta 8 Analisando o texto a seguir identifique que princípios éticos foram violados Uma empresa de Connecticut que desenvolveu uma base de dados de pessoal na qual incluiu todos os seus empregados Entremeado entre os dados típicos de pessoal a empresa incluiu um campo denominado a propósito red flag que sinalizava quando a aposentadoria estava se aproximando ou quando o indivíduo já estava habilitado a requerer a pensão Durante toda a década de 80 a facilidade esteve ativa e sempre que ela era sinalizada para alguém a empresa o despedia mesmo após décadas de serviços leais Em 1991 uma corte federal em Newark NJ reconheceu o direito de exempregados por demissão injusta e determinou o pagamento de indenizações que chegaram ao montante de US 445 milhões 9 Suponha que você seja contratado para definir um código de ética Com base no que foi explicado ao longo do capítulo 4 defina um código de ética resumido com 10 itens básicos a serem adotados por todos os Engenheiros de Software da Empresa que o contratou Dica estabeleça aqueles princípios que você acha mais importante Aprenda Pesquisando Pesquisa Proposta 41 A fim de aprofundar um pouco mais seu conhecimento sobre questões éticas associadas com o profissional da Engenharia de Software selecionamos alguns tópicos para pesquisa 1 Pesquise e traga algum fato noticiado em qualquer meio de comunicação relacionado com a falta de responsabilidade e conduta ética do profissional em Engenharia de Software ou profissional da Computação Utilizando uma no máximo duas páginas comente sua opinião a respeito do fato mencionando quais princípios éticos foram violados 2 Faça uma pesquisa sobre pirataria de software e responda as seguintes questões a O que é pirataria de software b Descreva algumas formas de pirataria de software mais comumente encontradas Descreva pelo menos quatro delas c Quais os riscos legais associados a pirataria de software no Brasil d Quem responderá pelos atos ilícitos praticados por funcionários em uma FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 57 Dica Segue algumas fontes para auxiliar na pesquisa sobre pirataria de software Debate Pirataria de software Disponivel em httpwwwbaixakicombrinfo2804 debatepiratariadesoftwarehtm Antipirataria Disponivel em httpwwwmicrosoftcombrasilantipiratariahowtypes mspx O que é pirataria de software Disponivel em httpwwwborlandcombrpiracywhat ispiracyhtml Pirataria de software Wikipedia Empresa e Em que consiste pirataria de software livre Aprenda Interagindo Exercício de Interação 41 Utilizando os fóruns do curso realize as atividades de interação propostas a seguir Sugerimos que seja criado um fórum especifico para o capitulo dessa forma tornase fácil a indexação das discussões no curso para consulta e analise posterior É bom sempre lembrar que será preciso você acessar o ambiente para realizar as atividades de interação Não esqueça você também será avaliado pelas participações significativas nos fóruns de discussão apresentados no ambiente 1 Com base nos textos abaixo comente sobre a importância da ética em sua vida profissional a Texto 1 Na Revista Eletrônica de Comunicações Ética e Tecnologia de 2006 as autoras Cátia Cilene e Vanessa Peixoto comentam O profissional da Computação e da Tecnologia da Informação enquanto sujeito político e cidadão do mundo globalizado e conectado em rede em todos os sentidos está no ápice da questão da ética na atualidade enquanto ser social é construtor da realidade objetiva como profissional e pelo seu trabalho é transformador da natureza e responsável pelas relações sociais de sua área que constituem a cidadania desde o relacionamento com chefes e subordinados até o desdobramento da sua atividade na sociedade e como detentor do conhecimento tecnológico tem a informação que configura o poder na nossa atual sociedade sendo promotor das alterações sociais econômicas e culturais b Texto 2 O estudo da ética em computação por parte dos profissionais da área e também de outros indivíduos que tomarão as decisões no futuro é fundamental para determinar se essa poderosa tecnologia se desenvolverá de forma benéfica ou maléfica para a sociedade MASIERO 2000 c Texto 3 A questão da ética no que se refere à computação e tecnologias da informação FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 58 abrange duas diferentes esferas o uso ético da computação pela sociedade e a ética profissional em computação A primeira referese mais ao campo da educação e formação cidadã pois supõe a reflexão da conduta sobre o uso de instrumentos e de conhecimentos específicos na esfera social não necessariamente profissional Referese à formação humana no uso de seus recursos e na responsabilidade individual de cada membro que compõe a sociedade e constrói com seu conhecimento e suas ações a realidade objetiva e concreta Já a segunda esfera mencionada trata diretamente da responsabilidade pelo conhecimento específico de uma área da ciência humana que não é de senso comum e a utilização deste saber no desempenho de atividade profissional no caso a relação entre Computação enquanto ciência e profissão e Sociedade 2 Como você resolveria esse dilema O que você faria nessa situação Caso ocorresse algum problema quem seria culpado Um gerente de programação recebeu ordens para desenvolver um conjunto de programas que poderiam evitar os controles contábeis normais na firma de seu empregador Foilhe explicado que o propósito era apenas testar algumas novas funções do negócio Ele protestou ao seu gerente sênior mas lhe foi dito que os perigos de evitar os controles haviam sido avaliados e havia sido tomada a decisão de prosseguir da forma planejada O gerente implementou os programas Conheça Mais Você pode conhecer mais sobre ética do profissional da Engenharia de Software consultando os sítios discriminados a seguir Em Software Engineering Code of Ethics and Professional Practice disponível em httpwwwacmorgaboutsecode é apresentado o Código de Ética do Engenheiro de Software O texto está em inglês mas a leitura é recomendada Sobre os crimes de pirataria de software Disponível em httpww1 tavarespericiascomindexphpoptioncomcontentviewarticleid48I temid79 O texto é leve e resumido mas fornece de forma objetiva uma visão sobre os crimes envolvidos com a prática da pirataria de software Entenda sobre os principais pontos do projeto de lei contra crimes eletrônicos Disponivel em httpidgnowuolcombrinternet20080710entenda osprincipaispontosdaleiparacrimesdeinformatica O texto é curto e mostra de forma objetivo a classificacao dos crimes de informática como também as respectivas punições Veja algumas curiosidades sobre ética profissional na área de Computação FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 59 Você Sabia Você sabia que O software é uma obra intelectual e não um produto Quando compramos um programa de computador estamos adquirindo uma licença de uso Quem compra software pirata está sujeito a mesma punição aplicada a quem está vendendo Nas ações as autoridades policiais apreendem listas com nomes de compradores que podem ser indiciados Há quem diga que o alto preço cobrado pelo software no mercado brasileiro incentiva a pirataria A prática ao contrário mostra que é uma questão cultural que se consolidou à época da reserva de mercado Um bom exemplo é o do programa Wordstar Em comparação com os demais tinha um baixo custo e nem por isso deixou de ser amplamente pirateado Todos perdem com a pirataria A oferta de empregos diminui o Estado deixa de arrecadar o país fica com sua imagem comprometida no exterior e empresas estrangeiras bem como as nacionais não se sentem seguras para investir em tecnologia e no desenvolvimento de novos produtos já que os direitos autorais são desrespeitados Fonte Crimes de Pirataria de Software Vamos Revisar Você estudou neste capítulo que devido à importância e responsabilidade do software hoje executando atividades cada vez mais criticas para a sociedade a conduta ética do profissional da engenharia de software se torna fundamental Engenheiros de software tem responsabilidades com a profissão e com a sociedade Não devem se preocupar apenas com as questões técnicas Sociedades profissionais publicam códigos de conduta que definem os padrões de comportamento esperados de seus membros Você Sabia Você sabia que as primeiras reflexões sobre ética em Computação surgiram no fim da segunda guerra mundial A ética em Computação como matéria de estudo foi fundada pelo professor do MIT Norbert Wiener nos anos de 1940 enquanto ajudava a desenvolver uma bateria antiaérea capaz de destruir os aviões mais rápidos Wiener previu revolucionárias conclusões éticas e sociais sobre ética e sistemas computacionais Em 1950 Wiener publicou o seu monumental livro sobre ética computacional The Human Use of Human Beings o que não só o estabeleceu como fundador da ética computacional mas muito mais que isso criou uma fundação especializada nesse ramo Contudo as reflexões de Wiener foram esquecidas pela indústria e academia sendo retomadas apenas entre 1960 e 1970 quando a famosa crise do software já havia sido instalada e muito do que havia previsto já estava acontecendo FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 60 REFERÊNCIAS ABES Associacao Brasileira de Empresas de Software online Disponível em httpwwwabesorgbrtempl1aspxid1sub1 ACM Portal online Disponível em httpportalacmorg BEZERRA E Princípios de Análise e Projeto de Sistemas com UML SlCampus 2002 IEEE Computer Society online Disponivel em httpwwwcomputerorg portalwebguesthome MAGELA Rogerio Engenharia de Software Aplicada Fundamentos Sl Alta Books 2006 Vol 2 MOLINARI Leonardo Gerência de Configuração Técnicas e Práticas no Desenvolvimento do Software Florianópolis Visual Books 2007 8575022105 PRESSMAN RS Engenharia de Software 6 edição Sl McGrawHill 2006 SEI Software Engineering Institute online Disponivel em httpwwwseicmu edu SOMMERVILLE I Engenharia de Software 6ª edição Sl Pearson 2007 Softex Disponivel em httpwwwsoftexbrhomedefaultasp FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 61 É graça divina começar bem Graça maior persistir na caminhada certa Mas graça das graças é não desistir nunca Dom Helder Camara CONSIDERAçõES FiNAIS Olá Cursista Esperamos que você tenha aproveitado este primeiro volume da disciplina Fundamentos da Engenharia de Software No próximo volume estudaremos algumas das áreas de conhecimento base para a Engenharia de Software abordaremos um pouco sobre engenharia de requisitos até validação e testes e gerência de configuração Gradativamente você vai perceber a importância desse conhecimento básico para a produção de software de qualidade Nesse sentido o final deste volume já é uma motivação para que você fique curiosoa para as próximas reflexões sobre os Fundamentos da Engenharia de Software Aguardamos sua participação no próximo volume Até lá e bons estudos Danielle R D da Silva Autora FuNDAMENTos DA ENgeNHARIA DE SoFTwaRE 62