Detangling software dependency networks Evelina Gabasova @evelgab.
-
Upload
lucinda-logan -
Category
Documents
-
view
218 -
download
3
Transcript of Detangling software dependency networks Evelina Gabasova @evelgab.
![Page 1: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/1.jpg)
Detangling software dependency networks
Evelina Gabasova@evelgab
![Page 2: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/2.jpg)
Sometimes projects get ugly
TheDailyWTF.com
![Page 3: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/3.jpg)
Brian Foote and Joseph Yoder, 1997
Big ball of mud
![Page 4: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/4.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/5.jpg)
Scott WlaschinF# for fun and profit
![Page 6: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/6.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/7.jpg)
F# source
code
C# source
code
Common intermediate Language (CIL)
Native code
![Page 8: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/8.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/9.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/10.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/11.jpg)
Good intentions
![Page 12: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/12.jpg)
Json.NETand
FSharp.Data
Focus
![Page 13: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/13.jpg)
Network sizes
![Page 14: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/14.jpg)
Network structures
![Page 15: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/15.jpg)
Network diameter
![Page 16: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/16.jpg)
Diameters in C# and F#
![Page 17: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/17.jpg)
Spaghetti code
![Page 18: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/18.jpg)
Motifs and cliques
![Page 19: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/19.jpg)
I’ll change this little thing…
![Page 20: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/20.jpg)
Frequent motifs
![Page 21: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/21.jpg)
45%
C#-only motifs
65% 70% 20%
![Page 22: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/22.jpg)
Most common in F# and C#
Motifs on 4 nodes
![Page 23: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/23.jpg)
129 C#-only motifs
Entity.Framework, Json.NET, Mono.Cecil
C#-only motifs
![Page 24: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/24.jpg)
Json.NET FSharp.Data
Largest cliques
![Page 25: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/25.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/26.jpg)
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.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/27.jpg)
Roslyn
![Page 28: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/28.jpg)
![Page 29: Detangling software dependency networks Evelina Gabasova @evelgab.](https://reader036.fdocuments.us/reader036/viewer/2022062519/5697c0011a28abf838cc25f9/html5/thumbnails/29.jpg)
Beware of cyclic dependencies.
Language may help.It’s harder to create cycles in F#!
Taming complexity