Baixe o app para aproveitar ainda mais
Prévia do material em texto
AULA 1 ANÁLISE E MODELAGEM DE PROCESSOS Prof. Marcelo Carneiro Gonçalves 02 CONVERSA INICIAL No tema de hoje, abordaremos os conceitos fundamentais da engenharia de software. Por isso, falaremos sobre os conceitos de software para compreendermos do que se trata a engenharia de software, e quais seus principais processos e modelos utilizados. Estudaremos também os custos associados à engenharia de software e quais as características de um bom software e seus principais desafios. Portanto, você aprenderá sobre os principais conceitos que dão suporte à Engenharia de Software e que vão auxiliá-los na análise, modelagem e gestão de processos. CONTEXTUALIZANDO Uma empresa de Tecnologia da Informação (TI) produz software de gestão empresarial e está no mercado a pouco mais de dois anos. Seus funcionários frequentemente reclamam pelo grande volume de tarefas e os clientes estão exigindo, cada vez mais, qualidade no produto entregue (nesse caso, trata-se de desenvolvimento de software). Com o aumento da demanda por um sistema de planejamento de recursos empresariais (ERP – Enterprise Resource Planning), a produção de software tem vivido uma verdadeira produção em massa, levando as empresas a aumentarem a produção de software, que na maioria dos casos, são softwares de má qualidade, apresentando defeitos e falhas, e esse cenário se agrava quando atrasam absurdamente as entregas em datas firmadas com os clientes. Dessa forma, temos a seguinte questão: será que essa empresa está utilizando algum método formal na gestão desses produtos para lidar com essa situação? Para responder a esse questionamento, é necessário compreendermos como estão organizados os modelos e processos de softwares nas empresas. TEMA 1 – INTRODUÇÃO AOS CONCEITOS DE ENGENHARIA DE SOFTWARE Muitos acreditam que software é definido como sendo apenas um programa de computador, contudo, seu conceito é muito mais amplo. Os softwares englobam toda a documentação do sistema e arquivos de configurações. A documentação do software, em geral, auxilia para servir de apoio ao usuário para utilizar o sistema, descrevendo sua estrutura. Os arquivos de configuração do software são utilizados para nortear a configuração dos programas. 03 De acordo com Tonsig (2008), software se caracteriza por ser um conjunto de componentes abstratos, por exemplo, algoritmos, encapsulados na forma de funções ou procedimentos, que deverá ser executado em sistemas computacionais. Segundo Pressman (2007), o software é um elemento de sistema lógico, por isso, não é físico, como no caso dos hardwares. Este autor elucida alguns pontos importantes que diferenciam consideravelmente softwares de hardwares, a saber: 1. O software é projetado ou desenvolvido por engenharia, logo, não é manufaturado. Embora existam algumas semelhanças, tais como: a. O nível de qualidade empregado em um bom projeto (contudo, na fase de manufatura do hardware pode surgir problemas que não existam no software); b. A dependência de pessoas (contudo, a relação entre as pessoas participantes do projeto e o trabalho executado por elas é completamente diferente); c. Construção de um produto (porém, usam abordagem inteiramente diferentes porque são produtos diferentes). 2. O software não se “desgasta”. Pressman (2007) elucida essa ideia por meio de um gráfico que apresenta o índice de falhas como função do tempo para o hardware. Conhecida como curva da “banheira”, ela apresenta que no início do ciclo de vida, o índice de falhas é elevado (geralmente ocasionadas por defeitos de projetos e fabricação), logo, uma vez esses defeitos corrigidos, o índice do número de falhas é reduzido e se mantêm em um certo nível quase que constante, contudo ao passar do tempo, o índice de falhas eleva-se novamente à medida que os componentes do hardware sofrem “desgaste”, que podem ser representados como efeitos cumulativos de poeiras, vibração, abuso, temperaturas inadequadas, entre outros efeitos ambientais. Na figura 1 elucidamos o pensamento de Pressman (2007) sobre a curva de falha referente ao hardware. 04 Figura 1 – Curva de falha para o hardware Fonte: Adaptado de Pressman, 2007. Todos esses desgastes que ocorrem com o hardware não afetam o software, ou seja, o software não é sensível aos problemas ambientais. Logo, a curva do índice de falhas para o software se comporta de outro modo. Tentamos representa-la na figura 2. Nesta figura podemos ver que o alto índice de falhas no início indica os defeitos não descobertos pelos desenvolvedores ao lançar o produto, e à medida que esses defeitos foram sendo corrigidos, a curva permanece quase que constante. Figura 2 – Curva de falha para o software idealizada Fonte: Adaptado de Pressman, 2007. índ ice de fa lha s Falhas e defeitos Tempo "Desgate" índ ice de fal ha s Tempo Mesma taxa de obsolescência 05 Contudo, apesar de o software não se desgastar, ele pode se deteriorar devido às mudanças (em alguns casos ficar obsoleto). Dessa forma, é preciso da intervenção humana para realizar mudanças no software e, a cada mudança, iniciar-se novamente um ciclo, com altos índices de defeitos no começo. À medida que estes são resolvidos, tendem a ficar mais estáveis, contudo, observe que agora a curva tende a uma leve inclinação, o que demonstra que o software está se deteriorando ao longo do tempo. Essa mudança (manutenção) pode ser explicada na figura 3. Figura 3 – Curva de falha para o software Fonte: Adaptado de Pressman, 2007. Para um contexto mais amplo, nesta disciplina vamos utilizar o termo sistemas de softwares. O que a partir da ideia do que significa o software, fica mais fácil a compreensão. Sistema de software, geralmente, é um conjunto de programas separados, que cada programa possui como já foi explicado, uma documentação e arquivos de configuração, e normalmente usam sites web para explicar aos usuários informações sobre determinados produto e/ou serviços que o sistema proporciona. Segundo Sommerville (2007), existem dois tipos essenciais de produtos de softwares: produtos genéricos e produtos sob encomenda. Produtos genéricos: São softwares desenvolvidos para serem utilizados no mercado por qualquer cliente. Por exemplo: softwares para PCs, pacotes de planilhas, textos, gráficos, banco de dados, gerenciamento de projetos, dentre outros. índ ice de fa lha s Tempo Curva real da taxa de obsolescência Mudança 06 Produtos sob encomenda: São softwares personalizados e encomendados por um determinado cliente. Por exemplo: sistemas para controle de tráfego aéreo, sistemas para vendas, sistemas para apoiar um determinado negócio, entre outros. Uma diferença entre esses dois tipos de produtos de softwares é que, no caso dos produtos genéricos, a empresa que está desenvolvendo o software que controla toda a sua especificação, ou seja, como deve ser esse produto; já no caso de produtos sob encomenda, quem é responsável por esse controle é o próprio cliente comprador desse produto e os desenvolvedores devem trabalhar de acordo com essas especificações. Contudo, devido à concorrência do mercado e por busca de vantagens competitivas, essa diferença entre produzir produtos genéricos e produtos sob encomenda está ficando cada vez frágil. Um bom exemplo são os sistemas de planejamento de recursos empresariais (ERP – Enterprise Resource Planning), que normalmente são representados nas empresas pelos sistemas SAP. O que acontece, nesse caso, é que as empresas desenvolvedorasde software produzem um software de gerenciamento genérico, e em seguida modificam ele de acordo com as especificações e/ou necessidades de um determinado consumidor. Dito de outra forma, sistemas complexos são adaptados aos modelos de negócios da empresa solicitante dos serviços, emitindo por exemplo, os relatórios necessários, visando otimizar os recursos de tempo e planejamento da empresa (Pressman, 2007). 1.1 Engenharia de software Dentre os profissionais da área de Tecnologia da Informação que provavelmente você poderá ter que lidar, estão os Engenheiros de Software. Quem são eles? Eles são responsáveis pelo desenvolvimento de produtos de softwares, ou seja, desenvolvem softwares que podem ser comercializados. A engenharia de software, segundo Sommerville (2007), é uma disciplina de engenharia que estuda todas as questões relacionadas aos problemas práticos da produção de software. Engloba desde as primeiras etapas de especificação do software até a etapa de manutenção, ou seja, após o sistema estar em operação. De acordo com Sommerville (2007), nessa disciplina há duas palavras fundamentais: 07 Disciplina de Engenharia – Fazem acontecer, aplicando teorias, métodos e ferramentas. Todos os aspectos da produção de software – A engenharia de software não é responsável apenas pelo desenvolvimento de software, mas também pelas atividades de gerenciamento de projeto, desenvolvimento de métodos, ferramentas e teorias que apoiem o desenvolvimento do software. O engenheiro de software, em geral, utiliza métodos organizados de trabalho, que na maioria dos casos é eficaz para o desenvolvimento de software de qualidade. Porém, a engenharia visa buscar dentre os mais diversos métodos propostos aquele que é mais adequado realidade e menos formal e burocrático. Essa visão se enquadra bem para sistemas baseado na web, que, em geral, usam habilidades menos formal de desenvolvimento. 1.2. Aplicações de software De acordo com Pressman (2007), o software pode ser aplicado em qualquer situação, quando especificados um conjunto de passos procedimentais (algoritmos). Este autor propôs algumas categorias genéricas para as aplicações de softwares, pois a medida que a complexidade do software cresce, desaparece a clara divisão em compartimentos. 1.2.1 Software básico São softwares que sua finalidade é dar apoio a outros programas. Exemplos desse tipo de software: compiladores, editores e utilitários de gerenciamento de arquivos etc. 1.2.2 Software de tempo real Corresponde a um software que monitora, analisa e controla situações do mundo real. Ele coleta os dados provenientes de um ambiente externo e, em seguida, analisa e transforma as informações conforme aplicação exige. Por fim, realiza o controle de saída, que responde ao ambiente externo. A figura 4 retrata esse fluxo de componentes. 08 Figura 4 – Fluxo do software de tempo real Saiba mais O “tempo real” difere de “tempo interativo”. O sistema de tempo real deve responder em um intervalo de tempo especificado para o programa (o que representa uma variação de 1 milésimo de segundos até 1 minuto); já no tempo interativo, este intervalo de tempo pode ser ultrapassado, sem que, claro, possa causar danos desastrosos aos resultados finais do programa (Pressman, 2007). 1.2.3 Software comercial Esta é a maior área de aplicação do software, o processamento de informações comerciais. Exemplos: Folhas de pagamento, contas a pagar e a receber, gestão de estoques etc. Essa categoria evoluiu para um software de sistemas de informações administrativas (MIS), que possibilitam acesso a um ou mais bancos de dados de informações comerciais. 1.2.4 Software científico e de engenharia Esta categoria classifica-se por software de processamento de informações numéricas (por meio de algoritmos predefinidos) com a finalidade de otimizar alguma informação. Exemplos: programação ótima da produção, dinâmica orbital de naves espaciais, biologia molecular, astronomia etc. Normalmente esses softwares são auxiliados por computador (CAD), simulações de sistemas, entre outros. Coleta de dados Análise Controle de saída 09 1.2.5 Software embutido São softwares com funções muito limitadas, pois sua função reside apenas na memória de leitura, e é usado para controlar produtos e sistemas para os mercados industriais e de consumo. Exemplo: Controle de teclado para o forno micro-ondas, funções digitais de automóveis, como funções digitais no painel para controle de combustível etc. 1.2.6 Software de computadores pessoais Como o próprio nome indica, são softwares desenvolvidos para serem usados em computadores pessoais. Exemplos: processamento de texto, planilhas eletrônicas, computação gráfica, gerenciamento de dados, entre outros. Essa categoria apresenta os mais inovadores projetos de interface com os seres humanos. 1.2.7 Software de inteligência artificial São softwares que utilizam inteligência artificial, ou seja, aplicam técnicas não numéricas, que, em geral, reconhecem padrões existentes em processos com bases em um histórico. Exemplos: redes neurais, reconhecimento de padrões de voz e imagem, mineração de dados, entre outros. TEMA 2 – PROCESSO DE SOFTWARE Segundo Sommerville (2007), um processo de software é um conjunto de atividades responsáveis pela produção, desenvolvimento e evolução de um software, seja um software genérico ou sob encomenda, conforme definidos anteriormente. Segundo o mesmo autor, existem quatro atividades genéricas essências de processo relacionadas ao desenvolvimento do software. 010 Figura 5 – Atividades genéricas do software Especificação de software: Nesta atividade, os engenheiros, junto com os clientes (se for um caso de software por encomenda), discutem as especificações que o software deve conter, definindo as características, todas suas restrições etc. Em geral, utilizam métodos de entrevistas, coleta de dados, tempestade de ideias (brainstorm), fluxogramas para modelagem do processo, entre outros. Desenvolvimento de software: Nesta atividade, após serem especificados todas as necessidades que o software deve conter, inicia-se o desenvolvimento, que pode ser feito pelo próprio engenheiro de software ou programadores. Validação do software: Nesta atividade é verificado se o que foi projetado é realmente o que o cliente deseja (em caso de software por encomenda), ou o que a empresa deseja lançar no mercado (em caso de software genérico). Evolução do software: Diferentemente de hardware, que para evolução em geral é feita a compra de outros equipamentos, para implantar melhoria no caso de software os desenvolvedores não iniciam o processo a partir do zero, como já foi realizado uma programação inicial para o desenvolvimento do software. Apenas o que é realizado é uma melhoria no software já existente (uma evolução da versão antiga do software), com Especificação Desenvolvimento Validação Evolução 011 a finalidade de se adaptar as mudanças exigidas pelo cliente e pelo mercado. Os processos de desenvolvimento podem variar de acordo com o sistema proposto. 2.1. Caso prático Considere um software de controle de pouso de uma aeronave. Nesse caso, já foi preciso especificar todas as características, restrições, variáveis do sistema antecipadamente. Agora, considere um sistema de comércio eletrônico. A especificação do produto é realizada em tempo quase que real em conjunto com o cliente. Portanto, estas quatro atividades genéricas citadas podem ser organizadasde diferentes tipos, dependendo do tipo de sistemas de software. TEMA 3 – MODELO DE SOFTWARE O modelo de software é uma visão simplificada do processo de software. O modelo, em geral, é composto pelas atividades do processo, pelas funções das pessoas envolvidas na engenharia de software e o produto software. Sommerville (2007) propõem alguns modelos de processo de software: Modelo de workflow: nesse modelo é apresentada a sequência de atividades envolvidas no processo, especificando cada entrada e saída do modelo, contudo, as atividades representam ações humanas. Modelo de fluxo de dados: nesse modelo também é apresentado um conjunto de atividades, contudo, cada atividade apresentada é responsável por uma transformação dos dados, por exemplo, especifica como a entrada do processo se transformou em uma saída. Modelo Papel/ação: esse modelo apresenta os papéis e atividades que cada pessoa é responsável no processo. Segundo Sommerville (2007), a maioria dos modelos de processo de software é inspirado em um dos modelos a seguir (ressalto que, aqui, explicaremos apenas dois dos principais modelos): Modelo em cascata: considera cada atividade apresentada (Especificação, desenvolvimento, validação e evolução) como sendo atividades de fases 012 separadas e sequenciais, ou seja, após o término de cada atividade, inicia- se imediatamente a próxima fase. Figura 6 – Modelo de processo em cascata Fonte: Adaptado de Sommerville, 2007. Engenharia de software baseadas em componentes: incorpora o conceito de que o sistema já exista e é preciso apenas incorporar componentes a esse sistema, ou seja, o processo não se inicia do zero. 013 Figura 7 – Modelo de processo (baseado em componentes) Leitura complementar Aprofundaremos os conceitos de cada atividade desses modelos na próxima aula específica desse tema. Contudo, oriento o leitor a consultar o capítulo 4 do livro Engenharia de Software, do autor Ian Sommerville, 8.ª edição, que apresenta em detalhes cada modelo. TEMA 4 – CUSTOS DA ENGENHARIA DE SOFTWARE De acordo com Sommerville (2007), mensurar os custos da engenharia de software é altamente relativo, pois depende do tipo de processo e de software que está sendo desenvolvido. Cada diferente modelo de processo genérico para desenvolvimento de software possui diferentes níveis de distribuição de custos ao longo das atividades do processo. Considerando a abordagem cascata, modelo de processo citado anteriormente, os custos de especificação, projeto, desenvolvimento (implementação) e integração e testes são medidos separadamente. É importante ressaltar que a fase de integração e teste são as fases mais caras. Na figura 8, apresentamos essa distribuição. Especificação de requisitos Análise de componentes Modificação de requisitos Projeto de sistema com reuso Desenvolvimento e integração Validação de sistema 014 Figura 8 – Custos na abordagem de cascata Fonte: Adaptado de Sommerville, 2007. Considerando a abordagem baseada em componentes, não há valores específicos de custos para cada atividade, contudo, é fato que os custos de integração e teste são superiores aos custos de desenvolvimento. Na figura 9, apresentamos essa ideia. Figura 9 – Custos na abordagem baseada em componentes Fonte: Adaptado de Sommerville, 2007. 4.1 Caso prático Softwares de tempo real requerem mais tempo de validação e testes mais extensos do que sistemas baseados na web. Em geral, para produtos genéricos, 60% dos custos de produção de software são de desenvolvimento e 40% são de testes. Para produtos personalizados, os custos de evolução frequentemente são superiores aos custos de desenvolvimento (IFCE, 2017). TEMA 5 – ATRIBUTOS DE UM BOM SOFTWARE E SEUS DESAFIOS Os softwares, quando entregues para o consumidor final, devem possuir, além de bons serviços, atributos que mensuram a sua qualidade. Esses atributos não estão relacionados diretamente com o que o software faz, mas sim com o comportamento que ele reflete, enquanto está em execução, quanto à sua estrutura, organização do programa fonte e documentação (Sommerville, 2007). Esses atributos são chamados não funcionais, pois não estão associados diretamente com a atividade fim do programa. Exemplos desses atributos são o tempo de resposta do software a uma consulta do usuário e a facilidade de compreensão do código do programa. 0 25 50 Especificação Projeto Desenvolvimento 75 100 Integração e teste 0 25 Especificação Desenvolvimento 50 75 100 Integração e teste 015 5.1 Caso prático Sistemas bancários devem refletir segurança para o usuário, um jogo interativo deve apresentar uma resposta rápida, um sistema de comutação telefônica deve ser confiável, entre outros. Os atributos são estes a seguir (Sommerville, 2007). Facilidade de manutenção: O software deve ser escrito de forma que possa evoluir para atender às necessidades de mudanças. Confiabilidade: O software não deve causar danos físicos ou econômicos no caso de ocorrência de falha. Eficiência: O software não deve desperdiçar os recursos do sistema (utilização da memória, nº ciclo de processador) e buscar ser eficiente no tempo de resposta. Usabilidade: O software deve garantir que o usuário vai conseguir utilizá- lo adequadamente. 5.2 Principais desafios da Engenharia de Software Um dos principais desafios da Engenharia de software consiste no tempo de entrega do produto para o consumidor. O que acontece é que muitas técnicas da Engenharia de Software demandam tempo; além disso, para realizarmos um serviço de qualidade, em geral, precisamos de tempo. Contudo, devido à competitividade do mercado atualmente, empresas que conseguem entregar o produto com maior agilidade ao mercado conseguem barganhar maior parcela de clientes e se sobrepor à concorrência. Por conta disso, as empresas precisam ser capazes de saber lidar com mudanças exigidas pelos clientes com facilidade e agilidade. Portanto, o maior desafio consiste em entregar sistemas grandes e complexos em tempos mais curtos sem que para isso comprometa a qualidade do produto desenvolvido. Outro grande desafio da Engenharia de Software consiste em sistemas legado. Por questões de esforço e complexidade para desenvolver grandes sistemas, as empresas optam por não descartar sistemas que foram desenvolvidos no passado, que, em geral, utilizaram tecnologias mais antigas e obsoletas. Portanto, são sistemas que frequentemente não foram projetados para se realizar nenhum tipo de mudança (Sommerville, 2007). 016 SÍNTESE Vamos retomar a empresa de TI que produz software de gestão de sistemas de recursos empresariais (ERP), e que enfrenta a dificuldade de desenvolver softwares de boa qualidade, corriqueiramente apresentando defeitos e falhas, além de atraso nas entregas. A pergunta se essa empresa utiliza algum método formal na gestão nos seus produtos pode ser respondida sabendo-se se essa empresa está aplicando esforços necessários e gastos de tempo de recursos de mão de obra em momentos corretos. Por exemplo, como vimos, dependendo do tipo de software podemos decidir investir mais tempo e gastos de recursos na especificação (necessidade de saber todas as características e restrições do produto com o cliente, para isso a importância da boa análise e gestão de requisitos), ou, no desenvolvimento, se estivermos tratando de produtos genéricos. Porém, caso seja produtos sob encomenda, é preciso investir maisgastos de recursos em testes e validação, e assim por diante. Portanto, vemos aqui que o planejamento do processo é essencial para realizar gestão de forma organizada. 017 REFERÊNCIAS PRESSMAN, R. S. Engenharia de software. São Paulo: Pearson Makron, 2007. SOMMERVILLE, I. Engenharia de software, 8. ed. São Paulo: Pearson Addison-Wesley, 2007. TONSIG, S. L. Engenharia De software – análise e projeto de sistemas. 2. ed. revista e ampliada. Rio de Janeiro: Ciência Moderna, 2008.
Compartilhar