Engenharia de Software Tema 1. Introdução à Engenharia de Software Profa. Susana M. Iglesias
Sistemas Computacionais Automatiza ou apóia a realização de atividades humanas (processamento da informação) Caracterizado por Hardware Software Informações Usuários Procedimentos ou tarefas Documentação
Sistemas Computacionais (Sistema de Alarme) Sensores de Movimento Sensores das Portas Sirenes Controle de Alarme Sintetizador de voz Contatador Telefônico Centro de Controle Externo Ian Sommerville, 2006
Sistemas Computacionais Sistema de Automação Bancária Sistema de Folha de Pagamento Sistema de Controle Acadêmico Sistema de Biblioteca Sistema de Controle de Tráfego Urbano Sistema de Controle de Elevadores Sistema de Editoração de Jornais e Revistas
Sistemas Computacionais Hardware: partes eletrônicas e mecânicas (rígidas) que possibilitam a existência do software, o armazenamento de informações e a interação com o usuário Software: parte abstrata, funciona num hardware a partir de instruções codificadas numa LP que permitem o processamento e armazenamento de informações na forma de dados codificados e podem ser controladas pelo usuário. Este controle, bem como a troca de informações entre o usuário e o sistema é feita através da interface de usuário, composta por hardware e software. Informação: componente fundamental nos sistemas baseados em computador. São os dados que representam elementos do domínio que tornam o sistema útil para os usuários Usuários: também elementos centrais no desenvolvimento de um sistema baseado em computador. As metas de cada usuário, de acordo com o papel que cada um desempenha no domínio, devem poder ser satisfeita pelo sistema. Tarefas ou procedimentos compreendem as atividades que o sistema realiza ou permite realizar. Elas devem estar de acordo com os processos da organização (ou do negócio). Documentação: envolve os manuais de usuário, documentação do sistema (fundamentais no desenvolvimento para a comunicação entre a equipe de desenvolvimento e para a transição entre as suas diversas etapas e durante a manutenção de um sistema em sua fase operacional.
Engenharia de Sistemas O desenvolvimento do sistema deve ser pensado como um todo. Os problemas que o sistema deve resolver devem ser analisados e uma solução envolvendo todos os componentes deve ser proposta. O desenvolvimento de cada componente do sistema pode ser conduzido utilizando um "engenharia" específica. É importante ressaltar que o termo engenharia está sendo utilizado de forma imprecisa.
Engenharia de Sistemas Análise do Sistemas Identificação das necessidades Estudo de Viabilidade Análise Econômica e Técnica Definição do Sistema - Requisitos Planejamento do desenvolvimento Engenharia do Sistema Engenharia do Hardware Equipamentos utilizados, engenharia de redes, placas dedicadas, etc. Engenharia do Software Programas, Ferramentas, Sistemas Operacionais Engenharia de Processos, Informações e Pessoal
Análise de Sistemas Cliente Comercial NF Vendas
Análise de Sistemas. Modelagem DFD Pedido Cliente Calcular Valor Tabela de Preços Emitir Nota Atender Pedido Gerente DFD segundo DeMarco & Yourdon, 1976
Análise de Sistemas. Soluções??
Engenharia de Software Termo relativamente novo Que é engenharia? Engenharia Arte de construir (conh. Científico e empírico), adequada ao atendimento de necessidades humanas Engenhar Idear, maquinar, inventar, engendar, produzir Sistema Conj de partes que integram entre sim procurando um objetivo comum (Soft+Hard+People) Software Subsistema de um sistema computacional
Engenharia de Software Segundo Friedrich Ludwig Bauer, "Engenharia de Software é a criação e a utilização de sólidos princípios de engenharia a fim de obter software de maneira econômica, que seja confiável e que trabalhe eficientemente em máquinas reais". O próprio significado de engenharia já traz os conceitos de criação, construção, análise, desenvolvimento e manutenção. Desenvolvimento multi-versional de software multipessoal Abordagem sistemática, disciplinada e quantificada ao desenvolvimento, operação e manutenção de software Disciplina do conhecimento humano que tem por objetivo definir e exercitar processos (humanos atuando como máquinas), métodos (planos de processos), ferramentas e ambientes (máquinas apoiando processos e métodos) para construção de software que satisfaça necessidades de cliente e usuário dentro de prazos e custos previsíveis.
Engenharia de Software Engenharia de software é uma área do conhecimento da computação voltada para a especificação, desenvolvimento e manutenção de sistemas de software aplicando tecnologias e práticas de gerência de projetos e outras disciplinas, objetivando organização, produtividade e qualidade. Atualmente, essas tecnologias e práticas englobam linguagens de programação, banco de dados, ferramentas, plataformas, bibliotecas, padrões, processos e a questão da Qualidade de Software. Os fundamentos científicos para a engenharia de software envolvem o uso de modelos abstratos e precisos que permitem ao engenheiro especificar, projetar, implementar e manter sistemas de software, avaliando e garantindo suas qualidades. Além disso, a engenharia de software deve oferecer mecanismos para se planejar e gerenciar o processo de desenvolvimento de um sistema de informação Sistema Computacional, pois ambos se confundem.
Engenharia de Software Segundo o SWEBOK (Corpo de Conhecimento da Engenharia de Software), as áreas de conhecimento da Engenharia de Software são: Requisitos de Software Projeto (Design) de Software Implementação de Software Teste de Software Manutenção de software Gerência de Configuração de Software Gerência de Engenharia de Software Processos de Engenharia de Software Ferramentas e Métodos de Engenharia de Software Qualidade de Software
Engenharia de Software Conforme Pressman, a Engenharia de Software (ES) é uma tecnologia em camadas. E a base de todas essas camadas é o foco na qualidade do software desenvolvido. Portanto, inclusive do ponto de vista didático, é interessante estudarmos a ES em suas camadas de Processo, Métodos e Ferramentas. Ferramentas Métodos Processo Foco: A qualidade ES Camadas - Pressman
Engenharia de Software Que diferencia Ciência da Computação e Engenharia de Software? CC aborda teorias e fundamentos ES aborda aspetos práticos de desenvolvimento e entrega em prazo de software útil Todo ES deve ter uma boa base em ciência da computação Atualmente, a CC ainda não possui teorias suficientes a engenharia de software.
Engenharia de Software Que diferencia Engenharia de Sistemas e Engenharia de Software? A ESis está interessada em todos os aspectos de um sistema baseado em computador, (hardware software, fatores humanos, informação e o processo). A ES de software é parte dela.
Engenharia de Software Todo engenheiro de software deve desenvolver com: Rigor e Formalidade Separação de interesses Modularidade Abstração Antecipação de mudanças Generalidade Possibilidades de evolução
Engenharia de Software - Conceitos Teorias Princípios Modelos e Formalismos Ferramentas e Ambientes Métodos e Técnicas Metodologias Paradigmas
Ciclo de Vida (Uma visão genérica) Engenharia é a análise, design, construção verificação e gerencia da entidade técnica ou social. Independentemente da entidade as seguintes questões devem ser respondidas Qual é o problema a ser resolvido? Quais são as características da entidade que são usadas para resolver o problema. Como a entidade e a solução são compreendidas? Como a entidade vai ser construída? Qual vai ser a aproximação vai ser usada para detectar erros cometidos no design e construção da entidade? Como a entidade vai suportar a longo prazo, quando as correções, adaptações e melhoras sejam solicitadas pelo usuário da entidade?
Ciclo de Vida (Fases) Independentes da área de aplicação, tamanho do projeto ou complexidade Definição Centrada em QUÉ? Desenvolvimento Centrada em COMO? Manutenção Centrada em CAMBIO
Ciclo de Vida (Definição) Definição (QUE) que informações serão processada, que funções e performance é desejado, que comportamento do sistema pode ser esperado, que interfaces devem ser estabelecidas, que restrições de design existem e que critérios de validação devem ser definidos para obter um sistema exitoso.
Ciclo de Vida (Definição) Definição (QUE) Define requerimentos chaves são identificados Os métodos usados na definição dependem do paradigma selecionado ou a combinação deles, Independentemente do paradigma definen-se 3 tarefas acontecem de alguma forma Engenharia de informação ou sistema Planejamento do projeto de software (planejamento, riscos, gerenciamento ) Análise de requerimentos (Fase de análise e modelação)
Ciclo de Vida (Desenvolvimento) Desenvolvimento: COMO? como a informação vai ser estruturada, como as funções serão implementadas numa arquitetura de software, como os detalhes procedimentais serão implementados, como serão caracterizadas as interfaces, como o design será trasladado a linguagem de programação e Como será testada a performance
Ciclo de Vida (Desenvolvimento) Os métodos aplicados na fase de desenvolvimento podem variar Devem ocorrer 3 tarefas técnicas específicas Desenho de software Geração de código Teste de software
Ciclo de Vida (Manutenção) Manutenção (CAMBIO) Associada à correção de erros, requerimentos de adaptação, melhoras por cambios dos requerimentos do cliente. Reaplica passos d definição e deenvolvimento pero no contexto do software existente. 4 tipos de cambios podem ser encontrados Correção Adaptação Melhora Prevenção
Ciclo de Vida Atividades complementares às fases Controle e seguimento de software Revisões técnicas formais Verificação de qualidade de software Preparação e produção de documentação Gerenciamento de reusabilidade Gerenciamento e análise de riscos
Design - Desenvolvimento