문제

당신이 참여한 소프트웨어로 어떤 성공적인 변환/재 작성을 했습니까? 과정에서 언어와 프레임 워크는 어디에 있습니까? 소프트웨어가 얼마나 컸습니까? 마지막으로 프로세스에 참여함으로써 배운 상위 하나 또는 두 가지는 무엇입니까?

이것은 이것과 관련이 있습니다 의문

도움이 되었습니까?

해결책

나는 여기서 "대부분의 어리 스러움"으로 갈 것입니다.

  • Tops-10을 실행하는 Decsystem-10에서 VM/CMS를 실행하는 IBM 4381 메인 프레임으로 Fortran 77에 작성된 8080 시뮬레이터를 포팅했습니다.

다른 팁

나는 모든 파일에서 "Strict a Strict"를 사용하기 위해 20,000 줄의 Perl을 다시 작성했습니다. 나는 그것이 필요한 모든 곳에 "나의"를 추가해야했고 과정에서 발견되지 않은 버그를 수정해야했다.

내가이 일을 통해 배운 가장 큰 것은 "항상 생각보다 항상 오래 걸립니다."입니다.

다른 코더가 동시에 새롭고 고정되지 않은 코드를 작성하지 않도록 하룻밤 사이에 한 번에 모두 완료해야했습니다. 나는 그것이 빨리 갈 것이라고 생각했지만 그렇지 않았고, 나는 다음날 오전 6시에 여전히 해킹을하고있었습니다.

나는 그것을 완료하고 다른 사람들이 일을 시작하기 전에 체크인했습니다!

여러 가지 이유로 부동산 회사를 위해 대형 Java 웹 응용 프로그램을 ASP.NET 응용 프로그램에 다시 작성했습니다.

내가 배운 가장 큰 것은 원래 시스템이 원래 시스템의 특징이 아무리 사소한 경우, 두 번째 시스템에 있지 않다면 클라이언트가 다시 쓰기가 실패라고 생각한다는 것입니다. 기대 관리는 새로운 시스템을 작성할 때 모든 것입니다.

이것이 재 작성이 너무 어려운 가장 큰 이유입니다. 클라이언트에게는 매우 쉬운 것 같습니다 ( "이미 가지고있는 것을 다시하고 몇 가지를 추가하십시오.").

나에게 가장 멋진 것은 iPod에 Mame의 포트. 임베디드 하드웨어에 대한 훌륭한 학습 경험이었고 많은 훌륭한 사람들과 함께 일했습니다. 공식 사이트.

나는 Inhouse Project Managment 시스템을보다 표준 MVC 모델로 다시 작성하고 있습니다. 램프 스택 (PHP)에 있고 나는 첫 번째 이정표에 가깝습니다.

내가 현재 배운 것은 프로그램이 처음에 얼마나 단순하게 느끼는지이며, 내가해야 할 때까지 복잡성을 더하지 않으려 고 노력했습니다.

예를 들어 모든 기능을 먼저 프로그래밍 한 다음 (관리자 사용자였던 것처럼) 정렬 할 때 제한 사항 (사용자 레벨 등)의 복잡성을 추가합니다.

나는 30,000 라인 MS-DOS C ++ 프로그램을 유사한 길이이지만 훨씬 완전하고 사용 가능한 Java 스윙 프로그램으로 포팅/재 설계/재 작성했습니다.

나는 C ++ 또는 Java와 관련된 다른 일을하지 않는 법을 배웠다.

클라이언트 서버 PowerBuilder 앱인 수백 개의 화면을 ASP.NET 앱 (C#)에 포팅했습니다.

성능 및 유지 관리 문제로 인해 전년도에 걸쳐 PowerBuilder 스크립트에서 수많은 내장 된 SQL을 저장된 절차로 옮겼습니다.

이것은 데이터베이스에 많은 비즈니스 로직이 많은 많은 비즈니스 로직을 갖추게되지만 PowerBuilder 앱이 비교적 "빛"이라는 것을 의미하며 .NET 프론트 엔드를 구축 할 때 SQL 코드베이스를 활용하고 가질 수 있습니다. 많은 기능이 이미 구축되고 테스트되었습니다.

그런 식으로 앱을 구축하는 것이 좋습니다. 그러나이 경우에 우리의 유리하게 작동했습니다.

응용 프로그램 프레임 워크에는 텍스트 기반 데이터 파일을 읽는 데 사용되는 코드 생성 도구가있었습니다. 약 20 개의 다른 응용 프로그램이 사용했습니다.

구조화 된 텍스트 기반 파일 대신 XML 데이터 파일을 사용하고 싶었습니다. 원래 코드는 상당히 구식이며 유지하기가 어렵습니다. 이 도구를 XSLT 스크립트와 유틸리티 라이브러리의 조합으로 교체했습니다. 유틸리티 라이브러리의 경우 이전 도구에서 일부 코드를 사용할 수 있습니다.

결과적으로 20 개의 응용 프로그램이 이제 더 이상 사용되지 않는 텍스트 기반 파일 형식 또는 새로운 XML 기반 형식을 사용할 수있었습니다. 또한 오래된 데이터 파일을 새로운 XML 데이터 파일로 변환하는 변환 생성 도구를 전달했습니다.

하나 또는 두 개의 릴리스를 꺼낸 후 이제 우리는 더 이상 이전 텍스트 기반 형식을 지원하지 않으며 모든 사람이 데이터를 XML로 변환 할 수 있다고 결정했습니다.

우리는 수동 변환을 거의 할 필요가 없었습니다.

기본 회사 앱을 사전 표준 C ++에서 표준 C ++로 변환했습니다. 우리는 AIX에서 작동하는 데 도움이되는 수백만 달러의 판매를 가졌으며, 그것을 살펴본 후 표준 C ++로 변환하는 것이 IBM의 전통적인 C ++로 변환하는 것만 큼 쉬울 것이라고 결정했습니다.

나는 줄 수를 모르지만 소스 코드는 수백 메가 바이트로 달렸다.

VI 및 다양한 컴파일러를 포함하여 표준 UNIX 도구를 사용하여이를 수행했습니다.

몇 달이 걸렸습니다. 대부분의 수정 사항은 단순한 수정 사항으로 컴파일러에 의해 잡히고 거의 기계적으로 고정되었습니다. 그들 중 일부는 훨씬 더 복잡했습니다.

내 주요 테이크 아웃은 다음과 같습니다. 아직 표준화되지 않은 언어로 코드로 너무 영리하지 않거나 예기치 않은 방식으로 상황이 바뀔 수 있습니다. 우리는 C ++ 스트림의 독창적 인 적응/남용 중 일부를 파고 들었습니다.

10 년 전 저는 CAD 시스템을 DOS에서 Windows로 변환 한 팀을 관리했습니다. 사용 된 DOS 버전 홈 양조 도서관 그래픽 그리기의 경우 Windows 버전은 MFC를 사용했습니다. 소프트웨어는 변환 당시 약 70.000 줄의 C 코드였습니다. 그 과정에서 우리가 배운 가장 중요한 것은 추상화의 힘입니다. 모든 장치 별 비 포트 불가능한 루틴은 몇 가지 파일로 격리되었습니다. 따라서 Windows API 호출로 프레임 버퍼에 직접 액세스하여 호출을 DOS 기반 라이브러리로 대체하는 것이 비교적 쉽습니다. 마찬가지로 입력을 위해 해당 Windows 이벤트 루프와 함께 키보드 및 마우스 이벤트를 확인한 이벤트 루프를 대체했습니다. 우리는 시스템의 나머지 부분에서 포트할 수없는 (이번에는 Windows) 코드를 분리하는 정책을 계속했지만 아직이 유용한 것을 발견하지 못했습니다. 아마도 언젠가 우리는 시스템을 Mac OS X에 포트하고 다시 감사 할 것입니다.

몇몇의. 그러나 나는 하나를 언급합니다.

성능 모델링 도구였습니다. 부품 delphi 1, 파트 터보 파스칼. 그것은 다시 쓰지 않을 것이라는 다시 쓰기가 필요했습니다. 그래서 우리는 2 팀으로 시작했지만 나만이 끝까지 살아 남았습니다. 그리고 나는 마감일 전에 준비되었다 ;-).

우리가 한 몇 가지 일 :

  • 멀티 모드로 만드십시오. 원본에는 많은 글로벌이있었습니다. 나는 그것들을 모두 제거했고 멀티 모델은 쉽게 적응하기가 쉬웠다.
  • 확장 된 오류 메시지. 메시지를 클릭하고 도움을 받으십시오.
  • 많은 그래프와 다이어그램. 클릭 할 수 있습니다.
  • 시뮬레이션. 시간이 지남에 따라 매개 변수를 변경하고 현재 구성이 충분한 시간을 확인하십시오.

우리는 실제로 이것을 깨끗하게 만들었고 결국에는 크게 상환했습니다. 그런 큰 학습 경험.

법적 송장을 처리하는 회사에 대한 시스템을 다시 작성 - 원래 시스템은 좋은 OO 원칙에 대해 전혀 모르는 VB 괴물이었습니다. 모든 것이 함께 혼합되었습니다. HTML은 SQL을했고 SQL은 HTML을 썼습니다. 그것의 대부분은 규칙에 XML과 같은 것을 사용하는 사용자 정의 규칙 엔진이었습니다.

두 팀이 재 작성을했는데 약 9 개월이 걸렸습니다. 한 팀은 웹 프론트 엔드와 백엔드 워크 플로우를했으며 다른 팀은 규칙 엔진을 다시 작성했습니다. 새로운 시스템은 C#로 작성되었으며 테스트 우선이 완료되었습니다. 우리가 끝났을 때 시스템에 새로운 규칙을 추가하는 것은 흙이 단순했으며 모두 테스트 가능했습니다. 그 과정에서 우리는 회사를 VSS에서 SVN으로 변환하고, 지속적인 통합을 구현하고, 배포를 자동화하며, 다른 개발자들에게 TDD 및 기타 스크럼/XP 관행을 수행하는 방법을 가르치는 것과 같은 작업을 수행했습니다.

프로젝트를 통해 기대를 관리하는 것이 중요했습니다. 소프트웨어에 대해 정통한 고객이있는 것은 매우 도움이되었습니다.

포괄적 인 장치 및 통합 테스트와 함께 대규모 (엔드 투 엔드) 테스트를 혼합하면 톤이 도움이되었습니다.

PHP로 작성된 변환 된 vbulletin을 c#/asp.net으로 작성했습니다. 저는 두 언어 모두에 익숙하지만 PHP는 해당 소프트웨어를 구축 할 수있는 승자입니다. 후면에서 가장 큰 고통은 템플릿을 호출하기 위해 PHP의 Eval ()에 해당하는 C#에 해당하는 것이 필요했습니다.

전환을 시도하는 것은 나의 첫 번째 도전이었습니다. 나는 C#에 대한 더 많은 경험이 필요하다는 것을 알게되었고 처음부터 그것을 쓰는 것이 때때로 더 쉬운 경로라는 것을 알게되었습니다.

Perl에 완전히 작성된 동적 빌드 프로세스를 C#/. NET 솔루션으로 변환하여 동료가 개발 한 워크 플로 엔진을 사용하여 (여전히 베타 버전에 있었기 때문에 약간의 개선을해야했습니다). 그로 인해 빌드 프로세스에 실패-안전 및 장애인 기능을 추가 할 수있는 Oppertunity를 제공했습니다.

당신이 묻기 전에 - 아니요 - 런타임 중에 프로세스를 동적으로 변경할 수 없으므로 Microsoft 워크 플로우 파운데이션을 사용할 수 없습니다.

내가 배운 것:

  • Perl 개발자를 미워합니다
  • WF 엔진을 사용한 프로세스 최적화
  • 실패 및 실패 전략
  • 일부 C# 조정;)

결국 3 200 LoC Perl-Files에서 약 5K-6K (WF- 엔진 포함) LOC 원점을 덮었습니다. 그러나 그것은 재미 있었고 결국 훨씬 나아졌습니다.)

이론적으로 휴대용 C 코드를 이론적으로 휴대용 C 코드로 변환하여 아키텍처 전체의 코드를 단위 당 x 달러를 절약하는 하드웨어 변경을 지원합니다.

크기는 다양합니다 - 이것은 일반적인 요구이며 작고 큰 프로젝트를 수행했습니다.

더 휴대용 C 코드를 작성하는 법을 배웠습니다. 우아함은 훌륭하지만 바로 그 내려 오면 컴파일러는 성능을 관리하며 코드는 가능한 한 간단하고 휴대용이어야합니다.

원본은 작은 데이터 세트에서만 작동했기 때문에 Fortran 77 (90 년대에 작성 되었음에도 불구하고)에 작성된 시뮬레이션을 C/Java에 포팅했습니다. 나는 프로그램 시작시 전체 데이터 테이블을 메모리로 옮기는 것이 왜 확장되지 않을지 설명한 후 여러 번 큰 O 표기법을 좋아하는 법을 배웠습니다.

B-2 스텔스 폭격기 미션 소프트웨어를 Jovial에서 C로 마이그레이션 100% 완전 자동 변환. 진지하게!

주요 수업 : 구성 가능한 자동 변환 도구를 사용하는 것은 큰 승리입니다.

보다 DMS 소프트웨어 리엔지니어링 툴킷.

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