문제

우리는 웹에서 정보를 채굴 할 수있는 도구를 작성하고 있습니다. 우리는 다음과 같은 몇 가지 조각을 가지고 있습니다

  • 웹에서 크롤링 데이터
  • 템플릿 및 비즈니스 규칙을 기반으로 정보를 추출합니다
  • 구문 분석은 데이터베이스로 결과를 얻습니다
  • 정규화 및 필터링 규칙을 적용하십시오
  • 등 등

문제는 문제를 해결하고 각 단계에서 일어나는 일에 대한 좋은 "높은 수준의 그림"을 갖는 것입니다.

복잡한 프로세스를 이해하고 관리하는 데 도움이 된 기술은 무엇입니까?

  • Windows Workflow Foundation과 같은 워크 플로 도구를 사용하십시오
  • 별도의 기능을 명령 줄 도구로 캡슐화하고 스크립팅 도구를 사용하여 서로 연결하십시오.
  • 도메인 별 언어 (DSL)를 작성하여 더 높은 수준에서 어떤 순서가 발생 해야하는지 지정하십시오.

많은 상호 작용 구성 요소가있는 시스템을 처리하는 방법이 궁금합니다. 우리는 소스 코드를 통해 추적하는 것보다 시스템이 더 높은 수준에서 어떻게 작동하는지 문서화/이해하고 싶습니다.

도움이 되었습니까?

해결책

코드는 각 단계에서 무슨 일이 일어나는지 말합니다. DSL을 사용하는 것은 혜택이지만, 자신의 스크립팅 언어 및/또는 컴파일러를 작성하는 데 드는 비용이 발생하지 않을 수도 있습니다.

더 높은 수준의 문서에는 각 단계에서 발생하는 일에 대한 세부 사항이 포함되어서는 안됩니다. 단계에 대한 개요와 이들이 어떻게 관련되는지를 제공해야합니다.

좋은 팁 :

  • 데이터베이스 스키마 관계를 시각화하십시오.
  • 프로세스 개요에 Visio 또는 기타 도구 (사용하지 않은 것과 같은)를 사용하십시오 (IMHO 프로젝트 사양에 속함).
  • 코드가 올바르게 구조화 / 구획화되어 있는지 확인하십시오.
  • 일종의 프로젝트 사양 (또는 시스템이 추상 수준에서 수행하는 작업을 설명하는 다른 "일반적인"문서가 있는지 확인하십시오.

실제로 사용하지 않는 한 명령 줄 도구를 구축하는 것이 좋습니다. 사용하지 않는 도구를 유지 관리 할 필요가 없습니다. (그것은 유용 할 수 없다고 말하는 것과 같지 않지만, 대부분의 일은 외부 프로세스를 실행하는 대신 라이브러리에 속하는 것처럼 들립니다).

다른 팁

나는 AT & T의 유명한 것을 사용합니다 GraphViz, 그것의 단순하고 잘 작동합니다. 동일한 라이브러리 Doxygen도 사용합니다.

또한 약간의 노력을 기울이면 아주 멋진 그래프를 얻을 수 있습니다.

언급하는 것을 잊어 버렸습니다. 내가 사용하는 방식은 다음과 같습니다 (GraphViz는 GraphViz 스크립트를 구문 분석하기 때문에 대체 시스템을 사용하여 GraphViz 형식의 로그 이벤트를 사용하여 로그 파일을 구문 분석하고 멋진 그래프를 얻습니다.

나는 a를 찾았다 종속성 구조 매트릭스 응용 프로그램의 구조를 분석하는 유용한 방법. 같은 도구 Lattix 도움이 될 수 있습니다.

플랫폼과 툴체인에 따라 응용 프로그램의 하위 시스템 또는 구성 요소 간의 관계를 문서화하는 데 도움이되는 유용한 정적 분석 패키지가 많이 있습니다. .NET 플랫폼의 경우 ndepend 좋은 예입니다. 다른 플랫폼에는 다른 많은 것이 있습니다.

시스템을 구축하기 전에 좋은 디자인이나 모델을 갖는 것은 애플리케이션이 어떻게 구성되어야하는지 팀을 이해하는 가장 좋은 방법이지만 내가 언급 한 것과 같은 도구는 건축 규칙을 시행하는 데 도움이 될 수 있으며 종종 단지 디자인에 대한 통찰력을 줄 수 있습니다. 코드를 통해 트롤링 할 수는 없습니다.

나는 당신이 언급 한 도구를 사용하지 않을 것입니다.

높은 수준의 다이어그램을 그려야합니다 (나는 연필과 종이를 좋아합니다).

나는 다른 모듈이 다른 일을하는 시스템을 디자인 할 것입니다. 모든 모듈의 많은 인스턴스가 병렬로 실행될 수 있도록 이것을 설계하는 것이 가치가 있습니다.

나는 여러 대기열을 사용하는 것에 대해 생각할 것입니다

  • 크롤링하는 URL
  • 웹에서 페이지를 크롤링했습니다
  • 템플릿 및 비즈니스 규칙을 기반으로 추출 된 정보
  • 구문 분석 결과
  • 정규화 및 필터링 결과

큐의 데이터를 읽고 데이터를 하나 이상의 대기열에 삽입하는 간단한 (UI가없는 명령 줄) 프로그램이있을 것입니다 (크롤러는 두 가지 모두에 공급됩니다. "크롤링 할 URL" 그리고 "웹에서 크롤링 된 페이지"), 당신은 사용할 수 있습니다 :

  • 웹 크롤러
  • 데이터 추출기
  • 파서
  • 정규화 및 필터러

이것들은 대기열 사이에 적합하며 별도의 PC에서 많은 사본을 실행할 수 있으므로 확장 할 수 있습니다.

마지막 대기열은 실제 사용을 위해 실제로 모든 것을 데이터베이스에 게시하는 다른 프로그램에 공급 될 수 있습니다.

우리 회사는 글을 씁니다 기능 사양 각 주요 구성 요소에 대해. 각 사양은 공통 형식을 따르며 다양한 다이어그램과 사진을 적절하게 사용합니다. 우리의 사양에는 기능적 부분과 기술적 인 부분이 있습니다. 기능적 부분은 구성 요소가 높은 수준에서 수행하는 일 (왜, 어떤 목표가 해결되는지,하지 않는 것, 상호 작용하는 것, 관련된 외부 문서 등)를 설명합니다. 기술적 인 부분은 구성 요소에서 가장 중요한 클래스와 높은 수준의 디자인 패턴을 설명합니다.

우리는 가장 다재다능하고 업데이트하기 쉽기 때문에 텍스트를 선호합니다. 이것은 큰 문제입니다. 모든 사람이 Visio 또는 Dia의 전문가 (또는 심지어 괜찮은) 것은 아니며 문서를 최신 상태로 유지하는 데 장애가 될 수 있습니다. 우리는 Wiki에 사양을 작성하여 각 사양 (및 트랙 변경)을 쉽게 연결하고 시스템을 통해 비선형 보행을 허용 할 수 있습니다.

권위의 주장을 위해 Joel은 기능 사양을 권장합니다. 여기 그리고 여기.

Top Down Design은 많은 도움이됩니다. 내가 보는 한 가지 실수는 탑 다운 디자인을 신성하게 만드는 것입니다. 최고 수준의 디자인을 검토하고 다른 코드 섹션과 마찬가지로 업데이트해야합니다.

디자인 시간, 개발 시간, 테스트, 릴리스 및 런타임 등 소프트웨어 개발 수명주기 전체에서 이러한 구성 요소를 분할하는 것이 중요합니다. 다이어그램을 그리는 것만으로는 충분하지 않습니다.

마이크로 넬 아키텍처를 채택하면이 복잡성을 "나누고 냉담한"데 도움이 될 수 있습니다. 마이크로 넬 아키텍처의 본질은 다음과 같습니다.

  • 프로세스 (각 구성 요소는 분리 된 메모리 공간에서 실행됩니다)
  • 스레드 (각 구성 요소는 별도의 스레드에서 실행됨)
  • 커뮤니케이션 (구성 요소는 단일의 간단한 메시지 전달 채널을 통해 통신)

나는 당신의 시스템과 유사하게 들리는 상당히 복잡한 배치 처리 시스템을 작성했습니다.

.NET 실행 가능한 실행 가능한 수명에 대한 각 구성 요소 맵은 AutoSys (동일한 기계의 모든) 통신을 통해 관리됩니다.

런타임 내성을 제공하는 툴킷을 사용할 수 있다면 더 나은 것입니다. 예를 들어, AutoSys는 어떤 프로세스가 실행 중인지 확인할 수 있습니다. TIBCO를 사용하면 런타임에 메시지 대기열을 검사 할 수 있습니다.

NDEPING을 사용하여 Reverse Engineer Complex .NET Code Base를 사용하고 싶습니다. 이 도구에는 다음과 같은 몇 가지 훌륭한 시각화 기능이 제공됩니다.

종속성 그래프 :alt text

종속성 매트릭스 :alt text

Treemaping을 통한 코드 메트릭 시각화 :alt text

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top