Baixe o app para aproveitar ainda mais
Prévia do material em texto
Engenharia de Software Tema da Aula Conceitos de Engenharia de Software Engenharia de Software Definições iniciais A seguir são apresentados alguns vocábulos... Fontes de referência: Ferreira, Aurélio Buarque de Holanda. Novo Dicionário da Língua Portuguesa. Sommerville, Ian. Engenharia de Software Engenharia de Software Definições iniciais (genéricas) ENGENHARIA Arte de aplicar conhecimentos científicos e empíricos* e certas habilitações específicas (à criação de estruturas, de dispositivos e de processos) que se utilizam para converter recursos naturais em formas adequadas ao atendimento das necessidades humanas. (*) baseados apenas na experiência. Engenharia de Software PROCESSO Ato de proceder, de ir por diante; seguimento, curso marcha. Sucessão de estados ou de mudanças Maneira pela qual se realiza uma operação, segundo determinadas normas; método; técnica. Definições iniciais (genéricas) Engenharia de Software MÉTODO Modo de proceder; maneira de agir. Programa que regula previamente uma série de operações que se devem realizar, apontando erros evitáveis, em vista de um resultado determinado. METODOLOGIA Estudo dos métodos e, especialmente, dos métodos das ciências. Definições iniciais (genéricas) Engenharia de Software TÉCNICA A parte material de uma arte. Maneira, jeito ou habilidade especial de executar ou fazer algo. Prática. TECNOLOGIA Conjunto de conhecimentos, especialmente princípios científicos, que se aplicam a um determinado ramo de atividade. A totalidade desses conhecimentos. Definições iniciais (genéricas) Engenharia de Software FERRAMENTA Qualquer utensílio empregado nas artes e ofícios. Definições iniciais (genéricas) Engenharia de Software MODELO Objeto destinado a ser reproduzido por imitação Representação em pequena escala de algo que se pretende executar em grande* Molde. Aquilo que serve de exemplo ou norma. (*) Representação simplificada de algo mais complexo. Definições iniciais (genéricas) Engenharia de Software NORMA Aquilo que se estabelece como base ou medida para a realização ou avaliação de alguma coisa. Princípio, preceito, regra, lei. Modelo, padrão. NORMA TÉCNICA Documento técnico que fixa padrões reguladores visando a garantir a qualidade do produto industrial, a racionalização da produção, transporte e consumo de bens, a segurança das pessoas, a uniformidade dos meios de expressão e comunicação, etc. Definições iniciais (genéricas) Engenharia de Software PRODUTO O resultado da produção. Definições iniciais (genéricas) Engenharia de Software SISTEMA Um conjunto de elementos (sub-sistemas, componentes, processos, etc.); Dinamicamente relacionados; Formando uma atividade (finalidade); Para atingir um objetivo; Operando sobre entradas (matéria, energia e informação); Para produzir saídas (matéria, energia e informação). Definições iniciais (genéricas) Engenharia de Software ENGENHARIA DE SISTEMAS A engenharia de sistemas (com base em computadores) se ocupa de todos os aspectos do desenvolvimento e da evolução de sistemas complexos, em que o software desempenha o papel principal. Os engenheiros de sistemas estão envolvidos na especificação do sistema, na definição da sua arquitetura geral e, em seguida, na integração das diferentes partes necessárias para criar o sistema completo. Definições iniciais (específicas da ES) Engenharia de Software ENGENHARIA DE SISTEMAS A engenharia de sistemas é uma disciplina mais antiga do que a engenharia de software. A engenharia de sistemas é uma atividade interdisciplinar que envolve equipes com diferentes formações técnicas. Definições iniciais (específicas da ES) Engenharia de Software ENGENHARIA DE SISTEMAS Diferentes disciplinas que podem estar envolvidas em um sistema de controle de tráfego aéreo que utiliza radares e outros sensores para determinar a posição da aeronave: Definições iniciais (específicas da ES) ENGENHARIA DE SISTEMAS DE CTA ENGENHARIA DE SOFTWARE ENGENHARIA DE ESTRUTURAS ENGENHARIA CIVIL ENGENHARIA ELETRÔNICA ENGENHARIA ELÉTRICA ENGENHARIA MECÂNICA PROJETO DE INTERFACE COM O USUÁRIO ARQUITETURA Engenharia de Software Engenharia de Software Engenharia de Software 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. Fritz Bauer “NATO Science Commitee” em 1969 Engenharia de Software Engenharia de Software Definição II Disciplina da Engenharia que se ocupa de todos os aspectos da produção de software, desde os estágios iniciais de especificação do sistema até a manutenção desse sistema depois que ele entrou em operação. SOMMERVILLE Engenharia de Software Engenharia de Software Definição II Aplicação de abordagens sistemáticas, disciplinadas e quantificáveis para o desenvolvimento, operação e manutenção de um software. Software Engineering – IEEE 610.12-1990/93 IEEE-Institute of Electrical and Electronics Engineers Engenharia de Software Engenharia de Software Definição II Engenharia de Software é uma forma de Engenharia que aplica os princípios da Ciência da Computação e Matemática para alcançar soluções com um bom custo/benefício, para resolução de problemas do Software. SEI – Report on Undergraduate Software Engineering Education CMU/SEI – TR-003 - 1990 Engenharia de Software Conceitos Introdutórios Objetivos Objetivos: A exigência do desenvolvimento e aplicação de sólidos princípios de engenharia pressupõe como objetivos: Rigor no Processo (qualidade e eficiência) Medição do processo Repetibilidade Otimização de recursos Base científica Engenharia de Software Conceitos Introdutórios Camadas da ES ES é uma tecnologia em camadas. Como todo enfoque de Engenharia, tem um comprometimento com a Qualidade e a Eficiência dos processos. A qualidade (econômica) é a base do modelo. O núcleo da ES é a camada de processo. O processo é a “cola” que une as demais camadas e permite um desenvolvimento racional de SW. Engenharia de Software Conceitos Introdutórios Definições (sentido lato) Métodos: Detalhamento de “como fazer”. Como desenvolver software utilizando-se os princípios de Engenharia de Software (Métricas, Modelagem, Projeto etc.). Métodos envolvem amplo conjunto de tarefas que incluem: Planejamento, Codificação, Estimativa de Projeto, Testes, Análise de Requisitos, Manutenção etc. Métodos geralmente introduzem uma notação gráfica, uma terminologia especial e um conjunto de critérios para sua aplicação. Engenharia de Software Conceitos Introdutórios Definições (sentido lato) Ferramentas: Qualquer instrumento necessário à prática profissional. Proporcionam apoio automatizado ou semi-automatizado à aplicação dos métodos. CASE (Computer-Aided Software Enginnering ou Engenharia de Software Auxiliada por Computador) é uma ferramenta / conjunto de ferramentas integradas, com a finalidade de dar produtividade e rigor ao processo de geração do produto de software. Engenharia de Software Conceitos Introdutórios Definições (sentido lato) Processo: Constituem o elo de ligação entre Métodos e Ferramenta, permitindo o desenvolvimento racional de software. Processos definem a seqüência em que os métodos serão aplicados, os produtos que devem ser gerados, os controles a serem estabelecidos e os marcos de referência (milestone) que permitem a avaliação do processo. Engenharia de Software Conceitos Introdutórios Processo de Software Processo de Software: Consiste em atividades, métodos e práticas (tecnologias) úteis no desenvolvimento do “produto de software”. Engenharia de Software Conceitos Introdutórios Paradigmas Processos de Software: Um determinado processoé escolhido baseando-se em: Natureza do projeto Área de aplicação Métodos e ferramentas disponíveis Controles necessários Produtos gerados em cada fase Engenharia de Software Conceitos Introdutórios Processos de Software Processos de Software: Modelos de Ciclo de Vida do Produto de Software Clássico (cascata ou linear) Outros Modelos: Incremental Evolutivo Prototipação Espiral RAD Outros Processo Unificado (RUP - Unified Process) Modelo Ágil Métodos Formais E outros Engenharia de Software Conceitos Introdutórios Produto de Software Produto de Software (NORMA NBR ISO 9000-3 - Introdução): Produto de Software: Conjunto completo de programas de computador, procedimentos e documentação correlata, assim como dados designados para entrega a um usuário. Item de Software: Qualquer parte identificável de um produto de software em etapa intermediária ou na etapa final do desenvolvimento. Desenvolvimento: Todas as atividades a serem realizadas para a criação de um produto de software. Engenharia de Software Conceitos Introdutórios Produto de Software Produto de Software (segundo sua aplicação): Software básico: Desenvolvidos para dar apoio a outros programas. Compiladores Editores de texto Utilitários de gerenciamento de arquivos Software de tempo real: Monitora/analisa/controla eventos do mundo real. Dispositivos de coleta de dados Dispositivos de atuação (saída - feedback) Monitor (coordenação e controle do tempo-1ms) Engenharia de Software Conceitos Introdutórios Produto de Software Produto de Software (segundo sua aplicação): Software de processamento comercial: Sistemas de informação vulgarmente chamados de “sistemas” ou aplicativos. Foco na informação e na automação de rotinas administrativas. Software científico e de Engenharia: Aplicações com algoritmos voltados ao processamento de cálculos de média/alta complexidade (processamento superescalar, vetorial, computação gráfica) Engenharia de Software Conceitos Introdutórios Produto de Software Produto de Software (segundo sua aplicação): Software embarcado/embutido (embedded): Produtos para controle de processos de baixa complexidade (funções limitadas) como autotrônica, eletrodomésticos, até alta complexidade como sistemas de aviônica. Geralmente são residentes em memórias read-only e executados em processador dedicado. Autotrônica: BMW série 7: 80 componentes eletrônicos embutidos e 500 milhões de interações digitais simultâneas. Fiat/Chrysler: 1 milhão de LOC´s Engenharia de Software Conceitos Introdutórios Produto de Software Produto de Software (segundo sua aplicação): Software de Inteligência Artificial: Algoritmos não-numéricos que trabalham na resolução de problemas complexos que não são favoráveis a análise direta (algoritmo prévio) e lógica booleana. Sistemas especialistas (bases de conhecimento e máquina de inferência) Redes neurais artificiais Lógica fuzzi (fuzzi sets – lógica nebulosa) Engenharia de Software Conceitos Introdutórios Produto de Software Produto de Software (segundo sua origem – IEEE 1062): COTS – Commercial off-the-shelf Disponível comercialmente mas projetado para usuários genéricos e “venda” em grande escala. Pode ser sistema ou componente. MOTS – Modified off-the-shelf Produto COTS porém o desenvolvedor se dispõe em efetuar modificações para adaptá-lo aos requisitos do cliente. FD – Fully developed Desenvolvido para atender os requisitos de um cliente específico. Engenharia de Software Conceitos Introdutórios Produto de Software Características do software (Pressman): Software é desenvolvido e não manufaturado (no sentido estrito de manufatura). Software não se desgasta mas se deteriora. Apesar da indústria estar se movendo no sentido de montar software através de componentes, a maior parte dos softwares continuam sendo feito customizados (sob medida). Engenharia de Software Conceitos Introdutórios Produto de Software Curva de falhas do hardware(curva da banheira) Engenharia de Software Conceitos Introdutórios Produto de Software Curva de falhas do software (idealizada) Engenharia de Software Conceitos Introdutórios Produto de Software Curva de falhas do software (real). Aumento da taxa de falhas devido a efeitos colaterais da manutenção. Engenharia de Software Conceitos Introdutórios Princípios da Engenharia de Software Os princípios da ES descrevem algumas propriedades gerais e referem-se tanto ao produto como ao processo de software. A aplicação dos princípios é feita através de métodos e ferramentas. Os princípios podem ajudar na escolha de métodos e ferramentas apropriadas para o produto que se deseja construir. Princípios: Formalidade Abstração Decomposição Generalização Flexibilização Engenharia de Software Conceitos Introdutórios Formalidade Desenvolvimento de SW é uma atividade criativa e como tal tende a “seguir a inspiração do momento”. Um enfoque formal pode gerar SW mais confiável e exercer controle sobre seu custo. O nível de formalidade não deve restringir a criatividade e deve ser adequado à dificuldade conceitual de cada desenvolvimento. A formalidade estará contida no projeto (descrição formal), na programação (programas são componentes formais), nas rotinas de teste, nos procedimentos da instalação, etc. Engenharia de Software Conceitos Introdutórios Abstração É o processo de identificar os aspectos importantes do produto/processo, ignorando-se os detalhes (Princípio de Pareto; Reducionismo). Modelos são abstração da realidade. O sistema de informação é uma abstração do processo real. Linguagens de programação abstraem ao programador, detalhes da máquina e da solução (algoritmo em baixo nível) O encapsulamento é uma técnica de abstração para diminuir a complexidade e melhorar a reusabilidade dos objetos. Afirma que para muitos fenômenos, 80% das conseqüências advém de 20% das causas. Engenharia de Software Conceitos Introdutórios Decomposição A decomposição é uma técnica utilizada para permitir que lidemos com a complexidade. Decomposição do processo Atividades de controle da qualidade Atividades de gerenciamento do cronograma Atividades de teste Atividades de documentação etc. Decomposição do produto Programas Módulos ou rotinas Componentes Engenharia de Software Conceitos Introdutórios Decomposição Programação procedural refinamento sucessivo Programação OO Programa é um conjunto de objetos que se intercomunicam prestando/solicitando serviços Decomposição do Processo em Sub-Processos Decomposição estrutural do Sistema em módulos/programas Decomposição funcional do Sistema em entradas e correspondentes saídas Engenharia de Software Conceitos Introdutórios Generalização A generalização é também uma forma de abstração, buscando-se as características comuns e esquecendo-se as características específicas dos itens a serem generalizados. Uma solução mais genérica tem maior potencialidade de ser reutilizada (reusabilidade e generalização dos componentes). A generalização é o processo inverso da decomposição (generalização e especialização em OO). Custo do desenvolvimento voltado à generalização versus benefício da reutilização. Engenharia de Software Conceitos Introdutórios Flexibilização A flexibilização irá conferir ao produto de software a facilidade de adaptação a novos ambientes, a mudanças ocorridas no ambiente, a casos de uso não implementados e às manutenções que se fizerem necessárias. Flexibilização do produto de software: Customização das saídas do sistema; Facilidade em agregar novos módulos/funções Facilidade em portar para outras plataformas Engenharia de Software Conceitos Introdutórios Flexibilização Flexibilização do processode software: Procedimentos e técnicas alternativas no processo de software visando: Corrigir erros Corrigir atrasos Adaptar técnicas de outros paradigmas Atender às constantes mudanças de requisitos Engenharia de Software RESUMINDO Resumindo: Escolher métodos abrangentes para todas as fases de desenvolvimento, as melhores ferramentas para automatizar os métodos, blocos de construção mais poderosos, melhores técnicas para a garantia da qualidade e modelos de gestão (controle e administração do projeto). Essa “disciplina” (rigor) para desenvolvimento de software chama-se Engenharia de Software. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Compartilhar