CLI 개발

PHPz
PHPz원래의
2024-08-13 06:48:11768검색

Developing CLIs

CLI 기능 구축은 종종 다음과 같이 요약됩니다.

  • 새로운 API 엔드포인트를 출시하세요.
  • API 변경이 필요한 새로운 CLI 작업을 구축하세요.
  • 방금 출시한 API에 실수가 있었다는 사실을 깨달으세요.
  • 향후에 더 많은 문제가 발생하지 않도록 이 기능에 대한 API를 수정해 보세요.
  • CLI에서 달성하려고 했던 것이 무엇인지 기억하고 실제로 달성해 보세요.  
  • GOTO: 실수가 있었음을 깨닫습니다.

각 단계에는 이전 단계가 필요하며 폭포수 프로젝트 관리를 재창조했습니다. 당신은 기능적으로 절뚝거릴 때까지 실수를 우아하게 덮어두려고 노력하는 고통에 지쳤지만, 예외가 되기 훨씬 전에 몸을 숙였습니다. 그리고 임시 "수정" 및 사마귀의 결과 클러스터를 유지 관리하는 작업을 시작하지 마십시오.

거기 가봤고, 그랬어요. 우리는 폭포식 접근 방식을 넘어서야 한다는 것을 알고 있었습니다.

다음은 우리가 거기에 도달한 방법과 그 과정에서 도움이 된 몇 가지 도구에 대한 이야기입니다.

대략적인 시작을 시작하다

우리는 기능을 이해할 때까지 저렴하고 빠른 반복을 원했고, 그런 다음에는 비용이 많이 드는 구현과 장기적인 지원을 약속했습니다. 소규모 팀으로서 저는 이 프로세스를 처음부터 끝까지 수행하는 경우가 많았고, 차례로 각 부분에 집중하고 싶었습니다. 우리는 그것을 만들 수 있을 만큼 자신감이 생길 때까지 구현 부분을 가짜로 만들고 싶었습니다.

프로세스로 돌아가서 기능 제안부터 시작됩니다. 우리는 추상적인 것에서 벗어나고 싶었지만, 그것이 설익은 구현을 의미한다면 그렇지 않았습니다. Github에서 설명하는 Google Docs CLI 스케치 접근 방식에서 영감을 받아 "스케치"로 위조했습니다.

안타깝게도 정적 스케치는 우리가 원하는 피드백을 제대로 제공하지 못했습니다. 우리의 CLI는 시간이 지남에 따라 출력을 변경합니다. 그림이라기보다는 애니메이션에 가깝습니다. 더 높은 충실도를 달성하기 위해 저는 기본 입력을 받고 적절한 미리 준비된 답변을 인쇄하여 응답하는 작은 Ruby 프로그램을 작성했습니다.

그 이후로 우리는 애니메이션 CLI 출력을 캡처하는 더 나은 방법을 찾았지만 이를 설명하려면 약간의 우회가 필요합니다.

테스트도 하시나요?

CLI를 구체화하기 시작하면서 우리는 극단적인 사례를 테스트하고 회귀를 감지하고 싶었습니다. 아이디어를 찾기 위해 공개 코브라/버블티 기반 CLI를 조사한 결과 실망스러울 정도로 테스트가 거의 없었습니다. 그러던 중 우연히 우리의 시작점이 된 참의 티테스트를 발견하게 되었습니다.

Teatest는 골든 테스트에 중점을 두고 알려진 양호한 출력을 캡처한 다음 향후 출력이 계속해서 일치한다고 주장합니다. 애니메이션 CLI 출력의 충실도 높은 캡처로 다시 한 번 돌아왔습니다. Teatest는 플립북과 같은 프레임 기반 솔루션에 대한 훌륭한 아이디어를 제공했으며 이를 기반으로 했습니다.

으아악

이 간단한 예는 기본 인증 명령에 대한 골든 출력이 어떤 모습일 수 있는지 보여줍니다. 수평선은 활성 모델을 나타내는 레이블과 함께 프레임을 나타냅니다. 라인이 추가, 제거 또는 교체되더라도 출력의 충실도가 높은 캡처를 얻을 수 있습니다.

우리는 테스트 스위트의 플래그를 사용하여 파일을 골든 출력으로 업데이트합니다. 그렇지 않으면 출력이 파일과 일치하지 않으면 테스트가 실패합니다. 이를 통해 출력 변경 사항을 계속 인식하고 출력의 모양과 변경 여부를 이해할 수 있으므로 PR 검토가 용이해집니다. 저희는 너무 좋아서 애니메이션과 스타일 아이디어를 모두 담을 수 있도록 스케치 프로그램을 Github 스타일 Google Docs의 골든 스타일 출력으로 교체할 계획입니다.

한때와 미래의 스케치를 손에 쥐고 새로운 API 엔드포인트 시작으로 돌아가겠습니다.

API와 CLI를 함께 설계

우리는 API와 CLI를 동시에 작업합니다. 왜냐하면 API와 CLI에 대한 최고의 디자인은 긴밀한 통합에서 나오기 때문입니다. 우리는 더 저렴한 환경에서 설계를 반복하고 요구 사항이 확고해질 때까지 구현을 기다리면서 폭포의 위험을 피하면서 이를 수행할 수 있습니다. API의 경우 이는 OpenAPI를 사용한 스케치를 의미합니다.

으아악

이 간단한 예는 기본 인증 명령에 대한 스키마의 모양을 보여줍니다. 우리는 이러한 파일 작업을 단순화하기 위해 스펙트럼 린터를 사용합니다.

스케치를 손에 쥐고 CLI를 구현하는 동안 프리즘을 모의 API 서버로 사용합니다. 필연적으로 실수가 있었다는 것을 깨닫게 되면 사양을 조정하고 CLI 반복으로 돌아갈 수 있습니다. 이 높은 수준에서 작업하면 API와 CLI를 함께 발전시키고 더 나은 지식을 얻을 때까지 비용이 많이 드는 구현을 연기할 수 있습니다.

API 구현

우리는 또한 위원회를 사용하여 구현하는 동안 정직성을 유지하기 위해 OpenAPI 사양을 활용합니다. Assert_schema_conform은 정렬을 테스트하고 미들웨어는 실시간 불일치를 알려줍니다. 이는 회귀로부터 우리를 보호하는 동시에 빨간색 녹색 구현을 허용하기 위해 결합됩니다.

使用模拟和代理进行测试

为了解决这个问题,我们的测试套件使用标志在模拟或代理模式下运行 prism。通过使用标志,我们可以专注于只编写一种测试,尽管这确实意味着我们在一种模式或另一种模式下跳过一些测试。我们在 Windows 和 macOS 上使用模拟测试来测试它们的速度,而我们的完整堆栈不在 CI 中运行。我们的代理测试让我们只需添加一个标志即可对整个堆栈运行测试,从而在我们认为有必要时轻松运行端到端测试。

将所有内容整合在一起

草图和规格帮助我们迭代抽象,而不必陷入实现的困境。然后模拟和代理帮助我们确保实现与草图相匹配。通过继续迭代我们的流程,每个功能都会减少痛苦,我们在构建将于本月晚些时候交付的团队体验时对此深表赞赏。

我们将不断迭代我们的流程,我希望您能从中学到一些东西,我也很乐意向您学习。你尝试过什么,哪些地方值得你骄傲,哪些地方仍然令人沮丧?

위 내용은 CLI 개발의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.