חשוב לכתוב בדיקות יחידות ברורות ויעילות שבאמת פועלות בתהליך הפיתוח התוכנה. בדיקות יחידות מפרידות את רכיבים הקטנים בקוד ומאשרות שהם פועלים בצורה הנכונה.

בדיקות יחידות יעילות לא רק מציאות השגיאות אלא גם עוזרות לך להיות בטוח שהקוד שלך ניתן לשמירה והוא סמך. אבל זה דורש זמן ומשאבים כדי ליצור בדיקות יחידות מורחבות באופן ידני.

היו החל מפץ חדש בעינייני הבינה המלאכותית שמבטיחים לעזור לאוטומטיזציה בתהליך הפיתוח של בדיקות יחידות. בפברואר, חוקרים בMeta שיחררו מסמך על שיפור בדיקות יחידות באמצעות מודלים שפה גדולים. זה הציג שיטה חדשנית לאוטומציית בדיקות יחידות.

החקירה שלהם מתמקדת בכלי חדש שנקרא TestGen-LLM, שחוקר את האפשרויות של השימוש בLLM על מנת לנתח בדיקות יחידות קיימות ולשפר אותן במטרה להגביר את מנת השימוש בקוד.

למרות שהקוד לTestGen-LLM לא נשחרר, אני אציג במאמר אחת אלטרנטיבה פתוחה-סורק שנרצחה על המחקר שלהם. תלמדו איך היא מייצרת ערימות בדיקות, מדוע היא טובה יותר מרובות הLLM, והיכן לקבל את הטכנולוגיה הזאת ולהתחיל לנסות אותה.

תוכן תרשים

TestGen-LLM של Meta

TestGen-LLM של Meta טובל במשימה המטרידה של כתיבת בדיקות יחידות על ידי שימוש בכוחם של מודלים גדולים של שפה (LLM). מודלים שפתית כלליים כמו Gemini או ChatGPT עלולים להתמוטט בתחום המיוחד של קוד בדיקות יחידות, תחביר בדיקה וייצור בדיקות שלא מוסיפות ערך. אך TestGen-LLM מותאם במיוחד לבדיקות יחידות.

המיוחדות הזו מאפשרת לו להבין את המורכבויות של מבנה הקוד וההגיון בבדיקה, שמובילים לסוגיות בדיקה ממוקדות יותר ולייצור בדיקות שלמעשה מוסיפות ערך ומגבירות כיסוי הקוד.

TestGen-LLM מסוגל להעריך בדיקות יחידות ולזהות אזורים לשיפור. הוא משגשג בזה דרך ההבנה של דפוסים של בדיקות נפוצים שאיתם הוא התכונן. אבל ייצור בדיקות לבדו אינו מספיק לכיסוי קוד תקין.

חוקרי Meta המימנו TestGen-LLM עם שומריות להבטיח על היעילות של הבדיקות שהוא כותב. השומריות האלו, שנקראות מסננים, פועלות כמנגנון של שליטה על האיכות. הן מחקות הצעות ש:

  • <diy12לא יתכנתו
  • יכשלו באופן קבוע, או

  • לא ישפרו למעשה את כיסוי הקוד (הצעות שכבר כוסות על ידי בדיקות אחרות).

איך תסתומן-LLM עובד?

תסתומן-LLM משתמש בגישה שנקראת "הניהול הווטרמלי של תוכנה על-בסיס למשתמשים בLLM" (הניהול הווטרמלי של תסתומן-LLM). תסתומן-LLM פשוט מעלה למעלה במוסדה מבחנה עם מקטעי בדיקה נוספים, שומר על כל מקטעי הבדיקות הקיימים וכך מבטיח שלא יהיה דחק.

עבודת ייצור בדיקות(ממסמך TestGen_LLM)

תסתומן-LLM יוצר ערימה של בדיקות, אחר מסיר את הבדיקות שאינן מורידות ומוטלות בדחיפות. לבסוף, הוא זורק את האחרות שלא מגבירות את השיקום בקוד.

אחרי שהשתמשנו בתסתומן-LLM כדי לאוטומטיזציה של ספירת בדיקות, מטה השתמשה בבחירה אנושית כדי לקבל או לדחות בדיקות בהן הבדיקות המיוצרות הצליחו בקצב הטוב ביותר ב73% מהמקרים המדויקים שלהם.

לפי המסמך, תסתומן-LLM יוצר בדיקה אחת בכל הפעם שאחר מוסדה לתוכנה שנכתבה בעבר על-ידי מפתח. אבל הוא לא בהכרח יוצר בדיקות עבור כל ספירת בדיקות נתנות.

היעילות של תסתומן-LLM הודגמה בתהליך בדיקה-עיר פנימי במטה. כאן, הכלי הזה נעשה בכדי לנתח ספירת הבדיקות הקיימת ולהציע שיפורים. התוצאות היו מעודדות:

“75% מהבדיקות של תסתומן-LLM נבנו נכונה,

גם ה推荐ים מ-TestGen-LLM נחשבו כשימושיים ומועדים על ידי המפתחים שהשתתפו ב-test-a-thons.

יישומון פתוח (Cover-Agent)

המחקר של TestGen-LLM מ-Meta מעביר פוטנציאל רב לשינוי בבחינות היחידה ובייצור הבחינות הautomated. הכלי יעזור בהשתמש בצורה טובה יותר בעיצוב קוד ובאיץ את ייצור הבחינות באמצעות LLMs שמותועדים בקוד. אך הטכנולוגיה הזו אינה זמינה לכל אחד, בגלל שהקוד לTestGen-LLM לא נשחרר.

מפתחים שהתעניינו בטכנולוגיה הזו יכול להיות מתוסכלים מהחסור בקוד הזמין לציבור. אחרי הכל, מחקר הTestGen-LLM מ-Meta מציג תמונה אחת על העתיד של מה שביצועי בחינות מואצים יכולים להיות.

זה מאוד מושך לווסת בתוכן הפעלה החדשה ביותר בתכנולוגיה הזו, להבין את תהליכי ההחלטות שלהם, ואולי אפילו לעזור לעיוות ההתפתחות שלהם. אך בעוד חסור בקוד של Meta הוא מפגיע, יש יישומון פתוח שנקרא Cover-Agent שיכול להיות תחליף מועיל.

CodiumAI's Cover-Agent הוא היישומון הפתוח הראשון של כלי בחינות מואץ על-בסיס TestGen-LLM. נתונים מהמחקר של Meta, Cover-Agent עכשיו בחזית ההתפתחות בין היישומונים הפתוחים בעזרת AI-driven unit testing כתוצאה.

למה צריכים להיות LLMs מוכוונים לבחינות בסיסיים?

מפני שרוב ה LLMs (כמו ChatGPT ו-Gemini) מסוגלים

ובכן, Cover-Agent ו-TestGen-LLM נוצרו להיות הצעד הבא באבולוציה של בדיקות יחידה יעילות. מטרתם היא להימנע ממלכודות נפוצות שבהן מפתחים נתקלים כאשר הם מייצרים בדיקות עם LLM כגון:

  • הזיות LLM

  • יצירת בדיקות שאינן מוסיפות ערך

  • יצירת בדיקות שמדלגות על חלקים מהקוד, מה שמוביל לכיסוי קוד נמוך

כדי להתגבר על אתגרים כאלה (במיוחד עבור בדיקות יחידה רגרסיות) החוקרים של TestGen-LLM פיתחו את הקריטריונים הבאים שהבדיקות המיוצרות חייבות לעמוד בהם לפני שהבדיקה תתקבל:

  • האם הבדיקה המיוצרת מתקמפלצת ורצה כראוי?

  • האם הבדיקה מגדילה את כיסוי הקוד?

  • האם היא מוסיפה ערך?

  • האם היא עומדת בדרישות נוספות שיכולות להיות לנו?

אלו הן שאלות ונושאים מהותיים שהבדיקה המיוצרת חייבת לפתור לפני שתיחשב לשדרוג בטכנולוגיה הקיימת. Cover-Agent מספק בדיקות שעונות על שאלות אלו ברמה גבוהה להפליא.

איך עובד Cover-Agent?

Cover-Agent הוא חלק מחבילת כלים רחבה יותר שנועדה לאוטומציה של יצירת מבחני יחידה לפרויקטי תוכנה. באמצעות מודל ה-AI הגנרטיבי TestGen-LLM, הוא שואף לפשט ולהאיץ את תהליך הבדיקות, ולהבטיח פיתוח תוכנה באיכות גבוהה.

המערכת מורכבת ממספר רכיבים:

  • מנהל בדיקות (Test Runner): מפעיל את הפקודות או הסקריפטים להרצת חבילת הבדיקות וליצירת דוחות כיסוי קוד.

  • מנתח כיסוי (Coverage Parser): מוודא שכיסוי הקוד עולה ככל שמוסיפים מבחנים, ומבטיח שמבחנים חדשים תורמים ליעילות הבדיקות הכוללת.

  • בונה הנחיות (Prompt Builder): אוסף את הנתונים הדרושים ממאגר הקוד ומבנה את ההנחיה שתועבר למודל השפה הגדול (LLM).

  • מפעיל AI (AI Caller): מתקשר עם ה-LLM ליצירת מבחנים על בסיס ההנחיה שניתנה.

רכיבים אלו עובדים יחד עם TestGen-LLM לייצר רק מבחנים שמבטיחים שיפור של מאגר הקוד הקיים.

איך להשתמש ב-Cover-Agent

דרישות

אתה צריך לקבל את הדרישות הבאות לפני שאתה יכול להתחיל להשתמש ב-Cover-Agent:

  • OPENAI_API_KEY שנוצר במשתנים הסביבה שלך, שהוא נחוץ עבור התקשורת עם OpenAI API.

  • כלי סקירת קידוד: דוחף סקירת קידוד Cobertura XML הדרוש עבור הכלי כדי לפעול נכון. לדוגמה, ב-Python אתה יכול להשתמש ב pytest-cov. הוסף את האפשרות --cov-report=xml בזמן הריצה של Pytest.

תיעוד התקנה

אם אתה מנהל את Cover-Agent ישירות מהאחסן, אתה תזדקק גם ל:

  • Python מו Instalado no seu sistema.

  • Poetry Instalado para gerir as dependências do pacote Python. Você pode encontrar instruções de instalação para Poetry aqui.

Runtime אחראי

אתה יכול להתקין Cover-Agent כתופיל באפליקציית Python Pip או להריץ אותו באופן עצמאי.

Python Pip

על מנת להתקין את תופיל ה Python Pip באופן ישיר דרך GitHub, יש לבצע את הפקודה הבאה:

pip install git+https://github.com/Codium-ai/cover-agent.git

תקן בינארי

ניתן להריץ את התקן הזה בלי סביבה פיתוח פינגווין על המערכת שלך (לדוגמה, בתוך תא דוקרטר שאינו כולל Python). ניתן להוריד את השישור למערכת שלך על ידי ניווט לדף השישוריםשל הפרוייקט.

הגדרת מאגר

בדיקה אחת כדי להתקין את כל התלויות ולהריץ את הפרוייקט מהמקור:

poetry install

ביצוע הקוד

אחרי ההורדה של האקסקטיביביל או התקנת התופיל ה Pip, ניתן עכשיו להריץ Cover-Agent כדי לייצר ולאשר בבדיקות יחידות.

ניתן לבצע את זה מהשורה הפעולה על ידי השתמשות בפקודה הבאה:

cover-agent \
--source-file-path "path_to_source_file" \
--test-file-path "path_to_test_file" \
--code-coverage-report-path "path_to_coverage_report.xml" \
--test-command "test_command_to_run" \
--test-command-dir "directory_to_run_test_command/" \
--coverage-type "type_of_coverage_report" \
--desired-coverage "desired_coverage_between_0_and_100" \
--max-iterations "max_number_of_llm_iterations" \
 --included-files "<optional_list_of_files_to_include>"

ניתן להשתמש בפרוייקטים הדוגמאיים בתוך המאגר הזה כדי לבצע את הקוד הזה כבדיקה טעמית.

העדכונים המסוגלים

  • source-file-path: מסלול הקובץ של הפונקציות או אחד מחלקי הקוד שאנחנו רוצים לבדוק.

  • test-file-path: מסלול הקובץ בו הסוכנית תש
  • נתיב דוח כיסוי הקוד: הנתיב שבו נשמר דוח כיסוי הקוד.

  • פקודת הבדיקה: הפקודה להרצת הבדיקות (לדוגמה pytest).
  • ספריית פקודת הבדיקה: הספרייה שבה יש להריץ את פקודת הבדיקה. יש להגדיר זאת לשורש או למיקום הקובץ הראשי שלך כדי להימנע מבעיות עם ייבוא יחסי.
  • סוג הכיסוי: סוג הכיסוי לשימוש. Cobertura הוא ברירת מחדל טובה.
  • כיסוי רצוי: יעד הכיסוי. כיסוי גבוה יותר הוא טוב יותר, אך 100% הוא לעיתים קרובות בלתי מעשי.
  • מספר מקסימלי של איטרציות: מספר הפעמים שהסוכן צריך לנסות שוב לייצר קוד בדיקה. יותר איטרציות עשויות להוביל לשימוש גבוה יותר בטוקנים של OpenAI.
  • הוראות-נוספות: הנחיות להבטיח שהקוד נכתב בצורה מסוימת. לדוגמה, כאן אנחנו מציינים שהקוד צריך להיות מעוצב כדי לעבוד בתוך מחלקת בדיקה.

בביצוע הפקודה, הסוכן מתחיל לכתוב ולחזור על הבדיקות.

איך להשתמש ב-Cover-Agent

הגיע הזמן לבדוק את Cover-Agent. נשתמש באפליקציה פשוטה בשם calculator.py כדי להשוות את כיסוי הקוד בין בדיקות ידניות ואוטומטיות.

בדיקה ידנית

def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

def multiply(a, b):
    return a * b

def divide(a, b):
    if b == 0:
        raise ValueError("Cannot divide by zero")
    return a / b

זהו הקובץ test_calculator.py הממוקם בתיקיית הבדיקות.

# בדיקות/test_calculator.py
from calculator import add, subtract, multiply, divide

class TestCalculator:

    def test_add(self):
        assert add(2, 3) == 5

כדי לראות את כיסוי הבדיקות, אנחנו צריכים להתקין את pytest-cov, הרחבת pytest לדיווח על כיסוי כפי שצוין קודם.

pip install pytest-cov

הריצה של ניתוח הכיסוי עם:

pytest --cov=calculator

הפלט מציג:

Name            Stmts   Miss  Cover
-----------------------------------
calculator.py      10      5    50%
-----------------------------------
TOTAL              10      5    50%

הפלט למעלה מציג ש-5 מתוך 10 ההצהרות ב-calculator.py לא בוצעו, מה שמוביל לכיסוי קוד של 50% בלבד. עבור בסיס קוד גדול יותר, זה יהפוך לבעיה רצינית ויוביל לעיכובים.

עכשיו נראה אם cover-agent יכול לעשות טוב יותר.

בדיקה אוטומטית עם Cover-Agent

כדי להגדיר את Cover-Agent של Codium, בצעו את השלבים הבאים:

ראשית, ת instal·leu Cover-Agent:

pip install git+https://github.com/Codium-ai/cover-agent.git

ודאו ש מפתח ה API של OpenAI נבנה במשתנות הסביבה שלך כי הוא דרוש עבור ה API של OpenAI .

בהמשך, תכתבו את הפקודות להתחיל ביצירת בדיקות בתוך התמנון:

cover-agent \
--source-file-path "calculator.py" \
--test-file-path "tests/test_calculator.py" \
--code-coverage-report-path "coverage.xml" \
--test-command "pytest --cov=. --cov-report=xml --cov-report=term" \
--test-command-dir "./" \
--coverage-type "cobertura" \
--desired-coverage 80 \
--max-iterations 3 \
--openai-model "gpt-4o" \
--additional-instructions "Since I am using a test class, each line of code (including the first line) needs to be prepended with 4 whitespaces. This is extremely important to ensure that every line returned contains that 4 whitespace indent; otherwise, my code will not run."

זה יוצר את הקוד הבא:

import pytest
from calculator import add, subtract, multiply, divide

class TestCalculator:

    def test_add(self):
        assert(add(2, 3), 5

    def test_subtract(self):
        """
        Test subtracting two numbers.
        """
        assert subtract(5, 3) == 2
        assert subtract(3, 5) == -2

    def test_multiply(self):
        """
        Test multiplying two numbers.
        """
        assert multiply(2, 3) == 6
        assert multiply(-2, 3) == -6
        assert multiply(2, -3) == -6
        assert multiply(-2, -3) == 6

    def test_divide(self):
        """
        Test dividing two numbers.
        """
        assert divide(6, 3) == 2
        assert divide(-6, 3) == -2
        assert divide(6, -3) == -2
        assert divide(-6, -3) == 2

    def test_divide_by_zero(self):
        """
        Test dividing by zero, should raise ValueError.
        """
        with pytest.raises(ValueError, match="Cannot divide by zero"):
            divide(5, 0)

אתה יכול לראות שהסוכנית גם כתבה בדיקות שבהן מבדיקים אם יש שגיאות עבור מקרים משורים .

עכשיו הגיע הזמן לבדיקת המעבר שוב:

pytest --cov=calculator

היצוא:

Name            Stmts   Miss  Cover
-----------------------------------
calculator.py      10      0   100%
-----------------------------------
TOTAL              10      0   100%

בדוגמה זו הגענו ל 100% של תספיקת המעבר. עבור קידמות תוכניות גדולות יותר, השיטה דומה באופן יחסית קל. אתה יכול לקרוא דרך המדריך הזה עבור דרך גדולה יותר של קידמת תוכניות.

על פי ש Cover-Agent מייצג צעד בעל גבוה בדרך, חשוב לדעת שהטכנולוגיה עדיין בשלב הראשונים. מחקר ופיתוח ממשיך הוא חיוני עבור רזוף והאמצעיה הרחבה יותר ו codiumAI מזמין אתכם להשתתפות בעילוי הכלי הפתוח הזה.

היתרונות של Cover-Agent הפתוח

הטכנולוגיה הפתוחה של Cover-Agent מעניקה מספר יתרונות שעשויים לעזור לקדם את הטכנולוגיה. אחד מהם הוא:

  • נגישות: הטכנולוגיה הפתוחה מאפשרת נסיונים בבדיקה בעזרת LLM וזה נגיש למפתחים עם רק בסיסי שונים זה יגדיל את מספר המשתמשים ויוביל לפיתוח טכנו
  • שיתוף פעולה: מפתחים יכולים לתרום, להציע שיפורים, להציע תכונות חדשות ולדווח על בעיות. קובר-אגנט יגדל ויפתח במהירות לפרוייקט המושלם למפתחים..

  • שקיפות: מידע על הפעולות הפנימיות זמין וזה מעודד אמון ובסופו של דבר יגביר את הפוטנציאל של הטכנולוגיה.

בנוסף ליתרונות הקוד הפתוח, קובר-אגנט מספק למפתחים סט שימושים מעולה של התוספות שלו:

  • גישה פשוטה: מפתחים יכולים להתקין בקלות ולנסות בבסיס LLM. זה מאפשר חקירה ראשונה ומיידית של היכולות הטכנולוגיה ובלעדי חריגה בעבודתם.

  • התאמה אישית לצרכים ספציפיים: האופי הקוד הפתוח של Cover-Agent מאפשר למפתחים להתאים את הכלי לדרישות הפרויקט הספציפיות שלהם. זה יכול לכלול שינוי מודל ה-LLM המשומש, התאמת נתוני האימון לשיקוף טוב יותר של בסיס הקוד שלהם, או אינטגרציה של Cover-Agent עם מסגרות בדיקה קיימות. רמת התאמה אישית זו מעניקה למפתחים את היכולת לנצל את עוצמת הבדיקות המבוססות על LLM באופן שמתאים לצרכי הפרויקט שלהם.

  • אינטגרציה קלה: זה משולב בקלות עם VSCode (עורך קוד פופולרי), מה שמקל על האינטגרציה עם זרימות עבודה קיימות. ניתן גם לשלב אותו בקלות עם בדיקות שנכתבו על ידי בני אדם.

כיצד תוכלו לתרום ל-Cover-Agent?

מקור הקוד של Cover-Agent ניתן לגיוון ציבורי דרך האחסון GitHub הזה. הם מעודדים פיתחים מכל הקשורים לבחון את המוצר שלהם ולתרום לשיפור ולגדילת הטכנולוגיה החדשה הזו.

סיכוי

מכשירי השיפור המבוססים על בדיקות מבוססים על LLM מחזיקים פוטנציאל עצום למהפך את הדרך בה פיתחים מגיעים לבחינות היחידות. על ידי השתמשות בכח של מודלי השפה הגדולים שמאמנים ספציפית על קוד, המכשירים האלה יכולים לסדד את יצירת הבדיקות, לשפר את השייכות לקוד, ולהשיג בסוף את איכות התוכנה הגבוהה יותר.

בעוד מחקר מטה של Meta עם TestGen-LLM מעניק מבטים שווה מוני, החסרון בקוד הזמין לציבור מעצם את הקלט הרחב ואת הפיתוח הממשיך. למרבה המזל, Cover-Agent סיפק פתרון נגיש וסוגיר. הוא מעצמה את הפעלת הפיתחים לבחינות LLM-מבוססות ולתרום להתפתחותן.

הפוטנציאל של TestGen-LLM וCover-Agent הוא עצום, והפיתוח הממשיך דרך תרומות של פיתחים יוביל למכשיר מהפכני שישנה לנצח את יצירת הבדיקות המאוטומטיות.

חבר אליי בLinkedIn ובTwitter אם מצאתם את זה מועיל.