示例#1
0
        private byte GetFinalScore(CodeTestingResult testingResult, Language codeLanguage)
        {
            int finalScore = 0;

            LanguagePenalty languagePenalty = _codeQualityRaterConfiguration.CodePenalties
                                              .FirstOrDefault(penalty => penalty.Language == codeLanguage);

            int warningsCount = testingResult.CodeAnalysisResult.AnalysisResults
                                .Count(result => result.Level == Level.Warning);

            byte warningPenalty = languagePenalty?.WarningPenalty ?? 0;

            finalScore -= warningsCount * warningPenalty;

            int completedTestsPercentage = GetCompletedTestsPercentage(testingResult.CodeExecutionResult);

            finalScore += completedTestsPercentage;

            var minimumSuccessfulExecutionScore = _codeQualityRaterConfiguration.MinimumSuccessfulExecutionScore;

            if (testingResult.CodeExecutionResult.WasSuccessful &&
                finalScore < minimumSuccessfulExecutionScore)
            {
                return(minimumSuccessfulExecutionScore);
            }



            return(finalScore > 0 ? (byte)finalScore : default);
        public async Task <CodeTestingResult> TestCode(TestingCode code)
        {
            var result = new CodeTestingResult
            {
                CodeAnalysisResult = await _codeAnalysisApi.AnalyzeCodeAsync(code),
                Score = (byte)Random.Next(1, 100 + 1)
            };

            if (result.CodeAnalysisResult.IsSuccessful)
            {
                result.CodeExecutionResult = await _codeExecutionApi.ExecuteCodeAsync(code);
            }

            return(result);
        }
示例#3
0
        public async Task <CodeTestingResult> GetCodeQuality(TestingCode code)
        {
            var codeAnalyzer = _codeAnalyzerFactory.GetCodeAnalyzer(code);

            var codeAnalysisResult = await codeAnalyzer.Analyse(code);

            var codeTestingResult = new CodeTestingResult
            {
                CodeAnalysisResult = codeAnalysisResult
            };

            if (!codeAnalysisResult.IsSuccessful)
            {
                return(codeTestingResult);
            }

            var executableCode = _executableCodeFactory.GetExecutableCode(code);

            codeTestingResult.CodeExecutionResult = await _codeExecutor.ExecuteAsync(executableCode);

            codeTestingResult.Score = GetFinalScore(codeTestingResult, code.Language);

            return(codeTestingResult);
        }