Engenharia de Software: conceitos e qualidade
O que é interface?
Interface é uma superfície entre duas faces. Uma interface pode (e quase sempre é) um mecanismo de mão dupla (canal de comunicação aberto nos dois sentidos). Uma boa interface torna a intenção do usuário com o sistema mais fácil de aprender e usar.
Confiabilidade
Preservação do desempenho e da confiabilidade do software.
- Maturidade — frequência de falhas.
- Tolerância a falhas — em caso de falha, o desempenho deve ser mantido.
- Recuperabilidade — restabelecimento e restauração após uma falha.
Usabilidade
Facilidade para a utilização do sistema.
- Inteligibilidade — entendimento dos conceitos utilizados.
- Apreensibilidade — facilidade para o aprendizado.
- Operacionalidade — facilidade para realizar as operações no software.
Eficiência
Desempenho do produto em relação a tempo e recursos.
- Comportamento em relação ao tempo.
- Comportamento em relação a recursos.
Manutenibilidade
Correções, atualizações e alterações no software.
- Analisabilidade — facilidade para identificar falhas.
- Modificabilidade — facilidade para remoção de defeitos.
- Estabilidade — ausência de riscos de falhas.
- Testabilidade — permite testes com facilidade.
Portabilidade
Utilização em outras plataformas.
- Adaptabilidade — capacidade de se adaptar a diversos ambientes.
- Capacidade para ser instalado — facilidade para instalação.
- Conformidade — estar em acordo com padrões ou convenções de portabilidade.
- Capacidade para substituir — substituir outro software.
Conceitos básicos: sistema de software
Segundo Bruno Maffeo (1992), um sistema é um conjunto identificável e coerente de elementos que interagem coesivamente, onde cada elemento pode ser um sistema. Quando se trata de sistemas de software, busca-se identificar componentes do sistema que interagem entre si para atender necessidades específicas do ambiente no qual estão inseridos. A escolha de uma fronteira conceitual adequada é um passo decisivo para o êxito do processo de concepção do sistema.
Processo de desenvolvimento de software
O processo de desenvolvimento de software envolve o conjunto de atividades e resultados associados a essas atividades, com o objetivo de construir o produto de software. Existem três atividades fundamentais, comuns a todos os processos de construção de software: desenvolvimento, validação e manutenção.
Os princípios da Engenharia de Software
Processos / Metodologias — orientam como construir software. Incluem a análise de requisitos dos usuários, projeto de estrutura de dados, arquitetura de programas, codificação, teste e manutenção de sistemas. Este conjunto de passos ou atividades também é denominado metodologia de desenvolvimento/manutenção de software.
Métodos / Técnicas
Definem a sequência, a simbologia e os padrões que devem ser aplicados no desenvolvimento/manutenção de software.
Ferramentas
Permitem a automatização das atividades e a construção dos artefatos através de ferramentas do tipo CASE (Computer Aided Software Engineering).
Gerência de projetos
Inclui o planejamento de projetos, controle dos projetos, alocação de recursos, métricas de estimativas e a garantia da qualidade dos produtos confeccionados.
Prototipagem
A prototipagem é um processo que permite ao desenvolvedor criar um modelo do software antes que ele seja construído. Processo largamente utilizado nas outras engenharias. Após o levantamento e definição dos objetivos gerais para o sistema, é desenvolvido um projeto rápido que focaliza os aspectos do software que serão visíveis aos usuários (interface homem × máquina).
Após a construção do protótipo, ele será avaliado e usado pelos usuários para refinar os requisitos para o desenvolvimento do software real. Durante a prototipação ocorre um processo de iteração até que o protótipo seja refinado e satisfaça aos usuários e traga ao desenvolvedor um maior conhecimento do que deve ser feito. Um protótipo serve como um mecanismo para identificar requisitos de software. O protótipo pode servir como o primeiro sistema para o usuário e base de conhecimento para o desenvolvimento do sistema final.
Embora possam ocorrer problemas, o protótipo é um paradigma efetivo da engenharia de software. A chave está na definição precisa das regras do jogo com os usuários. Um protótipo nem sempre pode ser considerado como o sistema final, já que considerações de segurança e performance nem sempre são observadas no modelo.
O modelo espiral
O modelo espiral foi desenvolvido para abranger as melhores características dos dois primeiros paradigmas, o ciclo clássico (ou cascade) e a prototipagem, adicionando um novo elemento chamado análise de risco. O modelo apresenta quatro grandes atividades:
- Planejamento — determinação dos objetivos, alternativas e requisitos.
- Análise de risco — análise das alternativas e identificação e resolução dos riscos.
- Engenharia — desenvolvimento do próximo nível do produto.
- Avaliação do cliente — aceite dos resultados da engenharia.
Engenharia de Software (Sommerville)
É uma disciplina da engenharia que se ocupa de todos os aspectos da produção do software, desde a especificação até a manutenção desse sistema. Disciplina: os engenheiros fazem os produtos funcionarem. Procuram soluções para os problemas, de acordo com as restrições organizacionais e financeiras. Aspectos da produção: além dos aspectos técnicos de desenvolvimento, engloba o gerenciamento de projetos, métodos e ferramentas de apoio.
Aplicações de software
- Software de sistemas: coleção de programas escritos para servir outros programas (compiladores, editores etc.).
- Software de tempo real: monitora, analisa e controla eventos do mundo real.
- Software comercial: processamento de informação comercial, no âmbito operacional e informacional.
- Software científico e de engenharia: algoritmos que processam números (astronomia, manufatura automatizada).
- Software embutido: reside em memórias ROM para leitura; realiza funções limitadas e particulares.
- Software para computadores pessoais: processadores de texto, planilhas etc.
- Software para web: páginas web recuperadas por um browser.
- Software para inteligência artificial: sistemas especialistas ou sistemas baseados em conhecimento.
Visão genérica da Engenharia de Software
- Fase de definição: concentra-se no quê — identificar que informação deve ser processada, desempenho, restrições etc.
- Fase de desenvolvimento: focaliza o como — definir a estrutura dos dados, os processos a ser implementados, plano de testes etc.
- Fase de manutenção: modificações associadas com correção, adaptação, aperfeiçoamento e prevenção.
Software (Pressman)
- Instruções (programas de computador): quando executadas, fornecem a função e o desempenho desejado.
- Estruturas de dados: permitem aos programas manipular adequadamente a informação.
- Documentos: descrevem a operação e o uso dos programas.
Além do programa de computador, o software engloba toda documentação associada e os dados necessários para fazer com que esses programas operem corretamente. É composto de programas, dados e documentos.
A ES pode ser representada em camadas
Mostrando a integração entre processos, métodos e ferramentas para o desenvolvimento de software de computador: ferramentas / métodos / processos / foco na qualidade.
Processos de software
Conjunto de atividades e resultados associados que geram ou mantêm um produto de software.
Especificação
Definição das funcionalidades e restrições.
Desenvolvimento
Deve ser produzido de acordo com as especificações.
Validação
Garantir que é o que o cliente deseja.
Evolução
Atender as necessidades mutáveis do cliente.
Os prazos e resultados variam de acordo com o tipo do produto e da aplicação.