Engenharia de Software Conceitos Prof. MSc Wagner Siqueira Cavalcante Engenharia de Software (Software Engineering): É uma 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 e após o início de sua operação, sendo que: • Os engenheiros de software devem fazer com que os produtos funcionem, aplicando teorias, métodos e ferramentas apropriadas e, de modo seletivo, procuram descobrir soluções para os problemas, mesmo quando não existem teorias aplicáveis e métodos de apoio. • Engenharia de Software não se dedica somente aos processos técnicos de desenvolvimento, mas também às atividades, como: gerenciamento de projetos de software, desenvolvimento de ferramentas, métodos e teorias que dão apoio à sua produção. Engenharia de Software x Ciência da Computação • Ciência da computação teoria e fundamentos • Engenharia de Software prática = desenvolver/fornecer software útil Engenharia de Software × Engenharia de Sistemas • Engenharia de Sistemas: todos os aspectos relacionados ao desenvolvimento de sistemas com base em computadores, incluindo hardware, software e engenharia de processos Engenharia de Software faz parte deste processo. Engenharia de Sistemas O envolvimento interdisciplinar da engenharia de sistemas envolve equipes com diferentes formações técnicas, necessárias por causa do amplo conhecimento exigido, considerando-se todas as implicações de decisões referentes ao projeto do sistema: 1. 2. 3. 4. 5. 6. 7. 8. Definição dos requisitos Projeto do sistema Desenvolvimento de subsistema Integração do sistema Instalação do sistema Operação do sistema Evolução do sistema Desativação do sistema Ciclo de Vida da Engenharia da Informação Processo de Software É um conjunto de atividades, cuja meta é o desenvolvimento ou a evolução de um software, possui quatro atividades de processo fundamentais, comuns a todos os processos de software: • Especificação do software Define as funcionalidades do software suas restrições e operações; • Desenvolvimento do software O software deve ser produzido de modo que atenda as suas especificações; • Validação do software O software tem de ser validado para garantir que ele faz o que o cliente deseja, ou seja, o que foi especificado; • Evolução do software O software deve evoluir para atender às necessidades mutáveis do cliente e do ambiente. Modelo de Processo de Software Representação simplificada de um processo de software, apresentada à partir de um modelo. Pela sua natureza, os modelos são simplificações, portanto, uma abstração do processo real que está sendo descrito. Dentre os modelos de processo, destacam-se as atividades que são parte do processo de software, produtos de software e o papel das pessoas envolvidas na Engenharia de Software: • Workflow – Seqüência de atividades • Fluxo de dados ou atividades – fluxo de informações • Papel/Ação – representa os papéis das pessoas e quais suas • • • • • responsabilidades nas atividades Paradigmas de desenvolvimento de software Waterfall - Modelo em cascata Desenvolvimento evolucionário Transformação formal - produção de uma especificação formal do sistema. Desenvolvimento orientado ao reuso. Custos da Engenharia de Software Não existe uma resposta simples que defina “custos”, uma vez que a distribuição precisa de custos ao longo do processo de software, depende do processo utilizado e do tipo de software que será desenvolvido. Custos de Desenvolvimento = 60%, e Testes = 40%, aproximadamente. Para o software personalizado, os custos de evolução freqüentemente excedem os de desenvolvimento. Ferramentas CASE O acrônimo de CASE significa Computer-Aided Software Engineering, ou Engenharia de Software auxiliada por computador. Ela se refere a uma ampla gama de programas utilizados para apoiar as atividades de processo de software, como análise de requisitos, modelagem do sistema, depuração e testes. Principais atributos de um bom software: Às vezes chamados de “atributos não funcionais”, estes estão relacionados à sua facilidade de manutenção, nível de confiança, eficiência e facilidade de uso. Requisitos não funcionais Organizacionais Produto Facilidade de uso Portabilidade Eficiência Desempenho Confiabilidade Espaço Entrega Implementação Padrões Externos Interoperabilidade Segurança Privacidade Legais Éticos Projeto É um empreendimento temporário que tem por finalidade criar um produto, serviço ou resultado único... têm natureza temporária = data de início e fim definidos concluídos quando as respectivas metas e objetivos forem cumpridos cancelados quando não será possível cumprir suas metas e objetivos As atividades de operação de um projeto abrangem um trabalho contínuo, sem uma data de término, e geralmente repetem o mesmo processo. Gerenciamento de Projetos Processo que exige várias atividades • planejar, • colocar em ação o plano do projeto e • acompanhar o seu progresso e desempenho. O planejamento é uma das funções mais importantes do projeto, pois é o processo em que se define o padrão a ser aplicado ao longo do ciclo devido e será usado para rastrear o desempenho futuro do projeto. Habilidades Necessárias a um Gerente de Projeto Muitas organizações nomeiam seus técnicos especialistas como gerentes de projeto, mas as habilidades e a experiência que os tornam estrelas em suas áreas técnicas, supostamente se traduzem em aptidões para a gerência de projetos, mas não é necessariamente assim. Os gerentes de projetos são profissionais generalistas, com muitas habilidades em seu repertório. São solucionadores de problemas que usam várias competências. Na realidade, eles podem ter aptidões técnicas, todavia isso não é prérequisito para o gerenciamento de projetos. Equipe de projeto com especialistas técnicos... Habilidades Necessárias a um Gerente de Projeto 1. Comunicação escrita e oral: Domínios imprescindíveis para: a elaboração de documentos do projeto, atualizações de reuniões, relatórios de status, etc., assegura que as informações sejam explícitas, claras e completas, e que o público não tenha dificuldade de entender o que está sendo transmitido. Habilidades Necessárias a um Gerente de Projeto 2. Aptidões organizacionais: Aptidões para rastrear, criar e manter: documentos do projeto, informações sobre requisitos, memorandos, relatórios do projeto, registros pessoais, cotações, contratos, + organizar reuniões, + gerenciar o tempo. Habilidades Necessárias a um Gerente de Projeto 3. Saber elaborar orçamentos: Fazer estimativas de custos para a elaboração do orçamento do projeto requer conhecimentos básicos de finanças e contabilidade, portanto, desejáveis. Habilidades Necessárias a um Gerente de Projeto 4. Negociar e influenciar: Em termos simples, negociar é trabalhar com os outros para se chegar a um acordo. Influenciar é a habilidade de convencer as pessoas, tanto a tomarem atitudes que, de outra forma, não tomariam, quanto também de mudar de idéia e alterar o rumo dos acontecimentos, o que se reflete nos resultados. Habilidades Necessárias a um Gerente de Projeto 5. Capacidade de liderança e de gerenciamento: Estes não são termos sinônimos. Os líderes expressam sua visão, obtém consenso para as metas estratégicas, estabelecem diretrizes, inspiram e motivam outras pessoas. Habilidades Necessárias a um Gerente de Projeto 6. Saber formar equipes e gerenciar recursos humanos: É muito utilizada em conjunto com as habilidades de negociação, influência e gerenciamento, pois sempre será necessária a formação de equipes, o gerenciamento de recursos humanos, a motivação dos integrantes, mesmo que estes não sejam seus subordinados diretos. Pontos principais A Engenharia de Software é uma disciplina da engenharia que se ocupa de todos os aspectos da produção de software. Os produtos de software constituem-se de programas desenvolvidos e da documentação associada. Os atributos essenciais dos produtos são a facilidade de manutenção, confiabilidade, eficiência e facilidade de uso. O processo de software consiste em atividades envolvidas no desenvolvimento de produtos de software. As atividades básicas são a especificação, o desenvolvimento, a validação e a evolução de software. Métodos são meios organizados de produzir software. Eles incluem sugestões sobre o processo a ser seguido, as anotações a serem utilizadas, as regras que regem as descrições de sistemas produzidas e as diretrizes do projeto. Pontos principais As ferramentas CASE são sistemas de software projetados para dar apoio às atividades de rotina no processo de software, tais como editar diagramas de projeto, verificar diagramas, manter o controle do projeto. Projetos são atividades com início e fim determinados, com a finalidade de criar um produto, serviço ou resultado único. O gerenciamento de projetos é um processo que exige várias atividades, incluindo planejar, colocar em ação o plano do projeto e acompanhar o progresso e o desempenho. Um bom gerente de projetos deve possuir ou lapidar suas habilidades nas áreas de comunicação, organizacional, negociação, liderança e criatividade, para poderem resolver os problemas durante a vida de um projeto.