microsoft / botbuilder-dotnet
Unit Size

The distribution of size of units (measured in lines of code).

Intro
  • Unit size measurements show the distribution of size of units of code (methods, functions...).
  • Units are classified in four categories based on their size (lines of code): 1-20 (small units), 20-50 (medium size units), 51-100 (long units), 101+ (very long units).
  • You should aim at keeping units small (< 20 lines). Long units may become "bloaters", code that have increased to such gargantuan proportions that they are hard to work with.
Learn more...
Unit Size Overall
  • There are 4,064 units with 52,521 lines of code in units (59.8% of code).
    • 10 very long units (1,504 lines of code)
    • 95 long units (6,354 lines of code)
    • 618 medium size units (18,772 lines of code)
    • 858 small units (12,689 lines of code)
    • 2,483 very small units (13,202 lines of code)
2% | 12% | 35% | 24% | 25%
Legend:
101+
51-100
21-50
11-20
1-10
Unit Size per Extension
101+
51-100
21-50
11-20
1-10
cs2% | 12% | 35% | 24% | 25%
Unit Size per Logical Component
primary logical decomposition
101+
51-100
21-50
11-20
1-10
libraries/Microsoft.Bot.Builder.Dialogs.Adaptive8% | 16% | 31% | 20% | 23%
libraries/AdaptiveExpressions4% | 13% | 38% | 22% | 21%
libraries/Microsoft.Bot.Builder.Dialogs.Debugging19% | 5% | 20% | 24% | 30%
libraries/Parsers12% | 22% | 39% | 10% | 15%
libraries/Microsoft.Bot.Builder.AI.LUIS7% | 10% | 38% | 22% | 21%
libraries/Microsoft.Bot.Builder1% | 7% | 35% | 29% | 26%
libraries/Microsoft.Bot.Connector0% | 20% | 24% | 26% | 29%
libraries/Microsoft.Bot.Builder.LanguageGeneration0% | 20% | 40% | 24% | 15%
libraries/Adapters0% | 28% | 32% | 22% | 17%
libraries/Microsoft.Bot.Builder.Dialogs0% | 6% | 46% | 22% | 24%
libraries/Microsoft.Bot.Connector.Streaming0% | 17% | 44% | 21% | 16%
libraries/integration0% | 10% | 50% | 15% | 23%
libraries/Microsoft.Bot.Builder.AI.Orchestrator0% | 58% | 28% | 4% | 8%
libraries/Microsoft.Bot.Builder.Dialogs.Declarative0% | 13% | 24% | 30% | 31%
libraries/Microsoft.Bot.Streaming0% | 6% | 30% | 40% | 22%
FunctionalTests/Microsoft.Bot.Builder.FunctionalTests0% | 13% | 35% | 29% | 21%
libraries/Microsoft.Bot.Builder.Azure0% | 13% | 63% | 11% | 11%
libraries/Microsoft.Bot.Builder.AI.QnA0% | 8% | 63% | 13% | 15%
libraries/Microsoft.Bot.Builder.Dialogs.Adaptive.Testing0% | 0% | 47% | 22% | 29%
libraries/Microsoft.Bot.Configuration0% | 0% | 47% | 28% | 24%
libraries/Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime0% | 0% | 74% | 15% | 9%
libraries/Microsoft.Bot.Builder.Azure.Blobs0% | 0% | 81% | 8% | 10%
generators/vsix-vs-win0% | 0% | 21% | 46% | 31%
generators/dotnet-templates0% | 0% | 18% | 49% | 31%
libraries/Microsoft.Bot.Schema0% | 0% | 2% | 19% | 78%
libraries/Microsoft.Bot.Builder.TemplateManager0% | 0% | 30% | 41% | 28%
libraries/Microsoft.Bot.Builder.ApplicationInsights0% | 0% | 0% | 96% | 3%
libraries/Microsoft.Bot.Builder.Testing0% | 0% | 0% | 35% | 64%
libraries/Microsoft.Bot.Builder.Azure.Queues0% | 0% | 0% | 100% | 0%
Alternative Visuals
Longest Units
Top 20 longest units
Unit# linesMcCabe index# params
private async Task DispatchAsync()
in libraries/Microsoft.Bot.Builder.Dialogs.Debugging/DialogDebugAdapter.cs
217 31 2
private static IDictionary GetStandardFunctions()
in libraries/AdaptiveExpressions/ExpressionFunctions.cs
188 2 0
public override void ConfigureServices()
in libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/AdaptiveBotComponent.cs
164 4 2
private Operation AddNode()
in libraries/AdaptiveExpressions/TriggerTrees/Node.cs
160 30 2
public override async Task BeginDialogAsync()
in libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/HttpRequest.cs
149 25 3
private static LuResource ExtractFileContent()
in libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/LuParser.cs
141 18 3
protected virtual async Task ProcessEventAsync()
in libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/AdaptiveDialog.cs
140 20 4
private bool MatchesAssignment()
in libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/AdaptiveDialog.cs
123 36 2
internal static JToken MapProperties()
in libraries/Microsoft.Bot.Builder.AI.LUIS/V3/LuisUtil.cs
112 34 2
public override async Task ProcessRequestAsync()
in libraries/Microsoft.Bot.Builder/Streaming/StreamingRequestHandler.cs
110 18 4
private List AssignEntities()
in libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/AdaptiveDialog.cs
98 22 4
public override async Task RecognizeAsync()
in libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Recognizers/RegexRecognizer.cs
96 15 5
public async Task DeleteActivityWithHttpMessagesAsync()
in libraries/Microsoft.Bot.Connector/Conversations.cs
96 18 4
public async Task DeleteConversationMemberWithHttpMessagesAsync()
in libraries/Microsoft.Bot.Connector/Conversations.cs
96 18 4
public override List VisitStructuredBody()
in libraries/Microsoft.Bot.Builder.LanguageGeneration/Expander.cs
95 18 1
private void RemoveTrigger()
in libraries/AdaptiveExpressions/TriggerTrees/Node.cs
94 23 3
private async Task RecognizeInternalAsync()
in libraries/Microsoft.Bot.Builder.AI.LUIS/V3/LuisRecognizer.cs
94 9 5
public static bool TryResolvePath()
in libraries/Microsoft.Bot.Builder.Dialogs/ObjectPath.cs
90 20 4
public override async Task RecognizeAsync()
in libraries/Microsoft.Bot.Builder.AI.Orchestrator/OrchestratorRecognizer.cs
88 13 5
private static List TokenizeUtterance()
in libraries/Parsers/Microsoft.Bot.Builder.Parsers.LU/Visitor.cs
86 15 1