В предыдущей истории я продемонстрировал пример использования 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")); } }
Это еще один пример использования этого «нового программиста» в разработке программного обеспечения. Надеюсь, вам понравилась идея.