Renato Cardoso Mesquita Departamento de Eng. Elétrica da UFMG renato@cpdee.ufmg.br Engenharia de Software 1. Engenharia de Software: conceitos básicos.......... 1.1 Computador: problema ou solução? Por que os sistemas informatizados: não fazem o que deveriam fazer? são entregues com atraso? custam mais caro do que o previsto? são de baixa qualidade? são pouco confiáveis? são lentos? são difíceis de usar? etc...???? Respostas: Problemas são resolvidos por pessoas, processos e tecnologia. Sistemas são usados dentro de processos portanto, os processos têm que ser definidos. Sistemas são usados por pessoas portanto, as pessoas têm que ser: levadas em conta;
Engenharia de Software: conceitos básicos Pg. 2 treinadas; ajudadas. Problemas são resolvidos por sistemas, não apenas por software. Sistema Software Hardware Bancos de dados Procedimentos manuais Redes de comunicação Fazer software é mais do que desenvolver programas. O ciclo de vida do software: Ativação Especificação Desenvolvimento Implantação Operação Desenvolver programas é mais do que codificar. O ciclo de desenvolvimento de software: Desenho alto nível Desenho detalhado Codificação Testes Por que os sistemas informatizados... não fazem o que deveriam fazer? Porque os problemas têm que ser bem enunciados, antes de serem resolvidos
Engenharia de Software: conceitos básicos Pg. 3. O que é necessário fazer é uma coisa. O que os usuários querem é outra coisa O que os usuários pedem é outra coisa O que os analistas entendem é outra coisa O que acaba sendo feito... especificar os requisitos custa tempo e dinheiro não especificar custa mais tempo e dinheiro! Modificações dos requisitos no meio do desenvolvimento (instabilidade dos requisitos): perda de tempo e dinheiro; às vezes são inevitáveis... O que fazer? As mudanças de requisitos podem ser minimizadas: graças a uma boa especificação. As mudanças de requisitos têm que ser administradas (gestão de requisitos): através de regras; através do desenho; através de ferramentas. Por que os sistemas informatizados... são entregues com atraso? custam mais caro do que o previsto? Porque os projetos têm que ser bem planejados e controlados, para serem realizados Planejamento e Controle de Projetos.
Engenharia de Software: conceitos básicos Pg. 4 Executar projetos é mais do que escrever propostas. Fazer orçamentos e cronogramas é fácil. Cumpri-los é muito mais difícil. Sem controle, compromissos não se cumprem. É necessário gerir os projetos! A cultura do prazo... os sistemas só são propostos quando a necessidade deles é para ontem. os prazos são fixados de forma comercial ou política, e não técnica: o sistema já foi vendido o ministro vem inaugurar Não me interessa como você vai fazer, desde que entregue no prazo! Pressionados o suficiente, programadores prometem qualquer prazo. Não só a etapa de desenvolvimento conta nos prazos. Ativação Especificação Desenvolvimento Implantação Operação Só o desenvolvimento depende mais dos programadores que dos usuários! Conseqüências da cultura do prazo: produtos de má qualidade que não resolvem os problemas que deveriam resolver e são entregues fora do prazo! Dado um prazo, sempre se consegue fazer alguma coisa. Resta ver se é a coisa que deveria ser feita.
Engenharia de Software: conceitos básicos Pg. 5 Os processos de desenvolvimento de software são intensivos em mão de obra. Métodos resolvem apenas uma parte dos problemas. Ferramentas resolvem uma parte ainda menor dos problemas. Ferramentas e métodos avançados só têm utilidade nas mãos de pessoas capacitadas. Receitas para reduzir custos. Fazer uma boa especificação, para não ter que muda-la durante o desenvolvimento. Nada é mais caro que resolver os problemas errados. Identificar e resolver problemas o mais cedo possível. custo de correção dos defeitos cresce muito ao longo do tempo. Não usar tecnologia tosca demais. tempo dos programadores geralmente é mais caro que plataformas e ferramentas. Não usar tecnologia sofisticada demais. tempo de aprendizado de plataformas e ferramentas sofisticadas pode ser maior que o benefício.
Engenharia de Software: conceitos básicos Pg. 6 Por que os sistemas informatizados...... são de baixa qualidade? Porque a qualidade não é planejada... portanto, não é controlada! Mas o que é qualidade de software? é o grau de conformidade de um produto com os seus requisitos A qualidade dos produtos depende da qualidade dos processos. que é mal especificado, é mal projetado. que é mal projetado, é mal construído. que é mal construído, é muito difícil consertar. Todos os produtos intermediários devem ser conferidos. O que não passar na checagem não está pronto. Conferir custa tempo e dinheiro. Não conferir custa muito mais. O controle da qualidade é inútil se não for obsessivo. Todos conferem melhor o trabalho alheio. Quem confere não pode ser quem desenvolve. Qualidade é produzida por técnicas corretas nas mãos de pessoas capacitadas. Conferir não cria qualidade, apenas descobre problemas. Qualidade não é luxo, é a necessidade mais básica. Prazos e custos só podem ser definidos a partir de objetivos de qualidade. Com qualidade zero, pode- se fazer qualquer coisa dentro do prazo.
Engenharia de Software: conceitos básicos Pg. 7 Onde atuar? Investir em tecnologia? Tecnologia tem seu próprio ritmo de evolução. Tecnologia demais é problema e não solução. Capacitação de pessoas? Formar pessoas é difícil, caro e demorado. Recrutar pessoas capacitadas também. Mudanças no processo de produção de software? Mudanças de processo podem trazer melhorias a prazo mais curto. Problema: não existe bala de prata! Ferramentas não fazem milagres. Metodologias não fazem milagres. Métodos gerenciais não fazem milagres. Os processos também não fazem milagres! A capacitação em processos é, ela própria, um processo. objetivo do processo de capacitação é o amadurecimento de uma cultura da qualidade. Requer tempo, recursos, motivação. O amadurecimento dos processos se faz passo a passo. Existem níveis de maturidade. Níveis de maturidade de software: nível artesanal: processo informal (só existe na cabeça dos desenvolvedores), de alto risco. freqüentes surpresas: geralmente desagradáveis; projetos andam de crise em crise; quando funciona, é por causa de talentos individuais; sucessos em geral não se repetem.
Engenharia de Software: conceitos básicos Pg. 8 O nível de gestão básica: gestão de requisitos, dos projetos e da qualidade; capacidade para repetir tipos de projetos bem sucedidos. Níveis superiores de maturidade: nível de engenharia básica; nível de engenharia avançada; nível de melhoria contínua dos processos. Modelos de capacitação: servem para avaliar a maturidade dos processos de uma organização; modelo CMM (Capability Maturity Model) : focaliza os processos Número do nível Nome do nível Característica da organização Característica dos processos Nível 1 Inicial Não segue rotinas Processos caóticos Nível 2 Repetitivo Segue rotinas Processos disciplinados Nível 3 Definido Escolhe rotinas Processos padronizados Nível 4 Gerido Cria e aperfeiçoa rotinas Processos previsíveis Nível 5 Otimizante Otimiza rotinas Processos em melhoria contínua
Engenharia de Software: conceitos básicos Pg. 9 E esta disciplina??? Esta disciplina visa tornar o aluno apto a: utilizar um processo típico de produção de software; utilizar padrões e técnicas para: engenharia de requisitos; análise orientada a objetos; projeto orientado a objetos; projeto detalhado e codificação; realização de testes; aplicar os padrões e técnicas acima em projetos de software de pequeno e médio porte; participar de revisões técnicas, relatá-las e conduzi-las.