Leitura Baseada em Perspectiva: Visão do Projetista Orientada a Objetos Sômulo Nogueira Mafra [email protected] Orientador: Guilherme Horta Travassos [email protected] COPPE/UFRJ - Programa de Engenharia de Sistemas e Computação Universidade Federal do Rio de Janeiro Caixa Postal 68.511, CEP 21945-970, Rio de Janeiro – RJ – Brasil Nível: Mestrado Ano de Ingresso no Programa (formando): 2003 Ano de Ingresso no Programa (efetivo): 2004 Época Prevista de Conclusão: 04/2006 Aprovação da Proposta de Dissertação pelo Orientador: 11/2004 Resumo. O desenvolvimento orientado a objetos (OO), embora tenha alcançado relativo sucesso industrial, ainda apresenta desafios, como a condução de testes estruturais e a manutenção evolutiva. Nesse sentido, o uso de técnicas de leitura minimizaria esse problema, ao apoiar o desenvolvedor na aquisição do conhecimento sobre o problema descrito nos requisitos. Dessa forma, seria possível a correção de defeitos críticos no início do desenvolvimento e a construção de modelos iniciais de projeto OO, aumentando a qualidade do desenvolvimento. Assim, o objetivo do trabalho proposto é a definição e avaliação experimental de uma técnica que apóie a revisão de requisitos e a construção de modelos iniciais de projeto OO. Palavras-Chave: Verificação, validação e inspeção de software, Engenharia de requisitos, Técnicas orientadas a objetos, Qualidade de software, Aspectos empíricos para a engenharia de software. 1. Introdução Apesar do relativo sucesso alcançado na indústria de software durante a última década, a adoção do paradigma orientado a objetos (OO) parece ainda não ter contribuído de forma significativa para o aumento de produtividade e qualidade no desenvolvimento de software [Deligiannis et al. 2002]. O aclamado benefício do paradigma OO, que supostamente diminui o custo de manutenção evolutiva, não foi observado em [Hatton 1998]. Além disso, alguns aspectos intrínsecos do paradigma OO, como polimorfismo e generalização, dificultam a predição do caminho de execução do software OO, tornando a aplicação de testes estruturais um desafio [Lima e Travassos 2004]. Uma provável razão para esse problema pode estar relacionada à carência de técnicas que apóiem o engenheiro de software na extração do conhecimento sobre o problema descrito no documento de requisitos. Como conseqüência, modelos equivocados de projeto poderiam ser gerados, dificultando o entendimento e a posterior manutenção do software [Mafra e Travassos 2005]. Nesse sentido, técnicas de leitura de software [Shull et al. 2000] poderiam contribuir de forma satisfatória para a resolução desse problema, ao prover o engenheiro de software com um processo bem definido para a obtenção do entendimento necessário à execução de uma tarefa específica (ex.: revisão de requisitos, modelagem OO). Ao longo dos anos, diversas técnicas de leitura de software foram propostas com variados propósitos e avaliadas experimentalmente. Entretanto, não há registros de sua utilização para a construção de modelos de projeto OO de alto nível [Mafra e Travassos 2005]. Dessa forma, o objetivo do presente trabalho é propor uma técnica de leitura que apóie a obtenção do entendimento necessário para a execução das atividades de detecção de defeitos em documentos de requisitos, através da tentativa de construção de modelos iniciais de projeto OO. O uso de tal técnica, durante a revisão de requisitos, permitiria a remoção eficiente de defeitos críticos ao sistema, na fase onde eles são menos custosos de serem corrigidos [Lima e Travassos 2004], diminuindo o custo total do desenvolvimento. Além disso, o uso adequado da técnica a ser proposta forneceria ao engenheiro de software orientação sobre como modelar o sistema OO a partir dos requisitos, permitindo uma visão inicial da estrutura do projeto, que poderia ser utilizada no plano inicial de testes estruturais. A técnica a ser proposta será avaliada experimentalmente, tendo em vista seu refinamento e sua posterior utilização industrial. 2. Fundamentação Teórica O software, desde sua fase de concepção até sua descontinuação, necessita ser representado ou estar apoiado por algum tipo de documentação. Nesse sentido, a documentação do software contém valiosas informações sobre o desenvolvimento, sendo um importante mecanismo para passar informações ao longo do ciclo de vida de desenvolvimento [Shull 1998]. Em particular, o documento de requisitos exerce um papel fundamental no desenvolvimento de software, à medida que descreve as características e funções que o software deve possuir, além de servir como base para as etapas subseqüentes do ciclo de desenvolvimento [Davis e Zowghi 2004]. Entretanto, para executar satisfatoriamente uma determinada tarefa utilizando o documento de requisitos, o engenheiro de software necessita, primeiramente, extrair deste documento o entendimento necessário à resolução do problema em questão. Porém, muitas vezes as informações necessárias para a construção desse entendimento encontram-se dispersas e mascaradas por outras informações não relevantes no contexto da tarefa. Como conseqüência, o engenheiro de software poderia estar desperdiçando valioso esforço na leitura de aspectos não relevantes do documento [Shull et al. 2000]. Uma possível causa dessa falta de foco na leitura vem da constatação de que os engenheiros de software geralmente são ensinados a escrever artefatos de software; não a lê-los [Basili 1997]. A educação básica em ciência da computação privilegia a escrita de programas, enquanto as habilidades requeridas para a leitura adequada de um artefato são raramente ensinadas, sendo geralmente adquiridas por anos de experiência. A importância de um apoio à leitura dos requisitos pode ser justificada ainda pelo fato do engenheiro de software muitas vezes não participar das sessões de elicitação de requisitos; além disso, o conhecimento sobre o domínio do problema adquirido dos stakeholders pelos analistas durante essas sessões pode não estar documentado adequadamente nos requisitos. Assim, durante a leitura dos requisitos, exigir-se-ia um considerável esforço de interpretação por parte do engenheiro de software, aumentando drasticamente a probabilidade de propagação de defeitos. Diante desse quadro, pesquisadores começaram a se preocupar com a definição de técnicas que apoiassem a leitura satisfatória de requisitos de software [Ciolkowski et al. 2002]. Ao longo dos anos, a pesquisa envolvendo tais técnicas tem sido direcionada por resultados de estudos experimentais. À medida que novos estudos são executados, as técnicas vão sendo refinadas e novas hipóteses geradas. Assim, com o intuito de identificar o grau de conhecimento experimental existente sobre técnicas de leitura, conduzimos uma revisão sistemática [Mafra e Travassos 2005], cujo objetivo foi identificar, analisar e avaliar estudos experimentais envolvendo técnicas de leitura de documentos de requisitos escritos em linguagem natural com o propósito de caracterizá-las com respeito à usabilidade, eficiência na identificação de defeitos e efetividade1 na cobertura dos defeitos identificados do ponto de vista dos participantes dos estudos experimentais no contexto no qual os estudos foram executados. Os resultados obtidos encontram-se sumarizados na próxima seção. 3. Trabalhos Relacionados A revisão sistemática foi conduzida entre dezembro de 2004 e março de 2005. A seguir, descrevemos sucintamente as principais técnicas encontradas. Maiores detalhes sobre as técnicas podem ser encontrados em [Mafra e Travassos 2005]. DBR (Defect-Based Reading) - DBR [Porter e Votta 1994] representa uma família de técnicas de leitura para a detecção de defeitos em documentos de requisitos descritos em SCR [Heninger 1980], uma notação formal baseada em máquinas de estado. Cada técnica DBR pode ser projetada para focar uma determinada classe de defeitos específicos à notação SCR. No contexto da revisão conduzida não estivemos interessados em DBR, haja vista que o objetivo da revisão restringiu a pesquisa a requisitos descritos em linguagem natural. PBR (Perspective-Based Reading) - A leitura baseada em perspectiva (PBR) [Shull et al. 2000] representa uma família de técnicas de leitura elaborada inicialmente para a 1 Definimos efetividade como a quantidade de defeitos encontrados e eficiência como a quantidade de defeitos encontrados por unidade de tempo, por exemplo, hora de inspeção. detecção de defeitos em documentos de requisitos escritos em linguagem natural. PBR auxilia a tarefa de detecção de defeitos ao observar quais informações possuem maior relevância para os diferentes usuários do documento. Nesse sentido, PBR assegura que cada revisor avaliará o documento segundo uma determinada perspectiva ao fornecer um procedimento orientando-o a criar um modelo físico com base nos requisitos. Dessa forma, o revisor que assumisse a perspectiva de testador construiria um conjunto de casos de testes, utilizando a técnica de partição por equivalência, o revisor responsável pela perspectiva de projetista construiria um diagrama de projeto, utilizando técnica de análise estruturada e o revisor responsável pela perspectiva de usuário construiria um manual do sistema, utilizando técnica de modelagem de casos de uso. Durante a criação do modelo físico, revisores tentariam identificar os possíveis defeitos existentes, respondendo a um conjunto de questões ajustadas para cada passo do procedimento de criação do modelo. Caso os requisitos não forneçam informações suficientes para responder às questões, significa que não apóiam o usuário dos requisitos em suas tarefas, caracterizando a presença de potenciais defeitos. OORT's (Object-Oriented Reading Techniques) - OORT's [Travassos et al. 1999] representa uma família de sete técnicas de leitura que fornecem um procedimento para as revisões individuais dos diferentes diagramas e documentos de projeto orientado a objetos. O processo de leitura utilizando OORT's precisa ser em duas dimensões: leitura horizontal e vertical. Na leitura horizontal, diferentes diagramas de projeto são verificados para assegurar que estejam consistentes entre si. Na leitura vertical é necessária a validação entre os modelos de projeto e os requisitos do sistema, para assegurar que o projeto do sistema está correto com relação aos requisitos. UBR (Usage-Based Reading) - UBR [Thelin et al. 2004] é uma técnica de leitura que apóia a detecção de defeitos severos do ponto de vista do usuário, através da utilização de modelos de caso de uso. UBR pode ser aplicada no contexto de inspeções em todas as fases de desenvolvimento (requisitos, projeto, código etc) de um projeto específico. MBR (Metric-Based Reading) - MBR [Bernardez et al. 2004] é uma técnica de leitura para detecção de defeitos em modelos de casos de uso. A premissa assumida é que os valores de certas métricas de casos de uso podem ser vistos como potenciais indicadores de defeitos. Dessa forma, cada métrica apresenta uma faixa de valores onde, valores fora dessa faixa, seriam indícios de potenciais defeitos nos modelos de casos de uso. Na próxima seção, destacamos como os resultados dos estudos obtidos pela condução da revisão sistemática podem contribuir para a proposta do presente trabalho. 4. Caracterização da Contribuição A aplicação de técnicas de leitura poderia aumentar a qualidade no desenvolvimento de sistemas OO, ao prover o engenheiro de software com um processo bem definido de apoio à aquisição de conhecimento sobre o problema descrito nos requisitos. Através desse conhecimento adquirido sobre o problema, o engenheiro de software poderia detectar defeitos críticos para o sistema na fase onde eles são menos custosos de serem corrigidos: a fase de requisitos. Resultados obtidos em [Travassos et al. 1999], onde participantes aplicando a leitura vertical OORT’s comparando modelos de projeto OO com documentos de requisitos detectaram defeitos do tipo omissão de funcionalidades e fatos incorretos, reforçam essa idéia. Além disso, a aplicação adequada de uma técnica de leitura que explorasse os principais aspectos da análise OO, como classificação, colaboração e responsabilidades [Beck 1989], permitiria a construção de um modelo inicial de projeto OO de qualidade. Diante dos resultados obtidos da revisão sistemática conduzida, notamos a carência na literatura de técnicas de leitura que explorem a construção de modelos de projeto OO em sua aplicação [Mafra e Travassos 2005]. Estudos envolvendo a perspectiva de projetista adotada por PBR utilizaram técnicas de análise estruturada para construção de diagramas de fluxo de dados. Por sua vez, OORT’s e UBR, embora relacionadas a inspeções de modelos de projeto OO, não prevêem a construção de tais modelos no processo de inspeção. Devido à carência de técnicas de leitura relacionadas ao desenvolvimento OO, e aos resultados positivos da aplicação da técnica PBR observados nos estudos experimentais obtidos da revisão sistemática, passamos a considerar a definição de uma técnica PBR focando a visão do projetista OO um desafio de pesquisa interessante. Na próxima seção descrevemos a estratégia para a avaliação da técnica a ser proposta, enfatizando o estado atual do trabalho, além dos próximos passos a serem seguidos. 5. Avaliação dos Resultados Como forma de avaliar a técnica a ser proposta, pretendemos utilizar a metodologia para validação experimental de processos de software descrita em [Shull et al 2001]. De acordo com essa metodologia são previstos passos para a validação de tecnologias desde sua fase de concepção até sua aplicação industrial. Entretanto, a condução de um estudo experimental na indústria está fora do escopo deste trabalho. De acordo com essa metodologia, conduziremos, inicialmente, estudos experimentais de viabilidade a serem executados em ambiente acadêmico, utilizando estudantes universitários como participantes. O objetivo desses estudos não é a validação da técnica, mas sim a construção de um corpo de conhecimento que proveja indícios de que a técnica seja viável, em relação à detecção de defeitos, e plausível, no que se refere ao esforço de sua aplicação. Caso os resultados dos estudos de viabilidade sejam satisfatórios, demonstrando que a técnica proposta foi capaz de atingir os resultados esperados demandando razoável esforço, pretendemos conduzir estudos experimentais de observação. O objetivo desses estudos será avaliar a utilização da técnica do ponto de vista de seus usuários, analisando a forma como a técnica é aplicada. Dessa forma, seria possível a avaliação de potenciais pontos fracos e fortes da técnica proposta, tendo em vista seu provável refinamento. A condução desses estudos, além de possibilitar a avaliação da viabilidade de utilização da técnica, permitiria a geração de novas hipóteses para pesquisas futuras. A Figura 1 resume as etapas previstas para a condução do trabalho. ATIVIDADES JUN JUL AGO SET OUT Definição Inicial da Técnica Estudos de viabilidade Refinamento da Técnica Proposta Estudos de observação Figura 1 – Andamento do Trabalho em 2005/2006 NOV DEZ JAN 6. Considerações Finais A aplicação de técnicas de leitura pode ser útil na garantia da qualidade do software OO. Sua aplicação na inspeção de documentos de requisitos permitiria ao engenheiro de software obter o conhecimento sobre o problema descrito nestes requisitos. A obtenção desse conhecimento, através da tentativa de criação de modelos iniciais de projeto OO, possibilitaria a remoção eficiente de defeitos, ainda durante a fase inicial do ciclo de desenvolvimento, diminuindo o custo total do projeto. Além disso, o modelo inicial de projeto OO gerado poderia ser um ponto de partida para o desenvolvimento de um sistema OO de qualidade. Como próximos passos citamos a definição da técnica e a execução de estudos experimentais de viabilidade e de observação. O objetivo desses estudos será o provável refinamento da técnica, visando à sua posterior utilização industrial. No momento (junho de 2005), estamos definindo a técnica de leitura e planejando os estudos. Agradecimentos - Os autores agradecem o apoio financeiro do CNPq para a realização desse trabalho. Referências Basili, V. (1997) “Evolving and Packaging Reading Technologies”, The Journal of Systems and Software, 38(1): 3-12, July 1997. Beck, K. (1989) “A Laboratory For Teaching Object-Oriented Thinking”, OOPSLA'89 Conference Proceedings October 1-6, 1989, New Orleans, Louisiana. Bernardez, B., Genero, M., Duran, A., Toro, M. (2004) “A controlled experiment for evaluating a metricbased reading technique for requirements inspection”, Software Metrics. Proceedings of 10th International Symposium on 14-16, Sept.Pages:257-268. Ciolkowski, M., Laitenberger, O., Rombach, D., Shull, F., Perry, D. (2002) “Software Inspections, Reviews & Walkthroughs”, 24th ICSE, May 19 - 25, 2002, Orlando, Florida. Davis, A., Zowghi, D. (2004) "Good requirements practices are neither necessary nor sufficient", Requirements Engineering, Issue: Online First, October 2004. Deligiannis, I; Shepperd, M.; Webster, S., Roumeliotis, M. (2002) “Review of Experimental Investigations into Object-Oriented Technology”, Empirical Software Engineering: An International Journal. Vol. 7, No. 3, Kluwer Academic Publishers, September. Hatton, L. (1998) “Does OO really match the way we think?” IEEE Software, 15(3):46-54, May/June. Heninger, K. (1980) “Specifying Software Requirements for Complex Systems: New Techniques and their Application”, IEEE Transactions on Software Engineering, SE-6(1):2-13, January. Lima, G., Travassos, G. (2004) “Testes de Integração Aplicados a Software Orientado a Objetos: Heurísticas para Ordenação de Classes”, In: III SBQS, Brasília, DF. Mafra, S. N., Travassos, G. (2005) “Técnicas de Leitura de Software: Uma Revisão Sistemática”. In: XIX SBES, Uberlândia, MG, Brasil. Porter, A, Votta, L (1994) “An experiment to assess different defect detection methods for software requirements inspections”, Proc. of the 16th international conference on Software engineering, May. Shull, F. (1998) “Developing Techniques for Using Software Documents: A Series of Empirical Studies”, PhD Thesis, University of Maryland, USA. Shull, F., Rus, I., Basili, V. (2000) “How perspective-based reading can improve Requirements Inspections”, Computer, Volume:33, Issue:7, July 2000 Pages:73 – 79. Shull, F., Carver, J., Travassos, G. (2001) “An Empirical Methodology for Introducing Software Processes”, In Proceedings of the Joint 8th European Software Engineering Conference (ESEC), Vienna, September, 2001, pp.288-296. Thelin, T., Runeson, P., Wohlin, C., Olsson, T, Anderson, C. (2004) “Evaluation of Usage-Based Reading-Conclusions after Three Experiments”, Empirical Software Engineering, Volume 9, Issue 12, March. Pages: 77-110. Travassos, G., Shull, F., Fredericks, M., Basili, V. (1999) “Detecting defects in object-oriented designs: using reading techniques to increase software quality”, Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, Vol. 34 Issue 10.