Engenharia de Software – INE 5622 Walter de Abreu Cybis, Dr. Eng. Sala 504 - Ramal: 7510 E-mail:
[email protected] Horário de atendimento: quartas-feiras à tarde; Página do curso: http://www.inf.ufsc.br/~cybis/ine5322/
Março, 2007 (2007-1) Universidade Federal de Santa Catarina Departamento de Informática e Estatística Curso de Bacharelado em Ciência da Computação
Engenharia de Software – INE 5622 Conteúdo aula 1 O software e suas características; A evolução dos sistemas de software; Os tipos de sistemas de software; A engenharia de software; Apresentação deste curso;
O Software e suas caracterí características Diferente de outras coisas que as pessoas constroem, o software é... Imaterial: Não se desgasta : software não é “fabricado” no sentido usual da palavra. Os custos do software se relacionam somente ao desenvolvimento; O termo “Fábrica de software” se refere ao uso de organização, técnicas e ferramentas adequadas para desenvolvimentos diversos (não necessariamente repetidos).
1
O Software e suas caracterí características Índice de falhas: curvas teóricas Índice de falhas
Hardware
tempo
Software
tempo
O Software e suas caracterí características Índice de falhas – curva real Ele enfrentará mudanças de manutenção, que provavelmente incluirá novos defeitos (picos na curva de índice de falhas). Este processo irá se repetir no tempo, fazendo que o nível mínimo de falhas aumente.
O Software e suas caracterí características Diferente de outras coisas que as pessoas constroem, o software é... Imperceptível: Só é percebido por seu processo: Sua interface; Dados e informações que ele gera; Documentos que o descrevem (modelos);
Abstrato e parcial: Para reduzir a complexidade, eles modelam apenas uma parte da realidade (de um sistema).
2
O Software e suas caracterí características Diferente de outras coisas que as pessoas constroem.... Flexível (mais do que o hardware): Muitas vezes as limitações inesperadas do hardware dão origem a requisitos de última hora para o software. Os engenheiros de software são chamados a aumentar as funções do software sem aumentar o custo do hardware... Muitas falhas no software resultam de sua função de acomodação na mudança das exigências do sistema técnico ou sócio-técnico.
A evoluç evolução dos sistemas de software Quatro ou mais gerações...
A evoluç evolução dos sistemas de software Primeira Geração (desde 1950): Software sob medida (customizado) com distribuição limitada; Processamentos em Batch; Desenvolvidos sem técnicas de engenharia (programação arte); Programador-usuário (sistemas sem documentação); Muita evolução da ciência pouca da técnica;
3
A evoluç evolução dos sistemas de software Segunda Geração (desde a metade dos anos 60): Sistemas multiusuário; Evolução de técnicas de interação com o usuário: Sistemas em tempo real; Sistemas de gerenciamento de banco de dados; Surgimento das softwarehouses e dos pacotes de software: Evolução de técnicas de manutenção;
A evoluç evolução dos sistemas de software Terceira Geração: (desde 1980): Sistemas distribuídos: redes locais e globais; Comunicações digitais; acesso instantâneo a base de dados; Inteligência embutida: sistemas especialistas; Software embarcado; Integração da informática com outras tecnologias (automóveis, eletrodomésticos, bens de capital,....); Crescimento de empresas de software, que vendem diferenciação...
A evoluç evolução dos sistemas de software Quarta Geração: (desde o final dos anos 80) Disseminação de sistemas baseados em redes neurais e algoritmos genéticos para reconhecimento de padrões, aprendizado e processamento parecidos com os humanos; Orientação a Objetos; Linguagens de quarta geração (linguagens específicas a um domínio (DSL)); Computação paralela;
4
A evoluç evolução dos sistemas de software Já faz tempo que a indústria do software ultrapassou a do hardware em cifras de negócios. O software é visto hoje como fator de diferenciação para empresas e instituições. Ele tem a capacidade de aliar em um só dispositivo.... Inteligência; Funcionalidade; Facilidade de uso; Desempenho, etc...
Tipos de sistemas de software Software Básico: Programas escritos para dar apoio para outros programas; compiladores, editores, utilitários, componentes de sistemas operacionais: forte interação com o hardware;
Software Aplicado: -Software comercial (folhas de pagamentos, contas a pagar e a receber, estoques, etc. ), - Software de controle em tempo real (monitora/analisa/controla eventos do mundo real, coleta de dados); - Software gerencial (SIG - sistemas de informação gerencial, SAD -sistemas de apoio a tomada de decisão);
Tipos de sistemas de software Software Aplicado (cont.): - Software científico e de engenharia (processamentos numéricos para análises estruturais, de fadiga, etc...), - Software educacional (ambientes virtuais, simuladores, tutoriais,apresentações, exercícios, etc.); - Software embarcado (reside na memória só de leitura de máquinas e equipamentos industriais, domésticos, laser, veículos, etc.); - Software pessoal (processadores de texto, planilhas, processadores gráficos, etc..); software de entretenimento: (Jogos) ; - Software de comunicação e groupware: (apoio ao trabalho cooperativo: correio eletrônico, etc. - Software de entretenimento...
5
Tipos de sistemas de software Software comercializado Software produto Baratos e obtidos rapidamente;
Software sob medida Caros e de obtenção demorada;
A principal diferença está na origem dos requisitos. Os requisitos do software produto são definidos pelo pessoal de marketing, enquanto que os do feito sob medida são objeto de uma negociação entre o cliente e o desenvolvedor.
Problemas de Qualidade do software Apesar da vantagem competitiva que podem proporcionar, resta ainda uma desconfiança quando a tarefa é criar ou adquirir um novo software. A “crise do software” do final dos anos 60 evidenciou os seguintes problemas... Baixa qualidade Insatisfação de compradores e usuários com o produto final: A visão “vaga” dos requisitos ocorre muitas vezes devido a problemas de comunicação (como comunicar idéias?);
Qualidade suspeita Critérios de qualidade imaturos;
Problemas de Qualidade do software Cultura de “desenvolvimento” A ênfase está em escrever código, improvisar e criar soluções imediatas; Pouca importância é dada a um programa de validação e verificação sistemático e completo; Seguindo paradigmas clássicos de desenvolvimento, só é possível avaliar a qualidade do software quando ele estiver pronto;
6
Problemas de Qualidade do software Baixa produtividade A produtividade não acompanha a demanda; O emprego de técnicas de engenharia de software aliado ao emprego de ferramentas CASE (Computer Aided Software Engineering) é insuficiente; Na maior parte dos casos o software tem sido refeito repetidas vezes e não a partir de componentes reutilizáveis. Os catálogos de componentes de software prontos são muito pouco utilizados.
Estimativas incorretas As estimativas de tempo e de custo de desenvolvimento são muito imprecisas; Com poucos dados históricos sobre o processo de desenvolvimento as estimativas só podem ser ruins;
Problemas de Qualidade do software Dificuldade de manutenção: O software é muito difícil de ser mantido e atualizado (a manutenção é a causa de muitos problemas de qualidade); Diferentes de outras coisas que as pessoas constroem não existem “peças de reposição”; Toda a falha do software indica um erro de projeto: A manutenção do software se referindo ao processo de desenvolvimento envolve consideravelmente mais complexidade do que a manutenção do hardware.
Mitos e realidades A descrição geral dos objetivos é suficiente para começar a escrever programas; A visão incompleta ou incorreta dos requisitos é a principal causa de fracasso no desenvolvimento do software.
Se o cronograma atrasar basta aumentar a equipe de desenvolvimento; Pode atrasar mais ainda devido a necessidade de treinamento e comunicação;
A meta do desenvolvimento é um programa que funcione; A documentação e medidas históricas estão na base de desenvolvimentos bem sucedidos!
7
Qualidade do software hoje As coisas melhoraram nas últimas décadas, mesmo que orçamentos, prazos e requisitos continuem sendo desrespeitados... Os recursos e o ciclo de vida são cada vez mais apertados enquanto que as exigências (convergência digital) são cada vez maiores.
O desafio é de desenvolver o melhor sistema com o mínimo de recursos. Otimização: Qualidade com Produtividade! Engenharia de Software!
Engenharia de software Conjunto de teorias, métodos e ferramentas necessárias para o desenvolvimento de software com qualidade e produtividade. Surgiu na década de 60 como reação à crise do software que se assentou com o surgimento de sistemas de terceira geração (distribuídos, embarcados, de comunicação, inteligentes, ...) cada vez maiores e complexos.. Os orçamentos estouravam, os prazos não eram compridos e os requisitos não eram respeitados ...
Engenharia de software M Métodos: todos descrições sobre como proceder frente a um amplo conjunto de atividades: planejamento; análise de requisitos; concepção e projeto; implementação; codificação; testes e manutenção (RUP); T Técnicas: cnicas são procedimentos definidos no âmbito de uma etapa de um método; definem uma seqüência de atividades, os produtos a serem entregues, os controles que ajudam a assegurar a qualidade, etc... (OMT, SADT, testes de interação, etc...) Ferramentas Ferramentas: Ferramentas apoio aos métodos e técnicas. Podem ser informatizados (CASE) ou não, como no caso de formalismos, modelos, conhecimentos, etc.
8
Este curso de engenharia de software Conteúdos Introdução Visão geral da Qualidade de Software Qualidade do Processo: Normas ISO 9000, 15504, 12207, CMMI Qualidade do Produto: Normas ISO 25000 (9126) e 9241
Qualidades do Produto Modularização e Reutilização; arquiteturas, padrões de projeto, componentes; Ergonomia do software e usabilidade;
Qualidades do Processo Paradigmas para o ciclo de vida e o processo unificado; Gestão do projeto: estimativas, riscos; Engenharia de requisitos; Projeto de IHC – Interfaces Humano-Computador Processo de testes; Controle de configuração; Manutenção e o controle de alterações; Fábrica de Software; Automação do processo: Ferramentas CASE
Este curso de engenharia de software Processos didáticos Aulas expositivas; Atividades: Trabalhos práticos em aula e em casa; Pesquisas com seminários em aula; Leitura e síntese;
Sistema de Avaliação Provas : 60% Atividades : 20% Seminários: 20%
Este curso de engenharia de software Programa de aulas
9