2013-03-02 6 views
4

테스트 구동 개발을 수행함에 따라 테스트를 기반으로 생성 된 코드로 가상 프로그램을 완전히 개발할 수 있는지 여부를 숙고했습니다. 즉, 테스트를 통과하기 위해 특별히 코드를 생성하는 생성기를 가질 수있는 능력이 있습니다. 프로그래밍 언어의 미래는 테스트를 작성하는 것입니까?단위 테스트를 기반으로 생성 된 코드로 작성된 프로그램

+0

불행히도, 이미이 작업을 수행 할 수있는 기존 시스템이없는 한,이 질문은 누구나 합리적인 답을 제공하기에 충분할만큼 구체적이지 않다고 생각합니다. – Simon

+0

기본적으로 기계 학습을 설명했습니다. –

답변

2

적어도이 기술의 초기 세대에서는 개발자가 생성 된 코드의 정확성에 회의적이었을 것으로 생각됩니다. 그래서 인간의 리뷰도 참여해야 할 것입니다.

간단히 말해서, 함수에 대해 10 개의 테스트를 작성하고 예상 입력을 사용하여 생각할 수있는 모든 시나리오를 처리한다고 가정 해 보겠습니다. 프로그램은 초보적인 switch 문 (예상되는 결과와 일치하는 10 개의 입력) 이상으로 모든 테스트를 통과 한 코드를 쉽게 생성 할 수 있습니다. 이 코드는 분명히 이 아니지만이 될 것입니다.

그저 간단한 예입니다. switch 문을 생성하지는 않지만 실제로는 정확하지 않고 훨씬 더 미묘한 방법으로 잘못된 솔루션을 생성하는보다 정교한 프로그램을 상상하는 것은 어렵지 않습니다. 따라서이 선상의 모든 기술은 최소한 처음에는 회의주의의 깊은 수준에 부합 할 것이라고 제 제안합니다. 그것은 미래에 언젠가 가능하지만, 간단한 테스트는 코드를 생성 할 수 있습니다

0

:

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에 써야한다는 것을 의미합니까? 어느 쪽이라도 사실 일 수 있습니다. 테스트를 통과하기 위해 최소 세트 만 수행해야하는 경우 어떻게해야합니까? 컨텍스트를 알지 못하고 매우 정확한 테스트를 작성하지 않아도 코드 작성자는 테스트 작성자가 의도 한 바를 (지금 시점에서) 파악할 수 없습니다.

0

코드를 완전히 생성 할 수 있으면 생성자의 기준은 코드를 정확하게 설명하는 사양이어야합니다. 이 생성기는 한 언어를 다른 언어로 교차 컴파일하는 컴파일러와 같은 것입니다.

시험은 그런 언어가 아닙니다. 그들은 코드 기능의 특정 측면이 유효하고 변경되지 않는다고 주장합니다. 그렇게함으로써 그들은 리팩토링 될 때조차도 코드를 망가 뜨리지 않도록 비계합니다.

그러나 이러한 두 가지 개발 방식을 어떻게 비교할 수 있습니까?

1) 제너레이터가 올바르게 작동하면 사양이 항상 올바른 코드로 전송됩니다. 나는이 코드가 설계 상 테스트되었으며 추가 테스트가 필요하지 않다고 가정한다. 생성 된 코드보다 생성기가 더 좋습니다.

2) 생성 된 코드로 연결되는 스펙이 있는지 또는 코드 작동을 보장하는 테스트로 표현 된 스펙이 내 눈에는 상당히 동등한 지 여부.

3) 두 가지 개발 방법을 결합 할 수 있습니다. 테스트 된 생성기를 사용하여 프로그램 프레임 워크를 생성 한 다음 TDD를 사용하여 생성 된 코드를 풍부하게 만듭니다. 주의 : 그러면 하나의 프로젝트에서 두 가지 개발주기가 실행됩니다.즉, 사양이 변경 될 때 항상 생성 된 코드를 다시 생성 할 수 있고 추가 코드가 생성 된 코드에 올바르게 맞는지 확인해야합니다.

작은 예제 : UML 클래스 다이어그램에서 코드를 생성 할 수있는 도구를 상상해보십시오. 이것은 TDD로 메소드를 개발할 수있는 방법으로 수행 될 수 있지만 클래스의 구조는 UML로 정의되므로 다시 테스트 할 필요가 없습니다.

관련 문제