Baixe o app para aproveitar ainda mais
Prévia do material em texto
Engenharia de Software Engenharia de Software 1ª edição 2019 Autoria Parecerista Validador Juliana Padilha Sandra Gavioli Puga / Paulo Lacerda *Todos os gráficos, tabelas e esquemas são creditados à autoria, salvo quando indicada a referência. Informamos que é de inteira responsabilidade da autoria a emissão de conceitos. Nenhuma parte desta publicação poderá ser reproduzida por qualquer meio ou forma sem autorização. A violação dos direitos autorais é crime estabelecido pela Lei n.º 9.610/98 e punido pelo artigo 184 do Código Penal. 7 1Unidade 1 1. Introdução à Engenharia de Software Para iniciar seus estudos Esta unidade apresenta uma introdução à engenharia de software e fornece uma base para a compreensão do restante da disciplina. Assim, trabalharemos os principais conceitos presentes na engenharia de software, como: • O que é engenharia de software e qual a sua importância nos dias atuais. • O que é software e quais são os diferentes tipos de software existentes. • E, por último, uma breve descrição do que é ética na engenharia de software. Objetivos de Aprendizagem • Explicar os conceitos de software e softwares como produtos. • Diferenciar os tipos de software existentes na literatura. • Identificar e discutir a importância da engenharia de software. • Discutir as questões éticas e profissionais importantes para os engenheiros de softwares. 8 Engenharia de Software | Unidade 1 - Introdução à Engenharia de Software Introdução da unidade Nesta unidade, apresentaremos conceitos que lhes permitirão entender o que é a engenharia de software, qual a sua importância, o conceito de software e os diferentes tipos de software existentes atualmente e também uma breve descrição do que é ética na engenharia de software. 1.1 Software como produto O software pode ser considerado tanto um produto quanto um serviço. Quando ele é considerado um serviço, a tecnologia é ponte para a real necessidade do cliente. Como exemplo temos o serviço de armazenamento na nuvem, em que o software é um mero meio para o compartilhamento e armazenamento de dados do usuário. Normalmente, nessa forma de comercialização, o software possui uma temporalidade associada a um custo mensal ou anual. Em contrapartida, o software como produto é, por si só, a materialidade da vontade do usuário. Nesse caso, temos como exemplo as ferramentas de produtividade (Ex: Microsoft Office), sistemas operacionais (Ex: Windows, Linux), e aplicativos (Ex: Moodle). Nos últimos anos, devido à evolução das redes de computadores e ao barateamento dos recursos computacionais, como também à necessidade de disponibilidade onipresente da Tecnologia da Informação (TI), observa-se uma tendência de comercialização de softwares como serviço1. 1.1.1 Definindo o software De acordo com Pressman (2011, p.11), “software consiste em: • instruções (programas de computador) que, quando executadas, fornecem características, funções e desempenho desejados; • estruturas de dados que possibilitam aos programas manipular informações adequadamente; • e informação descritiva, tanto na forma impressa como na virtual, descrevendo a operação e o uso dos programas”. Para Sommerville (2011, p.4), “softwares são programas de computador e documentação associada. Produtos de software podem ser desenvolvidos para um cliente específico ou para o mercado em geral”. 1.2 Atributos de um software Conforme visto, software não é apenas um programa; ele inclui também toda a documentação produzida durante o seu desenvolvimento. Existe um conjunto de atributos que são considerados essenciais para o desenvolvimento de softwares profissionais. Atributos de software refere-se as características desejáveis que um software deve ter. 1 Software como serviço também é conhecido pelo acrônimo SaaS (Software as a Service). 9 Engenharia de Software | Unidade 1 - Introdução à Engenharia de Software No entanto, esses atributos dependem do tipo de software que está sendo desenvolvido. Por exemplo, um sistema bancário deve ser seguro, um antivírus deve oferecer proteção contra vírus e assim por diante. Esses atributos são sumarizados a seguir (Sommerville 2011): • Manutenibilidade: o software deve ser escrito de forma que permita a evolução para atender às necessidades dos clientes. • Confiança e proteção: um software deve ser confiável, ou seja, não causar prejuízos físicos ou econômicos no caso de falha do sistema. Em termos de proteção, o software deve garantir que usuários maliciosos não sejam capazes de acessar ou prejudicar o sistema. • Eficiência: um software é eficiente quando ele responde rapidamente às ações dos usuários e não desperdiça recursos do sistema, como memória e tempo de processamento. • Aceitabilidade: este atributo refere-se a aceitação por parte do usuário, ou seja, o software deve ser desenvolvido de acordo com o tipo de usuário (crianças, adultos). Por exemplo, um software para crianças requer mais cores, mais imagens e é mais fácil de interagir. 1.3 Características do software O software possui características diferentes das encontradas em equipamentos físicos (hardware). A seguir apresentaremos as três características definidas por Pressman (2016): 1. Software não é fabricado no sentido clássico: O desenvolvimento de software e a fabricação de hardware possuem algumas similaridades como: a alta qualidade é obtida por meio de um bom projeto; ambas as atividades são dependentes de pessoas e requerem a construção de um “produto”. Os custos de software concentram-se no processo de engenharia, portanto, projetos de software não podem ser geridos como se fossem projetos de fabricação. O processo de engenharia diferencia-se do processo de fabricação pelo caráter inovador. O processo de fabricação é repetitivo, pois a produção entrega sempre os mesmos produtos. O processo de engenharia é sempre inovador ou personalizado (por exemplo para atender as necessidades dos clientes), assim cada produto (software) produzido é único. 2. Software não “se desgasta”: Softwares não são suscetíveis aos mesmos problemas ambientais que desgastam os hardwares. Quando um componente de hardware se desgasta, ele é substituído por uma peça de reposição. Para o software não existem peças de reposição. Toda falha em um software indica erro de projeto ou implementação. Portanto, a tarefa de manutenção de software é mais complicada que a manutenção de hardware. 3. Software sob encomenda: A indústria de software tem caminhado cada vez mais para a construção de softwares com base em componentes, porém a maioria dos softwares continua a ser construída de forma personalizada (sob encomenda). Um componente de software2 deve ser projetado e implementado para ser reutilizado em muitos programas diferentes. São exemplos de componentes de software Java para interface: RichFaces, PrimeFaces, OpenFaces e IceFaces. 2 Para mais informações sobre componentes de software acesse o site: https://pt.wikipedia.org/wiki/ Engenharia_de_software_baseada_em_componentes. https://pt.wikipedia.org/wiki/Engenharia_de_software_baseada_em_componentes https://pt.wikipedia.org/wiki/Engenharia_de_software_baseada_em_componentes 10 Engenharia de Software | Unidade 1 - Introdução à Engenharia de Software 1.4 Campos de aplicação de software Segundo Pressman (2016), atualmente existem sete grandes categorias de software, que apresentamos a seguir: 1. Software Básico: Conjunto de programas feito para atender a outros programas, como: compiladores (Ex: GCC), editores (Ex: Word, WordPad) e utilitários para gerenciamento de arquivos (Ex: Windows Explorer do Windows). 2. Software de Aplicação/Comercial: Trata-se de programas sob medida que solucionam uma necessidade específica de negócio, como: facilitar operações comerciais ou tomadas de decisões administrativas/ técnicas (Ex: Portal de Compras – este software foi desenvolvido para realizar licitações do estado de Minas Gerais). 3. Software Científico/de Engenharia:Caracteriza-se por algoritmos “number crusching” – algoritmos para processamento numérico pesado – utilizados pela astronomia (Ex: Astro), biologia molecular (Ex: Protean 3D) e aerodinâmica (Ex: C.A.S.A. (Cálculo automático de sistemas aerodinâmicos)). 4. Software Embutido/Embarcado: É um tipo de software que é residente em um produto ou sistema e utilizado para implementar e controlar características e funções para o usuário final e para o próprio sistema. Este tipo de software executa funções limitadas e específicas (por exemplo, controle do painel do micro-ondas) ou fornece função significativa e capacidade de controle (por exemplo, computador de bordo de um carro). 5. Software para Computadores Pessoais: Projetado para prover capacidade específica de utilização por muitos clientes diferentes. Focado em um mercado limitado e particularizado, como: processamento de texto (Ex: Word, WordPad), planilha eletrônica (Ex: Excel), computação gráfica (Ex: Adobe Photoshop), entretenimento (Ex: jogos - Paciência) e multimídia (Ex: RealPlayer e Windows Media Player). 6. Aplicações para a Web: É caracterizado por aplicações centralizadas em rede, como aplicativos e softwares baseados em navegadores (browsers). Como por exemplo podemos citar os sites de e-commerce. 7. Software de Inteligência Artificial: Faz o uso de algoritmos para solucionar problemas complexos que não são passíveis de computação ou de análise direta, como por exemplo: robótica, reconhecimento de padrões (de imagem e de voz), redes neurais artificiais, provas de teoremas e jogos. Como exempo deste tipo de software temos o programa A.L.I.C.E. (Artificial Linguistic Internet Computer Entity, ou Entidade Computadorizada de Linguagem Artificial para Internet)3. Diversos engenheiros de software em todo mundo trabalham em projetos de software de uma ou mais dessas categorias. Em alguns casos, novos sistemas estão sendo construídos, mas em muitos outros sistemas já existentes estão sendo corrigidos, adaptados e/ou evoluídos. 1.4.1 Software Legado Software legado é definido como software antigo, ou seja, que foi desenvolvido há muitos anos. Esse tipo de software tem tido atenção desde os anos 1960. De acordo com Dayani-Fard et al (1999) apud Pressman (2016, p.8), softwares legados foram desenvolvidos décadas atrás e têm sido continuamente modificados para se adequar a mudanças dos requisitos de negócio e a plataformas computacionais. Empresas consideram que é dispendioso manter esses softwares e arriscado evoluí-los (Dayani-Fard et al. apud Pressman, 2016, p.8). 3 Para mais informações acesse o site: https://pt.wikipedia.org/wiki/A.L.I.C.E. https://pt.wikipedia.org/wiki/A.L.I.C.E 11 Engenharia de Software | Unidade 1 - Introdução à Engenharia de Software Já para Liu et (1998) apud Pressman (2016, p.8) “muitos sistemas legados permanecem dando suporte para funções de negócios vitais e são indispensáveis para o mesmo”. Conclui-se que um software legado é caracterizado por um tempo de vida longo e por ser crítico na área dos negócios. Softwares legados são um desafio para a engenharia de software, pois há projetos que não são expansíveis, código intrincado (de difícil compreensão), documentação pobre ou inexistente entre outros. Tudo isso caracteriza um software de baixa qualidade, difícil de ser evoluído ou simplesmente de dar manutenção. Diante dos pontos já expostos, a engenharia de software recomenda que softwares legados só passem por evolução/manutenção se for vital para o seu funcionamento (Sommerville, 2011). Um exemplo de que não é interessante realizar manutenção desnecessária em softwares antigos é um fato ocorrido em 1999 – o Bug do Milênio. Este possível bug levou programadores do mundo inteiro a realizarem manutenção nos sistemas, pois antigamente a data era salva no padrão de 2 dígitos (como, por exemplo, 99) para economizar memória. Acreditava-se que se não alterassem a data para o padrão de 4 dígitos na virada do ano 2000, diversos sistemas deixariam de funcionar acarretando incontáveis erros. O resultado foi um investimento financeiro alto para realizar essa manutenção, mas no final das contas ocorreram poucas falhas decorrentes do bug do milênio. Fique atento! Para saber mais sobre software legado, assista ao vídeo Você sabe o que é SOFTWARE LEGADO?, do Canal TI, no Youtube. E para mais informações sobre o bug do milênio, assista ao vídeo A história do bug do milênio, da TecMundo, no Youtube. Saiba mais 12 Engenharia de Software | Unidade 1 - Introdução à Engenharia de Software 1.4.2 Aplicações mobile e computação na nuvem Figura 1 – Computação em nuvem (cloud) Fonte: SHUTTERSTOCK, 2018. A grande quantidade de dispositivos móveis criou um novo mercado de desenvolvimento de software com características próprias. Este tipo de software que está em crescimento é geralmente designado apenas pelo termo app (aplicativos). Esses aplicativos são desenvolvidos para plataformas mobile como iOS, Android ou Windows Mobile. Atualmente existem mais dispositivos móveis do que computadores tradicionais (Ex: notebooks e computadores pessoais) (UOL, 2017). Tais dispositivos trazem uma série de desafios e possibilidades para o desenvolvimento do software, como limitações de recursos (memória, processamento, bateria, tamanho de telas e entrada de dados) e também possuem recursos de hardware até então pouco comuns, como bússola, acelerômetro, GPS dentre outros. Leia, no site da revista Exame, a notícia Dispositivos móveis deverão ocupar o mercado do PC. A computação em nuvem possui uma infraestrutura que permite a qualquer usuário, independentemente do lugar em que está, usar algum dispositivo (smartphone, notebook) para visualizar, modificar seus dados armazenados em um servidor online, também conhecido como servidor na nuvem (Por exemplo Dropbox e Office 365). A computação em nuvem é definida como a utilização da capacidade de memória, armazenamento e processamento de servidores interligados pela internet. Já Mobile refere-se execução de softwares aplicativos em dispositivos portáteis como smartphone e tablet. Saiba mais 13 Engenharia de Software | Unidade 1 - Introdução à Engenharia de Software Para saber mais sobre Computação na Nuvem, assista ao vídeo Você sabe o que é Cloud Computing, ou Computação na Nuvem?, da CanalTech, no Youtube. Saiba mais 1.4.3 Linhas de produtos de software A abordagem Linhas de Produtos de Software (LPS) ou Software Product Lines (SPL) é definida como o uso de técnicas de engenharia que permitem criar um grupo de softwares similares a partir de um conjunto de características comuns a todos esses sistemas. Em resumo, é um método que permite a aplicação da técnica de reúso de software (reaproveitamento de código já desenvolvido e testado). O desenvolvimento de softwares utilizando a técnica de LPS está cada vez mais crescente. Como essa técnica permite agrupar componentes de software comuns e que já foram desenvolvidos (prontos), consequentemente teremos um desenvolvimento mais ágil de sistemas. Vale ressaltar que para atender as necessidades dos usuários e o contínuo processo de automação dos meios produtivos, os softwares têm se tornado cada vez maiores e complexos, o que implicaria em um processo de desenvolvimento mais demorado se comparado com o uso da técnica LPS que utiliza o reúso de componentes já prontos. Para mais informações, leia o artigo Linha de Produtos de Software: Conceitos e Ferramentas, de Juliana Alves Pereira, Eduardo Figueiredo e Heitor Augustus Costa, disponível na Internet. Saiba mais 1.5 Engenharia de software Engenharia de software é uma disciplina cujo o foco está em todos os aspectos da produção de software – desde a especificação do sistema até a sua manutenção. Para Bauer (1969) apud Pressman (2016), a engenharia de software é “a criação e a utilização de sólidos princípios de engenharia a fim de obter softwares econômicos que sejam confiáveis e que trabalhem eficientementeem máquinas reais”. 14 Engenharia de Software | Unidade 1 - Introdução à Engenharia de Software Já para IEEE (1999) apud Pressman (2016), a engenharia de software é “a aplicação de uma abordagem sistemática, disciplinada e quantificável, para o desenvolvimento, operação e manutenção do software; isto é, a aplicação de engenharia ao software”. A vantagem de se usar as técnicas de engenharia de software está em obter software com qualidade, dentro do cronograma e dentro do orçamento planejado inicialmente. A abordagem adotada para se obter software com qualidade é denominada processo de software, que veremos mais detalhadamente na unidade 2. A base para engenharia de software é definida por Pressman (2016) como uma tecnologia em camadas, conforme a figura 2. Esta figura apresenta quatro camadas: (i) Foco na qualidade. (ii) Processo. (iii) Métodos. (iv) Ferramentas. Figura 2 – Conceito de ética na engenharia de software Ferramentas Métodos Processo Foco na qualidade Fonte: PRESSMAN; MAXIM, 2011, p. 39. A base de sustentação da engenharia de software é o foco na qualidade, por isso aparece como a base da figura que se assemelha a uma pirâmide. Posteriormente, temos a camada de processo, responsável por definir uma metodologia que permitirá o desenvolvimento do software com qualidade e entrega dentro do prazo. Portanto, a camada de processo é a base para o controle do gerenciamento de projetos de software, onde a qualidade é garantida, e as mudanças (evoluções e/ou manutenções) do software são geridas de forma apropriada. Em seguida, temos a camada métodos; estes fornecem as informações técnicas para desenvolver o software, tais como: comunicação, análise de requisitos, modelagem de projeto, construção de programa, testes e suporte. 15 Engenharia de Software | Unidade 1 - Introdução à Engenharia de Software Por último, temos a camada ferramentas. Estas fornecem suporte automatizado ou semiautomatizado para o processo e para os métodos. Como por exemplo as ferramentas CASE (Computer Aided Software Engineering). 1.6 Ética na engenharia de software Figura 3 – Conceito de ética na engenharia de software Fonte: SHUTTERSTOCK, 2018. Diversos profissionais, como advogados e médicos, possuem um código de ética, ou seja, regras que regulam a liberdade das pessoas que trabalham na área. O mesmo ocorre com os profissionais de TI implicitamente – os engenheiros de software. O profissional de engenharia de software deve aceitar que seu trabalho envolve grandes responsabilidades – além de simplesmente aplicar técnicas (programar). Nenhum profissional de TI deve usar seu conhecimento de forma ilegal ou que que atente contra a moralidade. Existem áreas nas quais os padrões de comportamento não são ilegais, mas são imorais. Segundo Sommerville (2011, p.9), são elas: 1. Confidencialidade: deve-se respeitar a confidencialidade das informações de seus empregados ou clientes, independentemente de ter sido assinado um acordo formal de confidencialidade. 16 Engenharia de Software | Unidade 1 - Introdução à Engenharia de Software 2. Competência: não aceitar um trabalho acima do seu nível de competência. 3. Direitos de propriedade intelectual: deve-se ter conhecimento das leis do país a respeito da propriedade intelectual, como patentes e copyright. 4. Mau uso do computador: não fazer mau uso de seus conhecimentos técnicos a outras pessoas, como disseminar vírus ou outros malwares pela rede. Leia o Código de Ética e de Prática Profissional da Engenharia de Software e o Código de Ética publicado pela Sociedade Brasileira de Computação (SBC), ambos disponíveis na Internet. Saiba mais Síntese da unidade Nesta unidade você aprendeu sobre os conceitos fundamentais para o desenvolvimento da disciplina Engenharia de Software: • O que é software. • Qual a diferença de software de produto e software de serviço. • Quais as características que um software deve ter. • Quais os tipos de softwares existentes e quais estão sendo mais utilizados atualmente. • O que é software legado. • Qual a importância da engenharia de software. • Qual a importância da ética para os profissionais da tecnologia da informação no desenvolvimento de softwares. 17 Considerações finais Esperamos que você tenha conseguido assimilar da melhor forma possível o conteúdo aqui apresentado. Para ampliar o seu conhecimento, consulte o aprofundamento de conteúdo e assista à videoaula da unidade, pois contêm informações relevantes para seu aprendizado. Unidade 1 1. Introdução à Engenharia de Software Unidade 2 2. Modelos do Ciclo de Vida do Software Unidade 3 3. Engenharia de Requisitos e Modelagem de Software Unidade 4 4. Projeto de Interface Homem-Máquina
Compartilhar