quinta-feira, 18 de novembro de 2010

Discussão: Experimentação em Ciência da Computação é possível?

Olá pessoal. Já faz mais ou menos um mês que fiz uma postagem a respeito da discussão Computação e a Ciência. Achei muito legal a forma como a discussão foi muito bem aceita por vocês leitores. Nessa postagem eu tinha explicado a origem daquele texto e dito que haveriam mais 11 postagens com discussões a respeito de engenharia de software e técnicas de pesquisa em computação, sendo que eu tentaria manter uma periodicidade se possível semanal. Infelizmente devido aos meus compromissos com o mestrado, não pude dar seqüência a essas postagens com a periodicidade desejada, entretanto hoje estou dando continuidade a essa idéia postando a discussão Experimentação em Ciência da Computação é possível?

Espero que façam bom proveito da leitura e também comentem como na discussão anterior, lembrando que para os mais interessados em se aprofundar no assunto, vale a pena pelo menos passar o olho pelas referências bibliográficas.

Universidade Federal de Viçosa
Departamento de Informática
Mestrado em Ciência da Computação
INF 600 - Técnicas de Pesquisa em Ciência da Computação
Resumo nº. 02


Os artigos estudados referem-se à experimentação no âmbito da Ciência da Computação, porém o paradigma experimental é utilizado é vários campos do conhecimento para gerar modelos a partir de estudos empíricos.

Estudos empíricos são realizados por observação de um dado campo, coletando e analisando dados para entender melhor um problema específico, gerando hipóteses para solucionar o problema e validando as mesmas a partir de experimentos para então gerar modelos que podem ser reproduzidos e aperfeiçoados futuramente. É seguindo esse ciclo que o conhecimento avança.

Aplicar experimentação no processo de desenvolvimento de software sem dúvida não é algo trivial. Nesse processo existe uma grande quantidade de variáveis envolvidas. Algumas delas são as técnicas de programação, metodologias e métodos, paradigmas e linguagens de programação utilizadas, características do ambiente de trabalho e principalmente o fator humano (programadores, analistas, testadores... etc.). Considerando tantas variáveis, torna-se muito complicado a geração de um modelo genérico que atenda qualquer processo de software.

Para realização de pesquisas experimentais em engenharia de software, é de fundamental importância que ela aconteça analisando problemas reais e não realizando meras simulações. Para isso, é essencial que as pesquisas aconteçam em laboratórios de P&D (Pesquisa e Desenvolvimento) da própria indústria. Os autores dos artigos estudados dizem que a relação entre a academia e a indústria em pesquisas experimentais de engenharia de software é simbiótica, ou seja, a indústria necessita de melhorias no seu processo de desenvolvimento de software para minimizar erros e maximizar tempo de produção e qualidade do produto, enquanto que pesquisadores necessitam de dados reais que possam ser analisados e um ambiente propício para fazer seus experimentos, validar suas hipóteses e gerar assim os modelos de conhecimento utilizados pela indústria.

Embora um dependa do outro, não é fácil conseguir espaço para pesquisar na indústria. Inicialmente a tendência é o profissional de desenvolvimento de software achar que a presença do pesquisador no seu ambiente de trabalho será prejudicial, sendo assim, ele tende a não colaborar devidamente com a pesquisa. De fato, por envolver questões culturais e por influência dos experimentos, algumas mudanças na forma de trabalhar podem ocorrer, e devido à curva de aprendizagem, essas mudanças inicialmente tendem a causar prejuízos no processo de desenvolvimento, porém traz benefícios futuros.

Objetos de pesquisa não são problema para Victor Basili, haja vista que todos seus experimentos citados nos artigos estudados foram realizados no NASA Goddard Software Engineering Laboratory (SEL), que é um laboratório de pesquisa no qual ele comanda.

No SEL é utilizado o conceito de “Fábrica de Experiência” para gerar modelos a partir de pesquisas em engenharia de software experimental. Para tal, dados são coletados e interpretados com a abordagem Goal Question Metric (GQM) e a partir da aplicação do paradigma da melhoria da qualidade (QIP), modelos empacotados anteriormente são reutilizados e evoluídos para construir novos sistemas.

Com essa forma de unir pesquisa e desenvolvimento, o SEL conseguiu aumentar bastante o nível de reutilização de código, diminuir consideravelmente os custos de desenvolvimento e aumentar em muito as funcionalidades dos softwares lá desenvolvidos.

Embora os resultados apresentados no SEL sejam muito animadores, eles são fruto de muitos anos de estudo e experimentação. Além disso, todos esses experimentos foram realizados em projetos do próprio laboratório, portanto não é possível afirmar com base nas informações contidas nos artigos estudados que esses modelos gerados pelo SEL seriam eficientes quando aplicados em outro local que envolva profissionais diferentes, com conhecimentos e culturas diversas, trabalhando em um ambiente completamente diferente.

Nos artigos estudados de sua autoria, Victor Basili reconhece que para gerar modelos básicos e métricas de negócio e científicas, é necessário que existam laboratórios de níveis diferentes realizando experimentos em engenharia de software.

Após a leitura dos artigos, ficou claro que pesquisas experimentais em ciência da computação, mais especificamente em engenharia de software, não são muito comuns por envolverem vários fatores limitantes. Geralmente o que vemos são pesquisas voltadas para ambientes específicos, porém também é possível alcançar resultados generalistas, como ficou provado em pelo autor em [5] ao descrever a pesquisa experimental que resultou em um modelo genérico que auxilia na prevenção e correção de erros no desenvolvimento de software de forma eficiente.

Referências

[1] Basili, V. R. “The Experimental Paradigm in Software Engineering”. In H. D. Rombach, V. Basili, R. Selby, editors, Experimental Software Engineering Issues: Critical Assessment and Future Directions, Lecture Notes in Computer Science #706, Springer-Verlag, August 1993.

[2] Basili, V. R. and Zelkowitz, M. V. 2007. Empirical studies to build a science of computer science. Commun. ACM 50, 11 (Nov. 2007), 33-37. DOI= http://doi.acm.org/10.1145/1297797.1297819

[3] Basili, V. R. The Role of Experimentation in Software Engineering: Past, Current, and Future, Proceedings of the 18th International Conference on Software Engineering, Berlin, Germany, March 25-29, pp. 442-449, 1996.

[4] Dror G. Feitelson. Experimental Computer Science: The Need for a Cultural Change. Disponível em: < http://www.cs.huji.ac.il/∼feit/papers/exp05.pdf > Acesso em 05 set. 2010.

[5] Weyuker, E. J. 2007. Software engineering research: from cradle to grave. In Proceedings of the the 6th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering (Dubrovnik, Croatia, September 03 - 07, 2007). ESEC-FSE '07. ACM, New York, NY, 305-311. DOI= http://doi.acm.org/10.1145/1287624.1287667

[6] Marcos, E. 2005. Software engineering research versus software development. SIGSOFT Softw. Eng. Notes 30, 4 (Jul. 2005), 1-7. DOI= http://doi.acm.org/10.1145/1082983.1083005

Nenhum comentário: