Páginas

Mostrando postagens com marcador Devaneios. Mostrar todas as postagens
Mostrando postagens com marcador Devaneios. Mostrar todas as postagens

segunda-feira, 7 de novembro de 2011

Fatos e falácias de Engenharia de Software - Testes de Software

Bom pessoal, após mais uma curta temporada sem atualizações por aqui, estou retornando para dar continuidade a série de discussões a respeito de pontos importantes da engenharia de software. O tema abordado na discussão dessa postagem divide opiniões e talvez traga comentários interessantes a respeito de experiências pessoais. Pois bem, hoje falaremos a respeito de Testes de Software.

Essa é a penúltima postagem da série inicial de discussões planejada, sendo assim aproveitem pois está acabando. =)


Universidade Federal de Viçosa
Departamento de Informática
Mestrado em Ciência da Computação
INF 622 - Engenharia de Software
Resumo nº 05

Fatos
31 - Remoção de erro é a fase mais demorada do ciclo de vida.
32 - Software que um típico programador acredita ser testado várias vezes, tinha apenas cerca de 55 a 60% dos caminhos de sua lógica executada. Utilizar o suporte automatizado, como os analisadores de cobertura, pode aumentar para cerca de 85 a 90%. É quase impossível testar 100% dos caminhos lógicos de software.
33 - Mesmo se uma cobertura de 100% de teste fosse possível, isso não seria um critério suficiente para o teste. Cerca de 35% de defeitos de software emerge da falta de caminhos lógicos, e outros 40% da execução de uma combinação única de caminhos lógicos. Eles não vão ser apanhados por uma cobertura de 100%.
34 - É quase impossível fazer um bom trabalho de remoção de erro sem ferramentas. Depuradores são comumente utilizados, mas outros, como os analisadores de cobertura, não são.

Discussão
Os fatos estudados analisam os principais problemas relacionados aos testes de software. O fato 31 trata do tempo demandado para a remoção de erros de software. Muitos autores chamam essa fase do processo de desenvolvimento de software por nomes diferentes. Os nomes mais comuns de se ver são Teste, Verificação e Validação. Glass prefere chamar essa fase pelo nome de Remoção de erros, pois considera esse o nome que melhor descreve a atividade.

Segundo Glass [1], a fase de remoção de erros de software é a que gasta mais tempo em todo o processo, podendo gastar até o dobro do tempo gasto em cada uma das outras fases do processo de software (Análise de requisitos, projeto e implementação). Isso geralmente causa grandes surpresas aos desenvolvedores, pois de certa maneira, é possível mensurar o tempo demandado em um projeto para recolher requisitos, projetá-los e codificá-los, porém o tempo gasto na remoção de erros de software é muito relativo, pois este vai depender da qualidade do trabalho realizado nas outras fases do processo. Portanto, quanto pior forem executadas as fases anteriores, maior será o tempo demandado na remoção de erros.

Uma maneira eficiente para diminuir o tempo demandado para remoção de erros de software é enfatizar mais a essência do problema a ser resolvido, ou seja, quanto mais atenção for dada para a análise dos requisitos e o projeto, menor será o tempo gasto com remoção de erros, pois erros de codificação são muito mais simples e menos custosos de serem resolvidos do que erros de requisitos.

Considerando que o desenvolvimento de software seja iterativo, a remoção de erros é conseqüentemente feita também de forma iterativa durante todo o processo.

O fato 32 é relacionado à cobertura dos testes de software. Como sua própria descrição já fala, é praticamente impossível testar 100% de um software. Glass julga como ingênuas as pessoas que acreditam nessa possibilidade.

O autor classifica as abordagens de testes de software em quatro diferentes tipos:
  • Testes orientados a requisitos;
  • Testes orientados a estruturas;
  • Testes orientados a estatísticas;
  • Testes orientados a riscos;
Os dados citados pelo autor são baseados em testes estruturais, que são aqueles que verificam os caminhos lógicos de programação. Segundo Glass [1], os testes estruturais de software normalmente cobrem apenas de 55 a 60% dos caminhos lógicos de um software. Com o auxílio de analisadores automáticos de cobertura de testes fica mais fácil identificar as partes do software que ainda não foram abrangidas pelos testes, sendo assim a utilização dos mesmos aumentam a cobertura dos testes para entorno de 85 a 90% dos caminhos lógicos. É praticamente impossível atingir aos 100% de cobertura devido às obscuridades advindas da natureza do software.

É essencial a realização de testes em software utilizando as abordagens que forem relevantes ao projeto em execução, porém dificilmente as baterias de testes na qual os softwares são submetidos irão retirar todos os seus erros.

O fato 33 mostra que mesmo que fosse possível realizar testes de software com 100% de cobertura dos caminhos lógicos, isso ainda não daria garantia da criação de um software livre de erros.

Esse fato é gerado a partir da pesquisa pessoal de Glass. Ao analisar uma série de relatório de erros na indústria aeroespacial, Glass chegou à conclusão de que 35% dos erros encontrados na base de dados analisada eram erros de omissão de lógica, ou seja, requisitos que possivelmente não foram levantados e conseqüentemente não foram implementados. Esse tipo de erro não seria identificado em testes estruturais, pois esse tipo de teste é feito baseando-se na especificação do software.

Outro tipo de erro que não seria identificado mesmo com a execução de testes com 100% de cobertura seriam os erros de análise combinatória. Esses são os erros ocasionados pela combinação de caminhos lógicos. Geralmente os testes estruturais testam os caminhos lógicos separadamente, mas não a combinação deles. Esse tipo de erro de analise combinatória representaram 40% dos erros encontrados por Glass na base de dados analisada.

Em suma, se fosse possível realizar testes de software com 100% de cobertura dos caminhos lógicos, ainda assim, apenas 25% dos erros de software seriam detectados com certeza.

O fato 34 diz respeito à falta de uso de ferramentas para as fases de back-end do desenvolvimento de software. Ao contrário das fases de front-end, onde um grande número de ferramentas para análise e projeto são difundidas e usadas, nas fases de back-end a maioria dos desenvolvedores utiliza apenas ferramentas depuradoras, ignorando analisadores automáticos de cobertura de testes e outras ferramentas.

Há vários fatores que contribuem para a falta de atenção despendida pelos desenvolvedores às ferramentas de back-end. Dentre esses fatores, a super atenção dada às ferramentas de front-end é um dos motivos, pois ao atacar a essência do software no front-end e codificarem seguindo padrões, alguns desenvolvedores acreditam ser desnecessário despender atenção às fases de testes e manutenção.

Em estudo realizado por Zhao e Elhaum [4], foi demonstrado que em apenas 39,6% dos projetos de software-livre, alguma ferramenta de teste foi utilizada e a grande maioria dessas ferramentas eram depuradores. Muito provavelmente esses dados refletem de forma semelhante à situação de projetos de software de uma forma geral, não apenas de software-livre. Porém o motivo principal desse acontecimento em projetos de software livre é a crença na “Lei de Linus”, descrita por Raymond [5] da seguinte maneira: “Dado uma base grande o suficiente de beta-testers e co-desenvolvedores, praticamente todo problema será caracterizado rapidamente e a solução será óbvia para alguém”.

Isso pode ser uma verdade em projetos de software livre detentores de comunidades ativas, entretanto não tem como os desenvolvedores garantirem a existência de uma grande quantidade de pessoas interessadas em colaborar com a evolução do software para fazer assim valer a Lei de Linus. Dessa maneira é muito perigosa essa falta de atenção à utilização de ferramentas nas fases de back-end do desenvolvimento.

Controvérsia
No fato 31 a maior controvérsia está relacionada à descrença de que a remoção de erros gaste tanto tempo do processo de software. Porém, segundo Glass [1], em média 20% do tempo do processo é gasto com a análise de requisitos, outros 20% projetando, mais 20% codificando e impressionantes 40% removendo erros. O dobro gasto em cada uma das outras fases.

Considerando que desenvolver software é uma tarefa complexa e propensa a erros, é muito improvável que surjam técnicas para a construção de software que o livre de erros a serem removidos nos testes, porém fica claro pelos estudos de Glass que ao focar mais atenções na essência do problema a ser resolvido, o número de erros cai consideravelmente.

No fato 32, a maior controvérsia está relacionada à noção de softwares isentos de erros. Muitos especialistas consideram ser possível isso ser feito, embora na prática isso só aconteça geralmente para software de pouca complexidade. O objetivo ideal para projetos de software complexos é realização de testes que garantam que o software esteja isento de erros críticos.

Muitas equipes não dão a atenção adequada para a fase de testes de software e a grande maioria não utiliza nenhuma ferramenta que analise automaticamente a cobertura dos testes já realizados na estrutura. Essa falta de motivação para utilizar ferramentas que automatizem a analise de cobertura geralmente ocorre por não acharem viável investir recursos para isso ou até mesmo pelo desconhecimento dessas ferramentas.

O Emma é uma ferramenta open source que ajuda nesta tarefa, fazendo a análise da cobertura de testes de um projeto Java e gerando um relatório em formato texto ou HTML. Esse relatório representa um feedback importante para os desenvolvedores, pois indica quais áreas do projeto ainda não estão sendo cobertas por testes automatizados e portanto devem ser tratadas prioritariamente [2].

A figura 1 apresenta um exemplo de relatório gerado pela ferramenta Emma. Esse relatório informa a porcentagem de cobertura de teste em cada parte da estrutura de um software. 
Figura 1: Relatório HTML para cobertura de teste no Apache Velocity 1.4
Para maiores informações sobre a ferramenta Emma, consulte o site oficial da mesma em [3].

A controvérsia ao fato 33 é referente ao desconhecimento da informação dada pelo mesmo. A pesquisa realizada por Glass que o proporcionou chegar a tal conclusão não foi devidamente divulgada, sendo assim muitos pesquisadores discordaram desse fato por desconhecerem a pesquisa.

Não existe bala de prata capaz de proporcionar o desenvolvimento de um software isento de erros, porém a combinação das abordagens de testes, juntamente com uma maior atenção demandada à essência do software, proporciona softwares com o menor número de erros.

Existem poucas controvérsias a respeito do fato 34. Talvez o motivo disso não seja relacionado à concordância ou discordância com o fato, mas sim com a falta de interesse nele.

Referências
[1] Glass, Robert L. 1992. Software Quality Building. Englewood Cliffs, NJ: Prentice-Hall. Englewood Cliffs, NJ: Prentice-Hall.

[2] TELES, V. M. Cobertura de Testes na Prática. Disponível em : http://www.devmedia.com.br/articles/viewcomp.asp?comp=8973. Acesso em 22 Maio. 2010.

[3] EMMA: a free Java code coverage tool. Disponível em: http://emma.sourceforge.net/index.html. Acesso em 22 Maio. 2010.

[4] Zhao, Luyin e Elbaum Sebastian. "A Survey on Quality Related Activities in Open Source." Software Engineering Notes, May. 2000.

[5] RAYMOND, E.S. The Cathedral and Bazaar. O’Reilly Books, 1999.

sábado, 10 de setembro de 2011

Fatos e falácias de Engenharia de Software - Requisitos de Software

Pra compensar o tempo sem muitas novidades por aqui, vamos logo retomar às discussões sobre pontos chave da Engenharia de Software.

Depois de abordar tópicos importantes como Reutilização, Estimativas e Profissionais, discutiremos nessa postagem sobre Requisitos de Software, nada mais nada menos que a espinha dorsal de todo o processo de desenvolvimento!

Para quem já vem acompanhando as discussões anteriores relacionadas a Engenharia de Software, acredito que aos poucos está ficando mais claro a relação existente entre os temas discutidos. Isso proporcionará uma visão crítica muito importante sobre todo o processo de desenvolvimento de software.

Universidade Federal de Viçosa
Departamento de Informática
Mestrado em Ciência da Computação
INF 622 - Engenharia de Software
Resumo nº. 04

Fatos
23 - Um dos dois motivos mais comuns de projetos saírem de controle são os requisitos instáveis.
24 - Requisitos errados são mais caros para reparar quando encontrados durante a produção, porém são mais baratos para corrigir no início do desenvolvimento.
25 - Requisitos ausentes são os erros de requisitos mais difíceis de corrigir.

Discussão
Os fatos estudados estão relacionados a problemas com requisitos de software e os impactos causados por eles no andamento de um projeto.

O fato 23 trata especificamente de requisitos instáveis. Segundo Glass [1], requisitos instáveis, juntamente com estimativas pobres e muito otimistas, são as principais causas dos projetos de software saírem de controle. Os problemas causados por estimativas falhas não são diretamente relacionados ao desenvolvimento de software, mas sim à gerência. Já os problemas ocasionados por requisitos instáveis são de desenvolvimento de software e são mais complexos de serem resolvidos que os outros.

Grande parte dos problemas causados por requisitos instáveis são gerados por clientes e usuários não entenderem o problema real que desejam solucionar com o software a ser desenvolvido.

Comparada a outras engenharias, como a civil, por exemplo, a engenharia de software é um tópico relativamente novo, portanto é normal que tantos problemas por requisitos instáveis existam, haja vista que muitas das soluções propostas por software ainda são inéditas, e quando esse tipo de solução está em desenvolvimento, o fato de não ter um padrão de comparação com algo já feito pra mesma finalidade, acaba gerando grandes incertezas.

Muitas soluções para requisitos instáveis foram tentadas ao decorrer dos anos. Inicialmente achava-se que o congelamento dos requisitos resolveria tais problemas e assim surgiu a proposta de especificação de software a partir de notações matemáticas, os chamados métodos formais. Segundo Sommerville [2], métodos formais oferecem a possibilidade de analisar através do emprego de cálculos matemáticos a consistência e provar que a implementação de um software corresponde à especificação.

Na prática observou-se que o congelamento dos requisitos, assim como a utilização de métodos formais de especificação de software não são eficientes para resolver o problema de requisitos instáveis, pelo contrário, eles podem atrapalhar e muito devido ao engessamento do processo.

Com o tempo ficou claro que para lidar com requisitos instáveis, o projeto teria que ficar em constante refinamento em busca da desejada estabilidade conceitual. Para isso o uso de protótipos da solução é uma boa prática, pois nem sempre o cliente sabe o que quer, mas geralmente sabe o que não quer. Nesse sentido, todo contato do cliente com novos protótipos gera o refinamento dos requisitos já levantados, pois o feedback do cliente com relação ao protótipo serve para direcionar a equipe de desenvolvimento a um caminho cada vez mais próximo do ideal.

Muitas técnicas surgiram com intuito de inserir cada vez mais os usuários no processo de desenvolvimento do software, especialmente no levantamento de requisitos. JAD (Joint Application Development) é uma dessas técnicas. Ela foi criada pela IBM na década de 70 e propõe que clientes/usuários e desenvolvedores trabalhem juntos em reuniões com objetivo de identificar o problema a ser resolvido pelo software, propor elementos de solução, negociar diferentes abordagens e por fim, especificar um conjunto preliminar de requisitos de solução [3]. A metodologia XP (eXtreme Programming) também prevê dentre suas várias propostas, uma interação semelhante entre cliente e desenvolvedor com o intuito de entender melhor o problema e levantar requisitos mais refinados, porém ambas as propostas devem ser muito bem aplicadas para atingirem sucesso, pois de nada adianta se o usuário/cliente escalado para participar do processo não tiver pontos de vista equivalentes ao da maioria dos clientes e usuários potenciais do software.

O desenvolvimento de software baseado em processos auxilia muito na gerência de projetos de software com requisitos instáveis, pois para lidar com tantas requisições de mudanças, é muito importante a gestão ter um processo de gerenciamento de mudanças bem definido. Dessa forma, toda requisição de mudança passa a ser analisada detalhadamente, observando todos os impactos que ela causaria no projeto e nível de custos, tempo e riscos. Após essa análise, a gerência pode tomar a decisão precisa juntamente com o cliente, avaliando se as mudanças solicitadas são viáveis ou não, evitando assim que o projeto saia de controle por uma decisão imprópria.

O fato 24 é um senso comum entre todos envolvidos com projetos, sejam eles de software ou não. Quanto mais cedo requisitos errados forem identificados, menos custoso será para corrigi-los. A correção de erros durante o desenvolvimento pode ser até 100 vezes mais custosa do que as correções feitas nas fases iniciais do processo [4]. A Figura 1, presente em [5], representa exatamente a ordem de crescimento dos custos para correções ao decorrer do progresso de um projeto.

Figura 1: Custos para correção de erros.

Para diminuir os custos com as mudanças e correções, o ideal é refinar os requisitos do projeto o quanto antes possível. Para isso, várias técnicas podem ser usadas e o feedback do cliente nas fases iniciais é de extrema importância para evitar que problemas sejam detectados em fases muito avançadas da produção acarretando em custos e riscos elevados.

O fato 25 trata de algo interessante para refletir, que são os requisitos omitidos de software. Segundo o autor, um dos erros de requisitos mais difíceis de serem corrigidos é o de requisitos ausentes. Existem diversas técnicas de testes dos requisitos para identificar se eles correspondem ao que se espera do software, porém, um requisito não levantado, conseqüentemente também não será testado, porque teoricamente ele não existe.

Requisitos são levantados de diversas formas, mas de forma geral, o processo de levantamento de requisitos se baseia em interações de pessoas e análises de documentos. Devido à alta subjetividade dessas atividades, o risco de que algum requisito do cliente seja desconsiderado no levantamento está sempre presente.

Segundo o estudo realizado pelo autor, 30% dos erros de software são oriundos de lógicas omitidas de programação. Esse tipo de omissão é geralmente causada por requisitos não levantados. Testes geralmente baseiam-se em requisitos presentes no projeto, portanto, esses erros acabam passando despercebidos nos testes. A dificuldade de identificação desse tipo de erro acaba tornando-os difíceis de serem corrigidos.

Para tornar a análise de requisitos mais eficiente, o levantamento deve ser feito de forma iterativa, pois dessa forma a idéia sobre o problema principal a ser resolvido ficará mais madura e conseqüentemente os analistas passam a ter uma visão mais crítica sobre o problema, identificando os requisitos mais facilmente assim. A interação entre os analistas também é muito importante, pois a troca de informações entre diferentes pontos de vista pode também aumentar essa visão crítica de todos envolvidos.

Controvérsia
Existem poucas controvérsias sobre o fato 23. Antigamente a controvérsia principal a ele era com relação ao congelamento dos requisitos. Hoje é raro encontrar quem discorde de que o congelamento de requisitos é sinônimo de falhas no projeto.

Atualmente a principal controvérsia ao fato 23 gira em torno da utilização de métodos formais para especificação de software. Na prática eles são pouco utilizados pelos profissionais de software, porém a academia ainda defende a “eficiência” de sua aplicação.

Como o fato 24 é um consenso geral, praticamente não existem controvérsias ao seu respeito. As únicas divergências ao fato 24 são relacionadas às formas de evitar que erros demorem a ser detectados. Existem diversas maneiras de fazer isso, porém dependendo da função que determinada pessoa exerce no processo de desenvolvimento, elas tendem a optar por métodos específicos relacionados a tal função.

A dificuldade para identificar e distinguir entre os tipos de erros cometidos acaba gerando poucas controvérsias sobre o fato 25.

Referências
[1] Glass, R. Facts and Fallacies of Software Engineering. Addison Wesley. October 2002.

[2] SOMMERVILLE, I. Software Engineering, 5th edn, Addison-Wesley Publishing Company, Wokingham England. 1996.

[3] GUIMARÃES, E. C. F. O uso da técnica JAD - Joint Application Design para levantamento de requisites. Disponível em: . Acesso em 7 Maio. 2010.

[4] Boehm, Barry, and Victor R. Basili. 2001. "Software Defect Reduction Top 10 List." IEEE Computer, Jan. "Finding and fixing a software problem after delivery is often 100 times more expensive than finding and fixing it during the requirements and design stage."

[5] ANDERSON, K. M. Lecture 04: Software Process, Part 1. Disponível em: http://www.cs.colorado.edu/~kena/classes/5828/s07/lectures/04/index.html. Acesso em 7 Maio. 2010.

domingo, 17 de abril de 2011

Fatos e Falácias de Engenharia de Software - Reutilização

Após quase um mês sem atualizações aqui, estou voltando a postar continuando a seqüência de temas relacionados a Engenharia de Software. Nessa postagem irei abordar um tema que muito me agrada e que tem relação indireta com minha pesquisa: Reutilização no processo de desenvolvimento do software.

Digo que tem relação indireta pois minha pesquisa envolve bastante sobre Padrões de Análise, que basicamente proporciona reutilização conceitual no processo de software, enquanto que na discussão dessa postagem irei abordar mais especificamente a reutilização de código.

Futuramente estarei postando também sobre Padrões de Análise por aqui, mas enquanto isso vamos ao nosso texto de hoje.

Universidade Federal de Viçosa
Departamento de Informática
Mestrado em Ciência da Computação
INF 622 - Engenharia de Software
Resumo no. 03


Fatos
15 - Reutilização em pequena proporção (bibliotecas de sub-rotinas) começou há quase 50 anos e é um problema bem resolvido.
16 - Reutilização em grande proporção (componentes) continua sendo um problema na maior parte não resolvido, embora todos concordem que é importante e desejável.
17 - Reutilização em grande proporção funciona melhor nas famílias de sistemas conexos e, portanto, é dependente do domínio. Isso restringe a aplicabilidade potencial desse tipo de reutilização.

Discussão
Ambos os fatos estudados tratam da Reutilização, sendo que cada um deles aborda o tópico por visões distintas. Atualmente muito se fala em reutilização de código, sendo que muitos tratam dessa técnica como se ela fosse novidade. O próprio paradigma de programação orientada a objetos coloca a reutilização como uma das suas grandes inovações. O fato 15 mostra que na verdade Reutilização de código é um conceito que surgiu na década de 50 com a Organização Share [1]. A proposta da Organização Share foi a de criar um espaço semelhante a uma biblioteca tradicional, porém lá ao invés de livros, os programadores compartilhavam códigos de programação de uso freqüente, e sempre que precisavam implementar algo que achavam que alguém poderia já ter feito antes, consultavam a biblioteca de códigos para evitar o retrabalho. Dentre esses códigos de uso comum que eram compartilhados, são exemplos funções para realização de operação matemáticas, funções de ordenação e busca de valores.

Com o passar dos anos a idéia de reutilização em pequenas proporções tornou-se muito difundida e ficou claro que isso agiliza muito o desenvolvimento. A maioria das linguagens mais utilizadas atualmente possui vastas bibliotecas de códigos definidos para diversos domínios comuns, como por exemplo, as conexões com os variados tipos de SGBDs.

As bibliotecas das linguagens geralmente possuem funções que já foram exaustivamente testadas e amplamente utilizadas, passando assim um alto grau de confiabilidade. Portanto é muito mais eficiente em termos de agilidade na implementação e até mesmo de segurança (dependendo do domínio), utilizar funções pré-definidas nas bibliotecas do que ter o trabalho de fazer algo já existente.

O fato 16 trata da reutilização de código em grandes proporções, a chamada engenharia de software baseada em componentes. Essa proposta prega que softwares podem ser montadas unicamente a partir de união de “peças” já existentes (componentes), escolhidos mediante a especificação dos requisitos. Essa idéia nos leva a pensar em uma verdadeira linha de montagem de software, porém na prática isso não acontece exatamente assim.

Essa idéia de reutilização de componentes (reutilização de códigos em grande proporção) também não é nova, mas ao contrário da reutilização de bibliotecas de sub-rotinas comuns (reutilização de códigos em pequena proporção), ela nunca se tornou algo utilizado em grande escala. A discussão do fato 16 é basicamente a respeito do motivo pelo qual isso nunca aconteceu, mesmo sabendo-se que na teoria é algo que traria avanços significativos de produtividade no processo de desenvolvimento de software.

O problema maior da criação de componentes reutilizáveis, é que eles devem ser genéricos o suficiente para atender a qualquer domínio. Porém há grandes diferenças de exceções entre os domínios. Embora alguns problemas grandes quando analisados superficialmente possam parecer semelhantes, há uma série de restrições para as possíveis soluções quando analisamos os mesmos problemas em domínios diferentes.

O fato 17 trata de algo extremamente realista e menos utópico que a reutilização de componentes totalmente genéricos. A grande barreira que impede a disseminação da reutilização em grandes proporções são as sutilezas que diferem os domínios. Elas dificultam muito na criação de componentes genéricos que atendam a todos os domínios de forma eficiente. Porém quando se trata de componentes aplicados a um mesmo domínio de problemas, a chance de sucesso aumenta consideravelmente [4].

Os estudos realizados pelo Software Engineering Laboratory (SEL), da NASA-Goddard [2] exemplificam bem essa afirmação, haja vista que 70% dos softwares desenvolvidos por eles dentro do domínio específico de dinâmica de vôos reutilizaram componentes com sucesso.

Grandes empresas como a Microsoft utilizam desses conceitos em seus softwares principais. Plataformas como o pacote Office e o sistema operacional Windows, são desenvolvidas atualmente reutilizando-se de diversos componentes que foram sendo implementados pela empresa ao decorrer dos anos. A cada nova versão, grande parte dos componentes anteriores é reutilizada e inovações são acrescentadas, gerando assim novos componentes que serão reutilizados posteriormente.

Esse processo de reutilização também torna o processo de desenvolvimento de uma empresa cada vez mais maduro, montando uma espécie de linha de montagem de software, mas é importante observar que o domínio de aplicação desses componentes acaba sendo bem restrito para alcançar tal eficiência na sua aplicação.

Controvérsia
A principal controvérsia do fato 15 é relacionada ao desconhecimento da história da reutilização. Principalmente após a difusão do paradigma de programação orientada a objetos, muito começou a se falar sobre reutilização de código como uma grande inovação. O conceito de reutilização de código não é novo como muitos entusiastas imaginam e já existia muito antes de orientação a objetos por exemplo.

Existem muitas controvérsias entre as tentativas de explicações para o fato 16. Enquanto alguns vêem a engenharia de software baseada em componentes como o futuro, outros são completamente céticos com relação a sua aplicação real.

O NASA's Goddard Space Flight Center [2] realizou durante anos estudos relacionado ao desenvolvimento de softwares específicos baseados em componentes. Cerca de 70% dos softwares desenvolvidos dentro do domínio de atuação do NASA-Goddard foram construídos com reutilização de componentes, um número alto, mas que não pode ser interpretado de qualquer maneira. A eficiência da reutilização de componentes nesse caso foi devido à semelhança real dos softwares. Softwares de um mesmo domínio tendem a terem restrições semelhantes, portanto a generalização eficiente dos componentes fica facilitada.

Outro motivo levantado para a possível não adoção em massa da reutilização em grande proporção, é a chamada síndrome do “Não-Inventado-Aqui” (NIH em inglês). Essa síndrome seria comum a profissionais teimosos que acreditam ser mais complicado administrar algo não criado por eles mesmos.

De uma maneira geral, não se pode afirmar que a engenharia de software baseada em componentes é boa ou ruim, para isso é necessário analisar o contexto. Devido às diferenças entre os diversos domínios, é muito complicado que a criação de componentes totalmente genéricos seja eficiente para aplicação em todos os casos, mas em casos específicos eles podem ser extremamente eficientes. Muitos autores, assim como GLASS [3], acreditam que a reutilização de código em grandes proporções não chegará a ser tão difundida e comum quanto a de pequenas proporções, mas essa visão embasa-se na sua complexidade e não na qualidade da proposta.

As controvérsias ao fato 17 são referentes às pessoas entusiastas da reutilização em grandes proporções da forma mais genérica possível, abrangendo a domínios de qualquer espécie. Essas pessoas acabam tendo esse tipo de visão por desconhecerem as diferenças entre os domínios, pois essas diferenças impossibilitam uma maior eficiência na resolução de problemas comuns a domínios distintos utilizando componentes totalmente genéricos.

Referências Bibliográfica

[1] SHARE Inc. About SHARE. Disponível em: http://www.share.org/AboutSHARE/tabid/65/Default.aspx Acesso em 10 Abr. 2010.

[2] NASA-Goddard Space Flight Center. About the Goddard Space Flight Center. Disponível em: http://www.nasa.gov/centers/goddard/about/index.html Acesso em 10 Abr. 2010.

[3] GLASS, R. Facts and Fallacies of Software Engineering. Addison Wesley. October 2002.

[4] McBREEN, Pete. Software Craftsmanship. Boston: Addison-Wesley. Says "cross-project reuse is very hard to achieve." 2002.

sexta-feira, 18 de março de 2011

Fatos e Falácias de Engenharia de Software - Estimativas de projetos de software

Dando continuidade a seqüencia de postagens sobre temas polêmicos em engenharia de software, o tema da discussão dessa postagem será: Estimativas de projetos de software.

É impressionante como essa parte fundamental do processo de desenvolvimento de software ainda hoje seja realizada de maneira tão errônea e que sofra com influências tão negativas quanto às discutidas nesse resumo.

Caso alguém já tenha sentido na pele algum desses fatores negativos e queira compartilhar essa experiência ruim para enriquecer nossa discussão, não deixe de comentar.

Universidade Federal de Viçosa
Departamento de Informática
Mestrado em Ciência da Computação
INF 622 - Engenharia de Software
Resumo nº 2


Fatos Estudados
09 - A maioria das estimativas de software são realizadas no início do ciclo de vida. Isso faz sentido, até que percebemos que as estimativas são obtidas antes dos requisitos serem definidos e, portanto, antes do problema ser compreendido. Estimativa, portanto, ocorre geralmente na hora errada.
10 - A maioria das estimativas de software são feitas tanto pela alta gerência ou pelo marketing, não pelos profissionais que irão construir o software ou os seus gestores. Estimativa é, portanto, feita por pessoas erradas.
11 - Estimativas de software raramente são ajustadas conforme o andamento do projeto. Assim sendo, as estimativas feitas no momento errado, por pessoas erradas, geralmente não são corrigidas.

Discussão
Os fatos estudados analisam alguns problemas relacionados às estimativas de projetos de software. O nono fato trata do momento do processo de software em que as estimativas são traçadas. Ele apresenta um problema que pode soar absurdo nos dias de hoje, mas que na prática acontece em alguns projetos. Algumas equipes traçam as estimativas de tempo e custos de um projeto de software previamente ao levantamento de requisitos, algo que é completamente inaceitável, se considerarmos as melhores práticas de gestão de projetos de software. Após o levantamento e análise dos requisitos é que o problema a ser resolvido pelo projeto começa a ser realmente entendido, portanto, fazer estimativas antes na análise de requisitos é como dar um tiro no escuro, pois dificilmente a equipe terá argumentos sólidos onde se basear neste ponto de partida do ciclo de vida.

Segundo MARÇAL [2], em projetos gerenciados por Scrum, o cronograma é extraído do Product Backlog, sendo que as estimativas são feitas em dois níveis. Primeiro em alto nível, analisando cada requisito do Product Backlog para assim obter-se uma visibilidade geral do projeto e durante o processo são feitas estimativas de cada Sprint Backlog, oferecendo dessa forma uma visibilidade mais precisa de cada iteração.

O décimo fato é diretamente relacionado ao nono. Muitas das vezes as estimativas são traçadas no momento errado porque as pessoas responsáveis por elas também eram inapropriadas para tal. A alta gerência e/ou os responsáveis pelo marketing, na maioria das vezes não tem uma visão bem definida ou entendimento suficiente sobre qual é a importância dos requisitos e muito menos em como a alteração deles pode impactar sobre as estimativas do projeto todo. Sendo assim, ao invés dos profissionais de software (analistas, programadores, etc) serem os encarregados por traçarem as estimativas, baseando-se nos requisitos, dados históricos e outros fatores relevantes, quem acaba traçando as estimativas ao cliente são a alta gerencia e o marketing, pessoas geralmente desqualificadas para realizar tal tarefa. Por esse motivo essas pessoas acabam fazendo-a de forma errônea, geralmente considerando muito mais o desejo em detrimento ao que seria realmente possível.

Embora possa parecer absurdo que softwares profissionais sejam concebidos a partir de estimativas errôneas realizadas por pessoas inadequadas, os autores do estudo de CASE [1] mostram que impressionantes 70% dos softwares são concebidos dessa forma, com estimativas sendo definidas pelos usuários (clientes) e apenas 4% das estimativas são realizadas pela equipe do projeto.

O fato 11 relaciona-se aos dois anteriores, acrescentando ainda mais acontecimentos que fogem ao padrão. Considerando que as estimativas são geralmente traçadas no momento errado e por pessoas inapropriadas, o resultado final só poderia ser um projeto mal estimado e que não atende à realidade, porém, por incrível que pareça, a alta gerência além de traçar suas estimativas erroneamente, ignorando fatores como a complexidade do projeto e o custo real para atender aos requisitos, dificilmente ela permite mudanças de cronograma, obrigando assim a equipe de desenvolvimento a trabalhar o quanto for necessário para atender aos seus desejos.

Controvérsia
Dificilmente alguém conseguirá apresentar uma controvérsia ao nono fato, haja vista que antes de detalhar o que será desenvolvido, o risco de traçar uma estimativa errada é muito alto e pode ser determinante para um projeto fracassar. Mesmo em equipes que já possuem ampla experiência em diversos tipos de projetos, traçar uma estimativa analisando superficialmente um problema e comparando-o a outros projetos “semelhantes” já realizados pela equipe é algo perigoso, pois mesmo que exista muitos pontos em comum entre eles, os pequenos pontos que divergem podem impactar em vários outros, gerando assim um “efeito dominó” que impossibilita a precisão dessa estimativa por comparação superficial de semelhanças.

Controvérsias para o décimo fato também são difíceis de serem citadas, pois é claro que para traçar estimativas de software, precisa-se ter conhecimento de causa e basear-se e referências concretas a fim de dar uma visibilidade mais precisa do projeto, e somente as pessoas ligadas diretamente a ele (programadores, analistas, etc) tem essa capacidade. Tanto a alta gerência quanto o marketing, geralmente só são capazes de traçar estimativas baseadas nos negócios, nos desejos comerciais e não no processo em si.

Geralmente as estimativas traçadas pela alta gerência são motivos de discórdia entre os membros da equipe de desenvolvimento, porém quando a equipe é questionada pela alta gerência sobre o que daria pra ser feito no tempo estimado, freqüentemente essa resposta não é dada com precisão pela equipe, o que acaba gerando desconfiança na alta gerência sobre a capacidade da equipe traçar estimativas, entretanto isso é um erro. Possivelmente as equipes têm dificuldade em dar precisão para a alta gerencia sobre o que seria capaz de fazer em determinado tempo devido a esse questionamento ser feito em momento inoportuno, como por exemplo, antes do conhecimento detalhado dos requisitos.

A controvérsia ao fato 11 chega a ser injusta. As estimativas traçadas no momento errado e por pessoas erradas tendem a gerar cronogramas impossíveis de serem cumpridos a risca, pois como eles são feitos considerando geralmente apenas o desejo da gerencia e não a complexidade real do problema a ser resolvido e os prazos previstos, na maioria das vezes acabam não sendo cumpridos e custos adicionais podem ser gerados por esse descumprimento. A culpa principal desses acontecimentos é dos responsáveis pelo estabelecimento das estimativas (alta gerência ou marketing), porém quem realmente leva a culpa é a equipe, que na verdade é a maior vítima de toda a situação.

Analisando os fatos apresentados de forma ampla, percebe-se que existem poucas controvérsias a respeito deles, isso é ocasionado devido ao consenso geral no qual eles estão inseridos. Todos os profissionais de software sabem na realidade quem deve fazer as estimativas dos projetos, o que deve ser levado em consideração para tal, quando as estimativas devem ser traçadas e no caso de falhas ao estimar, medidas corretivas devem ser tomadas no cronograma e informadas aos stakeholders. Infelizmente na prática essas questões não são respeitadas devido a políticas empresariais internas pouco evoluídas.

Referências bibliográficas
[1] CASE. "CASE/CASM Industry Survey Report." HCS, Inc., P.O. Box 40770, Portland, OR 97240. 1991.

[2] MARÇAL, Ana Sofia; FREITAS, Bruno Celso C.; FURTADO, Felipe; MACIEL, Teresa; BELCHIOR, Arnaldo Dias. Estendendo o SCRUM segundo as áreas de processo de gerenciamento de projetos do CMMI. 2007 Disponível em: http://www.cesar.org.br/files/file/SCRUMxCMMI-CLEI-2007.pdf. Acesso em 27 mar. 2010.

sábado, 5 de março de 2011

Fatos e falácias de Engenharia de Software - Profissionais de software

Carnaval chegando, pessoal se preparando para cair na folia e inspirado nessa animação, nada melhor do que discutirmos um pouco sobre engenharia de software não é pessoal?!

Hoje estou dando início a uma sequência de postagens com discussões sobre temas diversos englobados pela engenharia de software. Boa parte dessas discussões são fruto da minha opinião a respeito de partes do livro "Facts and Fallacies of Software Engineering" escrito por Robert L. Glass em 2003. Esse é um livro muito interessante e de leitura super agradável que recomendo a todos que tiverem interesse em se aprofundarem nessas discussões.

Para auxiliar aos mais interessados no tema, segue abaixo partes do livro de Glass disponibilizada pelo Google Books:


Nessa primeira discussão expresso minha opinião a respeito de alguns tópicos que envolvem diretamente os Profissionais de software e seus respectivos Ambientes de trabalho. Espero comentários e críticas para enriquecermos nossos conhecimentos a respeito desse tema.

Universidade Federal de Viçosa
Departamento de Informática
Mestrado em Ciência da Computação
INF 622 - Engenharia de Software
Resumo no. 1

Fatos estudados
1 - O fator mais importante no trabalho com software não são as ferramentas e técnicas utilizadas pelos programadores, mas sim a qualidade dos próprios programadores.
3 - Adicionar pessoas a um projeto atrasado faz atrasá-lo mais ainda.
4 - O ambiente de trabalho tem um profundo impacto sobre a produtividade e a qualidade do produto
6 - Aprender uma nova ferramenta ou técnica realmente reduz a produtividade do programador e qualidade do produto inicialmente. O benefício final é alcançado somente após a curva de aprendizagem ser vencida. Portanto, vale à pena adotar novas ferramentas e técnicas, mas apenas (a) se o seu valor é visto de forma realista e (b) se paciência é usada na medição dos benefícios.

Discussão
Ambos os fatos analisados tratam de temas pouco tangíveis por serem relacionados a pessoas.

O primeiro fato trata da importância dos profissionais (analistas e programadores) no desenvolvimento de software. Por questões culturais, muitos engenheiros de software ainda consideram as ferramentas e técnicas empregadas no desenvolvimento de software sendo mais importantes que a qualidade dos profissionais que as utilizam, mesmo sendo a importância da qualidade dos profissionais um objeto de muitos estudos há anos, como relata PRESMAN [5].

Gerenciar ferramentas e metodologias a serem aplicadas no desenvolvimento de software é algo mais tangível que o gerenciamento de pessoas, por esse motivo as empresas tendem a dar maior atenção à quais ferramentas e técnicas de desenvolvimento de software serão usadas em determinado projeto do que despenderem tempo com análises de motivação e perfil dos profissionais que serão alocados para o mesmo. Isso é um grande erro, pois de nada adianta empregar as melhores técnicas e usar as melhores ferramentas se o profissional que as utiliza não for competente para exercer suas atividades.

Para amenizar essa deficiência na gestão de pessoas, o SEI criou o PM-CMM, que nada mais é do que uma extensão do CMM, porém com foco exclusivo nesse tipo de gestão, tendo práticas como o treinamento de pessoal, recrutamento, desenvolvimento de carreira e remuneração [4].

O fato três é relacionado à adição de profissionais a projetos de software atrasados com intuito de acelerar o mesmo. Em processo de desenvolvimento de software isso não funciona muito bem, pois as atividades que envolvem esse tipo de processo são mais mentais do que mecânicas. Nesse sentido torna-se muito difícil um profissional ser inserido em um projeto que está em andamento e imediatamente render no mesmo ritmo dos outros profissionais que já participam do processo. Para ficar sintonizado com a equipe, esse profissional demandará uma maior atenção por parte dos outros e isso acarretará em atrasos e menor rendimento da equipe toda.

Baseando-se na análise de alguns relatórios de projetos open source, YILDIRIM [7] afirma que ocorre aumento na média das contribuições com o acréscimo de programadores nas fases iniciais dos projetos, e um declínio na fase adulta. Isso vem a ratificar a Lei de BROOKS [3].

O fato 4 deixa claro que de nada adianta ter a melhor equipe de programadores, usando as melhores ferramentas e técnicas de desenvolvimento de software se estes não estiverem em um ambiente propício ao trabalho que realizam. Interrupções e desvios de atenção causados por ambientes de trabalho tumultuados podem gerar muitos erros, haja vista que os trabalhos realizados em todas as etapas do desenvolvimento de software exigem muita atenção. Existem algumas iniciativas no sentido de controlar a qualidade do ambiente de trabalho, dentro elas vale ressaltar o PM-CMM, que contém diversas práticas em áreas de gestão de pessoas, sendo uma dessas áreas a de qualidade do ambiente de trabalho [4].

O fato 6 trata da curva de aprendizagem de novas ferramentas e técnicas de programação. Empresas investem em atualizar seus profissionais, possibilitando que os mesmos aprendam novas tecnologias aplicáveis aos seus respectivos processos de desenvolvimento de software, mas todo aprendizado tem seu custo, fazendo com que a produtividade e a qualidade dos produtos caiam inicialmente. Isso se deve a diversos fatores, dentre eles a insegurança e inexperiência dos profissionais ao aplicarem as novas tecnologias.

A qualidade dos profissionais e o ambiente de trabalho que ele está inserido podem influenciar muito no tempo gasto para uma equipe passar a dominar determinada técnica ou ferramenta e assim trazer benefícios a empresa, mas é muito difícil mensurar precisamente o esse tempo.

Segundo ANZANELLO [1], “A curva de aprendizado apresenta-se como uma ferramenta capaz de monitorar o desempenho de trabalhadores submetidos a tarefas repetitivas”. As atividades realizadas no desenvolvimento de software não são repetitivas e a aplicação das novas tecnologias pode acontecer de formas diversas, por esse motivo torna-se complicado precisar tempos.

O mais indicado a uma empresa que busca aplicar novos conhecimentos ao seu processo de desenvolvimento de software é a busca de informações com outros que já passaram pelo mesmo processo, pois esse confronto de informações relevantes poderá servir para que se tenha uma média aproximada de tempo que auxiliará nas tomadas de decisão dos gerentes.

Controvérsia
No fato 1, a controvérsia mais comum é o descaso de muitas empresas com relação a gestão de pessoas. Mesmo que a maioria delas tenha consciência da importância da qualidade do profissional no processo, ainda preferem ignorar esse fato e privilegiar os investimentos em ferramentas e novas técnicas. A proposta do PM-CMM criado pelo SEI é muito interessante no sentido de reverter tal situação, mas ainda está longe de ser tão difundida quanto o CMM.

Em controvérsia com o fato 3, RAYMOND [6] acredita que a adição de novos programadores a um projeto não necessariamente acarretará na diminuição do ritmo da equipe. Ele fez a afirmação conhecida como Lei de Linus “Dado uma base grande o suficiente de beta-tester e co-desenvolvedores, praticamente todo problema será caracterizado rapidamente e a solução será óbvia para alguém”.

A base dessa visão de Raymond vem de uma afirmação de Brooks, que diz que se as tarefas de um projeto são divisíveis, você pode dividi-las bastante e atribuí-las as pessoas que são adicionadas ao final do projeto e tem o perfil adequado.

Investimentos feitos em melhorias do espaço, divisão e organização do ambiente de trabalho são fáceis de serem medidos, o difícil é mensurar o quanto eles trazem de lucros. Isso gera uma controvérsia ao fato 4.

Muitos defendem que o ambiente de trabalho deve ser o mais calmo e amplo possível, dando privacidade ao profissional para assim ele conseguir ter uma maior concentração em suas atividades, evitando distrações geradas por diversos fatores, dentre eles o da aglomeração de pessoas em um espaço inadequado. O Extreme Programming vai contra boa parte desses conceitos, gerando assim uma grande controvérsia.

Segundo BECK [2], o XP prega o desenvolvimento de software em comunidade, para tal, o ambiente de trabalho convencional não atende aos requisitos necessários. Para a aplicação do XP, os computadores devem ficar aglomerados em um espaço comum a toda a equipe, evitando divisórias que separem os profissionais ou disposições muito espalhada dos móveis. O objetivo disso é fazer com que a equipe interaja mais, formando duplas que programam juntas e ao mesmo tempo conseguem ver o que a dupla do lado está fazendo, para se necessário também auxiliá-las. Essa interação traz ganhos tanto na identificação e solução de erros quanto no comprometimento da equipe com o projeto.

Existe um consenso geral de que todo aprendizado tem seu custo inicial, portanto é muito difícil haver controvérsias a respeito do fato 6. As empresas devem ter consciência de que é importante adotar novas técnicas e ferramentas para assim evoluírem seus processos e terem retornos, mas não devem de forma alguma achar que esse retorno será imediato, pois de fato ele não será.
Mesmo sendo difícil mensurar quando esses retornos virão, o feedback de outros que já adotaram as mesmas tecnologias é muito importante para traçar um planejamento e fazer projeções.

Referências bibliográficas
[1] ANZANELLO, M. J.; FOGLIATTO, F. S. Curvas de aprendizado: estado da arte e perspectivas de pesquisa. Gest. Prod., São Carlos, v. 14, n. 1, abril 2007 . Disponível em: http://www.scielo.br/scielo.php?script=sci_arttext&pid=S0104-530X2007000100010&lng=en&nrm=iso. Acesso em 05 Mar. 2010.

[2] BECK, K. Programação extrema explicada: acolha as mudanças. Porto Alegre: Bookman, 2004.

[3] BROOKS, Frederick P., The Mythical Man Month: Essays on Software Engineering. Addison-Wesley, 1995.

[4] CURTIS, B. A Mature View of the CMM. American Programmer, Vol. 7, No. 9, pp. 19-28, set. 1994.

[5] PRESMAN, Roger S. Engenharia de Software. 5ª edição. Rio de Janeiro: McGraw-Hill, 2002.

[6] RAYMOND, E.S. The Cathedral and Bazaar. O’Reilly Books, 1999.

[7] YILDIRIM, H. Getting the Ball Rolling: Voluntary Contributions to a Large Scale Public Project. Journal of Public Economic Theory 8, 503-528. 2006.

domingo, 20 de fevereiro de 2011

Discussão: Pesquisa no Brasil

O horário de verão acaba de terminar e em conseqüência disso meu dia foi acrescido em uma hora, sendo assim resolvi aproveitar um pouco desse tempo realizando a postagem de hoje.

Na primeira discussão postada aqui no blog fiz uma breve explicação falando que minha intenção era a de postar uma seqüência com 12 discussões, sendo 6 sobre Técnicas de Pesquisa em Ciência da Computação e 6 sobre tópicos em Engenharia de Software. Pois bem, hoje estou fazendo a sexta e última postagem (pelo menos por enquanto) sobre Técnicas de Pesquisa, abordando especificamente o tema: Pesquisa no Brasil. 

Continuem acompanhando o blog pois brevemente darei início às discussões sobre Engenharia de Software, que acredito irão proporcionar trocas de idéias interessantes por aqui também.

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º. 06

Os artigos estudados referem-se questões que envolvem a pesquisa no Brasil, questões relativas à transferência de conhecimento, propriedade intelectual e fontes de financiamento de projetos de pesquisa.

Diferentemente de outros países, as pesquisas realizadas no Brasil possuem um baixo índice de depósitos de patentes. Nos países desenvolvidos é muito comum que pesquisas realizadas na academia gerem patentes e posteriormente tenham esses resultados compartilhados com a indústria gerando assim novos produtos. Para usufruir desse conhecimento, geralmente são firmados contratos de exploração de conhecimento, onde a indústria paga royalties à academia pelo fato de estar utilizando tecnologia gerada pela mesma.

Essa maneira de conduzir as pesquisas voltadas à patentes e o posterior compartilhamento com a indústria mediante a compensação financeira é muito benéfica para ambos os lados. A indústria lucra por estar usufruindo de conhecimentos e invenções inovadores que são agregadas aos seus produtos, produzindo um grande diferencial de mercado, enquanto que a academia passa a ter cada vez mais recursos financeiros que proporcionam a realização de pesquisas cada vez mais importantes e de impacto, gerando assim um grande ciclo virtuoso.

No Brasil vários fatores influenciam para que pesquisadores gerem poucas patentes, principalmente fatores culturais, burocráticos e financeiros. No nosso país é comum que na academia a mistura de papeis com a indústria seja vista com certo preconceito. Algumas vertentes mais tradicionalistas de pesquisadores acreditam que a transferência de conhecimento da academia para a indústria não seja algo benéfico para a academia. Com relação a burocracia, enquanto pedidos de patentes em outros países demoram cerca de 2 anos para serem atendidos, no Brasil esse período pode ultrapassar os 10 anos. Financeiramente falando, nem todo pesquisador tem fundos suficientes para submeter um pedido de patente, pois o custo inicial desse processo é caro, custando em torno de U$7.000,00.

Uma forma de driblar limitações financeiras é a busca por agentes financiadores de pesquisa, como por exemplo, o FINEP, FAPESP, FAPEMIG, CAPES, entre outros.

De maneira geral, para obter-se sucesso na capitação de recursos para pesquisas, deve-se inicialmente estabelecer o que se pretende pesquisar, de que maneira, levantar a importância de realizar pesquisas com o tema proposto, estabelecer um cronograma, estimar custos e antecipar possíveis resultados obtidos pela equipe de pesquisadores também previamente definida. A partir dessas definições, uma busca criteriosa deve ser realizada com intuito de encontrar agentes financiadores que tenham um perfil adequado para a proposta de pesquisa.

Para encontrar os agentes ideais, é importante que seja analisado se esses agentes já financiaram pesquisas semelhantes à proposta e se atualmente continua sendo de seu interesse financiar algo com o perfil proposto. Quanto mais tempo os pesquisadores se dedicarem a encontrar agentes financiadores com perfis específicos, maiores serão suas chances de captarem recursos para suas pesquisas.

Após levantamento prévio de possíveis agentes financiadores, é essencial que a elaboração do projeto que será proposto esteja estritamente dentro das normas e padrões exigidos por cada um, buscando sempre despertar interesse pela proposta, sendo claro, objetivo e ao mesmo tempo detalhista. Outro fator importantíssimo é a demonstração de seriedade, montando equipes de pesquisadores com credibilidade e atendendo os prazos estabelecidos.

Outro tema abordado nas leituras foi com relação ao direito autoral no Brasil, mais especificamente de software. Semelhante aos direitos autorais concedidos a autores de obras literárias que valem por 70 anos após sua morte, direitos autorais de software valem por 50 anos no Brasil. Muitos autores acreditam ser absurdo que o direito de software dure tantos anos, pois na prática essa duração é como se fosse infinita, haja vista que a tecnologia avança de maneira muito acelerada e um software produzido a 50 anos atrás não agrega nenhum valor ao conhecimento da sociedade quando torna-se de domínio público. Isso é um fator prejudicial à inovação tecnológica e ao progresso científico do nosso país.

Referências

[1] CÂMARA, G. (2006). Grandes desafios da Computação: A construção de uma “terceira cultura”. Disponível em: http://www.dpi.inpe.br/gilberto/present/grandes_desafios_gilberto.ppt . Acessado em 28 nov. 2010.

[2] Handbook for Preparing and Writing Research Proposals. C.P. Patrick Reid. Vienna, Austria, IUFRO Special Programme for Developing Countries, 2000. - 164 p.

[3] LUCENA, Carlos José Pereira et al. Grandes Desafios da Pesquisa em Computação no Brasil - 2006-2016. Disponível em: http://goo.gl/fGCyq . Acessado em 28 nov. 2010.

[4] SOCIEDADE BRASILEIRA DE COMPUTAÇÃO. Computação Brasil, Porto Alegre, v. 20, p. 3-11, Jan./Fev.2006.

[5] SAKIYAMA, C. C. H. Captação de Recursos para Pesquisa: Elaboração de Projetos. Seminário Pós-Graduação Informática – UFV – 10 de Julho de 2007.

quinta-feira, 20 de janeiro de 2011

Discussão: Critérios de Avaliação do Meio Acadêmico

Após praticamente um mês sem publicar novas discussões aqui no blog, resolvi hoje dar continuidade a essa série de discussões de temas ligados ao meio acadêmico. Na postagem de hoje estarei abordando mais um tema polêmico que dividi opiniões: Critérios de Avaliação do Meio Acadêmico.

Convido aos leitores a comentarem a vontade e inclusive aproveitarem o novo espaço "Social Network" para postarem além de suas opiniões, materiais que por ventura julguem complementar ao tema tratado na discussão.

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º. 05

Os artigos estudados referem-se ao meio acadêmico e diversas situações oriundas do mesmo, mais especificamente a respeito de critérios de avaliação.

Tópicos como avaliação em Journals e Conferências, qualidade dos avaliadores, práticas de avaliação, critérios de mérito acadêmico e fator de impacto foram abordados e de uma maneira geral os autores foram bem críticos em relação a todos esses pontos, enunciando diversas falhas, atitudes antiéticas e outras situações que questionam de maneira pesada o modelo acadêmico vigente.

Segundo o autor do artigo [1], devido ao fato dos avaliadores de Journals e Conferências realizarem suas atividades de forma voluntária, todo processo acaba acontecendo de uma forma muito amadora, sem motivação e com critérios questionáveis. É comum que trabalhos sejam rejeitados em um local e sejam aceitos em outros sem que os autores façam qualquer alteração nos mesmos, demonstrando assim não haver um padrão de correção. Pior que isso foi a comprovação feita pelos autores de que os avaliadores as vezes não lêem os artigos que estão avaliando, e isso ficou provado quando foi realizada uma experiência selecionando alguns artigos já publicados, alterando apenas o título e os autores e submetendo-os para avaliação. Alguns desses trabalhos foram aceitos para publicação e nos que foram rejeitados, em nenhuma das avaliações foi constatado a ocorrência de plágio, ou seja, ou avaliadores leram os trabalhos de forma muito superficial e pouco pesquisaram a respeito para avaliar, ou talvez nem devam ter se dado ao trabalho de ler.

Em outra experiência realizada em [1], o autor submeteu para avaliação da Conferência Visualization and Intelligent Design in Engineering and Architecture-VIDEA’95, textos que não faziam o mínimo sentido, como por exemplo, a chamada de trabalhos da Conferência entre outros. O resultado final dessa experiência foi o aceite de todos os textos submetidos pelo autor. De forma indutiva ele chegou a conclusão de que na verdade não havia avaliação de trabalhos nessa conferência, mas sim um negócio de fachada onde qualquer texto que fosse submetido e pagasse a taxa de $600 seria publicado. O detalhe é que os trabalhos dessa conferência foram publicados pela Editora Elsevier, responsável por publicar livros de alta qualidade.

Algo que foi muito criticado pela maioria dos artigos estudados foi a avaliação de produtividade de pesquisadores ser feita pela quantidade de trabalhos publicados e não pela qualidade. Esse procedimento é prejudicial a qualidade dos trabalhos publicados, pois muitos pesquisadores acabam jogando com a regra, publicando trabalhos mal revisados, em andamento ou com resultados superficiais. Técnicas como auto-plágio acabam também sendo incentivadas para gerar um número maior de publicações e dessa forma obterem mais acesso a financiamentos e maior prestígio. Trabalhos realmente desafiadores e que trazem grandes avanços para a ciência acabam sendo deixados de lado por demandarem mais tempo e esforço para serem realizados e conseqüentemente demoram mais para gerar resultados numéricos (número de publicações!)... Isso tudo é muito prejudicial para o progresso científico.

Outra forma de se avaliar é com a utilização do fator de impacto. Essa avaliação é feita a partir da divisão do número de citações obtidas nos dois anos anteriores, pelo número de artigo publicados no mesmo período. Inicialmente esse critério parece um pouco mais justo que a simples contagem do número de publicações, pois se um trabalho é muito citado, provavelmente é porque o mesmo é de qualidade, certo? Nem sempre. Esse critério de avaliação também é falho em alguns aspectos. Autores podem acabar negociando troca de citações entre si para ambos serem beneficiados gerando números artificiais. Da mesma forma, autores que trabalham com temas novos ou pouco pesquisados, naturalmente serão pouco citados, sendo assim esses fatores de impacto serão baixos, mas nem por isso significa que os trabalhos realizados pelos mesmos foram de baixa qualidade.

Após a leitura dos artigos, ficou claro que o modelo acadêmico atual, embora seja responsável pela formação de pessoas brilhantes e com méritos reais para alcançarem status em suas carreiras, também oferece muitas brechas para que pessoas antiéticas e de qualidades questionáveis consigam alcançar postos altos, status e pior que isso, acabar tomando espaço de outros que talvez merecessem mais. Contatos influentes ajudam muito nesse sentido também. Claro que isso não é algo generalizado, porém de fato acontece e sou cético com relação a mudanças leves. Para solucionar esses problemas citados no resumo e alguns outros relatados nos artigos lidos, uma mudança geral do sistema se faz necessária, porém isso não é algo trivial e que acredito demorará ocorrer, se é que ocorrerá.

Referências

[1] Warren D. Smith. (2010). Journals, Conferences, and Referees, or why "modern" "professional" Science is organized in a completely screwed up Victorian amateur way. Disponível em: http://www.math.temple.edu/~wds/homepage/refereeing. Acessado em 7 nov. 2010.

[2] Ramesh V., Glass R.L., Vessey I. Research in computer science: An empirical study(2004) Journal of Systems and Software, 70 (1-2), pp. 165-176.

[3] AMIN, M.; MABE, M. Impact factors: use and abuse. Perspectives inpublising, Amsterdam, n. 1, p. 1-6, Oct. 2000

[4] Rossner, Mike; Van Epps, Heather; Hill, Emma. 2007. Show me the data. Journal of Cell Biology, Vol 179,No 6, December 17, pp. 1091-1092. http://dx.doi.org/10.1083/jcb.200711140 

[5] David Lorge Parnas. 2007. Stop the numbers game. Commun. ACM 50, 11 (November 2007), 19-21. DOI=10.1145/1297797.1297815 http://doi.acm.org/10.1145/1297797.1297815

[6] Bertrand Meyer, Christine Choppy, Jørgen Staunstrup, and Jan van Leeuwen. 2009. Viewpoint: Research evaluation for computer science. Commun. ACM 52, 4 (April 2009), 31-34. DOI=10.1145/1498765.1498780 http://doi.acm.org/10.1145/1498765.1498780

quinta-feira, 23 de dezembro de 2010

Discussão: Como escrever bons artigos científicos

Para dar uma quebrada no ritmo de postagens sobre discussões científicas e evitar que o conteúdo do blog ficasse massante, resolvi fazer a postagem da semana passada sobre o filme "The Social Network", entretanto optei retomar rapidamente às discussões dado o sucesso que elas estão tendo a nível de acesso e procura.

Para essa postagem iremos discutir um tema importante para TODAS as áreas: Como escrever e estruturar bem artigos científicos. 

Embora algumas pessoas da área de computação nem dêem a devida importância para desenvolver suas habilidades de escrita por julgarem não ser tão importante, após a leitura do resumo ficará claro que esse é um pensamento errado e que deve ser combatido.

obs: Essa será a última postagem que vou realizar antes do Natal, portanto desde já desejo um feliz natal repleto de muita fartura e alegrias a todos os leitores.

- Ilustração do post: Alexandre Araújo - Estúdio Chanceler



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º. 04

Os artigos estudados referem-se a maneiras de escrever melhores artigos em um âmbito geral e também especificamente no campo da ciência da computação.

Geralmente boa parte dos estudantes e profissionais da área de computação não têm muita afinidade com a escrita. Muito desse mau costume deve-se a falta de prática da escrita ou mesmo pelo desinteresse em escrever bons textos. Desde a graduação, muitos alunos de computação deixam de dar valor a qualidade dos textos que produzem por julgarem ser desnecessário ter tal habilidade bem desenvolvida para exercerem seus futuros cargos como profissionais de computação. Essa visão é completamente errada, pois é pura ilusão achar que o profissional de computação passará todo seu tempo sentado ao computador apenas programando. Profissionais de computação atuam em atividades que requerem habilidades de comunicação e conseqüentemente escrita, como levantamento e descrição de requisitos, elaboração de projetos, documentação clara de software, elaboração de manual do usuário, atas de reuniões e etc. Sendo assim, dependendo do cargo exercido pelo profissional de computação, pode ser que ele passe muito mais tempo executando atividades que envolvem a escrita do que programando por exemplo.

Nesse sentido, fica claro que além de habilidades computacionais, é muito importante também ter habilidades em escrita para um profissional de computação ser bem sucedido em sua carreira corporativa.

No artigo [3], os autores relataram um projeto voltado para quebrar essa barreira que alunos ainda não graduação costumam ter de que é desnecessário ter habilidades em escrita para ser um bom profissional em computação e a partir do uso de taxonomias de escrita e conselhos gerais, passaram preparar melhor os alunos no que diz respeito a escrita para ensino, comunicação acadêmica e profissional. Várias atividades de escrita foram destinadas aos alunos, sendo que estas utilizavam um modelo estrutural de redação pré-estabelecido que juntamente com o apoio do Centro de escrita da Universidade, permitiu que os alunos se concentrassem principalmente em aprendizagem e análise, em vez de organização e conteúdo.

Para alunos de mestrado e doutorado, escrever bem tem uma importância ainda maior. Dentre os vários critérios utilizados para avaliação de planos de pós-graduação no Brasil, 50% está envolvido diretamente com a produção científica do mesmo. Sendo assim, quanto mais publicações em revistas e conferências de alto nível um plano tiver, maiores serão suas chances de ser avaliado com notas altas e conseqüentemente ter acesso a uma quantidade de recursos financeiros maiores. Quanto mais recursos têm um plano de pós-graduação, mais ele pode investir no seu pessoal e equipamentos, que logo tendem a resultar em pesquisas melhores.

Somente bons artigos submetidos a veículos de alto nível conseguem ser publicados, e para melhorar a qualidade dos artigos escritos, várias dicas foram apresentadas nas leituras realizadas. De maneira geral, os artigos escritos devem ser claros e objetivos, possuírem uma boa revisão bibliográfica de trabalhos relacionados, apresentarem o problema que propõem solucionar, a relevância de tal problema e de forma bem fundamentada apresentar suas reais contribuições para solucionar o problema proposto, assim como o que difere tal contribuição das já realizadas em trabalhos anteriores.

Um método interessante para escrever artigos foi apresentado em [1]. Chamado de método de escrita por Scripts, esse método basicamente divide o processo de criação de um artigo em quatro etapas, sendo que após a realização de cada uma delas, o texto fica cada vez mais detalhado e refinado, estando praticamente pronto após a realização da ultima etapa. Na primeira etapa desse método é criado o chamado Outline, que é basicamente a estrutura do artigo proposto, ficando definidas assim as seções e subseções que compõe o mesmo. Na segunda etapa é feito o chamado Script 1, onde em cada seção e subseção definida no Outline, são enumerados pontos chaves que serão detalhados na terceira etapa do método. Esses pontos são frases curtas e claras. Na terceira etapa é feito o Script 2, que nada mais é do que o detalhamento dos pontos estabelecidos da etapa anterior, colocando uma marcação entre chaves ao final de cada um deles. A quarta e última etapa basicamente é composta pela retirada das marcações feitas no Script 2 e nas adaptações para dar sentido ao texto final.

Todas essas questões que relatei até o momento são voltadas para aspectos técnicos de um artigo de qualidade, porém alguns aspectos não-técnicos também necessitam de atenção para evitar que bons artigos sejam rejeitados após submissão. Alguns aspectos não-técnicos que valem ressaltar são:

  • Verificar se o artigo obedece à formatação exigida pela revista/conferência no qual será submetido;
  • Verificar se a revista/conferência para a qual o artigo será submetido é apropriada;
  • Usar sempre vocabulário formal;
  • Certificar-se de que todas as figuras e tabelas do artigo estão legíveis;
  • Cuidar para que o texto esteja claro;

Cada avaliador pode utilizar de critérios pessoais para avaliar um artigo submetido, porém de formas gerais, os aspectos técnicos e não técnicos que citei são sempre levados em consideração. Depois de realizada as avaliações, sempre os avaliadores fazem considerações que são muito valiosas para uma melhor adequação do artigo proposto, portanto essas considerações merecem muita atenção por parte dos autores.

Após a leitura dos artigos ficou claro que escrever bem é tão importante para o profissional de computação quanto pra profissionais de outras áreas. Independente da escolha pelo meio acadêmico ou corporativo, sempre os profissionais de computação serão exigidos com relação a suas habilidades de escrita e a falta de tais habilidades poderá influenciar negativamente em suas carreiras.

Referências

[1] BRAGANHOLO, V., HEUSER, C., REIS, A. (2004) “Redigindo artigos de Ciência da Computação: uma visão geral para alunos de mestrado e doutorado”, In: WTDBD - Workshop de Teses e Dissertações em Banco de Dados, Brasília, Brasil

[2] Mary Shaw, "Writing Good Software Engineering Research Papers," Software Engineering, International Conference on, p. 726, 25th International Conference on Software Engineering (ICSE'03), 2003

[3] Dugan, R. F. and Polanski, V. G. 2006. Writing for computer science: a taxonomy of writing tasks and general advice. J. Comput. Small Coll. 21, 6 (Jun. 2006), 191-203.

[4] R. Levin and D. D. Redell. An evaluation of the ninth sosp submissions or how (and how not) to write a good systems paper. Operating Systems Review, 17(3):35--40, July 1983.

quarta-feira, 15 de dezembro de 2010

E a mesma história se repete...

Essa semana tive a oportunidade de assistir ao filme "The Social Network", ou "A Rede Social", que refere-se a história da criação do Facebook.

Confesso que tive uma surpresa agradável com o filme, pois geralmente sou meio oposto as críticas e como li algumas elogiando-o muito antes de assistir, imaginei que não seria tão bom. Alguns críticos já estão inclusive classificando o filme como um clássico do cinema contemporâneo, não sei se é pra tanto, mas de fato é um excelente filme.

Para quem ainda por ventura não ouviu falar sobre o filme (de que planeta você é?), ele está em cartaz nos cinemas brasileiros desde 3 de dezembro e foi indicado hoje a 6 globos de ouro. O filme basicamente conta a história da criação da rede social com maior número de usuários do mundo, o Facebook. É uma história repleta de reviravoltas e traições, envolvendo mulheres, drogas, muita astúcia e ganância. O filme  foi baseado na história real contada no livro "Bilionários por acaso: A criação do Facebook", escrito por Ben Mezrich.

Como o objetivo dessa postagem não é contar a história do filme, mas sim discutir questões a respeito da forma como o Facebook foi criado, vou contar apenas uma dose homeopática para efeito de contextualização. Tudo se passa em Harvard onde inicialmente os irmãos Cameron Winklevoss e Tyler Winklevoss tiveram a idéia de desenvolver um site de relacionamentos nos moldes de uma rede social, entretanto não tinham habilidades em programação para desenvolverem essa idéia. Sendo assim eles buscam por Mark Zuckerberg, jovem programador estudante também de Harvard, para compartilharem tal idéia e formarem uma parceria para a criação do site de relacionamentos. Zuckerberg topa de cara participar, entretanto passa a perna nos irmãos Winklevoss e inicia em 2004 o desenvolvimento do Facebook. Em pouquíssimo tempo o Facebook foi se espalhando pelas universidades americanas e posteriormente pelo mundo, porém para um projeto iniciado no alojamento de uma universidade tomar tais proporções, alguém teria que oferecer aparato financeiro para tal, e esse alguém foi Eduardo Saverin, brasileiro estudante de economia e melhor amigo de Zuckerberg.

Embora Eduardo a Mark fossem melhores amigos, quanto mais o Facebook foi expandindo, maior era a ganância de Mark pelo dinheiro. Sob influência de Sean Parker, co-fundador do Napster, que também passou a ter participações no Facebook, Eduardo foi forçado a assinar contratos tendenciosos que acabaram por praticamente retirar seus direitos na empresa, embora tenha sido quem mais injetou dinheiro na criação da mesma.

Resumidamente o que aconteceu em toda essa história: Duas pessoas tiveram uma idéia, alguém roubou a idéia e se junta outro que financiou a mesma. No final quem roubou a idéia inicial passa a perna em quem financiou e fica com toda a fatia do bolo, acumulando uma fortuna estipulada em 25 bilhões de dólares em apenas 6 anos!

Coincidências ou não, essa história nos faz lembrar de outras grandes empresas de tecnologia como Microsoft e Apple, que hoje são símbolos, entretanto iniciaram suas histórias também a partir de idéias roubadas e posteriormente aperfeiçoadas. Será que para ter uma empresa de tecnologia desse porte é necessário ser tão antiético? Bom...isso já é história para outra postagem.

O que mais me surpreende nessa história toda é o fato de tantas empresas de base tecnológica surgirem na academia americana (Google, Facebook, Yahoo!, Microsoft, Apple..etc) e conseguirem uma penetração tão grande na sociedade mundial e países do porte do Brasil não conseguirem alcançar feitos semelhantes. Será que eles são tão mais inteligentes assim? Sinceramente não acredito que seja esta a questão. 

Ainda falta muito incentivo ao desenvolvimento tecnológico e fomento a inovação no nosso país, pensa-se muito pequeno. Enquanto que nos EUA um moleque de 19 anos consegue ficar bilionário com um projeto iniciado no alojamento da sua universidade, no Brasil alguém com tal ambição seria considerado louco atualmente... Essas coisas acabam enraizando na nossa sociedade, desencorajando inclusive mentes de muito potencial, fazendo-as também pensar pequeno e assim não chegarem a níveis como os citados anteriormente.

Não sou dono da verdade e acredito que opiniões divergente às minhas podem acabar surgindo por aqui, mas o objetivo é esse mesmo, debater. Sintam-se a vontade em comentar.

Como aperitivo, assistam ao trailer de "A Rede Social":



terça-feira, 30 de novembro de 2010

Discussão: Plágio em publicações científicas

Dando continuidade às nossas discussões científicas, hoje a postagem trata de um tema realmente polêmico e controverso: Plágio.

Embora não seja um tema novo, o resumo trata de alguns pontos específicos da ocorrência do mesmo que acabam sendo interessantes para formação de senso crítico a respeito.

Façam bom proveito da leitura e fiquem a vontade para comentar!

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º. 03

Os artigos estudados referem-se à ocorrência de plágio. Embora essa prática possa ocorrer em qualquer espécie de obra que envolva direitos autorais, os artigos referem-se mais especificamente a ocorrência dessa prática em publicações científicas.

De maneira geral, plágio significa tomar posse de uma criação da qual os direitos autorais pertencem à outra pessoa e passar-se como criador da mesma. O plágio em publicações científicas pode se manifestar de várias formas, como a cópia integral ou parcial de uma obra e cópia de elementos de uma obra sem citar os devidos autores originais. Alguns autores também cometem plágio mesmo citando as fontes originais, pois acabam não deixando claro o que é de sua autoria e o que está sendo referenciado, podendo acabar assim se passando como autor de algo que ele não fez de fato.

O ato de plagiar uma obra fere conceitos legais e éticos do meio científico, porém a partir da leitura dos artigos, é possível perceber que a prática do auto-plágio no meio acadêmico é um tanto quanto comum. O auto-plágio nada mais é do que aproveitar trabalhos anteriores integralmente ou parcialmente, e republicá-los sem fazer citação, fazendo assim os mesmos se passarem por trabalhos inéditos. Muitos problemas podem ser gerados a partir dessa prática, como por exemplo, visões distorcidas da sociedade em relação à forma como o capital investido em pesquisa é aplicado e desconforto no meio acadêmico por profissionais que não republicam seus trabalhos serem menos valorizados que outros que teoricamente produzem mais, porém estão repetindo publicações.

As vezes é um pouco confuso pensar que um pesquisador não tem o direito de reaproveitar seus próprios trabalhos para de repente enriquecerem o contexto de trabalhos futuros, porém, muitas revistas tornam-se detentoras dos direitos autorais de um trabalho quando o mesmo é publicado por ela. Nesse sentido, o reaproveitamento descontrolado de um trabalho, mesmo que tenha sido feito pelo próprio autor, acaba gerando um problema legal, pois o mesmo não é mais dono dos seus direitos.

O reaproveitamento de trabalhos anteriores em publicações futuras é permitido e pode inclusive ser uma prática saudável para contextualizar os novos trabalhos, porém qual é o limite de reaproveitamento? Não existe uma norma geral para isso. Nos próprios artigos estudados vimos medidas diferentes para o nível permitido de reaproveitamento, segundo [2], pelo menos 25% da publicação deve ser inédita para não configurar plágio. Já segundo [3], usualmente é utilizada a “regra dos 30%”, onde é permitido um reuso de até 30% de uma publicação anterior.

É muito complicado estabelecer e mensurar tais valores, afinal de contas isso tudo acaba sendo um fator muito pessoal, sendo que determinados avaliadores podem achar que um trabalho está plagiando outro, enquanto outros avaliadores mais maleáveis enxergam por outra ótica.

Outro fator que acaba facilitando a ocorrência de plágio é a falta de punições severas. Dentre as possíveis punições que vimos nos artigos, a maioria são punições brandas, como por exemplo, cartas de retratação admitindo o erro cometido.

Não há problema em reutilizar trechos de trabalhos anteriores que sejam relevantes a trabalhos futuros, porém o que fica ruim são os abusos cometidos por alguns autores para ganharem volume de publicação. É de certo ponto até desagradável ler artigos diferentes de um mesmo autor tendo a sensação de que aquilo já foi lido anteriormente. Dentre os artigos estudados no Resumo 2, podemos exemplificar essa sensação com algumas publicações do Victor Basili. Em todos os seus artigos estudados, curiosamente o autor que ele mais cita é ele próprio e muitas das coisas que ele escreveu nesses artigos são claramente idênticas a de outros artigos de sua autoria, como é o caso dos artigos [5] e [6], onde trechos consideráveis dos mesmos são idênticos, sem ao menos mudar uma palavra e não existe citação de [6] para [5].

Quando a reutilização é considerada legal e ética, a mesma não traz problemas a ninguém, porém quando ela é considerada ilegal e/ou antiética, passa a ser tratada como plágio. Mesmo no meio acadêmico, as opiniões a respeito do que é ético e o que não é variam muito, como ficou claro em [2], portanto fica muito complicado fazer esse tipo de classificação. Essa falta de padronização de critérios e punições acaba dando abertura para a ocorrência de plágios e ao menos que seja dada uma maior atenção a esses pontos, essa prática continuará acontecendo tanto no meio acadêmico, quanto no meio de desenvolvimento de software e demais meios.

Referências

[1] ACM policy and procedures on plagiarism, October 2005.

[2] Collberg, C. and Kobourov, S. 2005. Self-plagiarism in computer science. Commun. ACM 48, 4 (Apr. 2005), 88-94. DOI= http://doi.acm.org/10.1145/1053291.1053293

[3] Samuelson, P. 1994. Self-plagiarism or fair use. Commun. ACM 37, 8 (Aug. 1994), 21-25. DOI= http://doi.acm.org/10.1145/179606.179731

[4] Siponen, M. T. and Vartiainen, T. 2007. Unauthorized copying of software: an empirical study of reasons for and against. SIGCAS Comput. Soc. 37, 1 (Jun. 2007), 30-43. DOI= http://doi.acm.org/10.1145/1273353.1273357

[5] 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

[6] 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.

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