Baixe o app para aproveitar ainda mais
Prévia do material em texto
Plano de Aula: Fundamentos da Engenharia de Software FUNDAMENTOS DE ENGENHARIA DE SOFTWARE - CCT0643 Título Fundamentos da Engenharia de Software Número de Aulas por Semana Número de Semana de Aula 1 Tema Fundamentos da Engenharia de Software Objetivos Identificar os problemas que culminaram com a "crise do software", bem como os mitos do processo de desenvolvimento de software Reconhecer a necessidade do desenvolvimento de software ser com base em princípios da engenharia (de software). Discutir os princípios, camadas, procedimentos, métodos e técnicas inerentes a engenharia de software Estrutura do Conteúdo Unidade I-Fundamentos: Software e Engenharia de Software 1.1. O software - O sistema computacional é composto de 2 subsistemas fundamentais: O software e o hardware. - O software é o subsistema computacional que instrui ao hardware o que deve ser feito. Contém as instruções, na ordem, que devem ser executadas pelos componentes do subsistema hardware. - O software é um elemento lógico do sistema computacional e o hardware um elemento físico. - Um sistema de informação é um software. Um jogo é um software. Um aplicativo de celular é um software. Um sistema de informações estratégicas é um software. As redes sociais são softwares. Aplicativos de celular são software. Aplicativos que rodam na nuvem são software. - Os softwares hoje estão presentes em todos os lugares, seja no lazer, seja nas atividades laborais. Os eletrodomésticos como maquina de lavar roupa, geladeiras e televisões são dotadas de software que lhes conferem determinadas possibilidades de automação. - O papel desempenhado pelo software vem sofrendo profundas alterações ao longo dos últimos 40 anos, resultando em softwares modernos, grandes, complexos e integrados, na medida em que abrangem a empresa como um todo e precisam se comunicar, de forma a evitar redundâncias e informações incoerentes. 1.1.1. A natureza do Software Destacar os aspectos abaixo, dentre outros, - O papel do software passou por mudanças significativas, nos últimos 50 anos, impulsionado por consistentes evoluções na capacidade de processamento e armazenamento, internet, dispositivos móveis e outras tecnologias. - O software ganha relevância na empresa, na medida em que distribui informação - O software ganhar contorno de destaque e atenção, na medida em que integra os diversos setores e softwares da empresa - O software torna-se complexo na medida em que agrega muitas funcionalidades e usuários, espalhados geograficamente. - Destacar a existência de softwares legados (desenvolvido há bastante tempo e que vem sendo mantido para adequar-se a realidade do negócio e a evolução das plataformas computacionais. Softwares legados podem sofrer problemas derivados de sua baixa qualidade, como: dificuldade de estender o software, entender o código (linguagens com baixa legibilidade e/ou código mal escrito), alterações mal gerenciadas. Mas que apesar disse, muitas vezes são vitais ao negócio. - O software legado sofre alterações quando: precisam de adaptações para atender a novos ambientes, novas tecnologias e plataformas computacionais, novos requisitos de negócio, ser integrado com ferramentas mais modernas (softwares, bancos de dados e etc), - Destacar que a engenharia de software visa propiciar o desenvolvimento de software com maior capacidade evolutiva (maior e mais eficiente ciclo de manutenção) 1.1.2. A natureza mutante do Software Destacar os aspectos que fazem do software um elemento complexo de ser desenvolvido e gerenciado, na medida em que faz uso de recursos caros (humanos e materiais). - O software é criado e projeto com base em expressão das necessidades de seus usuários, os requisitos do sistema. - Por essência, os requisitos mudam, na medida em que as empresas evoluem, mudam seus processos, reorganizam suas estratégicas, reagem a ações de seus concorrentes e ainda sofrem influência do meio em que estão inseridos. - Não bastassem as mudanças de requisitos, as softwares evoluem conforme as tendências tecnológicas em função de plataformas computacionais mais adequadas, especialmente aqueles que são promissoras na redução de custo ou maximização da receita. Pode-se destacar : evolução de hiperlinks para webapps; aplicações da inteligência artificial; aplicativos móveis; Computação em nuvem 1.2 O desenvolvimento do software - Da mesma forma que o papel do software vem se transformando e se destacando na sociedade, o seu processo de desenvolvimento precisa acompanhar essa evolução. De programadores solitários que interagia no máximo com analistas de sistemas e projetistas de softwares, passamos a ter uma equipe multidisciplinar, onde cada um concentra-se numa parte da tecnologia. - Apesar da mudança as questões que permeiam o desenvolvimento de software, as questões, as problemáticas são as mesmas: 1. Por que leva-se tanto tempo desenvolvendo software ? Por que os custos são tão elevados? Por que nem todos os erros são detectados antes da entrega do produto de software? Por que ainda temos dificuldades em estimar e medir o progresso do desenvolvimento do software ? 1.2.1. A crise do software - O termo foi cunhado nos anos 70, quando os conceitos de engenharia de software ainda não existiam. - Crise do software caracterizou um momento, dessa época, em que as necessidades de desenvolvimento eram superiores a capacidade de produção de softwares, pela complexidade dos problemas e da ausência de técnicas e diretrizes para o desenvolvimento de software com qualidade. - As evidências da crise do software eram: Projetos mal sucedidos, que não chegavam ao fim, ou quando chegavam, o software gerado não atendia (plenamente) a seus usuários, ou os prazos eram extrapolados, assim como os custos. Não havia uma gestão efetiva da qualidade no processo de desenvolvimento, que a essa altura não era visto como um projeto. 1.2.2. Os mitos do software Apresentar os mitos, compreendendo, dentre outros: - Mito: se o cronograma atrasar, podemos acrescentar programadores -> a inserção de programadores ou outros profissionais pode atrasar mais ainda, pois aumenta a complexidade de controle, além do tempo necessário a essa pessoa para entender o software. - Mito: se terceirizarmos o desenvolvimento poderemos relaxar e deixar o terceiro desenvolver -> Se a empresa não gerenciar e controlar o desenvolvimento terá dificuldades em terceirizar a tarefa. O software em desenvolvimento pode demandar integração com sistemas existentes e que o terceiro desconheça, por exemplo. - Mito: uma definição geral dos objetivos é suficiente para iniciar a escrita dos programas --> dificilmente temos condições de reunir todos os requisitos no início, além dos mesmos serem ambíguos, o que pode ser resolvido com efetiva interação entre equipe de desenvolvimento e usuários. - Mito: uma vez desenvolvidos e postos em uso os programas, finda o trabalho da equipe de desenvolvimento. -> nesse momento, da implantação surgem os erros, derivados de um processo mal concebido. Levantamentos indicam que de 60% a 80% de todo o esforço será despendido após a entrega aos usuários pela primeira vez. - Mito: Até que o programa entre em funcionamento não temos como avaliar -> mecanismos de aferição de qualidade podem e devem ser inseridos no processo desde a concepção do software ate seu completo desenvolvimento. Processo e produtos precisam ser avaliados, quanto a qualidade. - Mito: a engenharia de software nos fará produzir documentação volumosa e desnecessária e, invariavelmente vai retardar o desenvolvimento --> engenharia de software não foca em documentação e sim no desenvolvimento de qualidade, o que tende a reduzir o trabalho. 1.2.3. Processo de Software - Embora sejam duas tecnologias integradas, em que ambas demanda qualidade, a forma e o processo do desenvolvimento é diferenciado, em função das diferentes característica de ambos. É notório o maior sucesso e possibilidade de padronizaçãono processo de desenvolvimento de hardware. - Os custos do software estão concentrados no processo de desenvolvimento. - O software não se desgasta, como os componentes físicos do hardware. No processo de desenvolvimento do hardware os problemas tendem a acontecer em 2 momentos: no inicio do processo de fabricação por erro ou defeito no componente (que uma vez substituído resolve o problema) ou no final, por desgaste físico dos componentes. No processo de desenvolvimento do software os erros não descobertos inicialmente resultarão em taxas de erro no inicio de sua vida. Como não há desgaste, se resolvido, tende a se estabilizar. Mas isso não tem sido fato !!!. Porém software requer alterações, que podem demandar novos erros, ao longo de sua vida. Antes que o software se estabilize novas demandas de alterações podem ser solicitadas. Ou seja o software se deteriora pelas alterações necessárias a sua atualização. Outro aspecto: defeito de hardware podem ser resolvidos com a substituição do componente problemático. Com software isso não acontece, pois o erro indica falha no projeto ou no processo. - embora o desenvolvimento de software almeje aproximar-se do desenvolvimento do hardware, a construção com base em componentes ainda não é efetiva. No mundo do hardware a reutilização de componentes é natural. Já no software esse componente esse componente deve ser projetado e construído de forma a ser usados em diferentes softwares, o que nem sempre é bem feito. 1.2.4 Engenharia de Software 1.2.4.1. Conceitos - A Engenharia de software compreende a escolha de um processo, de um conjunto de métodos, com auxilio de ferramentas que permitam o desenvolvimento de um software que atendam as necessidades de seus usuários, com alto padrão de qualidade. - O foco da engenharia de software ocorre na medida em que possibilita o desenvolvimento de softwares grandes e complexos, dentro do prazo, usando os recursos destinados e com qualidade. - Na prática, a engenharia de software abrange: compreensão do problema (levantamento e entendimento dos requisitos), Planejamento de uma solução (analise e projeto do software), execução do plano (codificação da solução analisada e projetada) e examine o resultado (testes e garantias de qualidade). - A engenharia de software preconiza a aferição da qualidade durante o processo do desenvolvimento e no produto de software resultante. 1.2.4.2. Camadas - A engenharia de software é uma tecnologia em camadas. - As camadas da engenharia de software são: Foco na qualidade, Processo, Métodos e Ferramentas. - A camada de processos é a base, onde se define a metodologia de trabalho, para o desenvolvimento do software. - A camada de métodos é que a da sustentação técnica para o desenvolvimento do software. Os métodos envolvem as tarefas do processo: requisitos, análise, projeto, codificação, testes e manutenção. Os métodos definem ainda as atividades de modelagem, por exemplo. - A camada de Ferramentas fornece apoio para automação do processo e de determinados métodos. - A camada de apoio a qualidade define um conjunto de métricas, aspectos de qualidade, gestão e monitoramento da qualidade não apenas do processo, mas também do produto de software. 1.2.4.3. O processo de desenvolvimento de software - Segundo Pressman, uma metodologia genérica de processos para engenharia de software compreende 5 atividades metodológicas. - 1. Comunicação - A interlocução com os interessados no sistema é fundamental. - 2. Planejamento - o desenvolvimento de software envolve a gestão de recursos (financeiro, tempo e materiais), diante da possibilidade de riscos , para que os produtos resultantes possam ser desenvolvidos com qualidade. - 3. Modelagem - para que se possam compreende as necessidades dos usuários, as ideias de solução são esboçadas em diagramas, desde modelos iniciais até modelos mais detalhados e complexos. Os modelos ajuda na comunicação e no planejamento. - 4. Construção - construção de código e testes para identificar erros. - 5. Emprego - feedback dado pelo usuário, ao emprego do software, após sua entrega. - Com essas 5 atividades é possível desenvolver software grandes e pequenos, simples e complexos. - Além dessas 5 atividades metodológicas temos as atividades de apoio que são: Controle e acompanhamento do projeto, administração de riscos, garantia da qualidade, revisões técnicas, medição, gerenciamento de configurações de software, gerenciamento de usabilidade, preparo e produção de artefatos de software Aplicação Prática Teórica Apontar aos alunos exemplos de projetos de software que fracassaram, identificando os problemas e possíveis causas. Apontar aos alunos exemplos de projeto de software que tiveram sucesso, identificando particularidades do processo de desenvolvimento e do gerenciamento do projeto.
Compartilhar