Please use this identifier to cite or link to this item: https://hdl.handle.net/10316/29632
Title: Assessing Maintainability in Software Architectures
Authors: Anjos, Eudisley Gomes dos 
Orientador: Zenha-Rela, Mário
Keywords: Software Architecture; Open-Source Software; Maintainability; Manutenibilidade; Atributos de qualidade; Arquitectura de software
Issue Date: 16-Jan-2017
Citation: ANJOS, Eudisley Gomes dos - Assessing maintainability in software architectures. Coimbra : [s.n.], 2017. Tese de doutoramento. Disponível na WWW: http://hdl.handle.net/10316/29632
Abstract: Technological advancement and market needs have resulted in constant modifications of software systems. These changes and the unsuitability of alternative software to replace existing systems demand that they are highly maintainable. Maintenance is one of the most expensive phases in software development. It constitutes between 60% to 80% of the total effort spent on the software product. Thus, the quality of a system is not defined only in terms of ensuring the functions for which the system was designed are fit for purpose, but to ensure a high level of understanding, modifiability and maintainability. A system with these characteristics allows quick and easy changes in the long term. However, ensuring a high level of system maintenance of architectural projects is still a very complex task. There is a lack of architectural support to ensure that the modifications allow high maintainable projects, leading it to success For this reason, the study addressed by this thesis focuses on the problem of evaluating software architectures through activity indicators to determine the success of open source systems. The activity indicators are used to describe structural or socio-technical characteristics of the systems. The goal of understanding these indicators is to identify which factors, related to maintainability, are more effective to ensure project success. This allows focusing on these factors during architectural changes. In order to validate the hypotheses, several experiments were performed on about 160,000 open source systems. The latest experiments are divided into three main phases and direct the conclusions found in the various hypotheses of this work. The results of these experiments are presented and discussed during this thesis. In the last phase, the use of data mining tools demonstrated the relevance of the results, proving the main hypothesis of our work and defining the factors that have the greatest impact during the architectural modifications leading FLOSS projects to success. __________ Esta tese lida com um dos aspectos mais evasivos da engenharia de software, a manutenibilidade do software. Esse caráter fugidio parece resultar da sua dependência de uma multiplicidade de factores, desde os puramente técnicos —a forma como o software está estruturado a diferentes níveis—aos de natureza social —a estrutura da organização que o criou—passando pela capacidade humana de compreensão, nomeadamente a forma como o código-fonte está documentado e a adesão a convenções de programação. Após uma extensa revisão da literatura científica sobre a manutenibilidade e conceitos relacionados, nomeadamente requisitos não funcionais, atributos de qualidade e arquitectura de software, na primeira parte deste estudo procurámos perceber como esta propriedade era caracterizada e quantificada nas representações mais abstratas do software, nomeadamente ao nível da arquitectura. Para isso foi feita uma análise sistemática das ferramentas de desenho arquitectural mais relevantes, e estudada a forma como abordam a manutenibilidade. Este estudo permitiu-nos concluir que estas ferramentas quantificam esta propriedade do software quase exclusivamente a partir do código-fonte, usando uma composição de métricas envolvendo a coesão, acoplamento, complexidade e dimensão. Uma vez que o nosso trabalho estava integrado num projecto cujo objectivo era disponibilizar aos arquitectos de software um conjunto de metodologias e ferramentas que lhes permitissem trabalhar a evolução do software preservando, ou mesmo melhorando, a manutenibilidade para não prejudicar a sua longevidade, era-nos relevante adoptar uma representação mais abstrata desta propriedade que não estivesse tão directamente associada ao código-fonte. Para isso propusemos um mapeamento entre a representação UML do sistema e a notação mais abstracta adoptada pela COmmon Software Measurement International (COSMIC). A validade deste mapeamento foi realizada comparando os valores de manutenibilidade extraídas a partir do código-fonte de 39 versões do Apache Tomcat e as respectivas métricas na notação COSMIC. Contudo, quando esta primeira análise foi alargada para outros sistemas de grande dimensão, a correlação entre as métricas de manutenibilidade extraídas a partir do código-fonte e as extraídas a partir da sua representação arquitetural reduziu-se significativamente. Estas observações levaram-nos a concluir que o pressuposto de que todos os atributos de qualidade podem ser mapeados ao nível arquitectural não se verifica, pelo menos no que à manutenibilidade diz respeito. Uma análise manual e um inquérito a gestores de projecto na indústria levou-nos a concluir que uma das possíveis causas para este desalinhamento se deve à existência de muita informação presente ao nível do código-fonte (por exemplo, comentários, adopção de convenções de programação, documentação), que manifestamente promovem a manutenibilidade e que estão omissas nas representações mais abstractas do software, nomeadamente ao nível arquitectural. Perante a evidência desta natureza multidimensional da manutenibilidade, na segunda parte deste estudo focámo-nos numa terceira perspectiva, a dimensão social da estrutura do software e o seu impacto na manutenibilidade. A primeira etapa foi procurar identificar projectos que manifestamente possuíssem altos valores de manutenibilidade, por forma a poder identificar os factores que os caracterizam. Para isso assumimos o pressuposto de que projectos de código-aberto (OSS) com grande longevidade teriam de estar necessariamente correlacionados com valores altos de manutenibilidade. Se assim não fosse, teriam grande dificuldade em se manter activos, bem como grande dificuldade em atrair e reter colaboradores. Ademais, a própria natureza voluntária e distribuída da colaboração em projectos de código-aberto promove a modularidade, uma das propriedades intrínsecas da manutenibilidade. Após analisar cerca de 160.000 projectos de código-aberto concluímos que existe efectivamente um pequeno conjunto de parâmetros que podemos designar como ‘sociais’ (número de voluntários, número de commits, número de issues registados,...) que têm um impacto decisivo nas probabilidades de sucesso do projecto. De um modo informal podemos então afirmar que quanto mais ‘activo’ um projecto estiver, maiores as suas probabilidades de sucesso (activo nos dois anos seguintes). Complementarmente, também podemos afirmar que quanto menos manutenível um projecto, menos voluntários irá atrair, menor será o número de contribuições/commits, e consequentemente terá uma reduzida capacidade e motivação para produzir código mais modular e mais facilmente compreensível por uma comunidade alargada. No final deste estudo sobre a natureza da manutenibilidade, podemos concluir que esta relevante propriedade intrínseca do software tem uma natureza marcadamente socio-técnica, nas suas múltiplas dimensões i) humana, ii) social e iii) estrutural e portanto, qualquer tentativa para a gerir considerando apenas uma dimensão tem reduzidas possibilidades de sucesso.
Esta tese lida com um dos aspectos mais evasivos da engenharia de software, a manutenibilidade do software. Esse caráter fugidio parece resultar da sua dependência de uma multiplicidade de factores, desde os puramente técnicos —a forma como o software está estruturado a diferentes níveis—aos de natureza social —a estrutura da organização que o criou—passando pela capacidade humana de compreensão, nomeadamente a forma como o código-fonte está documentado e a adesão a convenções de programação. Após uma extensa revisão da literatura científica sobre a manutenibilidade e conceitos relacionados, nomeadamente requisitos não funcionais, atributos de qualidade e arquitectura de software, na primeira parte deste estudo procurámos perceber como esta propriedade era caracterizada e quantificada nas representações mais abstratas do software, nomeadamente ao nível da arquitectura. Para isso foi feita uma análise sistemática das ferramentas de desenho arquitectural mais relevantes, e estudada a forma como abordam a manutenibilidade. Este estudo permitiu-nos concluir que estas ferramentas quantificam esta propriedade do software quase exclusivamente a partir do código-fonte, usando uma composição de métricas envolvendo a coesão, acoplamento, complexidade e dimensão. Uma vez que o nosso trabalho estava integrado num projecto cujo objectivo era disponibilizar aos arquitectos de software um conjunto de metodologias e ferramentas que lhes permitissem trabalhar a evolução do software preservando, ou mesmo melhorando, a manutenibilidade para não prejudicar a sua longevidade, era-nos relevante adoptar uma representação mais abstrata desta propriedade que não estivesse tão directamente associada ao código-fonte. Para isso propusemos um mapeamento entre a representação UML do sistema e a notação mais abstracta adoptada pela COmmon Software Measurement International (COSMIC). A validade deste mapeamento foi realizada comparando os valores de manutenibilidade extraídas a partir do código-fonte de 39 versões do Apache Tomcat e as respectivas métricas na notação COSMIC. Contudo, quando esta primeira análise foi alargada para outros sistemas de grande dimensão, a correlação entre as métricas de manutenibilidade extraídas a partir do código-fonte e as extraídas a partir da sua representação arquitetural reduziu-se significativamente. Estas observações levaram-nos a concluir que o pressuposto de que todos os atributos de qualidade podem ser mapeados ao nível arquitectural não se verifica, pelo menos no que à manutenibilidade diz respeito. Uma análise manual e um inquérito a gestores de projecto na indústria levou-nos a concluir que uma das possíveis causas para este desalinhamento se deve à existência de muita informação presente ao nível do código-fonte (por exemplo, comentários, adopção de convenções de programação, documentação), que manifestamente promovem a manutenibilidade e que estão omissas nas representações mais abstractas do software, nomeadamente ao nível arquitectural. Perante a evidência desta natureza multidimensional da manutenibilidade, na segunda parte deste estudo focámo-nos numa terceira perspectiva, a dimensão social da estrutura do software e o seu impacto na manutenibilidade. A primeira etapa foi procurar identificar projectos que manifestamente possuíssem altos valores de manutenibilidade, por forma a poder identificar os factores que os caracterizam. Para isso assumimos o pressuposto de que projectos de código-aberto (OSS) com grande longevidade teriam de estar necessariamente correlacionados com valores altos de manutenibilidade. Se assim não fosse, teriam grande dificuldade em se manter activos, bem como grande dificuldade em atrair e reter colaboradores. Ademais, a própria natureza voluntária e distribuída da colaboração em projectos de código-aberto promove a modularidade, uma das propriedades intrínsecas da manutenibilidade. Após analisar cerca de 160.000 projectos de código-aberto concluímos que existe efectivamente um pequeno conjunto de parâmetros que podemos designar como ‘sociais’ (número de voluntários, número de commits, número de issues registados,...) que têm um impacto decisivo nas probabilidades de sucesso do projecto. De um modo informal podemos então afirmar que quanto mais ‘activo’ um projecto estiver, maiores as suas probabilidades de sucesso (activo nos dois anos seguintes). Complementarmente, também podemos afirmar que quanto menos manutenível um projecto, menos voluntários irá atrair, menor será o número de contribuições/commits, e consequentemente terá uma reduzida capacidade e motivação para produzir código mais modular e mais facilmente compreensível por uma comunidade alargada. No final deste estudo sobre a natureza da manutenibilidade, podemos concluir que esta relevante propriedade intrínseca do software tem uma natureza marcadamente socio-técnica, nas suas múltiplas dimensões i) humana, ii) social e iii) estrutural e portanto, qualquer tentativa para a gerir considerando apenas uma dimensão tem reduzidas possibilidades de sucesso.
Description: Tese de doutoramento em Ciências e Tecnologias da Informação, apresentada ao Departamento de Engenharia Informática da Faculdade de Ciências e Tecnologia da Universidade de Coimbra
URI: https://hdl.handle.net/10316/29632
Rights: openAccess
Appears in Collections:FCTUC Eng.Informática - Teses de Doutoramento

Files in This Item:
File Description SizeFormat
Assessing Maintainability in Software Architectures.pdf3.14 MBAdobe PDFView/Open
Show full item record

Google ScholarTM

Check


Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.