코드 재사용은 좋은 생각입니다. 대단하지 않습니다 .
저는 약 30 년의 소프트웨어 엔지니어링에서 "재사용"하려는 관점을 가지고 있습니다.
나는 70 년대 초에 내가 만든 하나의 OS 디자인과 70 년대 후반에 내가 만든 다른 OS의 디자인을 재사용했다는 것을 알게 된 후 80 년대에 연구 주제로 "코드 재사용"을 조사하기 시작했다.
코드 재사용의 좋은 부분은 신의 정직한 코드를 가끔 재사용 할 수 있다는 것입니다. 그러나 세상은 코드 로 가득 합니다. 원하는 것을 어떻게 찾을 수 있습니까? 다음은 재사용 저주 라고 부르는 것입니다 .
저는 산타 클로스 (오픈 소스)이고 10 억 개의 소프트웨어 구성 요소가 있습니다. 당신은 그들 중 하나를 가질 수 있습니다.
행운을 빕니다.
재사용 문제를 잘 해결하려면 다음을 수행하십시오.
- Reuser는 자신이 필요로하는 기능 (기능, 성능, 대상 언어, 환경 가정 등)을 어떻게 든 지정해야합니다.
- 이러한 잠재적 기준에 의해 다양한 방법으로 색인화 된 "재사용 가능한"코드 라이브러리가 있어야합니다.
- 후보 요소를 선택하려면 몇 가지 메커니즘이 있어야합니다 (10 억 요소에서 모든 요소를 개인적으로 볼 수는 없음)
- 선택한 후보가 사양에서 얼마나 멀리 떨어져 있는지 특성화하는 방법이 필요합니다.
- 재사용자가 선택한 재사용 가능한 코드를 수정할 수 있도록하는 일부 정규 프로세스가 있어야합니다 (여기서는 OOP의 가장 큰 기여 : 슬롯을 재정 의하여 기존 구성 요소 / 객체를 편집 할 수 있습니다. OOP는 다른 도움말을 제공하지 않습니다).
- 이 모든 것은 단순히 그것을 코딩하는 것보다 분명히 저렴해야합니다.
수년에 걸쳐 발견 된 것은 코드를 재사용 할 수있게하기 위해, 그 목적을 위해 설계되어야하거나, 너무 많은 암시 적 가정을 포함하고 있다는 것입니다. 가장 성공적인 코드 재사용 라이브러리는 실제로 매우 작습니다. 틀림없이 라이브러리와 프레임 워크는 "재사용 가능한"코드이며 매우 성공적입니다. Java와 C #은 꽤 좋은 컴퓨터 언어가 아니라 잘 설계되고 구현되며 문서화 된 라이브러리를 사용할 수 있기 때문에 성공합니다. 그러나 사람들은 라이브러리에서 소스 코드를 보지 않습니다. 그들은 잘 문서화 된 API를 호출합니다 (일반적으로 사용 가능하도록 설계되었습니다).
코드 재사용이 수행되지 않은 것 (OOP 모두)은 시스템 코딩 능력이 크게 향상되었습니다.
핵심 결점은 코드에 너무 많은 가정이 내장되어 있기 때문에 모든 종류의 코드 재사용이 근본적으로 제한되어 있다는 것입니다 . 코드를 작게 만들면 가정을 최소화 할 수 있지만 처음부터 구축하는 데 드는 비용이 크지 않으며 재사용 이익이 효과적이지 않습니다. 코드 청크를 크게 만들면 새로운 컨텍스트에서 거의 쓸모가 없습니다. 걸리버처럼, 그들은 백만 개의 작은 끈으로 해변에 묶여 있으며, 당신은 그것들을 모두 잘라낼 여유가 없습니다.
우리가 작업해야 할 것은 코드를 구성하기 위해 지식을 재사용하는 것입니다 . 이 작업을 수행 할 수 있으면 현재의 일련의 가정을 처리하면서 필요한 지식을 적용하여 필요한 코드를 구성 할 수 있습니다.
이렇게하려면 소프트웨어 구성 요소를 특성화하는 데 여전히 동일한 사양 기능이 필요합니다 (원하는 것을 말해야합니다!). 그러나이 "구성"지식을 스펙에 적용 하여 원하는 코드 를 생성 하십시오.
커뮤니티로서 우리는 아직 잘하지 못합니다. 그러나 사람들은 항상 그렇게합니다. 왜 자동화 할 수 없습니까? 많은 연구가 있으며, 이것은 많은 상황에서 수행 될 수 있음을 보여줍니다.
여기에 필요한 주요 기계 중 하나는 "구성 요소 설명"(이는 공식 문서 일 뿐이며 프로그래밍 언어처럼 구문 분석 할 수 있음)을 수용하고 프로그램 변환 을 적용하기위한 기계 도구입니다 .
컴파일러는 이미 이것을 수행합니다 :-} 그리고 그들은 그들이 다루는 문제의 클래스에 정말로 능숙합니다.
코드 생성 기능이있는 UML 모델이이 시도 중 하나입니다. 아주 좋은 시도는 아닙니다. 대부분의 UML 모델에서 말하는 것은 "이것과 같은 데이터가 있습니다"입니다. 기능이 빠진 경우 실제 프로그램을 생성하기가 매우 어렵습니다.
실용적인 프로그램 변환 시스템 인 DMS 도구 를 구축하려고합니다 . 코드를 생성하기 위해 사양을 추상화하는 것이 아니라 코드를 정리하는 레거시 코드에 프로그램 변환을 적용함으로써 상당히 산만 해졌습니다. (이것들은 초록에서 같은 문제입니다!). (이러한 도구를 만드는 데 많은 시간이 소요됩니다. 15 년 동안 그리고 그 동안 먹어야 만했습니다.)
그러나 DMS에는 위에서 설명한 두 가지 주요 속성, 즉 임의의 공식 사양을 처리하는 기능과 "코드 생성 지식"을 변환으로 캡처하여 필요에 따라 적용하는 기능이 있습니다. 놀랍게도, 우리는 특별한 경우에, 사양에서 다소 흥미로운 코드를 생성합니다. DMS는 구현을 생성하기 위해 자체적으로 사용됩니다. 그것은 (지식) 재사용이라는 약속의 적어도 일부를 달성했습니다 : 매우 중요한 생산성 향상. 약 7 명의 기술 인력으로 구성된 팀이 있습니다. DMS에 대해 1-2 MSLOC의 "사양"을 작성했지만 10MSLOC의 생성 된 코드가 있습니다.
요약 : 생성 지식의 재사용은 코드의 재사용이 아닌 승리 입니다.