테스트 구동 개발을 수행함에 따라 테스트를 기반으로 생성 된 코드로 가상 프로그램을 완전히 개발할 수 있는지 여부를 숙고했습니다. 즉, 테스트를 통과하기 위해 특별히 코드를 생성하는 생성기를 가질 수있는 능력이 있습니다. 프로그래밍 언어의 미래는 테스트를 작성하는 것입니까?단위 테스트를 기반으로 생성 된 코드로 작성된 프로그램
답변
적어도이 기술의 초기 세대에서는 개발자가 생성 된 코드의 정확성에 회의적이었을 것으로 생각됩니다. 그래서 인간의 리뷰도 참여해야 할 것입니다.
간단히 말해서, 함수에 대해 10 개의 테스트를 작성하고 예상 입력을 사용하여 생각할 수있는 모든 시나리오를 처리한다고 가정 해 보겠습니다. 프로그램은 초보적인 switch 문 (예상되는 결과와 일치하는 10 개의 입력) 이상으로 모든 테스트를 통과 한 코드를 쉽게 생성 할 수 있습니다. 이 코드는 분명히 이 아니지만이 될 것입니다.
그저 간단한 예입니다. switch 문을 생성하지는 않지만 실제로는 정확하지 않고 훨씬 더 미묘한 방법으로 잘못된 솔루션을 생성하는보다 정교한 프로그램을 상상하는 것은 어렵지 않습니다. 따라서이 선상의 모든 기술은 최소한 처음에는 회의주의의 깊은 수준에 부합 할 것이라고 제 제안합니다. 그것은 미래에 언젠가 가능하지만, 간단한 테스트는 코드를 생성 할 수 있습니다
:
assertEquals(someclass.get_value(), true)
을하지만 블랙 박스 통합 테스트에서 올바른 출력을 점점 것 같아요 것이 무엇인가는 NP-완료 문제 :
assertEquals(someclass.do_something(1), file_content(/some/file))
assertEquals(someclass.do_something(2), file_content(/some/file))
assertEquals(someclass.do_something(2), file_content(/some/file2))
assertEquals(someclass.do_something(3), file_content(/some/file2))
결과 코드가 항상/some/file에 쓰여지는 것을 의미합니까? 결과 코드가 항상/some/file2에 써야한다는 것을 의미합니까? 어느 쪽이라도 사실 일 수 있습니다. 테스트를 통과하기 위해 최소 세트 만 수행해야하는 경우 어떻게해야합니까? 컨텍스트를 알지 못하고 매우 정확한 테스트를 작성하지 않아도 코드 작성자는 테스트 작성자가 의도 한 바를 (지금 시점에서) 파악할 수 없습니다.
코드를 완전히 생성 할 수 있으면 생성자의 기준은 코드를 정확하게 설명하는 사양이어야합니다. 이 생성기는 한 언어를 다른 언어로 교차 컴파일하는 컴파일러와 같은 것입니다.
시험은 그런 언어가 아닙니다. 그들은 코드 기능의 특정 측면이 유효하고 변경되지 않는다고 주장합니다. 그렇게함으로써 그들은 리팩토링 될 때조차도 코드를 망가 뜨리지 않도록 비계합니다.
그러나 이러한 두 가지 개발 방식을 어떻게 비교할 수 있습니까?
1) 제너레이터가 올바르게 작동하면 사양이 항상 올바른 코드로 전송됩니다. 나는이 코드가 설계 상 테스트되었으며 추가 테스트가 필요하지 않다고 가정한다. 생성 된 코드보다 생성기가 더 좋습니다.
2) 생성 된 코드로 연결되는 스펙이 있는지 또는 코드 작동을 보장하는 테스트로 표현 된 스펙이 내 눈에는 상당히 동등한 지 여부.
3) 두 가지 개발 방법을 결합 할 수 있습니다. 테스트 된 생성기를 사용하여 프로그램 프레임 워크를 생성 한 다음 TDD를 사용하여 생성 된 코드를 풍부하게 만듭니다. 주의 : 그러면 하나의 프로젝트에서 두 가지 개발주기가 실행됩니다.즉, 사양이 변경 될 때 항상 생성 된 코드를 다시 생성 할 수 있고 추가 코드가 생성 된 코드에 올바르게 맞는지 확인해야합니다.
작은 예제 : UML 클래스 다이어그램에서 코드를 생성 할 수있는 도구를 상상해보십시오. 이것은 TDD로 메소드를 개발할 수있는 방법으로 수행 될 수 있지만 클래스의 구조는 UML로 정의되므로 다시 테스트 할 필요가 없습니다.
- 1. 분리 된 코드로 단위 테스트를 실행하십시오.
- 2. 생성 된 DAL 코드로 단위 테스트
- 3. 부분 단위 테스트를 기반으로 한 소프트웨어 방법론
- 4. 단위 테스트를 단위 테스트합니까?
- 5. 환경을 변경하는 코드로 단위 테스트를 수행하는 실용적인 방법
- 6. 해시 컨텐트를 기반으로 생성 된 테스트를 실행하는 Rspec
- 7. 작성된 순서대로 테스트를 실행하는 방법?
- 8. 추가 된 기능을 기반으로 단위 테스트 변경하기
- 9. 정적 변수의 다른 값을 기반으로 VS에서 단위 테스트를 어떻게 실행합니까?
- 10. Xamarin.Forms 코드에서 코드로 작성된 코드
- 11. 코드로 작성된 인터페이스에 대한 계약
- 12. 로컬 컴퓨터에서 단위 테스트를 실행해야합니까?
- 13. 단위 테스트를 위해 보호 된 메소드에 액세스해야합니까?
- 14. 단위 테스트를 실행하는 MSBuild
- 15. 테스트중인 메서드에서 선언 된 변수의 단위 테스트를 단위 테스트하는 방법
- 16. 단위 테스트 객체 생성
- 17. 루비에서 실패한 단위 테스트를 다시 실행하십시오.
- 18. 단위 테스트를 사용하여 Django 성능 측정
- 19. C++에서 Java 코드로 작성된 액세스 객체
- 20. 단위 테스트 코드 생성
- 21. SQLRepository에 대해서 단위 테스트를 실행해야합니까?
- 22. 소스 코드로 작성된 것처럼 입력 코드를 실행하십시오.
- 23. Maven : 단위 테스트를 생성하는 유틸리티
- 24. 어떤 단위 테스트를 작성해야합니까?
- 25. 단위 테스트를 찾는 방법
- 26. 단위 테스트를 어디서 실행해야합니까?
- 27. 생성 된 Java 코드를 단위 테스트해야합니까?
- 28. .NET에서 작성된 단위 테스트 COM
- 29. BOOST 단위 테스트를 건너 뛰는 방법은 무엇입니까?
- 30. 응용 프로그램 콜백을 호출하지 않고 단위 테스트를 실행하는 방법
불행히도, 이미이 작업을 수행 할 수있는 기존 시스템이없는 한,이 질문은 누구나 합리적인 답을 제공하기에 충분할만큼 구체적이지 않다고 생각합니다. – Simon
기본적으로 기계 학습을 설명했습니다. –