20080925

Revisões de Software X Teste de Software

Olá amiguinhos! Tudo bem?

Bem.. o assunto de hoje é algo meio complicado.. nao por ser assuntos complexos de mais e sim porque a diferença é mesmo bastante dificil de se conceituar.

Bem, ambos são como filtros que servem para descobrir defeitos no software antes de ficarem prontos ou entregues ao cliente e servem, também, para melhorar a qualidade do software.
Mas qual a diferença então?
  • As refisões são mais eficientes, porque procuram os defeitos mais cedo;
  • As revisões são conduzidas durante o processo de desenvolvimento e verifica se o produto de cada fase está de acordo com os seus requisitos;
  • As revisões podem ser feitas em qualquer fase do projeto ( incluindo a fase de teste)
  • As revisões de um software o mesmo nao precisa estar em execussão, e fazer a revisão do código
  • Nos testes precisa-se compilar o programa para verificar a integridade do mesmo.
Em linhas gerais podemos diferenciar ambos dizendo que a revisão pode estar contida em qualquer fase, parte, etapa ,tudo! do projeto, incluindo nos testes.
Teste possui técnicas ( teste de caixa branca, teste de caixa preta) e fases ( teste de unidade, teste de integracao, teste de sistema, teste de aceitacao, teste de regressão)...
Revisões possui tipos (formal e informal) e pode ser aplicada a qualquer fase do ciclo de vida do projeto ( incluindo as fases de teste).

Ambos se bem aplicados podem diminuir o custo de um software xD

Como calcular a Estimativa de Duração de um Projeto

Olá queridos amiguinhos...

Hoje nós vamos conversar sobre isso tudo ai que ta no título =)

Entao, como podemos calcular quanto tempo demorará para terminar um projeto? uma parte dele? todo ele? quanto? an?
Complicado....
Um exemplo prático e simples..
Quanto tempo vc leva exatamente para tomar banho? Exatamente!
Eu por exemplo demoro de 7 minutos, quando é aquele banho rapidinho, a famosa "água no corpo", até meia hora.. uma hora.. , "quando ta calor e nao tenho nda pra fazer xD" , e em média uns 15 minutos, nos dias habituais...
Exatamente, exatamente nos segundos e tals eu nao sei neh.. acho que ninguem nunca saberá também, mas a média é facil...
E como que eu sei que demoro esse tempo..
Ah... eu tenho 20 anos, a pelo menos 13 eu tomo banho sozinha já... isso da uma certa "experiencia em tomar banho" pra saber quanto tempo demoro..
Em projeto de software, e em qualquer projeto, é mais ou menos assim também que funciona...
Baseado na experiência e no histórico que podemos calcular mais ou menos o tempo previsto. Nunca vamos saber exatamente quanto tempo demoraremos pra fazer um software, isso vai depender do grau de dificuldade, experiência nas ferramentas para se construí-lo, experiência nos requisitos que ele deve dar suporte, quanto tempo você terá para aprender e executar as ferramentas, etc, etc, etc... São realmente inúmeros fatores que só a experiência e a prática nos levam a alguma noção mais precisa.
Mas baseado nisso tudo podemos calcular quanto tempo em média provavelmente levaremos para construir algo.
Para issso necessitaremos de três estimativas de tempo:
  1. to -> duração mínima ou tempo otimista;
  2. tm -> duração média;
  3. tp -> duração máxima ou pessimista.
Para calcular o te -> tempo estimado.

O cálculo é bem simples:
Exemplo:

Vamos calcular o exemplo do banho, la de cima...
to - > 7 min
tm -> 15 min
tp -> 60 min

Portanto:


-> te = 21 min

20080924

EAP - Estrutura Analítica de Projeto

Salve! Salve! Pequenos terraquios!
Hoje iremos conversar sobre EAP, em inglês WBS ( Work Breakdown Structure).

CONCEITO

A Estrutura Analítica do Projeto (EAP) é o diagrama com diversos níveis hierárquicos formado pelo conjunto de pacotes de trabalho que compõem um projeto . Sua elaboração facilita o detalhamento do trabalho a ser realizado e o gerenciamento do escopo, do orçamento, da equipe e do cronograma ao longo da elaboração do produto
.

COMO CONSTRUIR UM EAP?

Um projeto de EAP eh constituido de níveis hierárquicos que possuem pacotes, certo? Então alguns passos para ajudar...
  1. O Primeiro nível estará o nome do projeto
  2. No Segundo nível estarão as fases do cliclo de vida do projeto
  3. No nível abaixo dele estarão os pacotes com as tarefas que devem ser feitas, se dentro do pacote houver necessidade de mais detalhamento haverá mais pacotinhos num nível abaixo e assim por diante.
  4. Vale ressaltar que a mente humana é estupidamente limitada e, portanto, se um pacote houver muito detalhamento algumas tarefas provavelmente serão esquecidas, geralmente guardamos de 5 até 7 tarefas.
  5. Se um pacote ou tarefa ou atividade ficar muito vago podendo dar divergencia ao que deve ser feito procure subdividí-la em mais pacotes detalhando as tarefas que devem ser feitas.
  6. Lembre-se que uma coisinha mal interpretada no começo pode gerar uma coisona dificil de arrumar mais pra frente.
Segue o exemplo abaixo do desenvolvimento de um projeto de web site:

Achei um site muito interessante, da onde tirei essa imagem, que mostra direitinho como que funciona esse troço ai...
http://www.avellareduarte.com.br
e esse aqui eh nosso papai dos burros que me ajudou bastante
http://pt.wikipedia.org

20080917

Qualidade de Software

Bom dia amiguinhos!
Apesar de ta meio em cima, nesse post pretendo fazer uma breve pincelada sobre qualidade de software...

Bem, podemos dizer que qualidade de software é a conformidade com os requisitos ( fazer o que foi proposto, resolver o problema pertinentes, etc.. o que foi especificado..), se o cliente gostou ( satisfação do usuário) e ausencia de bugs...

Na qualidade de software temos duas visões : visão de produto e visão de processo.

A visão de produto - é a avaliação de produto de software para verificação de sua qualidade, nele entra a Norma SQuaRe.

A visãode processo - é a avaliação e melhoria dos processos para o ciclo de vida do software, nele entra o CMMI e o MPS.Br.

Norma SQuaRe
Modelo de qualidade de software que estabelece base ára definir um modelo e realizar avaliações do software e uma linguagem comum e válida internacionalmente. Representa a soma de experiências num único assunto.
Problema: definir objetivos que pretendem atingir num projeto.
É dividido em 5 tópicos:
  1. gerenciamento(define termos do documento, faz recomendaçõs e sugestões de carater geral sobre como utilizar a Norma SQuaRe),
  2. modelo de qualidade ( define conceito de qualidade para orientar e avaliação, é um modelo hierarquico),
  3. medição( descreve aspectos realizados a medição e propoe métricas),
  4. requisitos de qualidade ( estabelece objetivos de qualidade de um produto) e
  5. avaliação ( define como fazer avaliação, com medições e resultados confrontados com modelo definido pelo usuário).

Modelo de medição - possui requisitos (usabilidade, portabilidade, manutenabilidade, eficiencia, confiabilidade e funcionalidade) e métricas (diretas e derivadas).

CMMI
É um modelo de referência para o desenvolvimento e manutenção de produtos e serviços.
Foi feitos porque as empresas necessitam de software melhores(mais qualidade) e elaborados mais rapidamente.
Define o que fazer e não como fazer.
Acredita que a qualidade do processo influencia na qualidade final do produto.
Foca na melhoria de processos.
Baseado em áreas de processo (22), que é um conjunto de práticas a serem realizadas para um determinado processo de engenharia de software.Elas são divididas em 4 categorias e duas metas (gerais e específicas).
O CMMI possui, também, duas representações (contínua e por estágio).

Representação contínua - foca na área de processo, define 6 níveis de capacidade ( de 0 até 5), são eles: incompleto, realizado, gerenciado, definido, gerenciado quantitativamente e otimizado. Cada nível deve ser totalmente realizado para poder passar para o próximo.

Representação por estágio - foca no conjunto de áreas de processo, define 5 níveis de maturidade ( de 1 até 5), são eles: inicial, gerenciado, definido, gerenciado quantitativamente e otimizado. Cada nível deve estar completamente realizado para poder passar para o próximo.


MPS.Br
Modelo de referencia que define os níveis de maturidade da empresa de software.
É mais barato que o CMMI.

Foca em micro, pequenas e médias empresas.
Documentações: guia geral, guia de aquisição, guia de avaliação, guia de implementação
Baseia-se nos conceitos de maturidade e capacidade de processo para avaliação e melhoria da qualidade e produtividade de produto de software e serviços correlatos.
Componentes: modelo de referencia, método de avaliação, modelo de negócio.
Níveis de maturidade - patamares de soluçoes de processo. São 6 que vão de A(mais alto) a G(mais baixo)
Capacidade de processo - habilidade do processo em alcançar objetivos para atender atributos de cada nível de maturidade. Quanto maior o nível de maturidade maior o nível de capacidade.

20080915

Cenário

Salve!Salve! Caros leitores,

Esse post irá falar sobre cenários, dentro do mundo da informática é claro.

Ao contrário dos outros posts que foram praticamente baseados na aula esse é praticamente uma cópia do que entendi com um artigo do João Carlos, que está disponível no site do imasters

Podemos dizer que o cenário é uma sequência de passos numerados que descrevem o que o sistema faz e quem irá executar, ou seja, ele mostra os UC ( Use Case) do Diagrama de Classes com seus atores. Exemplo funcionário cadastra produto
O cenário eh constituido necessariamente de cenário principal, que vai descrever o sistema "nos seus dias felizes", com tudo funcionando como teoricamente deveria. Nele estarão inclusos todos os UC por ordem que, teoricamente, deve funcionar o sistema. E cenário alternativo, ou cenário secundário, que vai descrever o que o sistema fará caso aconteça alguma falha ou fluxo alternativo durante o uso do programa. Exemplo Produto já cadastrado no sistema, emitir aviso. O cenário alternativo não precisa aparecer em todos os UC, apenas naqueles que mostrarem necessidade.

Exemplo do site.


Alternativa: FALHA NA AUTORIZAÇÃO

No item 07, o sistema falha na autorização da compra por crédito; Envia notificação para o cliente via e-mail.

Alternativa: FALHA NA AUTENTIFICAÇÃO

No item 03, o sistema recusa usuário e senha; Permite ao cliente submeter as informações por mais 2 vezes; Se ultrapassar limite bloquear conta.

Quando falamos de caso de uso, precisamos entender três conceitos que serão vistos a seguir.

Diagrama de Caso de Uso

Bom dia amiguinhos,

Hoje nós vamos estudar sobre diagrama de caso de uso...

O objetivo disso é comunicar a funcionalidade e o comportamento do sistema para o cliente ou usuário final.
Nota: NÃO CONFUNDA COM DFD, O USE CASE ( CASO DE USO) NÃO FAZ DEPÓSITO DE DADOS E , PORTANTO, NÃO HÁ LIGAÇÕES ENTRE CASOS DE USO.

Podemos dizer que o diagrama de caso de uso é um modelo de funções pretendidas de um sistema e sua periferia, ou seja, ele descreve o que o sistema será capaz de fazer e quem irá executar as tarefas.

É constituido de atores e casos de uso.

Ator: é qualquer coisa que interage com o sistema, pode ser outro sistema, uma pessoa, ou um sei la o que...
Nota: ATOR NÃO FAZ PARTE DO SISTEMA.
Em palavras menores o ator é aquele bonequinho que vai executar a função.

Casos de uso: modela o diálogo entre os atores e o sistema, é um fluxo de eventos completo e significativo para o sistema. É iniciado por um ator.
Em palavras menores é o balaozinho que tem a função que o ator irá executar(consultar.. ver...).

O relacionamento entre os casos de uso pode ser feito das seguintes maneiras:
  • Associação(association) - comunicação entre ator com UC;
  • Generalização (generalization) - entre os UC's ou atores;
  • Inclusão (include);
  • Extensão (extend).
ASSOCIAÇÃO(ASSOCIATION)
GENERALIZAÇÃO(GENERALIZATION)
INCLUSÃO(INCLUDE)
EXTENSÃO(EXTEND)

Por fim este modelo é utilizado em sistemas de média/alta complexidade:



20080914

Crise do Software

Olá amiguinhos,
Hoje vamos falar sobre crise do software..

Ela é caracterizada pela incapacidade de se produzir todo o software necessário para as empresas e instituições, comerciais ou não. Esse termo foi muito utilizado na década de 70 quando praticamente não se existia Engenharia de Software.

As causas para essa crise são muitas, vou listar algumas das mais importantes:
  • Estouro no orçamento dos projetos;
  • Estouro de prazo dos projetos;
  • Software de baixa qualidade;
  • Software que não atingem ao requisitos;
  • Projetos ingerenciaveis e códigos difíceis de entender.
Por que?
  • Alterações das metas ( os negócios querem ciclos de desenvolvimento mais curtos e muitas vezes os requisitos iniciais sao fracamente definidos);
  • Falha no gerenciamento de riscos( desenvolvimento em cascata pode atrasar a identificação dos problemas e não ha como saber se o sistema funcionará até que ele esteja pronto);
  • Complexidade do software(crescente demanda de software, ninguem entende todo o sistema e alguns sistemas legados precisam serem mantidos).

Muitos desses problemas existem até hoje, então podemos dizer que ainda sofremos essa crise ( quanto tempo não?)
  • Mas já temos algumas tecnicas para tentar sanar muitos desses problemas:
  • Uso de melhores tecnicas, ferramentas e métodos;
  • Investimento em treinamento e educação (ainda insuficiente);
  • Mudança de cultura de como se deve construir um software.
ERAS DA COMPUTAÇÃO
Primeira Era:
  • 50 -65;
  • Software customizado;
  • Personalizado sem nenhuma padronização;
  • Batch ( também conhecidos como arquivos de lot ou .bat, são arquivos de computador utilizados para automatizar tarefas).
Segunda Era:
  • 65-75;
  • Multiusuário;
  • Tempo real;
  • BD, produto de software;
  • software houses -> crise de software.

Terceira Era:
  • 75-85;
  • Sistemas Distribuidos;
  • IA;
  • Hardware de baixo custo.

Quarta Era:
  • 85 - atual ;
  • Sistemas Especialistas;
  • Redes Neurais;
  • Computação Paralela.

CMMI

CMMI - Capability Madurity Model Integration

Por que?

As empresas querem entregar produtos e serviços mais rápido, melhores e mais baratos. ( o mercado exige isso cada vez mais)
Os produtos e serviço cada vez mais estão mais complexos ( lei da evolução neh...)
As empresas que não querem ficar pra tras precisam arruma uma forma de conseguir gerenciar suas atividades de desenvolvimento em busca de seus objetivos de negócio.

CONCEITO

  • Qualidade do processo influência a qualidade do produto;
  • Modelo de referência para desenvolvimento e manutenção de produtos e serviços;
  • Baseia-se em areas de Processos;
  • Define o que tem que ser feito , mas não como deve ser feito;
  • Foco na melhoria de processos.

ABORDAGENS
Existem duas representações que permite a empresa alcançar melhoria de processos:
Representação contínua: a empresa seleciona uma área de processo para melhorar. Essa representação utiliza níveis de capacidade para caracterizar a melhoria de uma área de processo específica.
Representação por estágio: utiliza um conjunto predefinido de áreas de processo para definir um caminho de melhoria da organização. Essa representação é caracterizado por níveis de maturidade.

Níveis?
Conceito: caracterizam a melhoria de um estado caótico para um estado que utiliza a informação quantitativa para determinar e gerenciar as melhorias necessárias para alcançar os objetivos da organização.
Como funciona dentro do CMMI?
Para alcançar um nível a organização deve satisfazer todos os objetivos da área de processo (ou o conjunto de áreas de processo).

REPRESENTAÇÃO CONTÍNUA
  • Foca uma área de processo específica;
  • Define níveis de capacidade ( são 6 e vão do 0 ao 5).
REPRESENTAÇÃO POR ESTÁGIO
Define níveis de maturidade ( são 5 e vão do 1 ao 5);
Cada nível de maturidade é caracterizado por um conjunto de áreas de processo;

NÍVEIS NAS DUAS REPRESENTAÇÕES

NÍVEIS DE CAPACIDADE
  • Nível 0 - Incompleto: processo não realizado ou parcialmente realizado;
  • Nivel 1 - Realizado: satisfaz os objetivos da área de processo;
  • Nível 2 - Gerenciado: nível 1 que é planejado, monitorado, controlado, revisado e avaliado;
  • Nível 3 - Definido: nível 2 que adere a todos os padrões organizacionais. E os padrões são seguidos em todos os projetos;
  • Nível 4 - Gerenciado Quantitativamente: nível 3 que é controlado por técnicas quantitativas;
  • Nível 5 - Otimizado: nível 4 que é melhorado ( com base no entendimento das causas de variação de processo).

NÍVEIS DE MATURIDADE
  • Nível 1 - Inicial: processos caóticos;
  • Nível 2 - Gerenciado: projetos possuem requisitos gerenciados e processos planejados, medidos e controlados;
  • Nível 3 - Definido: processos bem caracterizados e entendidos. Possuem padronização.
  • Nível 4 - Gerenciado Quantitativamente: organização e projetos estabelecem objetivos quantitativos para qualidade e performace do processo;
  • Nível 5 - Otimizado: processos contínuamente melhorados através de inovações.
ÁREAS DE PROCESSO
  • É um conjuto de práticas a serem realizadas para um determinado processo da engenharia de software.
  • São 22 áreas de processo distribuidos em 4 categorias;
  • 2 metas : Metas gerais( práticas genéricas) e metas específicas( práticas especificas)
  • 4 níveis de maturidade.
Tabela de Área de Processo por Categoria


Meta específica: descreve as características que devem estar presentes para satisfazer uma área de processo;
  • Prática específica: descrição de uma atividade importante para atingir a meta específica;
Meta genérica: aplicada em mais de uma área de processo. São as características que devem estar presentes para institucionalizar os processos da área de processo;
  • Práticas genéricas : descrição de uma atividade importante para atingir a meta genérica.
ÁREA DE PROCESSO POR NÍVEL DE MATURIDADE




20080913

Diagrama de Classes - Parte II

Hmm... antes de mais nda..
FELIZ DIA DO PROGRAMADOR, foi ontem, eu se, mas se nao tivesse ano bissesto seria hj..
o importante é festar xD

Enfim, chega de festa! Vamos ao que interessa!

Agora vamos falar de Relacionamentos ;)

Relacionamentos? O.o
Os relacionamentos determinam conexões entre os objetos, e fornecem um caminho para a comunicação entre os objetos. (são aquelas linhas que ligam uma classe a outra.)
Existem vários tipos de relacionamentos...agregação, composição/associação, especialização/herança /generalização.


ASSOCIAÇÃO
É o relacionamento estrutural que descreve um conjunto de ligações, onde uma ligação é uma conexão entre os objetos.
Por definição a navegação entre as classes associadas é bidirecional, e por convenienca a navegação pode ser restringida a uma unica direção

Cardinalidade/Multiplicidade:
  • muitos - *
  • exatamente um - 1
  • zero ou mais - 0..*
  • um ou mais - 1..*
  • zero ou um - 0..1
  • intervalo específico - 2..7
Possui nome que descreve a natureza do relacionamento
e papel que é a participação da classe num determinado relacionamento

AGREGAÇÃO

uma forma especializasa de associação, podemos dizer que "faz parte de".
Possui cardinalidade e pode ser recursiva
Exemplo:

HERANÇA
É uma classe compartilhada a estrutura e/ou comportamento de uma ou mais classes. Podemos dizer "é um" . Nela NÃO existe multiplicidade, nomes ou papéis, e sim herança e polimorfismo

UML - Diagrama de Classes

Olaaaaaaaaaaaaa pessoas xD

Hoje vamos estudar um pouco sobre Diagrama de Classes ^^

Bem.. o que é um Diagrama de Classes?
É um esquema, um padrão, um modelo ou um sei lá o que que descreve muitas instâncias de objetos..
Ta e pra que serve isso?
Pra você ter uma noção gráfica do que o seu sistema será capaz de fazer..
Ela diz respeito as suas obrigações dentro do contexto do sistema

Hm.. acho que ainda está meio confuso neh?

Então vamos por partes
Diagrama é facil, agora o que é classe?
É bem parecido com a definição de classe que vc aprendeu no primário, so mudam alguns nomes xD


Classe eh a definicao de um grupo de objetos com propriedades similares( atributos), comportamentos em comum ( operações), relacionamentos em comum e outros objetos .

E o que é objeto?
É a instancia de uma classe.

Desenho!!
A figura abaixo representa uma classe...

Clareou um pouco agora? Espero que sim..
Agora vamos por partes...

Nome da classe: é o que diferencia uma classe de outra, ele pode ser simples ou com caminho. A simples é o nome e pronto, igual ai na figura acima. Já o nome com caminho é o nome da classe procedido pelo nome do pacote que ele pertence, ficaria mais ou menos assim : Funcionario :: Pessoa.

Atributo: é um elemento da classe que pode representar uma característica dos objetos instanciados ou valor de controle da classe.

Operação: implementação de um serviço que pode ser requisitado a qualquer objeto da classe,
afetando o seu comportamento.

Convenções:
  • Nome no singular
  • Inicia com letra maiúscula
  • Não utiliza underline
Ex:SistemaCaixa

Continua...

20080912

POSTGRES - INTRODUÇÃO

Olá galerinha do mau!
Tudo bem?

Ehhhh... hj é o dia neh...
Foi quase um parto pra consegui aprender essa birosca, mas consegui!
Nem sei na verdade se consegui, mas tive algum progresso e vou postar pra ve se consigo salva alguma alma da prova
hauhauhauha

Bem, começa do começo neh...
Esse post vou falar mais de "historinhas" pra podermos entender melhor as coisas...
Primeiro.. o que é postgres?
PostgreSQL é um sistema gerenciador de banco de dados objeto relacional (SGBDOR), desenvolvido como projeto software livre.
E pra que serve isso?
Gerenciar seu banco de dados ¬¬'
E ele conta com os seguintes recursos:
  • consultas complexas
  • chaves estrangeiras
  • integridade transacional
  • controle de concorrência multi-versão
  • suporte ao modelo híbrido objeto-relacional
  • gatinhos
  • visões
  • procedimentos armazenados em várias linguagens
E o que é esse tal de PGAdminIII?
É o software! eu acho..
HISTÓRIA
  • Em 1986 na Universidade de Berkeley, na Califórnia, surgiu a necessidade de criar a evolução do projeto Ingres, pois havia problemas com o modelo de banco de dados relacional(ele não fazia a combinações de dados simples que formam uma única unidade).
  • Em 1996 eles lançam a primeira versão externa e substituiram a linguagem POSTQUEL para PORGRESQL.
  • Atualmente está na sua versão 8.3 e é muito utilizado!

VANTAGENS
  • Open Source
  • Roda em plataformas Windows, Unix...
  • Implementa a maioria dos tipos de dados desenvolvidos no SQL92 e SQL99
  • Suporta grandes objetos binários (sons, imagens...)
  • Documentação extensa
  • Suporta as linguagens de programação ANSI C, yacc, lex, sh, pelr, asm, python
  • Suporte por uma comunidade ativa;
  • Baixa necessidade de manutenção/ajuste;
  • Confiabilidade e estabilidade;
  • Ferramentas gráficas disponíveis;





20080910

Qualidade de Software

Bem... o que é qualidade de um software?
Como podemos medir isso?

Medir qualidade em um software não é tão simples quanto medir a qualidade de um outro tipo de produto como manteiga, cadeira, cama, geladeira e bolacha, afinal, sotware é um produto abstrato!
Mas, pra felicidade de todos existem várias técnicas que nos auxiliam a conseguir medir a qualidade =]

Bom, o ser humano é um bicho muito crítico então vamos pensar primeiro em um software na visão do usuário ;)
Quando vc baxa la a nova versão do msn, versão beta, dai ele funciona la, todo bunitinho, o que vc espera dessa nova versão?
que ele seja mais bonito? mais facil de usar? e quando ele da aqueles malditos bugs que cai toda hora ou conecta mais rapido? os atalhos ? o que vc espera que ele faca? e as novas funcionalidades ? TUUUUUUUUUUUUUUUUUUUDOOOOOOOOOOOOOOOOOO isso atendeu as suas espectativas ? se sim, é bem provavel que possamos classificar esse software como tendo qualidade.. mas vamos deixar os detalhes pra mais tarde, ok? Por hora da pra entender, eu acho...

Agora um pouco de palavras difíceis...
Segundo Crosby “A qualidade é a conformidade aos requisitos”
ou seja
qualidade = f (conformidade)

e o que é esse raio de conformidade??
Podemos dizer que conformidade é o que é observado, especificado..
Em linhas gerais qualidade de um produto é dada pela diferença entre as características observadas e as características que foram especificadas para a sua construção e quanto MAIS diferente MENOS qualidade.... obvil não?

E quanto ao erro??
lol..
simples
segundo a prof´Rafaela: "observação do produto fontes de erro corromperem os dados utilizados para caracterizá-lo"
o a matemática da coisa

qualidade = || observado – especificado + erro||

Voltando a opinião do cliente...
Segundo Weinberg"Os requisitos foram definidos por alguém, logo a qualidade depende das escolhas que alguém efetuou"
Ou seja, quando alguem vai la e te pede pra fazer um software, e ta te pagando pra isso neh, ele te passa o que quer que seja feito neh.. entao a qualidade ta ai tb.. ou seja, VC TEM QUE FAZER O QUE FOI PROPOSTO PELO CLIENTE! lol.. simples a logica disso neh?

Segundo Luiz Castro “...se num mundo onde existia controle ao acesso do computador (somente os operadores tinham acesso ao mainframe) já existiam problemas com a confecção de softwares, imagina num computador em que as pessoas com um mínimo de informação sobre software tem acesso livre, sem comprometimento nenhum com os métodos e padrões de desenvolvimento. Por isso torna-se cada vez mais necessárias leis que normatizem esse assunto.
esse artigo completo está disponível pelo link http://internativa.com.b/artigo_software_02.html

PROBLEMAS!
Vamos organizar as idéias agora?
Quais são os problemas que podemos enfrentar na construção e utilização de um software?
  • Cumprir cronogramas( o não cumprimento deles é muito facil);
  • Projetos complexos demais (dai ninguem mais entende coisa alguma e tem que jogá-lo fora);
  • Fazer módulos que sejam compatíveis entre si ( muitas vezes vc faz a paradinha funfando bunitinha, seu amigo tb, dai qndo junta tudo pra fica num sistema soh.. pufff nada funciona dai vai tudo pro lixo!);
  • Criar programas que façam as funções que devem fazer ( aqual velha história de dar laranjas quando ele quer maçãs.. resolva o problema que DEVE ser resolvido!);
  • Fazer programas que sejam faceis de usar (se o usuário achar mto dificil de entender ou usar ele não vai usar, nao quanto vc diga que ele eh bom ou qnto tempo demorou...);
  • Fazer programas que funcionem( sabe.. as vezes simplismente nao funcionam depois de um tempo ou em determinado s.o. e dai ja era).
DIFERENÇA ENTRE CONSTRUIR UMA PONTE E UM SOFTWARE
PROJETO E REALIZAÇÃO DE UMA PONTE


PROJETO E IMPLEMENTAÇÃO DE UM SOFTWARE

DIFICULDADES
  • Delimitação do escopo (o que o software realmente tem que fazer);
  • Volatidade dos requisitos;
  • Desconhecimento prévio das soluções técnicas( o assunto e tals, a materia específica que vai envolver o projeto, como saber contabilidade, biologia);
  • Trabalho intelectual necessário(como resolver as paradinhas);
  • etc.
SOLUÇÕES
  • Metodologias;
  • Tecnologias e ferramentas.
QUALIDADE DO SOFTWARE

SEM BUGS! De preferência
Podemos expressar isso de duas formas:
  • Taxa de defeitos, quantidade de defeitos por quantidade de código (de preferencia o menor possivel);
  • Confiabilidade, quantidade de falhas por tempo de operação
SATISFAÇÃO DO CLIENTE! Geralmente medida em porcentagens e com os valores adquiridos através de questionários

Vamos falar agora um pouco sobre defeitos e falhas ...
ta..
o que é defeito?
Defeito é a imperfeição do produto, normalmente é algo no código que foi feito errado. Podemos dizer que um software pode rodar muito bem com alguns defeitos se eles não forem visiveis, e quando isso acontece achá-lo é realmente MUITO dificil...

e falha?
Falha é o resultado errado causado por um defeito(defeitos visiveis) ou condição inesperada( como o próprio s.o., luz, sei la, inesperado neh.. ) e elas podem ocorrer por fatores externos ao programa.. (no rwindows é mto comum isso xD)...

TA, falei já bastante sobre essa tal de qualidade de software, mas pra que tudo isso afinal? Funcionando já não ta bom? hmm nao! os clientes cada vez mais estao cada vez mais chatos e exigentes, querem que o software faça tudo por eles, e vc, como um bom programador, analista, alguem que quer ganhar dinheiro com essa coisa toda, tem que estar atento quanto a essas mudanças ... e também, ter qualidade pode ser mais barato!
sim.. sim..

agora vamos ver um pouco sobre custo de qualidade

CUSTO DE QUALIDADE
Ela inclui TOOOOOOOOOOOOOOOOOOOOODOSSSS os custos decorrentes da busca da qualidade ou da execução das atividades relacionadas à qualidade...

Temos vários tipos de custo: custo de prevenção, custo de avaliação, custo de falha..

CUSTO DE PREVENÇÃO: é o que inclui o planejamento da qualidade, revisões, técnicas formais, equipamentos de teste e treinamento;

CUSTO DE AVALIAÇÃO: inclui as atividades para obter o entendimento da condição do produto na primeira execução de cada projeto(como inspeção e teste);

CUSTO DE FALHA: bem, eles não existiriam se não houvesse falhas antes de entregar o produto ao cliente, dai podemos dividí-lo em dois:
  • Custo de falha interna: que é quando achamos o defeito antes de entregar o software;
  • Custo de falha externa: que é quando o defeito é encontrado depois de entregar o software (quando isso acontece vc ta ferrado meu amiguinho).
Quanto mais tempo vc demora pra encontrar o defeito dentro do seu sistema mais caro isso sai, olha a proporção ai em baixo:


Ou seja, vale a pena investir na qualidade para evitar defeitos e falhas pq sai mais barato, poupa tempo e tudo fica melhor xD
Investir um pouco mais nisso vale sai mais barato no final das contas xD

RUP

Você deve ta se perguntando que diabos é isso?
Hmm.. vejamos.. NÃO, NÃO, rup não é uma onomatopéia pra dizer que alguém está com soluço..
RUP significa Rational Unified Process ou Processo Unificado da Rational ( empresa Rational que pertence a IBM, dai agora é IRUP) e é mais um modelo de processo de desenvolvimento de software, ou seja, mais um meio de descrever um conjunto de atividades para transformar os requisitos do usuário em software!
Por que usar o RUP?
Porque ele é legal, oras...
Ele é um modelo mais moderno ( visto que tem gente que desenvolve com o mesmo método de 25 anos atras, não tirando os tiozões neh, mas veja bem.. muita coisa mudou = evoluiu, e a nova geração também tras idéias boas xD )
A comunidade de desenvolvimento já estava precisando de um modelo de processo que:
  • Provesse um guia para a ordem das atividades da equipe do processo;
  • Direcionasse as tarefas dos desenvolvedores e da equipe como um todo;
  • Especificasse quais artefatos que devem ser desenvolvidos;
  • Oferecesse critérios para monitoramento e medida dos produtos e atividades de um processo.
E é isso que o RUP é capaz
  • Ele é composto de 5 disciplinas que oferecem diretrizes para definição de tarefas e atribuições das responsabilidades em um projeto de software
  • É baseado na UML
E por que tudo isso é importante, afinal?

Oras, vejamos alguns dos motivos mais comuns de fracasso de produção de software:
  • Gerenciamento informal de requisitos ( é muito comum ficar so no boca a boca e a caba que ninguém faz nada padronizado, cada um faz de um jeito, na hora até entende.. mas e depois quando tem que dar manutenção?);
  • Não entendimento das necessidades dos usuários ( não adianta vc achar que entendeu, como diz um prof meu, quando for lidar com o usuário pra saber o que ele realmente quer que o software faça finja-se de burrinho, porque nem sempre o que vc entende logo de cara é o que ele realmente quer, geralmente ele nem sabe direito o que quer, mas quer que resolva os problemas dele!);
  • Incapacidade de lidar com as mudanças de requisitos( ao longo do projeto , muitas vezes, o usuário muda de idéia em relação ao que ele julga realmente importante que o software faça e vc tem que estar apto para fazer essas mudanças, se nao o software vai ficar ruim do mesmo jeito);
  • Complexidade crescente e excessiva;
  • Qualidade ruim;
  • Testes insuficientes(muitas vezes os testes sao feitos por quem desenvolve o software, que e quem sabe o caminho certinho que nao da bugs e funciona perfeitamente, e isso eh errado pq quando chega ao cliente ele SEMPRE vai fazer da forma errada!);
  • Baixa performace.
CARACTERÍSTICAS DO RUP
  • Direcionado a caso de uso : processo de desenvolvimento segue um fluxo através de workflows que derivam dos casos de uso( outro dia eu explico o que é caso de uso);
  • Centrado em arquitetura: ajuda o arquiteto a focar nos objetivos ( corretos de preferencia). Nota: os casos de uso e arquitetura devem "caminhar" em paralelo
  • *Iterativo e incremental: o trabalho de engenharia é dividido em partes menores (pequenos projetos ou iterações). Cada iteração resulta num incremento no produto.
Vamos explicar melhor ...

Ele funciona mais ou menos assim:

em cada iteração, os desenvolvedores identificam e especificam os casos de uso relevantes, criam um projeto usando a arquitetura escolhida como um guia, implementam o projeto em componentes e verificam se os componentes satisfazem o caso de uso. SE a iteração atingir seu objetivo, passa para a proxima iteração, caso contrario, os desenvolvedores devem revisar suas decisões e o que fizeram e tentam de novo (só que de outra forma é claro, de maneira que de certo).
No desenho abaixo da pra entender um pouco melhor como funciona (se vc conseguir lê-lo, é claro)

Ta, mas pra que tudo isso? Que que eu ganho com essas tais de iterações?

Muito simples, caro leitor...
Com a iteração controlada vc reduz o custo do risco às despesas de um único incremento, e não de um produto pronto( imagina vc passar meses fazendo um projeto pra depois, laaaaaaaaa no final , ele nao da certo? melhor faze um poquinho e testa, outro poquinho e testa... e assim vai)
Reduz o risco de não colocar o produto no mercado no tempo esperado (imagina, vc fez tudo , dai chega na hora de testa vc percebe um erro lá na frente e dai tem que refazer um monte de coisa, quando não tudo)
É mais rápido, porque trabalha com pequenos processos , mais simples e mais focados
As necessidades dos clientes e requerimentos não podem ser definidos logo no começo. São tipicamente refinadas em iterações sucessivas (mesmo porque quando o cliente chega pra vc e diz que quer um software a maioria das vezes ele nem sabe mesmo o que quer, apenas quer pq sabe que irá facilitar a vida dele!)


PRODUTO DE PROJETO DE SOFTWARE DO RUP
  • Modelo de caso de uso - com todos os casos de uso e seus relacioamentos com usuário. Define o escopo do sistema;
  • Modelo de análise - tem dois propósitos : refinar os casos de uso em mais detalhes e fazer alocação inicial do comportamento do sistema em uma série de objetos que proveem o comportamento;
  • Modelo de projeto(design) - define: a)estrutura estática do sistema com subsistemas, classes e interfaces b)casos de uso realizados como colaborações entre subsistemas, classes e interfaces
  • Modelo de implementação - inclui componentes ( representando o código fonte) e mapeando as classes para os componentes
  • Modelo de implantação ( deployment) - definem os nós fisicos dos computadores e o mapeamento entre os componentes para esses nós
  • Modelo de teste - descreve os casos de testes e verifica os casos de uso
  • Modelo de banco de dados - consiste dos modelos lógicos e físicos dos dados
A figura abaixo (se conseguir ler) resume mais ou menos o que essas palavras todas disseram ai acima:
CICLO DE VIDA DO RUP
  • Repete uma série de ciclos com uma RELEASE.
  • Cada ciclo consiste em 4 fases :
  • - inseption( iniciação) - chegar a um acordo com os stakeholders;
  • - elaboration( elaboração) - especificar a arquitetura;
  • - construction ( construção) - implementação;
  • - transition ( transição) - transferir o produto para o usuário final ( pode ser apenas um release)
  • Nota: cada fase é dividida em iterações.

FASES DE ITERAÇÕES

  • Uma fase termina com um marco (milestone), que é definido pela disponibilidade de certos
  • artefatos (modelos ou documentos) em um determinado estado;
  • Dentro de cada fase, são realizadas iterações e uma iteração é equivalente a um “miniprojeto”;
FASES
  • Iniciação - Objetivos: estabelecer o escopo, identificar os casos de uso, esboçar a arquitetura, estimar riscos. Artefatos Principais: documento de escopo, modelo de caso de uso, glossário, proposta, comercial, avaliação de riscos, plano de projeto;
  • Elaboração - Objetivos : definir, validar e delinear a arquitetura, delinear a visão, planejar a fase de construção. Artefatos Principais: modelo de caso de uso detalhado, especificação da arquitetura, protótipos, lista de riscos revisada, plano de construção, manual do usuário preliminar.
  • Construção - Objetivos: construir o software com objetivo de minimizar custos de desenvolvimento, priorizar qualidade, investir em visões de software úteis. Artefatos Principais: produto de software integrado, manual do usuário, descrição da versão atual
  • Transição - Objetivos: validação do sistema pelos usuários, implantação e instalação do produto, treinamento dos usuários, liberação para marketing, distribuição e vendas. Artefatos Principais: produto final, manual do sistema, manual do usuário, relatório de implantação
FOCO DAS ITERAÇÕES EM CADA FASE
  • Iniciação: entender os requisitos de modo abrangente e definir o escopo do projeto;
  • Elaboração: captura dos requisitos e definição da arquitetura. Pode haver implementação para provas de conceito;
  • Construção: implementação do produto operacional;
  • Transição: transferência do produto para o cliente e tarefas relacionadas;
DISCIPLINAS DO RUP
  • Cada atividade do processo tem como finalidade criar ou atualizar um ou mais artefatos
  • O RUP possui 6 processos de engenharia e 3 processos de suporte, também chamados de disciplinas
  • Disciplinas de Engenharia:
  1. – Modelagem de Negócio: foca no entendimento do negócio ser automatizado pelo software ( Avalia situação do negócio, descreve o negócio atual, explora automação dos identifica processos de de negócio, refina processos de negócio, especifica realizações processos de negócio, refina papéis e responsabilidades, modela domínio );
  2. – Requisitos: foca no entendimento dos requisitos do software(Analisa problema, captura as necessidades dos stakeholders, defini o sistema, gerencia o escopo do sistema, refina a definição do sistema, gerencia mudanças de requisitos);
  3. – Análise e Design: análise dos requisitos e projeto (design) do software( Define arquitetura candidata, refina arquitetura analisar comportamento, especifica componentes, especificar componentes de tempo-real, especificar banco de dados);
  4. – Implementação: codificação dos componentes( Estrutura o Modelo de Implementação, planeja a integração, implementa componentes, integrar subsistemas, integrar sistemas);
  5. – Teste: avaliação do sistema em relação aos requisitos ( Planeja teste, especifica teste, implementa teste, executar testes no estágio de teste deintegração, executar testes no estágio de teste de sistema, avalia resultado do teste);
  6. – Implantação: entrega do software ( Planeja implantação, desenvolve material de suporte, testa o sistema no ambiente de desenvolvimento, cria versão, versão beta, testa o sistema no ambiente do cliente, empacota o produto, prove acesso ao site de download);
  • Disciplinas de Suporte:
  1. – Gerenciamento de Projeto ( Planeja controles de configuração e mudanças, prepara ambiente de gerenciamento de mudanças, muda e disponibilizar itens, gerencia baselines e versões, monitorar e reporta status, gerencia pedidos de mudança);
  2. – Gerenciamento de Configurações e Mudanças;
  3. – Ambiente: preparação do ambiente para desenvolvimento do projeto ( Prepara ambiente para o projeto, prepara ambiente para iteração, prepara diretrizes para iteração, suporta ambiente para iteração).

ENGENHARIA DE SOFTWARE

Nossa.. são 4 e poko da manhã já... vamo que vamo neh...

Agora vou falar sobre Engenharia de Software, de novo.

Bem, seu conseito está baseado em camadas (é, lembrei do Sherek tb e das cebolas). Mas essa cebola é bem fininha eu diria , porque só tem 4 camadas ( que já ta mais do que bom na minha opinião pq já to ficando com sono!)
São elas: Ferramentas, Métodos, Processos e Foco na Qualidade ( nessa mesma ordem de cima pra baxo)

Agora vamos tratá-las individualmente, hmmm
  • Ferramentas : processos automatizados ou semi-automatizados para os processos e métodos ( como as ferramentas CASE, nossa realmente salvam a nossa pele, pelo menos poupamos um bocado de tempo utilizando-as)
  • Métodos: fornecem a definição do "como fazer" o desenvolvimento de software
  • Processos: é a base da engenharia de software! lol.. É o tal do processo que une as ferramentas com os métodos, massa neh?
  • Qualidade: toda a engenharia deve se fundamentar no compromentimento com a qualidade ( na minha opinião TUDO deve se comprometer com a tal da qualidade, mas tudo bem neh... eu nem dormi ainda, nem sei o que to falando)

Devemos SEMPRE levar em consideração algumas perguntinhas "básicas" na hora de elaborar um software, tais como:
  • Qual o problema a ser resolvido? ( lembre-se sempre de não oferecer laranjas quando se quer maçãs)
  • Quais características do software a ser gerado resolvem o problema ? ( as vezes respostas simples ajudam também)
  • Como o software ( a solução) serão concebidos? ( eh neh, ai complica)
  • Como o software será construído? ( é viável também?)
  • Qual a abordagem que será utilizada para cobrir erros feitos no projeto e na construção do software?
  • Como o software será mantido a longo prazo, quando a correções, adaptações e melhorias forem requeridas por usuários do software? ( lembre-se NUNCA é bom deixar o seu usuário totalmente dependente de vc pra qualquer modificação no software, tende deixa-lo o mais flexivel possivel, afinal de contas, vc quer ser encomodado toda hora todo dia?)
FASES GENÉRICAS DA ENGENHARIA DE SOFTWARE
DEFINIÇÃO
  • Foco no " O quê" será feito : qual informação? qual funcionalidade? quais interfaces? quais restrições? quais validações?
  • O método de definição depende do paradigma uzado

DESENVOLVIMENTO
  • Foco no "como" : como estrutura dados? como a funcionalidade será implementada? como as interfaces serão caracterizadas? como o projeto será traduzido para a linguagem de programação? como será testado?
  • Três tarefas devem ser realizadas: PROJETO DE SOFTWARE, CODIFICAÇÃO DO SOFTWARE, TESTE DO SOFTWARE

SUPORTE
  • Foco na mudança : correção ( defeitos), adaptação ( evolução do software), melhoria ( novos requisitos), prevenção ( manutenção preventiva)
  • Replica os passos de definição e desenvolvimento para o software existente
MODELOS DE PROCESSOS DE SOFTWARE
Ta tudo muito bonito, muito legal, mas e dai?
Pro profissional, o tal engenheiro de software, resolver o problema ele deve desenvolver uma estratégia que envolva todas as camadas e que de fato resolva o problema, para isso existem alguns modelos que auxiliam a esses profissionais uma ordem de como o projeto pode ser implementado. São elas os modelos de processo de desenvolvimento de software ( comentado no outro post sobre Engenharia de Software...)

MODELOS DE PROCESSOS DE DESENVOLVIMENTO DE SOFTWARE
  • Modelo Linear Sequencial: também chamado de "ciclo de vida clássico" e "modelo cascata", ele sugere uma abordagem sequencial para o desenvolvimento de software. O grande problema desse modelo é que só serão visiveis os erros no final do projeto e também é complicado para os usuários conseguirem definir os requisitos.
  • Modelo de Prototipação: permite que o usuário tenha uma noção do software que está sendo gerado, de natureza iterativa e as atividades se repetem até que o software fique pronto. O maior problema é que, como o usuário nunca está satisfeito, dificilmente o software é finalizado , muitas vezes um código gerado como teste (não sendo formulado da melhor maneira possivel) acaba virando definitivo e isso pode gerar muito lixo na execussão do software.
  • Evolucionário incremental: ele combina elementos do modelo linear sequencial, só que aplicada repetinamente, com a filosofia iterativa da prototipação. Dessa forma, cada sequencia linear produz um "incremento " entregavel do software. O problema é que o software nunca terá uma versão final
  • Evolucionário Espiral: ele acopla a natureza iterativa da prototipação, só que com aspectos sistemáticos do modelo linear sequencial. Foi desenvolvido em uma série de "reliases" incrementais: nas primeiras iterações podem apenas ser um modelo em papel ou protótipo e nas ultimas versões, mais completas, o software é produzido. O problema é convencer alguém que a abordagem é controlável. Não é usado na mesma extenção que o linear sequencial e o de prototipação e, por isso, não foi testado suficiente. Ele é um bom modelo, no entanto não é muito seguro, vale mais a pena utilizar esse modelo quando se trata de software livre que interessa que o cliente teste pra achar o erro, e não em empresas das quais dependem do software a ser implementado funcione corretamente xD

PMBOK 2

Nesse post abordaremos o que não foi abordado no anterior (obvil)
Abordaremos sobre as 9 áreas de conhecimento e Principais documentos...

Bem, como descrito no post anterior o PMBOK é dividido em 9 áreas de conhecimento

4. GERENCIAMENTO DA INTEGRAÇÃO
  • Garante que propague integração
  • Processos e atividades necessárias para identificar, definir, combinar, unificar e coordenar os vários processos e atividades de gerenciamento de projetos

  • – 4.1. Desenvolver o Termo de Abertura do Projeto (Project Charter - documento legal que reconhece a existência de um projeto)
  • – 4.2. Desenvolver a Declaração do Escopo Preliminar
  • – 4.3. Desenvolver o Plano de Gerenciamento do Projeto
  • – 4.4. Orientar e Gerenciar a Execução do Projeto
  • – 4.5. Monitorar e Controlar o Trabalho do Projeto
  • – 4.6. Controle Integrado de Mudanças
  • – 4.7. Encerrar o Projeto
5.GERENCIAMENTO DO ESCOPO
  • O que fazer para atender as necessidades dos clientes?
  • Quais são as funcionalidades e características?
  • Escopo de produto - características e funções do produto
  • Escopo de projeto - trabalho necessário para entregar o produto, serviço ou resultado com características e funções específicas
  • Processos necessários para garantir o que o projeto inclui todo o trabalho requerido e somente o trabalho requerido para concluir o trabalho com sucesso, ou seja, nem a mais e nem a menos do que foi estabelecido
  • Controlar o que ainda não está incluido no projeto
  • O termino do escopo concluido é medido em relação ao plano de gerenciamento do projeto, à declaração do escopo do projeto e à EAP e ao dicionário da EAP associados a ele, mas o término do escopo do produto é medido em relação aos requisitos do produto.
Processos:
  • – 5.1. Planejamento do Escopo
  • – 5.2. Definição do Escopo
  • – 5.3. Criar EAP (Estrutura Analítica de Projetos)
  • – 5.4. Verificação do Escopo
  • – 5.5. Controle do Escopo
6.GERENCIAMENTO DO TEMPO
  • Processos necessários para que o projeto seja entregue no tempo previsto
  • – 6.1. Definição da Atividade
  • – 6.2. Seqüenciamento de Atividades
  • – 6.3. Estimativa de Recursos de Atividades
  • – 6.4. Estimativa de Duração de Atividades
  • – 6.5. Desenvolvimento do Cronograma (schedule)
  • – 6.6. Controle do Cronograma
7.GERENCIAMENTO DO CUSTO
  • Quanto vai gastar?
  • Processos envolvidos no planejamento, estimativa, orçamento e controle de custos para que o projeto seja finalizado dentro do orçamento previsto ( imagina vc gasta mto a mais do que preveu pra ve o rolo que isso da)
  • – 7.1. Estimativa de Custos
  • – 7.2. Orçamentação
  • – 7.3. Controle de Custos
8.GERENCIAMENTO DE QUALIDADE
  • Tanto a qualidade do produto quanto do projeto são importantes
  • Atividades que definem regras, objetivos e responsabilidades de qualidade para que o projeto satisfaça as necessidades e expectativas do cliente
  • – 8.1. Planejamento da Qualidade
  • – 8.2. Realizar Garantia da Qualidade
  • – 8.3. Realizar Controle da Qualidade
9.GERENCIAMENTO DE RECURSOS HUMANOS
  • Processos que gerenciam e organizam a equipe do projeto
  • A equipe de projeto é composta por pessoas que possuem papéis e responsabilidades dentro do projeto
  • – 9.1. Planejamento de Recursos Humanos
  • – 9.2. Contratar ou Mobilizar a Equipe de Projeto
  • – 9.3. Desenvolver a Equipe de Projeto
  • – 9.4. Gerenciar a Equipe de projeto
10.GERENCIAMENTO DAS COMUNICAÇÕES
  • Processos destinados a garantir a geração, coleta, distribuição, armazenamento e recuperação das informações apropriada do projeto no tempo adequado
  • – 10.1. Planejamento das Comunicações
  • – 10.2. Distribuição das Informações
  • – 10.3. Relatório de Desempenho
  • – 10.4. Gerenciar Partes Interessadas (Stakeholders)
11.GERENCIAMENTO DE RISCO
  • Processos preocupados em conduzir o planejamento do gerenciamento, identificação, análise, respostas e monitoramento e controle de riscos
  • – 11.1. Planejamento do Gerenciamento de Riscos
  • – 11.2. Identificação de Riscos
  • – 11.3. Análise Qualitativa de Riscos
  • – 11.4. Análise Quantitativa de Riscos
  • – 11.5. Planejamento de Resposta a Riscos
  • – 11.6. Monitoramento e Controle de Riscos
12.GERENCIAMENTO DE AQUISIÇÕES
  • Processo de aquisições de produtos, serviços ou resultados necessários de fora da equipe do projeto para realizar o trabalho ( por exemplo vc vai construir um projeto de software sobre as baleias no litoral brasileiro e precisa saber quais são as espécies que existem, dai vc vai la e pede pro biologo marinho a informação, pesquisa, que for.. nossa que exemplo mais estranho.. mas ta valendo)
  • – 12.1. Planejar Compras e Aquisições
  • – 12.2. Planejar Contratações
  • – 12.3. Requerer Respostas de Fornecedores
  • – 12.4. Selecionar Fornecedores
  • – 12.5. Administração de Contratos
  • – 12.6. Encerramento de Contratos
DOCUMENTOS PRINCIPAIS DO PMBOK
  1. Termo de abertura do projeto: autoriza formalmente o projeto
  2. Declaração do escopo do projeto: determina qual trabalho deverá ser realizado e quais as entregas precisam ser produzidas
  3. Plano de gerenciamento do projeto: determina como o trabalho será realizado

PMBOK

Eita la... nós de novo...
Este post é praticamente continuação do Engenharia de Software, mas abordaremos especificamente do PMBOK

Bem.. começa do começo neh?

O Project Management Body of Knowledge; também conhecido como PMBOK®, é um conjunto de práticas em gerência de projetos levantado pelo Project Management Institute (PMI) e constituem a base da metodologia de gerência de projetos do PMI. Estas práticas são compiladas na forma de um guia, chamado de Guia do Conjunto de Conhecimentos em Gerenciamento de Projetos, ou Guia PMBOK.

Ou pra que prefere em tópicos:

  • PMBOK - Project Managment Body of Knowledge
  • PMBOK Guide - lista das principais áreas e práticas do gerenciamento de projetos
  • PMI - Project Managment Institute ( quem fez)
  • PMP - Project Managment Professional ( certificação , PMI também é responsável por ela)


Vamos reforçar os conhecimentos dos outros post? SIMMMMMMMMMM xD ¬¬
Ta.. Projeto..
  • É um esforço temporário para criar um produto ou serviço
  • É desenvolvido em fases
  • É DIFERENTE da atividade contínua!
  • O GERENCIAMENTO DE PROJETOS é a aplicação de atividade de conhecimentos, habilidades, ferramentas e técnicas nas atividades de projeto para atingir os requerimentos do projeto.

Pronto, agora vamos pras especificações PMBOK...
ORGANIZAÇÃO
  • O GERENCIAMENTO DE PROJETOS é realizado através de processos
  • 44 processos de gerenciamento agrupados em: 5 grupos de processos e 9 áreas de conhecimento
  • aplicaveis para qualquer tipo de projeto, mas deve contextualizar de acordo com o mesmo.
PROCESSO
O que é um processo em Engenharia de Software mesmo?
É um conjunto de passos parcialmente ordenados, cujo objetivo é atingir uma meta: entregar um produto de software de maneira eficiente, previsível e que atinja as necessidades de negócio. Geralmente inclui análise de requisitos, programação, testes, entre outras tarefas. ( by wikipédia)
Processo pode ser dividido em duas categorias:
  • Processo de gerenciamento comum a todos do projeto
  • Processo orientado ao produto, específico para a criação do produto, e isso faz com que possa variar de acordo com a área de aplicação
GRUPOS DE PROCESSOS
São no total 5:
  1. Grupo de processo de INICIAÇÃO
  2. Grupo de processo de PLANEJAMENTO
  3. Grupo de processo de EXECUÇÃO
  4. Grupo de processo de MONITORAMENTO E CONTROLE
  5. Grupo de processo de ENCERRAMENTO
Abaixo uma figura praticamente auto-explicativa de como funcionam os grupos de processos...
Mesmo assim vamos a algumas definições neh?
Bem.. o que podemos dizer...
  • Os processos de um grupo interagem com outro e com ele mesmo
  • Os processos interagem por meio de sua entrada e saída
  • Os grupos de processos NÃO são fases ( pq podem se repetir dentro do projeto e subprojeto)
Simbologia
NÃO CONFUNDA ETAPA DE PROJETO COM GRUPO DE PROCESSO!!

Bom.. exemplinhos tão demorando já neh?

Digamos que você vai fazer uma pipoca (esse exemplo da sora foi o maximo xD)
dai quais etapas nos temos pra isso?
Bem, podemos dividir assim...
ETAPA 1 : pega a pipoca e o milho e poe tudo na panela
ETAPA 2 : liga o fogo e espera
ETAPA 3 : apaga o fogo e retira da panela
ETAPA 4 : tempera
e pronto..
eu finalizo uma etapa e não volto na anterior ( a não ser que eu vá fazer mais pipoca neh, dai eu começo tudo de novo), já em grupo de processo eles podem voltar e tudo mais, olha lá a figura!


Vamos especificar cada grupo agora? Não? Sim? Bem, eu vou, se vc vai ler ou não é problema seu!

GRUPO DE PROCESSO DE INICIAÇÃO
  • São processos que facilitam a autorização formal para iniciar um novo projeto ou fase de projeto
  • Quando os projetos são grandes, geralmente, são divididos em fases ( é sempre mais facil resolver um problema pequeno do que um grande, então sempre que um problema for grande de mais divida-o, qualquer que seja)
  • Quando vc faz a revisão dos processos de iniciação no início de cada fase do projeto fica mais facil de mante-lo focado no seu objetivo, ou decidir se continua ou não
GRUPO DE PROCESSO DE PLANEJAMENTO
  • Desenvolvem o plano de gerenciamento do projeto
  • Identificam, definem e amadurecem o escopo do projeto, seu custo e programam suas atividades
  • Quando ocorre mudanças no ciclo de vida do projeto gera também a necessidade de revisar um ou mais processos do planejamento e , possivelmente, de iniciação ( e isso facilmente ocorre!)
GRUPOS DE PROCESSO DE EXECUÇÃO
  • São os grupos de processos que executam ( genial não?) o trabalho definido no plano de gerenciamento de projeto
  • A equipe de projeto define quais dos processos são necessários, dependendo da área de atuação
  • Variações na execução causarão necessidade de re-planejamento ( agora entendeu a diferença com etapa? qualquer coisinha vc volta pro grupo de processo anterior ¬¬ então quando for fazer algo, pense bem, porque em situaçoes normais já é bem facil voltar, se vc bobiar vai fica voltando toda hora e dai atrasa tudo...) A sim, só lembrando que as variações podem ser referentes a durações de atividades, produtividades e disponibilidades de recursos e riscos não previstos...
GRUPO DE PROCESSOS DE MONITORAMENTO E CONTROLE
  • O objetivo desse grupo é fazer com que a performace do projeto seja observada e medida regularmente a fim de identificar variações com relação ao plano de projeto original
  • Ela é quem controla a mudança e recomenda ações em antecipação a possíveis problemas
  • Quando ha variações e elas começam a interferir nos objetivos do projeto, os processos de planejamentos são revistos
GRUPO DE PROCESSO DE ENCERRAMENTO
  • São grupos de processos usados para finalizar formalmente as atividades do projeto ou de fase do projeto
  • Entrega formal do produto do projeto ou da fase do projeto
Agora vamos abordar um pouco sobre a integração sobre os grupos de processos. Bem, como você pode observar na descrição acima, e na imagem de como funciona o ciclo de vida do projeto, os grupos de processos estão ligados pelos resultados que produzem geralmente uma saída ( de um processo) com uma entrada ( de outro processo), ou são entregas do projeto ou etapas dele.

Podemos observar melhor isso na figura abaixo:
Outra imagem legal que a prof mostrou foi a dos grupos de processos no ciclo de vida do projeto

20080909

UM POUCO DE ENGENHARIA DE SOFTWARE

Esse post é baseado no resumo que fiz do artigo Alguns Fundamentos de Engenharia de Software do Wilson de Pádua Paula Filho publicado na revista Engenharia de Software Magazine.

Pra começar ele define a diferença entre ciência e engenharia como:

Ciência - Conjunto organizado de conhecimentos
relativos a um determinado objeto, especialmente
os obtidos mediante a observação, a
experiência dos fatos e um método próprio.
Engenharia - Arte de aplicar conhecimentos
científicos e empíricos e certas habilitações
específicas à criação de estruturas, dispositivos
e processos que se utilizam para converter
recursos naturais em formas adequadas ao
atendimento das necessidades humanas.

Com base na definição descrita podemos dizer que a ciência foca no acumulo de conhecimento através de métodos científicos ( baseado em experimentos e observações ) e a engenharia aplica os conhecimentos da ciência e "da" uma utilização a eles que irá melhorar alguma necessidade humana.

Na Engenharia de Software podemos definir o software como um produto . Estando fora de seu escopo programas feitos com o objetivo de agradar ao programador, programas descartáveis ( feitos para resolver o problema da pessoa que o fez sem a utilização por outras pessoas ).
Para entrar no escopo é necessário ser um produto que tenha um investidor que esteja disposto a pagar por ele ( intenções de lucro), pessoas que irão utilizá-lo (pode ser que o produto seja feito por encomenda com o intuito de atender a necessidade de um cliente específico ou feito "em massa" ou produto de prateleira - como define o autor, que tem como objetivo atender a um número maior de usuários).

O autor define o ciclo de vida sendo:
  • concebido para tentar atender a uma necessidade ( faz sentido neh?)
  • especificado, quando essas necessidades são traduzidas em requisitos viáveis
  • desenvolvido, transformando-se em um conjunto formado por código e outros itens, como modelos, documentos e dados
  • passa por algum procedimento de aceitação e é entregue ao cliente ( em alguns casos passa para clientes estratégicos fazerem os testes juntamente com a equipe de desenvolvimento para analisarem requisitos como consistencia de dados, usabilidade, bla bla bla...)
  • entra em operação, é usado, e sofre atividades de manutenção, quando necessário ( sempre há o que melhorar no software e sempre ha algum bug =[ )
  • retirado de operação ao final de sua vida útil.(afinal de contas, nada é pra sempre neh? mesmo porque com o avanço da tecnologia sempre encontra-se uma forma melhor de resolver o mesmo problema... tirando o caso do cobol nos bancos que ainda nao encontraram.. hehehe..)
Outra coisa importante são as DATAS e EQUIPE!
Todo projeto tem data de início, data de fim, uma equipe e outros recursos. O responsável pelo projeto é chamado de gerente de projeto ( ou líder de projeto) e o que ele faz já foi definido no outro post sobre... Gerencia de projeto.. se não me engano...
Ele também define" O trabalho realizado dentro de um projeto pode ser descrito por um conjunto de atividades, que podem possuir relações de dependência, paralelismo, e decomposição em atividades mais elementares" e que "próprio produto é um resultado concreto associado ao marco de conclusão do projeto, que pode ser utilizado sozinho, ou como componente de um sistema."

Agora iremos falar sobre PMI ( Project Managment Institute), que é uma organização internacional que tem o objetivo de difundir e promover boas práticas de gestão de projetos. Com essa finalidade ela administra programas de certificação de profissionais nessa área e publica o guia PMBOK ( Project Managment Body of Knowledge).

Nessa guia "define-se um projeto como um empreendimento temporário realizado para criar um produto, serviço ou resultado distinto. Um produto, por sua vez, é definido como um objeto produzido, quantificável e que pode ser um item final ou um item componente. Uma atividade é definida como um componente de trabalho realizado durante o andamento de um projeto. Os relacionamentos entre as atividades que compõem um projeto são mostrados em uma estrutura analítica, que o PMBOK define como uma decomposição hierárquica orientada à entrega do trabalhoa ser executado pela equipe do projeto, para atingir os objetivos do projeto e criar as entregas necessárias. Estruturas analíticas de projeto podem ser apresentadas de muitas maneiras. Diagramas de atividade são uma das representações mais usadas atualmente. Outro tipo de representação usual é fornecida por planilhas e cronogramas, como aqueles que são produzidos pela ferramenta Microsoft Project."

"O PMBOK é um exemplo de modelo de referência: uma estrutura de conhecimentoque organiza conceitos, práticas e padrões de uma área." Ou seja, ele diz O QUE FAZER, E NÃO COMO FAZER! Não confunda!!

Outro modelo de referência citado pelo autor é o CMMI ( Capability Maturity Model Integration), formulado pelo Software Engineering Institute da Carnegie-Mellon University . Uma curiosidade que o autor cita é que o CMMI foi uma encomenda do Pentágono, que o utiliza para avaliação da capacidade de seus fornecedores de software e ele tem grande aceitação na indústria americana.
Ta... o importante é saber que o CMMI têm raizes em comum com o PMBOK, como pode-se observar ( segundo o autor):
"Produto - Resultado que se pretende entregar a um cliente ou usuário.
Projeto - Conjunto gerido de recursos inter-relacionados, que entrega um ou mais produtos a um cliente ou usuário, com início definido e que, tipicamente, opera conforme um plano.
Estrutura analítica do projeto - Um arranjo dos elementos do trabalho e dos relacionamentos deles entre si e com o produto final."

SÓ QUE, diferente do PMBOK, o CMMI também foca as aplicações dos processos e desenvolvimento de produtos( área técnica), enquanto o PMBOK se limita nas áreas de gestão de projetos.

Segundo a PMBOK um processo é um conjunto de ações e atividades inter-relacionadas, realizadas para obter um conjunto especificado de produtos, resultados ou serviços.

Segundo o autor, " processos, pessoas e tecnologia constituem os fatores de produção, que determinam o grau de sucesso dos projetos".

Ta acabando, caro leitor, calma!

Podemos definir a importância de modelos de referência como a CMMI para "mostrar o caminho das pedras e o mapa da mina: onde a experiência coletada indica que o investimento em melhorias é mais rentável, em cada passo da evolução das organizações"

Conclusão!
"A Engenharia de Software visa à criação de produtos de software que atendam as necessidades de pessoas e instituições e, portanto, tenham valor econômico. Para isso, usa conhecimentos científicos, técnicos e gerenciais, tanto teóricos quanto empíricos. Ela atinge seus objetivos de produzir software com alta qualidade e produtividade quanto é praticada por profissionais treinados e bem informados, utilizando tecnologias adequadas, dentro de processos que tirem proveito tanto da criatividade quando da racionalização do trabalho."

Ufa.. por hora é soh.. mais tarde trabalharemos mais sobre PMBOK e CMMI...