Projeto de Pesquisa Área de Conhecimento: Ciências Exatas e da Terra Sub-área de Conhecimento: Ciência da Computação Especialidade: Metodologia e Técnicas da Computação Engenharia de Software Uma Agenda de Pesquisa para a Engenharia de Software Baseada em Buscas Heurísticas Márcio de Oliveira Barros Programa de Pós-Graduação em Informática PPGI Universidade Federal do Estado do Rio de Janeiro UNIRIO Rio de Janeiro, Brasil
Resumo: O campo de pesquisa conhecido como Engenharia de Software Baseada em Buscas aborda problemas da Engenharia de Software modelando-os como problemas de otimização. Com isto, a resolução de um problema passa a ser vista como a busca por uma solução suficientemente boa entre as suas possíveis soluções, de acordo com uma métrica de adequação. Este novo prisma para o estudo das questões da Engenharia de Software permite resolver problemas de larga escala, cuja solução não pode ser encontrada em tempo computacionalmente viável por outros métodos. Neste projeto de pesquisa propomos uma agenda para o estudo e aprimoramento da Engenharia de Software Baseada em Buscas. Esta agenda de pesquisa começou a cerca de dois anos, quando o coordenador do projeto ora proposto começou a realizar suas primeiras pesquisas no campo. Este projeto de pesquisa pretende capitalizar e transmitir o conhecimento adquirido no campo, realizando estudos que visam duas direções: (a) a identificação de problemas que sejam passíveis de solução através da Engenharia de Software Baseada em Buscas; e (b) a criação de novos algoritmos baseados em meta-heurísticas e metáforas e que sejam aplicáveis a problemas reais da Engenharia de Software. Além de apresentar a agenda de pesquisa em detalhes, este projeto relata o histórico de pesquisas do seu coordenador, relacionando os alunos de Mestrado previamente orientados, os projetos de pesquisa para os quais obteve financiamento e seus relacionamentos com Centros de Excelência em ensino e pesquisa no Estado do Rio de Janeiro. 1. Introdução Algoritmos de busca baseados em otimização têm sido aplicados em diversas áreas da Engenharia de Software, como a elicitação de requisitos [1], planejamento de tempo e custo de projetos [2, 3, 4, 5, 6, 7], avaliação de qualidade [8] e alocação de recursos humanos [9].
Em algumas destas aplicações são utilizadas técnicas tradicionais de busca, como força bruta ou branch-and-bound [10]. No entanto, à medida que os problemas crescem em complexidade (ou seja, no número de variáveis envolvidas e nas relações entre estas variáveis), as técnicas tradicionais passam a exigir muitos recursos computacionais (essencialmente, tempo de processamento) para encontrar a solução ótima para estes problemas. Assim, a utilização destas técnicas em situações onde a resposta deve estar rapidamente disponível ou onde existem atualizações freqüentes das informações disponíveis para a tomada de decisão, exigindo a reavaliação constante do problema, é limitada por seu longo tempo de execução. Por outro lado, estas situações são comuns no desenvolvimento de software, onde os requisitos mudam com freqüência, a equipe sofre de rotatividade de pessoal, a percepção de conclusão das tarefas componentes do projeto varia ao longo do tempo e a produtividade dos desenvolvedores depende de fatores que fogem ao controle do gerente de projetos. Estes, entre outros aspectos, fazem com que os parâmetros de alguns problemas da Engenharia de Software sejam dinâmicos, ou seja, seus valores mudam ao longo do tempo e as estratégias escolhidas para solucionar os problemas precisam ser constantemente revistas para que se determine se continuam ótimas face às últimas informações disponíveis. Assim, diversos problemas de Engenharia de Software podem ser vistos como problemas de otimização, mas o tempo de resposta das técnicas tradicionais que resolvem estes problemas, quando vistos em larga escala, pode não ser suficientemente rápido para atender às freqüentes reavaliações exigidas pelos casos reais. Surge então o campo da Engenharia de Software Baseada em Buscas (Search Based Software Engineering, ou SBSE) [11], onde os pesquisadores modelam problemas da Engenharia de Software como problemas de otimização e utilizam técnicas de busca para resolver estes problemas 1. Duas correntes se formam dentro do campo de pesquisa: a primeira utiliza técnicas tradicionais de otimização, ocupando-se com a identificação dos aspectos que devem ser considerados na modelagem e na resolução de problemas onde não 1 A Engenharia de Software é a área da Ciência da Computação e Sistemas de Informação onde concentro minhas atividades de pesquisa e desenvolvimento. A Engenharia de Software Baseada em Buscas é um campo de pesquisa dentro desta área.
ocorre a atualização freqüente das informações que servem de parâmetro para o processo de otimização; a segunda corrente utiliza técnicas de busca mais eficientes, geralmente baseadas em meta-heurísticas, para encontrar soluções suficientemente boas em um menor horizonte de tempo, permitindo a sua utilização nos cenários supracitados. Este projeto tem como objetivo viabilizar a realização de uma agenda de pesquisa no campo da Engenharia de Software Baseada em Buscas. Esta agenda de pesquisas tem como principais objetivos (a) desenvolver o conhecimento sobre o campo, aplicando técnicas já conhecidas sobre novos problemas; (b) criar novas técnicas para resolver problemas da Engenharia de Software para os quais as técnicas existentes não se apliquem; e (c) formar e capacitar recursos humanos para que a pesquisa e o uso de tais técnicas possa se expandir no meio acadêmico e na indústria. A filosofia do software livre [12] nos oferece uma oportunidade inédita na história da Ciência da Computação para identificarmos problemas relacionados a grandes projetos de software e que podem se beneficiar das novas abordagens apresentadas pela SBSE. Muitos destes projetos são desenvolvidos através de meios de comunicação públicos, com o código-fonte aberto e troca de mensagens exposta para a comunidade. Assim, pretendemos utilizar as informações provenientes de sistemas de gerenciamento de versão de software e de sistemas de registro e encaminhamento de erros (issue tracking systems) para identificar problemas que podem ser resolvidos usando-se técnicas da SBSE, além de validar a efetividade destas técnicas na resolução destes problemas. 2. Justificativa para Escolha do Tema Duas razões fundamentam a escolha da Engenharia de Software Baseada em Buscas como área de interesse do projeto ora proposto. São elas: (a) o fato de a SBSE ser considerada internacionalmente como um campo promissor em termos de pesquisa em Engenharia de Software; (b) o fato do coordenador do projeto ter experiência na realização de trabalhos anteriores neste campo, o que facilitará o desenvolvimento de novos trabalhos.
Nas próximas subseções apresentamos evidências que sustentam os dois pontos acima, visando reforçar a importância do tema deste projeto de pesquisa. 2.1. Justificativa da importância do campo no contexto da Engenharia de Software Dentro do universo de pesquisa da Engenharia de Software, a importância do campo da Engenharia de Software Baseada em Buscas pode ser observada por diversos fatos: A publicação do artigo The Current State and Future of Search Based Software Engineering [13] nos anais do workshop denominado The Future of Software Engineering. Este workshop se repete periodicamente junto à principal conferência internacional da área de Engenharia de Software, a ICSE International Conference on Software Engineering. O workshop consiste em uma discussão aberta entre renomados pesquisadores que atuam na área de Engenharia de Software, com o intuito de sinalizar os problemas que ainda precisam ser resolvidos e os campos mais promissores em termos de pesquisa. O artigo supracitado foi publicado na edição de 2007 do workshop, evidenciando a recente atenção dada ao campo e a necessidade de mais pesquisas; Em contexto nacional, o alinhamento do campo de SBSE com o segundo dos 5 Grandes Desafios da Pesquisa em Computação no Brasil [14]. O segundo desafio consiste na modelagem computacional de sistemas complexos artificiais, naturais e sócio-culturais e da interação homem-natureza. A Engenharia de Software Baseada em Buscas é um exemplo de abordagem na qual aplicamos e desenvolvemos soluções para problemas de larga escala, geralmente envolvendo interação entre desenvolvedores na formação de equipes responsáveis pelo desenvolvimento de sistemas de software. As técnicas desenvolvidas para a resolução de problemas neste campo também poderão ser aplicadas a problemas semelhantes em outras áreas do conhecimento. Assim, recursos humanos capacitados a resolver problemas neste campo estarão preparados para resolver problemas semelhantes em outras áreas, caracterizando a SBSE como campo de pesquisa aplicada e de interesse para formação de pessoal (um dos objetivos centrais deste projeto de pesquisa);
A existência de chamadas de trabalho recentes para o campo de pesquisa. Entre estas chamadas, duas merecem destaque especial: (a) a edição especial da revista IEEE Transactions on Software Engineering, principal revista para publicações na área de Engenharia de Software, voltada para soluções desenvolvidas segundo os preceitos do campo de Engenharia de Software Baseada em Buscas [15]; e (b) a realização do primeiro International Symposium on Search Based Software Engineering, em maio do próximo ano, na Inglaterra [16]. A criação de uma conferência voltada exclusivamente para o campo de pesquisa e a publicação de uma edição especial da principal revista da área voltada para SBSE depõem pela importância deste campo no contexto das pesquisas em Engenharia de Software. Com os fatos acima pretendemos frisar a importância do tema de pesquisa proposto neste projeto. Na próxima subseção, mostraremos a experiência prévia do coordenador do projeto neste campo de pesquisa, buscando mostrar a viabilidade do projeto proposto. 2.2. Justificativa das atuações do coordenador do projeto no campo Em relação a trabalhos anteriormente desenvolvidos no campo de pesquisa em que se enquadra o projeto ora proposto, cito o trabalho de Ahilton Barreto, meu ex-aluno de Mestrado [17], orientado no Programa de Engenharia de Sistemas e Computação da COPPE/UFRJ [18]. O aluno trabalhou com o problema de alocação de recursos humanos a atividades que devem ser realizadas ao longo de um projeto de software. A alocação de recursos humanos é uma tarefa cuja complexidade aumenta exponencialmente à medida que aumenta o número de pessoas envolvidas e atividades a serem desenvolvidas no projeto. Neste trabalho, foi desenvolvida uma abordagem de apoio à alocação de pessoal em projetos de software baseada na utilização racional das capacidades destes recursos e na otimização da alocação destas capacidades com relação às demandas das atividades a ser desenvolvidas no projeto. O problema da alocação de recursos humanos envolve um conjunto de profissionais e um conjunto de atividades. Cada profissional possui uma série de características (habilidades, conhecimentos, experiências, certificações, etc), cada qual com uma determinada
intensidade (por exemplo, grande conhecimento em banco de dados, noções de linguagens de programação, etc). Cada atividade, por sua vez, exige um conjunto de capacidades, ou seja, quais características um profissional precisa possuir para executar a tarefa com eficiência. Com base nestes dados, o problema da alocação de recursos humanos implica em atribuir um profissional a cada atividade, levando em consideração as seguintes regras: (i) para que um profissional seja atribuído a uma atividade, ele precisa possuir todas as características exigidas pela atividade em intensidade igual ou superior ao exigido; e (ii) para que um profissional seja atribuído a uma atividade A, este não pode estar alocado a outra atividade B no período em que a atividade A será executada. Este problema foi modelado como um problema de satisfação de restrições e resolvido utilizando técnicas do corpo de interesse da Engenharia de Software Baseada em Buscas, como branch and bound, backtracking, forward checking, most constrained variable, entre outras [10]. Os resultados deste trabalho foram apresentados em três artigos, sendo um em conferência internacional [19], outro em conferência nacional [20] e um terceiro em revista internacional [9]. 3. Método O trabalho proposto neste projeto será realizado nas dependências da Escola de Informática Aplicada (EIA) da Universidade Federal do Estado do Rio de Janeiro (UNIRIO), mais precisamente no laboratório de pesquisas da linha de Sistemas de Apoio a Negócios do Programa de Pós-Graduação em Informática (PPGI) da UNIRIO. A equipe que participará do projeto será composta pelo coordenador do projeto, Prof. Márcio Barros, e por seus alunos de Mestrado atuais e futuros. O Prof. Márcio Barros é professor adjunto nível III da Escola de Informática Aplicada da UNIRIO (EIA/UNIRIO) e do Programa de Pós-Graduação em Informática da UNIRIO (PPGI/UNIRIO), além de pesquisador nível 2 pelo CNPq. Este projeto de pesquisa será concretizado através de Dissertações de Mestrado desenvolvidas e defendidas por alunos do PPGI/UNIRIO orientados pelo coordenador do projeto. Algumas destas dissertações já se encontram em andamento, mas o projeto propõe
uma agenda de pesquisa que contempla, além dos desenvolvimentos em andamento, a aceitação de novos alunos para desenvolver outras pesquisas no campo da SBSE. Prevemos que pelo menos cinco alunos realizarão pesquisas neste campo ao longo dos três anos de projeto, sendo que dois alunos já estão efetivamente envolvidos. O método de pesquisa, que será comum a todas as Dissertações de Mestrado, é composto por quatro etapas com uma variante. A primeira etapa consiste na identificação de um problema da Engenharia de Software que ocorra em projetos de larga escala e que possa ser descrito como um problema de otimização. Na busca por estes problemas, examinaremos repositórios de projetos de software livre e, sempre que tivermos a oportunidade, repositórios de projetos desenvolvidos por empresas da indústria de software do Rio de Janeiro. Conforme citado anteriormente, o uso de software livre viabiliza as pesquisas no campo, dado que estas precisam ser conduzidas com dados reais de projetos de software e a indústria nem sempre é capaz de fornecer estas informações. A segunda etapa consiste na modelagem do problema que será alvo de estudo, descrevendoo formalmente e sem ambigüidades. Consideramos que esta etapa é a mais importante do ponto de vista de formação de recursos humanos, pois envolve a transmissão do conhecimento e da intuição sobre como os problemas da Engenharia de Software podem ser descritos formalmente aos alunos de Mestrado. De posse deste conhecimento, os alunos poderão aplicar a mesma filosofia em outras áreas do conhecimento. Esta estratégia é ainda mais interessante quando aplicada aos alunos do PPGI/UNIRIO, que geralmente não têm dedicação integral ao curso de Mestrado e podem levar o conhecimento adquirido imediatamente para seu local de trabalho. Atualmente, os alunos envolvidos em pesquisas no campo de SBSE trabalham na indústria do petróleo e de policarbonetos. A terceira etapa do método de pesquisa consiste em caracterizar o problema identificado (na primeira etapa) e modelado (na segunda etapa) como um problema clássico de busca da Computação e da Pesquisa Operacional, tal como o problema da mochila [21], de escalonamento em processadores simétricos [22] ou do caixeiro viajante [23]. Em se caracterizando o problema em questão segundo um destes problemas clássicos, teremos um ponto de partida para a escolha e adaptação de uma ou mais técnicas de busca baseadas em
meta-heurísticas para solucionar o problema. Na ausência de identidade com um problema clássico, o método segue sua variante, onde desenvolveremos um método de busca heurística próprio para o problema. Atualmente, considerando os dois alunos de Mestrado envolvidos com pesquisas no campo da SBSE, temos um aluno atacando um problema de escalonamento utilizando técnicas clássicas (o problema da alocação de recursos humanos a resolução de defeitos em projetos de larga escala, que será descrito em maiores detalhes na seção 5) e um aluno desenvolvendo uma técnica de busca inovadora, que denominamos campo de forças, própria para um problema de clusterização da Engenharia de Software (a identificação automática de pacotes de classes no projeto de um sistema, que também será descrita em maiores detalhes na seção 5). Finalmente, na quarta e última etapa do método de pesquisa pretendemos realizar estudos experimentais com a solução proposta (na terceira etapa) para os problemas identificados (na primeira etapa). A estratégia de experimentação poderá variar de acordo com o tratamento dado ao problema em questão: se forem identificadas duas ou mais possíveis soluções para o problema, podemos realizar estudos experimentais comparando as alternativas; se o objeto de estudo for um sistema de software livre ou com histórico conhecido, podemos comparar a evolução pretendida em um instante de tempo com a observada posteriormente; se o objeto de estudo for um sistema industrial, podemos entrevistar a equipe de desenvolvimento ou o gerente do projeto, levantando informações sobre os resultados da aplicação da solução proposta. Enfim, os detalhes de aplicação dos estudos experimentais terão que ser desenvolvidos ao longo do projeto de pesquisa. 4. Bibliografia relacionada ao projeto [1] BAGNALL, A., RAYWARD-SMITH, V., WHITTLEY, I. 2001, The next release problem, Information and Software Technology, 43 (14): pp. 883-890 [2] AGUILAR-RUIZ, J., RAMOS, I., RIQUELME, J.C., TORO, M., 2001, An Evolutionary approach to estimating software development projects, Information and Software Technology, 43 (14): pp. 875-882
[3] ANTONIOL, G., DI PENTA, M., HARMAN, M., 2004, A robust search-based approach to project management in the presence of abandonement, rework, error, and uncertainty, in Proceedings of the 10 th International Software Metrics Symposium (METRICS 2004), Los Alamitos, CA, USA, pp. 172-183 [4] ANTONIOL, G., DI PENTA, M., HARMAN, M., 2005, Search-based techniques applied to optimization of project planning for a massive maintenance project, in Proceedings of the 21 th IEEE International Conference on Software Maintenance, Los Alamitos, CA, USA, pp. 240-249 [5] BURGESS, C.J., LEFLEY, M., 2001, Can genetic programming improve software effort estimation?, Information and Software Technology, 43 (14): pp. 863-873 [6] DOLADO, J.J., 2000, A validation of the component-based method for software size estimation, IEEE Transactions on Software Engineering, 26 (10): 1006-1021 [7] KIRSOPP, C., SHEPPERD, M., HART, J., 2002, Search heuristics, case-based reasoning and software project effort prediction, in Proceedings of the Genetic and Evolutionary Computation Conference, San Francisco, CA, USA, pp. 1367-1374 [8] KHOSHGOFTAAR, T.M., YI, L., SELIYA, N., 2004, A multiobjective module-error model for software quality enhancement, IEEE Transactions on Evolutionary Computation, 8 (6): 593-608 [9] BARRETO, A., BARROS, M., WERNER, C.M.L., 2008, Staffing a software project: a constraint satisfaction and optimization-based approach, Computers and Operations Research, Special Issue on Search Based Software Engineering, 35 (10), pp. 3073-3089, ISSN 0305-0548 [10] LAWLER, E.L., WOOD, D.E., 1966, Branch-and-bound methods: a survey, Operations Research, 14 (4), pp. 699-719 [11] HARMAN, M., JONES, B.F., 1990, Search-based software engineering, Information & Software Technology, 43, pp. 833-839 [12] RAYMOND, E., 2001, The Cathedral & The Bazaar: Musings on Linux and Open Source by na Accidental Revolutionary, O'Reilly Media, Inc., ISBN 0596001088
[13] HARMAN, M., 2007, The Current State and Future of Search Based Software Engineering, In Proceedings of the Future of Software Engineering Workshop, Minneapolis, USA [14] CARVALHO, A.C.P.L. et al, 2006, Grandes Desafios da Pesquisa em Computação no Brasil: 2006 2016, Relatório sobre o seminário homônimo, disponível em http://www.sbc.org.br/index.php?language=1&content=downloads&id=272 [15] HARMAN, M., MANSOURI, A., 2008, Search-Based Optimization for Software Engineering, Call for Papers to the IEEE Transactions on Software Engineering, disponível em http://www.computer.org/portal/cms_docs_transactions/transactions /tse/cfp/tse-sbse.pdf, último acesso em setembro/08 [16] SSBSE, 2009, 1 st International Symposium on Search Based Software Engineering, Call for Papers, disponível em http://www.ssbse.org, último acesso em setembro/08 [17] BARRETO, A., 2005, Alocação Ótima de Recursos Humanos a Projetos de Software, Dissertação de Mestrado em Engenharia de Sistemas e Computação, COPPE/UFRJ, Universidade Federal do Rio de Janeiro, Rio de Janeiro, Brasil [18] PESC, 2008, Programa de Engenharia de Sistemas e Computação, disponível em http://www.cos.ufrj.br, último acesso em setembro/08 [19] BARRETO, A., BARROS, M., WERNER, C.M.L., 2005, Staffing a software project: a constraint satisfaction approach, In Proceedings of the 7 th International Workshop on Economics-driven Software Engineering Research, St. Louis, MI, USA [20] BARRETO, A., BARROS, M.O., WERNER, C.M.L., 2005, Apoio à Alocação de Recursos Humanos em Projetos de Software: Uma Abordagem Baseada em Satisfação de Restrições. In: Anais do IV Simpósio Brasileiro de Qualidade de Software, Porto Alegre, Brasil. [21] MARTELLO, C., TOTH, P., 1990, Knapsack Problems: Algorithms and Computer Implementations. John Wiley & Sons. ISBN 0-471-92420-2. [22] GONÇALVES, J.F., MENDES, J.J.M., RESENDE, M.G.C., 2008, A genetic algorithm for the resource constrained multi-project scheduling problem, European Journal of Operational Research, 189, pp. 1171-1190
[23] AGGARWAL, A., COPPERSMITH, D., KHANNA, S., MOTWANI, R., SCHIEBER, B., 1997, The angular-metric traveling salesman problem, In Proceedings of 8 th Annual ACM-SIAM Symposium on Discrete Algorithms, ACM-SIAM, pp. 221-229