quinta-feira, 24 de março de 2011

[Seminário] Natureza do Software e a Necessidade de Princípios e Processo

O software está praticamente em todas as coisas dos nossos cotidianos, servindo às mais variadas necessidades das pessoas.
Ex: Telefone fixo, telefone celular, computador, etc.
Como o software é construído?
Para construir ou desenvolver um software, nós precisamos entender a sua natureza, aonde vamos conhecer a aplicação na qual será usado, e compreender os princípios e processo para guiar como e quando as atividades quando as atividades serão realizadas, realizadas, além de definir quem vai executa – las.
O software tem se tornado um companheiro e sido uma ferramenta fundamental de nosso dia – a – dia.

Natureza do software
O software é um produto diferenciado dos demais, possuindo características que lhe dão uma natureza própria. Conhecer essas características é o primeiro passo para compreender os problemas enfrentados pelos desenvolvedores, e tentar lançar uma luz sobre as razões da existência da “crise do software”.

Grande complexidade
Softwares nascem das necessidades do cliente, portanto representam modelos do mundo real. Cada detalhe presente no problema que o software se propõe a resolver transforma-se num elemento a mais dentro da aplicação. Isso gera uma grande complexidade, que se torna maior à medida que o número desses elementos aumenta e exige a necessidade de interação entre si.

Ausência de conformidade
A complexidade é um problema que afeta diversas áreas do conhecimento científico, entretanto a maioria delas se baseia na convicção de que existem princípios unificadores que, uma vez descobertos, facilitam sua compreensão. A física é um bom exemplo, com suas leis fundamentais ela é utilizada como sustentáculo para a engenharia civil.

Invisibilidade
Ao contrário de outros produtos o software não pode ser desenhado ou projetado de uma maneira que corresponda ao mundo real. Ele não possui natureza física e não pode ser definido geometricamente. Mesmo os diagramas criados para representá-lo na verdade não descrevem o software em si.

Ilusão de maleabilidade
O software possui uma maleabilidade extremamente elevada. Por não ter natureza física, ele é notado pelas pessoas como algo de fácil adaptação. Em geral, indivíduos o acham extremamente maleável e crêem que qualquer mudança terá um baixo custo. É bastante comum o cliente mudar o escopo do projeto enquanto ele está em andamento, sem atentar para as implicações disso.
Hoje o software é responsável pro significativa porção dos sistemas computacionais. O software tem nas mais diversas aplicações. O software tem sido um componente importante e muito utilizado em diversos sistemas. Exemplo: ele é encarregado do controle e roteamento de milhares de ligações telefônicas.
O software compreende um conjunto de instruções que, quando são executadas em um dispositivo, fornecem funcionalidades a seus usuários com desempenho desejado. O software tem uma característica que o diferencia de outros produtos, e especificamente do hardware. Hardware é um artefato físico (geralmente tecnológico) como, por exemplo, um aparelho de TV, um equipamento de som, um aparelho celular ou um computador propriamente dito.
No entanto, via de regra, os equipamentos (hardware) sofrem desgaste e, como resultado, começam a apresentar defeitos decorrentes desse desgaste (físico) causado, por exemplo, o longo período de uso, a poeira, variações na tensão da rede elétrica e umidade.
E o software sofre desgaste?
Não. O software não é uma entidade e, portanto, o software não é tipo de desgaste (físico) como ocorre no hardware.
É importante você observar o comportamento da curva real de falhas (em função do tempo) de software quando comparada com a curva ideal de falhas de software. Toda vez que uma nova funcionalidade é desejada, tornar – se necessário adicionar e/ou modificar as instruções já existentes no software e, por conta dessas mudanças, novos defeitos podem ser introduzidos, aumentando o numero de falhas e, portanto, podendo causar a deterioração na qualidade do software.
Contudo, observe que o desenvolvimento de sistemas (como analogia com a construção de uma casa), pode ser decomposto em três fases genéricas: definição, desenvolvimento, e manutenção.
A fase de definição engloba a identificação de informações que deveriam ser processada, funções e desempenho desejados, tipo de interface a serem utilizadas, tarefas que o sistema deveria prover suporte, perfil de usuários dos sistemas, dentre outras.
A fase de desenvolvimento concentra – se no projeto de dados e arquitetura de software do sistema (isto é, como ele está organizado), conversão do projeto para alguma linguagem de programação (ou seja, implementação), realização de teste e avaliação.
A fase de manutenção considera modificações ou correções necessárias no sistema a fim de que este atenda aos requisitos do sistema.
O guia de desenvolvimento de software é encarregado de:
• Definir a seqüência de aplicação de métodos (em cada uma das etapas de desenvolvimento);
• Definir os produtos (documentos ou outros artefatos) a serem entregues;
• Estabelecer as datas de entrega dos produtos ou artefatos;
• Assegura qualidade de desenvolvimento.
O processo guia de desenvolvimento desde sua concepção quando os clientes (ou usuários) expressam quais as funcionalidades (ou requisitos do sistema) eles desejam até a entrega do produto final (software).
A parte da engenharia de software, o objetivo principal é fazer uso de princípios de engenharia a fim de produzir, a baixo custo, o software que opere corretamente e com eficiência em equipamentos (como o computador), onde o software é instalado.

Engenharia de Software
A engenharia de software consiste em uns conjuntos de técnicas que visam apoiar as atividades de levantamento de requisitos, mas também a análise e especificação dos requisitos do sistema de software a ser desenvolvido.
Vale ressaltar que a execução dessas atividades ocorre de maneira disciplinada, ou seja, guiadas por um processo, alem de adotar práticas de gerenciamento de projetos que visam assegurar produtividade e qualidade do software, bem como redução de custos de desenvolvimento. É necessário um processo que serve de guia de desenvolvimento de software e:
• Define a seqüência de aplicação dos métodos;
• Define os produtos a serem entregues;
• Busca assegurar qualidade de desenvolvimento;
• Ajuda a estabelecer marcos no cronograma para entrega de aterfatos.
A engenharia de software é uma área onde é feita a aplicação disciplinada e sistemática (ou seja, que considera princípios de engenharia) para desenvolvimento e manutenção de software.
Um engenheiro de software, precisa saber como conversar com o cliente (a pessoa ou a empresa interessada no software a ser desenvolvido) com o objetivo de levantar os requisitos de software que serão documentados na especificação de requisitos. E a partir daí, ele poderá iniciar as atividades seguintes (projetos, implementação e testes).
E o porquê da engenharia de software ou pra que ela serve?
A engenharia de software visa assegurar:
• A qualidade do software (produto);
• Entrega do software conforme cronograma;
• Desenvolvimento do software conforme orçamento.
A qualidade do produto é determinante para o sucesso de um software. Há vários atributos da qualidade que servem de indicativo para aceitação e satisfação do cliente. Dentre elas, podemos destacar:
Corretude – Um software é correto se ele satisfazer os requisitos de funcionalidades descritos na especificação.
Confiabilidade – Um software é confiável se você pode utilizar o software por um determinado período de tempo com probabilidade mínima da ocorrência de falhas.
Manutenibilidade (ou ocorrência): Considera – se facilita a sua manutenção quando ele é desenvolvido de modo que possa evoluir para atender as necessidades de mudança de requisitos do cliente.
Eficiência: É considerado quando ele não desperdiça capacidade de memória e de processamento.
Usabilidade: Provê usabilidade quando é fácil de usar e aprender a usar. O usuário consegue utilizar um software sem ajuda de outras pessoas, sem treinamento, ou seja, se o software é intuitivo, o usuário conseguira utiliza – lo sem dificuldade.
Cabe destacar que podemos afirmar que se uma especificação de requisitos de software está correta, então ele é confiável, embora não possa ser afirmado para o software ser confiável ele não implica que sua especificação seja correta.
Princípios de Engenharia
Descrevem algumas propriedades gerais e referem se tanto ao produto como ao processo de software.
A aplicação dos princípios é feita através de métodos e ferramentas. Os princípios podem ajudar na escolha de metodologias e ferramentas apropriadas para o produto que se deseja construir. Princípios:
Formalidade: é uma atividade criativa e com tal tende a “seguir a inspiração do momento”. Ela estará contida no projeto, na programação, nas rotinas de teste, nos procedimentos da instalação etc;
Abstração: É o processo de identificar os aspectos importantes do produto/processo, ignorando-se os detalhes;
Generalização: é também uma forma de abstração, buscando-se as características comuns e esquecendo-se as características específicas dos itens a serem generalizados.
Flexibilização: irá conferir ao produto de software a facilidade de adaptação a novos ambientes, a mudanças ocorridas no ambiente, a casos de uso não implementados e às manutenções que se fizerem necessários.
Modualaridade: Lida com problemas grandes, no qual precisa ser dividido em partes menores. Também oferece suporte a separação de interesses.

Processo de Desenvolvimento
Um aspecto importante no desenvolvimento de um sistema de software é o continuo feedback durante o processo. A importância de ter um feedback é fazer um desenvolvimento mais cedo, pois implica na necessidade de fazer um protótipo para o cliente. Com isso pode minimizar custos e assegurar que o desenvolvimento irá ocorrer da forma planejada e dentro dos prazos propostos.
Um processo de desenvolvimento de software é necessário, porque ele:
• Serve de guia para controlar as atividades de desenvolvimento do sistema;
• Aloca tarefas para desenvolvimento específico;
• Especifica quais artefatos precisam ser desenvolvidos em cada umas das etapas de desenvolvimento;
Oferece critérios para monitorar as atividades de um projeto.
O RUP (RATIONAL UNIFIC PROCESS) é considerado como um framework ou arcabouço que serve para gerar processos. Ele é configurável, ou seja, você pode customizar ou especializar o processo para diversos tipos de sistemas. É um processo que define bem o conjunto de atividades a serem executadas, além de informar os responsáveis pela execução delas.
O RUP é composto de quatro fases: concepção, elaboração, construção e transição.
O RUP determina como o sistema deve ser desenvolvido e, portanto, de sistema de software seguindo o processo RUP é: Interativo e incremental, Guiado pro casos de uso, Centrado na arquitetura de software.

Concepção
• Especificar as principais funcionalidades do software a ser desenvolvido;
• Deverá definir como o software deve ser organizado;
• Deve fazer uma avaliação inicial dos riscos;
• Outra preocupação é planejar e estimar custo de desenvolvimento

Elaboração
• Deve levantar detalhar e especificar a maioria dos casos de uso;
• Programar os casos de usos mais essenciais;
• Projetar a forma na qual o software será estruturado, buscando validá – la;
• Revisar o planejamento de atividades e estimativa dos recursos necessários para completar o projeto.

Construção
• É feita o desenvolvimento e a implantação do software.
• Refinar o projeto de arquitetura, adicionando detalhes e fazendo correções.
• Deve realizar testes de software, verificando se ele funciona da forma como foi especificado e, então, a primeira versão é gerada.
• Planejar a implantação do sistema no ambiente do cliente.

Transição
Deve ser implantado o sistema no ambiente do cliente (ou seja, o software sai do ambiente de laboratório, onde foi desenvolvido e é instalado no ambiente do cliente). É denominado de evolução do produto da versão beta para versão final.
Pode haver alguns defeitos após a entrega do software, e os clientes relatam a ocorrência de defeitos, então essas reclamações de problemas e sugestões de melhorias são classificadas para que os defeitos sejam corrigidos e possam ser implementadas novas melhorias. São realizados treinamentos e assistência aos usuários.

Alunas:

Daniele Sant' Ana RA:0901343786
Gislaine Almeida RA:0901379702

Nenhum comentário:

Postar um comentário