programing

C 프로그래밍 및 TDD

stoneblock 2023. 9. 21. 20:03

C 프로그래밍 및 TDD

테스트 중심 개발은 OOO로 제한됩니까?아니면 절차 언어와 함께 사용하는 것이 가능/유용합니까?앞으로 몇 주 안에 C에서 더 큰 프로젝트를 시작해야 하는데 어떻게 개발할지 생각 중입니다.

TDD는 설계 패러다임이므로 특정 프로그래밍 패러다임과 연결되지 않습니다.

간단히 말하면 코드를 쓰기 전에 코드에 대한 테스트를 작성하는 것입니다.

C(볼링 게임 카타)를 사용한 TDD에 대한 슬라이드 덱을 보십시오.

Test Driven Development는 테스트 패턴부터 시작하여 테스트를 통과할 때까지 기능을 구축하는 코드를 개발하는 것을 의미합니다.이것은 어떤 프로그래밍 패러다임에도 똑같이 적용 가능합니다. 구조화/절차화, 객체 지향성, 기능성 -- 입력과 출력을 취할 수 있는 모든 것을 테스트할 수 있습니다.

저는 TDD가 OO에만 국한되어 있다고 생각하지 않습니다.

Unity & CMock 프레임워크를 사용해 보십시오.

위키의 예를 들어보세요.

void test_ShowSomeSillyExamples(void)
  {
    TEST_ASSERT_NOT_EQUAL(0, -1);
    TEST_ASSERT_EQUAL_INT(1, 1);
    TEST_ASSERT_EQUAL_HEX16(0x1234, 0x1234);
    TEST_ASSERT_EQUAL_STRING("These Are The Same", "These Are The Same");
    TEST_ASSERT_BITS(0x1111, 0x5555, 0x7175);
    TEST_ASSERT_INT_WITHIN(5, 100, 102);
  }

참조: http://sourceforge.net/apps/trac/embunity/wiki

책:

http://www.pragprog.com/titles/jgade/test-driven-development-for-embedded-c

Yahoo 그룹은 다음과 같은 내용에 대해 설명합니다.

http://tech.groups.yahoo.com/group/AgileEmbedded/

만약 당신이 C에서 TDD를 한다면 당신은 C에서 시험을 작성해야 합니까?아마 구글의 gtest를 이용하여 C로 생산코드를 작성하고 C++로 테스트를 작성할 것입니다.

James Grenning의 책 Embedded C용 개발 테스트 기반 책을 확인해 보세요.이 문서에서 그는 두 가지 TDD 프레임워크(UnityCpp)를 사용하는 방법에 대한 의미 있는 예를 제공합니다.Utest)를 사용하여 C를 테스트합니다.

"Test-Driven Development for Embedded C" book cover

다른 사람들이 지적한 바와 같이 TDD는 그 자체로 OOP와 연결되어 있지 않습니다.그러나 실제로는 모듈화와 연결되어 있습니다.각 단위 테스트는 프로그램의 매우 제한된 부분만 테스트해야 하므로 전역 상태가 많은 경우 프로그램을 단위 테스트하는 것은 거의 불가능합니다.

C로 모듈형 프로그램을 작성하는 것은 분명히 가능하지만, 다른 기술이 필요합니다.TDD는 모듈형 프로그램을 작성하도록 강요할 수도 있지만, 모듈형 C-프로그램을 작성하는 데 익숙하지 않은 경우 개발이 중단될 수도 있습니다.

TDD는 위키백과에서 다음과 같이 정의합니다.

TDD(Test-driven development)는 매우 짧은 개발 주기의 반복에 의존하는 소프트웨어 개발 기법입니다. 먼저 개발자가 원하는 개선 또는 새로운 기능을 정의하는 실패한 자동화 테스트 케이스를 작성한 다음 해당 테스트를 통과할 코드를 생성하고 최종적으로 새로운 코드를 허용 가능한 표준으로 리팩터합니다.

여기에는 OOP에 특정하게 만드는 것이 전혀 없습니다.반대로 TDD는 모든 종류의 프로그래밍에 상당히 적합합니다.특히 C를 포함한 절차 언어와 함께 사용하는 것은 분명히 가능합니다.

c의 단위 테스트 프레임워크가 있습니다."c unit test"를 검색하면 몇 가지가 나옵니다.저는 TDD로 C로 여러 프로젝트를 작성했는데 TDD는 OO언어만을 위한 것은 아닙니다.C에서 TDD를 하는 것이 더 어렵더라도.

TDD는 코드를 작성하기 전에(테스트 퍼스트) 유닛 테스트를 사용하고 디자인을 실행하는 것을 의미합니다. 물론 이는 스위트 C이지만 두 가지 문제에 직면할 것이라고 생각합니다(시도하지 않았습니다).

  • 큰 프로젝트인 경우 컴파일 속도가 느리고 TDD는 개발 및 코드 실행 시 아기 단계가 필요하며 C/C++는 C#, 자바 등에 비해 컴파일 속도가 훨씬 느립니다.물론 동적 언어보다 느립니다 :).

  • 격리된 상태에서 테스트, 하위 시스템을 모킹하여 각 시스템을 격리된 상태에서 테스트합니다(아직 구현되지 않은 시스템이 있지만 종속성이 있거나 테스트가 FileSystem, Sockets 등과 같은 외부 효과 요인에 감염되는 것을 원하지 않기 때문입니다). 물론 이는 애플리케이션의 규모에도 달려 있습니다.그리고 당신의 디자인, 나는 그것을 위한 전략이 무엇인지 모른다, 나는 함수 포인터를 통과시키는 것이 (그러므로 당신은 가짜 함수에 대한 포인터를 테스트 중인 함수에 통과시키는 것) 방법이 될 것이라고 생각하지만, 당신은 그것을 연구해야 합니다.

감사해요.

언급URL : https://stackoverflow.com/questions/2574139/c-programming-and-tdd