Engenharia de Software: Guia Completo
Classificado em Computação
Escrito em em português com um tamanho de 61,79 KB
O que é Engenharia de Software?
É a área da engenharia que se preocupa com todos os aspectos envolvidos na produção de software.
O que é software?
São programas de computador e toda a documentação associada, como requisitos, modelos de design e manuais do usuário.
Quais os tipos de produtos de software?
Existem dois tipos principais:
- Genéricos / COTS (Commercial Off-The-Shelf): Também conhecidos como software de prateleira, são desenvolvidos para um grande número de clientes, visando um mercado amplo.
- Sob-encomenda / Personalizado: Desenvolvidos para um único cliente, de acordo com suas necessidades específicas.
O que é um processo de software?
É um conjunto de atividades cujo objetivo é o desenvolvimento ou a evolução de um software.
Quais as atividades genéricas de um processo de software?
- Especificação: Define o que o software deve fazer e suas restrições de desenvolvimento.
- Desenvolvimento: Envolve a produção do sistema de software.
- Validação: Verifica se o software atende às expectativas do cliente.
- Evolução: Modifica o software em resposta às mudanças nas demandas e necessidades.
Qual o custo da engenharia de software?
Aproximadamente 60% dos custos são destinados ao desenvolvimento e 40% aos testes. Em sistemas customizados, os custos de evolução costumam exceder os de desenvolvimento.
O que é a ferramenta CASE (Computer-Aided Software Engineering)?
É um software que fornece suporte automatizado às atividades do processo de software. Subdivide-se em:
- Upper-CASE: Suporta as atividades iniciais do processo, como análise de requisitos e projeto.
- Lower-CASE: Suporta as atividades finais, como programação, depuração e teste.
Quais são os atributos de um bom software?
- Manutenibilidade: Deve ser possível evoluir o software para atender às novas necessidades.
- Confiabilidade: O software deve ser confiável e seguro.
- Eficiência: O software não deve desperdiçar recursos do sistema.
- Usabilidade: O software deve ser utilizável, sem esforço excessivo, pelos usuários a que se destina.
Quais são os principais desafios da Engenharia de Software?
- Sistemas Legados: Manter e atualizar sistemas antigos, porém valiosos para o negócio.
- Diversidade: Desenvolver software para uma ampla gama de plataformas e ambientes.
- Entrega Acelerada: Reduzir o tempo de entrega do software sem comprometer a qualidade.
Quais as responsabilidades de um profissional de Engenharia de Software?
- Confidencialidade: Respeitar a confidencialidade de informações.
- Competência: Não deturpar o próprio nível de competência.
- Direitos de Propriedade Intelectual: Respeitar os direitos autorais e de propriedade intelectual.
- Uso Indevido do Computador: Não utilizar habilidades técnicas para uso indevido de computadores de terceiros.
Um sistema é composto por?
Hardware, software e pessoas.
Quais os tipos de propriedades emergentes?
- Funcional: Ocorrem quando todas as partes de um sistema trabalham juntas para atingir um objetivo.
- Não Funcional: Relacionam-se ao comportamento do sistema em seu ambiente operacional, como confiabilidade, desempenho, segurança e usabilidade.
Dê exemplos de propriedades emergentes:
- Peso total
- Confiabilidade
- Usabilidade
Como saber se um sistema é confiável?
Um sistema é considerado confiável quando apresenta poucos erros.
Quais os tipos de confiabilidade?
- Hardware: Probabilidade de um componente falhar e tempo necessário para repará-lo.
- Software: Probabilidade de um componente de software produzir uma saída incorreta.
- Operador/Usuário: Probabilidade de um operador cometer um erro.
O ambiente afeta a funcionalidade de um sistema e por quê?
Sim. Por exemplo, a falta de energia elétrica impede o funcionamento do sistema.
Defina os processos da Engenharia de Software (ES):
- Definição de requisitos: Definição dos requisitos funcionais abstratos, propriedades do sistema e características indesejáveis.
- Projeto de sistema: Agrupamento de requisitos, identificação de subsistemas, especificação de funcionalidades e definição de interfaces.
- Desenvolvimento de subsistemas: Projetos de hardware, software e comunicação são realizados em paralelo.
- Integração de Sistemas: União de todos os componentes (hardware, software e pessoas).
- Instalação de Sistema: Implementação do sistema no ambiente do cliente, podendo haver problemas físicos e resistência humana.
- Evolução de Sistema: Adaptação do sistema às mudanças de requisitos.
- Desativação de Sistema: Retirada do sistema de serviço após o término de sua vida útil.
Quando devemos adquirir sistemas ou desenvolvê-los?
Depende da necessidade do cliente. Se já existir um sistema no mercado que atenda às suas necessidades, a aquisição é recomendada. Caso contrário, o desenvolvimento de um sistema personalizado é necessário.
Qual a diferença entre contrato e subcontrato?
O contrato é firmado entre o cliente e a empresa desenvolvedora do sistema. O subcontrato é um acordo entre a empresa contratada e outra(s) empresa(s) para a realização de parte do trabalho.
Quais os modelos de processos genéricos de software?
- Cascata: As fases são executadas de forma sequencial, só se pode passar para a próxima fase se a anterior estiver concluída e sem erros.
- Evolucionário: Desenvolvimento e especificação ocorrem simultaneamente, sem uma sequência rígida.
- Formal: Desenvolvimento baseado em métodos matemáticos para garantir a correção do software.
- Orientado a Reuso: Construção do sistema a partir de componentes pré-existentes.
Qual a vantagem/desvantagem do modelo em cascata?
- Vantagem: Fases bem definidas, facilitando o gerenciamento e a documentação.
- Desvantagem: Dificuldade em acomodar mudanças de requisitos após o início do projeto.
Qual a vantagem/desvantagem do modelo evolucionário?
- Vantagem: Flexibilidade para mudanças, desenvolvimento e entrega rápidos, e menor necessidade de requisitos detalhados inicialmente.
- Desvantagem: Processo menos visível e software potencialmente mal estruturado.
Qual a vantagem/desvantagem do modelo orientado a reuso?
- Vantagem: Redução de custos, tempo de desenvolvimento e riscos, devido ao reuso de componentes.
- Desvantagem: Possível perda de controle sobre a evolução do sistema e o sistema pode não atender completamente às necessidades do cliente.
O que é Interação?
É a evolução dos requisitos durante o processo de desenvolvimento, envolvendo a repetição de uma ou mais atividades.
O que é um desenvolvimento incremental? Quais as vantagens e desvantagens?
O sistema é dividido em subsistemas por funcionalidades, que são desenvolvidos e entregues incrementalmente.
- Vantagem: Os incrementos iniciais servem como protótipos, o cliente recebe entregas parciais, menor risco de fracasso do projeto e melhor compreensão dos requisitos ao longo do tempo.
- Desvantagem: Dificuldade em mapear os requisitos no início do projeto e os requisitos não são definidos em detalhes inicialmente.
O que é um desenvolvimento espiral? Quais as vantagens e desvantagens?
O processo é representado por uma espiral, onde cada volta representa uma fase do processo, com ênfase na análise de riscos.
- Vantagem: Maior qualidade devido ao planejamento e análise de riscos em cada fase, e maior viabilidade na gerência.
- Desvantagem: Gerenciamento de processos mais complexo e necessidade de maior experiência da equipe de desenvolvimento.
Quais os requisitos da especificação de software?
- Estudo de viabilidade;
- Elucidação e análise de requisitos;
- Especificação de requisitos;
- Validação de requisitos.
Modelos de desenvolvimento: