Top Banner
Detangling software dependency networks Evelina Gabasova @evelgab
30

Detangling software dependency networks Evelina Gabasova @evelgab.

Jan 19, 2016

Download

Documents

Lucinda Logan
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Detangling software dependency networks Evelina Gabasova @evelgab.

Detangling software dependency networks

Evelina Gabasova@evelgab

Page 2: Detangling software dependency networks Evelina Gabasova @evelgab.

Sometimes projects get ugly

TheDailyWTF.com

Page 3: Detangling software dependency networks Evelina Gabasova @evelgab.

Brian Foote and Joseph Yoder, 1997

Big ball of mud

Page 4: Detangling software dependency networks Evelina Gabasova @evelgab.

Effect of programming language?

How do dependency networks look in object-oriented and

functional code?

Dependency networks

Page 5: Detangling software dependency networks Evelina Gabasova @evelgab.

Scott WlaschinF# for fun and profit

Page 6: Detangling software dependency networks Evelina Gabasova @evelgab.

The same execution runtime: .NET framework

Statically typed

Object oriented Functional-firstTypes see all types File order

matters

C# versus F#

Page 7: Detangling software dependency networks Evelina Gabasova @evelgab.

F# source

code

C# source

code

Common intermediate Language (CIL)

Native code

Page 8: Detangling software dependency networks Evelina Gabasova @evelgab.

Nodes• Classes in C#• Modules & types in F#

Links• 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

Structure of a network

A B

Page 9: Detangling software dependency networks Evelina Gabasova @evelgab.

Representing the network

A B CA 0 0 0B 1 0 0C 1 1 0

type C = {Name : string}type B = {First: C; Second: C}module A = let twice (x:C) = {First=x; Second=x}

Page 10: Detangling software dependency networks Evelina Gabasova @evelgab.

20 projects in each language

Hard to make an objective comparison

Antlr, AutoMapper, Castle, elmah, EntityFramework, FParsecCS, log4net, MathNet.Numerics, SignalR,

Bcl.Runtime, Owin, Cecil, Moq, Nancy, Newtonsoft.Json, Nuget, NUnit, SpecFlow, xunit, YamlDotNet

canopy, Deedle, Fake, Foq, FParsecFS, FsCheck, FSharp.Compiler.Service, FSharp.Core, FSharp.Data,

FSharp.Data.Twitter, FSharpx, FsPowerPack, FsSql, FsUnit, FsYaml, Storm, TickSpec, WebSharper, WebSharper.Core,

WebSharper.Html

Comparing projects

Page 11: Detangling software dependency networks Evelina Gabasova @evelgab.

Good intentions

Page 12: Detangling software dependency networks Evelina Gabasova @evelgab.

Json.NETand

FSharp.Data

Focus

Page 13: Detangling software dependency networks Evelina Gabasova @evelgab.

Network sizes

Page 14: Detangling software dependency networks Evelina Gabasova @evelgab.

Network structures

Page 15: Detangling software dependency networks Evelina Gabasova @evelgab.

Network diameter

Page 16: Detangling software dependency networks Evelina Gabasova @evelgab.

Diameters in C# and F#

Page 17: Detangling software dependency networks Evelina Gabasova @evelgab.

Spaghetti code

Page 18: Detangling software dependency networks Evelina Gabasova @evelgab.

Motifs and cliques

Page 19: Detangling software dependency networks Evelina Gabasova @evelgab.

I’ll change this little thing…

Page 20: Detangling software dependency networks Evelina Gabasova @evelgab.

Frequent motifs

Page 21: Detangling software dependency networks Evelina Gabasova @evelgab.

45%

C#-only motifs

65% 70% 20%

Page 22: Detangling software dependency networks Evelina Gabasova @evelgab.

Most common in F# and C#

Motifs on 4 nodes

Page 23: Detangling software dependency networks Evelina Gabasova @evelgab.

129 C#-only motifs

Entity.Framework, Json.NET, Mono.Cecil

C#-only motifs

Page 24: Detangling software dependency networks Evelina Gabasova @evelgab.

Json.NET FSharp.Data

Largest cliques

Page 25: Detangling software dependency networks Evelina Gabasova @evelgab.

Largest cliques

C#Average: 5.6

Absolutely largest clique: 11 nodes

F#Average: 3.9

Absolutely largest clique: 6 nodes

Page 26: Detangling software dependency networks Evelina Gabasova @evelgab.

Largest cliques

C#Average: 5.6

Absolutely largest clique: 11 nodes

F#Average: 3.9

Absolutely largest clique: 6 nodes

Entity Framework

Deedle

Page 27: Detangling software dependency networks Evelina Gabasova @evelgab.

Roslyn

Page 28: Detangling software dependency networks Evelina Gabasova @evelgab.
Page 29: Detangling software dependency networks Evelina Gabasova @evelgab.

Beware of cyclic dependencies.

Language may help.It’s harder to create cycles in F#!

Taming complexity

Page 30: Detangling software dependency networks Evelina Gabasova @evelgab.

Thank you!

@[email protected]

fsharp.org

F# eXchange 201517 April, London