+ All Categories
Home > Documents > Evelina Gabasova evelina.gabasova@mrc bsu.cam.ac...using dependency networks Evelina Gabasova...

Evelina Gabasova evelina.gabasova@mrc bsu.cam.ac...using dependency networks Evelina Gabasova...

Date post: 23-Aug-2020
Category:
Upload: others
View: 4 times
Download: 0 times
Share this document with a friend
1
Analysing programming languages using dependency networks Evelina Gabasova [email protected] Introducon Proponents of different programming languages often argue about benefits of using their language of choice. In this work, we propose a more systematic approach using network analysis techniques. We examine how the choice of programming language affects network structure of code. Nodes in the network are independent units of code. In C#, nodes represent classes, in F# nodes are formed by modules. Links are defined by dependencies, link from A to B exists if Class B inherits from class A or implements interface A. Function in B calls a function or method from A. Field, property, method or function in module B references A as a parameter or as a return type. We examine how different programming paradigms implicitly lead to different network structures. Mofs in networks Motifs are graph patterns that can be used to compare local struc- ture in complex networks. We study occurrences of small motifs on 3 or 4 nodes. Motifs in programs have direct functional meaning. We assume that densely connected motifs increase complexity of code which leads to easier introduction of bugs. Simpler network patterns generally make debugging faster as it is straightforward to disentan- gle code dependencies. Mofs on 3 nodes Summary Comparison of dependency networks in C# and F# projects indicates that different programming frameworks lead to different graph structures. Quantitative properties of such structures can reveal interesting insights about maintainability of code and its robustness with respect to defects. In future work, we plan to download bug reports from GitHub and examine how do network patterns affect reliability of code. Json.NET project also includes motifs that are not present in F#. These motifs contain cyclic dependencies which increase complexity of code and are associated with difficult main- tainability. Json.NET FSharp.Data -0.4 -0.2 0.0 0.2 0.4 0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 PCA of motif profiles Component 1 Component 2 C# F# Case study: C# versus F# We analyze multiple projects written in C# and F# program- ming languages. The two languages are relatively comparable: The same execution runtime, the .NET framework. Both are statically typed. The main difference is that C# is object-oriented and F# is primarily a functional language. We collect 21 projects in C# and 21 projects in F# for comparison, some of them implement the same functionality. Dependency graphs Focus: Json.NET versus FSharp.Data Four most common motifs in C# and F# show different frequencies in similar projects.
Transcript
Page 1: Evelina Gabasova evelina.gabasova@mrc bsu.cam.ac...using dependency networks Evelina Gabasova evelina.gabasova@mrc-bsu.cam.ac.uk Introduction Proponents of different programming languages

Analysing programming languages using dependency networks

Evelina Gabasova [email protected]

Introduction

Proponents of different programming languages often argue about

benefits of using their language of choice. In this work, we propose

a more systematic approach using network analysis techniques.

We examine how the choice of programming language affects

network structure of code.

Nodes in the network are independent units of code. In C#, nodes

represent classes, in F# nodes are formed by modules.

Links are defined by dependencies, link from A to B exists if

Class B inherits from class A or implements interface A.

Function in B calls a function or method from A.

Field, property, method or function in module B references A

as a parameter or as a return type.

We examine how different programming paradigms implicitly lead

to different network structures.

Motifs in networks

Motifs are graph patterns that can be used to compare local struc-

ture in complex networks. We study occurrences of small motifs on

3 or 4 nodes. Motifs in programs have direct functional meaning. We

assume that densely connected motifs increase complexity of code

which leads to easier introduction of bugs. Simpler network patterns

generally make debugging faster as it is straightforward to disentan-

gle code dependencies.

Motifs on 3 nodes

Summary

Comparison of dependency networks in C# and F# projects indicates

that different programming frameworks lead to different graph

structures. Quantitative properties of such structures can reveal

interesting insights about maintainability of code and its robustness

with respect to defects.

In future work, we plan to download bug reports from GitHub and

examine how do network patterns affect reliability of code.

Json.NET project also includes

motifs that are not present in

F#. These motifs contain cyclic

dependencies which increase

complexity of code and are

associated with difficult main-

tainability.

Json.NET FSharp.Data

-0.4 -0.2 0.0 0.2 0.4 0.6

-0.4

-0.2

0.0

0.2

0.4

0.6

PCA of motif profiles

Component 1

Com

ponent 2

C#

F#

Case study: C# versus F#

We analyze multiple projects written in C# and F# program-

ming languages. The two languages are relatively comparable:

The same execution runtime, the .NET framework.

Both are statically typed.

The main difference is that C# is object-oriented and F# is

primarily a functional language.

We collect 21 projects in C# and 21 projects in F# for comparison,

some of them implement the same functionality.

Dependency graphs

Focus: Json.NET versus FSharp.Data

Four most common motifs in C# and F# show different

frequencies in similar projects.

Recommended