대형 소프트웨어 재 구성 에 대한 생각
현재 이 프로젝트 를 하 는 것 도 1 년 반 이 다 되 어 갑 니 다. 돌 이 켜 보면 전년 도 에는 재 구성 을 하고 있 었 고 그 다음 해 에는 새로운 제품 을 만 들 고 있 었 습 니 다.재 구성 할 때 배 운 것들 을 조금 정리 해 보 자.
재 구성 은 서로 다른 목표 일 수 있다. 어떤 사람들 은 코드 를 더욱 합 리 적 이 고 아름 답 게 재 구성 하기 위해 서 이다.다른 사람들 은 특정한 기능 을 실현 하기 위해 서 일 수도 있다.재 구성 도 정도 가 다르다. 어떤 것 은 함수, 클래스 단계 에서 만 수정 을 할 수 있 고 어떤 것 은 전체적인 구조, 모듈 에 대해 변동 을 해 야 한다.또한 재 구성 에 대한 투입 도 크게 다르다. 어떤 것 은 나 쁜 코드 나 디자인 을 만 났 을 때 만 수정 하고 어떤 것 은 한 팀 을 구성 하 는 데 많은 시간 을 들 여 재 구성 을 한다.
기본 개념 에 대한 정확 한 정 의 는 모든 토론 의 기초 이다. 여기 서 토론 하 는 재 구성 은 '특정한 기능 을 실현 하기 위해 전문 적 으로 진행 하 는 대규모 코드 변경' 이다.
구조 설계, 얼마나 멀리 볼 수 있 습 니까?
간단하게 말하자면 우리 가 해 야 할 일 은 하나의 소프트웨어 의 UI 코드 와 핵심 기능 을 철저히 분리 한 다음 에 핵심 부분 을 하나의 단독 제품 으로 만 드 는 것 이다.물론 이런 표현 층 과 업무 층 이 분리 되 어야 한 다 는 이 치 는 누구나 다 알 고 있 습 니 다. 당초 의 구조 에 도 이런 개념 이 들 어 갔 지만 엄격 한 요구 가 없 었 기 때문에 핵심 부분 을 따로 꺼 내지 않 았 습 니 다. 최근 10 년 동안 의 개발 을 통 해 코드 중의 핵 심 층 이 UI 에 대한 의존 이 상당히 심각 하고 정태 적 이 며 소스 코드 컴 파일 에 대한 의존 도 있 습 니 다.동적, 운행 시 의존 도 있다.이 럴 때 핵심 기능 을 추출 하 는 것 은 상당히 어렵 고 시간 이 걸 리 는 것 임 에 틀림없다.현재 인터넷 의 일부 오픈 소스 CAD 소프트웨어 를 보면 처음부터 명확 한 코어 - UI 구분 이 있 고 핵심 모드 나 UI 모드 에서 실행 할 수 있 는 경우 가 많다.예 를 들 어 FreeCAD.만약 에 그 당시 의 구조 사가 이 단 계 를 생각 할 수 있다 면 처음부터 명확 하 게 구분 할 수 있다. 분명 한 것 은 1. 후기 에 그렇게 많은 인력 과 물력 을 쓸 필요 가 없다 는 것 이다.2. 그 품질, 디자인 이 많이 좋아 질 것 입 니 다.
물론 이것 도 반드시 원 견 이 부족 한 것 은 아니다. 일단 상업 이익 과 결합 해서 고려 하면 많은 좋 은 디자인 은 포기 할 수 밖 에 없다.예 를 들 어, 당신 의 제품 은 윈도 사용 자 를 대상 으로 하 는 것 이 고, 프로젝트 팀 은 모두 윈도 프로그래머 입 니 다. - 더 빨리 제품 을 출시 하기 위해 서 는 크로스 플랫폼 을 고려 하지 않 겠 죠? - 그런데 10 년 후에 맏형 들 이 맥 에 진출 하기 로 결 정 했 습 니 다 ~ ~ 그 러 니까 이것 도 최선 을 다 하고 차 일 드 를 들 으 세 요.
작업 모드
반드시 단독 branch 를 열 어야 한다.이렇게 하면 너 는 문 을 닫 고 하고 싶 은 대로 할 수 있어 서 다른 팀 에 영향 을 주지 않 을 것 이다.여기 서 하고 싶 은 대로 하 는 것 은:
물론 이런 자 유 는 많은 경우 에 제창 되 지 않 지만 여기 서 는 효율 을 크게 높 였 다.
또한 재 구축 의 변 동량 이 매우 크기 때문에 main 또는 trunk branck 와 자주 sync 를 하고 1 차 변동 을 받 아들 일 수 있 는 범위 내 에서 제어 해 야 한다.
어떻게 품질 을 보증 합 니까?
자동화 테스트 를 뛰 지 않 고 check - in 을 할 수 있다 면 품질 을 어떻게 보장 할 것 인가?
우선, 당신 은 반드시 자동화 테스트 가 있어 야 합 니 다. - 코드 를 바탕 으로 하 는 유닛 테스트 도 좋 고, script 을 바탕 으로 하 는 기능 테스트 도 좋 습 니 다. 자동화 되 고, 도달 율 이 충분 하 다 면 ok 입 니 다. - 재 구성, 특히 대규모 재 구성 을 할 때 자동화 테스트 가 없 으 면 그야말로 죽음 을 자초 합 니 다.
우 리 는 자신의 branch 에서 일 하기 때문에 main / trunk 로 돌아 갈 때 regression 이 없 으 면 됩 니 다. 중간 에 어떤 상태 인지 우 리 는 요구 가 높 지 않 습 니 다.일반적인 방법 은:
이런 방법 은 효율 을 크게 향상 시 켰 다. - 모든 케이스 를 다 뛰 려 면 몇 십 대의 서버 가 3 일 동안 함께 뛰 어야 한 다 는 것 을 알 아야 한다.
코드 관리 방법
재 구성 은 많은 파일 의 이동 과 분리 와 관련 되 므 로 두 가지 부분 에 주의해 야 합 니 다.
재 구성 방법
근무 기간 에 읽 은 적 이 있 습 니 다 《 재 구성 - 기 존 코드 의 디자인 개선 》. 위 에서 좋 은 디자인 개선 방법 과 절 차 를 많이 말 했 지만 거의 사용 되 지 않 았 습 니 다.디자인 에 관 해서 우 리 는 어떤 상황 을 어떻게 수정 하 는 지 에 대해 이미 연 구 를 하고 방안 을 세 웠 기 때문에 그 절차 들 은 약간 수 다스 러 워 서 적용 되 지 않 는 다.Visual Assist 재 구성 모듈 을 제공 하여 일반 규모 의 코드 에 사용 하 는 것 은 괜 찮 지만 solution 이 많은 코드 에 대해 서 는 어 쩔 수 없습니다.게다가 이것 은 소스 코드 의 재 구성 과 관련 된 것 일 뿐 우 리 는 공사 / DLL 의 재 구성 도 있다.
우리 가 채택 한 방법 은 서로 다른 상황 에 맞추어 perl 스 크 립 트 를 써 서 일부 임 무 를 자동화 하 는 것 이다.간단 한 예 를 들 어 제 가 방법 이름 을 수정 하면 스 크 립 트 는 모든 코드 를 검색 하고 수정 해 야 할 파일 을 자동 으로 체크 아웃 하 며 새 이름 을 바 꿉 니 다.perforce 호출, VS 호출, 코드, 프로젝트 파일 수정 등 을 자동화 하기 위해 perl 스 크 립 트 를 많이 썼 던 기억 이 납 니 다.
세부 사항
pInterface->UpdateUI();
물론 인 터 페 이 스 를 사용 하 는 다른 방식 도 있 지만 결국은 분리 실현 을 위 한 것 이다.이런 대형 소프트웨어 의 재 구성 을 하면 서 저 에 게 많은 것 을 배 웠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.