sábado, 8 de dezembro de 2012

Análise de Sistemas - Evolução - Estruturada / Objeto / SOA

Publicação original = Fórum SBGC-TIC  14/9/2009 12:32 PM


Nesta mensagem e em suas respostas procurarei demonstrar a minha visão sobre a evolução da Análise de Sistemas. 

Recuperei dois textos produzidos em 1999: 

=== Construção e manutenção de sistemas 

=== DesSistema (Metodologia básica de minha empresa, CEPRO, empregada nos projetos da época) 

Do primeiro texto segue o diagrama síntese do processo de construção e manutenção de sistemas: 



Problema : Construir o sistema com qualidade e manter operando, sem perda de qualidade, enquanto adequamos o sistema a novas necessidades. 

(A) Histórico :
(A1) [Dados e lógica] construído para cada solução (1950 – 1980)
(Criação de programas e não de sistemas) 

Ex.: 
=== Código “spaghetti” e arquivos por programa. 

=== Planilhas -> Dados, fórmulas e resultados “embaralhados”. 
(Evolução = Áreas definidas de entrada de dados, fórmulas e apresentação de resultados.) 

Projeto : Fluxogramas / Folhas de definição de campos de arquivos. 

Construir e manter programas como arte. 

(A2) Sistemas Gerenciadores de Bancos de Dados e módulos de lógicas 
(1980-1995)

Análise/Projeto estruturado (DFD, DER, DD, micro-especificações). 

Programação estruturada ( 5 estruturas, GOTO proibido). 

Tabelas de referências cruzadas (Aplicações e funções usadas, aplicações/funções e colunas de tabelas). 

Fluxo de controle de sistemas/programas. 

TblParametros.nroVersão e NroVersão em cada aplicação. 

Modularidade (Djkastra). 

Outras fontes : Yourdon, Page-Jones, Gane & Sarson 

Grande melhora no processo de construção, mas dificuldade no processo de manutenção para quem não usa ferramentas CASE. 

(A3) Orientação a objetos

Análise/projeto/programação como um contínuo detalhamento dos objetos. 

Analogia : indústria automobilística, um sistema é uma montagem de componentes disponíveis e utilizáveis em vários sistemas. 

Modularidade radical –> objeto = (dados/propriedades+eventos+métodos). 

Projeto : Diagrama de Transição de Estados. 

Construção por composição de objetos já testados com novos, manutenção facilitada por característica de encapsulamento (aperfeiçoamento de funções de objetos ficam disponíveis para todos os sistemas que os utilizem, novas funções para objetos não impactam sistemas já implantados. 

Restam algumas dificuldades de implantação (ambiente cliente-servidor) : 
====== Parte do objeto no servidor (ex.: dados, triggers, stored procedures). 
====== Parte do objeto na estação (ex.: interface com usuário). 
====== Garantia de compatibilidade entre estas partes. 
====== Compor ou não um .exe para o sistema (agrupando os objetos) ? 

(B) Usar convenção de nomenclatura da Microsoft.

(C) Classes e objetos.

Classe Faturas (Faturas de clientes) 
====== Faturas de clientes “A” (Obj) 
====== Faturas de clientes “B” (Obj) 
====== Faturas de clientes “C” (Obj) 




Metodologia de desenvolvimento de sistemas 


.................................................... CEPRO
.................................................... Consultoria em sistemas de informação 
.................................................... para excelência e produtividade. 

Elaborado por : 

Claudio Estevam Próspero 

28/06/1999 


Fases do desenvolvimento de um sistema de informações

1. Arquitetura ( O QUE ? POR QUE ? ) 

2. Projeto ( COMO ? QUANDO ? QUANTO ? QUEM ?) 

3. Construção ( Programação e Testes ) 

4. Implantação ( Uso do Sistema)


As fases (1) e (2) consomem, normalmente, de 10% a 15% do tempo de criação de um sistema, mas a sua correta execução permite a otimização da fase (3) e, no limite, evita um ótimo sistema, como técnica de construção, que não atende as necessidades para as quais foi, ou deveria ter sido, construído. 

Uma ótima analogia é a construção de um prédio, impossível de chegar a bom termo sem um bom projeto, e um desastre de vendas se não houver uma boa arquitetura. 

É na fase de arquitetura que se cria a motivação para iniciar o sistema e, principalmente, para persistir na sua construção e implantação, na dura passagem da "perfeição dos sonhos", para o "sofrimento com as limitações da realidade". Se os "POR QUE ?" dos "O QUE ?" se idealizou forem realmente bons, todos persistirão na sua construção. (Dependendo dos benefícios, aceita-se os custos). 

A arquitetura de um sistema deve ser a "utopia". No projeto se "põe os pés no chão" em função das limitações (tecnológicas, organizacionais,etc.), mantendo-se a "utopia" como referência para aplicação de novas tecnologias, evoluções organizacionais, etc. ,que permitam aproximações de novas versões do sistema, do que foi idealizado.



Sugestões de Ferramentas para Cada Fase

1. Arquitetura

Matriz de pontos levantados (problemas ou sugestões dos entrevistados para o sistema) contendo as seguintes informações : 

=== Nro. Ponto 

=== Descrição do Ponto (problema ou sugestão) 

=== Areas/Setores Afetados 

=== Problemas Potenciais (da persistência do problema ou da não implantação da sugestão) 

=== Ações Sugeridas ( para solucionar o problema ou para implantar a sugestão) 

=== Referência aos Projetos que Contribuem para as Ações Sugeridas 

====== Projetos Funcionais ou Organizacionais (alterações ou implantação de políticas/procedimentos). 

====== Projetos de Sistemas de Informações (alteração ou implantação de sistemas computacionais). 

====== Rede de Interdependência entre os Projetos (quais os pré-requisitos de cada projeto). 

2. Projeto (para cada projeto de sistema listado acima)

Diagrama de Entidades/Relações + Dicionário de Informações (quais, sem preocupação com suas características fisicas. Em um levantamento da situação atual podem ser utilizadas cópias preenchidas dos documentos atuais/telas/relatórios). 

Diagrama de Fluxo de Dados + Descrições de Processos. 

Diagrama de Controle de Programa (Inicio + Tratamento + Fim) ou Diagrama Hierárquico de Funções (Batch ou processos sequenciais). 

Diagrama de Transição de Estados ou Diagrama de Eventos (processos orientados à eventos). 

Protótipos - em ambientes de desenvolvimento tipo Access pode ser obtido um protótipo sem código, e utilizando-se uma ferramenta de documentação (Ex. TotalAnalyzer), obter-se alguns dos diagramas acima. 

Arvores de Decisões. 

Fluxogramas. 


3. Construção

Linguagens ou Geradores de Soluções conforme as especificações de cada projeto (Access, VisualBasic, Cobol, SQL, Excel, etc.).




Análise de sistemas - Comentários

Porque usar diagramas.

Para organizar e tornar facilmente acessível grandes quantidades de informações sobre um dado assunto de interesse. Um padrão de diagramação comum a um grupo, permite a partilha do conhecimento organizado entre os membros do grupo. 

Diagramas como modelos de sistemas.

Construindo modelos de sistemas através de diagramas e/ou protótipos conseguimos testar a funcionalidade e apresentação do sistema antes de grandes investimentos em programação. O ideal utópico de uma modelagem é a construção de um sistema que atenda todos os requisitos de funcionalidade e apresentação já na sua primeira versão. 

Diagramas como input para planejamento.

Assim como o grau de conhecimento contido em um mapa rodoviário, dado pelo nível de detalhe representado em sua convenção de simbologia, permite o melhor planejamento de uma viagem, o grau de conhecimento capturado sobre um sistema em diagrama(s), permite maior precisão no planejamento dos recursos necessários à sua construção. 


Etapas de um projeto, uma analogia.

Ver na mensagem inicial desta sequência (Análise de Sistemas - Evolução - Estruturada / Objeto / SOA) 

Padrões de diagramação comuns em análise de sistemas.

Projeto lógico(levantamento): mapa de entidades-relacionamentos, dicionário de dados, diagrama de fluxo de dados, descrição de processos, fluxogramas, tabelas de decisões. 

Projeto físico : diagramas de input / output, diagramas de estrutura de programas (modularidade, operações da programação estruturada (sequência, loop, if, case)), pseudo-código, tabelas de decisão, fluxograma, books(Cobol) ou geradores de tabelas(Sql, xBase, Access). 



Porque usar análise orientada a objetos.

Para diagramar sistemas onde existe paralelismo de processamento e expandir o conceito de modularidade das funções para os objetos(dados e funções como um "pacote"), permitindo a construção de sistemas complexos como montagem de objetos disponíveis, dos quais só conheçamos o comportamento, sem preocupação com sua complexidade interna. 

Conceitos de diagramação como ferramentas.

Considere os conceitos de diagramação e metodologias de desenvolvimento como sua caixa de ferramentas de trabalho, tenha uma grande quantidade, de boa qualidade, e saiba como e, principalmente, quando usar cada uma.



Diagrama de fluxo de dados (funções do sistema).

Diagrama de fluxo de dados representando a aplicação da metodologia aqui sugerida. 

Notação :

D(9) - representa um depósito de dados (conjunto de documentos ou base de dados em computador) 

E(9) - representa algo fora do escopo do sistema em análise, mas que interage com este sistema. 

F(9) - representa um fluxo de dados de entrada ou saída de um processo. 

P(9) - representa um processo de tratamento de dados (manual ou automático). 



Diagrama de entidades e relacionamentos (relações entre os dados).





Desenvolvimento de sistemas
Depósitos de dados

D1 - Matriz resumo do estudo

Número do ponto 

Descrição do ponto 
===Problema ou sugestão levantado em entrevistas ou percebido pela equipe durante estudo. 

Areas/setores afetados 
===Define usuários e interfaces potenciais do sistema em análise. 

Problemas potenciais 
===Danos que podem vir a ocorrer, ou ganhos não obtidos, se o ponto não for tratado pelo sistema ( aqui temos os benefícios que justificam os custos das ações recomendadas). 

Ações sugeridas 
===Para solucionar o problema ou para implantar a sugestão. 

Projetos relacionados ao ponto 
===Identificação dos projetos (organizacionais ou de sistemas de informações) que contribuem para uma ou mais das ações sugeridas. 

====== Projetos Organizacionais - alterações ou implantação de políticas/procedimentos. 

====== Projetos de Sistemas de Informações - alteração ou implantação de sistemas computacionais. 

D2 - Projetos Identificados

Identificação do projeto 

Objetivo do projeto 

D3 - Fluxo de projetos (ou sua relação de interdependência)

Identificação do projeto fim 
===Projeto que se pretende desenvolver. 
Identificação do projeto prévio 
===Projeto(s) que devem estar desenvolvidos para que se possa atuar no projeto fim (pré-requisitos). 

D4 - Projetos Organizacionais

Objetivo 

Histórico 
=== O "POR QUE ?" do projeto, com descrições de ocorrências que levaram a percepção de sua necessidade. 

Descrição sumária 
=== Idéias surgidas na equipe de estudo e que podem orientar o detalhamento do projeto. 

Documentos de detalhamento 
=== Identificações de documentos ou arquivos de computador onde está detalhado o projeto 

(Ex. : Diagramas de Fluxos de Dados, Diagramas de Pareto, Diagramas de Causa e Efeito, Atas de Reuniões, etc.) 

D5 - Projetos de Sistemas de Informações

Objetivo 

Histórico 
=== O "POR QUE ?" do projeto, com descrições de ocorrências que levaram a percepção de sua necessidade. 

Descrição sumária 
=== Idéias surgidas na equipe de estudo e que podem orientar o detalhamento do projeto. 

Documentos de detalhamento 
===Identificações de documentos ou arquivos de computador onde está detalhado o projeto 

(Ex. : Diagramas de Fluxos de Dados, Diagramas de Entidades-Relacionamentos, Diagramas de Controle de Programas (rotinas de processamento sequencial), Diagramas de Transição de Estados ou Diagramas de Eventos (aplicativos orientados à eventos ou orientados à objetos), Árvores de Decisões, Fluxogramas, etc..))


Desenvolvimento de sistemas
Fluxos de dados


F1 - Solicitação de Análise

Documento descritivo contendo as informações relevantes sobre o problema que deve ser analisado. Abaixo algumas sugestões de tópicos :

1. Visão e escopo.

A visão é a definição, em nível macro, do "O QUE ?" se pretende com o novo sistema, ou nova versão de sistema já existente.

O escopo é a abrangência, em termos de setores da empresa, ou assuntos, que o estudo deve contemplar.

2. Histórico.

Aqui procura-se o "POR QUE ?" da solicitação do sistema, com descrições de ocorrências que levaram a percepção de sua necessidade.

3. Objetivos.

É o detalhamento da visão ("O QUE ?" ), em termos mensuráveis. Aqui define-se os fatores críticos de sucesso do sistema (o que ele precisa atender para que sua implantação seja viável).

4. Restrições e exceções.

As restrições definem o que o estudo não pode propor mudar.

Nas exceções lista-se o que já se percebeu que não tem regras, e portanto não é passível de ser tratado no sistema, e o que se fará quando estas situações ocorrerem.



F2 - Novo Processo de Trabalho

Conjunto de documentos e sistemas que serão a base do novo método de trabalho dos setores afetados pelo sistema em implantação.Alguns exemplos :

1. Politicas e normas que devem ser respeitadas para que novo processo funcione.

2. Kits de instalação do novo sistema/versão, com suas instruções de uso.

3. Manuais de utilização do novo sistema/versão.

4. Material base de treinamento dos usuários.

Desenvolvimento de sistemas
Projetos organizacionais


PO1 - Projeto organizacional 1

Objetivo :
=== Orientar a fase de arquitetura no projeto de novos sistemas/versões.

Histórico :
=== Matriz resumo de estudo - Pontos 1/...

Descrição sumária :


Documentos de detalhamento :

=== Matriz0.doc

=== DFD : P0.gfc / P1.gfc

=== DER : Der.gfc

PO2 - Projeto organizacional 2

Objetivo :

=== Orientar a fase de projeto de novos sistemas/versões.

Histórico :
=== Matriz resumo de estudo - Pontos 5/...

Descrição sumária :


Documentos de detalhamento :

=== Matriz0.doc

=== DFD : P0.gfc / P2.gfc

=== DER : Der.gfc



Nas páginas seguintes temos :

1. Um exemplo de uma Matriz de Estudo que explora alguns problemas que normalmente ocorrem em um processo de desenvolvimento de sistemas. Observe que os Projetos Organizacionais referidos na Matriz, encontram-se exemplificados nas páginas anteriores.

2. Um exemplo de uma sequência de atividades que compôem um projeto de sistema modelo.

Matriz de Estudo - conteúdos


 Estrutura de Projeto- conteúdos



Evolução de Análise Estruturada para Análise Orientada à Objetos

28/06/1999 

A motivação para este estudo é responder as seguintes perguntas : 

- Por que uma equipe deve adotar a análise orientada a objetos ? 

- Como a análise / projeto orientada a objetos colabora no esforço para padronizar e otimizar a engenharia de conhecimentos (engenharia de informações) ? 

- Como aproveitar o investimento e conhecimento da organização, representado com base na análise estruturada, na transição para análise orientada à objetos ? 

Orientação à objetos (conceito em disseminação atualmente - 28/06/1999). 


Análise, projeto, programação e manutenção como um contínuo refinamento do conhecimento sobre os objetos tratados na área de negócios em estudo. 

Analogia é a indústria automobilística, onde um novo veículo é composto por montagem de componentes disponíveis no mercado e utilizáveis em vários modelos. 

Modularidade radical : objeto é o conjunto de dados / propriedades, eventos e métodos referentes à uma entidade representada no sistema. 

Ferramentas de análise e projeto : fichas de especificação de objetos e diagramas de transição de estados de um sistema. 

Construção de aplicações por composição de objetos existentes (já testados), com objetos específicos, desenvolvidos para a aplicação. 

Manutenção facilitada por características de encapsulamento (correções e/ou aperfeiçoamento de funções de objetos ficam disponíveis para todos os sistemas que os utilizem, novas funções para objetos não impactam sistemas já implantados. 

Eliminação da necessidade de referências cruzadas e controle de versões, uma vez que uma aplicação passa a ser composta pela interação de objetos com comportamento especificado no repositório de objetos. 


Conversão de especificações existentes em Análise Estruturada para implantação Orientada à Objetos em ambiente Cliente - Servidor.

Para cada entidade informacional identificada nos Diagramas de Fluxo de Dados e Diagramas de Entidades e Relacionamentos, definir um Objeto de Dados. 

Para cada entidade humana identificada nos Diagramas de Fluxo de Dados e Diagramas de Entidades e Relacionamentos, definir um Objeto de Interface. 

Para cada fluxo de dados entre um processo e uma entidade informacional, de um Diagrama de Fluxo de Dados, definir um método para um Objeto de Dados, que deverá ser implantado como um procedimento armazenado no servidor (stored procedure, no caso do SQL-Server), referenciada à estrutura de dados que acessa. 

Para cada fluxo de dados entre um processo e uma entidade humana, de um Diagrama de Fluxo de Dados, definir um método para um Objeto de Interface, que deverá ser disponibilizado para as estações de interface do sistema. 

Ou seja, os processos de nível mais baixo (micro-especificações), são convertidos em conjuntos de : 
• métodos de objetos de interface (interação com pessoas), que fazem a captura e apresentação de dados, e 

• métodos de objetos de dados (interação com dados), que fazem a atualização e recuperação de dados em estruturas de dados internas ou externas ao escopo do sistema (interação entre sistemas). 

Exemplos : 

Objetos de Interface (estação) Objetos de dados (servidor) 
obiFatura.Apresentação sp_obdFatura.Recupera 
obiFatura.Inclusão sp_obdFatura.Inclui 
obiFatura.Alteração sp_obdFatura.Altera 


As triggers e stored procedures (em ambiente SQL-Server), representam as regras de negócios associadas aos objetos de dados e, através da interação entre analistas de negócios e administradores de dados, na criação das triggers, stored procedures e índices, faz-se a adequação dos acessos à dados, necessários às aplicações, e otimização de performance do(s) servidor(es) de objetos de dados, evitando-se as desagradáveis surpresas de degradação de performance, que a submissão livre de comandos SQL, pode causar em qualquer Sistema de Gerenciamento de Banco de Dados. 

Observação : esta abordagem deve ser considerada nas fases (G) e (H) da estrutura de projeto modelo para análise de sistemas, proposta no texto Metodologia de Desenvolvimento de Sistemas da CEPRO – Consultoria em Informática.

Bibliografia de referência :

1. Gane,Chris / Sarson,Trish
Análise Estruturada de Sistemas
Livros Técnicos e Cientificos Editora S.A. - 1984

2. Gane,Chris
Desenvolvimento Rápido de Sistemas
Livros Técnicos e Cientificos Editora S.A. - 1988

3. Shiller, Larry
Excelência em Software - (Série Yourdon Press)
Makron Books - 1992

4. Keller,Robert
Análise Estruturada na Prática
McGrawHill - 1990

5. Bohl,Marilyn
Guia para Programadores
Editora Campus - 1983

____________________________________________________________________________
RE: Evolução de AE => Análise Orientada à Objetos (n Camadas)
18/9/2009 11:53 AM
quote:

Evolução de Análise Estruturada para Análise Orientada à Objetos


Na mensagem acima, por razões didáticas, em relação ao tópico tratado (evolução da análise de sistemas), só foram tratadas duas camadas de objetos: Cliente e Servidor

No mínimo, seria necessário considerar mais uma camada: a camada de negócio, que permite retirar as Regras de Negócio dos Objetos de Interface (lado Cliente da aplicação) e dos Objetos de Dados (lado Servidor da aplicação, também conhecida como camada de persistência). 

Conforme a Arquitetura Técnica da aplicação em desenvolvimento, serão definidas as camadas de objetos necessárias.

____________________________________________________________________
[Análise de Sistemas - Evolução - Estruturada / Objeto / SOA] Mensagens relacionadas 18/9/2009 12:27 PM

TIC - Macro visão de rumo: 

=== Todos os Fóruns >> [Fóruns de GC em áreas de aplicação] >> GC na área de TI >> TIC - Macro visão de rumo


SOA - referências : 

=== Todos os Fóruns >> [Fóruns de GC em áreas de aplicação] >> GC na área de TI >> SOA - referências 

___________________________________________________________________
RE: Análise de Sistemas - Evolução ... (em resposta à claudioprospero)  
vclaport 10/11/2009 3:55 PM  

Olá, Cláudio.

Segue uma sugestão para este tópico ... Acho que poderíamos discutir neste tópico os "links" da Gestão do Conhecimento com o desenvolvimento de software, a forma como esta mudança de paradigma pode ter influenciado em cada etapa do desenvolvimento de software, as metodologias, a própria forma de enxergar o software. Que tal a sugestão ? Neste caso, acho que para cada item que você postou, valeria ter algum questionamento, alguma discussão ... Que tal? 

Abs
Viviane

__________________________________________________
RE: [discutir neste tópico os "... (em resposta à vclaporti)
11/11/2009 6:15 PM 

Olá, Viviane. 

Se compreendi corretamente sua proposta, ela relaciona-se com uma conversa recorrente entre o Sérgio Storch e eu sobre o uso deste fórum. 

Tenho procurado utilizar este fórum (e outros de que participo), de acordo com meu entendimento do Modelo SECI, de Nonaka e Takeuti[1] , como um BA [1], no qual busco Socializar, Externalizar, Combinar e Internalizar Conhecimentos, ciclicamente e com contínuo aumento de compreensão sobre alguns tópicos relacionados a Tecnologia da Informação e Comunicação. 

Pelo exposto acima eu creio que nossas postagens neste e em outros fóruns já atendem suas sugestões. (Eu tenho uma visão de GC como Ações e Valores que promovam a Geração e Compartilhamento de Conhecimento, não como atividade de Administração, ou Gestão, do Processo de Geração e Compartilhamento de Conhecimento, algo como "pedalar se aprende pedalando") 

Gostaria da sua opinião e dos demais pares sobre o assunto. Se porventura não compreendi corretamente sua proposta, desculpe-me e esclareça-me melhor, talvez com algum exemplo. 



_____________________________________________________________
RE: [discutir neste tópico os "... (em resposta à claudioprospero)vclaport 12/11/2009 9:00 AM

   



Olá, Claudio ! 

Acho que não me compreendeu direito não ... Aliás, mais que isso, seu comentário parece ter um tom de quem "compreendeu mal " minha proposta e levou para o lado pessoal. 

A minha sugestão era que, a cada tópico que você postou como seqüência deste fórum, que levantássemos questões envolvendo o item e a Gestão do Conhecimento, discutíssemos tanto prática quanto técnica e teoricamente o que mudou, ou pode mudar frente ao "paradigma" da GC, seria algo complementar ao que começamos a fazer no tópico de Metodologias Ágeis. 

Por exemplo, no tópico relacionado às Metodologias de Desenvolvimento, poderíamos comparar os modelos de MDS que existem ( inclusive ágil) e em que eles "atenderiam" à Espiral de Nonaka, às propostas de Prusak, a outras propostas como a daquele artigo que enviei, etc. Poderíamos refletir e discutir sobre o que é mais "vantajoso" para determinados contextos e para quem ( do ponto de vista de disseminação do conhecimento, etc.). 

Seja neste ou em outro fórum, penso que há muito a explorar aí. A sua iniciativa foi ótima, as comparações muito legais mas poderia ser o ponto de partida para várias discussões, entende ? 

Abraços a todos. 

Viviane

_______________________________________________
RE: [discutir neste tópico os "... (em resposta à vclaporti)
12/11/2009 6:32 PM

quote:

Acho que não me compreendeu direito não ... Aliás, mais que isso, seu comentário parece ter um tom de quem "compreendeu mal " minha proposta e levou para o lado pessoal.


Viviane, saudações. 

De modo algum me senti criticado por suas colocações, se for o significado de "levou para o lado pessoal". Pelo contrário: agradeço e me alegro com a participação e contribuição, principalmente as críticas, em relação à minhas opiniões, que me permitam corrigir meus erros de percepção / compreensão sobre os assuntos. 

Minha intenção com a explicação do uso dos fóruns foi uma simples explicação. Tentei demonstrar a perspectiva que orienta meu uso deste fórum. Não significando que considere minha forma melhor do que a de outros. O fórum é nosso, de todos que se dispuserem a participar, e é livre, dentro dos limites da civilidade, para várias perspectivas de análise dos assuntos. 

quote:

Por exemplo, no tópico relacionado às Metodologias de Desenvolvimento, poderíamos comparar os modelos de MDS que existem ( inclusive ágil) e em que eles "atenderiam" à Espiral de Nonaka, às propostas de Prusak, a outras propostas como a daquele artigo que enviei, etc. Poderíamos refletir e discutir sobre o que é mais "vantajoso" para determinados contextos e para quem ( do ponto de vista de disseminação do conhecimento, etc.). 

Seja neste ou em outro fórum, penso que há muito a explorar aí. A sua iniciativa foi ótima, as comparações muito legais mas poderia ser o ponto de partida para várias discussões, entende ?


Será muito gratificante se minhas postagens derem inicio à vários diálogos e análises sobre MDS e suas maiores ou menores aderências(?) às propostas dos autores citados por você. 

Qual sua opinião, e dos demais que nos leêm, sobre a forma para conduzir estes diálogos [a]? (Não gosto muito do termo discussão que, em minha opinião, pressupõe posições antagônicas, enquanto diálogos pressupõe uma troca de informações onde todos nós procuramos compreender nossos vários pontos de vista sobre o objeto de diálogo, por exemplo: MDS e GC(autor x)). 

[a] Exemplos (forma para conduzir estes diálogos): 

>> um tópico para cada MDS com respostas analisando sua aderência às propostas de um dado autor. 

>> um tópico para cada autor com respostas analisando como cada MDS contribui para as propostas do autor. 

Um abraço. 
Claudio 

___________________________________________________________
RE: [discutir neste tópico os "... (em resposta à claudioprospero)
vclaport 13/11/2009 9:44 AM

Que ótimo! Parece que agora nos entendemos .. .:) 

Uma sugestão seria vc até mesmo começar estes diálogos com a respectiva mensagem que vc postou neste fórum. Acho quase todas as postagens dariam um diálogo separado, pois há mta coisa pra comentar... 

Uma sugestão para abrir os diálogos seria : um sobre MDS, outro sobre construção e manutenção de sistemas, outro sobre requisitos, outra sobre modelagens utilizadas, outro sobre as fases de implementação e testes. outra referente à evolução de AE para AOO. 

Esta é só uma sugestão ... 

OBS: Só pra entender... Não disse e nem quis dizer que sua percepção estaria errada, apenas disse que podemos dialogar sobre estes temas, blz? 

Abs, 

Viviane


_____________________________________________________________
[GC em TIC] Contribuição das Metodo... (em resposta à vclaporti)
13/11/2009 5:55 PM

Viviane, obrigado. 

Seus comentários estimularam uma reflexão focada sobre algumas considerações, surgidas em conversas com colegas, sobre MDSI. Como resultado consegui estruturar o texto abaixo que submeto aos comentários dos pares. 

Abraços. 
Claudio 

Contribuição das Metodologias de Desenvolvimento de Sistemas de Informações (MDSI) para Gestão do Conhecimento (GC) em Tecnologia da Informação e Comunicação (TIC).

Definição de MDSI:

Conjunto de Processos e Padrões de Artefatos utilizados para documentar os resultados destes Processos. Ou seja, um Método de Trabalho (Processos) e um Padrão de Representação Simbólico (Artefatos) do Objeto deste trabalho, no caso, um Sistema de Informações. 

Uma dada MDSI (exemplos: Análise Estruturada, Essencial, Orientada a Objetos) é a parte da Engenharia de Software que padroniza os Processos e Artefatos para a criação ∕ aquisição, refinamento, armazenagem, transferência ∕ compartilhamento e utilização do conhecimento, sobre um determinado Sistema de Informações que esteja sendo desenvolvido. 

Exemplo de tópicos de Gestão do Conhecimento e de seu atendimento por uma MDSI genérica:

Criação ∕ Aquisição de Conhecimento:

• Levantamento de Requisitos do Sistema de Informações 

• Definição da Arquitetura do Sistema 

• Definição de Estruturas de Dados e Funcionalidades que atendam aos Requisitos do Sistema de Informações, de acordo com a Arquitetura definida 

Refinamento de Conhecimento:

• Definição de Estruturas de Dados e Funcionalidades que atendam aos Requisitos do Sistema de Informações, de acordo com a Arquitetura de Sistema definida. Este processo de refinamento ocorre ao longo dos Processos previstos pela MDSI, por exemplo, durante os levantamentos de informações, preenchimento e análise conjunta dos Artefatos (para detectar incoerências entre visões do Sistema de Informações, representadas em dois ou mais Artefatos), revisões, dos Artefatos, na equipe de desenvolvimento e / ou com os apoiadores / interessados (stakeholder) no Projeto de Desenvolvimento de Sistema de Informações em execução. 

Armazenagem de Conhecimento:

• Preenchimento dos Artefatos, ou Documentos, definidos pela MDSI. 

Transferência ∕ Compartilhamento de Conhecimento:

• Utilização dos Artefatos, Documentos, da versão anterior e da versão em desenvolvimento, do Sistema de Informações, como objeto de análise. 

• Revisões, dos Artefatos, na equipe de desenvolvimento e / ou com os apoiadores / interessados (stakeholder) no Projeto de Desenvolvimento de Sistema de Informações em execução. 

Utilização do conhecimento:

• Utilização dos Artefatos, Documentos, da versão anterior e da versão em desenvolvimento, do Sistema de Informações, como objeto de análise. 

• Revisões, dos Artefatos, na equipe de desenvolvimento e / ou com os interessados (stakholder) do Projeto de Desenvolvimento de Sistema em execução. Processo de validação do conhecimento produzido, representado (explicitado) nos Artefatos da MDSI. 

• Utilização dos Artefatos, Documentos, da versão em desenvolvimento, do Sistema de Informações, como evidências do progresso do Projeto de Desenvolvimento de Sistema em execução (Entregáveis, Eventos de Faturamento). 

• Utilização dos Artefatos, Documentos, da versão em desenvolvimento, do Sistema de Informações, como insumo para produção de materiais de Comunicação sobre o Sistema de Informações em Desenvolvimento.

__________________________________________________________
RE: Engenharia de software - segund... (em resposta à claudioprospero
claudioprospero 16/11/2009 1:58 PM

Engenharia de software

Origem: Wikipédia, a enciclopédia livre. (Consulta em 16/11/2009) 

O texto tem vários links não reproduzidos aqui

quote:

O artigo ou secção Engenharia de software orientado a objetos deverá ser fundido neste artigo ou secção. 

Se não concorda, discuta sobre esta fusão na página de discussão deste artigo. 
Este artigo ou secção contém uma lista de fontes ou uma única fonte no fim do texto, mas estas não são citadas no corpo do artigo (desde Junho de 2009)


Você pode melhorar este artigo introduzindo notas de rodapé citando as fontes, inserindo-as no corpo do texto quando necessário. 

quote:

A Wikipédia possui os portais: 
Portal das tecnologias de informação


Engenharia de software é uma área do conhecimento da computação voltada para a especificação, desenvolvimento e manutenção de sistemas de software aplicando tecnologias e práticas de gerência de projetos e outras disciplinas, objetivando organização, produtividade e qualidade. 

Atualmente, essas tecnologias e práticas englobam linguagens de programação, banco de dados, ferramentas, plataformas, bibliotecas, padrões, processos e a questão da Qualidade de Software. 

Os fundamentos científicos para a engenharia de software envolvem o uso de modelos abstratos e precisos que permitem ao engenheiro especificar, projetar, implementar e manter sistemas de software, avaliando e garantindo suas qualidades. Além disso, a engenharia de software deve oferecer mecanismos para se planejar e gerenciar o processo de desenvolvimento de um sistema de informação Sistema Computacional, pois ambos se confundem. 

Índice 
1 Definição 
2 Áreas de Conhecimento 
3 Processo de Software 
3.1 Modelos de Processo de Software 
3.2 Modelos de Maturidade 
4 Metodologias e Métodos 
4.1 Modelagem 
5 Ferramentas, Tecnologias e Práticas 
5.1 Ferramentas 
6 Gerência de Projetos 
6.1 Planejamento 
6.2 Análise de Requisitos 
6.3 Gestão 
7 Histórico 
8 ES no Presente e Tendências 
9 Referências 
10 Bibliografia 
11 Ligações externas 
12 Ver também 


Definição
Segundo Friedrich Ludwig Bauer, "Engenharia de Software é a criação e a utilização de sólidos princípios de engenharia a fim de obter software de maneira econômica, que seja confiável e que trabalhe eficientemente em máquinas reais". O próprio significado de engenharia já traz os conceitos de criação, construção, análise, desenvolvimento e manutenção. 

A Engenharia de Software se concentra nos aspectos práticos da produção de um sistema de software, enquanto a ciência da computação estuda os fundamentos teóricos dos aspectos computacionais. 

O termo foi criado na década de 1960 e utilizado oficialmente em 1968 na NATO Conference on Software Engineering (Conferência sobre Engenharia de Software da OTAN). Sua criação surgiu numa tentativa de contornar a crise do software e dar um tratamento de engenharia (mais sistemático e controlado) ao desenvolvimento de sistemas de software complexos. Um sistema de software complexo se caracteriza por um conjunto de componentes abstratos de software (estruturas de dados e algoritmos) encapsulados na forma de procedimentos, funções, módulos, objetos ou agentes e interconectados entre si, compondo a arquitetura do software, que deverão ser executados em sistemas computacionais. 

Os fundamentos científicos envolvem o uso de modelos abstratos e precisos que permitem ao engenheiro especificar, projetar, implementar e manter sistemas de software, avaliando e garantindo suas qualidades. Além disto, deve oferecer mecanismos para se planejar e gerenciar o processo de desenvolvimento. Empresas desenvolvedoras de software passaram a empregar esses conceitos sobretudo para orientar suas áreas de desenvolvimento, muitas delas organizadas sob a forma de Fábrica de Software. 

A Engenharia de Sistemas é uma área mais ampla por tratar de todos os aspectos de sistemas baseados em computadores, incluindo hardware e engenharia de processos além do software. 

Áreas de Conhecimento
Segundo o SWEBOK (Corpo de Conhecimento da Engenharia de Software), versão 2004, as áreas de conhecimento da Engenharia de Software são: 

> Requisitos (Requirements) de Software 
> Projeto (Design) de Software 
> Construção (Construction) de Software 
> Teste (Testing) de Software 
> Manutenção (Maintenance) de software 
> Gerência de Configuração de Software 
> Gerência de Engenharia de Software 
> Processos de Engenharia de Software 
> Ferramentas e Métodos de Engenharia de Software 
> Qualidade (Quality) de Software 

Conforme Pressman, a Engenharia de Software (ES) é uma tecnologia em camadas. E a base de todas essas camadas é o foco na qualidade do software desenvolvido. Portanto, inclusive do ponto de vista didático, é interessante estudarmos a ES em suas camadas de Processo, Métodos e Ferramentas. 

Processo de Software
Ver artigo principal: Processos de Engenharia de Software

Processo de software, ou processo de engenharia de software, é uma seqüência coerente de práticas que objetiva o desenvolvimento ou evolução de sistemas de software. Estas práticas englobam as atividades de especificação, projeto, implementação, testes e caracterizam-se pela interação de ferramentas, pessoas e métodos. 

SEE e PSEE são os ambientes voltados ao desenvolvimento e manutenção de processos. O projeto ExPSEE é uma continuação dos estudos de processos, principalmente do ambiente PSEE. 

Devido ao uso da palavra projeto em muitos contextos, por questões de clareza, há vezes em que se prefira usar o original em inglês design. 

Modelos de Processo de Software
Um modelo de processo de desenvolvimento de software, ou simplesmente modelo de processo, pode ser visto como uma representação, ou abstração dos objetos e atividades envolvidas no processo de software. Além disso, oferece uma forma mais abrangente e fácil de representar o gerenciamento de processo de software e consequentemente o progresso do projeto. 

Exemplos de alguns modelos de processo de software; 

> Modelos ciclo de vida 
> Sequencial ou Cascata (do inglês waterfall) - com fases distintas de especificação, projeto e desenvolvimento. 
> Desenvolvimento iterativo e incremental - desenvolvimento é iniciado com um subconjunto simples de Requisitos de Software e interativamente alcança evoluções subseqüentes das versões até o sistema todo estar implementado 
> Evolucional ou Prototipação - especificação, projeto e desenvolvimento de protótipos. 
> V-Model - Parecido com o modelo cascata, mas com uma organização melhor, que permite que se compare com outros modelos mais modernos. 
> Espiral - evolução através de vários ciclos completos de especificação, projeto e desenvolvimento. 
> Componentizado - reuso através de montagem de componentes já existentes. 
> Formal - implementação a partir de modelo matemático formal. 
> Ágil 
> RAD 
> Quarta geração 

Modelos de Maturidade
Os modelos de maturidade são um metamodelo de processo. Eles surgiram para avaliar a qualidade dos processos de software aplicados em uma organização (empresa ou instituição). O mais conhecido é o Capability Maturity Model Integration (CMMi), do Software Engineering Institute - SEI. 

O CMMi pode ser organizado através de duas formas, contínua e estagiada. Pelo modelo estagiado, mais tradicional e mantendo compatibilidade com o CMM, uma organização pode ter sua maturidade medida em 5 níveis: 

Nível 1 - Caótico; 
Nível 2 - Capacidade de repetir sucessos anteriores pelo acompanhamento de custos, cronogramas e funcionalidades; 
Nível 3 - O processo de software é bem definido, documentado e padronizado; 
Nível 4 - Realiza uma gerência quantitativa do processo de software e do produto; 
Nível 5 - Usa a informação quantitativa para melhorar continuamente e gerenciar o processo de software. 
O CMMi é um modelo de maturidade recentemente criado com o fim de agrupar as diferentes formas de utilização que foram dadas ao seu predecessor, o CMM. 

O (MPS.BR), ou Melhoria de Processos do Software Brasileiro, é simultaneamente um movimento para a melhoria e um modelo de qualidade de processo voltada para a realidade do mercado de pequenas e médias empresas de desenvolvimento de software no Brasil. 

Metodologias e Métodos
O termo metodologia é bastante controverso nas ciências em geral e na Engenharia de Software em particular. Muitos autores parecem tratar metodologia e método como sinônimos, porém seria mais adequado dizer que uma metodologia envolve princípios filosóficos que guiam uma gama de métodos que utilizam ferramentas e práticas diferenciadas para realizar algo.[1] 

Assim teríamos, por exemplo, a Metodologia Estruturada, na qual existem vários métodos, como Análise Estruturada e Projeto Estruturado (muitas vezes denominados SA/SD, e Análise Essencial). Tanto a Análise Estruturada quanto a Análise Essencial utilizam a ferramenta Diagrama de Fluxos de Dados para modelar o funcionamento do sistema. 

Metodologia Estruturada
> Análise Estruturada 
> Projeto Estruturado 
> Programação Estruturada 
> Análise Essencial 
> SADT 
> DFD - Diagrama de Fluxo de Dados 
> MER - Modelo de Entidades e Relacionamentos 

Metodologia Orientada a Objetos
> Orientação a Objetos 
> Rational Unified Process ( RUP ) 

Desenvolvimento ágil de software 
> Feature Driven Development ( FDD ) 
> Enterprise Unified Process (EUP) 
> Scrum (Scrum) 
> Crystal (Crystal Clear, Crystal Orange, Crystal Orange Web) 
> Programação extrema ( XP ) 

Outras Metodologias
> Microsoft Solution Framework ( MSF ) 

Modelagem
A abstração do sistema de software através de modelos que o descrevem é um poderoso instrumento para o entendimento e comunicação do produto final que será desenvolvido. 

A maior dificuldade nesta atividade está no equilíbrio (tradeoff) entre simplicidade (favorecendo a comunicação) e a complexidade (favorecendo a precisão) do modelo. 

Para a modelagem podemos citar 3 métodos: 

> Análise estruturada, criada por Gane & Searson; 
> Análise essencial, criada por Palmer & McMenamin e Ed. Yourdon; 
> UML criada por Grady Booch, Ivar Jacobson & Jaimes Rumbaugh (veja exemplos). 

Atualmente a modelagem mais recomendada, e sendo a mais comum, é a utilização da linguagem UML. 

Ferramentas, Tecnologias e Práticas
A engenharia de software aborda uma série de práticas e tecnologias, principalmente estudadas pela ciência da computação, enfocando seu impacto na produtividade e qualidade de software. 

Destacam-se o estudo de linguagem de programação, banco de dados e paradigmas de programação, como: 

> Programação estruturada 
> Programação funcional 
> Programação orientada a objetos 
> Componentes de Software 
> Programação orientada a aspecto 

Ferramentas
Outro ponto importante é o uso de ferramentas CASE (do inglês Computer-Aided Software Engineering). Essa classificação abrange toda ferramenta baseada em computadores que auxiliam atividades de engenharia de software, desde a análise de requisitos e modelagem até programação e testes. 

Os ambientes de desenvolvimento integrado (IDEs) têm maior destaque e suportam, entre outras coisas: 

> Editor 
> Compilador 
> Debug 
> Geração de código 
> Modelagem 
> Deploy 
> Testes não automatizados 
> Testes automatizados 
> Refatoração (Refatoring) 
> Gestão de Riscos nos projectos de Software 
> Uso da Prototipagem na Eng. de Requisitos 

Gerência de Projetos
A gerência de projetos se preocupa em entregar o sistema de software no prazo e de acordo com os requisitos estabelecidos, levando em conta sempre as limitações de orçamento e tempo. 

A gerência de projetos de software se caracteriza por tratar sobre um produto intangível, muito flexível e com processo de desenvolvimento com baixa padronização. 

Planejamento
O planejamento de um projeto de desenvolvimento de software inclui: 

> Análise Econômica de Sistemas de Informações 
> organização do projeto (incluindo equipes e responsabilidades) 
> estruturação das tarefas (do inglês WBS - work breakdown structure) 
> cronograma do projeto (do inglês project schedule) 
> análise e gestão de risco 
> estimativa de custos 

Essas atividades sofrem com dificuldades típicas de desenvolvimento de software. A produtividade não é linear em relação ao tamanho da equipe e o aumento de produtividade não é imediato devido aos custos de aprendizado de novos membros. A diminuição de qualidade para acelerar o desenvolvimento constantemente prejudica futuramente a produtividade. 

A estimativa de dificuldades e custos de desenvolvimentos são muito difíceis, além do surgimento de problemas técnicos. Esses fatores requerem uma análise de riscos cuidadosa. 

Além da própria identificação dos riscos, há que ter em conta a sua gestão. Seja evitando, seja resolvendo, os riscos necessitam ser identificados (estimando o seu impacto) e devem ser criados planos para resolução de problemas. 

Análise de Requisitos
As atividades de análise concentram-se na identificação, especificação e descrição dos requisitos do sistema de software. Em resumo, requisito é uma necessidade que o software deve cumprir. 

Há várias interpretações e classificações sobre requisitos, entre elas: 

> funcional 
> não funcional 
> de usuário 
> de sistema 

É comum que o cliente não saiba o que ele realmente deseja, que haja problemas na comunicação e ainda que haja mudança constante de requisitos. Todos esses fatores são recrudescidos pela intangibilidade sobre características de sistemas de software, principalmente sobre o custo de cada requisito. 


> Estudo de Viabilidade (Levantamento de Requisitos) 
A Engenharia de requisitos é um processo que envolve todas as atividades exigidas para criar e manter o documento de requisitos de sistema (SOMMERVILLE). Segundo RUMBAUGH, alguns analistas consideram a engenharia de Requisitos como um processo de aplicação de um método estrutura como a analise orientada a objetos. No entanto, a Engenharia de requisitos possui muito mais aspectos do que os que estão abordados por esses métodos. 

Abaixo um pequeno Processo de Engenharia de Requisitos (SOMMERVILLE). 

Estudo da viabilidade -> "Relatório de Viabilidade" Obtenção e Analise de Requisitos -> "Modelos de Sistema" Especificação de Requisitos -> "Requisitos de Usuário e de Sistema" Validação de Requisitos -> "Documento de Requisitos" 


O primeiro processo a ser realizado num Sistema novo é o Estudo de Viabilidade. Os resultados deste processo devem ser um relatório com as recomendações da viabilidade técnica ou não da continuidade no desenvolvimento do Sistema proposto. Basicamente um estudo de viabilidade, embora seja normalmente rápido, deverá abordar fundamentalmente as seguintes questões: 

O Sistema proposto contribui para os objetivos gerais da organização? O Sistema poderá ser implementado com as tecnologias dominadas pela equipe dentro das restrições de custo e de prazo? Ou precisa de treinamentos adicionais? O Sistema pode ser integrado, e é compatível com os outros sistemas já em operação? 

Gestão
> Pessoal 
> Produto 
> Processo 
> Projeto 
> Material 

Histórico
A Engenharia de Software (ES) surgiu em meados dos anos 1970 numa tentativa de contornar a crise do software e dar um tratamento de engenharia (mais sistemático e controlado) ao desenvolvimento de sistemas de software complexos. Um sistema de software complexo se caracteriza por um conjunto de componentes abstratos de software (estruturas de dados e algoritmos) encapsulados na forma de procedimentos, funções, módulos, objetos ou agentes interconectados entre si, compondo a arquitetura do software, que deverão ser executados em sistemas computacionais. 

ES no Presente e Tendências
Atualmente existe um destaque todo especial para a Engenharia de Software na Web. Também utilizado por Presmann a sigla WebE, é o processo usado para criar WebApps (aplicações baseadas na Web) de alta qualidade. Embora os princípios básicos da WebE sejam muito próximos da Engenharia de Software clássica, existem peculiaridades específicas e próprias. 

Com o advento do B2B (e-business) e do B2C (e-commerce), e ainda mais com aplicações para a Web 2.0, maior importância ficou sendo esse tipo de engenharia. Normalmente adotam no desenvolvimento a arquitetura MVC (Model-View-Controller). 

Referências
↑ Veja mais detalhes em Metodologia (engenharia de software) 

Bibliografia

MAGELA, Rogerio. Engenharia de Software Aplicada: Princípios (volume 1). Alta Books. 2006. 

MAGELA, Rogerio. Engenharia de Software Aplicada: Fundamentos (volume 2). Alta Books. 2006. 

MOLINARI, Leonardo. Gerência de Configuração - Técnicas e Práticas no Desenvolvimento do Software. Florianópolis: Visual Books, 2007. 85-7502-210-5 

PRESSMAN, Roger. Software Engineering: A Practitioner's Approach, 6ªedição, Mc Graw Hill, 2005. 

ANÁLISE ECONÔMICA DE SISTEMAS DE INFORMAÇÕES. (ISBN 978-85-909374-7-0) Editora Ixtlan. Autor : Sergio Kaminski. Comentário: Mostra todas as etapas de desenvolvimento do software, relacionando ao lucro,receita e custo. 

Ligações externas
Site dos alunos da Graduação em Engenharia de Software da Universidade Federal de Goiás - UFG 

Bacharelado em Engenharia de Software (Graduação em Engenharia de Software) Curso superior oferecido pelo Instituto de Informática --- Universidade Federal de Goiás. 

GPES Grupo de Pesquisa em Engenharia de Software do Departamento de Ciência da Computação da Universidade Federal de Minas Gerais. 

Praxis - Processo de desenvolvimento de software com enfoque educacional 

Software da gerência de OEE 

Podcasts bem interessantes (em português) sobre áreas de interesse da Engenharia de Software CMMI, MPS.BR, Scrum, Extreme Programming e Lean Software Development  

Revista Engenharia de Software Revista sobre Engenharia de Software em portugues 

Graduação em Engenharia de Software na Universidade de Brasilia - FGANovo Campus da Universidade de Brasília 

Ver também
quote:

A Wikipédia possui o Portal de engenharia


> Desenvolvimento de software 
> Qualidade de software 
> Software Engineering Body of Knowledge 
> Análise Econômica de Sistemas de Informações 
> Matriz CRUD 

quote:

Obtido em "http://pt.wikipedia.org/wiki/Engenharia_de_software" 
Categoria: Engenharia de software
__________________________________________________________
RE: [GC em TIC] Contribuição das Me... (em resposta à claudioprospero)
vclaport 16/11/2009 2:03 PM

Só para começar este diálogo, seguem nesta mensagem duas perguntas que venho fazendo na empresa onde trabalho, sempre que eles decidem falar sobre metodologia e conhecimento. 

Sabemos da grande importância de se ter e seguir uma metodologia, mas a pergunta é : A utilização de artefatos garante a aquisição, o armazenamento e disseminação do conhecimento? E o fato de se ter um processo definido, isso garante a disseminação do conhecimento entre os participantes? 

Abraços 

Viviane