2. Filter methods removed less than 3 times 3. Manual inspection of the rest of the candidates 4. Answer RQ for all the true deprecation- based ripples
of deprecated methods triggered ripple effects. 7% of deprecated classes triggered ripple effects. ⤷ developers do not know their clients and program defensively
of deprecated methods triggered ripple effects. 7% of deprecated classes triggered ripple effects. ⤷ developers do not know their clients and program defensively clients may still be unaware of deprecations ⤷
time (in days) • • • • • • • • • • 0 200 400 600 800 (i) reaction Time 0 10 20 30 40 50 60 (ii) adaptation time For a given project, the adaptation time is the time between the first reaction and the last reaction to the API change
time (in days) ⤷ most projects are quick to react and adapt; but not all are • • • • • • • • • • 0 200 400 600 800 (i) reaction Time 0 10 20 30 40 50 60 (ii) adaptation time For a given project, the adaptation time is the time between the first reaction and the last reaction to the API change
time (in days) ⤷ most projects are quick to react and adapt; but not all are • • • • • • • • • • 0 200 400 600 800 (i) reaction Time 0 10 20 30 40 50 60 (ii) adaptation time For a given project, the adaptation time is the time between the first reaction and the last reaction to the API change ⤷ On the scale of the ecosystem, some ripple effects lasted for years.
projects ⤷ common reasons for not reacting are stagnancy, forks, but also freezed dependencies and unawareness. No counter- reactions 0 18 35 53 70 20% 40% 66%
Probability of most likely replacement Frequency of most frequent replacement addEntity: was replaced by: add: addModel: addObject: addAll: addSibling: 0 20 40 60 80
reactions 0 20 40 60 80 100 Probability of most likely replacement Frequency of most frequent replacement addEntity: was replaced by: add: addModel: addObject: addAll: addSibling: 0 20 40 60 80
reactions 0 20 40 60 80 100 Probability of most likely replacement Frequency of most frequent replacement addEntity: was replaced by: add: addModel: addObject: addAll: addSibling: 0 20 40 60 80 16% of deprecations had a systematic replacement ⤷
to whether developer followed the recommendation. Mostly followed: if “X” most people did X Somewhat followed: most people did Y, but others did X Not followed: most people did Y, Z ... Missing: no recommendation, vague recommendation. foo: x self deprecated: ‘use method bar instead’
to whether developer followed the recommendation. Mostly followed: if “X” most people did X Somewhat followed: most people did Y, but others did X Not followed: most people did Y, Z ... Missing: no recommendation, vague recommendation. foo: x self deprecated: ‘use method bar instead’ self deprecated: ‘removed functionality’ self deprecated: ‘use canvas API’ self deprecated: ‘ugly method, do not call it!’
only consider explicit deprecation so far Partially manual analysis Single case study with peculiarities: – Dynamically typed language (Smalltalk) – Fork in the community
be improved Added Removed Required Provided ... Version 1 Version 2 Version i Version n ... System Version Ecosystem History History ... System History ... Artifacts History History
be improved ⤷ Some API deprecations have a large impact Added Removed Required Provided ... Version 1 Version 2 Version i Version n ... System Version Ecosystem History History ... System History ... Artifacts History History
be improved ⤷ Some API deprecations have a large impact ⤷ Developers do not know how their software is used Added Removed Required Provided ... Version 1 Version 2 Version i Version n ... System Version Ecosystem History History ... System History ... Artifacts History History
be improved ⤷ Some API deprecations have a large impact ⤷ Developers do not know how their software is used ⤷ Reactions to API changes can be partially automated Added Removed Required Provided ... Version 1 Version 2 Version i Version n ... System Version Ecosystem History History ... System History ... Artifacts History History
be improved ⤷ Some API deprecations have a large impact ⤷ Developers do not know how their software is used ⤷ Reactions to API changes can be partially automated ⤷ Tool support is needed to help with API changes Added Removed Required Provided ... Version 1 Version 2 Version i Version n ... System Version Ecosystem History History ... System History ... Artifacts History History
be improved ⤷ Some API deprecations have a large impact ⤷ Developers do not know how their software is used ⤷ Reactions to API changes can be partially automated ⤷ Tool support is needed to help with API changes Added Removed Required Provided ... Version 1 Version 2 Version i Version n ... System Version Ecosystem History History ... System History ... Artifacts History History