detangling software dependency networks evelina gabasova @evelgab

30
Detangling software dependency networks Evelina Gabasova @evelgab

Upload: lucinda-logan

Post on 19-Jan-2016

218 views

Category:

Documents


3 download

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