ESEC/FSE ’23, December 3–9, 2023, San Francisco, CA, USA Jacob Krüger, Yi Li, Chenguang Zhu, Marsha Chechik, Thorsten Berger, and Julia Rubin
techniques to check that SCIs are fullled throughout the entire
system evolution. Depending on which strategy an organization
employs (i.e., lazily checking, eagerly controlling), such a library
can warn about violations of SCIs or not even allow developers
to execute such violations. We argue that various dierent tech-
niques can and must be used to balance each technique’s strengths
and weaknesses, for instance, test cases, software verication, or
formalized operations on the system. Notably, dening the inten-
tion specications and how to execute corresponding conformance
checks lazily or eagerly is the most challenging aspect of our idea.
4 STEPS FOR FUTURE WORK
To advance towards our vision of improving software evolution,
we see several open research gaps. In the following, we describe
these gaps, sketch some rst steps into each direction, and what
(intermediate) benets addressing these gaps can yield.
Understanding Intentions. A primary step to specify intentions is
to understand how developers are expressing, using, and reecting
on what types of SCIs. This way, we are able to identify in what
context SCIs are relevant to them and for what purposes SCIs are
used. As a step towards this direction, we need empirical studies, for
instance, on pull-request templates (e.g., whether they are used and
enforced, what they exhibit) or developers’ cognition (e.g., whether
they are thinking about and in terms of SCIs [
16
]). Before eliciting a
complete model of SCIs, we see this as benecial to understand how
developers interact and behave with their software systems and its
evolution. Understanding such aspects would greatly help design
novel concepts for program comprehension and adapt existing
solutions to new foundational insights on developers’ cognition.
Intended versus Actual Change. Stakeholders and developers
usually have a particular SCI in mind, for instance, adding a new
feature (i.e., enhancive). However, this SCI may not be implemented
as planned, leading to misbehavior or bugs, due to the actual change.
As a result, corrective or perfective changes are needed, aiming to
get the actual behavior in line with the intended one. So, in addition
to one of such four classes, each change may also be distinguished
based on whether it fullls its SCI. Identifying changes that do
not fulll their SCI can help developers identify bugs faster and
avoid the propagation of faulty code. Also, understanding the root
causes for a mismatch in intended and actual behavior is key to
dene specications for SCIs, since they represent under what
circumstances such specications are violated.
Behavior-Changing versus Behavior-Preserving Intention.
While most changes are intended to change system behavior (e.g.,
xing a bug, adding new functionality), others are not (e.g., refac-
toring, ensuring compatibility with hardware). So, some SCIs can
also be considered as behavior preserving. This distinction can help
identify changes relevant for certain software-engineering activi-
ties, but most importantly, it is arguably much more challenging to
specify behavior-preserving SCIs. For example, refactorings should
be behavior preserving, and knowing the corresponding changes
can facilitate library adaptations, merging, or cherry-picking by
indicating that no behavioral adaptations are required. In contrast,
a bug x should change (i.e., correct) behavior, which is why such
changes could be identied with tests, and could help evaluate the
quality and completeness of a test suite.
Tangled SCIs. In our ideal scenario, every change (e.g., in the
form of a commit) would represent a single, correctly implemented
SCI. However, in practice, changes often comprise multiple tangled
SCIs, for instance, xing a bug (i.e., corrective) and refactoring
(i.e., perfective) [
4
,
7
]. Such SCI-tangling changes are problematic,
since they are harder to comprehend for developers, complicate
integration, and challenge analysis tools. For example, developers
may want to cherry-pick and propagate a particular intention that is
tangled with other intentions. If these SCIs cannot be identied and
separated, the developers need to propagate additional, unwanted
changes to ensure correct behavior [
20
]. Achieving the ideal of a
one-to-one mapping between intentions and changes would help
facilitate support for such use cases. So, we argue that methods
and techniques for untangling SCIs (e.g., splitting a commit into
multiple) are important.
Declaring SCIs. Building on insights for the previous points, we
will be able to dene specications for SCIs, that is, some form of
declaration developers can use to ensure and control that only a
specic SCI is fullled. While there have been some attempts, such
a declaration is highly challenging (i.e., dening clear boundaries
between specic SCIs), and poses immediate new questions. For
instance, we have to dene whether missing declarations for some
changes, SCIs, or parts of a software system will mean that other
declarations become invalid. Moreover, we need to identify what
we need to declare on what level of detail in what format (e.g., via
annotations or integrated tooling), and how to maintain the decla-
rations themselves. The declarations then serve as the foundation
for actually controlling software evolution.
Developing an SCI-Management Framework. Recovering SCIs
for existing systems is important to analyze and introduce SCIs in
real-world settings. To enable such an analysis, we seek a frame-
work that incorporates dierent techniques for recovering SCIs.
The framework must enable its users to make sense of unique,
incomplete, inconclusive, and diverging classications of SCIs re-
covered from each technique. Building on the insights gained for
the previous directions, we aim to advance towards a management
framework that enables developers to eagerly declare and control
SCIs for software engineering. So, instead of recovering SCIs when
needed, they could be used as the primary notion for managing a
system. Ideally, this can help address the problems we highlighted,
and thus facilitate developers’ tasks.
5 CONCLUSION
In this paper, we reected on the notion of intentions in software en-
gineering and sketched a vision for using SCIs to manage software
evolution. Our long-term vision is to declare and specify SCIs to de-
ne what developers are allowed to implement for a certain (set of)
changes, for instance, in a pull request. As guidance, we sketched
future research directions, which are primarily connected to:
•
Empirically analyzing SCIs, including their relevance for
developers, their tangling, and how to distinguish them.
• Designing techniques for specifying and checking SCIs.
•
Engineering tools for fully and eagerly controlling software
evolution based on SCIs.
This as an ambitious research agenda, but already even steps will
yield novel insights to help improve research and practice.