Modelando uma base de conhecimento (em Prolog) para o desenvolvimento de um processo de software

Podemos armazenar de maneira estruturada as informações relacionadas a um processo de software? É possível criar um mecanismo que me possibilite direcionar a criação deste tipo de processo?

A meu ver o processo de software é caracterizado por meio de um conjunto de atividades bem definidas e documentadas que quando aplicadas, sistematicamente, garantem certo grau de qualidade na confecção do produto. Além do conjunto de atividades, o processo possui outros atributos como: matéria prima, mão de obra e recursos. Tais atributos são considerados os insumos do processo de produção. Salienta-se também que o processo deve possuir o conceito de retro-alimentação com o objetivo de garantir o caráter evolutivo do mesmo.

Partindo das definições delineadas no parágrafo anterior, iniciei minha resposta as questões que norteiam este texto.

Em 2005, fui convidado por uma empresa da grande São Paulo a desenvolver um processo de produção de software e aplicá-lo em seus projetos. A gerência me fez a seguinte observação: “Gostaríamos que nossos colaboradores desenvolvessem todo processo produtivo. Você, José Augusto, faria o papel de tutor de nosso pessoal”. Durante o tempo que permaneci na empresa tracei as seguintes estratégias:

1. Desenvolvi um treinamento rápido sobre o processo de software junto aos colaboradores.

2. Desenvolvi um guia para a confecção de um processo de software. Procurei explicitar todo conhecimento compartilhado com os colaboradores, para isto desenvolvemos uma base de regras. Motivado pela facilidade de inserção, manutenção e recuperação do conhecimento, optei por utilizar a linguagem Prolog (http://www.swi-prolog.org/download.html) no mapeamento da regras. Gerei vários predicados, neste post apresento alguns deles:

fabrica_codigo(atividade,equalizacao).

fabrica_codigo(atividade,implementacao).

fabrica_codigo(atividade,teste_unitario).

fabrica_codigo(atividade,teste_integrado).

equalizacao(tarefa,receber_os).

equalizacao(tarefa,verificar_completude).

equalizacao(tarefa,verificar_corretude).

equalizacao(tarefa,preencher_historico_equalizacao).

equalizacao(artefato,os).

equalizacao(artefato,historico_equalizacao).

equalizacao(artefato,planilha_pontos).

equalizacao(artefato,interface).

os(item,nome_projeto).

os(item,codigo_os).

os(item,data_os).

os(item,responsaveis).

os(item,data_devolucao).

os(item,caso_uso).

os(item,diagrama_classe).

os(item,diagrama_sequecia).

os(item,estimativa_horas).

os(item,estimativa_tamanho).

3. Treinei os colaboradores em Prolog. Habilidades relacionadas à recuperação das informações e a linguagem utilizada para a manutenção da base de conhecimento foram trabalhadas. Tempo de duração: 2 horas (apostila de Prolog utilizada no treinamento).

4. De posse da base de conhecimento, os colaboradores começaram a desenvolver o processo de produção de software. Apresento (por meio da figura abaixo) algumas consultas delineadas pelos colaboradores que, posteriormente, derivaram no processo em questão.

consulta a base de conhecimento

consulta a base de conhecimento

 

Ao analisar a figura é possível verificar que uma fábrica de código possui as atividades de equalização, implementação, teste unitário e teste integrado. A atividade de equalização possui os seguintes artefatos: ordem de serviço, histórico da equalização, planilha de pontos (artefato utilizado para delinear prazo e esforço de produção), etc. Uma ordem de serviço deve possuir itens como nome do projeto, código da ordem de serviço, etc.

Com o conhecimento sobre o processo explicitado e armazenado, acredito que atendi a observação feita pela gerência. Questões sobre o seqüenciamento das atividades, construção dos artefatos, definição ou escolhas de padrões foram delimitadas pelos colaboradores. Fiquei na retaguarda para sanar as dúvidas que foram surgindo.

O mais interessante nesta experiência foi verificar que a configuração do processo não foi imposta, e sim adaptada a realidade de empresa. A base funcionou basicamente como um guia (algo semelhante a um meta-processo). Grande parte do conhecimento sobre processo de produção foi explicitado e armazenado na base.

Lembre-se que existem diferentes formas para explicitar conhecimento sobre processo de software. Neste caso, eu utilizei Prolog. Seria interessante desenvolver novas experiências com outros tipos de representação (mapas mentais, por exemplo), estabelecer um conjunto de critérios e, posteriormente, realizar comparações.

Enfim, nunca imaginei, em minha pequenez, que conseguiria relacionar duas áreas tão distintas, uma linguagem utilizada para representar conhecimento (Prolog) dento do contexto da inteligência artificial e a engenharia de software.

José Augusto Fabri

One Response to “Modelando uma base de conhecimento (em Prolog) para o desenvolvimento de um processo de software”

  1. Hector Rodriguez Says:

    Acredito que uma base de conhecimento possa ser iniciada do lado mais hard (baseada em bases de dados e BPM); ou alterntivamente, do lado mais conceitual (soft-mapas mentais / mapas conceituais). Seja qual for o caso, tem como objetivo ultimo a gestao desse conhecimento (capturar-indexar-distribuir-achar novas correlacoes). É possivel fazer isso? SIM. Os meios e as formas de conter esses conhecimentos podem ser de diversa natureza, desde um libro de registro de atos/atividades/ocorrencias, até os supermanuais corporativos; e, com diversas combinacoes. De fato, a grande preocupacao nas empresas atuais é a perda de conhecimentos formais e informais; obrigando-as a recomecar tudo em cada emprendimento. Neste sentido existem algumas experiencias valiosas em organizacoes como o Project Management Institute (PMI), que conseguiu desenvolver seu PMBoK (Project Management Base of Knowledge), que resulta ser um todo “orgánico” (evolui) que consegue reunir boas praticas consolidadas. Valería a pena tratar de comprender a evolucao dessa Base de conhecimento, buscando tirar dela algumas experiencias.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: