Prévia do material em texto
3ºAula INTRODUÇÃO À ENGENHARIA DE SOFTWARE Objetivos de aprendizagem Ao término desta aula, vocês serão capazes de: • entender os conceitos de software e engenharia de software; • conhecer o surgimento do campo de software. Olá, pessoal, tudo bem? Prosseguindo os nossos estudos da disciplina de Introdução a Engenharia de Software, nesta aula, vamos estudar parte mais importante da nossa disciplina. No caso, vamos definir o que é a Engenharia de Software. Até agora, vimos alguns conceitos básicos a respeito da computação e a sua história. Nesta aula, vamos ver qual é o papel da engenharia de software e as suas tarefas. Qualquer dúvida, entrem em contato via quadro de avisos, certo? Vamos lá? Bons estudos! Introdução à Engenharia de Software 22 1. Seções de estudo Engenharia de software: conceitos iniciais 2. O que é a engenharia de software? 3. Aplicações e desafios da engenharia de software 1 - Engenharia de software: conceitos iniciais A engenharia de software engloba as técnicas e lógicas que dizem respeito a dados, atividades, tecnologia e pessoas. Ela permite que se desenvolva o planejamento, a análise, a projeção, a construção e a manutenção dos sistemas de processamento de dados, por meio de uma ação integrada e inteligente. Além da definição dada, é importante sabermos: quando surge e por que surge a discussão a respeito da temática? Você sabe que o computador, para que funcione, deve ter duas partes. A primeira é o hardware, que é a parte física do computador, composta por processadores, memórias, teclados, monitores etc. Mas, o hardware por conta própria não faz nada. Ele precisa de algo para fazer as partes funcionarem. Esse é a função do software. O tradicional dicionário Michaelis (s.d.) define software como: “Qualquer programa ou grupo de programas que instrui o hardware sobre a maneira como ele deve executar uma tarefa, inclusive sistemas operacionais, processadores de texto e programas de aplicação.” O renomado autor Roger S. Pressman também traz uma definição a respeito de software, junto com várias reflexões sobre ele, que reproduzimos a seguir: Software, segundo Pressman Software de computador continua a ser a tecnologia mais importante no cenário mundial. E é também um ótimo exemplo da lei das consequências não intencionais. Há 60 anos, ninguém poderia prever que o software se tornaria uma tecnologia indispensável para negócios, ciência e engenharia; que software viabilizaria a criação de novas tecnologias (por exemplo, engenharia genética e nanotecnologia), a extensão de tecnologias existentes (por exemplo, telecomunicações) e a mudança radical nas tecnologias mais antigas (por exemplo, a mídia); que software se tornaria a força motriz por trás da revolução do computador pessoal; que aplicativos de software seriam comprados pelos consumidores com seus smartphones; que o software evoluiria lentamente de produto para serviço, à medida que empresas de software “sob encomenda” oferecessem funcionalidade imediata (just-in-time), via um navegador Web; que uma empresa de software se tornaria maior e mais infl uente do que todas as empresas da era industrial; que uma vasta rede comandada por software evoluiria e modifi caria tudo: de pesquisa em bibliotecas a compras feitas pelos consumidores, de discursos políticos a comportamentos de namoro entre jovens e adultos não tão jovens. Ninguém poderia prever que o software seria incorporado a sistemas de todas as áreas: transportes, medicina, telecomunicações, militar, industrial, entretenimento, máquinas de escritório... a lista é quase infi ndável. E se você acredita na lei das consequências não intencionais, há muitos efeitos que ainda não somos capazes de prever. Também ninguém poderia prever que milhões de programas de computador teriam de ser corrigidos, adaptados e ampliados à medida que o tempo passasse. A realização dessas atividades de “manutenção” absorve mais pessoas e recursos do que todo o esforço aplicado na criação de um novo software. À medida que aumenta a importância do software, a comunidade da área tenta criar tecnologias que tornem mais fácil, mais rápido e mais barato desenvolver e manter programas de computador de alta qualidade. Algumas dessas tecnologias são direcionadas a um campo de aplicação específi co (por exemplo, projeto e implementação de sites); outras são focadas em um campo de tecnologia (por exemplo, sistemas orientados a objetos ou programação orientada a aspectos); e outras ainda são de bases amplas (por exemplo, sistemas operacionais como o Linux). Entretanto, nós ainda temos de desenvolver uma tecnologia de software que faça tudo isso – e a probabilidade de surgir tal tecnologia no futuro é pequena. Ainda assim, as pessoas apostam seus empregos, seu conforto, sua segurança, seu entretenimento, suas decisões e suas próprias vidas em software. Tomara que estejam certas. (...) Hoje, o software tem um duplo papel. Ele é um produto e, ao mesmo tempo, o veículo para distribuir um produto. Como produto, fornece o potencial computacional representado pelo hardware ou, de forma mais abrangente, por uma rede de computadores que podem ser acessados por hardware local. Seja residindo em um celular, seja em um tablet, em um computador de mesa ou em um mainframe, o software é um transformador de informações – produzindo, gerenciando, adquirindo, modifi cando, exibindo ou transmitindo informações que podem ser tão simples quanto um único bit ou tão complexas quanto uma apresentação multimídia derivada de dados obtidos de dezenas de fontes independentes. Como veículo de distribuição do produto, o software atua como a base para o controle do computador (sistemas operacionais), a comunicação de informações (redes) e a criação e o controle de outros programas (ferramentas de software e ambientes). O software distribui o produto mais importante de nossa era – a informação. Ele transforma dados pessoais (por exemplo, transações fi nanceiras de um indivíduo) de modo que possam ser mais úteis em determinado contexto; gerencia informações comerciais para aumentar a competitividade; fornece um portal para redes mundiais de informação (Internet) e os meios para obter informações sob todas as suas formas. Também propicia um veículo que pode ameaçar a privacidade pessoal e é uma porta que permite a pessoas mal- intencionadas cometer crimes. Fonte: (PRESSMAN, 2016, p. 2-3) Vocês já devem ter percebido que, quando se fala em software, as pessoas associam, imediatamente, aos programas de computador. Como interessados no assunto, contudo, vocês talvez já saibam que essa é uma visão possível somente no senso comum: enquanto profissionais da área entendam: essa é uma visão restrita e insuficiente. Na verdade, o software engloba todos os dados e informações documentados. Eles provêm de diversas naturezas. Perpassa pelas bases de dados e envolve os procedimentos manuais que estão integrados aos automatizados. Então, quando tratamos de todo o sistema de software, pode-se afirmar que: A palavra software designa o conjunto de programas que um equipamento e, em especial, um sistema de computador é capaz de executar. Podemos considerar que um software é uma 23 solução para um determinado problema. Essa solução pode ser composta por vários programas de computador formando um sistema de software. Assim, um sistema de software é um conjunto de programas de computador que operam de forma conjunta para solucionar problemas de uma determinada área. Em um sentido mais amplo, Sommerville (2003, p. 5) afi rma que “um sistema, que descreve a estrutura desse sistema, e a documentação do usuário, que explica como utilizar o sistema e, no caso dos produtos de software, sites da Web para os usuários fazerem download das informações recentesdo produto” (PARREIRA JÚNIOR, 2013). Como mencionado na citação, pode-se dizer que o software diz respeito aos programas disponíveis em um equipamento, principalmente, quando associados ao sistema de um computador. Os sistemas, associados, formam o que chamamos de software. Para tanto, é importante entender que, no software, há diversos programas que são particulares, mas que atuam em conjunto. Nessa perspectiva, de que modo atua o profissional responsável por gerir a engenharia de software? Um produto de software é um sistema que pode ser disponibilizado para uma clientela. Esses produtos podem ser genéricos personalizados. Produtos genéricos são sistemas de software produzidos por uma organização e comercializados para qualquer cliente que seja capaz de utilizá-los. Produtos personalizados são sistemas de software desenvolvidos para atender às necessidades de um cliente em especial. Em ambos os casos, a empresa produtora disporá de um processo de software. O processo de software é o conjunto de atividades gerenciais e tecnológicas, bem como os resultados gerados por tais atividades, que um determinado produtor de software emprega no desenvolvimento e na manutenção de seus produtos de software (AUDI et al., 2007, p. 171). Bom, já entendemos, até aqui, a relação entre tecnologia e software, certo? É papel do produtor de software, então, desenvolver e promover a manutenção dele. Na parte do software, há os produtos genéricos e os produtos sob encomenda, também chamados de personalizados. Os primeiros dizem respeito aos produtos disponibilizados, por meio de venda ou livremente pela internet. Esses sistemas atendem um público em geral para uma determinada função. Vamos a alguns exemplos para entender isso: • O sistema Microsoft Word ele atende todos os públicos para prover a função de um processador de texto; • O programa Adobe Photoshop e os seus concorrentes Krita, GIMP e Affinity Photo (sendo os dois primeiros disponíveis livremente pela internet e o terceiro é um sistema pago) são sistemas que provêm a função geral de edição de imagens. • Os navegadores Mozilla Firefox, Chrome e Opera são programas que atendem a função de navegação pela internet. Já os sistemas personalizados, são os sistemas feitos de modo particular a uma empresa, por exemplo. É comum as grandes empresas pedirem para outras empresas especializadas em desenvolvimento de software construírem sistemas de acordo com as suas necessidades. O que diferencia um e o outro é o fato de que os produtos personalizados podem ser organizados para atender às necessidades de um cliente, que, por sua vez, geralmente, representa uma empresa. Há também casos em que as empresas, de posse de um produto genérico, alteram-no de acordo com as necessidades específicas. Figura 1: Software. Fonte: <http://fi eldguide.gizmodo.com/all-the-cool-beta-software-you-can-use-for- free-1765553479>. Acesso em: 16 mar. 2017 ‘Entendidas questões inicias acerca do software, vamos discutir a engenharia de software, em específico? 2 - O que é a engenharia de software? A engenharia de software é uma disciplina que se associa a todas as etapas da produção do software. Nessa perspectiva, não está relacionada somente às técnicas e processos relacionados ao desenvolvimento do software, mas, também, às atividades a respeito do gerenciamento do projeto de software e ao desenvolvimento das ferramentas, dos métodos e das teorias que dão suporte à produção do software. Segundo Júlio Cesar Leite (1991, p. 2): Na maioria das organizações que se utilizam de sistemas computacionais para apoio às suas atividades, os conceitos de Sistemas de Informação e de Engenharia de Software se misturam no que comumente se chama de Desenvolvimento de Sistemas. Esta mistura de áreas afins, mas diferenciadas, é, no nosso entender, um dos principais problemas encontrados pelos gerentes de informática. Como se nota, para Leite (1991), é comum, em empresas, os conceitos a respeito de Sistemas de Informação se misturarem ao de Desenvolvimento de Sistemas. Essa “confusão” é responsável por originar diversos problemas, entre eles: • criação de rotinas administrativas, • prioridades de desenvolvimento, • procedimentos operacionais, Introdução à Engenharia de Software 24 • motivação, • impactos nas rotinas de trabalho, • alocação de mão de obra, • treinamento de usuários Que se misturam com problemas de: • escolha de ferramentas de apoio ao desenvolvimento de software, • problemas de treinamento de pessoal técnico, • acompanhamento de projetos de software (LEITE, 1991, p. 2). Como pode ser percebido, não aplicar a teoria à prática pode gerar alguns problemas bastante relevantes na atuação do profissional. É importante, nessa perspectiva, entender os objetivos da engenharia de software. Em sua origem, a engenharia de software foi concebida com o propósito de lidar com os sistemas básicos, compiladores e sistemas operacionais. Para entender mais, é preciso conhecer alguns conceitos: Urna primeira defi nição de engenharia de software foi proposta por Fritz Bauer na primeira grande conferencia dedicada ao assunto: ‘O estabelecimento e uso de sólidos princípios de engenharia para que se possa obter economicamente um software que funcione efi cientemente com máquinas reais’ (PARREIRA JUNIOR, 2013). Basicamente, propunha-se a existência de uma engenharia que proporcionasse um uso economicamente viável no que diz respeito à tecnologia de software, envolvendo, sempre, o uso das máquinas. Nessa direção, pode-se afirmar que a engenharia de software foi concebida com o intuito de integrar a engenharia de sistemas, bem como a engenharia de hardware. Ela abrange um conjunto de três elementos fundamentais - métodos, ferramentas e procedimentos - que possibilita ao gerente o controle do processo de desenvolvimento do software e oferece ao profi ssional uma base para a construção de software de alta qualidade produtivamente. Os métodos de engenharia de software proporcionam os detalhes de “como fazer” para construir o software. Os métodos envolvem um amplo conjunto de tarefas que incluem: planejamento c estimativa de projeto, análise de requisitos de software e de sistemas, projeto da estrutura de dados, arquitetura de programa e algoritmo de processamento, codifi cação, teste e manutenção. Os métodos da engenharia de software muitas vezes introduzem uma notação gráfi ca ou orientada a linguagem especial e introduzem um conjunto de critérios para a qualidade do software. As ferramentas de engenharia de software proporcionam apoio automatizado ou semiautomatizado aos métodos (PRESSMAN, 19995, p. 31). Hoje, contudo, há ferramentas que permitem o sustento de cada um dos métodos discutidos. Assim, quando as ferramentas se integram e a informação criada pode ser utilizada por outra ferramenta, notamos que se estabelece um sistema que integra as ferramentas. Esse suporte é o que chamamos de engenharia de software. Ela tem o suporte de um computador (CASE - Computer-Aided Software Engineering). Parreira Júnior define essa classe de sistemas como programas que: […] combina software, hardware e um banco de dados de engenharia de software (uma estrutura de dados contendo importantes informações sobre analise, projeto, codifi cação e teste) para criar um ambiente de engenharia de software que seja análogo ao projeto auxiliado por computador/ engenharia auxiliada por computador para o hardware. Os procedimentos da engenharia de software constituem o elo de ligação que mantém juntos os métodos e as ferramentas e possibilita o desenvolvimento racional e oportuno do software de computador. Os procedimentos defi nem a seqüência em que os métodos serão aplicados, os produtos (deliverables)que se exige que sejam entregues (documentos, relatórios, formulários etc.), os controles que ajudam a assegurar a qualidade e a coordenar as mudanças, e os marcos de referência que possibilitam aos gerentes de software avaliar o progresso (PARREIRA JUNIOR, 2013, p. 8). É visível, então, que a engenharia de software envolve etapas que, por sua vez, envolve métodos, ferramentas e procedimentos. Tais etapas são, comumente, classificadas como paradigmas. Cada paradigma é selecionado de acordo com as especificidades do projeto. Considera-se sua natureza, as aplicações necessárias, os métodos e as ferramentas que serão utilizados. Também se levam em conta os produtos que serão entregues. É necessário refletir a respeito do fato de que os profissionais com formação na em Análise de Sistemas devem atuar em seu próprio campo. Nele, os contatos com a organização e com seu complexo social são bastante frequentes. Assim, não se deve supor que os profissionais de Sistemas de Informação substituem os usuários no contato com os Engenheiros de Software. Os usuários e os engenheiros de software entram em contato quando é necessário, do mesmo modo, ocorre com os profissionais de sistemas de informação. Quando a divisão de tarefas é feita de modo eficaz, é possível que os engenheiros atentem a aspectos da engenharia de modo detalhado. Do mesmo modo, ocorre com os especializados em sistemas de informação. Quando atentamos a essa explicação, contudo, não dizemos que um profissional não tem capacidade para mesclar os campos. É possível, sim, que o especialista em Sistemas de Informação atue desenvolvendo um sistema de informação completo e sendo responsável, inclusive, pelo sistema computacional. Em contrapartida, é possível que os engenheiros de software atuem desenvolvendo um protótipo de software e realizem a interação direta com os usuários, como, por exemplo, ao se implantar um sistema. Quem decide o modo como a divisão será realizada é o gerente que é responsável pela função informática. Tratando em aspectos conceituais, a ciência da computação e análise de sistemas englobam teorias e métodos que sustentam a base de computadores e sistemas de software 25 estão relacionadas ao desenvolvimento de hardware, projeto de políticas e de processos e implantação do sistema, ou seja, com a especiação do sistema, enquanto a engenharia de software se dedica aos problemas práticos de produção de software, adotando técnicas como modelagem de casos de uso e gerenciamento de configuração. 3 - Aplicações e desafi os da engenharia de software Agora que vocês já conhecem alguns conceitos básicos a respeito da teoria da engenharia de software, é necessário entendermos, primeiro, qual a aplicação do software e quais os desafios relacionados à área de atuação da engenharia de software. Se já sabemos que o software diz respeito ao complexo de programas dos Sistemas de Informática, e que cada componente existente em um meio computacional se constitui em um software, concluímos, então, que há especificidades no que tange às classificações. O software, dessa forma, pode ser: • Básico – Programas escritos para apoiarem outros programas. São eles: compiladores, editores de textos, sistemas operacionais; • Tempo real - Responde dentro de restrições de tempo estritas. Monitora, analisa e controla eventos do mundo real. Está presente em sistemas de controle de voo, sinalização de trânsito; • Comercial – Responsáveis por reestruturar os dados de uma forma que facilita as operações comerciais e a tomada de decisões administrativas: folha de pagamento, contas a pagar e receber, estoque, operações comerciais e de apoio à decisão; • Científico e de Engenharia – Englobam os sistemas de astronomia, o controle da dinâmica orbital de naves espaciais, os sistemas de manufatura automatizada (CAD-Computer Aided Design ou Desenho auxiliado por computador, CAE- Computer Aided Engineering ou Engenharia auxiliada por computador, CAM-Computer Aided Manufacturing ou Manufatura auxiliada por computador); • Embutido (embedded software) – Ele controla produtos e sistemas para os mercados industriais e de consumo. Responsável pelas funções digitais em automóveis (controle de combustível, sistema de freios), controle de teclado para fornos micro-ondas; • De computador pessoal – Faz o processamento de textos, planilhas eletrônicas e gerenciador de bancos de dados; • De inteligência artificial (IA) – Softwares baseados em conhecimento. Como se vê, a engenharia do software possui a capacidade de ser multifacetada quanto a seu campo de atuação. O profissional define, junto às necessidades da empresa que o contrata, como o software será desenvolvido. Nessa perspectiva, é válido questionar: quais são, então, os desafios da profissão na contemporaneidade? Pode-se afirmar que há três dificuldades básicas na atuação no campo da engenharia de software. Vejamos abaixo • Heterogênea tecnologia, levando em conta a demanda do momento. • Na mesma direção, é importante considerar o tempo de entrega. É importante que o profissional trabalhe o mais rápido possível, sem deixar cair, contudo, a qualidade de seu serviço. Dinamicidade é a palavra de ordem para o profissional. • Garantir a confiabilidade do cliente não é tarefa fácil. Pode levar um tempo, então, para que o profissional forme uma visão positiva a respeito de seu trabalho. Ética e qualidade, são palavras-chave para garantir um bom retorno. Sommerville (2011) elaborou uma tabela na qual discute algumas questões básicas acerca do assunto. Observe: Figura 2 – Perguntas Frequentes sobre software. Fonte: Sommerville (2011, p. 4). Introdução à Engenharia de Software 26 E, com isso, finalizamos a nossa terceira aula. Na próxima aula, vamos discutir como o software é criado. Até logo! Retomando a aula Chegamos ao fi nal da terceira aula. Vamos recordar? 1 – Engenharia de software : conceitos iniciais Vimos, na seção I, que a engenharia de software engloba as técnicas e lógicas que dizem respeito a dados, atividades, tecnologia e pessoas. Ela permite que se desenvolva o planejamento, a análise, a projeção e a construção e a manutenção dos sistemas de processamento de dados, por meio de uma ação integrada e inteligente. 2 - O que é a engenharia de software? A engenharia de software é uma disciplina que se associa a todas as etapas da produção do software. Nessa perspectiva, não está relacionada, somente às técnicas e processos relacionados ao desenvolvimento do software, mas, também, às atividades a respeito do gerenciamento do projeto de software e ao desenvolvimento das ferramentas, dos métodos e das teorias que dão suporte à produção do software. 3 - Aplicações e desafios da engenharia de software Nessa seção, vimos as aplicações que estão inseridas o contexto dos softwares. Além disso, vimos alguns desafios que a Engenharia de Software deverá enfrentar nos próximos anos. GUIA DO ESTUDANTE. Engenharia de Software. Abril: 2006. Disponível em: <https://guiadoestudante.abril. com.br/profissoes/engenharia-de-software/>. Acesso em 25 nov. 2018. MEDEIROS, Higor. Princípios da Engenharia de Software. DevMedia: 2013. Disponível em: < https://www.devmedia. com.br/principios-da-engenharia-de-software/29630>. Acesso em 25 nov. 2018. Vale a pena acessar PAULA FILHO, Wilson de Pádua. Engenharia de software : fundamentos, métodos e padrões. 3. ed. Rio de Janeiro: LTC, 2012. PRESSMAN, Roger S. Engenharia de software : uma abordagem profissional. 8. ed. São Paulo: McGraw-Hill; Porto Alegre: Bookman; Santana: AMGH Editora, 2016. SOMMERVILLE, Ian. Engenharia de software. 9. ed. São Paulo: Pearson Addison Wesley, 2011. Vale a pena ler Vale a pena Minhas anotações