{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/turbulence-systematically-and-automatically","title":"Turbulence: Systematically and Automatically Testing Instruction-Tuned Large Language Models for Code","arxiv_id":"2312.14856","date":"2023-12-22","proceeding":null,"authors":["Shahin Honarvar","Mark van der Wilk","Alastair Donaldson"],"abstract":"We present a method for systematically evaluating the correctness and robustness of instruction-tuned large language models (LLMs) for code generation via a new benchmark, Turbulence. Turbulence consists of a large set of natural language $\\textit{question templates}$, each of which is a programming problem, parameterised so that it can be asked in many different forms. Each question template has an associated $\\textit{test oracle}$ that judges whether a code solution returned by an LLM is correct. Thus, from a single question template, it is possible to ask an LLM a $\\textit{neighbourhood}$ of very similar programming questions, and assess the correctness of the result returned for each question. This allows gaps in an LLM's code generation abilities to be identified, including $\\textit{anomalies}$ where the LLM correctly solves $\\textit{almost all}$ questions in a neighbourhood but fails for particular parameter instantiations. We present experiments against five LLMs from OpenAI, Cohere and Meta, each at two temperature configurations. Our findings show that, across the board, Turbulence is able to reveal gaps in LLM reasoning ability. This goes beyond merely highlighting that LLMs sometimes produce wrong code (which is no surprise): by systematically identifying cases where LLMs are able to solve some problems in a neighbourhood but do not manage to generalise to solve the whole neighbourhood, our method is effective at highlighting $\\textit{robustness}$ issues. We present data and examples that shed light on the kinds of mistakes that LLMs make when they return incorrect code results.","url_abs":"https://arxiv.org/abs/2312.14856v3","url_pdf":"https://arxiv.org/pdf/2312.14856v3.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"turbulence-systematically-and-automatically","repo_url":"https://github.com/shahinhonarvar/turbulence-benchmark","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"code-generation","task_name":"Code Generation"}],"methods":[{"method_slug":"set","method_name":"SET"}],"datasets_introduced":[{"slug":"turbulence","name":"Turbulence","full_name":"Turbulence"}],"methods_introduced":[],"results":[{"leaderboard":"/sota/code-generation-on-turbulence","task":"Code Generation","dataset":"Turbulence","model":"GPT-4","rank_in_archive_order":1,"of":5,"metrics":{"CorrSc":"0.848"},"uses_additional_data":false},{"leaderboard":"/sota/code-generation-on-turbulence","task":"Code Generation","dataset":"Turbulence","model":"GPT-3.5-Turbo","rank_in_archive_order":2,"of":5,"metrics":{"CorrSc":"0.617"},"uses_additional_data":false},{"leaderboard":"/sota/code-generation-on-turbulence","task":"Code Generation","dataset":"Turbulence","model":"CodeLlama:13B-4bit-quantised","rank_in_archive_order":3,"of":5,"metrics":{"CorrSc":"0.327"},"uses_additional_data":false},{"leaderboard":"/sota/code-generation-on-turbulence","task":"Code Generation","dataset":"Turbulence","model":"CodeLlama:7B-4bit-quantised","rank_in_archive_order":4,"of":5,"metrics":{"CorrSc":"0.289"},"uses_additional_data":false},{"leaderboard":"/sota/code-generation-on-turbulence","task":"Code Generation","dataset":"Turbulence","model":"Command","rank_in_archive_order":5,"of":5,"metrics":{"CorrSc":"0.063"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2312.14856","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2312.14856"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/shahinhonarvar/turbulence-benchmark","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":4},"by_repo_kind":{"official":{"samples":4,"ran":4,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"8f85a7102619a7d1","entry":"gen_params","repo":"shahinhonarvar/turbulence-benchmark","repo_kind":"official","path":"CodeLlama13_T_0/Q1/genparams.py","file_url":"https://github.com/shahinhonarvar/turbulence-benchmark/blob/HEAD/CodeLlama13_T_0/Q1/genparams.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"8f85a7102619a7d1"}},{"code_sha256_prefix":"6b165875bd93a0bb","entry":"gen_params","repo":"shahinhonarvar/turbulence-benchmark","repo_kind":"official","path":"CodeLlama13_T_0/Q10/genparams.py","file_url":"https://github.com/shahinhonarvar/turbulence-benchmark/blob/HEAD/CodeLlama13_T_0/Q10/genparams.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6b165875bd93a0bb"}},{"code_sha256_prefix":"527ad998aa5742b3","entry":"input_generator","repo":"shahinhonarvar/turbulence-benchmark","repo_kind":"official","path":"CodeLlama13_T_0/Q1/gen_function_params.py","file_url":"https://github.com/shahinhonarvar/turbulence-benchmark/blob/HEAD/CodeLlama13_T_0/Q1/gen_function_params.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"527ad998aa5742b3"}},{"code_sha256_prefix":"5cd254d68dfadc2a","entry":"input_generator","repo":"shahinhonarvar/turbulence-benchmark","repo_kind":"official","path":"CodeLlama13_T_0/Q13/gen_function_params.py","file_url":"https://github.com/shahinhonarvar/turbulence-benchmark/blob/HEAD/CodeLlama13_T_0/Q13/gen_function_params.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5cd254d68dfadc2a"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}