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

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

Чтобы ускорить жизненный цикл разработки программного обеспечения (SDLC), давайте рассмотрим автоматизацию создания модульных тестов. Считается, что более высокий процент покрытия кода модульным тестированием приведет к меньшему количеству дефектов.

Процент покрытия кода = (Количество строк кода, выполняемых алгоритмом тестирования / Общее количество строк кода в системном компоненте) * 100

Идея в том, что мы разрабатываем днем, а робот ночью создает юнит-тесты :)

Это можно посмотреть так:

Я протестировал, и результат был таким:

Исходный код:

package com.xxxx;

import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;

import com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl;

public class WSLogin {

 public static boolean authenticateUser(String user, String pass) {
  LoginContext lc = createLoginContext(user, pass);

  if (lc != null) {
   try {
    lc.login(); // perform login

    // get the authenticated subject
    lc.getSubject();
    
    return true;
   } catch (LoginException e) {
    System.err.println("ERROR: login failed with exception: " + e.getMessage());
    e.printStackTrace();

    // login failed, might want to provide relogin logic
   }
  }
  
  return false;
 }
 
 private static LoginContext createLoginContext(String user, String pass) {
  LoginContext lc = null;

  try {
   lc = new LoginContext("WSLogin", new WSCallbackHandlerImpl(user, pass));

   // create a LoginContext and specify a CallbackHandler
   // implementation
   // CallbackHandler implementation determine how authentication data
   // is collected
   // in this case, the authentication data is "pushed" to the
   // authentication
   // mechanism implemented by the LoginModule.
  } catch (LoginException e) {
   System.err.println("ERROR: failed to instantiate a LoginContext " + "and the exception: " + e.getMessage());
   e.printStackTrace();

   // may be javax.security.auth.AuthPermission "createLoginContext" is
   // not granted
   // to the application, or the JAAS login configuration is not
   // defined.
  }
  return lc;
 }

}

Юнит-тест это:

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;

import org.junit.Before;
import org.junit.Test;

import com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl;
import com.xxxx.WSLogin;

public class WSLoginTest {
 LoginContext lc = null;
 
 @Before
 public void setUp() {
  try {
   lc = new LoginContext("WSLogin", new WSCallbackHandlerImpl("test", "test"));
  } catch (LoginException e) {
   e.printStackTrace();
   fail ("LoginContext could not be created");
  }
 }
 
 @Test
 public void testAuthenticateUser() {
  assertEquals(true, WSLogin.authenticateUser("test", "test"));  
 }
}

Это еще один пример использования этого «нового программиста» в разработке программного обеспечения. Надеюсь, вам понравилась идея.