В ходе формирования команды по гибкому подходу в этом году я внедрил автоматическое модульное тестирование в один клик с помощью Suite executor. Кроме экзекьютора Suite, какие еще экзекьюторы есть у Juint? Здесь начинается мое путешествие по исследованию Раннера!
В повседневной работе ключевыми задачами всегда являются постоянная оптимизация технологии тестирования и повышение эффективности тестирования. Мы изучаем практику использования больших моделей для создания тестовых примеров, надеясь использовать мощные возможности обработки естественного языка для автоматического создания более полных и высококачественных тестовых примеров.
В настоящее время компании широко используют JoyCoder. Мы можем скопировать соответствующие требования и информацию о проектной документации в JoyCoder и позволить ему генерировать тестовые примеры. Однако во время использования возникают следующие болевые точки:
1) По-прежнему требуются многоэтапные ручные операции: такие как копирование и вставка документов, написание слов-подсказок, копирование результатов, сохранение вариантов использования и т. д.
2) Длительное время отклика и нестабильные результаты: если содержание требований или проектного документа велико, слово подсказки слишком длинное или превышает лимит токена.
Поэтому я исследовал способы автоматического, быстрого и стабильного создания тест-кейсов на основе Langchain и существующей платформы компании. Эффект следующий:
Использование Джой Кодера | Самостоятельная разработка на основе Langchain | |
---|---|---|
Время создания (для проектов — с большим содержанием документа) | ·Около 10–20 минут, требующих выполнения нескольких ручных операций (сначала будет подсказка: на основе предоставленного вами документа с требованиями ниже приведен пример тестового примера в формате Markdown. Поскольку содержимое документа относительно велико, я предоставлю общий тест. Шаблон варианта использования, вы можете дополнительно уточнить каждый шаг в соответствии с фактическими потребностями. Когда контента слишком много, появляется сообщение об ошибке: Достигнут максимальный предел токенов по умолчанию, НЕИЗВЕСТНАЯ ОШИБКА: время ожидания запроса истекло. Это может быть связано с. сервер является перегружено, вам нужно вручную попытаться ввести, сколько контента подходит | ·Автоматически генерируется примерно за 5 минут (после того, как все контрольные точки сгенерированы с помощью сводки, варианты использования, которые необходимо уточнить, генерируются с помощью векторного поиска) ·Если контента слишком много, его можно обрезать в соответствии с текстом токена, а затем предоставить к большой модели |
Время генерации (для обычных мелких нужд) | Разница невелика, 1-5 минут. | |
Точность | Нет большой разницы в зависимости от содержания слов-подсказок, но удобнее закреплять оптимизированные слова-подсказки при самостоятельном исследовании. |
Прежде всего, MCube определит, нужно ли ему получать последний шаблон из сети, на основе состояния кэша шаблонов. Когда шаблон будет получен, он будет загружен. На этапе загрузки продукт будет преобразован в структуру. дерева представления. После завершения преобразования выражение будет проанализировано с помощью механизма анализа и получит правильное значение, проанализирует определяемое пользователем событие с помощью механизма анализа событий и завершит привязку события. и привязка событий, представление будет отображено.
преимущество | недостаток | Применимые сценарии | |
---|---|---|---|
Вариант 1. Перенесите все требования к продукту и проектную документацию по НИОКР в большую модель и автоматически создайте сценарии использования. | Содержание вариантов использования относительно точное | Очень большие документы не поддерживаются и могут легко превысить лимит токенов (https://www.51cto.com/article/763949.html). | Требования и конструкция обычного масштаба |
Вариант 2. После обобщения всех требований к продукту и проектной документации по НИОКР предоставьте сводную информацию в большую модель и автоматически создайте варианты использования. | Не нужно беспокоиться о проблемах с токенами после подведения итогов | Содержание вариантов использования неточно, большинство из них представляют собой лишь общие моменты. | Чрезвычайно масштабные требования и конструкции |
Вариант 3: хранить все требования к продукту и проектную документацию НИОКР в векторной базе данных и автоматически генерировать определенную часть тестовых примеров путем поиска похожего контента. | Контент варианта использования более целенаправленный Не нужно беспокоиться о проблемах с токенами | Не всеобъемлющий вариант использования | Создавайте варианты использования только для определенной части требований и дизайна. |
Поскольку сценарии использования трех решений различны,Отличное качество также может дополнять друг друга.,Итак, теперь я реализовал все 3 метода,Доступен каждому, звоните по запросу.
Структура кода:
Пример кода:
def case_gen(prd_file_path, tdd_file_path, input_prompt, case_name):
"""
Как генерировать варианты использования
параметр:
prd_file_path - путь к документу PRD
tdd_file_path - Путь к документу технического проекта
case_name - Имя создаваемого тестового варианта использования.
"""
# Анализировать требования и документы, связанные с проектированием, Результатом является список документов.
prd_file = PDFParse(prd_file_path).load_pymupdf_split()
tdd_file = PDFParse(tdd_file_path).load_pymupdf_split()
empty_case = FilePath.read_file(FilePath.empty_case)
# Установите требования и документы, связанные с дизайном, в память в качестве информации о памяти llm.
prompt = ChatPromptTemplate.from_messages(
[
SystemMessage(
content="You are a chatbot having a conversation with a human."
), # The persistent system prompt
MessagesPlaceholder(
variable_name="chat_history"
), # Where the memory will be stored.
HumanMessagePromptTemplate.from_template(
"{human_input}"
), # Where the human input will injected
]
)
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
for prd in prd_file:
memory.save_context({"input": prd.page_content}, {"output": «Это документ с требованиями, который необходим для последующих вариантов использования выходного теста»})
for tdd in tdd_file:
memory.save_context({"input": tdd.page_content}, {"output": «Это документ технического дизайна, который необходим для последующих вариантов использования при выводе теста»})
# Включите «Модель», чтобы создать тестовый вариант использования.
llm = LLMFactory.get_openai_factory().get_chat_llm()
human_input = «Как эксперт по разработке программного обеспечения, пожалуйста, ознакомьтесь с приведенными выше требованиями к продукту и информацией о техническом дизайне». + input_prompt + ",Вывести тестовый вариант использования в формате уценки, шаблон варианта использования" + empty_case
chain = LLMChain(
llm=llm,
prompt=prompt,
verbose=True,
memory=memory,
)
output_raw = chain.invoke({'human_input': human_input})
# Сохраните содержимое выходного варианта использования в формате уценки.
file_path = FilePath.out_file + case_name + ".md"
with open(file_path, 'w') as file:
file.write(output_raw.get('text'))
def case_gen_by_vector(prd_file_path, tdd_file_path, input_prompt, table_name, case_name):
"""
!!!Когда текст очень большой, не допускайте, чтобы токена было недостаточно, с помощью векторной база данных, найдите определенную часть контента и создайте частичные тестовые варианты использования с более точными деталями!!!
параметр:
prd_file_path - путь к документу PRD
tdd_file_path - Путь к документу технического проекта
table_name - векторная база Имя таблицы данных хранится по бизнесу. Обычно используется аббревиатура английского уникального идентификатора бизнеса.
case_name - Имя создаваемого тестового варианта использования.
"""
# Анализировать требования и документы, связанные с проектированием, Результатом является список документов.
prd_file = PDFParse(prd_file_path).load_pymupdf_split()
tdd_file = PDFParse(tdd_file_path).load_pymupdf_split()
empty_case = FilePath.read_file(FilePath.empty_case)
# Сохранить документ в векторную база данных
docs = prd_file + tdd_file
embedding_model = LLMFactory.get_openai_factory().get_embedding()
router_url = ConfigParse(FilePath.config_file_path).get_vearch_router_server()
vearch_cluster = Vearch.from_documents(
docs,
embedding_model,
path_or_url=router_url,
db_name="y_test_qa",
table_name=table_name,
flag=1,
)
# отвекторная база данные Поиск соответствующего контента
docs = vearch_cluster.similarity_search(query=input_prompt, k=1)
content = docs[0].page_content
# Создайте варианты использования для большой модели, используя информацию, связанную с векторным запросом.
prompt_template = «Как эксперт по разработке тестов программного обеспечения, пожалуйста, выведите вариант использования в формате уценки в соответствии с соответствующей информацией {input_prompt} в дизайне технологии требований к продукту: {content}. Шаблон варианта использования: {empty_case}»
prompt = PromptTemplate(
input_variables=["input_prompt", "content", "empty_case"],
template=prompt_template
)
llm = LLMFactory.get_openai_factory().get_chat_llm()
chain = LLMChain(
llm=llm,
prompt=prompt,
verbose=True
)
output_raw = chain.invoke(
{'input_prompt': input_prompt, 'content': content, 'empty_case': empty_case})
# Сохраните содержимое выходного варианта использования в формате уценки.
file_path = FilePath.out_file + case_name + ".md"
with open(file_path, 'w') as file:
file.write(output_raw.get('text'))
Прежде всего, MCube определит, нужно ли ему получать последний шаблон из сети, на основе состояния кэша шаблонов. Когда шаблон будет получен, он будет загружен. На этапе загрузки продукт будет преобразован в структуру. дерева представления. После завершения преобразования выражение будет проанализировано с помощью механизма анализа и получит правильное значение, проанализирует определяемое пользователем событие с помощью механизма анализа событий и завершит привязку события. и привязка событий, представление будет отображено.
Вопрос о том, может ли генерация вариантов использования действительно помочь нам сэкономить время при разработке вариантов использования, поэтому я случайным образом провел эксперимент с небольшим требованием. Общее количество слов в документе PRD для этого требования составляет 2363, а общее количество. слов в проектном документе составляет 158 (из-за большого размера) Часть его представляет собой блок-схему), а эффективность реального процесса проектирования варианта использования может достигать 50%.
На этот раз преимущество использования большой Модели для автоматического создания вариантов использования:
Преимущества:
Недостатки:
Прежде всего, MCube определит, нужно ли ему получать последний шаблон из сети, на основе состояния кэша шаблонов. Когда шаблон будет получен, он будет загружен. На этапе загрузки продукт будет преобразован в структуру. дерева представления. После завершения преобразования выражение будет проанализировано с помощью механизма анализа и получит правильное значение, проанализирует определяемое пользователем событие с помощью механизма анализа событий и завершит привязку события. и привязка событий, представление будет отображено.
1. Для блок-схем (форма изображения) в формате PDF реализовано извлечение и распознавание текста (методы, связанные с langchain pdf, поддерживают распознавание OCR). В будущем нам необходимо найти более подходящий способ решения проблемы анализа и извлечения содержимого изображения.
2. Создание вариантов использования — это лишь малая часть повышения эффективности тестирования. В будущем вам нужно попытаться применить большие модели к ежедневному процессу тестирования. Текущие идеи включают анализ кодов различий и журналов сервера для автоматического обнаружения дефектов и реализацию модели. -управляемое тестирование в сочетании с графами знаний. Автоматизированное тестирование и другие направления.