<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Комментарии к публикации «Автоматическая генерация тестовых скриптов с помощью нейронных сетей»]]></title>
    <link>https://habr.com/ru/articles/358564/</link>
    <description><![CDATA[Комментарии к публикации «Автоматическая генерация тестовых скриптов с помощью нейронных сетей»]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Fri, 01 May 2026 17:50:03 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      

      
        
  
    <item>
      <title>28.03.2023 14:34:22 drmartin</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_25379330</guid>
      <link>https://habr.com/ru/articles/358564/#comment_25379330</link>
      <description><![CDATA[<p>Проект в итоге вывился в это <a href="https://techcrunch.com/2023/03/03/prog-ai-wants-to-help-recruiters-find-technical-talent-by-inferring-skills-from-github-code/" rel="noopener noreferrer nofollow">https://techcrunch.com/2023/03/03/prog-ai-wants-to-help-recruiters-find-technical-talent-by-inferring-skills-from-github-code/</a></p>]]></description>
      <pubDate>Tue, 28 Mar 2023 14:34:22 GMT</pubDate>
      <dc:creator><![CDATA[drmartin]]></dc:creator>
    </item>
  

  
    <item>
      <title>16.05.2018 15:09:43 Fedor11111</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_11358892</guid>
      <link>https://habr.com/ru/articles/358564/#comment_11358892</link>
      <description><![CDATA[В идеальном случае да. Другое дело что сейчас есть скорее проблема «фичизирования» всего, что залогировали. Так что прямо сейчас работаем только с примитивными типами.]]></description>
      <pubDate>Wed, 16 May 2018 15:09:43 GMT</pubDate>
      <dc:creator><![CDATA[Fedor11111]]></dc:creator>
    </item>
  

  
    <item>
      <title>16.05.2018 15:06:14 Fedor11111</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_11358882</guid>
      <link>https://habr.com/ru/articles/358564/#comment_11358882</link>
      <description><![CDATA[именно.]]></description>
      <pubDate>Wed, 16 May 2018 15:06:14 GMT</pubDate>
      <dc:creator><![CDATA[Fedor11111]]></dc:creator>
    </item>
  

  
    <item>
      <title>16.05.2018 13:59:53 atomheart</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_11358820</guid>
      <link>https://habr.com/ru/articles/358564/#comment_11358820</link>
      <description><![CDATA[<p>Теперь понятнее стало, спасибо. Решается, вероятно, задача генерации unit-тестов, т.е. тестирование непосредственно программных функций приложения, а не генерация комплексных функциональных и/или нагрузочных тестов, где каждый кейс — это реальный пользовательский кейс с определенной последовательностью вызовов функций приложения через доступные только пользователям каналы взаимодействия (например, трафик http) и связью между этими шагами (сохранение сессий, сквозная передача параметров и пр.)</p>]]></description>
      <pubDate>Wed, 16 May 2018 13:59:53 GMT</pubDate>
      <dc:creator><![CDATA[atomheart]]></dc:creator>
    </item>
  

  
    <item>
      <title>16.05.2018 13:57:24 Mishok2000</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_11358816</guid>
      <link>https://habr.com/ru/articles/358564/#comment_11358816</link>
      <description><![CDATA[Спасибо за статью, заставила задуматься о многом ) <br>
Я правильно понял, что в идеальном случаи программа должна логировать:<br>
Значение каждогой переменной каждого объекта (даже временного, типа ретурна функции которая возвращает текущее время в качестве аргумента другой функции) в программе (нужного для теста) и при её инициализации, не только при прямом её измение?]]></description>
      <pubDate>Wed, 16 May 2018 13:57:24 GMT</pubDate>
      <dc:creator><![CDATA[Mishok2000]]></dc:creator>
    </item>
  

  
    <item>
      <title>16.05.2018 13:41:45 Fedor11111</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_11358792</guid>
      <link>https://habr.com/ru/articles/358564/#comment_11358792</link>
      <description><![CDATA[Для какой-нибудь авторизации логируются входные данные (имя пользователя, пароль) выходные данные (результат работы программы). В нейронную сеть подаются эти данные, и сопоставляется что для этого пользователя с этим паролем программа либо авторизует либо нет. На выходе будет кейс типа того, что приведен в статье<br>
<br>
<a href="https://habr.com/users/when/" class="user_link">When</a>("^ user \"([^\"]*)\" and pin \"([^\"]*)\" in authenticate is valid")<br>
 public void user_and_pin_in_authenticate_is_valid(String arg1, String arg2) throws Throwable {<br>
…<br>
 }<br>
<br>
<a href="https://habr.com/users/when/" class="user_link">When</a>("^ user \"([^\"]*)\" and pin \"([^\"]*)\" in authenticate is not valid")<br>
 public void user_and_pin_in_authenticate_is_not_valid(String arg1, String arg2) throws Throwable {<br>
…<br>
 } <br>
<br>
и для такого теста нам не нужна нейросеть, тут можно использовать то что вы называете преобразователем<br>
<br>
<b>НО</b><br>
<br>
если мы представим что сама операция авторизации состоит из условных операций:<br>
<br>
начать коннекшн к БД (просто логируем тип БД, Gherkin паттерн «Пытаемся приконнектится к БД», тест кейс — прокерка что установился коннект)<br>
авторизоваться в БД<br>
взять пароль из БД для пользователя<br>
сверить пароль с паролем пользователя<br>
если да, то прописать куку<br>
<br>
для этих операция мы тоже можем собрать логи и тоже прописать кейсы с спецификацией Gherkin. <br>
<br>
<b>И</b><br>
<br>
в другой программе у нас тоже есть коннекшн к БД. Тогда задача нашей нейросети в другой программе распознать по логам что это тоже коннекшн к БД, выдать нам соответствующий паттерн в Gherkin и тест кейс коннекшна. И елси мы натренировали нейросеть правильно, мы <b>не пишем</b> ей правил соотвествия между описанием лога коннекшна к БД в одной программе, и логом коннекшном в другой программе.<br>
<br>]]></description>
      <pubDate>Wed, 16 May 2018 13:41:45 GMT</pubDate>
      <dc:creator><![CDATA[Fedor11111]]></dc:creator>
    </item>
  

  
    <item>
      <title>16.05.2018 12:47:43 atomheart</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_11358666</guid>
      <link>https://habr.com/ru/articles/358564/#comment_11358666</link>
      <description><![CDATA[<p>Если можно, давайте на конкретном примере разберем.</p><br>
<p>Есть сайт Яндекс.Почта (или любая другая почта).<br>
Возмем базовые кейсы: </p><br>
<ol>
<li>авторизация, </li>
<li>просмотр списка писем, </li>
<li>открытие любого письма для просмотра, </li>
<li>открытие формы создания нового письма и отправка письма (это один кейс).</li>
</ol><br>
<p>Что мне интересно:</p><br>
<ol>
<li>Как будут выглядеть (примерно) логи для этих действий?</li>
<li>Какая информация и в каком виде из этих логов будет подаваться на нейронную сеть?</li>
<li>Что будет отдавать нейронная сеть на выходе?</li>
<li>Как будет выглядеть процесс создания кейсов тестирования?</li>
</ol>]]></description>
      <pubDate>Wed, 16 May 2018 12:47:43 GMT</pubDate>
      <dc:creator><![CDATA[atomheart]]></dc:creator>
    </item>
  

  
    <item>
      <title>16.05.2018 12:34:59 Fedor11111</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_11358646</guid>
      <link>https://habr.com/ru/articles/358564/#comment_11358646</link>
      <description><![CDATA[&gt;Кол-во кейсов все таки ограничено количеством функций системы, которые &gt;разрабатываются программистами (а значит, их конечное число).<br>
<br>
Количество кейсов конечно в отдельной функции, в отдельном модуле или одной программе. Если мы хотим собрать <b>все </b> возможные кейсы которые в теории <b>можно</b> написать на Java то это конечно не будет бесконечное количество вариантов, но примерно как варианты ходов в шахматах.<br>
<br>
&gt; Если программа генерирует лог в определенном формате, не проще ли написать <br>
&gt; преобразователь этого формата в конечные кейсы (или хотя бы в транзакции, <br>
&gt; которые потом можно будет объединять)?<br>
<br>
Тут в каком месте вручную не оптимизируй количество кейсов, это будет не очень качественно. Вообще тут ручная оптимизация не очень хорошо работает. Представьте обратную ситуацию — вам на основе спецификации Gherkin нужно сгенерировать программу. МОжно сделать распознователь ключевых слов в спецификации, какие то регулярки. Но руками это наоптимизироват невероятно сложно. Тут обратная задача, но не менее сложная.<br>
<br>
Смотрите, чтобы проще было понять зачем нужна тут нейросеть, нужно сформулировать реальную задачу. Синтетический лог который я в статье привел конечно можно раскидать руками. <br>
<br>
Но сформулируйте задачу для неизестного количества паттернов. Того, что мы накопили прогнав милион программ. Тогда это задача типа k-means, когда у вас есть векторное пространство паттернов, вам дают на вход кусок лога, и вам нужно найти вектор, который лучше всего подходит для этого куска лога. Здесь лучше никаких преобразователей самому не писать, а воспользоваться уже применяемыми для этой общей задачи методами.]]></description>
      <pubDate>Wed, 16 May 2018 12:34:59 GMT</pubDate>
      <dc:creator><![CDATA[Fedor11111]]></dc:creator>
    </item>
  

  
    <item>
      <title>16.05.2018 12:12:42 atomheart</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_11358616</guid>
      <link>https://habr.com/ru/articles/358564/#comment_11358616</link>
      <description><![CDATA[<p>Спасибо за разъяснение. Но это не совсем то, что я хотел узнать.</p><br>
<p>Есть несколько моментов:</p><br>
<ol>
<li>Кол-во кейсов все таки ограничено количеством функций системы, которые разрабатываются программистами (а значит, их конечное число).</li>
<li>Если программа генерирует лог в определенном формате, не проще ли написать преобразователь этого формата в конечные кейсы (или хотя бы в транзакции, которые потом можно будет объединять)?</li>
<li>Кейсы тестирования все таки должны подразумевать параметризацию — те же входящие данные могут различаться для одного и того же паттерна поведения, а какие-то данные различаться не должны (например, идентификатор открытой вкладки). Как планируете разрешать эти вопросы?</li>
<li>Непонятно на счет Gerkin скрипта, т.к. для его работы должны быть расписана логика действия (что выполняется и при каких параметрах). Как я понял, генерацию этой части приведенное решение не включает?</li>
</ol><br>
<p>Если вы решаете задачу генерации тест кейсов по логам приложения, то мне непонятна роль описанного классификатора на нейросети и не понятно, почему не справится предложенный мной в первом комментарии классификатор (тем более что и данные не с промышленной среды, а с тестовой, и их не много). </p><br>
<p>Тем более, что, если я правильно понял, вы предлагаете по сути "прокликать" функционал в системе, собрать лог, отправить его в нейросеть для распознавания уже известных паттернов? Или для генерации новых, но не понятно по каким данным?</p><br>
<p>Честно, я несколько раз перечитал статью. Примеры в статье немного синтетичные, из конкретики только два метода на стороне приложения, в которых обозначено логирование, а так же пример работы нейросети, которая обучается складывать числа. Как это транслировать на реальную системы, я вот никак не пойму.</p>]]></description>
      <pubDate>Wed, 16 May 2018 12:12:42 GMT</pubDate>
      <dc:creator><![CDATA[atomheart]]></dc:creator>
    </item>
  

  
    <item>
      <title>15.05.2018 21:48:07 GDragon</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_11357904</guid>
      <link>https://habr.com/ru/articles/358564/#comment_11357904</link>
      <description><![CDATA[Игра если честно — не только красивая но и очень хорошо зашла :)]]></description>
      <pubDate>Tue, 15 May 2018 21:48:07 GMT</pubDate>
      <dc:creator><![CDATA[GDragon]]></dc:creator>
    </item>
  

  
    <item>
      <title>15.05.2018 19:45:41 Fedor11111</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_11357826</guid>
      <link>https://habr.com/ru/articles/358564/#comment_11357826</link>
      <description><![CDATA[Другое дело тут, впрочем как в изображениях — вы доверите распознавание рака на картинке машине или врачу? — есть элемент интуиции и человеческого знания, недоступного сейчас для того что называют ИИ в принципе. Поэтому в данном в статье написан обучаемый автокомплитер тестов, но не то чему безоговорочно можно доверить QA. На текущий момент.]]></description>
      <pubDate>Tue, 15 May 2018 19:45:41 GMT</pubDate>
      <dc:creator><![CDATA[Fedor11111]]></dc:creator>
    </item>
  

  
    <item>
      <title>15.05.2018 19:40:06 Fedor11111</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_11357816</guid>
      <link>https://habr.com/ru/articles/358564/#comment_11357816</link>
      <description><![CDATA[Ну никто пока не доверяет полностью машине создание тест-кейсов. Сейчас программа может распознавать самые простые случаи, которые не опасно ей доверить. Если брать аналогию по распознаванию террориста с калашом, то в случае тестов мы сейчас умеем разве что квадрат от треугольника отличать. Но путь такой же — когда-нибудь научимся и программных террористов с калашами. <br>
Качество работы тут может повышаться также, как и в случае с изображениями — постепенно начинаем с простых случаев и примитивных форм, постепенно набиваем руку и увеличиваем количество паттернов.]]></description>
      <pubDate>Tue, 15 May 2018 19:40:06 GMT</pubDate>
      <dc:creator><![CDATA[Fedor11111]]></dc:creator>
    </item>
  

  
    <item>
      <title>15.05.2018 19:27:33 vba</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_11357802</guid>
      <link>https://habr.com/ru/articles/358564/#comment_11357802</link>
      <description><![CDATA[<p>Да сбывается мечта одних, моих, бывших сингапурских коллег индийского происхождения. Которым тесты писать, явно в антикарму шло и которые в попытке обойти минимальное покрытие в CI тупо засылали псевдотесты без <code>assert</code> блоков. </p><br>
<p>Может покажусь консерватором, но я бы машине не стал доверять это дело. Если вы напортачили с учебной выборкой в задаче классификации изображений, то это будет видно сразу при тестировании модели(террорист с калашом вверх распознаваемый как счастливый и веселый это конечно не в счет). Как вы можете гарантировать качество обучения в данном случае?</p>]]></description>
      <pubDate>Tue, 15 May 2018 19:27:33 GMT</pubDate>
      <dc:creator><![CDATA[vba]]></dc:creator>
    </item>
  

  
    <item>
      <title>15.05.2018 17:43:46 Fedor11111</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_11357714</guid>
      <link>https://habr.com/ru/articles/358564/#comment_11357714</link>
      <description><![CDATA[Если я в свою очередь правильно понял)))<br>
<br>
&gt;&gt; Сами кейсы разделяются по «паттерну поведения», т.е. последовательности <br>
&gt;&gt; определенных действий или определенных входящих/исходящих данных<br>
<br>
Дело как раз в сопоставлении набора данных и паттерна. Эта классическая задача для программного синтеза — по набору данных найти программу. И с ней в общем сложно справиться:<br>
<br>
а) потому что у нас очень много разных видов программ (паттернов), практически бесконечное количество.<br>
б) потому что у нас очень большое количество фич, по которым нужно сопоставлять паттерн и данные. <br>
<br>
То есть мы не можем завести таблицу в БД, в которой написать — елси входной параметр единица — то паттерн 1, если 0 — то паттерн 2. Потнециально, это будет таблица с огромным количеством столбцов (фич) и огромным количеством строк (паттернов).<br>
<br>
Нейросеть облегчает этот случай программного синтеза именно в смысле поиска по фичам. Мы можем уже не запоминать и разбираться каким фичам соотвествует тот или иной параметр. Для программного синтеза нейросеть лучше ищет по ограниченному объему паттернов и большому объему фичей — тысячи и тысячи).<br>
<br>
Проблему практически бесконечного количества вариантов программ(паттернов) это не решает. Я надеюсь на тот вопрос ответил))) Если что, буду рад уточнить.]]></description>
      <pubDate>Tue, 15 May 2018 17:43:46 GMT</pubDate>
      <dc:creator><![CDATA[Fedor11111]]></dc:creator>
    </item>
  

  
    <item>
      <title>15.05.2018 17:43:34 Fedor11111</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_11357710</guid>
      <link>https://habr.com/ru/articles/358564/#comment_11357710</link>
      <description><![CDATA[Ну намек был на это. Плюс еще картинка красивая :-)]]></description>
      <pubDate>Tue, 15 May 2018 17:43:34 GMT</pubDate>
      <dc:creator><![CDATA[Fedor11111]]></dc:creator>
    </item>
  

  
    <item>
      <title>15.05.2018 17:42:50 Fedor11111</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_11357708</guid>
      <link>https://habr.com/ru/articles/358564/#comment_11357708</link>
      <description><![CDATA[.<br>
<br>]]></description>
      <pubDate>Tue, 15 May 2018 17:42:50 GMT</pubDate>
      <dc:creator><![CDATA[Fedor11111]]></dc:creator>
    </item>
  

  
    <item>
      <title>15.05.2018 17:27:16 atomheart</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_11357690</guid>
      <link>https://habr.com/ru/articles/358564/#comment_11357690</link>
      <description><![CDATA[<p>Извините, но не понятно, для чего в описанной вами задаче нужна нейронная сеть? Приложение пишет логи и по сути сохраняет операцию и ее входящие данные (возможно, даже исходящие). И, как я понял, вы хотите выделять отдельно кейсы для последующего преобразования их в кейсы. Что мешает при логировании сохранять вместе с записью лога еще и сессию пользователя и потом просто разбивать логи по сессиям и паузам между действиями пользователя? Сами кейсы разделяются по "паттерну поведения", т.е. последовательности определенных действий или определенных входящих/исходящих данных, что можно задать заранее или преобразовывать все найденные таким образом кейсы, а потом группировать их по схожести "паттернов". Это достаточно простые шаги для простого перебора логов. Или я как-то неправильно понял цели или задачу? Поясните пожалуйста, потому что тема интересная.</p>]]></description>
      <pubDate>Tue, 15 May 2018 17:27:16 GMT</pubDate>
      <dc:creator><![CDATA[atomheart]]></dc:creator>
    </item>
  

  
    <item>
      <title>15.05.2018 17:24:57 brickerino</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/358564/#comment_11357688</guid>
      <link>https://habr.com/ru/articles/358564/#comment_11357688</link>
      <description><![CDATA[А при чем здесь Subnautica? Типа, не запускай космический корабль, если тесты не прогнал?]]></description>
      <pubDate>Tue, 15 May 2018 17:24:57 GMT</pubDate>
      <dc:creator><![CDATA[brickerino]]></dc:creator>
    </item>
  

      

      

    
  </channel>
</rss>
