Escolar Documentos
Profissional Documentos
Cultura Documentos
e o Código de Software
Pedro L. R. Leal Jr1
1
Departamento da Ciência da Computação – Universidade Federal de Minas Gerais (UFMG)
- Av. Antônio Carlos, 6627 - Pampulha - Belo Horizonte - MG
Pedro.leal.junior@gmail.com
1. Introdução
1.1 Contextualização
A garantia da conformidade do software com os seus requisitos é uma exigência básica da
indústria de desenvolvimento de software, mas nem sempre é alcançada. Com o objetivo de
resolver esse problema, surgiram as práticas de Rastreabilidade de Requisitos, que, apesar de
já serem utilizadas há alguns anos, códigos fonte freqüentemente evoluem sem a atualização
dos requisitos [Ramesh et al. 1997]. Isso ocorre porque manter a consistência e a
rastreabilidade entre abstrações de alto-nível, funcionalidades e componentes de software é
custoso e consome tempo [Antoniol et al. 2005]. Tentando minimizar esse problema,
pesquisadores e a indústria de software desenvolveram diferentes métodos e ferramentas para
aperfeiçoar a gerência de requisitos. Mas infelizmente falharam em alcançar uma adoção
generalizada [Neumüller et al., 2006]. Conseqüentemente, muitas empresas ainda registram as
ligações de rastreabilidade (trace links) manualmente, apesar das abordagens automáticas e
semi-automáticas já estarem disponíveis. Este artigo não discute de forma abrangente o
problema de rastreabilidade de requisitos, tal discussão pode ser encontrada, por exemplo, no
trabalho de Gotel et al. (1994), concentramos nossa atenção nas ligações de rastreabilidade
entre requisitos e código de software, cuja importância fica evidente no artigo de Antoniol et
al. (2002).
Atualmente já existem diversos métodos especializados em rastreabilidade com o
código de software, que podem ser agregados em categorias bases. Os artigos de Cleland-
Huang et al. (2005) ou de Gotel (1994) são exemplos de formas de categorização destes
métodos. Podemos, por exemplo, citar métodos baseado em roteiros (scenario), métodos
baseados em modelos, métodos baseados em recuperação de informação (information
retrieval), métodos baseados em semântica.
Os maiores inibidores para o uso desses métodos e ferramentas são, segundo
Neumüller et al. (2006), a complexidade da rastreabilidade e o manuseio de um grande
volume de informação, que podemos traduzir como falta de aderência com as necessidades
das partes interessadas. Se um método parece complexo para um usuário, é porque o seu
desenvolvedor não observou requisitos de usabilidade para o método. Se há problemas em
manusear um grande volume de informação é porque não foi observado requisitos de
escalabilidade para o método.
Deixar os métodos mais aderentes às necessidades das partes interessadas, tem de
ser o foco dos pesquisadores em rastreabilidade de requisitos. Pohl (1996) deixa claro que
“os três principais problemas do uso das ligações de rastreabilidade são: Primeiro, o uso das
informações de rastreabilidade dependem da parte interessada e das atividades do processo
de desenvolvimento de software, isto é, ligações não são usadas como são gravadas e,
consequentemente, recuperações seletivas, de acordo com necessidades atuais tem de ser
suportadas. Segundo, devido ao grande número de informações produzidas durante o
processo, apenas ligações orientadas ao conteúdo são base para o uso apropriado, isto é, o
uso da informação gravada é quase impossível se as ligações de rastreabilidade não estão
encapsuladas em seus contextos. Terceiro, as pessoas envolvidas na captura das ligações de
rastreabilidade são frequentemente diferentes dos usuários da informação”.
1.2 Objetivo
Este artigo tem como objetivo apresentar um catálogo de requisitos para os métodos de
rastreabilidade entre requisitos e código de software, e assim contribuir para desenvolvimento
de métodos com melhor usabilidade e ajudar os profissionais na escolha de uma boa
ferramenta. O catálogo aqui apresentado pode alimentar um critério objetivo de escolha de
ferramentas, pelo menos no que diz respeito às características da rastreabilidade entre
requisitos e código.
Não catalogamos requisitos para outros tipos de ligações de rastreabilidade, por
exemplo, ligações de rastreabilidade horizontais (código com código, requisito com requisito),
ligações verticais com outros artefatos (requisito com modelos, requisitos com casos de teste).
Também não tratamos as ligações de rastreabilidade com os requisitos pré-
especificação (pre-requirements specification), assim como Gotel et al. (1994) o definiu.
1.4 Critérios
A catalogação dos requisitos obedeceu a um critério bem definido: primeiramente a
compilação dos requisitos que se aplicam à rastreabilidade entre requisitos e código extraídos
de normas e modelos de qualidade. Utilizamos o Chrissis (2007) para a extração de requisitos
a partir do CMMI e a especificação ISO/IEC 12207. O segundo passo foi a extração de
requisitos, que ainda não constava no catálogo, a partir das necessidades dos interessados
listados acima, observadas nos processos de desenvolvimento de software baseados no
processo unificado [Jacobson, 1999]. Depois utilizamos artigos que tratam da rastreabilidade
de requisitos em geral. É o caso do artigo Ramesh et al (1997).
Por fim, recorremos a artigos que tratam de métodos para rastreabilidade entre
código fonte e outros artefatos. Fizemos uma ligação entre as características desses métodos
e os requisitos já catalogados para se descobrir a motivação das características. Para aquelas
em que a motivação não estava catalogada, avaliamos a universalidade da característica para
identificar se era ou não um novo requisito. Apresentamos aqui os artigos utilizados neste
critério organizados por método. Para métodos baseado em roteiros (scenario), utilizamos o
artigo de Egyed et al. (2002) e o de Eisenbarth et al. (2003). Os trabalhos de Murphy (1995)
e Antoniol (2000) para métodos baseados em modelos. No caso de métodos baseados em
Recuperação de Informação (information retrieval), Zhao et al. (2004). Já para os métodos
baseados em semântica, Collard (2002).
Item de Código de
Rastreabilidade (ICR)
satisfaz
1..* +ICR
Unidade
Computacional
1..*
*
Composição de Unidade
Constructo
Computacional
1..*
Unidade Computacional
Ligação de
Rastreabilidade
1..*
*
Ligação de Rastreabilidade entre Alteração e Ligação de Rastreabilidade Indireta
Unidade Computacional
entre Requisito e Código
satisfaz
+ICR 1
Item de Código de Rastreabilidade (ICR)
satisfaz
+ICR 2..*
Item de Código de Rastreabilidade (ICR)
satisfaz
+ICR 1
Item de Código de Rastreabilidade (ICR)
3.1.3 Diagnóstico
O método deve fornecer as informações que minimizam o trabalho do programador no
diagnóstico de uma questão técnica.
- A partir de uma questão técnica, o método deve mostrar os ICR vinculados aos requisitos
que a questão afeta, ordenadas pela classificação quanto ao âmbito dos ICR, do mais forte ao
mais fraco: Específica, Específica com condição, Relevante, Compartilhada. A ligação de
rastreabilidade neste caso é indireta: questão se liga com requisito que se liga com código.
Fundamentação: A norma NBR ISO/IEC 12207:1998, no item 5.5 Processo de manutenção,
atividade 5.5.3 Implementação da modificação, indica que o programador deve conduzir a
análise e determinar que [..] unidades de software e versões destas necessitam ser
modificadas. O modelo CMMI, na área chave Desenvolvimento de Requisitos (RD), a meta
específica 2, “Desenvolver requisitos do produto”, pede o registro da rastreabilidade do
requisito entre componentes do produto e questões. Assim é possível que uma questão que
reporta um mau funcionamento do software seja previamente analisada e rastreada até os
requisitos que são afetados. Sendo, as ligações classificadas quanto sua força e rastreadas até
as unidades computacionais, o programador tem condições de diminuir o escopo do código
que deve ser verificado, tornando seu trabalho mais produtivo.
3.2.1 Indexação
O método tem de identificar cada unidade computacional, cada corte funcional, cada requisito
e as ligações de rastreabilidade entre eles.
- O método tem de identificar unicamente cada Item de Rastreabilidade durante seu ciclo de
vida. Um item de rastreabilidade, especialmente o ICR, tem de receber uma identificação
durante sua criação que deve ser única e não pode ser alterada durante as manutenções do
código. A menos que a manutenção a descaracterize, e, portanto, a unidade deixa de existir,
dando lugar a uma outra.
- O método tem de ser capaz de identificar Unidades Computacionais em diferentes níveis de
detalhe. Uma ligação pode ser feita utilizando tanto linha de código, como métodos, como
classes ou subsistemas.
- O método tem de ser capaz de identificar unicamente Cortes Funcionais. Uma possível
forma é utilizar como identificadores as entidades externas que o Corte Funcional afeta
diretamente. Não são as Unidades Computacionais que compõe um Corte Funcional que o
identificam, pois, estas Unidades podem ser alteradas sem que a identidade do corte seja
afetada.
- O método pode permitir que as Unidades Computacionais que compõe um Corte possam
variar em níveis de detalhe, do mais detalhado para o menos detalhado, sem caracterizar uma
alteração no corte. Um determinado método, que faz parte de um corte, pode ser substituído
por sua classe sem que aja alguma alteração no corte.
- O método tem de identificar as Ligações de Rastreabilidade e classifica-las quanto ao seu
tipo e âmbito.
- O método deve indexar ICR em linguagens de programação distintas, reconhecendo as
Unidades Computacionais segundo os paradigmas de cada uma. Caso seja uma linguagem
Procedural, Orientada a Objetos e até mesmo reconhecer mecanismos como Orientação a
Aspectos.
- O método deve reconhecer constructos de linguagens mais sofisticados, como ponteiro e
vínculos dinâmicos (dynamic binding).
Fundamentação: para haver gerência de configuração sobre as ligações de rastreabilidade, é
importante que os componentes da rastreabilidade sejam identificados, só assim pode-se
registrar suas histórias nas ligações. Pan et al. (2005) mostram esta necessidade.
O método proposto por Collard et al. (2002) lembra-nos da importância da identificação das
unidades computacionais sem interferir na estrutura do código proposto pela organização.
5. Conclusão
Apresentamos o catálogo de requisitos para métodos de rastreabilidade entre requisitos e
código de software, do ponto de vista das partes interessadas, com a finalidade de contribuir
no desenvolvimento de métodos mais eficazes: que ocultem sua complexidade de usuários que
não precisam conhecê-la; que sejam focadas no uso, não na tecnologia. Este catálogo não é
para ser usado apenas por pesquisadores e desenvolvedores de métodos, mas também por
aqueles que montam os processos de desenvolvimento de software numa organização. Estes
podem usar o catálogo como critério objetivo na escolha do método mais adequado à suas
necessidades.
O catálogo não tem a pretensão de ser uma visão encerrada sobre o assunto, mas de
ser um ponto de partida para a discussão dos requisitos básicos que possam tornar a
rastreabilidade viável nas organizações. Assim, deve sofrer revisões periódicas com o avanço
da discussão e mudanças tecnológicas.
Os principais requisitos vieram de modelos e normas de qualidade (modelo CMMI,
especificação ISO/IEC 12207), observados do ponto de vista das partes interessadas.
Acreditamos assim ter construído um catálogo funcional e confiável.
Mesmo sabendo que o escopo desse trabalho é bastante limitado, esperamos ter
contribuído para o efetivo uso da rastreabilidade no desenvolvimento de software.
Referências
Antoniol, G., Caprile, B., Potrich, A., Tonella, P. (2000) "Design-code traceability for object-
oriented systems", Annals of Software Engineering 9, p. 35–58.
Antoniol, G., Canfora, G., Casazza, G., De Lucia, A. e Merlo, E. (2002) "Recovering
Traceability Links between Code and Documentation", IEEE Transactions on Software
Engineering, volume 28, número10.
Antoniol, G., Merlo, E., Guéhéneuc, Y., Sahraoui, H. (2005) “On Feature Traceability in
Object Oriented Programs”, TEFSE’05 - Traceability in Emerging Forms of Software
Engineering.
Arnold, R. e Bohner, S. (1993) “Impact Analisys – Towards a Framework for Comparison”,
International Conference Software Maintenance, p. 292-301.
Caldiera, G.; e Basili, V.R. (1991) “Identifying and qualifying reusable software components”
IEEE Computer, volume 24, número 2, Pag.:61 – 70
Cleland-Huang, J. (2005) “Toward improved traceability of non-functional requirements”,
proferido no 3o. International Workshop on Traceability in Emerging Forms of Software
Engineering, em conjunto com Automated Software Engineering ASE 2005.
CMMI Product Team (2006) “CMMI for Development, Version 1.2”, Software Engineering
Institute of Carnegie Mellon University.
Collard, M., Maletic e J., Marcus, A. (2002) "Supporting Document and Data Views of
Source Code", Proceedings of the 2002 ACM symposium on Document engineering.
Ebner, G., Kaindl, H. (2002) “Tracing All Around in Reengineering”, IEEE Software, volume
19, número 3, páginas 70-77.
Egyed, A., Grünbacher, P. (2002) "Automating Requirements Traceability: Beyond Record &
Replay Paradigm", Conference on Automated Software Engineering, 2002. Proceedings.
ASE 2002. 17th IEEE International.
Eisenbarth, T., Koschke, R., Simon, D. (2003) "Locating Features in Source Code", IEEE
Transactions On Software Engineering, volume. 29, número 3.
Hoffmann, M., Kühn, N., Weber, M., Bitter, M. (2004) “Requirements for Requirements
Management Tools”, 12o. IEEE International Requirements Engineering Conference.
Fyson,, M. e Boldyreff, C. (1998) “Using Application Understanding to Support Impact
Analysis”, Journal Software Maintenance – Research and Practice, volume 10, p.93-110.
Gotel O. e Finkelstein C. (1994) “An analysis of the requirements traceability problem”,
Proceedings of the First International Conference on Requirements Engineering (IEEE).
Jacobson, I., Booch, G., Rumbaugh, J. (1999) “The Unified Software Development Process”,
Addison Wesley, 1a edição.
Jarke, M. (1998) “Requirements Tracing”, Communications of the ACM, volume 41, número
12.
Koncli, J. e Bergen, M. (1988) “Gibis: A Hypertext Tool for Exploratory Policy Discussion”,
ACM Trans. Office Information System, volume 6, no. 4, p. 303-331.
Munson, E., Nguyen, T. (2005) “Concordance, conformance, versions, and traceability”,
Automated Software Engineering, Proceedings of the 3rd international workshop on
Traceability in emerging forms of software engineering, pag. 62-66.
Murphy, G e Sullivan, D. (1995) “Software reflexion models: bridging the gap between source
and high-level models”, Proceedings of the 3rd ACM SIGSOFT symposium on
Foundations of software engineering.
Neumüller, C., Grünbacher, P. (2006) “Automating Software Traceability in Very Small
Companies: A Case Study and Lessons Learned”, 21st IEEE International Conference on
Automated Software Engineering (ASE'06).
Nguyen, T., Munson, E., Boyland, J. (2005) “An infrastructure for development of object-
oriented, multi-level configuration management services”, Proceedings of the 27th
international conference on Software engineering.
Pan, Kai, Whitehead , E. James, Jr. e Ge, Guozheng (2005) “Textual and Behavioral Views
of Function Changes”, Automated Software Engineering, Proceedings of the 3rd
international workshop on Traceability in emerging forms of software engineering, Long
Beach, California.
Pinheiro, F., Goguen, J. (1996) “An object-Oriented Tool for Tracing Requirements”, IEEE
Software, vol. 13, no. 2, p. 52-64.
Pohl, k., (1996) “PRO- ART : Enabling Requirements Pre-Traceability”, IEEE International
Requirements Engineering Conference.
Ramesh, B., Stubbs, C. e Powers, T. (1997) “Requirements traceability: Theory and
practice”, In: Annals of Software Engineering 3, p. 397–415. J.C. Baltzer AG, Science
Publishers.
Ramesh, B. e Dhar, V. (1992) “Supportin Systems Development Using Knowledge Captured
During Requirements Engineering”, IEEE Trans. Software Eng., volume 9, no. 2, p.498-
510.
Spence, I. e Probasco, L. (1998) “Traceability Studies for Managing Requirements with Use
Cases” http://www.uml.org.cn/RequirementProject/pdf/traceability.pdf
Turver, R. e Munro, M. (1994) “Na Early impact Analisys Techique for Software
Maintenance”, Journal Software Maintenance – Research and Practice, volume 6, no. 1,
p.35-52.
Zhao, W., Zhang, L., Liu, Y., Sun, J., Yang, F. (2004) "SNIAFL: Towards a Static Non-
Interactive Approach to Feature Location", Proceedings of the 26th International
Conference on Software Engineering (ICSE'04).