귀하의 팀은 메이저 버전 코드 배포를 위해 어떤 표준을 시행합니까?

StackOverflow https://stackoverflow.com/questions/700833

  •  22-08-2019
  •  | 
  •  

문제

주요 릴리스에서 코드가 출시(또는 배포)되기 전에 다른 팀에서는 어떤 종류의 표준이 마련되어 있는지 궁금합니다.

나는 각각에 대한 구체적인 답변을 찾고 있지 않지만 여기에 내가 아이디어를 얻으려는 아이디어가 있습니다.

  • 서버 기반 앱의 경우 모니터링이 제대로 이루어지고 있는지 확인합니까?어느 정도까지...핑에 응답하고, 특정 순간에 모든 종속성에 도달할 수 있으며, 앱이 실제로 서비스하는 로직이 건전하다는 것(예: 2+2를 계산하는 서비스는 실제로 "4를 반환함) ")
  • 코드가 출시되기 전에 자동화된 빌드 스크립트가 필요합니까?즉, 모든 개발자가 새 상자로 가서 소스 제어에서 무언가를 꺼내 개발을 시작할 수 있다는 뜻입니까?물론 OS 및 IDE와 같은 것이 고려됩니다.
  • 서버 기반 앱의 자동화된 배포 스크립트는 어떻습니까?
  • 프로젝트를 "완료"하려면 어떤 수준의 문서가 필요합니까?
  • 서버 기반인 경우 시스템의 모든 주요 구성 요소에 대한 본격적인 백업 계획이 있는지 확인하고 계십니까?
  • 코드 품질 표준을 시행합니까?.NET용 StyleCop 또는 순환적 복잡성 평가를 생각해 보세요.
  • 단위 테스트?통합 테스트?성능 부하 테스트?
  • 애플리케이션의 오류 로깅을 처리하는 방법에 대한 표준이 있습니까?오류 알림은 어떻습니까?

다시 말하지만, 반드시 위의 내용에 대한 답을 한 줄씩 나열한 펀치리스트를 찾는 것은 아닙니다.즉, 팀에서 공식적으로 "완료"된 것으로 간주되기 전에 코드 릴리스가 완료되어야 하는 비코딩 항목은 무엇입니까?

도움이 되었습니까?

해결책

최소 :

  1. 단위 테스트가 작동합니다
  2. 통합 테스트가 작동합니다
  3. 테스트 단계 OK에 배포됩니다
  4. 수동 짧은 검사 테스트 단계

더 나은:

  1. 단위 테스트가 작동합니다
  2. 체크 스타일 좋아요
  3. 통합 테스트가 작동합니다
  4. 메트릭이 좋아요 JMeter 테스트 범위가 통과되었습니다
  5. 테스트 단계 OK에 배포됩니다
  6. 테스트 단계에서 일부 수동 테스트

마지막으로 생산 단계에 배포됩니다

모든 단위 및 통합 테스트는 다음과 같은 연속 통합 서버에서 가장 잘 작동합니다. 크루즈 컨트롤 수행 개미 또는 Maven. 웹 서비스를 개발할 때 테스트 SOAPUI 잘 작동합니다.

사용 된 데이터베이스가 사용되면 자동 업그레이드가 완료됩니다 ( Liquibase 예를 들어) 배포 전. 외부 서비스를 사용하는 경우 URL이 정상인지 확인하려면 ADDIDIONAL CONFIGURATION 테스트가 필요합니다 (응용 프로그램, 데이터베이스 연결, WSDL GET, ...). WebPPS를 개발할 때 HTML 확인 일부 페이지에서는 유용합니다. 레이아웃의 수동 점검 (사용 브라우저 샷 예를 들어) 유용합니다.

(Java 개발을위한 모든 예제 링크)

그리고 마지막으로 (적어도) : 모든 수락 테스트가 여전히 통과되고 있습니까? 제품이 소유자가 원하는 것입니까? 더 나아 가기 전에 테스트 시스템에서 그와 라이브 리뷰를하십시오!

다른 팁

나는 주로 웹 개발을하고 있으므로 내 항목은 당신과 다를 수 있습니다. 내 머리 꼭대기에서 ...

  • 모든 웹 서비스가 최신 상태인지 확인하십시오
  • 모든 데이터베이스 스크립트/변경/마이그레이션이 이미 제작 서버에 배포되었는지 확인
  • 최소 JS 및 CSS 파일.
  • 모든 단위/기능/통합/셀레늄 테스트가 통과되고 있는지 확인하십시오 (우리는 개발 중에 95%+ 테스트 범위를 목표로하므로 일반적으로 문제를 결정하는 데 매우 정확합니다).

더 많은 것이 있습니다. 나는 있다는 것을 알고 있지만 지금은 아무것도 생각할 수 없습니다.

각각의 프로젝트는 다르지만, 법칙은 코드가 야생으로 나가기 전에 내가 시도한 핵심 일들입니다.

특별한 순서없이 :

1) 사용자가 나중에 찾을 수있는 버전 식별 버전 식별은이 릴리스에 고유해야합니다. (일반적으로 분산 가능, 라이브러리 및 실행 파일 및 "정보"대화 상자에서 볼 수있는 사용자와 관련된 "버전 번호"입니다. 펌웨어에서 잘 알려진 레지스터 또는 오프셋에서 숫자가 될 수 있습니다)

2) 릴리스를 생성하는 데 사용되는 정확한 코드의 스냅 샷. (SCM 시스템에서 릴리스의 레이블 또는 분기가 이에 적합합니다)

3) 소스를 재현하는 데 필요한 모든 도구는 기록되고 보관되어야합니다 (2 단계의 출처는이없이 제한적으로 사용됩니다).

4) 실제 릴리스의 아카이브 (7 년 안에 도구를 구축 할 수 없다는 것을 알고있는 정확한 설치자의 사본. 그러나 최소한 조사 목적으로 소스 코드와 설치 가능한 설치가 가능합니다. ).

5)이 릴리스 버전과 이전 ONE 릴리스 노트 사이의 문서화 된 변경 세트 (나는 모든 릴리스 변경을 사용자가 한 곳에서 사용할 수 있도록 목록에 추가 스타일을 사용하고 싶습니다).

6) 후보 릴리스 테스트주기 완료. 배포 가능한 생성 된로드 및 테스트를 사용하여 전체/베스트 테스트 계획을 사용하여 핵심 기능이 작동하는지 확인하고 모든 새로운 기능이 존재하고 의도 한대로 작동합니다.

7) 결함 추적에 따르면 모든 미결제 항목은 a) 고정 된 b) 결함 c) 이연으로 표시됩니다.

도메인이나 개발 스타일에 따라 다른 많은 단계에 뿌릴 수 있지만 대부분의 소프트웨어는 "각각의 릴리스 단계를 수행해야합니다. ymmv.

성을 습격하는 즐거움을 누리십시오.

  • 코드 스타일 (자동화)
  • 자동 테스트 (단위 및 통합 테스트)
  • 수동 테스트 (테스트 및 베타 단계 포함)
  • 화이트 박스 침투 테스트 도구 (자동화)
  • 블랙 박스 침투 테스트 도구 (자동화)
  • 롤아웃 전 테스트/베타 단계에서 수동 예외/로깅 모니터링
  • 언제든지 이전 버전으로 되돌릴 수 있습니다
  • 코드 검토 및 '불법 checkins'

웹 / 내부 앱의 경우 다른 제안 외에 한 가지.

더 많은 서버가 필요한 소프트웨어를 제공하지 않도록 OPS/배포 팀을 참여시켜야합니다.

  • 체크리스트 검토 : 버전에 대한 계획된 모든 새로운 기능, 변경 요청 및 버그 수정이 완료되었는지 확인하십시오.
  • 빌드 (빌드 머신)는 릴리스 모드에서 경고 나 오류없이 컴파일합니다.
  • 모든 자동화 된 장치 테스트는 오류없이 실행됩니다.
  • 모든 메시지와 이미지는 제품 팀의 승인을 받았습니다.
  • 성능 점검은 이전 버전보다 최악이 아닙니다.
  • 전체 (수동) 테스트 계획은 오류없이 테스트 팀이 확인했습니다.
    • 응용 프로그램은 다양한 가능한 시나리오 (다른 OS, 데이터베이스 엔진, 구성 및 타사 응용 프로그램)에서 테스트됩니다.
    • 응용 프로그램의 모든 특징은 테스트됩니다. 기능의 변화가 관련이없는 다른 사람이 무관심한 다른 기능을 깨뜨렸다는 것을 여러 번 우리에게 일어 났으므로, 우리는 그것을 최소화해야합니다.
    • 설정 또는 배포는 모든 시나리오에서도 작동합니다.
    • 설정은 이전 버전을 업그레이드 할 수 있습니다

우리는 최근에 주요 릴리스를 수행했기 때문에 이 릴리스가 여전히 내 마음 속에 생생하게 남아 있습니다.우리는 바이너리 실행 파일을 릴리스하는 GUI를 사용하여 Windows 애플리케이션을 만들기 때문에 내 목록은 필연적으로 웹 전용 릴리스의 목록과 상당히 다를 것입니다.

  1. 릴리스 후보는 테스트 팀으로 이동합니다.가지고 놀려면 적어도 며칠이 필요합니다.우리가 주목할만한 버그를 발견하면 릴리스가 중단됩니다.이는 테스트 팀이 있다고 가정합니다.빌드 날짜로부터 최소 1주일이 경과한 경우에만 릴리스 후보를 삭제합니다.

  2. 모든 자동화된 테스트는 작동하고 통과해야 합니다.자동화된 테스트는 라이브 테스터를 보완하는 것으로 간주됩니다.

  3. "차단제"로 표시된 버그는 최종 빌드에서 해결되어야 합니다.

  4. 홍보 자료가 준비되어 있어야 합니다(우리의 경우 웹페이지 업데이트 및 이메일 뉴스레터).리셀러는 자료를 준비할 수 있도록 몇 주 전에 릴리스가 예정되어 있다는 알림을 받습니다.이것은 대부분 프로그래머의 관심사는 아니지만 마케팅 주장의 정확성을 확인합니다.

  5. 우리가 사용하는 복사 방지 기능을 반영하려면 라이센스를 업데이트해야 합니다.베타 버전과 릴리스 버전은 서로 다른 라이센스 모델을 사용하므로 이러한 변경에는 프로그래밍 노력이 필요합니다.

  6. 설치 프로그램과 라이센스 계약을 업데이트해야 합니다.베타 버전에는 설치 프로그램이 있으므로 일반적으로 텍스트 변경일 뿐이지만 실제로 설치 스크립트를 업데이트하는 것은 여전히 ​​프로그래머의 몫입니다.

  7. 베타 버전에 대한 모든 참조는 애플리케이션 자체에서 제거되어야 합니다.우리는 당황스럽게도 이 중 몇 가지를 놓쳤습니다.

  8. 도움말 파일과 매뉴얼은 릴리스 패키지의 일부였기 때문에 완전히 최신 상태로 유지하고 교정해야 했습니다.

  9. 제때에 수정할 수 없는 버그가 있는 경우 최소한 피해를 완화하려고 노력합니다. 예를 들어 이런 버그가 발생했음을 감지하고 사과하는 오류 메시지와 함께 작업을 중단합니다.이는 인지된 제품 안정성에 크게 기여합니다.

단연코 주요 릴리스의 어려움은 프로그래밍 문제가 아니라 관리/마케팅 문제였습니다.설치 프로그램 지원, 기능 목록을 교정하여 말도 안되는 내용이 없는지 확인, 매뉴얼의 기술 섹션 교정, 라이센스 업데이트 등 이러한 작업 중 많은 부분에는 프로그래머의 주의가 필요했습니다.주요 기술적 차이점은 버그 수정에서 버그 완화로의 전환이었습니다.

  1. 눈에 보이는 버그가 없습니까? 좋아요
  2. 단위 테스트 작업? OK (일부 무시) HA 잘 Ok
  3. 확실히 설정하십시오. 좋아요
  4. 오류 로깅? 코스! :-) 우리는 이것을 필요로합니다! 버그를 고치려면!
  5. 모두 cruisecontrol.net에 좋은.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top