Exemplo n.º 1
0
 /// <summary>
 /// Calculate number of fixed bugs were fixed in revision or before it.
 /// </summary>
 /// <param name="code"></param>
 /// <param name="revision"></param>
 /// <returns></returns>
 public static int CalculateNumberOfDefects(this CodeBlockSelectionExpression code, string revision)
 {
     return(code.ModifiedBy()
            .Modifications().ContainCodeBlocks()
            .Commits().TillRevision(revision).ContainModifications()
            .BugFixes().InCommits().Count());
 }
Exemplo n.º 2
0
 public static double CalculateDefectCodeSize(this CodeBlockSelectionExpression code, string revision)
 {
     return(-code
            .Commits().TillRevision(revision)
            .Modifications().InCommits()
            .CodeBlocks().Again().ModifiedBy().InModifications().InBugFixes().CalculateLOC());
 }
Exemplo n.º 3
0
        public static IDictionary <int, double> CalculateRemainingCodeSize(this CodeBlockSelectionExpression code, string revision)
        {
            Dictionary <int, double> remainingCode = new Dictionary <int, double>();

            foreach (var codeByAddedCode in (
                         from acb in code
                         join dcb in
                         (
                             from cb in code.Queryable <CodeBlock>()
                             join m in code.Queryable <Modification>() on cb.ModificationID equals m.ID
                             join c in code.Queryable <Commit>() on m.CommitID equals c.ID
                             let revisionOrderedNumber = code.Queryable <Commit>()
                                                         .Single(x => x.Revision == revision)
                                                         .OrderedNumber
                                                         where
                                                         c.OrderedNumber <= revisionOrderedNumber
                                                         select cb
                         ) on acb.ID equals dcb.TargetCodeBlockID into dcbj
                         from dcb in dcbj.DefaultIfEmpty()
                         group dcb by acb into g
                         select new
            {
                AddedCodeID = g.Key.ID,
                CodeSize = g.Key.Size + g.Sum(x => x == null ? 0 : x.Size)
            }
                         ).Where(x => x.CodeSize > 0))
            {
                remainingCode.Add(codeByAddedCode.AddedCodeID, codeByAddedCode.CodeSize);
            }

            return(remainingCode);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Calculates alternative defect density for specified code.
        /// Total code size is added LOC at the moment.
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public static double CalculateDefectDensity(this CodeBlockSelectionExpression code)
        {
            code = code.Added().Fixed();

            return(CalculateDefectDensity(
                       code.CalculateLOC(),
                       code.CalculateNumberOfDefects()
                       ));
        }
Exemplo n.º 5
0
        /// <summary>
        /// Calculates traditional defect density for specified code.
        /// Total code size is LOC at the moment
        /// (added code minus removed code).
        /// </summary>
        /// <param name="code">Code set to calc metric for.</param>
        /// <returns>Defect density.</returns>
        public static double CalculateTraditionalDefectDensity(this CodeBlockSelectionExpression code)
        {
            code = code.Added().Fixed();

            return(CalculateDefectDensity(
                       code.CalculateLOC() + code.ModifiedBy().Deleted().CalculateLOC(),
                       code.CalculateNumberOfDefects()
                       ));
        }
Exemplo n.º 6
0
 /// <summary>
 /// Calculate number of fixed bugs in specified code
 /// </summary>
 public static int CalculateNumberOfDefects(this CodeBlockSelectionExpression code)
 {
     return(code.ModifiedBy()
            .Modifications()
            .ContainCodeBlocks()
            .Commits()
            .ContainModifications()
            .AreBugFixes()
            .Count());
 }
Exemplo n.º 7
0
        public static double CalculateDefectCodeSizePerDefect(this CodeBlockSelectionExpression code, string revision)
        {
            code = code.Fixed();

            int numberOfDefects = code.CalculateNumberOfDefects(revision);

            return(numberOfDefects > 0 ?
                   code.CalculateDefectCodeSize(revision) / numberOfDefects
                                :
                   0);
        }
Exemplo n.º 8
0
        public static double CalculateDefectDensity(this CodeBlockSelectionExpression code, string revision)
        {
            code = code
                   .Commits().TillRevision(revision)
                   .CodeBlocks().Again().AddedInitiallyInCommits().Fixed();

            return(CalculateDefectDensity(
                       code.CalculateLOC(),
                       code.CalculateNumberOfDefects(revision)
                       ));
        }
Exemplo n.º 9
0
        /// <summary>
        /// Calculate traditional defect density for specified code
        /// were added in revision or before it.
        /// </summary>
        public static double CalculateTraditionalDefectDensity(this CodeBlockSelectionExpression code, string revision)
        {
            code = code
                   .Commits().TillRevision(revision)
                   .CodeBlocks().Again().AddedInitiallyInCommits().Fixed();

            return(CalculateDefectDensity(
                       code.CalculateNumberOfDefects(revision),
                       code.CalculateLOC()
                       +
                       code
                       .Modifications().InCommits()
                       .CodeBlocks().Again().ModifiedBy().Removed().InModifications().CalculateLOC()
                       ));
        }
Exemplo n.º 10
0
 public static double CalculateLOC(this CodeBlockSelectionExpression code)
 {
     return(code.Sum(x => (double?)x.Size) ?? 0);
 }
Exemplo n.º 11
0
 public static double CalculateDefectCodeSize(this CodeBlockSelectionExpression code)
 {
     return(-code.ModifiedBy().InBugFixes().CalculateLOC());
 }