24 setembro, 2014

Processos de desenvolvimento de software

Citações

Software de qualidade é aquele que atende seus requisitos
Processo de software é uma metodologia para as atividades, ações e tarefas necessárias para desenvolver um software de alta qualidade.
Uma ideia proposta por uma série de renomados engenheiros de software: um processo de software deve priorizar flexibilidade, extensibilidade e velocidade de desenvolvimento, acima da alta qualidade.
Quando restrições cruzam múltiplas funções, recursos e informações do sistema, elas são, frequentemente, denominadas restrições cruzadas. (Aspecto) 

Atividades Metodológicas

São atividades genéricas que podem ser encontradas em qualquer processo de engenharia de software, ela define 5 passos essenciais:

  • Comunicação
  • Planejamento
  • Modelagem
  • Construção
  • Entrega


Atividades de Apoio (Umbrella activities)

Essas atividades complementam e auxiliam as atividades metodologicas, são elas:

  • Controle e acompanhamento do projeto
  • Administração de riscos
  • Garantia de qualidade
  • Revisões técnicas
  • Medição
  • Gerenciamento de configuração de software
  • Gerenciamento da reusabilidade
  • Preparo e produção de artefatos

Fluxo de Processo

Todo o processo de engenharia de software segue um dos quatro tipos de fluxo de processo:

  • Linear
  • Iterativo
  • Evolucionário
  • Paralelo


Padrões de Processo

Nome do Padrão
Forças
Tipo (Padrão de estágio, tarefas ou fases)
Contexto inicial
Problema
Solução
Contexto Resultante
Padrões relativos
Usos conhecidos e exemplos

Avaliação e aperfeiçoamento dos processos de software

  • SCAMPI (CMMI)
  • CBA IPI (CMM)
  • SPICE (ISO/IEC15504)
  • ISO 9001:2000

Modelos de Software

Modelo de Processo Prescritivo

A engenharia de software e o seu "produto" beiram o caos, ao mesmo tempo que está tudo organizado, está muito próximo também de surpresas. O modelo de processo prescritivo tenta trazer ordem ao caos através de um conjunto de elementos de processo como, atividades metodologicas, ações de engenharia, tarefas, produtos de trabalho, garantia de qualidade, etc.
Todos os modelos de processo de software (listados abaixo) podem acomodar as atividades metodologicas genéricas (comunição, planejamento, modelagem, construção e entrega).
Os modelos de processo prescritvos são conhecidos como modelos tradicionais.


  • Modelo em cascata

Também conhecido como ciclo de vida clássico e waterfall model. Existe uma variação desse modelo chamado Modelo V, em que a segunda parte existem testes que validam o software e se necessário pode-se corrigir antes de entregar o produto.
    • Adia identificação de riscos
    • Atrasa os testes do sistema
    • Difícil entrega parcial do produto
    • Difícil lidar com mudança de requisitos

  • Incremental
O modelo incremental aplica sequencias lineares, de forma escalonada, a medida que o tempo vai avançando. Cada sequência linear gera "incrementais" (entregáveis/aprovados/liberados) do software. Exemplo do editor de textos, a cada incremento, novas funcionalidades são adicionadas.

  • Evolucionário (espiral e prototipação)
    • Prototipação (Problemas conhecidos)
      • O cliente enxerga o prototipo como o software já pronto, e exige que com algumas modificações ele se torne operacional, constantemente a gerência de desenvolvimento aceita.
      • Na pressa de apresentar um protótipo, o engenheiro de software opta por ferramentas como liguagem de programação, sistema operacional que lhe são mais intimas simplesmente. Após um tempo, pode se acomodar com tais escolhas e o projeto acaba adotando definitivamente essas tecnologias, que podem não ser as ideais. 
    • Espiral
      • Parecido com o incremental, o software evolui a cada volta na espiral.

  • Concorrente 
Define uma rede de processos que são ligados e possuem estados como concluido, aguardando modificações, em exame, inativo, etc.

Modelo de Processo Especializado

  • Baseado em Componentes
    • Esse modelo desenvolve aplicações a partir de componentes de software pré-empacotados.
    • As atividades de modelagem e construção desse modelo começam com a identificação de possíveis candidatos a componentes.
  • Métodos formais
    • Através de análise matemática são facilmente descobertos problemas no software como ambiguidade, incompletude e inconsistência
    • Desvantagens: consome muito tempo e dinheiro, poucos desenvolvedores capacitados, dificil comunicação com o cliente.

PSP (Personal Software Process)

O PSP enfatiza a medição pessoal do todo o processo desde o planejamento até a entrega do software. Com esses dados de medição coletados, o engenheiro de software pode trabalhar em melhorar as partes falhas do processo executados por ele mesmo. 
O PSP não foi largamente adotado pelo setor, os motivos têm mais a ver com a natureza humana e com a inércia organizacional do que propriamente com o processo desenvolvido por Watts Humphrey.
  • Planejamento
  • Projeto de alto nível
  • Revisão de projeto de alto nível
  • Desenvolvimento
  • Autópsia

TSP (Team Software Process)

Os principais objetivos do TSP são:
  • Equipes auto-dirigidas
  • Mostrar gerentes como treinar e manter equipes
  • Acelerar o aperfeiçoamento dos processos de software
  • Fornecer orientações para melhorias a organizações
  • Preparar universitário para trabalhar em equipe a nivel industrial
As atividades metodológicas do TSP são:
  • Lançamento do projeto
  • Projeto de alto nivel
  • Implementação
  • Integração e testes
  • Autópsia

Assim como o PSP, essa metodologia induz a equipe a se auto-avaliar, atraves de medições do processo e do produto. 

-----------------------------

UP (Unified Process)

É uma metodologia de processo. Foi criado pelo mesmos autores da UML. Possui três características chave:
  • Dirigido por casos de uso
  • Centrado na arquitetura
  • Iterativo e incremental

Fases do RUP

  • Concepção (comunicação e planejamento)
  • Elaboração (comunicação e modelagem)
  • Construção (construção)
  • Transição (última parte da construção e primeira parte da atividade de entrega)

17 setembro, 2014

Engenharia de Software

Três pontos me chamaram atenção durante essa unidade, pois foram frisadas em mais de um momento, são elas:

Fazer software não significa sentar no computador e programar

Obviamente, para quem está estudando engenharia de software e ainda não tem isso na cabeça, é melhor mudar agora.

Qualidade e produtividade são duas palavras que devem andar juntas, sempre

Pelo que percebi, essa idéia está relacionada a qualquer tipo de engenharia, e se pensar bem, em qualquer área de produção. Sempre é melhor fazer um produto de alta qualidade e com o menor gasto de recursos possiveis. Interessante que, apesar de software não ser um produto - é uma solução - mas ele deve se adequar a esse conceito da engenharia.

O software não deve atrapalhar a vida das pessoas

Auto-explicativo, se o sistema está atrapalhando a vida do usuário, tem alguma coisa errada. Isso pode ter acontecido desde a concepção do software até as rotinas executadas dentro da empresa onde o programa está rodando.

---------------------------------------------

Questões para Engenharia de Software

Dúvidas a serem respondidas durante a elaboração de software.

  • Qual o problema a ser resolvido?
  • Quais as características do software são utilizadas para resolver o problema?
  • Como o software será construído?
  • Como os erros serão identificados?
  • Como o software será mantido?


How to Solve It

Livro de 1945 do matemático George Pólya que descreve métodos para se resolver um problema, a essência do livro são os passos citados abaixo, cada passo possui possui várias perguntas a serem respondidas.  

  • Compreenda o problema
  • Planeje a solução
  • Execute / leve adiante o plano
  • Examine o resultado



Software e suas aplicações

Software é um lugar onde sonhos são plantados e pesadelos são colhidos, um pântano abstrato e místico onde demônios terríveis competem com mágicas panaceias, um mundo de lobisomens e balas de prata. (Brad J. Cox) 
Melhor e mais engraçada definição de software que já li. Esqueça aquele papo de que software é um conjunto de instruções de computador, estrutura de dados, blah blah blah.

A classificação dos tipos de software segundo Roger Pressman não me agradou, achei pouco objetiva, por deixar muitas dúvidas no ar, pretendo ler esse capítulo do livro Engenharia de Software - Roger Pressman (Bookman) para obter mais detalhes, só a explicação da aula não foi suficiente.
Aplicações de software segundo Pressman:
  • Software de sistemas
  • Software de tempo real
  • Software de aplicação (aplicativos)
  • Software científicos (astronomia - volcanologia, CAD)
  • Software embutido (embedded)
  • Software para linhas de produto (editor texto, planilhas)
  • Software que usa recursos da web (webapps)
  • Software de inteligência artificial
  • Software netsourcing (widgets)
  • Software Livre
  • Computação Ubíquoa

16 setembro, 2014

Introdução à engenharia de software

Assistindo a primeira video-aula da pós graduação em Engenharia de Software na PUC Minas, o professor Dr. Humberto Neto levantou um ponto que me chamou atenção.
Na história da informática, o hardware evoluiu (e ainda evolui) muito mais em muito menos tempo do que o software.
Segundo ele, por um motivo básico, o principal recurso do software ainda é a mente humana, enquanto que, o processo de produção de hardware necessita cada vez menos da interação humana. A medida que pesquisas avançam com descobertas em novas tecnologias, basta um projeto para que a produção de hardware aconteça.

Ainda no vídeo, foram levantados algumas áreas que ocorrem falhas na construção do software, elas estão relacionadas ao:

  • Processo: como cronogramas, gerência de recursos, qualquer problema relacionado a planejamento. 
  • Produto: requisitos de software mudam. FATO!, isso atrapalha o cronograma e pode gerar problemas no software. Além disso, adicionar novos requisistos depois que o escopo está fechado, também acarreta problemas.
  • Tecnologia: qualquer tecnologia utilizada no software como bibliotecas, frameworks, etc. Tanto superestimar os beneficions de um framework quanto a troca durante a produção de software prejudicam o cronograma. 

Por enquanto é isso. :)

Hello World!

Primeiro post... hello world!