Baixe o app para aproveitar ainda mais
Prévia do material em texto
Paradigmas de Programação Responsável pelo Conteúdo: Prof. Me. Roberto Luiz Garcia Vichinsky Revisão Textual: Prof. Me. Luciano Vieira Francisco Introdução à Engenharia de Software Introdução à Engenharia de Software • Conhecer os conceitos de desenvolvimento de sistemas com foco nos paradigmas de análise preconizados pela Engenharia de Software. OBJETIVO DE APRENDIZADO • Definição e Importância; • O que é Engenharia de Software? • Áreas de Aplicação de Software; • Ciclo de Vida do Software; • Processo de Software; • Modelos de Processos de Software. UNIDADE Introdução à Engenharia de Software Definição e Importância Antes de abordarmos os conceitos introdutórios da Engenharia de Software, é importante que façamos uma breve definição de seu objeto de estudo: o software. O primeiro registro do emprego da palavra software, dentro do contexto da com putação, ocorreu em janeiro de 1958, em um artigo do professor de Estatística John W. Tukey, da Universidade de Princeton, intitulado The teaching of concrete mathematics. Em um trecho de seu artigo, Tukey destaca: “Today the ‘software’ comprising the carefully planned interpretive routines, compilers, and other aspects of automative programming are at least as important to the modern electronic calculator as its ‘hardware’ of tubes, transistors, wires, tapes and the like”, cuja tradução livre corresponde à seguinte: “Hoje o ‘software’, que compreende rotinas interpretativas cuidadosamente planejadas, compiladores, e outros aspectos da programação automatizada, é no mínimo tão importante para a calculadora eletrônica moderna quanto seu ‘hardware’ de tubos, transistores, fios, fitas e similares”. O artigo de John W. Tukey pode ser encontrado em: https://bit.ly/38OwF4M O termo software identifica todo e qualquer processo lógico que possa ser exe cutado por um sistema computacional, tal como define o dicionário Aurélio da Língua Portuguesa (FERREIRA, 2010): “[...] aquilo que pode ser executado por um equipamento (o hardware)”. Podemos dizer, em linhas gerais, que um software é um conjunto de instruções que orienta o computador a realizar determinada tarefa, sendo que esse conjunto normalmente é um arquivo que pode ser armazenado em uma memória de massa – hard-disk, floppy-disk, pendrive, cartão Secure Digital (SD) etc. –, ou embarcado em um sistema microcontrolado. No entanto, para a Engenharia de Software, o termo software ganha um contor no mais abrangente, sendo tratado como produto de software, que corresponde a todos os artefatos produzidos durante o desenvolvimento do sistema, tais como código fonte, programa executável, documentações, manual do usuário, manual técnico, entre outros. O que é Engenharia de Software? Segundo Pressman (2016), a Engenharia de Software (ES) é a “[...] disciplina que integra processo, métodos e ferramentas para o desenvolvimento de software”, ou seja, é o emprego das técnicas e ferramentas da Engenharia para a produção de sistemas de software. 8 9 Na literatura, encontramos diversas definições para ES, sendo que todas conver gem para o mesmo ponto, reforçando a necessidade do emprego da disciplina de Engenharia no desenvolvimento de sistemas de software, destacando ainda a aplica ção de três elementos fundamentais: • Os métodos correspondem ao modo com o qual o sistema será desenvolvido, ou seja, definem o modelo de abordagem – paradigma de desenvolvimento – que será adotado pela equipe desenvolvedora; • As ferramentas correspondem aos elementos de apoio que darão suporte aos métodos como, por exemplo, diagramas, fluxogramas, softwares de gestão de projetos e de apoio ao desenvolvimento, entre outros; • Os procedimentos determinam a maneira como o desenvolvimento será con duzido, fornecendo orientações para que as ferramentas e os métodos sejam aplicados adequadamente, visando à produção de um software de qualidade. Nesse contexto, a Figura 1 ilustra as camadas da ES: Ferramentas Métodos Processo Foco na qualidade Figura 1 – Camadas da Engenharia de Software Fonte: Adaptada de Pressman (2016) Áreas de Aplicação de Software Atualmente, o software é um elemento presente em praticamente todos os campos de atuação humana. Com os avanços da eletrônica e das Tecnologias da Informação e Comunicação (TIC), a presença de sistemas computacionais é cada vez mais frequente nas atividades humanas, sejam profissionais ou pessoais. “Ao longo dos u ĺtimos 50 anos, o software evoluiu de uma ferramenta especializada em ana ĺise de informações e resolução de problemas para uma indústria propriamente dita” (PRESSMAN, 2016) . Em relação à classificação dos softwares de acordo com as suas áreas de aplica ção, temos atualmente seis grandes categorias, a saber: • Softwares de sistema: são programas feitos para dar suporte a outros progra mas ou sistemas como, por exemplo, compiladores de linguagem, utilitários de sistema operacional, drivers de interface, softwares de rede, entre outros; • Softwares de aplicação: são programas feitos para executar tarefas específicas. Como exemplos desse tipo de software podemos citar os editores de texto, as planilhas de cálculo, os processadores de áudio e vídeo, entre outros; 9 UNIDADE Introdução à Engenharia de Software • Softwares de engenharia/científicos: nesta categoria estão enquadrados os softwares desenvolvidos para atender às necessidades das áreas de Engenharia e científica que envolvem “cálculo em massa”, ou seja, que contemplam grande quantidade de cálculo. São exemplos desta categoria os softwares para projeto auxiliado por computador (CAD), simuladores para circuitos eletrônicos e má quinas mecânicas, análise de dados para Astronomia e Meteorologia, análise genética, Biologia Molecular, entre outros; • Softwares embarcados: programas embarcados ou embutidos são aqueles desenvolvidos, geralmente, para serem executados em dispositivos microcon trolados. Os termos embarcado e embutido referemse à forma como esses programas são armazenados: gravados eletronicamente na memória interna do dispositivo. Como exemplos de softwares desta categoria, podemos citar o programa embutido em um televisor para controlar as funções do aparelho, o programa para controlar o painel de um forno microondas, o programa em butido em um microcontrolador para administrar a abertura e o fechamento de um portão de garagem, entre outros. Cabe salientar que esse tipo de software é comumente chamado de firmware; • Aplicações web/aplicativos móveis: nesta categoria enquadramse os softwares desenvolvidos para serem executados em ambiente de internet – navegadores – e em dispositivos móveis – aplicativos para smartphones e tablets; • Softwares de inteligência artificial: são aqueles construídos com base em al goritmos naõ numeŕicos com o objetivo de solucionarem problemas complexos voltados às áreas da robo t́ica, sistemas especialistas, reconhecimento de ima gem, redes neurais artificiais, entre outras. Ciclo de Vida do Software Como vimos, a ES se preocupa com o software como produto. Dessa forma, os pequenos programas feitos para resolverem um problema específico, e que não mais serão usados em outras ocasiões, estão fora do escopo da ES. São descartados tam bém os programas feitos unicamente para a diversão do programador. Como todo produto industrial, o software tem o seguinte ciclo de vida: • É concebido a partir de uma necessidade; • É desenvolvido com base em metodologias apropriadas, transformandose em um conjunto de artefatos; • Entra na fase de operação; • É desativado ao final de sua vida útil. 10 11 Erros Tempo Desenvolvimento Operação Desativação Figura 2 – Ciclo de vida do software De acordo com a Figura 2, podemos verificar que os erros ou as inconsistências durante a fase de desenvolvimento do software tendem a cair até um nível próximo de zero. Durante o período de operação, existem alguns picos onde o número de inconsistências é grande – esses picos estãoindicados com um círculo laranja. As inconsistências ocorrem, comumente, quando fatores externos ou internos exigem mudanças no software como, por exemplo, alterações da legislação, do novo posicionamento estratégico da empresa, de novas necessidades do cliente, novas tecnologias etc. Ações corretivas são aplicadas para corrigir ou atualizar o software, fazendo com que as inconsistências cheguem outra vez a um nível próximo de zero. No entanto, quando as ações corretivas se tornam inviáveis, sejam pelo alto custo ou por inviabi lidade técnica, o software entra na fase de desativação. Processo de Software Na elaboração de um produto de software é imprescindível que tenhamos em mãos um roteiro que nos guie através de uma sequência de passos previsíveis e nos ajude a desenvolver, dentro de um prazo e custo estabelecidos, um produto de quali dade. Chamamos esse roteiro de processo de software. O desenvolvedor de software pode adaptar o processo às suas necessidades, pois, um processo pode ser apropriado para a criação de um determinado software, porém, pode não ser adequado para o desenvolvimento de outro tipo de sistema. Por exemplo, o paradigma adotado para o desenvolvimento de um software para o controle de um robô industrial pode não ser adequado para o desenvolvimento de um sistema de comércio eletrônico. No contexto da Engenharia de Software, Pressman (2016) afirma que “[...] um pro cesso nã o é uma prescriç ã o rí gida de como desenvolver um software. Ao contrá rio, é uma abordagem adaptá vel que possibilita à s pessoas realizar o trabalho de selecionar e escolher o conjunto apropriado de aç õ es e tarefas”. 11 UNIDADE Introdução à Engenharia de Software Modelos de Processos de Software Todo o desenvolvimento de software pode ser encarado como um ciclo de solu ção de problema, onde destacamos quatro estágios básicos: situação atual, defini- ção do problema, desenvolvimento técnico e integração da solução, conforme ilustra a Figura 3: Situação atual De�nição do problema Desenvolvimento técnico Integração da solução Figura 3 – Ciclo de solução de problema Os principais modelos de processo de software, ou paradigmas de desenvolvi mento, são: Waterfall – ciclo de vida clássico ou sequencial, modelo de prototipação, Espiral e Incremental. Modelo Waterfall – Ciclo de Vida Clássico ou Sequencial O paradigma waterfall – cascata –, chamado também de ciclo de vida clássico ou sequencial, é o modelo mais antigo e utilizado. Foi concebido com base no ciclo da Engenharia Tradicional e é caracterizado por uma abordagem sequencial para o desenvolvimento do software, onde cada atividade é tratada como uma fase distinta. A Figura 4 ilustra o modelo waterfall, onde podemos observar que as fases – repre sentadas pelos retângulos – são dispostas sequencialmente e cada uma deve ser execu tada somente após a conclusão da fase anterior, remetendo à ideia de “efeito cascata”. Necessidade Entendimento do Contexto Necessidade com base na visão do negócio Dimensionamento Integração Registros e testes Engª de Sistemas Análise de Requisitos Projeto Construção Testes Manutenção Figura 4 – Paradigma waterfall (cascata) 12 13 As atividades realizadas em cada uma das fases do modelo waterfall são apresen tadas a seguir: • Engenharia de sistema – planejamento: a equipe de desenvolvimento deve entender e contextualizar o problema, coletando informações em nível global e realizando a análise dessas informações em alto nível – pouco projeto. Palavras -chave: visão global do processo de negócio, entendimento e contextualização do problema; • Análise de requisitos: os desenvolvedores devem identificar as necessidades dos usuários, realizar a análise dos custos envolvidos – orçamento – e recursos necessários para a condução do projeto – ferramentas e pessoal. Devem tam bém estabelecer as restrições de prazo e custo, assim como realizar um projeto inicial e global do sistema. Palavraschave: análise das necessidades, visão global do sistema; • Projeto: realizase uma especificação mais detalhada do sistema, de forma que seja possível avaliar a qualidade prevista antes de se iniciar a codificação dos pro gramas. Definemse aqui as estruturas de dados que serão usadas, a arquitetura do software, os detalhes procedimentais e as interfaces do usuário. Palavras chave: refinamento da especificação global do sistema, dimensionamento; • Construção: consiste em traduzir o projeto para uma linguagem de programa ção, resultando em instruções executáveis pelo computador – código executável. Palavraschave: implementação, integração; • Testes: são realizados os testes do sistema. Caso seja detectado algum erro de projeto ou de construção, os trabalhos devem retornar para a fase que originou esse erro. Palavraschave: registros e testes; • Manutenção: depois de entrar em operação, provavelmente o software deverá sofrer mudanças em razão de erros, inconsistências e/ou novas funcionalidades requeridas. Os tipos de manutenção são os seguintes: » Corretiva: consiste em diagnosticar e corrigir erros inesperados; » Adaptativa: ajuste do software a uma nova plataforma ou situação de negócio; » Perfectiva: melhorias no desempenho do software ou inclusão de novas fun cionalidades requeridas pelo cliente; » Preventiva: realização de testes periódicos com o objetivo de antecipar pos síveis problemas. Modelo de Prototipação O paradigma de prototipação foi criado para evitar que o produto não corresponda às expectativas do cliente. Caracterizase pela criação, logo no início dos trabalhos, de uma versão simplificada do software – protótipo –, que pode se apresentar como um programa executável apenas para demonstrar parte das funcionalidades desejadas ou a aparência das interfaces do software. A Figura 5 ilustra o modelo de prototipação: 13 UNIDADE Introdução à Engenharia de Software Construção produto Obtenção dos requisitos Início Fim Projeto rápido Re�namento protótipo Avaliação protótipo Construção protótipo Figura 5 – Paradigma de prototipação As atividades realizadas em cada uma das fases do modelo de prototipação são apresentadas a seguir: • Obtenção dos requisitos: » Semelhante à fase de análise do modelo clássico – waterfall; » Desenvolvedor e cliente definem os objetivos do software. • Projeto rápido: » Realizase um projeto simplificado do sistema; » Geralmente, concentrase nas partes visíveis ao usuário, ou seja, as interfaces de diálogo e interfaces para entrada e saída de dados. • Construção do protótipo: implementação do projeto rápido, ou seja, codifica ção do programa que será apresentado como protótipo; • Avaliação do protótipo pelo cliente: o cliente utiliza o protótipo para avaliar se o que é desenvolvido é o que espera. O protótipo, portanto, serve para refi nar os requisitos iniciais estabelecidos; • Refinamento do protótipo e dos requisitos: » As partes interessadas verificam o que deve ser alterado na especificação inicial; » Caso haja alterações, as fases de 2 a 5 – projeto rápido até refinamento do protótipo – podem ser repetidas diversas vezes, até que não mais exista a ne cessidade de refinamentos. • Construção do produto: implementação do projeto, ou seja, programação dos módulos que constituirão o produto. 14 15 Modelo Espiral O paradigma espiral agrega em um único modelo as vantagens iterativas do padrão de prototipação com os aspectos controlados e sistemáticos do modelo waterfall – ciclo de vida clássico –, adicionando um novo elemento: análise de riscos. Por um lado, o paradigma espiral segue a abordagem de passos sistemáticos do ciclo de vida clássico, mas em uma estrutura iterativa, ou seja, dentro de uma estru tura de repetições de ciclos. Por outro lado, emprega a prototipação em qualquer etapa da evolução do produto, para garantir a redução de riscos. A Figura 6 ilustra tal modelo: Planejamento Análise dos riscos Avaliação do cliente Engenharia Decisãode continuar ou não (go/stop) Início Figura 6 – Paradigma espiral As atividades realizadas em cada uma das fases do modelo espiral são apresenta das a seguir: • Planejamento: determinase os objetivos, as restrições e verificase alternativas de projeto; • Análise de risco: analisase as alternativas e verificase os riscos. Decidese seguir o projeto na mesma linha ou começar de novo; • Engenharia: desenvolvese o protótipo. A cada nova fase de Engenharia, o produto aproximase mais de sua versão final. Esta fase pode incluir todo o ciclo de vida clássico; • Avaliação do cliente: os desenvolvedores verificam a necessidade de novas fases a partir da avaliação do produto realizada pelo cliente. Modelo Incremental O paradigma incremental combina os elementos do modelo waterfall – cascata – com os processos iterativos do modelo de prototipagem. Cada etapa evolutiva dentro do ciclo de vida do software é tratada como um in cremento, onde se emprega as fases do modelo clássico – waterfall. Por exemplo, suponhamos que o software a ser desenvolvido seja um processador de textos: no 15 UNIDADE Introdução à Engenharia de Software primeiro incremento poderíamos desenvolver as funções básicas de criação, gravação e abertura de arquivos; no segundo incremento poderíamos desenvolver as funções mais sofisticadas de formatação de texto; no terceiro incremento, um corretor ortográ fico – e assim por diante. A Figura 7 ilustra o paradigma incremental: Engª de Sistemas Análise de Requisitos Projeto Construção Testes 1º incremento Engª de Sistemas Análise de Requisitos Projeto Construção Testes 2º incremento Engª de Sistemas Análise de Requisitos Projeto Construção Testes 3º incremento Figura 7 – Paradigma incremental O desenvolvimento incremental é indicado para situações onde não se tem mão de obra ou outros recursos suficientes para desenvolver o software no prazo estabe lecido. Desta forma, empregase os recursos disponíveis para desenvolver o primeiro incremento, que será colocado em operação. Só então iniciase o segundo incremento, e assim sucessivamente. Outra indicação desse paradigma é quando uma parte do sistema exige uma tecno logia ainda não adquirida pelo cliente. Planejase e se desenvolve, então, os incrementos independentes dessa tecnologia. Quando a nova tecnologia for adquirida – hardware ou plataforma de rede, por exemplo – os demais incrementos podem ser iniciados sem maiores problemas. 16 17 Material Complementar Indicações para saber mais sobre os assuntos abordados nesta Unidade: Livros Engenharia de software: uma abordagem profissional PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre, RS: AMGH, 2016. Engenharia de software: os paradigmas clássico e orientado a objetos SCHACH, S. R. Engenharia de software: os paradigmas clássico e orientado a objetos. 7. ed. Porto Alegre, RS: AMGH, 2010. Leitura Engenharia de software Publicados na Revista da Sociedade Brasileira de Computação (SBC). https://bit.ly/3iOjQvV A Engenharia de Software, a qualidade final do software e o papel do profissional de desenvolvimento https://bit.ly/2ZXMhP8 17 UNIDADE Introdução à Engenharia de Software Referências FERREIRA, A. B. de H. Dicionário da Língua Portuguesa. 5. ed. Curitiba, PR: Positivo, 2010. PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre, RS: AMGH, 2016. SCHACH, S. R. Engenharia de software: os paradigmas clássico e orientado a objetos. 7. ed. Porto Alegre, RS: AMGH, 2010. 18
Compartilhar