1 |
[pt] RELEVANDO FATORES INTERATIVOS NA DEGRADAÇÃO DO DESIGN DE SOFTWARE / [en] REVEALING INTERACTING FACTORS IN DECAY OF SOFTWARE DESIGNDANIEL JOSE BARBOSA COUTINHO 28 December 2021 (has links)
[pt] Desenvolvedores realizam mudanças de código constantemente durante
a vida de um projeto de software. Essas mudanças podem induzir a degradação
progressiva do design. A degradação do design pode ser reduzida ou
acelerada por fatores que interagem em cada mudança. Esses fatores podem
variar desde uma mudança ou ação de reparo específica – e.g., refatorações
– até a maneira como os desenvolvedores contribuem e discutem mudanças.
Entretanto, estudos anteriores não exploram como esses fatores interagem e
influenciam na degradação do design. Eles apenas focam em alguns fatores e
tendem a os investigar em isolamento. Estudar os fatores em isolamento pode
não explicar adequadamente qual é o conjunto mais relevante de interações
entre fatores e qual sua influência na degradação do design. Isso pode indicar
que abordagens existentes para evitar ou mitigar a degradação do design são
incompletas, já que elas não consideram interações entre fatores que podem
ser relevantes. Portanto, essa dissertação relata uma investigação que almeja
aumentar a compreensão sobre como uma ampla gama de interações entre fatores
pode afetar a degradação do design, para que consequentemente possam
ser investigadas práticas efetivas para evitar ou mitigar esse fenômeno. Para
tal fim, nós realizamos uma análise aprofundada buscando preencher lacunas
no conhecimento existente sobre dois tipos de fatores: fatores relacionados ao
processo (i.e. relacionados às mudanças e seus resultados produzidos) e fatores
relacionados ao desenvolvedor (i.e. relacionados ao desenvolvedor trabalhando
nas mudanças). Nós focamos em analisar os efeitos de possíveis interações entre
os fatores previamente mencionados e uma série de sub-fatores, no que diz
respeito como essas interações afetam módulos que sofreram diferentes níveis
de degradação. Por exemplo, nós observamos que: (1) individualmente, tanto
o sub-fator relacionado ao desenvolvedor que representa um desenvolvedor novato
(que está contribuindo pela primeira vez), quanto o sub-fator relacionado
ao processo que representa tamanho de uma mudança, não se mostraram relacionados
a efeitos negativos na qualidade de código das classes alteradas.
Porém, analisando interações entre fatores, nós observamos que mudanças em
que esses dois fatores interagem tendem a ter um efeito negativo no código,
causando degradação. Interessantemente, esse comportamento não se alterou
mesmo quando mudança foi introduzida através de uma pull request (o que
frequentemente inicia um processo de revisão de código), (2) surpreendentemente,
refatorações de extração frequentemente não tem um efeito positivo
na qualidade do código, enquanto, em contrapartida, as refatorações de movimentação
foram predominantemente positivas. Nós também discutimos como
esses achados apresentados na dissertação podem ajudar desenvolvedores e pesquisadores na melhoria de suas diretrizes sobre como evitar e monitorar a degradação do design. / [en] Developers constantly perform code changes throughout the lifetime of
a project. These changes may induce the introduction of design decay over
time. Design decay may be reduced or accelerated by interacting factors that
underlie each change. These factors may come from specific actions of change
or repair – e.g., refactorings – to how developers contribute and discuss the
changes. However, existing studies do not explain how these factors interact
and influence design decay. They solely tend to focus on a few types of
factors, and often consider them in isolation. Interactions between factors
may cause different outcomes than those previously studied. Studying factors
in isolation may not properly explain what are the most relevant set of
interacting factors that influence design decay. This may indicate that existing
approaches to avoid or mitigate design decay are misleading since they do not
consider potentially relevant interactions between various factors. Thus, this
dissertation reports an investigation that aims to increase the understanding
of how a wide range of interacting factors can influence design decay in
order to facilitate the investigation of which practices can be used to avoid
or mitigate design decay. To this end, we performed an in-depth analysis to
fill knowledge gaps on two types of factors: process-related (i.e., related to
changes and their produced outcomes) and developer-related (i.e., related to
the developer working on the changes) factors. We focused on analyzing the
effects of potential interactions between the aforementioned factors and 12
sub-factors with regards to how they affected modules with different levels
of decay. We observed diverging decay patterns in these modules. Our results
indicate that both types of factors can be used to distinguish between different
decay levels in classes. We have also observed that: (1) individually, the
developer-related subfactor that represented first-time contributors, as well as the process-related one that represented size of the changes, did not exert negative effects on the changed classes. However, when analyzing specific factor interactions, we saw that changes where both of these factors interacted tended to have a negative effect and led to decay. Interestingly, this behaviour did not alter even when the change was introduced via pull request (which usually triggers a code review process); (2) surprisingly, extraction-type refactorings often do not have a positive effect on code quality, while, by contrast, move refactorings were mostly positive. We also discuss how these findings in this dissertation can aid developers and researchers in improving their guidelines for the avoidance and monitoring of design decay.
|
2 |
[en] A MECHANISM BASED ON LOGS WITH META-INFORMATION FOR THE VERIFICATION OF CONTRACTS IN DISTRIBUTED SYSTEMS / [pt] UM MECANISMO BASEADO EM LOGS COM META-INFORMAÇÕES PARA A VERIFICAÇÃO DE CONTRATOS EM SISTEMAS DISTRIBUÍDOSPEDRO DE GOES CARNAVAL ROCHA 19 March 2015 (has links)
[pt] Contratos de software podem ser escritos como expressões lógicas capazes
de identificar falhas que ocorrem durante a utilização de um software. É possível
implementar a verificação de um contrato em um software através de assertivas
executáveis. No entanto, a forma como assertivas convencionais são
implementadas não é diretamente aplicável a sistemas distribuídos, uma vez que
apresentam dificuldades para avaliar expressões temporais, tampouco as
expressões podem envolver propriedades de diferentes processos. Este trabalho
propõe um mecanismo baseado em logs com meta-informações para a verificação
de contratos em sistemas distribuídos. Uma gramática para redigir contratos
possibilita operações temporais, ou seja, permite a especificação de condições
entre eventos, em diferentes instantes de tempo, ou mesmo garante uma sequência
de eventos, durante um período de tempo. O fluxo de eventos gerado é avaliado
assincronamente em relação à utilização do sistema, pela comparação com
contratos, previamente escritos de acordo com a gramática, que representam as
expectativas sobre o comportamento normal do sistema. / [en] Software contracts can be written as assertions that identify failures
observed while using the software. Software contracts can be implemented
through executable assertions. However, conventional assertions are not directly
applicable in distributed systems, as they present difficulties to evaluate temporal
expressions, as well as expressions involving properties of different processes.
This work proposes a mechanism based on logs with meta-information to evaluate
contracts in distributed systems. A grammar to write contracts enable temporal
operations, e.g., allows specifying conditions between events at different
timestamps, or even guaranteeing a sequence of events over a period of time. The
flow of events is evaluated asynchronously in relation to the system execution, by
comparison with contracts, previously written according to the grammar,
representing the expectations on the behavior of the system.
|
3 |
[en] REPORTING THE EXPERIENCE OF DEPLOYMENT OF SOFTWARE ENGINEERING BEST PRACTICES IN A HETEROGENEOUS ENVIRONMENT / [pt] RELATO DE EXPERIÊNCIA DA IMPLANTAÇÃO DE BOAS PRÁTICAS DE ENGENHARIA DE SOFTWARE EM UM AMBIENTE HETEROGÊNEOKELLY AZEVEDO BORGES LEAL 31 January 2011 (has links)
[pt] Métodos Ágeis são estratégias recentes na Engenharia de Software
(começaram a se popularizar em 2001), que surgiram com a promessa de serem
flexíveis e adaptáveis - características muito importantes para lidar com
constantes mudanças de requisitos em projetos. O Scrum, método ágil estudado
neste trabalho, necessita de uma infraestrutura adequada para gerar benefícios ao
time que o utiliza. Neste estudo, implementou-se o Scrum, com o auxílio de uma
infraestrutura adequada de ferramentas e processos, em uma organização que não
utilizava qualquer tipo de gerenciamento de projetos. A partir do estabelecimento
de algumas metas com o apoio do modelo GQM, buscou-se a melhoria nas
métricas relacionadas e os resultados estão detalhados neste presente trabalho. / [en] Agile methodology is a recent Software Engineering strategy (it became
popular in 2001) that was created to be flexible and adaptable enough -
characteristic very import to deal with constant requirements changes during a
project lifecycle. Scrum, the agile methodology used during this study, requires an
adequate infrastructure in order to offer its benefits. This study implemented
Scrum and an adequate infrastructure of processes and tools to support it, inside a
organization that didn’t use any kind of project management before. With the
establishment of some goals using the GQM model, some improvements were
expected and the results are detailed in this study.
|
4 |
[en] MANAGING SOFTWARE PROJECTS USING AGILE METHODOLOGIES: A CASE STUDY / [pt] GERENCIAMENTO E PLANEJAMENTO DE PROJETOS DE SOFTWARE USANDO METODOLOGIAS ÁGEIS: UM ESTUDO DE CASODANIELA MILAGROS QUENAYA MENDOZA 20 June 2011 (has links)
[pt] Hoje em dia, entregar software com qualidade, nos prazos previstos e
respeitando os custos é um grande diferencial para empresas dedicadas a esta
atividade. A constante procura de produtividade e qualidade em projetos de
software originou diversos modelos de gerenciamento que procuram auxiliar esta
área com metodologias e formas de organização de trabalho. O modelo mais
conhecido na área de gerenciamento de software é o Modelo em Cascata,
caracterizado pela rigidez e fases bem definidas nos processos. Uma vez
encontrados problemas com os modelos rígidos surgiram como alternativa de
gerenciamento os métodos ágeis, caracterizados pela agilidade, iteratividade e
adaptabilidade para diversos projetos. Diante isto o presente trabalho analisa o
problema do gerenciamento de projetos de desenvolvimento de software, e propõe
um modelo de referencia de gerenciamento de projetos de software considerando
a abordagem tradicional de gerenciamento de projetos assim como a abordagem
ágil. A pesquisa analisa a compatibilidade das metodologias ágeis com o
Capability Maturity Model Integration (CMMI) que é um modelo de maturidade
nos processos de desenvolvimento de software. Finalmente a pesquisa apresenta
um estudo de caso, que permitiu observar as forças e fraquezas dos métodos
estudados, concluindo que as praticas ágeis contribuem na melhoria e
gerenciamento de projetos de software. / [en] Today, delivering quality software, on time and respecting costs is a key
differentiator for companies dedicated to this activity. The constant search for
productivity and quality in software project management led to several models that
seek to help this area with methods and forms of work organization. The best
known model in the area of software management is the Waterfall Model,
characterized by stiffness and well-defined phases in the process. Once found
problems with rigid models have emerged as alternative management of agile
methods, characterized by agility, and adaptability to various iterative projects.
Given that this paper analyzes the problem of managing software development
projects, and proposes a reference model for managing software projects
considering the traditional approach of project management as well as the agile
approach. The research examines the compatibility of agile methodologies with
the Capability Maturity Model Integration (CMMI) is a maturity model in
software development processes. Finally the research presents a case study, which
allowed us to observe the strengths and weaknesses of the methods studied,
concluding that such practices contribute to improved and agile project
management software.
|
5 |
[en] A COMPLIANCE AND RISK-BASED SOFTWARE DEVELOPMENT PROCESS ASSESSMENT APPROACH / [pt] UMA ABORDAGEM PARA A AVALIAÇÃO DE PROCESSOS DE DESENVOLVIMENTO DE SOFTWARE BASEADA EM RISCO E CONFORMIDADERAFAEL DE SOUZA LIMA ESPINHA 30 July 2007 (has links)
[pt] Atualmente, um dos principais requisitos de um projeto de
desenvolvimento
de software é a entrega de um produto de qualidade que
obedeça ao prazo e
orçamento estipulados e atenda às necessidades do cliente.
Utilizando a premissa
de que a qualidade do produto desenvolvido está
intimamente relacionada à
qualidade dos processos utilizados no seu desenvolvimento,
muitas organizações
investem em programas de melhoria contínua de processos,
onde estes processos
são constantemente avaliados e melhorados. Este trabalho
propõe uma abordagem
para a avaliação de processos baseada em análise do risco
e da conformidade em
processos de desenvolvimento. Esta abordagem é constituída
por um método de
avaliação em duas etapas e por uma ferramenta de apoio. Na
primeira fase do
método, uma avaliação em abrangência é realizada para
identificar em que áreas
se encontram os maiores problemas nos processos. Na
segunda fase, uma
avaliação mais elaborada e criteriosa é realizada apenas
nas áreas críticas,
diminuindo o custo e aumentando a eficiência do
investimento em melhoria. A
ferramenta utiliza um mecanismo de questionários e
checklists para verificar o
risco e a conformidade dos processos da organização. Estes
questionários e
checklists estão associados a uma base de conhecimento
organizada segundo um
modelo de maturidade ou norma de qualidade de referência.
Ao final de uma
avaliação são gerados relatórios, tabelas e gráficos que
apóiam a tomada de
decisão e orientam a elaboração de um plano de ação para a
melhoria dos
processos. A abordagem foi utilizada em três experimentos
controlados. / [en] Nowadays, one of the main requirements of a software
development project
is the delivery of a quality product that conforms to the
expected schedule and
budget and satisfies customer needs. Using the hypothesis
that the quality of the
developed product is closely related to the quality of the
processes used in its
development, many organizations invest in process
improvement programs, where
the processes are continuously assessed and improved. In
this work we propose an
approach for process assessment based on risk and process
compliance analysis.
This approach is composed of a two-step appraisal method
and a supporting tool.
In the first step of the method, a quick analysis is
executed to identify the most
problematic areas. In the second one, a more elaborated
analysis is performed
only in the critical areas, reducing the costs and
increasing the effectiveness of the
appraisal. The tool uses a mechanism of surveys and
checklists to verify the risk
and the compliance of the process of the organization. A
knowledge base is
organized in accordance to a reference quality norm or
maturity model. At the end
of an assessment, reports, tables and charts support the
decision-taking, and they
can be used to guide an improvement program. The approach
has been used in
three case studies.
|
6 |
[en] SUPPORT TO THE SYNTHESIS OF STRUCTURAL MODELS OF OBJECT-ORIENTED SOFTWARE USING CO-EVOLUTIONARY GENETIC ALGORITHMS / [pt] APOIO À SÍNTESE DE MODELOS ESTRUTURAIS DE SOFTWARE ORIENTADO A OBJETOS UTILIZANDO ALGORITMOS GENÉTICOS CO-EVOLUCIONÁRIOSTHIAGO SOUZA MENDES GUIMARAES 25 October 2005 (has links)
[pt] Esta dissertação investiga o uso de Algoritmos Genéticos
Co-evolucionários
na automatização do processo de desenvolvimento de
Sistemas de Software
Orientados a Objetos. A qualidade final do software
depende principalmente da
qualidade da modelagem desenvolvida para o mesmo.
Durante
a fase de
modelagem, diversos modelos são desenvolvidos
antecipando
diversas visões do
produto final, e possibilitando a avaliação do software
antes mesmo que ele seja
implementado. A síntese de um modelo de software pode,
portanto, ser vista
como um problema de otimização onde se busca uma melhor
configuração entre
os elementos contemplados pelo paradigma de orientação a
objetos, como classes,
métodos e atributos, que atenda a critérios de qualidade
de design. O objetivo do
trabalho foi estudar uma forma de sintetizar modelagens
de
maior qualidade
através da evolução por Algoritmos Genéticos Co-
evolucionários. Para avaliar a
modelagem do software, foram investigadas métricas de
qualidade de software
tais como: Reutilização, Flexibilidade,
Inteligibilidade,
Funcionalidade,
Extensibilidade e Efetividade. Essas métricas foram
aplicadas na função de
avaliação, que por sua vez, foi definida objetivando a
síntese de uma modelagem
de software orientado a objetos com uma maior qualidade.
Neste problema,
deseja-se contemplar mais de um objetivo ao mesmo tempo.
Para isso, foi
utilizada a técnica de Pareto para problemas multi-
objetivos.
Os resultados obtidos foram comparados com modelagens
produzidas por
especialistas e as suas características analisadas. O
desempenho do AG no
processo de otimização foi comparado com o da busca
aleatória e, em todos os
casos, os resultados obtidos pelo modelo foram sempre
superiores. / [en] This work investigates the use of Co-evolutionary Genetic
Algorithms in the
automation of the development process of object-oriented
software systems. The
software final quality depends mainly on the design
quality developed for the
same. During the design phase, different models are
developed anticipating
various visions of the end product, thus making possible
the software evaluation
before it is implemented. The synthesis of a software
model can, therefore, be
seen as an optimization problem where it seeks a better
configuration between the
contemplated elements for the object-oriented paradigm, as
classes, methods and
attributes, which follows the quality design criteria. The
work goal was to study a
way to synthesize designs of better quality through its
evolution by Coevolutionary
Genetic Algorithms. In order to assess the software
quality, it was
also investigated software quality metrics, such as:
Reusability, Flexibility,
Understandability, Functionality, Extensibility and
Effectiveness. These metrics
were applied in an evaluation function that, in turn, was
defined aiming at the
object-oriented design synthesis with a better quality. In
this problem, it is desired
to contemplate more than one objective at a time. For
this, the Pareto technique
for multi-objective problems was used.
The results were compared with designs produced by
specialists and its
characteristics analyzed. The GA performance in the
optimization process was
compared with the exhaustive search and, in all cases, the
model results were
superior.
|
7 |
[pt] APLICAÇÃO DA ANÁLISE DE SISTEMAS À DEFINIÇÃO DE PROCESSOS DE DESENVOLVIMENTO DE SOFTWARE / [en] USING SOFTWARE ENGINEERING CONCEPTS TO DEFINE SOFTWARE DEVELOPMENT PROCESSESGLORIA MARIA DE PAULA OLIVEIRA 25 August 2008 (has links)
[pt] A qualidade de um produto de software depende fortemente da
qualidade do processo de software utilizado em seu
desenvolvimento. Para auxiliar na definição
de um processo de qualidade, existem diversos modelos de
processo, modelos de maturidade e normas de qualidade.
Entretanto, a tarefa de elaborar ou melhorar o processo de
desenvolvimento de sistemas pode se tornar árdua
devido à grande quantidade de informações disponíveis e
decisões a serem tomadas. Outro grande problema é o risco
de definição de um processo que não seja eficaz, ou seja,
não melhore a qualidade dos sistemas ou somente aumente
a burocracia no desenvolvimento. Esta dissertação apresenta
uma abordagem para definição de processos de
desenvolvimento de sistemas baseada nos conceitos
da análise de sistemas, ressaltando a analogia existente
entre a elaboração de um processo e de um software. Uma das
principais características da abordagem é o enfoque na área
de Gerência de Riscos, visando o controle dos
riscos identificados na definição do processo bem como os
possíveis riscos na execução do processo de desenvolvimento. / [en] Software quality depends heavily on the quality of the
process used to develop it. In order to assist the
definition of an adequate process, there are several
process models, maturity models and quality standards.
However, creating or improving a software development
process may be tough due to the large amount of available
information and decisions that have to be made. Another
central problem is the risk of defining an ineffective
process, that is, one that increases the bureaucracy
but doesn`t improve the quality of the systems developed
with its support. This dissertation presents an approach
for defining software development processes based on the
concepts of system analysis, based on the analogy between
software and process elaboration. One of the most important
attributes of this approach is the focus on Risk
Management, considering the identified risks in
the process definition as well the possible risks during
software process execution.
|
8 |
[en] A FRAMEWORK FOR SOFTWARE ENGINEERING PROCESS REPRESENTATION AND ANALYSIS / [pt] UM FRAMEWORK PARA A REPRESENTAÇÃO E ANÁLISE DE PROCESSOS DE SOFTWARELEANDRO RIBEIRO DAFLON 16 August 2004 (has links)
[pt] Diversas organizações buscam por padrões e guias de
trabalho para atingir
um processo de desenvolvimento maduro. Entretanto, mudanças
e evoluções no
negócio e na tecnologia implicam constantemente em mudanças
e evoluções no
processo. Esta dissertação propõe um framework que permite
as organizações
definirem e analisarem seus processos de desenvolvimento de
software no
contexto da organização ou projeto. Dessa forma,
integração, alteração e
evoluções do processo são facilitadas. A definição de um
processo está baseada no
conceito de Unidades de Processo. As Unidades de Processo
representam blocos
de construção utilizados na elaboração de novos modelos de
processo, podendo
utilizar partes de modelos de processos existentes ou não.
A análise do processo é
baseada em normas de qualidade ou modelos de maturidade,
como SW-CMM,
CMMI, ISO 12207. / [en] Many organizations search for standards and guidance to
achieve a mature
process. However, change and evolution of business and
technology imply
constant change and evolution of development processes. In
this dissertation we
propose a framework that offers an infrastructure allowing
organizations to define
and analyze software engineering process at organization
level or project level.
Besides that, it facilitates integration, change and
process evolution. The
definition of a process is based on a concept Process
Units. These represent
building blocks for tailoring integrated development
processes, by reusing or not
parts of existing process models. The process analysis is
based on quality
standards or maturity models, such as SW-CMM, CMMI, ISO
12207.
|
Page generated in 0.0575 seconds