오픈 소스 소프트웨어 개발
Open-source software development오픈소스 소프트웨어 개발(OSSD)은 오픈소스 소프트웨어 또는 소스 코드가 공개되어 있는 유사한 소프트웨어를 오픈소스 소프트웨어 프로젝트에 의해 개발하는 프로세스입니다.오픈 소스 라이선스로 소스코드와 함께 사용할 수 있는 소프트웨어 제품으로 설계 검토, 변경 및 개선을 할 수 있습니다.일부 인기 있는 오픈 소스 소프트웨어 제품의 예로는 Mozilla Firefox, Google Chromium, Android, LibreOffice 및 VLC 미디어 플레이어가 있습니다.
역사
1997년 에릭 S. 레이몬드는 성당과 [1]바자를 썼다.이 책에서 Raymond는 두 종류의 소프트웨어 개발을 구분합니다.첫 번째는 종래의 클로즈드 소스 개발입니다.Raymond에 따르면 이러한 개발 방법은 대성당 건축과 같습니다. 중앙 계획, 엄격한 조직, 그리고 처음부터 끝까지 하나의 프로세스입니다.두 번째는 진보적인 오픈 소스 개발로, "다른 의제와 접근으로 이루어진 웅변적인 바자회"에 가깝고, 일관되고 안정된 시스템은 기적의 연속에 의해서만 나타날 수 있다.후자의 비유는 오픈 소스 개발 프로세스와 관련된 논의를 지적합니다.
Bar와 Fogel에 따르면 두 가지 개발 스타일의 차이는 일반적으로 버그 보고서와 기능 요청의 처리(및 생성)와 프로그래머가 [2]작업하는 제약 조건입니다.클로즈드 소스 소프트웨어 개발에서 프로그래머는 기능 요청을 처리할 뿐만 아니라 버그 보고서를 처리하고 작성하는 데 많은 시간을 소비합니다.이 시간은 추가 개발 계획의 작성과 우선순위 부여에 소비됩니다.이로 인해 개발팀은 실제 개발이 아닌 이러한 문제에 많은 시간을 할애하게 됩니다.또, 클로즈드 소스 프로젝트의 경우, 개발 팀은, 소프트웨어의 기술적인 문제에 간섭하는 관리 관련의 제약(마감일, 예산등)아래에서 작업하는 경우가 많습니다.오픈 소스 소프트웨어 개발에서는 소프트웨어 사용자를 개발 프로세스에 통합하거나 사용자가 [citation needed]직접 시스템을 구축하도록 함으로써 이러한 문제를 해결합니다.
모델
오픈 소스 소프트웨어 개발은 여러 단계로 나눌 수 있습니다.여기에 명시된 단계는 Sharma [3]등으로부터 파생되었다.오른쪽에 오픈소스 소프트웨어 개발 프로세스 데이터 구조를 나타내는 도표가 표시되어 있다.이 그림에서는 오픈 소스 소프트웨어 개발 단계가 대응하는 데이터 요소와 함께 표시됩니다.이 다이어그램은 메타 모델링 및 메타 프로세스 모델링 기술을 사용하여 작성되었습니다.
오픈 소스 프로젝트 시작
오픈 소스 프로젝트에서 작업을 시작할 수 있는 방법은 다음과 같습니다.
- 프로젝트의 필요성을 느낀 개인이 공개적으로 프로젝트의 개발 의도를 발표합니다.
- 제한적이지만 작동 중인 코드베이스에서 작업하는 개발자가 공개 소스 프로그램의 첫 번째 버전으로 일반에 공개합니다.
- 성숙한 프로젝트의 소스코드가 일반에 공개됩니다.
- 잘 확립된 오픈 소스 프로젝트는 외부 이해관계자에 의해 분기될 수 있습니다.
Eric Raymond는 그의 에세이 The Cathedral and the Bazar에서 프로젝트의 의도를 발표하는 것은 보통 대중에게 작업 중인 프로젝트를 공개하는 것보다 열등하다고 관찰했다.
기존 유사한 프로젝트에 기여하는 것이 더 효과적일 때 프로젝트를 시작하는 것은 흔한 실수입니다(NIH 증후군).[citation needed]성공적인 프로젝트를 시작하기 위해서는 이미 무엇이 있는지 조사하는 것이 매우 중요합니다.프로세스는 기존 프로젝트의 채택과 새 프로젝트의 시작 중 하나를 선택하는 것으로 시작합니다.새 프로젝트가 시작되면 프로세스는 시작 단계로 이동합니다.기존 프로젝트를 채택한 경우 프로세스는 직접 실행 [original research?]단계로 넘어갑니다.
오픈 소스 프로젝트 유형
여러 유형의 오픈 소스 프로젝트가 있습니다.첫째, 독립형 코드로 구성된 다양한 소프트웨어 프로그램과 라이브러리가 있습니다.일부는 다른 오픈 소스 프로젝트에 의존할 수도 있습니다.이 프로젝트들은 특정한 목적을 달성하고 확실한 요구를 충족시킵니다.이러한 유형의 프로젝트에는 Linux 커널, Firefox 웹 브라우저 및 LibreOffice Office 도구 세트가 있습니다.
배포는 오픈 소스 프로젝트의 또 다른 유형입니다.배포는 공통의 목적을 가지고 동일한 소스에서 게시된 소프트웨어 모음입니다.「배포」의 가장 큰 예는 operating system입니다.Linux 커널을 많은 사용자 랜드 컴포넌트와 함께 출하하는 Linux 디스트리뷰션(Debian, Fedora Core, Mandriva, Slackware, Ubuntu 등)이 있습니다.다양한 운영체제용 Perl 프로그래밍 언어인 ActivePerl이나 Microsoft Windows용 오픈소스 프로그램의 Cygwin 배포와 같은 다른 배포판이 있습니다.
BSD 파생상품과 같은 다른 오픈소스 프로젝트에서는 전체 운영체제, 커널 및 모든 핵심 컴포넌트의 소스 코드를 하나의 리비전 제어 시스템에 유지하며 전체 시스템을 하나의 팀으로 개발합니다.이러한 운영 체제 개발 프로젝트는 다른 배포 기반 시스템보다 도구를 긴밀하게 통합합니다.
마지막으로, 책 또는 독립 실행형 문서 프로젝트가 있습니다.이러한 항목은 일반적으로 오픈 소스 소프트웨어 패키지의 일부로 제공되지 않습니다.리눅스 Documentation Project는 리눅스 운영 체제의 다양한 측면을 문서화하는 많은 프로젝트를 호스팅합니다.이런 유형의 오픈 소스 프로젝트에는 다른 많은 예가 있습니다.
방법들
워터폴 모델과 같은 전통적인 소프트웨어 개발 방법으로는 오픈 소스 프로젝트를 실행하는 것이 어렵습니다.이러한 전통적인 방법에서는 이전 단계로 돌아갈 수 없기 때문입니다.오픈 소스 소프트웨어 개발에서는 프로젝트 시작 전에 요건이 [4]수집되는 경우가 거의 없습니다.대신 Robins가 설명한 바와 같이 소프트웨어 제품의 초기 릴리스를 기반으로 합니다.요건 외에 자원봉사의 스탭이 소프트웨어의 초기 릴리스에 근거해 소프트웨어 제품을 개발하는 것에 매력을 느끼는 경우가 많습니다.Abrahamsson 등에 따르면 이 네트워킹 효과는 필수적입니다."도입한 시제품이 충분한 관심을 끌면 점점 더 많은 개발자들을 끌어 모으기 시작할 것입니다.그러나 Abrahamsson 등은 커뮤니티가 폐쇄형 소프트웨어의 비즈니스 세계와 마찬가지로 매우 가혹하다고 지적하고 있습니다.'고객을 찾으면 살아남지만 손님이 없으면 죽는다'[5]
Fugetta는[6] "신속한 프로토타이핑, 증분 및 진화적 개발, 나선형 라이프사이클, 신속한 애플리케이션 개발, 그리고 최근에는 극단적인 프로그래밍과 신속한 소프트웨어 프로세스가 독점 및 오픈 소스 소프트웨어에 동등하게 적용될 수 있다"고 주장한다.그는 또한 Extreme Programming을 오픈 소스 소프트웨어 개발에 매우 유용한 방법이라고 지적합니다.보다 일반적으로 모든 Agile 프로그래밍 방법은 반복적이고 증분적인 특성 때문에 오픈 소스 소프트웨어 개발에 적용할 수 있습니다.기타 Agile 방법은 오픈 소스 및 클로즈드 소스 소프트웨어 개발 모두에서 동일하게 유용합니다.예를 들어 인터넷 속도 개발은 분산 개발 원칙을 채택하기 때문에 오픈 소스 소프트웨어 개발에 적합합니다.Internet-Speed Development는 지리적으로 분산된 팀을 사용하여 24시간 업무를 수행합니다.이 방법은 (다른 시간대에 개발 센터를 제공하는 유일한 방법이기 때문에) 대규모 폐쇄 소스 기업에서 주로 채택되며 오픈 소스 프로젝트에서도 동일하게 잘 작동합니다. 왜냐하면 대규모 자원봉사자들에 의해 개발된 소프트웨어는 자연스럽게 모든 시간대에 걸쳐 개발자들이 분산되는 경향이 있기 때문입니다.
도구들
이 섹션은 어떠한 출처도 인용하지 않습니다.(2013년 5월 (이 및 ) |
통신 채널
오픈 소스 프로젝트의 개발자 및 사용자가 모두 프로젝트에 근접할 필요는 없습니다.그들은 몇 가지 전자적인 통신 수단을 필요로 한다.이메일은 오픈소스 개발자와 사용자 사이에서 가장 일반적인 커뮤니케이션 형태 중 하나입니다.전자 메일 리스트는, 전자 메일 메세지가 모든 관계자에게 동시에 전달되도록 하기 위해서 사용되는 경우가 많습니다.이것에 의해, 적어도 1명의 멤버가 응답할 수 있게 됩니다.실시간 커뮤니케이션을 위해 많은 프로젝트가 IRC와 같은 인스턴트 메시징 방법을 사용합니다.웹 포럼은 최근 오픈 소스 제품을 사용할 때 발생하는 문제에 대한 도움을 받을 수 있는 일반적인 방법이 되었습니다.Wiki는 개발자와 [7]사용자를 위한 커뮤니케이션 매체로 보편화되었습니다.
버전 관리 시스템
OSS 개발에서는 자원자가 대부분인 참가자가 지역별로 분산되어 있기 때문에 참가자가 소스 코드 개발에 협력할 수 있는 도구가 필요하다.
2000년대 초반, Concurrent Versions System(CVS; 동시 버전 시스템)은 OSS 프로젝트에서 사용되는 소스 코드 콜라보레이션 툴의 대표적인 예입니다.CVS는 여러 사람이 동시에 프로젝트에서 작업할 때 프로젝트의 파일과 코드를 관리하는 데 도움이 됩니다.CVS를 사용하면 여러 사람이 동시에 같은 파일을 작업할 수 있습니다.이 작업은 파일을 사용자의 디렉토리로 이동한 다음 사용자가 완료되면 파일을 병합함으로써 수행됩니다.또한 CVS를 사용하면 이전 버전의 파일을 쉽게 가져올 수 있습니다.2000년대 중반에는 CVS를 대체하기 위해 SVN(Subversion Revision Control System)이 작성되었습니다.OSS 프로젝트 버전 관리 [7]시스템으로서 급속히 발전하고 있다.
현재 많은 오픈 소스 프로젝트에서는 SVN 및 CVS와 같은 중앙 집중식 저장소보다 확장성이 뛰어난 분산 리비전 제어 시스템을 사용하고 있습니다.Linux 커널에서 사용되는 git과 Python 프로그래밍 언어에서 [citation needed]사용되는 Mercurial이 대표적인 예입니다.
버그 트래커 및 태스크리스트
대부분의 대규모 프로젝트에서는 프로젝트 개발 시 다양한 문제의 상태를 추적하기 위해 버그 추적 시스템이 필요합니다.버그 트래커에는 다음과 같은 것이 있습니다.
- Bugzilla – Mozilla의 웹 기반 버그 트래커.
- Mantis Bug Tracker – 웹 기반 PHP/MySQL 버그 트래커.
- Trac – 버그 트래커를 Wiki 및 서브버전 버전 관리 시스템 인터페이스와 통합합니다.
- Redmine – Ruby로 작성된 문제 추적, wiki, 포럼, 뉴스, 로드맵, 갠트 프로젝트 계획 및 LDAP 사용자 디렉토리와의 인터페이스를 통합합니다.
- Request Tracker – Perl로 작성되었습니다.CPAN 모듈의 디폴트로 지정됩니다.rt.cpan.org 를 참조해 주세요.
- SourceForge와 그 포크는 버그 트래커를 서비스의 일부로 제공합니다.그 결과 SourceForge.net에서 호스팅되는 많은 프로젝트와 유사한 서비스가 기본적으로 이 서비스를 사용합니다.
- JIRA – Atlassian의 웹 기반 프로젝트 관리 및 문제 추적 도구.
테스트 및 디버깅 도구
OSS 프로젝트는 빈번히 통합되기 때문에 시스템 통합 시 테스트 자동화를 지원하는 툴이 사용됩니다.이러한 툴의 예로는 Tinderbox가 있습니다.Tinderbox를 사용하면 OSS 프로젝트 참가자가 시스템 통합 중 오류를 검출할 수 있습니다.Tinderbox는 지속적인 빌드 프로세스를 실행하여 문제가 있는 소스 코드 부분과 이러한 문제가 [7]발생한 플랫폼에 대해 사용자에게 알려줍니다.
디버거는 다른 프로그램을 디버깅하거나 테스트하거나 최적화하는 데 사용되는 컴퓨터 프로그램입니다.GNU 디버거(GDB)는 오픈 소스 소프트웨어 개발에 사용되는 디버거의 한 예입니다.이 디버거는 원격 디버깅을 제공하며, 이를 오픈 소스 소프트웨어 [citation needed]개발에 특히 적용할 수 있습니다.
메모리 리크 툴 또는 메모리 디버거는 메모리 리크 및 버퍼 오버플로우를 검출하기 위한 프로그래밍 툴입니다.메모리 누수는 컴퓨터 프로그램이 불필요하게 메모리를 소비하는 특정 종류의 것입니다.이 경우, 필요 없게 된 메모리를 해방할 수 없게 됩니다.Mozilla에서 사용되는 메모리 누전 검출 툴의 예로는 XPCOM 메모리 누전 툴이 있습니다.검증 도구는 코드 조각이 지정된 구문을 준수하는지 여부를 확인하기 위해 사용됩니다.검증 툴의 예로는 스플린트가 [citation needed]있습니다.
패키지 관리
패키지 관리 시스템은 소프트웨어 패키지를 컴퓨터에서 설치, 업그레이드, 구성 및 제거하는 프로세스를 자동화하는 도구 모음입니다..rpm용 Red Hat Package Manager(RPM) 및 .deb 파일 형식용 Advanced Packaging Tool(APT)은 많은 Linux [citation needed]배포판에서 사용되는 패키지 관리 시스템입니다.
프로젝트 공개
소프트웨어 디렉토리 및 릴리스 로그:
- 자유 소프트웨어 디렉토리
기사:
「 」를 참조해 주세요.
레퍼런스
- ^ 레이먼드, E.S.(1999년)대성당과 바자회.O'Reilly Retrieved from http://www.catb.org/ ~esr/sysr/sysr/sysr/sysr/sysel-syslog/에서다음 항목도 참조하십시오.대성당과 바자회.
- ^ Bar, M. & Fogel, K. (2003)오픈 소스 개발(CVS 포함), 제3판패러글리프 프레스( ISBN1-932111-81-6)
- ^ 샤르마, S, 스구마란, V. & Rajagopalan, B. (2002)하이브리드 오픈 소스 소프트웨어 커뮤니티를 만들기 위한 프레임워크.Information Systems Journal 12 (1), 7 ~25.
- ^ 로빈스, J. E. (2003)OSSE 툴을 채택하여 오픈소스 소프트웨어 엔지니어링(OSE) 프랙티스를 도입하다시장 이해:오픈 소스와 무료 소프트웨어에 관한 견해, 2003년 가을.
- ^ Abrahamson, P, Salo, O. & Warsta, J. (2002)신속한 소프트웨어 개발 방법: 리뷰 및 분석.VTT 출판물
- ^ Fuggetta, Alfonso (2003). "Open source software––an evaluation". Journal of Systems and Software. 66 (1): 77–90. doi:10.1016/S0164-1212(02)00065-1.
- ^ a b c "Tim Berners-Lee on the Web at 25: the past, present and future". Wired UK.