<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Comparison of Code Smells in iOS and Android Applications</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Kristiina Rahkema</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Dietmar Pfahl</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Institute of Computer Science, University of Tartu</institution>
          ,
          <addr-line>Tartu</addr-line>
          ,
          <country country="EE">Estonia</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2020</year>
      </pub-date>
      <fpage>79</fpage>
      <lpage>86</lpage>
      <abstract>
        <p>Code smells are patterns indicating bad practices that may lead to maintainability problems. For mobile applications most of the research has been done on Android applications with very little research on iOS applications. Our goal is to compare the variety, density, and distribution of code smells in iOS and Android applications. We analysed 273 open source iOS and 694 open source Android applications. We used PAPRIKA and GraphifySwift to find 19 object oriented code smells. We discovered that the distributions and proportions of code smells in iOS and Android applications difer. More specifically, we found: a) with the exception of one code smell (DistortedHierarchy) all code smells that could be observed in Android apps also occurred in iOS apps; b) the overall density of code smells is higher on iOS than on Android with LazyClass and DataClass particularly sticking out; c) with regards to frequency, code smells are more evenly distributed on iOS than on Android, and the distributions of code smell occurrences on class level are more diferent between the platforms than on app level.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Mobile applications</kwd>
        <kwd>Android</kwd>
        <kwd>iOS</kwd>
        <kwd>Code smells</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        1https://github.com/kristiinara/GraphifySwift
forms, we adapted the code smell queries defined ties: the proportions of code smells difer between
by Rahkema et al. [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] when searching for code platforms. In addition, we saw that code smells are
smells in Android apps. In total, we identified 19 more evenly distributed in iOS apps as compared
code smell types that could potentially occur in to Android apps.
apps on both platforms. We took under consider- Then we analyzed how large the share of smelly
ation that the variety of code smells depends on apps on each platform is and how large the share
the programming language used. For example, the of smelly classes is on each platform. We did these
code smell RefusedParentBequest is not applica- analyses for each code smell type separately. It
ble to Swift because Swift lacks the  key- turned out that the percentages of smelly apps
word. Therefore, we did not include it in our anal- are relatively similar between platforms. Only the
yses. code smell DataClass is much more prominent in
      </p>
      <p>Our analysis showed that 18 of the 19 identified iOS apps than in Android apps.
code smells occurred in apps on both platforms, In addition, we found that the distributions of
i.e., Android and iOS. Code smell DistortedHier- code smell occurrences on class level are more
difarchy never occurred in iOS apps. ferent between the platforms than on app level.</p>
      <p>To better understand whether the frequency of This result might, again, be explained by the fact
occurrence is similar, we formulated our second re- that Android apps usually have larger classes and,
search question. thus, tend to have more of the code smells that
cor</p>
      <p>RQ 2: Do code smells occur with the same respond to more complex classes whereas iOS apps
density in iOS and Android apps? tend to have more compact classes and, thus, tend</p>
      <p>To answer this question, we calculated the over- to have more of the code smells that correspond to
all density of all code smells and the densities of more simple classes. This efect is more prominent
each of the 19 code smells over all apps on both iOS when doing the analysis on class level than on app
and Android. It turned out that, contrary to what level.</p>
      <p>
        Habchi et al. [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] expected, the overall density of
code smells is higher in iOS apps than in Android
apps. Code smells LazyClass, DivergentChange, 2. Related Work
PrimitiveObsession and DataClass had a
particularly high density in iOS apps. On the other hand, Code smells in desktop applications: Fowler
code smells LongMethod, LongParameterList and [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] defined 22 object oriented code smells and
proShotgunSurgery were clearly more frequent in An- vided refactorings for these code smells. Khomh
droid apps. In addition, we found that the code et al. [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] studied the impact of code smells. They
smell densities per code smell type were some- found that code smells afect classes negatively
times higher and sometimes smaller in iOS apps and that classes with more code smells were more
as compared to Android apps. This might be ex- prone to changes [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. Olbrich et al. [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] studied the
plained by the fact that Android apps tend to have evolution and impact of code smells based on two
more of the code smells that correspond to more open source systems. Their findings confirmed
complex classes whereas iOS apps tend to have that code smells afect the way how code changes
more of the code smells that correspond to more in a negative way. They were also able to
idensimple classes. tify diferent phases of evolution in code smells [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
      </p>
      <p>
        To better understand the distributions of code Linares et al. [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] made a large scale analysis of
smells in apps on the two platforms iOS and An- Java Mobile apps and discovered that anti-patterns
droid, we formulated our third research question. negatively impact software quality metrics such as
      </p>
      <p>
        RQ 3: Do code smell distributions difer be- fault-proneness [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
tween iOS and Android apps? Tufano et al. [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] studied the change history
      </p>
      <p>
        To answer this question we first compared the of 200 open source projects and found that most
proportions of code smell occurrences across all code smells are introduced when the
correspondiOS and Android apps. The results confirmed what ing code is created and not when it is changed.
we had seen when we compared code smell densi- They also found that when code does become
smelly through evolution then it can be character- code smells studied was limited due to the
numized by specific code metrics. Contrary to common ber of code smells PAPRIKA is able to detect and
belief [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] they discovered that most code smells ranged from three to four object oriented code
are not introduced by newcomers, but by develop- smells and four to six Android specific code smells
ers with high work loads and high release pressure [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ][
        <xref ref-type="bibr" rid="ref13">13</xref>
        ][
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. Mannan et al. [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] decided to broaden
[
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. this scope and studied 21 object oriented code
      </p>
      <p>
        Code smells in Android applications: Dif- smells using the commercial tool InFusion. They
ferent kinds of code smells have been researched analyzed open source Android and Java desktop
for Android, such as object-oriented, Android- apps for these 21 code smells and compared their
specific, security-related and energy-related code occurrences. Mannan et al. detected that the
vasmells. Gottschalk et al. proposed an approach riety of code smells was the same and most code
to detect energy related code smells on mobile smells occur in both systems in a similar frequency
apps and validated this approach on Android and with major diferences only for a couple of code
showed that it is possible to reduce energy con- smells. They concluded that studying code smells
sumption by refactoring the code [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. Ghafari et on mobile platforms can be done with tools meant
al. [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] studied security-related code smells and for desktop apps. They also found that the code
discovered that most apps contain at least some smells that have been researched so far are not
security-related code smells. the same ones that occur most and that the focus
      </p>
      <p>
        Hecht [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] proposed an approach to detect code should change to code smells that are more
relesmells and anti-patterns on Android systems and vant [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. They suggest that other mobile platforms
implemented this approach in a tool called PA- will have the same code smells, but do not give
PRIKA. This tool analyses the Android APK, cre- any suggestions towards the possible diferences
ates a model of the code and inserts this model into in density or distribution. They analysed 500
Anthe neo4j database. Code smells are then defined as droid and 750 Java desktop apps randomly selected
database queries which makes it possible to query from GitHub. Unfortunately, the tool Infusion used
code smells on a large number of apps at the same by Mannan et al. does not seem to be available
time. He analysed 15 popular apps for the occur- anymore. Therefore a direct comparison using
Inrences of four object oriented and three Android fusion for code smell analysis on iOS is no longer
code smells. Hecht et al. [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] tracked, the soft- possible.
ware quality of 106 popular Android apps down- Code smells in iOS applications: Habchi et
loaded from the Google Play Store along their evo- al. [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] used PAPRIKA to detect code smells in
lution. They calculated software quality scores for iOS apps. They used ANTLR4 grammars to
gendiferent versions of these apps and tracked their erate parsers for Swift and Objective-C code. They
evolution. There were diferent evolution graphs, created the apps graphs that could then be used
such as constant decline, constant rise, stability or by PAPRIKA. They analysed 176 Swift and 103
sudden change in either direction depending on Objective-C apps from a collaborative list of open
the programming practices of the team [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. This source iOS apps. In their study they analysed four
shows that code quality is not necessary linked object oriented, three iOS specific and two Android
to app size, but the programming practices of the specific code smells. They compared smell
propordevelopers. Mateus et al. [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] used PAPRIKA to tions in iOS and Android apps and discovered that
analyze Android apps written in Java and kotlin. the proportions of code smells were higher in
AnThey compared code smell occurrences in both droid apps. On the other hand proportions of code
languages and concluded that apps that were ini- smells in Objective-C and Swift were similar [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ].
tially written in Java and later introduced kotlin Rahkema et al. [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] introduced a tool called
were of better quality than other Android apps GraphifySwift that analyses Swift code and detects
[
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. They analysed a set of 2167 open source An- 34 object oriented code smells. Similarly to
PAdroid apps combining diferent databases of open PRIKA, GraphifySwift enters data about the
analsource Android apps. ysed app into the neo4j database. The database
In these papers using PAPRIKA the number of structures used by PAPRIKA and GraphifySwift
are similar, but slightly diferent. In their analy- For Android apps we used PAPRIKA to populate
sis they used the same collaborative list of open the neo4j database. We then took the queries
desource iOS apps but did not compare the results to fined by Rahkema et al. for GraphifySwift to find
Android. code smells. Since GraphifySwift was originally
      </p>
      <p>
        In the following, we extend the research in developed to analyse iOS apps we had to adapt the
[
        <xref ref-type="bibr" rid="ref2 ref3 ref5">2, 3, 5</xref>
        ]. We adapted the queries defined in [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], code smell queries so that they could be used on
where possible, so that they could be applied to the database produced by PAPRIKA. We made the
a database populated by PAPRIKA. We used PA- following changes to the code smell queries:
PRIKA to analyse Android apps and GraphifySwift We removed references to Module nodes, i.e.,
to analyse Swift apps. Then we compared the two the relationship
platforms with regards to variety, density, and
distribution of 19 code smells.
(app)-APP_OWNS_MODULE-&gt;(module)
      </p>
      <p>MODULE_OWNS_CLASS-&gt;(class)</p>
    </sec>
    <sec id="sec-2">
      <title>3. Methods</title>
      <p>was substituted by the relationship</p>
      <sec id="sec-2-1">
        <title>In Section 3.1, we present the tools used for code</title>
        <p>smell analysis. In Section 3.2, we cover the choice We removed references to argument type or
of apps and in Section 3.3 we describe the analysis substituted them with argument name.
Arguperformed. ment names are not accessible in Java bytecode
and therefore the argument name provided by
PA3.1. Code Smell Analysis PRIKA is actually the argument type.
Finally, we added the relationship
(app)-APP_OWNS_CLASS-&gt;(class)</p>
      </sec>
      <sec id="sec-2-2">
        <title>In previous research a tool called PAPRIKA has</title>
        <p>
          been used to find code smells in Android appli- (variable|argument)-IS_OF_TYPE
cations [
          <xref ref-type="bibr" rid="ref13 ref14 ref15 ref3 ref4">4, 15, 13, 3, 14</xref>
          ]. PAPRIKA analyses the -&gt;(class)
Android APK, enters data about the applications by finding classes whose name matched the
arguinto a neo4j database and defines queries for each ment name or variable type.
code smell. For analysing iOS applications Habchi After these modifications of the database and
et al. [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] used PAPRIKA to query code smells, but queries, 19 of the 34 GraphifySwift code smell
populated the neo4j database using ANTLR gram- queries could be used on the Android app database
mars. Rahkema et al. [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ] introduced a new tool produced by PAPRIKA.
called GraphifySwift that extends the functional- The code smell queries that had to be excluded
ity of PAPRIKA. It analyses Swift code, enters data contained metrics or attributes that were not
proabout the iOS applications into a neo4j database vided by PAPRIKA. We excluded for example
and defines database queries to find code smells. queries referring to code duplication, maximum
PAPRIKA is able to find four object oriented code nesting depth, number of switch statements and
smells. Since the queries for these four code smells number of comments.
are implemented identically in GraphifySwift, it For the analysis of Android apps we calculated
produces the same results as PAPRIKA for them. new thresholds based on the apps that we
analIn GraphifySwift additional code smell queries are ysed. The list of iOS and Android thresholds is
indefined. Overall, GraphySwift is able to find 34 ob- cluded in the thresholds table2.
ject oriented code smells.
        </p>
        <p>
          For the analysis of iOS apps we used the tool 3.2. Choice of Applications
GraphifySwift. We used the same thresholds as
in Rahkema et al. [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ]. Note that we focused on For analysis of iOS apps we used the same
collabSwift code as Swift has replaced Objective-C and orative list of open source iOS apps as was used by
not many diferences between the two languages
are to be expected according to Habtchi et al. [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ].
        </p>
      </sec>
      <sec id="sec-2-3">
        <title>2https://figshare.com/articles/conference_contribution/</title>
        <p>
          Thresholds_for_iOS_and_Android_code_smell_analysis/
13102991
Rahkema et al. [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ] and whose older version was DistortedHierarchy, DivergentChange,
Inapproused by Habchi et al. [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ]. The final set of success- priateIntimacy, LazyClass, LongMethod,
LongPafully analysed apps was the same as in [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ] and in- rameterList, MiddleMan,
ParallelInheritanceHiercluded 273 open source iOS apps. archies, PrimitiveObsession, SAPBreaker,
Shot
        </p>
        <p>
          For analysis of Android apps we took the list of gunSurgery, SpeculativeGeneralityProtocol,
Swisapps provided by Habchi et al. [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ]. Since the list sArmyKnife and TraditionBreaker.
only included app package names, we queried All- Below, we present and discuss the results for
FreeAPK api3 to find and download these apps. We each research question separately.
decided to search AllFreeAPK instead of GitHub, RQ 1: Are all types of object-oriented code
as PAPRIKA uses APKs for analysis and this way smells present in both iOS and Android apps?
we were able to skip the step of compiling these When comparing the occurrence of code smells
apps. Later during the analysis we needed to dis- on each platform, we found that 18 of the 19
idencard some of the very big apps due to performance tified code smells occurred in apps on both
platissues. In total we included 694 open source An- forms, i.e., Android and iOS. Code smell
Distortdroid apps in our analysis. edHierarchy never occurred in iOS apps.
Our result does not fully support Mannan et al.’s
3.3. Data Analysis expectation that mobile apps on other platforms
than Android should exhibit the same code smells
To answer RQ1, we checked whether any of the 19 [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ].
identified code smells occurred in at least one app RQ 2: Do code smells occur with the same
on each platform. density in iOS and Android apps?
        </p>
        <p>To answer RQ2, we calculated the densities of The results of our code smell density analysis
code smells for both iOS and Android apps and is shown in Figure 1. Accumulated over all code
compared these. Code smell density was calcu- smells it turned out that the apps on the iOS
platlated by counting the number of code smells (total form had a density of 41.7 smells/kilo-instructions
and per code smell type) and dividing by the num- while the apps on Android only had a density of
ber app instructions. 34.4 smells/kilo-instructions. This result is
con</p>
        <p>
          To answer RQ3, we had to perform several cal- trary to what Habchi et al. [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] expected.
culations. To calculate the relative frequencies of Moreover, it can be seen from Figure 1 that the
code smells per code smell type on each platform, code smell densities difer between iOS and
Anwe counted the code smells of a type in all apps droid. Code smells LazyClass, DivergentChange,
and divided by the total code smell count. We did PrimitiveObsession and DataClass had a
particuthis per platform. To calculate the code smell dis- larly high density in iOS apps. On the other hand,
tributions on app and class levels per platform, we code smells LongMethod, LongParameterList and
counted how many apps (and classes) contain at ShotgunSurgery were clearly more frequent in
Anleast one code smell of a certain type and then di- droid apps. The fact that code smell densities
vided by the total number of apps (and classes). were sometimes higher and sometimes lower in
iOS apps as compared to Android apps might be
explained by the fact that Android apps tend to
4. Results have more of the code smells that correspond to
We analysed 273 open source iOS apps using more complex classes whereas iOS apps tend to
GraphifySwift and 694 open source Android apps have more of the code smells that correspond to
using PAPRIKA and modified code smell queries more simple classes.
from GraphifySwift to answer our research ques- RQ 3: Do code smell distributions difer
betions. We analyzed the apps with regards to tween iOS and Android apps?
19 code smells: BlobClass, ComplexClass, Cyclic- Figure 2 shows the relative frequency of code
ClassDependency, DataClass, DataClumpFields, smell occurrences over all apps on the Android
platform (blue bars) and the iOS platform (red
bars). The results confirm what we had seen when
        </p>
        <p>80
l
e
m
sedo 60
ch
it
sppw 40
oa
f
% 20
0
se
l
sedm 15
co
fo% 10
tohegLondM ittrrseLegaaLnoPm trryungeoughSS lyzssaaLC rrkaeeBPSA itrvngehnaegeCD iiiitrsssvbeoenPOm illtspeuaadFCDm llxssepaoCCm iiIttIrrcyenaopappanm iittrrrcsyeodeahHD llssaobBC lilsscccyydnenepeaDCC liilltttrrcyvcooaeneeoaupePSG ltssaaaDC iifryssneKASwm iiilltIrrrrccsehaneanheeeaaPH iitrrrknaeodaeTB ilddaenMM
lzyssLaaC tLongehodM ittrrsLnogaaeeLPm trryhogunugeSS rrkaeeSPAB itrvgenehangeDC iiiitrvsssebeonPOm llxssopeaCCm liltsaaupedFDCm llssboaBC iiItItrrcypnpaopaenam iittrrrscyodeeahDH lilccsyscyapeneednCCD ililltttrrvyccaeeenupeaoooPSG ltssaaaDC iifrssyneSAKwm illiiItrrrrccshennaeeeaaahePH iitrrrkdaoneaeTB ilddeanMM
while only 7% of Android apps are afected),
MiddleMan (15% of iOS apps are afected but only 1%
of Android apps), and DistortedHierarchy (25 % of
Android apps are afected but none of the iOS apps
is).</p>
        <p>
          GraphifySwift is open source and also available on
the tool GitHub page. For Android analysis we
used the list of apps analysed by [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ], the list of
successfully analysed apps can be found in the list of
apps4. PAPRIKA is open source and also available
on GitHub. The adapted code smell queries used
for Android analysis can be found in the list of
Android code smell queries5.
        </p>
        <p>6. Conclusion
40
lzyssLaaC tLognedhoM ittrrsaaegoLneLPm trryunoguhgeSS rrkeeaSAPB itrvngeehagenCD liltsaupadeFCDm llxssopeaCCm iittIIrrcyapeonpapanm iiiitrvsssbeeonPOm iittrrrscyedeoahHD llssboaBC ltssaaaDC lilssccycyepneadenDCC liilltttrrycvcaeneoooeaupePSG iiilltIrrrrccsaeenaheehneaaPH iifrssyneASKwm iitrrrkdonaeeaTB ilddenaMM</p>
        <p>
          Mannan et al. [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ] analysed the density and
discFliagsusrleeve4l: bCetowmeepnarAisnodnrooifd c(bolduee)samnedlli OfrSeq(rueedn)cies on tcruilbautteidona osfimcoildaer sdmenesllistyinanAdnddirsotirdibauptpiosn. Wfoer
ciOalSand Android apps and saw that these densities and
distributions were diferent. Additionally we
discovered that one of the code smells analysed by
troduced in [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ] and validated by replicating results Mannan et al. was not present in iOS apps.
in [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ]. We adapted code smell queries defined in Habchi et al. [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] compared ratios of code smell
[
          <xref ref-type="bibr" rid="ref5">5</xref>
          ], but did so by not changing the code smell def- occurrences on iOS and Android. We extended
initions themselves. their research by adding additional code smells
        </p>
        <p>
          External Validity: We analysed open source to the analysis and found that code smell
occurapps. For swift the analysis can only be performed rences are not always higher in Android apps. For
if the code of the app is accessible. For Android the some code smells they were higher in iOS apps.
analysis could be performed on apps from the app This shows that Android apps are not
necessarstore. Therefore for both platforms open source ily smellier, but diferent kinds of code smells are
apps were chosen. Previously [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ] it was shown that more prevalent depending on the platform.
although there are some diferences between apps These results can be interesting for developers
that are on the app store the diferences are small. moving from one platform to the other. It can also
On the iOS platform we only analyzed apps written be useful for developers of tools for these
platin Swift. Given that Objective-C and Swift code is forms. We see that the emphasis on which code
quite similar, we assume our results extend to apps smells to look at is diferent depending on the
platwritten in Objective-C. form.
        </p>
        <p>
          Construct Validity: GraphifySwift uses
standard definitions of code smells found in literature
[
          <xref ref-type="bibr" rid="ref5">5</xref>
          ]. In code smell queries we use thresholds calcu- Acknowledgments
lated based on the app set analysed. Using
thresholds is a common approach for detecting code This research was partly funded by the Estonian
smells. We used the same method to determine Center of Excellence in ICT research (EXCITE),
thresholds as was used by Hecht et al. [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ], Habchi the IT Academy Programme for ICT Research
Deet al. [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] and [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ]. Thresholds might difer between velopment, the Austrian ministries BMVIT and
languages, but since they are calculated based on BMDW, and the Province of Upper Austria
unthe current set of apps analysed language specific der the COMET (Competence Centers for
Exceldiferences should be resolved. lent Technologies) Programme managed by FFG,
        </p>
        <p>
          Reliability: For iOS analysis we used the same
collaborative list of open source iOS apps written 4https://figshare.com/articles/dataset/iOS_and_Android_
in Swift as was used in [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ]. All these apps are app_analysis_data/13103012
available on GitHub. The list of successfully anal- 5https://figshare.com/articles/conference_contribution/
ysed apps can be found on the tool GitHub page. GArnadprhoiifdy_Scwodifet__sqmueerlile_sa_naadlyaspitse/d1_3f1o0r2_9P9A4PARIKA_for_
and by the group grant PRG887 of the Estonian
Research Council. We thank Rudolf Ramler for the
thorough review of a previous version of this
paper.
        </p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>M.</given-names>
            <surname>Fowler</surname>
          </string-name>
          ,
          <article-title>Refactoring: improving the design of existing code</article-title>
          ,
          <string-name>
            <surname>Addison-Wesley Professional</surname>
          </string-name>
          ,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>U. A.</given-names>
            <surname>Mannan</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Ahmed</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R. A. M.</given-names>
            <surname>Almurshed</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Dig</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Jensen</surname>
          </string-name>
          ,
          <article-title>Understanding code smells in android applications</article-title>
          ,
          <source>in: 2016 IEEE/ACM Int'l Conf. on Mobile Softw. Eng. and Systems (MOBILESoft)</source>
          , IEEE,
          <year>2016</year>
          , pp.
          <fpage>225</fpage>
          -
          <lpage>236</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>S.</given-names>
            <surname>Habchi</surname>
          </string-name>
          , G. Hecht,
          <string-name>
            <given-names>R.</given-names>
            <surname>Rouvoy</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Moha</surname>
          </string-name>
          ,
          <article-title>Code smells in ios apps: How do they compare to android?</article-title>
          ,
          <source>in: 2017 IEEE/ACM 4th Int'l Conf. on Mobile Softw. Eng. and Systems (MOBILESoft)</source>
          , IEEE,
          <year>2017</year>
          , pp.
          <fpage>110</fpage>
          -
          <lpage>121</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>G.</given-names>
            <surname>Hecht</surname>
          </string-name>
          ,
          <article-title>An approach to detect android antipatterns</article-title>
          ,
          <source>in: Proc. of the 37th Int'l Conf. on Software Engineering-Volume</source>
          <volume>2</volume>
          , IEEE Press,
          <year>2015</year>
          , pp.
          <fpage>766</fpage>
          -
          <lpage>768</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>K.</given-names>
            <surname>Rahkema</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Pfahl</surname>
          </string-name>
          ,
          <article-title>Empirical study on code smells in ios applications</article-title>
          ,
          <source>in: Proc. of the IEEE/ACM 7th Int'l Conf. on Mobile Softw. Eng. and Systems</source>
          , MOBILESoft '20,
          <string-name>
            <surname>Association</surname>
          </string-name>
          for Computing Machinery, New York, NY, USA,
          <year>2020</year>
          , p.
          <fpage>61</fpage>
          -
          <lpage>65</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>F.</given-names>
            <surname>Khomh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. Di</given-names>
            <surname>Penta</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.-G.</given-names>
            <surname>Gueheneuc</surname>
          </string-name>
          ,
          <article-title>An exploratory study of the impact of code smells on software change-proneness</article-title>
          ,
          <source>in: 2009 16th Working Conf. on Reverse Engineering</source>
          , IEEE,
          <year>2009</year>
          , pp.
          <fpage>75</fpage>
          -
          <lpage>84</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>S.</given-names>
            <surname>Olbrich</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. S.</given-names>
            <surname>Cruzes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Basili</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Zazworka</surname>
          </string-name>
          ,
          <article-title>The evolution and impact of code smells: A case study of two open source systems, in: 2009 3rd Int'l symposium on empirical software engineering and measurement</article-title>
          , IEEE,
          <year>2009</year>
          , pp.
          <fpage>390</fpage>
          -
          <lpage>400</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>M.</given-names>
            <surname>Linares-Vásquez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Klock</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>McMillan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Sabané</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Poshyvanyk</surname>
          </string-name>
          , Y.-G. Guéhéneuc,
          <article-title>Domain matters: bringing further evidence of the relationships among anti-patterns, application domains, and quality-related metrics in java mobile apps</article-title>
          ,
          <source>in: Proc. of the 22nd Int'l Conf. on Program Comprehension</source>
          , ACM,
          <year>2014</year>
          , pp.
          <fpage>232</fpage>
          -
          <lpage>243</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>M.</given-names>
            <surname>Tufano</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Palomba</surname>
          </string-name>
          , G. Bavota,
          <string-name>
            <given-names>R.</given-names>
            <surname>Oliveto</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. Di</given-names>
            <surname>Penta</surname>
          </string-name>
          ,
          <string-name>
            <surname>A. De Lucia</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Poshyvanyk</surname>
          </string-name>
          ,
          <article-title>When and why your code starts to smell bad</article-title>
          ,
          <source>in: Proc. of the 37th Int'l Conf. on Software Engineering-Volume</source>
          <volume>1</volume>
          , IEEE Press,
          <year>2015</year>
          , pp.
          <fpage>403</fpage>
          -
          <lpage>414</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>T.</given-names>
            <surname>Sharma</surname>
          </string-name>
          ,
          <source>Extending Maintainability Analysis Beyond Code Smells, Ph.D. thesis</source>
          ,
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>M.</given-names>
            <surname>Gottschalk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Jelschen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Winter</surname>
          </string-name>
          ,
          <article-title>Saving energy on mobile devices by refactoring</article-title>
          ., in: EnviroInfo,
          <year>2014</year>
          , pp.
          <fpage>437</fpage>
          -
          <lpage>444</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>M.</given-names>
            <surname>Ghafari</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Gadient</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Nierstrasz</surname>
          </string-name>
          ,
          <article-title>Security smells in android</article-title>
          ,
          <source>in: 2017 IEEE 17Th Int'l Working Conf. on Source Code Analysis and Manipulation (SCAM)</source>
          , IEEE,
          <year>2017</year>
          , pp.
          <fpage>121</fpage>
          -
          <lpage>130</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>G.</given-names>
            <surname>Hecht</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Benomar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Rouvoy</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Moha</surname>
          </string-name>
          , L. Duchien,
          <article-title>Tracking the software quality of android applications along their evolution (t)</article-title>
          ,
          <source>in: 2015 30th IEEE/ACM Int'l Conf. on Automated Softw. Eng. (ASE)</source>
          , IEEE,
          <year>2015</year>
          , pp.
          <fpage>236</fpage>
          -
          <lpage>247</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>B. G.</given-names>
            <surname>Mateus</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Martinez</surname>
          </string-name>
          ,
          <article-title>An empirical study on quality of android applications written in kotlin language, Empirical Software Engineering (</article-title>
          <year>2018</year>
          )
          <fpage>1</fpage>
          -
          <lpage>38</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>G.</given-names>
            <surname>Hecht</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Rouvoy</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Moha</surname>
          </string-name>
          , L. Duchien,
          <article-title>Detecting antipatterns in android apps</article-title>
          ,
          <source>in: Proc. of the Second ACM Int'l Conf. on Mobile Softw. Eng. and Systems</source>
          , IEEE Press,
          <year>2015</year>
          , pp.
          <fpage>148</fpage>
          -
          <lpage>149</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>