Youngminah/TIL

CI/CD

Closed this issue · 0 comments

Build vs Archive

  • Build: 소스코드가 프로젝트를 실행할 수 있도록 하는 것
  • Archive(= 패키지): 결과물은 .ipa파일이며 앱과 resource들을 포함하는 통합 패키지


CI ( Continuous Integration)

  • (빌드 테스트를 실시하는 프로세스) 통합 프로세스를 지속적으로 실시
  • 지속적 통합
  • 코드레벨 테스트 자동화


CD (Continuous Deploy 혹은 Continuous Delivery)

  • 프로덕션 환경으로 배포작업을 자동화하는것
  • 앱에 적용한 변경사항이 버그 테스트를 거쳐 레포에 자동으로 업로드되고 언제든 실시간으로 배포가능
  • 변경사항의 배포에 대한 비용 시간 위험을 줄일수 있다
  • Continuous Delivery: 프로덕션은 수동 배포
  • Continuous Deployment: 프로덕션까지 자동 배포
  • image
  • image


Fastlane

  • Fastlane은 Android 및 iOS배포를 단순화하기 위한 오픈소스 플랫폼
  • fastlane을 사용하면 개발 및 릴리즈 워크 플로우의 모든 측면을 "자동화" 할 수 있다


Test Pyramid

image
image

  • User interface Test : UI관련 테스트, 시간이 오래걸림
  • Integration Test : Unit 테스트를 합쳐서 테스트 하는 것
  • Unit Test : 함수 하나하나 테스트 가능
    • 유닛 테스트의 주요 목적은 애플리케이션이 설계된 대로 동작하는지를 결정하는 것이며, 화이트박스 테스팅 기법이 보통 사용
    • 유닛 테스트의 가장 큰 이점 중 하나는, 프로그램의 작은 부분이 바뀔 때마다
    • 전체 테스팅 과정을 다시 수행하여 문제가 발생했을 경우 빠르게 이슈를 해결할 수 있다는 점


알아두기

  • testExample : 함수이름은 바꿀수 있다. test는 붙여야함
  • setUpWithError : 초기화 셋업 함수
  • tearDownWithError: 테스트 끝났을때
  • testLaunchPerformance: 성능관련 지금은 지워도 무방.


UI Test 해보기

  • 2015년에 나왔음.
  • XCUIApplication
  • XCUIElement
  • XCUIElementQuery
  • 세 가지 새로운 클래스 생김
  • Uber에서 나온 Snapshot 참고 (픽셀이 조금만 틀어져도 테스트가 실패했다고 뜸)
    • 이미지 기반으로 테스트가 진행됨.
    • 조금틀어지는건 성공으로 두긴함 5%정도?

예제 1

Simulator.Screen.Recording.-.iPhone.11.-.2022-02-28.at.10.40.13.mp4

image

  • image
  • 여러번 테스트를 계속함. 그에대한 정보도 계속 프린트됨
  • image
  • 완료된모습
  • 테스트 함수에 대한 이름은 구체적이고 길게 작성 (한글로 작성하기도 한다)

예제 2

Simulator.Screen.Recording.-.iPhone.11.-.2022-02-28.at.11.01.35.mp4
  • image
  • image
  • identifier설정해주고 겹치지 않게 해주기!


Unit Test 해보기

  • image
  • WWDC에서 소개된 완전 기본예제
  • Input -> 가공 -> Output인 형태
  • WWDC2017에서 Testable app code, Scalable test code 한 코드를 짜라고 가이드라인이 나옴
  • Testable app code: 의존성 바깥에서 주입하기 등등
  • Scalable test code: 확장성을 고려하여 테스트 코드를 짯는지
  • 테스트 코드는 짜는것이 중요한것이아니라 위에서 2가지를 가이드라인으로 구현할 수 있어야함
  • 그럴라면 테스트 코드를 짜기전에 코드를 테스터블하게 구현해두는 것이 어려움.
  • Unit Test Code를 잘 짜는 것은 그래서 어렵고, TDD를 이용한 개발은 오래걸리고 더욱 어렵 ( <-현업에서도 적용을 하기 어려운 이유 )
  • Test Code에서 100% 성공이 떠도 bug가 없는것 아님 모든 케이스를 테스트 할순 없다
  • Quick, Nimble같은 라이브러리를 쓰면 네이밍 문제, 역할, 실패 워닝 등등 깔끔해짐


import XCTest
@testable import CICDTest   //test할때 internal이라하더라도 접근가능.
  • import하는 이유 public으로 선언 안해도됨


Code Coverage

  • 얼만큼 코드를 테스트하고 있는지 나타내줌
  • Product -> Scheme -> Edit Scheme -> Test -> Gather Coverage

참고자료