sexta-feira, 13 de abril de 2012

Engenharia de Software Para Concursos - Sommerville - Parte 1

Este é um resumo meu sobre Engenharia de Software segundo as palavras de Sommerville. Conforme eu estudo, venho aqui e acrescento mais coisas. Fique a vontade para consultar, mas não me culpe se algo estiver errado ou faltando. Se quiser, deixe comentários.

Introdução

Engenharia de Software (ESW) é a disciplina que cuida de todos os aspectos da produção de software.

Sistemas de software são abstratos e intangíveis. Não são governados e limitados por materiais, leis físicas ou processos de manufatura. Por isso eles podem facilmente se tornar muito complexos, de difícil compreensão e com alto custo de alteração.

Diferentes tipos de software requerem diferentes tipos de abordagens, ferramentas e técnicas, que devem variar de acordo com o tipo de sistema. Existem pouquíssimos, talvez nenhum disign e técnica de implementação que sejam aplicáveis a todos os tipos de sistemas.

As atuais falhas na construção de sistemas são devidas a dois fatores:

Aumento e novos tipos de demanda:

Com o avanço da engenharia de software e ferramentas de desenvolvimento, aquilo que é possível fazer muda com o tempo, por isso as demandas mudam e evoluem. As coisas que antes eram impossíveis, agora podem ser feitas. Novos métodos de ESW precisam ser desenvolvidos para se adequar à nova realidade.

Baixa expectativa:
Escrever softwares é inicialmente simples. Muitas empresa NÃO usam técnicas de ESW e por isso produzem softwares caros e pouco confiáveis.

O processo de software inclui todas as atividade envolvidas no desenvolvimento de software. Especificação, desenvolvimento, validação e evolução são partes de TODOS os processos de software.

Software não é apenas um programa de computador, mas também toda a documentação e configuração necessária para fazer o programa funionar corretamente. Atributos essenciais da produção de software são manutenibilidade, confiabilidade, segurança, eficiência e aceitabilidade.

Um sistema normalmente é composto por vários programas, arquivos de configuração, documentação do sistema, que descreve a estrutura do sistema, documentação do usuário e até web sites para os usuários buscarem informações novas sobre o sistema.

Um bom software deve entregar as funcionalidades solicitadas, com a performance desejada, deve ser manutenível, confiável e com boa usabilidade.

As atividade fundamentais da engenharia de software são:  especificação, desenvolvimento, validação e evolução.

Existem dois tipos de produtos que software (que podem ser vendidos). Os genéricos e os customizados, mas muitos softwares vem sendo construídos com uma base genérica que depois é adequado ao cliente. Esse é o casos dos sistemas ERP como os da SAP.

Qualidade de software inclui o comportamento do software durante execução, a estrutura e organização do sistema inteiro e da documentação. Existe também a qualidade dos atributos não funcionais, como é o caso do tempo de resposta e a facilidade de compreensão do código fonte.

São cinco as caracteristicas fundamentais para um sistema de software profissional:

Manutenibilidade, Confiabilidade, Segurança, Eficiência (sem desperdício de recursos) e Aceitabilidade.

Engenharia de Software

A ESW se preocupa com todos os aspectos da produção do software, desde o início até a manutenção. Aplica ou desenvolve teorias, métodos e ferramentas apropriadas de acordo com restrições financeiras e da organização. Se preocupa em conseguir os resultados no prazo e dentro do orçamento considerando a confiabilidade necessária e as necessidades dos usuários.

A longo prazo costuma ser mais barato usar métodos de ESW porque na maioria dos casos, os maiores custos estão relacionados à manutenção após entrada em produção.
Processo de Software é uma sequência de atividade que conduz à produção do software. Existem quatros atividades fundamentais e comum aos processos de software.

Especificação, desenvolvimento, validação e evolução.

Não existem nenhum método ou técnica universal que sejam aplicáveis ao desenvolvimento de todos os tipos de software, mas existem 3 tipos de problemas que afetam muitos softwares diferentes.

Heterogenidade do software, Mudanças de negócio e social, Segurança e confiabilidade.

O tipo de uma aplicação é fator importante para escolha das técnicas de ESW. Abaixo existem alguns tipo importantes, mas muitos sistemas se enquadram em mais de uma categoria.

Stand-Alone:
Interativos baseados em transação: (web, aplicativos em nuvens e etc)
Controle embutido: controlam hardware
Processamento em batch:
Entretenimento:
Modelagem e simulação:
Coleta de dados:
Sistema de sistemas:

Mesmo com esses tipo citados, existem noções fundamentais que se aplicam a todos os tipos de sistema: Por exemplo: processo de software, confiabilidade, segurança, engenharia de requisitos e reuso.


Devem ser desenvolvidos usando um processo gerenciável e entendível. Deve-se ter uma clara ideia de tudo que será produzido.

Confiabilidade e performance são importantes. O sistema deve se comportar como esperado, sem falhas e estar disponivel sempre que o usuário for utilizá-lo. Deve ser seguro e funcionar de forma efeiciente, sem desperdício de recursos.

Entendimento e manutenção dos requisitos e especificação do software: é importante saber o que cada usuário espera e atender as espectativas dentro do tempo e do orçamento.

Fazer uso efetivo dos recursos: Quando apropriado, deve reutilizar software já pronto ao invés de escrever um novo que faça a mesma coisa.

Com o advento da web os sistemas deixaram de ser programas isolados em maquinas locais e passaram a ser softwares altamente distribuídos, as vezes em vários locais pelo mundo. Com isso, o reuso de software se tornou importante é a base do desenvolvimento web.

Hoje compreende-se que é impraticável especificar todos os requisitos de um sistema web antecipadamente e eles devem ser desenvolvidos e entregues de forma incremental.

ESW é como um framework que limita a liberdade das pessoas que trabalham com isso.

Atributos essenciais de um produto de software são: manutenibilidade, confiabilidade, segurança, eficiência e aceitabilidade.