В идеальном случае да. Другое дело что сейчас есть скорее проблема «фичизирования» всего, что залогировали. Так что прямо сейчас работаем только с примитивными типами.
Для какой-нибудь авторизации логируются входные данные (имя пользователя, пароль) выходные данные (результат работы программы). В нейронную сеть подаются эти данные, и сопоставляется что для этого пользователя с этим паролем программа либо авторизует либо нет. На выходе будет кейс типа того, что приведен в статье
When("^ user \"([^\"]*)\" and pin \"([^\"]*)\" in authenticate is valid")
public void user_and_pin_in_authenticate_is_valid(String arg1, String arg2) throws Throwable {
…
}
When("^ user \"([^\"]*)\" and pin \"([^\"]*)\" in authenticate is not valid")
public void user_and_pin_in_authenticate_is_not_valid(String arg1, String arg2) throws Throwable {
…
}
и для такого теста нам не нужна нейросеть, тут можно использовать то что вы называете преобразователем
НО
если мы представим что сама операция авторизации состоит из условных операций:
начать коннекшн к БД (просто логируем тип БД, Gherkin паттерн «Пытаемся приконнектится к БД», тест кейс — прокерка что установился коннект)
авторизоваться в БД
взять пароль из БД для пользователя
сверить пароль с паролем пользователя
если да, то прописать куку
для этих операция мы тоже можем собрать логи и тоже прописать кейсы с спецификацией Gherkin.
И
в другой программе у нас тоже есть коннекшн к БД. Тогда задача нашей нейросети в другой программе распознать по логам что это тоже коннекшн к БД, выдать нам соответствующий паттерн в Gherkin и тест кейс коннекшна. И елси мы натренировали нейросеть правильно, мы не пишем ей правил соотвествия между описанием лога коннекшна к БД в одной программе, и логом коннекшном в другой программе.
>Кол-во кейсов все таки ограничено количеством функций системы, которые >разрабатываются программистами (а значит, их конечное число).
Количество кейсов конечно в отдельной функции, в отдельном модуле или одной программе. Если мы хотим собрать все возможные кейсы которые в теории можно написать на Java то это конечно не будет бесконечное количество вариантов, но примерно как варианты ходов в шахматах.
> Если программа генерирует лог в определенном формате, не проще ли написать
> преобразователь этого формата в конечные кейсы (или хотя бы в транзакции,
> которые потом можно будет объединять)?
Тут в каком месте вручную не оптимизируй количество кейсов, это будет не очень качественно. Вообще тут ручная оптимизация не очень хорошо работает. Представьте обратную ситуацию — вам на основе спецификации Gherkin нужно сгенерировать программу. МОжно сделать распознователь ключевых слов в спецификации, какие то регулярки. Но руками это наоптимизироват невероятно сложно. Тут обратная задача, но не менее сложная.
Смотрите, чтобы проще было понять зачем нужна тут нейросеть, нужно сформулировать реальную задачу. Синтетический лог который я в статье привел конечно можно раскидать руками.
Но сформулируйте задачу для неизестного количества паттернов. Того, что мы накопили прогнав милион программ. Тогда это задача типа k-means, когда у вас есть векторное пространство паттернов, вам дают на вход кусок лога, и вам нужно найти вектор, который лучше всего подходит для этого куска лога. Здесь лучше никаких преобразователей самому не писать, а воспользоваться уже применяемыми для этой общей задачи методами.
Другое дело тут, впрочем как в изображениях — вы доверите распознавание рака на картинке машине или врачу? — есть элемент интуиции и человеческого знания, недоступного сейчас для того что называют ИИ в принципе. Поэтому в данном в статье написан обучаемый автокомплитер тестов, но не то чему безоговорочно можно доверить QA. На текущий момент.
Ну никто пока не доверяет полностью машине создание тест-кейсов. Сейчас программа может распознавать самые простые случаи, которые не опасно ей доверить. Если брать аналогию по распознаванию террориста с калашом, то в случае тестов мы сейчас умеем разве что квадрат от треугольника отличать. Но путь такой же — когда-нибудь научимся и программных террористов с калашами.
Качество работы тут может повышаться также, как и в случае с изображениями — постепенно начинаем с простых случаев и примитивных форм, постепенно набиваем руку и увеличиваем количество паттернов.
>> Сами кейсы разделяются по «паттерну поведения», т.е. последовательности
>> определенных действий или определенных входящих/исходящих данных
Дело как раз в сопоставлении набора данных и паттерна. Эта классическая задача для программного синтеза — по набору данных найти программу. И с ней в общем сложно справиться:
а) потому что у нас очень много разных видов программ (паттернов), практически бесконечное количество.
б) потому что у нас очень большое количество фич, по которым нужно сопоставлять паттерн и данные.
То есть мы не можем завести таблицу в БД, в которой написать — елси входной параметр единица — то паттерн 1, если 0 — то паттерн 2. Потнециально, это будет таблица с огромным количеством столбцов (фич) и огромным количеством строк (паттернов).
Нейросеть облегчает этот случай программного синтеза именно в смысле поиска по фичам. Мы можем уже не запоминать и разбираться каким фичам соотвествует тот или иной параметр. Для программного синтеза нейросеть лучше ищет по ограниченному объему паттернов и большому объему фичей — тысячи и тысячи).
Проблему практически бесконечного количества вариантов программ(паттернов) это не решает. Я надеюсь на тот вопрос ответил))) Если что, буду рад уточнить.
ну ведь логично что есть две кривые, одна возрастает (шансы на успех, отсутствие конкуренции), другая убывает (прибыль). Увеличивая шансы на успех и переводя свой проект в РОссию вы тем самым отрезаете как и конкурентов, так и рынки.
Спасибо, в общем я наверное удовлетворил свое любопытство)))
Мне кажется врядли для ребят это был «дауншифтинг», в том смысле что синица то в руках у них была ввиде реализованных уже в долине проектов, по их словам этим проектом они метятся в журавля
P. S. локализация — в смысле перенесения глобального проекта на локальный рынок.
И все таки, зачем заниматься локализациями иностранных проектов когда есть возможность сделать нового игрока на глобальном рынке? Допустим, если говорить не о вас, а о сферическом коне в вакууме. А именно плюсы локального проекта над глобальным, кроме отсутствия конкуренции. Понятно, что не у всех хватает денег начать бизнес в буржнете, но если есть такие возможности.
под профессионалом я подразумеваю таких людей, которые не мечтают, а понимают как сделать фейсбук. А на самом деле которые понимаю почему фейсбук делать не следует, а нужно сделать что то лучше.
В то что от этого будут непосредственные результаты, я не верю. Дай бог это поможет развивать рынок, сделает его более привлекательным.
Но в то что загвоздка в деньгах — я не верю. ТО есть именно деньгами объясняется отсуствие в россии проектов, продаж, предпринимателей масштаба Селиконовой долины? Комментатор выше написал что на викендах нет инветоров, есть айтишники. БОг с ними с инвесторами, но если бы были нормальные айтишники-профессионалы, то в их продукты нашлось бы много желающих вложиться, не важно откуда пришли бы дееньги. Здесь все говорят что инвесторы хотят отцепить кусочек фейсбука — вот имеено, кучосек не инновационной, активно отпиаренной и спекулятивно раздутой компании. Сделать новый фейсбук — это не цель, это фантазия. Такое впечатление что люди до сих пор не вырасли из 5-летнего состояния, в котором все мечтают космонавтами, не понимая что космонавты-профессионалы и космонавты в дестких книжках — разная песня. В общем нет профессионалов, и не понятно как они появятся в непрофессиональном сообществе — вырастят с помощью денег?
P. S. Есть конечно профессионалы, но они получают деньги сравнимые с озвученными инвестициями без труда, и бросать место в том же Яндексе чтобы бегать по Викендам готовы не многие.
When("^ user \"([^\"]*)\" and pin \"([^\"]*)\" in authenticate is valid")
public void user_and_pin_in_authenticate_is_valid(String arg1, String arg2) throws Throwable {
…
}
When("^ user \"([^\"]*)\" and pin \"([^\"]*)\" in authenticate is not valid")
public void user_and_pin_in_authenticate_is_not_valid(String arg1, String arg2) throws Throwable {
…
}
и для такого теста нам не нужна нейросеть, тут можно использовать то что вы называете преобразователем
НО
если мы представим что сама операция авторизации состоит из условных операций:
начать коннекшн к БД (просто логируем тип БД, Gherkin паттерн «Пытаемся приконнектится к БД», тест кейс — прокерка что установился коннект)
авторизоваться в БД
взять пароль из БД для пользователя
сверить пароль с паролем пользователя
если да, то прописать куку
для этих операция мы тоже можем собрать логи и тоже прописать кейсы с спецификацией Gherkin.
И
в другой программе у нас тоже есть коннекшн к БД. Тогда задача нашей нейросети в другой программе распознать по логам что это тоже коннекшн к БД, выдать нам соответствующий паттерн в Gherkin и тест кейс коннекшна. И елси мы натренировали нейросеть правильно, мы не пишем ей правил соотвествия между описанием лога коннекшна к БД в одной программе, и логом коннекшном в другой программе.
Количество кейсов конечно в отдельной функции, в отдельном модуле или одной программе. Если мы хотим собрать все возможные кейсы которые в теории можно написать на Java то это конечно не будет бесконечное количество вариантов, но примерно как варианты ходов в шахматах.
> Если программа генерирует лог в определенном формате, не проще ли написать
> преобразователь этого формата в конечные кейсы (или хотя бы в транзакции,
> которые потом можно будет объединять)?
Тут в каком месте вручную не оптимизируй количество кейсов, это будет не очень качественно. Вообще тут ручная оптимизация не очень хорошо работает. Представьте обратную ситуацию — вам на основе спецификации Gherkin нужно сгенерировать программу. МОжно сделать распознователь ключевых слов в спецификации, какие то регулярки. Но руками это наоптимизироват невероятно сложно. Тут обратная задача, но не менее сложная.
Смотрите, чтобы проще было понять зачем нужна тут нейросеть, нужно сформулировать реальную задачу. Синтетический лог который я в статье привел конечно можно раскидать руками.
Но сформулируйте задачу для неизестного количества паттернов. Того, что мы накопили прогнав милион программ. Тогда это задача типа k-means, когда у вас есть векторное пространство паттернов, вам дают на вход кусок лога, и вам нужно найти вектор, который лучше всего подходит для этого куска лога. Здесь лучше никаких преобразователей самому не писать, а воспользоваться уже применяемыми для этой общей задачи методами.
Качество работы тут может повышаться также, как и в случае с изображениями — постепенно начинаем с простых случаев и примитивных форм, постепенно набиваем руку и увеличиваем количество паттернов.
>> Сами кейсы разделяются по «паттерну поведения», т.е. последовательности
>> определенных действий или определенных входящих/исходящих данных
Дело как раз в сопоставлении набора данных и паттерна. Эта классическая задача для программного синтеза — по набору данных найти программу. И с ней в общем сложно справиться:
а) потому что у нас очень много разных видов программ (паттернов), практически бесконечное количество.
б) потому что у нас очень большое количество фич, по которым нужно сопоставлять паттерн и данные.
То есть мы не можем завести таблицу в БД, в которой написать — елси входной параметр единица — то паттерн 1, если 0 — то паттерн 2. Потнециально, это будет таблица с огромным количеством столбцов (фич) и огромным количеством строк (паттернов).
Нейросеть облегчает этот случай программного синтеза именно в смысле поиска по фичам. Мы можем уже не запоминать и разбираться каким фичам соотвествует тот или иной параметр. Для программного синтеза нейросеть лучше ищет по ограниченному объему паттернов и большому объему фичей — тысячи и тысячи).
Проблему практически бесконечного количества вариантов программ(паттернов) это не решает. Я надеюсь на тот вопрос ответил))) Если что, буду рад уточнить.
Спасибо, в общем я наверное удовлетворил свое любопытство)))
P. S. локализация — в смысле перенесения глобального проекта на локальный рынок.
Но в то что загвоздка в деньгах — я не верю. ТО есть именно деньгами объясняется отсуствие в россии проектов, продаж, предпринимателей масштаба Селиконовой долины? Комментатор выше написал что на викендах нет инветоров, есть айтишники. БОг с ними с инвесторами, но если бы были нормальные айтишники-профессионалы, то в их продукты нашлось бы много желающих вложиться, не важно откуда пришли бы дееньги. Здесь все говорят что инвесторы хотят отцепить кусочек фейсбука — вот имеено, кучосек не инновационной, активно отпиаренной и спекулятивно раздутой компании. Сделать новый фейсбук — это не цель, это фантазия. Такое впечатление что люди до сих пор не вырасли из 5-летнего состояния, в котором все мечтают космонавтами, не понимая что космонавты-профессионалы и космонавты в дестких книжках — разная песня. В общем нет профессионалов, и не понятно как они появятся в непрофессиональном сообществе — вырастят с помощью денег?
P. S. Есть конечно профессионалы, но они получают деньги сравнимые с озвученными инвестициями без труда, и бросать место в том же Яндексе чтобы бегать по Викендам готовы не многие.