Minha História Teste escrita por Seiji


Capítulo 8
Capítulo 8


Notas iniciais do capítulo

á é ó ía ´ça

al óa ç



Referência Bibliográfica de Sistemas



Contexto

 Com o avanço e popularização dos computadores, é notável que o uso de sistemas de computador se tornou indispensável para a sobrevivência da sociedade como a conhecemos. Estes sistemas são utilizados em atividades básicas, como o comércio, o ensino e a comunicação. Isto porque softwares podem ser o produto final ou apenas uma parte dele, exemplificando, pode ser um sistema que irá gerenciar o setor logístico de uma empresa, como pode estar embutido no dispositivo GPS dos veículos envolvidos no transporte dos produtos desta mesma empresa.

Sendo presente em todas as áreas da vida humana, é preciso desenvolver sistemas de boa qualidade, e para isto, temos a Engenharia de Software, que estabelece métodos, ferramentas e procedimentos que visam melhorar a produção e qualidade dos sistemas.





Engenharia de Sistemas

A engenharia de sistemas surgiu entre os anos sessenta e setenta, para ajudar a acabar com a "crise do software" - nome dado ao problema enfrentado na época. Eram comuns projetos com problemas, ultrapassando prazos e orçamentos estipulados, ineficientes ou ineficazes. A demanda por softwares era mais alta que o possível a ser oferecido, os problemas no desenvolvimento tornavam-se cada vez mais complexos, não haviam métodos padronizados de desenvolvimento ou definições para avaliação, portanto não era possível medir com precisão a qualidade do sistema desenvolvido.

Para solucionar estes problemas, a engenharia de software sistematizou o desenvolvimento, operação e manutenção de softwares, sendo composta por processos, métodos e ferramentas, com foco na qualidade.

— Os processos são a base para o controle gerencial no projeto de engenharia de software, oferecem o contexto para aplicação dos métodos técnicos, estabelece os marcos do projeto, assegura a qualidade e faz a gestão adequada das modificações.

Os métodos são as instruções técnicas para o desenvolvimento do software. São constituídos pela comunicação, levantamento de requisitos, modelagem do projeto, desenvolvimento do sistema, testes e manutenção.

As ferramentas são softwares que oferecem apoio aos processos e métodos, de forma automatizada ou semi-automatizada.

A qualidade de um sistema é facilmente definida, mas dependendo do contexto, podem ser utilizadas métricas insuficientes ou inadequadas. A qualidade poderia ser medida através de três visões diferentes:

- Usuário

O usuário do sistema desconhece as características internas do sistema que utiliza, para ele, um sistema de qualidade é aquele que consegue efetuar o que ele precisa.

- Desenvolvedor

Para o desenvolvedor, um bom software pode ser um sistema bem codificado e em conformidade com os requisitos.

- Empresa

A empresa que comprou o software pode considerar um software de qualidade aquele que é entregue no prazo, dentro do orçamento e que atenda aos usuários deste sistema.

É preciso definir exatamente quais as características qualitativas para a definição de um bom software, abrangendo estas três visões. Um software de boa qualidade deve atender a estes critérios:

  • Eficiência
    O sistema cumpre a tarefa para qual foi designado.

  • Eficácia
    Não basta executar a tarefa, é preciso executá-la bem. A tarefa é cumprida de forma satisfatória, dentro dos parâmetros considerados aceitáveis.

  • Manutenência
    Processos passam por mudanças e os sistemas utilizados devem acompanhá-las. É preciso criar um software fácil de manter, de boa escalabilidade, cujas futuras manutenções possam ser aplicadas em menos tempo e sem a necessidade de refazer grandes blocos do sistema.

  • Confiabilidade
    As informações ou ações geradas à partir do software devem ser confiáveis.

  • Disponibilidade
    A disponibilidade está também ligada à confiabilidade, visto que de nada serve um sistema eficiente e eficaz se ele encontrar-se indisponível com frequência ou em momentos críticos.

  • Segurança
    Quando está se lidando com dados sensíveis é preciso de segurança, um sistema falho pode expor estes dados e causar inúmeros prejuízos, sejam financeiros ou de imagem, tanto para a empresa desenvolvedora quanto para seu cliente.

Engenharia de Requisitos

Os requisitos de um sistema podem ser classificados em requisitos funcionais e não funcionais, ou segundo Pressman, Requisitos Normais, Requisitos Esperados e Requisitos Excitantes.

Requisitos normais: estão ligados diretamente ligados às funcionalidades, refletem os objetivos e metas do produto ou sistema.

Requisitos esperados: estes refletem características implícitas, geralmente fundamentais, portanto, omitidas pelo cliente. Por exemplo, permitir que o cliente veja a fatura de pagamento, mas que não possa editá-la.

Requisitos excitantes: oferecem características além das esperadas, trazendo "extras" que quando presentes aumentam a satisfação do cliente.

A dificuldade em entender os requisitos para a criação de soluções para os problemas é tratada pela engenharia de requisitos, que é uma sub-área da Engenharia de Sistemas. Seu objetivo é otimizar a modelagem de sistemas e a capacidade de analisá-los, para isto, segue algumas etapas distintas, que segundo Pressman, são:

  • Concepção
    Nesta primeira etapa é feita uma análise geral dos problemas a serem resolvidos e das metas a serem alcançadas.

  • Levantamento
    É feito junto ao cliente o levantamento de quais são os problemas e quais as soluções desejadas, qual o propósito do sistema e funcionalidades desejadas.

  • Elaboração
    A elaboração trabalha as informações coletadas nas etapas anteriores, focando no desenvolvimento de um modelo técnico das funções, características e restrições do software a ser refinado ou desenvolvido.

  • Negociação
    O engenheiro de requisitos deverá negociar com o cliente as características do sistema, visto que podem haver solicitações de recursos conflitantes, desnecessários ou que ultrapassem o orçamento para o projeto.

  • Especificação
    A especificação servirá como base para o projeto, será como um "guia" para as atividades subsequentes. Ela define a função e desempenho do sistema, observando as restrições enfrentadas ou a serem aplicadas.

  • Validação
    Todas as informações registradas na especificação passam por uma validação, para assegurar que não existam informações ambíguas, dados inconsistentes, omissões, erros, requisitos conflitantes ou fora da realidade. Nesta etapa final de validação, a qualidade do documento na especificação gerada é avaliada não só por engenheiros de requistos, mas também por clientes, usuários e outros interessados.

Ciclo de Vida de Desenvolvimento

O ciclo de vida de desenvolvimento é um modelo conceitual, utilizado em gerenciamento de projetos, descreve os estágios envolvidos em um projeto de desenvolvimento de sistemas de informação. Várias metodologias foram desenvolvidas para guiar os processos envolvidos, entre eles, temos:

  • Build and fix (Constrói e conserta)
    O software é desenvolvido sem especificação do projeto e é retrabalhado até que esteja de acordo com as necessidades do cliente. Pode funcionar em micro projetos, mas em projetos maiores pode - e provavelmente irá - levar ao fracasso.

  • Modelo cascata
    Este foi o método original do ciclo de vida de desenvolvimento, o único com aceitação geral até a década de 1980. Muito utilizado em projetos em que para o software, a segurança e confiabilidade são fatores críticos de sucesso. A ênfase deste modelo está na documentação, que contém todas as informações necessárias para a todas as etapas de desenvolvimento, testes, entrega e manutenção. As informações muitas vezes são representadas através de gráficos e simulações. Dentro do modelo cascata há três abordagens diferentes para implementação: cascata pura, incremental e evolucionária.
    1. Cascata pura:
       Todas as etapas do ciclo são executadas sequencialmente e, posteriormente, são revisitadas para que sejam efetuadas correções.
    2. Incremental:
      As etapas permitem revisão das atividades anteriores, podendo voltar sem a necessidade de completar o ciclo, pois o sistema é particionado em tarefas independentes.
    3. Evolucionária
      As fases de desenvolvimento são divididas para que passem por múltiplos ciclos do modelo em cascata pura e a especificação é construída gradativamente. Os processos são obscuros e e de difícil gerenciamento.

  • Modelo espiral
    Indicado para projetos grandes, o modelo expiral foi originalmente sugerido por Boehm, em 1988. Cada fase do processo passa pela expiral por diversas vezes, seguindo as fases de análise, desenvolvimento, teste, validação e entrega. Em cada ciclo, é feita a análise e redução de riscos, a construção de protótipo e o planejamento do próximo ciclo.

  • Desenvolvimento rápido de aplicações
    Neste conceito, os softwares podem ser desenvolvidos com mais agilidade através da coleta de requerimentos focando grupos específicos, criando protótipos e fazendo testes antecipadamente, reutilizando componentes de software, mantendo um cronograma rígido e com menor formalização na comunicação da equipe.

  • Sincronização e estabilização (Synchronize-and-stabilize)
    Criado por David Yoffie da Universidade de Harvard e Michael Cusumano do MIT, este modelo consiste na criação de  grupos que trabalharão paralelamente em módulos individuais da aplicação. Para alinhar o trabalho paralelo, há frequentes sincronizações de código entre os grupos, que o corrigirão e estabilizarão no processo de desenvolvimento. Diferente do modelo em cascata, o modelo de sincronização e estabilização permite que sejam feitas alterações em qualquer ponto do processo.

Engenharia da Web

A popularização dos computadores e a melhora na qualidade de acesso à internet fizeram com que as aplicações web (WebApps) se popularizassem rapidamente. Entretanto, é preciso observar que o ambiente de utilização é diferente das aplicações desktop, portanto, apesar da Engenharia da Web aplicar os mesmos fundamentos da Engenharia de Sistemas, muitas vezes é preciso utilizar abordagens diferentes.

Os processos, métodos e ferramentas possuem abordagens mais flexíveis para que possam se adaptar às necessidades da WebApp a ser desenvolvida.

  • Processo
    O conceito adotado é o "desenvolvimento rápido de aplicações", mas sem deixar de lado a análise, o desenvolvimento do projeto e implementação incremental com abordagens de teste organizadas.
  • Métodos
    Os métodos permitem ao engenheiro web compreender, definir e e construir WebApps de alta qualidade. Segundo Pressman, estes métodos possuem categorias, que são:
    1. Métodos de comunicação
      Definem como será feita a comunicação entre a equipe e os stakeholders
    2. Métodos de análise de requisitos
      Define o conteúdo que a WebApp apresentará, as funções oferecidas para o usuário final e quais os métodos de interação serão aplicados em cada seção do sistema web.
    3. Métodos de projeto
      Contemplam técnicas que guiarão todo o projeto da WebApp, desde o conteúdo à arquitetura, também levando em consideração a usabilidade, cuidando de projetos de interface e estrutura de navegação.
    4. Métodos de teste
      Englobam revisões técnicas de todo o projeto, prevendo testes de navegação, usabilidade, segurança e configuração.
  • Ferramentas e Tecnologia
    Existem várias ferramentas e tecnologias voltadas para as WebApps. Tecnologias de descrição de conteúdo e modelagem (HTML, VRML, XML), linguagens de programação (PHP, ASP, Java), navegadores, ferramentas multimídia, ferramentas de criptografia de código fonte, ferramentas de gestão e análise de sites, entre outras.



Conclusão

O desenvolvimento de softwares tem amadurecido significativamente desde a criação da engenharia de software, e, com o surgimento de projetos de softwares cada vez maiores e mais complexos, são criadas novas melhores práticas dentro do conceito de engenharia de software.

Os sistemas voltados para a internet apontam ser o próximo passo evolutivo dos softwares, com o amadurecimento gradual do cloud computing, teremos cada vez mais aplicações nas nuvens. Na era atual, a disponibilidade da informação se tornou essencial, os usuários descobriram a praticidade de ter seus dados disponíveis a qualquer hora e em qualquer lugar, sempre atualizados. Os softwares não pretendem mais permanecer presos a um único local, com os dados guardados em um servidor remoto, o mesmo software possui instâncias no computador, notebook, celular e aplicação na web.

Bibliografia

  • Engenharia de Software 6ª Edição, Roger S. Pressman
  • Systems Development Life Cycle (SDLC), Maryland - Department of Information Technology



Notas finais do capítulo

é ç´ó á



Hey! Que tal deixar um comentário na história?
Por não receberem novos comentários em suas histórias, muitos autores desanimam e param de postar. Não deixe a história "Minha História Teste" morrer!
Para comentar e incentivar o autor, cadastre-se ou entre em sua conta.