Программисты, вы действительно понимаете TDD и BDD?
Программисты, вы действительно понимаете TDD и BDD?

Сегодня мы поговорим о двух практиках TDD и BDD. Давайте сначала поговорим о TDD, то есть Test Driven Development (Разработка через тестирование).

TDD ритм

Возможно, вам не терпится поднять руки: «TDD, я знаю, это значит сначала писать тесты, а потом писать код». Но так ли это на самом деле? Строго говоря, подход «сначала написание тестов, а потом код» называется «Сначала тестирование», а не «разработка через тестирование».

Разве разработка через тестирование не означает сначала написание тестов, а затем написание кода? В чем разница между ними?

Чтобы ответить на этот вопрос, нам нужно знать TDD ключевой элемент Ритм TDD: красно-зеленый рефакторинг

Красный цвет указывает на то, что написан новый тест и тест не пройден; зеленый — на то, что функциональный код написан и тест пройден, а рефакторинг — это процесс корректировки кода после выполнения основных функций.

Упомянутые здесь красный и зеленый цвета взяты из среды модульного тестирования. Потому что в процессе запуска тестов во многих фреймворках модульного тестирования результаты теста будут отображаться красным, если тест не устарел, и зеленым, если тест пройден. Это стало общепринятым правилом фреймворков модульного тестирования.

Что сделало фреймворки модульного тестирования популярными, так это JUnit, один из его авторов Kent Beck。TDD Привлечение внимания общественности зависит от развития экстремального программирования, методологии разработки программного обеспечения. Основатель экстремального программирования также является Kent Beck。Kent Beck существовать JUnit и TDD Обе вещи внесли значительный вклад, и нетрудно понять, почему TDD ритм Вызов“красный-зеленый-Рефакторинг”Понятно。

напиши сначалатест,Затем напишите код для завершения функции,существуют первый шаг и второй шаг вверх,первый тест улучшениятест драйвера такой же, как и из. Разница между ними в том, что,водитель тестразвивать на этом не останавливается,Есть еще один, более важныйизсвязь:рефакторинг

То есть,После того, как функция существует и выполняется тест,Мы снова вернемся к коду,Исправьте неудовлетворительные части кода,Или устранить дублирование между новым и старым кодом. вы можете спросить,Тогда почему бы просто не написать код, когда второй шаг «зеленый»? Потому что «зеленый» изсосредоточиться на точку просто пропускает тест.,Функция Пучок завершена.

Итак, мы говорим: тестпродвигатьразвиватьитестводить машинуразвиватьиз Разница в том,существовать Рефакторингначальство。

Многие люди просто помнят: «Сначала напиши тест».,Напишите код позже»,Потому что у многих людей создается впечатление, что,Единственное, что важно при написании кода, — это завершить функцию. Пройден тест,Только что завершил функцию,Это значит, что все в порядке. Однако,Этот тип мышленияспособ Это заставит людей игнорировать тот факт, что новый код может принестииз Безвкусица (Код Smell),Неприятные запахи приводят к гниению кода,Это инженерная проблема,То есть будут долгосрочные последствия и проблемы.

Внимание человека ограничено,Пусть люди существуют на сцене. Пучок все сделано хорошо.,Это тяжело. На самом деле мы увидим,Важная причина хаоса кода во многих командах заключается в том, что все их внимание сосредоточено на выполнении функций.,Нет времени рассматривать качество самого кода. С этой точки зрения,TDD — более гуманный подход,Это Пучок завершил функцию и корректировку кода, когда стало два этапа.

Рефакторинг — это процесс устранения неприятных запахов в коде. Если у вас есть тесты, вы можете смело проводить рефакторинг, потому что любые ошибки модификации будут обнаружены тестами за вас.

существоватьтестводить машинуразвиватьсередина,Рефакторинг и тест дополняют друг друга: теста не существует.,Модифицировать код можно только с трепетом, рефакторинга нет;,Степень путаницы в коде будет постепенно увеличиваться,также станет все труднее писать тест.

сейчассуществовать,Вы поняли, что усовершенствование тест-драйвера — это не просто «сначала написать тест».,Напишите код позже»。Но этотдаизбавляться от Понятно概念начальствоиз Непонимание,Нам нужно идти дальше,Уметь проводить «тест-драйвы» в развитии.

Разработка, управляемая тестированием

Не сложно понять,Рефакторинг итест взаимно,Этот процесс будет «заставлять» нас писать все лучший и лучший код. но,Это всего лишь самое грубое понимание слова «драйв».

Во-первых, позвольте задать вам вопрос, разработка через тестирование, с чего начать? Многие скажут: разве разработка через тестирование не начинается с тестирования? Этот ответ очень интуитивен. Мы можем продолжить спрашивать, с чего нам начать писать тесты?

Для многих людей TDD является неприемлемой практикой,Отбросьте различия в понятиях,Более важная причина в том, что,Нет возможности начать писать тест. Часто я не могу написать тест,Главным образом потому, что спрос слишком велик. так,Первым шагом на пути к настоящему развитию является декомпозиция задач.,Пучок Масштабное требование разбивается на несколько мелких задач. Решение конкретной небольшой задачи,Нам просто нужно написатьтестиз База。Разработка через тестирование начинается с декомпозиции задач.

Конкретно речь идет о написании тестиз.,Даже если столкнуться с из-за небольшой задачи,для многих людей,Это все еще непростая задача. такой же,Мы существуем, анализируя ранее,Хочу написать тест,Требуется код тестиз. это означает,Наш код должен иметь тестовый дизайн. Если ты не умеешь писать тест,Нам нужно скорректировать код,Сделайте свой код в порядке,Это то, о чем мы говорили в предыдущей лекции о устаревших системах.

Отсюда вы можете видеть, что такой подход к проблемам с точки зрения тестирования полностью разрушит наши первоначальные рабочие привычки и даже скорректирует дизайн для тестирования. Но в результате мы получаем лучший дизайн, поэтому многие люди понимают TDD люди будут Пучок TDD Объясняется как проектирование через тестирование (тестирование Driven Design)。

Теперь вы можете понять, чтобы написать тест,Прежде всего, это «заставляет» наши потребности разбиваться на задачи одну за другой.,Тогда это «заставит» нас дать осуществимый проект.,И существуют конкретно на этапе кодирования,Это также будет «заставлять» нас постоянно улучшать код, который мы пишем. Пучок Посмотрите это содержимое вместе,Мы действительноиздасуществоватьиспользоватьтест“водить машину”Сразвивать。

TDD Так хорошо, почему он используется в промышленности? TDD Мало кто так работает? Прежде всего, многие люди сами TDD Понимание — это ошибка, это то, что я анализировал раньше. Во-вторых, TDD; Хотя это кажется простым, на самом деле оно требует множества предварительных условий, таких как декомпозиция задач, масштабируемый дизайн и т. д., а многие люди не обладают этими способностями. Глядя на это под другим углом, TDD Это всего лишь верхушка айсберга, обнаженная над морем. TDD ритм, а скрытые задачи под водой — это декомпозиция задач и разработка программного обеспечения, которые требуют определенного количества времени для накопления способностей.

Как упоминалось ранее, TDD происходит от экстремального программирования, так почему же экстремальное программирование называется экстремальным программированием?

экстремальное программированиетак Вызов“предел”,Идея, лежащая в основе этого, состоит в том, чтобы довести хорошую практику до предела:

  • Если интеграция хорошая, мы интегрируем ее как можно раньше. Доведение до предела — это интеграция каждой модификации. Это непрерывная интеграция.
  • Хорошо, если тест напишет программист,Давайте сделаем это как можно скорее,Чтобы довести его до предела, нужно сначала написать тест.,Затем настройте код в соответствии с тестом,Это драйвер развития.
  • Если проверка кода хорошая, мы будем делать больше проверок. Достижение предела — это проверка кода в любое время и в любом месте. Это парное программирование.
  • Если общение с клиентом хорошее из,Мы больше общаемся с нашими клиентами,Превышение предела — это когда клиенты постоянно находятся в команде.,Это живой клиент.

Экстремальное программирование само по себе и практика достойны нашего изучения.,Но концепцию экстремального программирования действительно стоит изучить. Мы могли бы больше думать об этом в нашей повседневной работе., Каковы некоторые из передовых практик и как бы они выглядели, если бы их довели до крайности? Такое мышление значительно расширит ваше мышление.

Закончил разговор о TDD,Так что же такое БДД? Известно,Одной из наиболее важных концепций в разработке программного обеспечения является многоуровневость.,То есть существуют на основе некоторых моделей из,Продолжайте создавать новые модели. Наиболее знакомая программистам концепция многоуровневой сети — это семиуровневая сетевая модель.,Пока один слой модели является зрелым,Будут люди, которые будут мыслить расширенно, основываясь на этой модели.,Этот подход не является исключением.

Когда тенденция автоматизированной среды тестирования, привнесенная JUnit, быстро охватила все сообщество разработчиков и стала фактическим стандартом в отрасли, некоторые люди начали расширять ее на основе модели среды тестирования. Среди различных исследований наиболее влиятельным является BDD.

развитие, основанное на поведении

BDD Полное имя Behavior Driven Развитие, то есть развитие, основанное на поведении。BDD Эта концепция была разработана в 2003 году Dan North предложенный.

То, как фреймворки модульного тестирования пишут тесты, больше ориентировано на конкретные реализации. Уровень этого подхода очень низкий. Я надеюсь, что этот уровень мышления будет повышен. В какой степени? Изменения в программном обеспечении обусловлены потребностями бизнеса, поэтому лучше всего обратиться к бизнесу, а проверка того, является ли бизнес правильным или нет, является бизнес-поведением. Эта идея во многом вдохновлена ​​Domain Driven Design (Domain Driven Design), который в то время только зарождался. Driven Design)середина Проходитьиспользоватьязыкиз Влияние。существовать BDD В системе дискурса понятие «тест» заменено на «поведение», поэтому такой подход называется развитием. основанное на поведении。

Дэн Норт не только придумал эту концепцию, но и для реализации своих идей создал первую структуру BDD: JBehave. Позже версия RBehave на базе Ruby была переписана, и этот проект позже был объединен с RSpec.

Хорошо, теперь, когда мы понимаем происхождение BDD, давайте посмотрим, как будут выглядеть тесты при разработке с использованием BDD.

Самым популярным сегодня BDD-фреймворком является, вероятно, Cucumber, автором которого является Аслак Хеллесой, один из авторов RSpec. От первоначальной среды BDD, основанной на Ruby, до сегодняшнего дня Cucumber превратился в среду тестирования BDD, поддерживающую множество различных языков программирования, таких как распространенные Java, JavaScript, PHP и т. д.

Вот пример BDD

Язык кода:javascript
копировать
Scenario: List todo item
  Given todo item "foo" is added
  And todo item "bar" is added
  When list todo items
  Then todo item "foo" should be contained
  And todo item "bar" should be contained

Из этого примера мы легко можем видеть, что Примеры BDD итестиспользовать очень читабельны。Даже если мы не знакомы с технологией,Только этот текст,Мы также видим, что этот пример использовать хочет выразить значение из. Вот почему мы говорили ранее, что пример BDD тестиспользовать ближе к бизнесу. Он надеется стать коммуникационным мостом между бизнес-персоналом и техническими командами.,так,Его выражение ближе к бизнесу.

Хотя это выражение очень близко к бизнесу, оно не является описанием естественного языка, а имеет определенный формат. Фактически, это предметно-ориентированный язык (DSL), называемый Gherkin.

Не пугайтесь вида нового языка,На самом деле это очень просто。здесьиз Основной моментдаэтоиз Формат описания:“Given…When…Then”。Given Представляет собой гипотетическую предпосылку, когда Указывает на конкретную операцию, Затем Это соответствует результату, который необходимо проверить в этом варианте использования.

Обычно тестирование состоит из четырех этапов: подготовка、осуществлять、утверждениеиубирать。Пучокэтосоответствующийздесь,Given В соответствии с подготовкой, Когда соответствует исполнению, а Then Соответствующее утверждение. Что касается очистки, то на этом этапе будет проделана некоторая работа по освобождению ресурсов, но эта работа относится к уровню реализации и не имеет большого значения на бизнес-уровне, поэтому бизнес-описание является основной целью. BDD На этом этапе существования нет.

Теперь, когда мы понимаем формат, давайте вернемся к фокусу. конкретный контент. Прежде всего, все описанные здесь модели поведения описаны с точки зрения бизнеса. Во-вторых, учитывая, когда, тогда Все они независимы и могут свободно комбинироваться. Это означает, что после настройки базовой структуры кто-то может использовать эти базовые операторы для написания новых тестовых примеров даже без участия технического персонала.

Отсюда мы можем легко увидеть, что сам язык Gherkin преследует благую цель. Он предназначен не столько для технических специалистов, сколько для деловых людей.

Gherkin Языковой уровень обеспечивает только бизнес-описание. Мы, программисты, очень хорошо знаем, что этот уровень описания не может функционировать напрямую. Должна быть конкретная реализация. Так где же следует разместить конкретную реализацию? Это твоя очередь клеевой слой(Glue)играть рольиспользовать Понятно,Это связывает пример тестиспользовать с реализацией изклеевой слоя.,существовать Cucumber В терминологии это называется определением шага (Step Определение), ниже приведен пример определения шага.

Язык кода:javascript
копировать
public class TodoItemStepDefinitions ... {
  private RestTemplate restTemplate;

  public TodoItemStepDefinitions() {
    ...

    Given("todo item {string} is added", (String content) ->
      addTodoItem(content)
    );

    ...
  }

  private void addTodoItem(final String content) {
    AddTodoItemRequest request = new AddTodoItemRequest(content);
    final ResponseEntity<String> entity =
            restTemplate.postForEntity("http://localhost:8080/todo-items", request, String.class);
    ...
  }
}

Поскольку определение шага Gherkin Между файлом и конкретной реализацией существует связь, поэтому ключом к пониманию определения шага является знание того, как оно соотносится с ними. существуют В этом кодексе, учитывая Это и есть точка соединения. Для сравнения мы обнаружим, что Given Параметр из внутри — это то, что мы имеем перед существованием Gherkin Как описано в файле, разница в том, что часть его стала параметром. Из этого мы можем знать, Для одного и того же описания могут использоваться разные параметры, основанные на различиях в вариантах использования.

Если мы скажем Gherkin Языковой раздел практически существует разнообразный BDD Фреймворки универсальны, и часть определения шагов тесно связана с фреймворками. Здесь мы используем Cucumber Java 8 Шаги определяются следующим образом, то есть с использованием Given Метод определен. Если вы посмотрите на другую информацию, вы также увидите на основе. Annotation Определение, это результат выбора разных зависимых библиотек.

Когда дело доходит до конкретной реализации,Программисты очень уверены в себе. Здесь мы выполняем соответствующую обработку в соответствии с бизнес-действиями. существуют В приведенном выше коде,добавить в Todo Пункт - отправить сервис на написанный вами сервис. POST просить.

Эти вещи легко понять. Единственное, что требует немного внимания, это то, что. Then при написании кода,Потому что это означает утверждение из,существования Мы должны написать утверждение в этой части,Например, что-то вроде этого.

Язык кода:javascript
копировать
Then("todo item {string} should be contained", (String content) -> {
    assertThat(Arrays.stream(responses)
            .anyMatch(item -> item.getContent().equals(content))).isTrue();
});

в реальном бою BDD

Сейчас существовать мы уже имеем право BDD Предварительное понимание, далее давайте посмотрим, как существование может быть использовано в реальных проектах. BDD。

Как мы уже знаем, Корнишон Язык ориентирован на деловых людей. В отличие от написания кода, мы можем использовать только английский, Gherkin. существовать Учитывается при проектировании Понятно Деловой персонализфактические потребности,такэтоизспроектировать самдалокализацияиз。мы можем дажеиспользоватьсерединанаписание текстатестиспользоватьпример,Ниже приводитсядаодин Авторизоватьсяизтестиспользоватьпример。

Язык кода:javascript
копировать
предполагалось Чжан Сан является зарегистрированной учетной записью, имя и пароль его учетной записи соответственно zhangsan и zspassword
когда существоватьиспользовать Введите в поле ввода имени пользователя чжансан, введите его в поле ввода пароля zspassword
и Нажмите, чтобы войти
Так Чжан Сан успешно войдет в систему

Как насчет этого примера использования? Возможно, вы скажете, что этот пример использования написан довольно хорошо. Если ты так думаешь, значит, ты программист с точки зрения существования. Я уже говорил это раньше, BDD необходимо сохранить существующий бизнес с точки зрения перспективы,И этопримерребенок полныйдастоятьсуществовать Реальностьсейчасизугол。если Авторизоваться Метод был скорректирован,использовать Все аккаунты потеряныиспользовать Автоматическое имя учетной записи и пароль Авторизоваться,щелчок не требуется,Так нужно ли менять этот пример использования? Ниже я описываю это по-другому,Почувствуйте это снова.

Язык кода:javascript
копировать
предполагалось Чжан Сан является зарегистрированной учетной записью, имя и пароль его учетной записи соответственно zhangsan и zspassword
когда использовать Семьяиспользовать Имя учетной записи zhangsan èПароль zspassword Авторизоваться
Так Чжан Сан успешно войдет в систему

Этот сайт существует с точки зрения бизнеса из описания,Если не будут внесены коррективы в бизнес,Нетиспользоватьиспользовать Имя учетной записи и пароль Авторизоваться Понятно,В противном случае этот пример использования не нужно менять. Даже если конкретный метод реализации из скорректирован,нужно изменитьизтакжедаспецифическийизопределение шага。так, Хочу писать хорошо BDD пример истестиспользовать, ключевые моменты существуютиспользовать описание перспективы бизнеса.

теперь это BDD изиспользовать примеры более ориентированы на бизнес-перспективу,таксуществоватьреальностьизпроектсерединаделатьиспользоватьэточас,Мы предпочитаем Пучок, когда нужно использовать инструмент приемочного тестирования. Здесь есть момент, который мы часто упускаем из виду: бизнес-модель. Первым инстинктом многих людей является,Какая модель нужна тестировщику?

теперь это BDD Дополнительные сценарии использования — это сложные сценарии приемки, поэтому, соответственно, нам также необходимо моделировать сценарии тестирования. Помните, мы говорили о качествах, которыми должен обладать хороший тест? Один из них – профессионализм. Для сложных сценариев написание хороших тестов — это то же самое, что написание хорошего кода, и хорошая модель просто необходима.

Примером, который можно использовать в качестве справочного материала в этом отношении, является выполнение Web Часто используемая модель для тестирования: Страница Объект. Он инкапсулирует доступ к странице. Даже если вы пишете определение шага, вам не следует использовать его непосредственно в коде. HTML элемент, но должен иметь доступ к другому объекту страницы.

Взяв в качестве примера предыдущий вход в систему, мы можем определить такой объект страницы.

Язык кода:javascript
копировать
public class LoginPage {
    public boolean login(String name, String password) {
      ...
    }
}

Таким образом,шаг существования определен,Вам не придется беспокоиться о том, как конкретно найти поле ввода, что улучшит абстракцию кода. когда Однако это всего лишь ссылка,Когда сталкиваешься с самим собой, следует использовать,Вам следует подумать о создании собственной бизнес-модели.

BDD продление

Наконец, давайте поговорим о BDD некоторые расширения. Из вышесказанного мы можем знать, что BDD пример изиспользовать и обычный пример тестизисполь зовать отличаются только способом выражения существования. Со структурной точки зрения они почти полностью эквивалентны. Так что, пока вы хотите, вы определенно можете выбирать использовать BDD способ проведения всех видов тестирования от модульного тестирования до системного тестирования.

такпосмотрим,В отрасли существования также есть BDD стиль фреймворка модульного тестирования, наиболее типичным из которых является RСпец. я из RSpec Я перехватил из документа кусок кода, вы можете это почувствовать.

Язык кода:javascript
копировать
RSpec.describe Order do
  it "sums the prices of its line items" do
    order = Order.new
    order.add_entry(LineItem.new(:item => Item.new(
      :price => Money.new(1.11, :USD)
    )))
    order.add_entry(LineItem.new(:item => Item.new(
      :price => Money.new(2.22, :USD),
      :quantity => 2
    )))
    expect(order.total).to eq(Money.new(5.55, :USD))
  end
end

Фактически, он сильно отличается от предыдущего варианта использования Cucumber, поскольку он относится к категории модульного тестирования, поэтому нет описания для бизнес-персонала, такого как часть Gherkin. Но в то же время вы также можете видеть, что он сильно отличается от традиционной платформы xUnit, главным образом потому, что сама платформа поможет вам написать более описательный код.

BDD Еще одним направлением расширения является документирование требований. тепрь это BDD Он существует, приближаясь к бизнес-направлению, стремясь позволить бизнес-персоналу лучше понять эти тестиспользовать примеры. По сути, он служит документом, тесно связанным с реальной реализацией и являющимся своего рода «Живым» документом. Документ). «Живая документация» относится к постоянно обновляемой документации, а сама концепция не ограничивается технической областью. Огурец Прямо сам по себе Поддержка оперативной документации, которую можно использовать с JIRA Для интеграции вы можете напрямую Пучок Cucumber Тестовые случаи становятся документацией.

теперь это Если вы хотите написать документ, это не ограничивается тем, используете ли вы BDD Таким образом, такой формат также выглядит как Concordion Этот инструмент даже позволяет нам записывать примеры Пучокиспользования в полный справочный документ. Изначально он поддерживаетиспользование HTML Способ Написание документов, теперь также поддерживается существование использовать Markdown способ писать документацию.

Или BDD Независимо от того, являются ли они живыми документами или нет, за ними стоит концепция, называемая Спецификация by Пример, SbE), то есть пример использования способа уточняет требования, вы можете увидеть BDD и Живые документы таким образом выражают требования.

Суммируя,Если вам интересно это направление,Впереди еще многое предстоит изучить. В общем,Это позволяет технической команде больше не ограничиваться самой технологией.,Станьте ближе к делу,Эта тенденция развития всей отрасли весьма последовательна.

Подвести итог

Сегодня мы говорили TDD,Это тест-драйвер. развитие, основанное на тестировании, уже является отличной практикой в ​​отрасли.,Первый шаг к изучению тест-драйвера улучшения — это запомнить тест-драйвер прогресситма: красный — зеленый — реконструкция.

знал TDD После ритма нам также необходимо понять, как развиваются стимулы. существовать TDD изпроцесссередина,Сначала нам нужно разбить задачи,Пучок Разбивайте большие потребности на маленькие задачи,Затем рассмотрим тест кода,Пишите чистый код,Все это обусловлено существованием «теста».

Именно из-за изменения перспективы,Чтобы написать тестируемый код,Для этого нам даже приходится корректировать дизайн,так,Еще кто-то Пучок TDD Это называется проектированием через тестирование.

Независимо от того, принимаете ли вы использовать или нет TDD изупражняться,существования Прежде чем вы начнете писать код,Мыслить с точки зрения тестиз – очень ценная вещь.,Это также важная часть написания высококачественного кода.

Потом мы снова поговорили BDD, также известный как развитие, основанное на поведение. Такое мышление существует. xUnit На основе израмки, пусть тестиспользует пример выражения, более близкого к деловому поведению.

Если бы вы могли вспомнить сегодня только одну вещь из содержания,Тогда, пожалуйста, запомни:Посмотрите на код с точки зрения тестирования, Техническая команда должна быть ближе к бизнесу.

PS: Если эту статью невозможно найти,Вы можете лайкать и собирать,Вам удобно читать и находить,сосредоточиться —Я продолжу предоставлять вам стабильные инструменты и техническую информацию!

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода