Aspectos sobre Qualidade em Software Livre Fernando Selleri Silva1 Depto. Ciência da Computação – Universidade do Estado de Mato Grosso (UNEMAT) Caixa Postal 92 – 78.390-000 – Barra do Bugres – MT – Brasil 1 [email protected] Abstract. This work presents the main aspects of software quality in an introduction related to free software. The use of free software has been deployed in several areas, such as operating systems, networks, web, office applications, embedded systems and others. Therefore, quality is a requirement that must be considered to ensure that the adoption of free software meets the objectives sought. Resumo. Este trabalho aborda os principais aspectos da qualidade de software numa introdução direcionada a software livre. A utilização de software livre tem se destacado em várias áreas, como sistemas operacionais, redes, web, aplicativos de escritório, sistemas embarcados, entre outras. Neste sentido, a qualidade é um requisito que deve ser considerado para garantir que a adoção de software livre atenda aos objetivos pretendidos. 1. Introdução O software livre tem ultrapassado barreiras e se disseminado para atender a várias áreas. Vemos relatos de utilização de software livre não apenas em sistemas computacionais, mas também em dispositivos portáteis (celulares e handhelds), eletro-eletrônicos (televisores, geladeiras e microondas), automóveis, entre outros. Temos software livre no comércio, na indústria, na educação, na saúde, na preservação ambiental e em diversas outras áreas. Considerando esse contexto de abrangência na utilização de software livre, deste é esperada qualidade cada vez mais elevada. Os princípios para se atingir a qualidade desejada em um software devem ser considerados desde a fase de desenvolvimento deste. Entretanto, antes de descrever sobre tais princípios e demais características que buscam possibilitar o desenvolvimento de software com qualidade, é necessário definir o próprio conceito de qualidade. Neste sentido, vejamos o que alguns autores da Engenharia de Software definem como “qualidade de software”. Para Paula (2003, p.7) a qualidade de um software está relacionada ao “seu grau de conformidade com os respectivos requisitos”. Ainda segundo o autor, “o que decide a qualidade é a comparação com os respectivos requisitos: o confronto entre a promessa e a realização de cada produto”. Na concepção de Pressman (1995, p.724) qualidade de software é definida como: “conformidade a requisitos funcionais e de desempenho explicitamente declarados, a padrões de desenvolvimento claramente documentados e a características implícitas que são esperadas de todo software profissionalmente desenvolvido”. Pressman reconhece que esta definição é passível de modificações ou ampliações dada a dificuldade de conceituar qualidade de software em uma definição padrão. Contudo, em sua definição são enfatizados três pontos importantes sobre qualidade: os requisitos são a base a partir da qual a qualidade é medida; padrões especificados definem um conjunto de critérios de desenvolvimento a serem seguidos para obtenção da qualidade; um conjunto de requisitos implícitos deve ser considerado, embora freqüentemente estes não sejam mencionados, ao menos, inicialmente. Com base nas definições anteriores sobre qualidade de software nota-se que a mesma se encontra diretamente relacionada a satisfação dos requisitos propostos pelo usuário ou cliente, sendo eles explicitados ou não, o que vai de encontro também com a definição proposta pela International Organization for Standardization (ISO), que se refere a qualidade como “a totalidade das características de uma entidade que lhe confere a capacidade de satisfazer às necessidades explícitas e implícitas” (ISO 8402). Considerando os conceitos sobre qualidade de software definidos, a próxima seção irá se concentrar nos modelos e padrões que visam garantir a qualidade nos produtos de software desenvolvidos. 2. Qualidade de software Retomando a definição apresentada por Pressman na seção anterior vemos que a obtenção da qualidade pode ser auxiliada com o uso de padrões. De fato, a crescente preocupação em melhorar a qualidade do software, incluindo outras melhorias relacionadas a custo e produtividade motivaram o surgimento dos chamados modelos de qualidade para o processo de desenvolvimento. “A partir da década de 1960, começaram a surgir critérios, modelos e técnicas para a garantia da qualidade no processo de produção” (VASCONCELOS, 2006, p.74). Os japoneses com a proposta do Total Quality Control (TQC) e os americanos com o Total Quality Management (TQM) foram os pioneiros nessa área. É interessante notar que a qualidade de um produto de software encontra-se diretamente relacionada também com a qualidade do processo de desenvolvimento utilizado para concepção deste produto. Este aspecto é colocado na abordagem de W. Edwards Deming, um dos mestres na área de controle de qualidade. Vasconcelos (2006) ressalta que a abordagem de Deming encara a qualidade como uma atividade estratégica, desde o alto nível gerencial, sendo marcada por considerar a constante possibilidade de revisão das especificações em função das mudanças que podem ocorrer nas necessidades do cliente. Várias outras abordagens também contribuem para o estabelecimento de padrões que visam definir caminhos para se obter a tão desejada qualidade, entre elas, as de: Armand Feigenbaum (1950); Joseph M. Juran e Philip Crosby (1974); entre outras. 2.1. Principais padrões e modelos de qualidade As abordagens proposta por pesquisadores, bem como os padrões iniciais como TQC e TQM, citados anteriormente, contribuíram de forma significativa para o avanço da melhoria da qualidade, aliados a outros acontecimentos importantes tal qual a criação de organizações que tem entre seus princípios estimular essa melhoria. Entre essas organizações, destacam-se a International Organization for Standardization (ISO), a International Eletrotecnical Commission (IEC), o Software Engineering Institute (SEI), o Institute of Electrical and Electronics Engineers (IEEE), entre outras. Os padrões (normas) propostos pela ISO e os modelos definidos pelo SEI, são colocados por Vasconcelos (2006) como importantes contribuições para a melhoria da qualidade. As normas da ISO especificam requisitos para um sistema gerencial de qualidade em uma organização, os quais estão focados basicamente nos aspectos de responsabilidade gerencial, gerência de recursos, realização do produto, medição e análise (ISO 9001/ISO 9000-3). Dentre as normas aplicadas a qualidade de software, destacam-se a ISO 12207 e a ISO 15504. Os modelos do SEI, por sua vez, focam o processo de software no que se refere ao fortalecimento da área de qualidade (VASCONCELOS, 2006). Dentre os modelos propostos, destacam-se o Capability Maturity Model for Software (CMM) e o Capability Maturity Model Integration (CMMI). Contudo, a norma ISO/IEC 9126 merece especial atenção quando se trata de qualidade, por ser ela que define os atributos de qualidade de software, categorizados em seis características, que por sua vez, podem ser subdivididas a fim de delinear um modelo de qualidade a ser aplicado na aferição na qualidade em produtos de software. A ISO/IEC 9126 possui uma tradução para o Brasil, a NBR 13596, publicada em agosto de 1996. As características da ISO/IEC 9126, e um breve resumo sobre cada uma delas, serão tratadas a seguir: - Funcionalidade: capacidade de prover as funções que atendam as necessidades de quem solicitou o software (adequação), mediante utilização sob as condições especificadas (acurácia), permitindo interagir com demais sistemas (interoperabilidade), proteger informações (segurança) e estar de acordo com normas e padrões especificados (conformidade). - Confiabilidade: capacidade de manter um nível de desempenho especificado quando utilizado em determinadas condições, incluindo a capacidade de evitar falhas provocadas por defeitos (maturidade), manter o nível de desempenho no caso de defeitos (tolerância a falhas), recuperar-se de defeitos (recuperabilidade), atender as normas ou convenções sobre confiabilidade (conformidade). - Usabilidade: capacidade de ser compreendido quanto ao atendimento das necessidades do usuário (inteligibilidade), aprendido (apreensibilidade), usado (operacionalidade) e apreciado (atratividade), incluindo o atendimento as normas ou convenções referentes a usabilidade (conformidade). - Eficiência: capacidade de fornecer desempenho apropriado com relação a quantidade de recursos utilizados, envolvendo o fornecimento de tempo de resposta e tempo de processamento apropriados (comportamento em relação ao tempo), a adequada utilização de recursos (utilização de recursos) e a adequação a normas ou convenções relativas a eficiência (conformidade). - Manutenibilidade: capacidade de ser modificado, permitindo a inclusão de correções, melhorias ou adaptações. Inclui a capacidade de permitir a identificação das causas das falhas e das partes afetadas (analisabilidade) e a implementação da modificação desejada (modificabilidade). - Estabilidade: capacidade de reduzir efeitos indesejados, permitindo a validação de modificações (testabilidade) e a adequação a normas e padrões vigentes (conformidade). - Portabilidade: capacidade de ser transportado de um ambiente para outro, permitindo ser instalado (capacidade para ser instalado), coexistir com outro softwares (coexistência), ser usado em substituição de outro software similar (capacidade para substituir), aderir a normas ou convenções relativas a portabilidade (aderência). 3. Qualidade em software livre Inicialmente, é interessante considerar que o desenvolvimento de software livre possui algumas características particulares, que em certos aspectos diferenciam-se do processo tradicional de desenvolvimento de software, entre elas: em alguns projetos de software livre o desenvolvimento parte de uma necessidade do próprio desenvolvedor, ou seja, o cliente/usuário é quem inicia o desenvolvimento do projeto; grande parte dos projetos congregam desenvolvedores dispersos geograficamente (desenvolvimento distribuído), com visões e níveis de conhecimento distintos; o produto geralmente é distribuído via Internet, por meio de repositórios públicos, como Sourceforge e Freshmeat, que possibilitam o acesso e o controle de versões; várias pessoas tem acesso ao código e ao software, o que amplia a capacidade de se identificar e corrigir falhas. Estas características podem contribuir para a melhoria da qualidade. Reis (2003) aponta dois trabalhos que tratam sobre a temática da qualidade estritamente voltada para software livres. Um deles é o artigo de Luyin Zhao e Sebastian Elbaum, intitulado “A Survey on Quality Related Activities in Open Source”, que descreve um levantamento realizado por meio de questionário aplicado a um grupo de desenvolvimento de software livre. O artigo indica que a ausência de um plano de teste para os produtos desenvolvidos e a interface com o usuário representam os principais desafios para a melhoria da qualidade em projetos livres. Contudo, por utilizar termos da engenharia de software tradicional, a compreensão dos questionários pode ter sido comprometida, conduzindo ao resultado retornado pela pesquisa. O outro artigo é de autoria de T. J. Halloran e William L. Scherlis, intitulado “High Quality and Open Source Software Practices”, que observa práticas de qualidade em um conjunto de projetos importantes de software livre, para se chegar a um processo de qualidade. O artigo sugere mecanismos que visam a manutenção da qualidade em projetos livres, sendo eles: o código é disponível livremente para que os desenvolvedores o alterem, porém a integração de contribuições é restrita, o que garante a estabilidade do projeto; os processos são mediados por ferramentas de comunicação, que auxiliam no respeito às diretrizes do projeto; a adaptação de novos participantes conta com o apoio de um conjunto de ferramentas padronizado. Além dos trabalhos anteriores, o artigo de Ioannis Samoladas e Ioannis Stamelos, com o título “Assessing Free/Open Source Software Quality”, busca avaliar aspectos referentes a qualidade de projetos de software livre/código aberto. O artigo ressalta que embora muitos projetos de software livre não utilizem um modelo formal de qualidade, destes resultam uma elevada qualidade oriunda quase que naturalmente pela maneira como os mesmos são produzidos, congregando grande número de desenvolvedores espalhados em diferentes regiões com diferentes conhecimentos, liderados por uma equipe menor que direciona os rumos para os quais o projeto deve caminhar. Esta equipe utiliza ferramentas que dão suporte a comunicação e ao controle de versões. Com várias pessoas envolvidas no desenvolvimento, quer seja diretamente, ou com a correção de falhas, ou ainda somente com a identificação destas, a elaboração de um software se torna muito mais dinâmica em termos de atualização e de eliminação de falhas. Experiências em projetos realizados em Fábricas de Software Livre constituídas em universidades brasileiras, como UFPE e USP, afirmam que os processos de desenvolvimento tendem a contribuir para a melhoria da qualidade (SPINDOLA, 2004). Foram empregados processos da Engenharia de Software, como Rational Unified Process (RUP) e Extreme Programming (XP), adequando-os para atender as características do software livre. O trabalho de Reis (2003) apresenta um processo de desenvolvimento para projetos de software livre. Este processo reforça a importância das ferramentas que dão apoio ao projeto e envolve princípios do processo de software tradicional, permitindo que se estabeleçam métricas para verificação da qualidade. 4. Considerações Projetos de software livre que possuem maior visibilidade, ou seja, aqueles que mais se destacam e possuem maior número de usuários, costumam compartilhar de altos níveis de qualidade, correspondendo de forma eficiente as necessidades de seus usuários. Em projetos menores compete aos desenvolvedores empregar processos e verificar se os requisitos do usuário estão sendo atendidos, tendo como referência os processos e padrões estabelecidos. As ferramentas de comunicação e controle de versões possuem importância fundamental na manutenção da qualidade como apontado no texto. É pertinente considerar que a aplicação de processos e padrões da Engenharia de Software clássica tende a contribuir para a melhoria da qualidade de projetos de software livre. Tais modelos e padrões são ainda mais importantes para organizações desenvolvedoras de software que vislumbram no software livre um caráter empreendedor e economicamente viável, contribuindo para a obtenção de resultados mais concretos. Este trabalho possibilitou uma introdução aos conceitos relacionados a qualidade de software, com destaque para o software livre. Por conseguinte, também foi possível a descoberta de novos conhecimentos por meio do levantamento de referências que abordam a temática da qualidade. Um aprofundamento no tema torna-se essencial para ampliar a compreensão e retornar resultados que contribuam cada vez mais para a melhoria da qualidade do software livre. Referências ISO, International Organization for Standardization. ISO/IEC 9126. 1991. PAULA Filho, Wilson de Pádua. Engenharia de software: fundamentos, métodos e padrões. 2.ed. Rio de Janeiro: LTC, 2003. PRESSMAN, Roger S. Engenharia de software. Trad. José Carlos B. dos Santos. São Paulo: Pearson Makron Books, 1995. REIS, Christian R. Caracterização de um processo de software para projetos de software livre. Dissertação de Mestrado. São Carlos: USP, 2003. SAMOLADAS, I.; STAMELOS, I. Assessing Free/Open Source Software Quality. Thessaloniki, Greece: Department of Thessaloniki; Aristotle University of Thessaloniki, 2003. Disponível em: <http://opensource.mit.edu/papers/ samoladasstamelos.pdf>. Acesso em: 20 março 2008. SPINDOLA, Breno et al. Definição e melhoria de processo em uma fábrica de software livre. VI Simpósio Internacional de Melhoria de Processos de Software – SIMPROS 2004. São Paulo: SIMPROS, 2004. VASCONCELOS, Alexandre M. L. de. Introdução à Engenharia de Software e Qualidade de Software. Lavras: UFLA, 2006.