Skip to content
Snippets Groups Projects

5조 번역 완료했습니다.

Open Sangbaek Lee requested to merge esangbaek/the-cathedral-and-the-bazaar:master into master
1 file
+ 36
6
Compare changes
  • Side-by-side
  • Inline
+ 36
6
@@ -14,6 +14,7 @@ $Date: 2020/10/08 09:02:14 $
@@ -14,6 +14,7 @@ $Date: 2020/10/08 09:02:14 $
### 문서이력
### 문서이력
 
* merge version 3.0 from http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/index.html
* merge version 3.0 from http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/index.html
* KLDP 번역 2011/02/08 버전을 병합함
* KLDP 번역 2011/02/08 버전을 병합함
@@ -349,37 +350,66 @@ Linus coppers his bets, too. In case there are serious bugs, Linux kernel versio
@@ -349,37 +350,66 @@ Linus coppers his bets, too. In case there are serious bugs, Linux kernel versio
## How Many Eyeballs Tame Complexity
## How Many Eyeballs Tame Complexity
(김대영)It's one thing to observe in the large that the bazaar style greatly accelerates debugging and code evolution. It's another to understand exactly how and why it does so at the micro-level of day-to-day developer and tester behavior. In this section (written three years after the original paper, using insights by developers who read it and re-examined their own behavior) we'll take a hard look at the actual mechanisms. Non-technically inclined readers can safely skip to the next section.
It's one thing to observe in the large that the bazaar style greatly accelerates debugging and code evolution. It's another to understand exactly how and why it does so at the micro-level of day-to-day developer and tester behavior. In this section (written three years after the original paper, using insights by developers who read it and re-examined their own behavior) we'll take a hard look at the actual mechanisms. Non-technically inclined readers can safely skip to the next section.
 
 
대체로 파악할수 있는것이 하나 있다. **시장 스타일**은 디버깅과 코드발전을 급격하게 가속화시킨다는 것이다. 그러나 개발자와 tester들의 상세한 수준의 일상에서 왜 그러한 일이 일어나는지, 그리고 어떻게 일어나는지를 정확하게 이해하는것은 또 다른 일이다. 이번 섹션에서 우리는 그러한 실제적인 메커니즘에 대해 상세하게 살펴볼것이다. 기술적인 사항에 대해서 꺼려하는 독자들은 다음장으로 넘어가도 좋다.
One key to understanding is to realize exactly why it is that the kind of bug report non–source-aware users normally turn in tends not to be very useful. Non–source-aware users tend to report only surface symptoms; they take their environment for granted, so they (a) omit critical background data, and (b) seldom include a reliable recipe for reproducing the bug.
One key to understanding is to realize exactly why it is that the kind of bug report non–source-aware users normally turn in tends not to be very useful. Non–source-aware users tend to report only surface symptoms; they take their environment for granted, so they (a) omit critical background data, and (b) seldom include a reliable recipe for reproducing the bug.
 
이러한 것에 대해 이해하기 위한 첫 단추는 **소스에 대해 신경쓰지 않는 사용자들의 버그 리포트**가 왜 대부분 쓸모없는지에 대해 아는것이다. **소스에 대해 신경쓰지 않는 사용자들**은 표면적인 증상에 대해서만 보고하는 경향이 있다. 그들은 자신이 알고 있는것에 대해 당연하게 여긴다. 그래서 그들은 (a) 아주 중요한 background data를 생략하거나 (b) 버그를 찾기 위해 어떤 과정을 반복해야 하는지에 대해 좀처럼 이야기 하지 않는다.
 
The underlying problem here is a mismatch between the tester's and the developer's mental models of the program; the tester, on the outside looking in, and the developer on the inside looking out. In closed-source development they're both stuck in these roles, and tend to talk past each other and find each other deeply frustrating.
The underlying problem here is a mismatch between the tester's and the developer's mental models of the program; the tester, on the outside looking in, and the developer on the inside looking out. In closed-source development they're both stuck in these roles, and tend to talk past each other and find each other deeply frustrating.
(김형모)Open-source development breaks this bind, making it far easier for tester and developer to develop a shared representation grounded in the actual source code and to communicate effectively about it. Practically, there is a huge difference in leverage for the developer between the kind of bug report that just reports externally-visible symptoms and the kind that hooks directly to the developer's source-code–based mental representation of the program.
이러한 상황에서 잠재된 문제는 "프로그램에 대한 테스터와 개발자간의 추상화된 심리적 모델" 이 다르다는 것이다. 테스터는 바깥쪽에서 프로그램을 바라보고, 개발자는 안쪽에서부터 바라보게 된다. 오픈소스가 아닌 개발환경에서는 개발자와 테스터 둘다 이러한 역할에 갇히게 된다. 그리고 서로 과거에 집중하여 이야기하다가 결국에는 서로 실망하게 되는 경향이 있다.
 
 
Open-source development breaks this bind, making it far easier for tester and developer to develop a shared representation grounded in the actual source code and to communicate effectively about it. Practically, there is a huge difference in leverage for the developer between the kind of bug report that just reports externally-visible symptoms and the kind that hooks directly to the developer's source-code–based mental representation of the program.
 
 
오픈소스의 발전은 이러한 불편한 상황을 개선해 주면서 테스터와 개발자가 실제 코드를 기반으로 둔 공유물을 개발하고 그 공유물에 대해 효과적으로 소통하는 것을 더 쉽게 만들어 주었다. 실제로도 단순히 외부적으로 보이는 증상을 알리는 버그 리포트와 개발자의 소스코드를 기반으로한 프로그램 표현에 직접적으로 관여하는 버그 리포트 사이의 영향력이 개발자에게 있어서는 거대한 차이를 보이고 있다.
Most bugs, most of the time, are easily nailed given even an incomplete but suggestive characterization of their error conditions at source-code level. When someone among your beta-testers can point out, "there's a boundary problem in line nnn", or even just "under conditions X, Y, and Z, this variable rolls over", a quick look at the offending code often suffices to pin down the exact mode of failure and generate a fix.
Most bugs, most of the time, are easily nailed given even an incomplete but suggestive characterization of their error conditions at source-code level. When someone among your beta-testers can point out, "there's a boundary problem in line nnn", or even just "under conditions X, Y, and Z, this variable rolls over", a quick look at the offending code often suffices to pin down the exact mode of failure and generate a fix.
 
대부분의 경우, 대부분의 버그들은 오류발생에 있어 불완전하면서도 암시적인 특징마저 가진 채로 소스코드 레벨에 박혀있다. 베타 테스터가 **nnn 줄에 경계와 관련한 문제가 있다** 라고 지적하거나 단순히 **조건 X,Y,Z에서 이 값이 나가 떨어진다**라고 지적했을 때 빠르게 문제가 되는 코드를 찾아보는 것으로도 문제원인을 정확히 짚고 수정사항을 만들어 내기에는 충분하다.
 
Thus, source-code awareness by both parties greatly enhances both good communication and the synergy between what a beta-tester reports and what the core developer(s) know. In turn, this means that the core developers' time tends to be well conserved, even with many collaborators.
Thus, source-code awareness by both parties greatly enhances both good communication and the synergy between what a beta-tester reports and what the core developer(s) know. In turn, this means that the core developers' time tends to be well conserved, even with many collaborators.
(안경식)Another characteristic of the open-source method that conserves developer time is the communication structure of typical open-source projects. Above I used the term "core developer"; this reflects a distinction between the project core (typically quite small; a single core developer is common, and one to three is typical) and the project halo of beta-testers and available contributors (which often numbers in the hundreds).
따라서, 테스터와 개발자의 소스코드 인식은 둘 사이의 의사소통과, 베타 테스터가 보고하는 것과 코어 개발자가 알고 있는 것 사이의 시너지를 크게 향상시킨다. 즉, 많은 협력자들과 함께하더라도 코어 개발자의 시간을 아낄 수 있다는 것을 의미한다.
 
 
Another characteristic of the open-source method that conserves developer time is the communication structure of typical open-source projects. Above I used the term "core developer"; this reflects a distinction between the project core (typically quite small; a single core developer is common, and one to three is typical) and the project halo of beta-testers and available contributors (which often numbers in the hundreds).
 
 
개발자의 시간을 절약해주는 오픈소스의 또다른 특징은 전형적인 오픈소스 프로젝트의 의사소통 구조이다. 위에서 나는 **코어 개발자** 라는 용어를 사용했고 이 용어는 프로젝트 코어( 일반적으로 작고; 하나의 코어 개발자가 흔하고 1~3명이 일반적이다)랑 베타테스터와 이용가능한 기부자들(가끔식 수백명)의 프로젝트 헤일로간의 차이를 나타낸다.
The fundamental problem that traditional software-development organization addresses is Brook's Law: ``Adding more programmers to a late project makes it later.'' More generally, Brooks's Law predicts that the complexity and communication costs of a project rise with the square of the number of developers, while work done only rises linearly.
The fundamental problem that traditional software-development organization addresses is Brook's Law: ``Adding more programmers to a late project makes it later.'' More generally, Brooks's Law predicts that the complexity and communication costs of a project rise with the square of the number of developers, while work done only rises linearly.
(안경식)Brooks's Law is founded on experience that bugs tend strongly to cluster at the interfaces between code written by different people, and that communications/coordination overhead on a project tends to rise with the number of interfaces between human beings. Thus, problems scale with the number of communications paths between developers, which scales as the square of the humber of developers (more precisely, according to the formula N*(N - 1)/2 where N is the number of developers).
전통적인 소프트웨어 개발 조직의 근본적인 문제는 브룩스의 법칙이다 : **진전이 없는 프로젝트에 더 많은 프로그래머를 투입할수록 더 늦어진다.** 더 일반적으로 브룩스의 법칙은 작업 완료가 선형적으로 증가하는 반면에 프로젝트의 복잡성, 커뮤니케이션 비용은 제곱으로 증가한다고 예측한다.
 
 
Brooks's Law is founded on experience that bugs tend strongly to cluster at the interfaces between code written by different people, and that communications/coordination overhead on a project tends to rise with the number of interfaces between human beings. Thus, problems scale with the number of communications paths between developers, which scales as the square of the humber of developers (more precisely, according to the formula N*(N - 1)/2 where N is the number of developers).
 
 
브룩스의 법칙은 서로 다른 사람들이 작성한 코드들을 인터페이스로 합치면 버그가 심각하게 된다는 경향과 프로젝트상의 의사소통/협력이 사람들의 인터페이스 수에 따라 증가한다는 경험에 기반한다. 그래서 문제는 개발자들간의 의사소통 경로 수에 비례하고 의사소통 경로수는 개발자 수의 제곱에 비례한다. ( 더 정확히는 공식 N*(N - 1)/2에 따른다. N은 개발자 수)
(이상백)
The Brooks's Law analysis (and the resulting fear of large numbers in development groups) rests on a hidden assummption: that the communications structure of the project is necessarily a complete graph, that everybody talks to everybody else. But on open-source projects, the halo developers work on what are in effect separable parallel subtasks and interact with each other very little; code changes and bug reports stream through the core group, and only within that small core group do we pay the full Brooksian overhead. [SU]
The Brooks's Law analysis (and the resulting fear of large numbers in development groups) rests on a hidden assummption: that the communications structure of the project is necessarily a complete graph, that everybody talks to everybody else. But on open-source projects, the halo developers work on what are in effect separable parallel subtasks and interact with each other very little; code changes and bug reports stream through the core group, and only within that small core group do we pay the full Brooksian overhead. [SU]
 
브룩스의 법률 분석( 그리고 그로부터 파생된 개발 그룹들의 큰 수에 대한 두려움) 은 숨겨진 가정에 바탕을 두고 있습니다 : 모든 사람이 다른 모든 사람과 소통할 수 있게 프로젝트의 통신 구조가 완전한 그래프여야 한다는 것. 하지만 오픈 소스 프로젝트에서는, 관련된 외부 개발자들은 사실상 분리 가능한 병렬 하위 작업에 대해 작업하고 서로 거의 상호작용 하지 않습니다; 코드 변경 및 버그 리포트는 코어 그룹에 의해 스트리밍 되며, 해당 소규모 코어 그룹 내에서만 전체 Brooksian overhead를 지불합니다.
 
There are are still more reasons that source-code–level bug reporting tends to be very efficient. They center around the fact that a single error can often have multiple possible symptoms, manifesting differently depending on details of the user's usage pattern and environment. Such errors tend to be exactly the sort of complex and subtle bugs (such as dynamic-memory-management errors or nondeterministic interrupt-window artifacts) that are hardest to reproduce at will or to pin down by static analysis, and which do the most to create long-term problems in software.
There are are still more reasons that source-code–level bug reporting tends to be very efficient. They center around the fact that a single error can often have multiple possible symptoms, manifesting differently depending on details of the user's usage pattern and environment. Such errors tend to be exactly the sort of complex and subtle bugs (such as dynamic-memory-management errors or nondeterministic interrupt-window artifacts) that are hardest to reproduce at will or to pin down by static analysis, and which do the most to create long-term problems in software.
 
소스 코드 레벨 버그 리포트가 매우 효율적인 편이라는 더 많은 이유가 있습니다. 그들은 하나의 오류가 종종 사용자의 사용 패턴과 환경의 세부사항에 따라 다르게 나타나는 증상에 초점을 맞춥니다. 그러한 오류는 꼭 어떤 복잡하고 미묘한 버그( 동적-메모리-관리 오류 또는 비결정적 인터럽트-윈도우 아티팩트 같은 ) 인데, 정적 분석 기법을 통해 마음대로 재생산 하거나 고정시키기 가장 어려우며, 소프트웨어에서 장기적 문제를 발생시키는데 가장 큰 역할을 합니다.
 
A tester who sends in a tentative source-code–level characterization of such a multi-symptom bug (e.g. "It looks to me like there's a window in the signal handling near line 1250" or "Where are you zeroing that buffer?") may give a developer, otherwise too close to the code to see it, the critical clue to a half-dozen disparate symptoms. In cases like this, it may be hard or even impossible to know which externally-visible misbehaviour was caused by precisely which bug—but with frequent releases, it's unnecessary to know. Other collaborators will be likely to find out quickly whether their bug has been fixed or not. In many cases, source-level bug reports will cause misbehaviours to drop out without ever having been attributed to any specific fix.
A tester who sends in a tentative source-code–level characterization of such a multi-symptom bug (e.g. "It looks to me like there's a window in the signal handling near line 1250" or "Where are you zeroing that buffer?") may give a developer, otherwise too close to the code to see it, the critical clue to a half-dozen disparate symptoms. In cases like this, it may be hard or even impossible to know which externally-visible misbehaviour was caused by precisely which bug—but with frequent releases, it's unnecessary to know. Other collaborators will be likely to find out quickly whether their bug has been fixed or not. In many cases, source-level bug reports will cause misbehaviours to drop out without ever having been attributed to any specific fix.
(JeongSeockHwa)Complex multi-symptom errors also tend to have multiple trace paths from surface symptoms back to the actual bug. Which of the trace paths a given developer or tester can chase may depend on subtleties of that person's environment, and may well change in a not obviously deterministic way over time. In effect, each developer and tester samples a semi-random set of the program's state space when looking for the etiology of a symptom. The more subtle and complex the bug, the less likely that skill will be able to guarantee the relevance of that sample.
이러한 다중 증상 버그의 시험적인 소스 코드 레벨 특성화(예: **1250라인 근처 시그널 처리 중에 창이 있는 것 같습니다** 또는 **그 버퍼를 어디서 초기화 합니까?**)를 보내는 테스터는 코드에 너무 가까운 나머지 볼 수 없었던 개발자에게 6가지의 증상에 대한 중요한 단서를 제공해 줄 수 있습니다. 이러한 경우에는 어떤 버그로 인해 외부에서 볼 수 있는 오작동이 발생했는지 파악하는 것은 어렵거나 불가능하지만, 자주 배포 된다면 알 필요는 없습니다. 다른 공동 작업자들이 그런 버그가 수정되었는지 빨리 알아 낼 수 있습니다. 많은 경우에, 소스 레벨 버그 리포트는 특정 수정 사항에 기인하지 않고 오작동을 삭제합니다.
 
 
Complex multi-symptom errors also tend to have multiple trace paths from surface symptoms back to the actual bug. Which of the trace paths a given developer or tester can chase may depend on subtleties of that person's environment, and may well change in a not obviously deterministic way over time. In effect, each developer and tester samples a semi-random set of the program's state space when looking for the etiology of a symptom. The more subtle and complex the bug, the less likely that skill will be able to guarantee the relevance of that sample.
 
 
복잡하고 다중 증상 오류들은 표면적인 증상들부터 실제로는 버그까지 다양한 트레이스 경로를 가지고 있다. 일부 개발자나 검사자가 추적할 수 있는 트레이스 경로들은 당사자의 환경의 세부사항들로 인해 달라질 수 있으며, 시간이 지나면서 확실하게 결정론적인 방식이 아닌 것으로 변하는 것도 당연하다. 실제로 각 개발자와 검사자는 증상의 원인을 찾을 때 프로그램의 상황들을 반 무작위로 샘플링한다. 버그가 더 미묘하고 복잡할수록, 그 기술이 샘플의 타당성을 보장하기가 힘들 것이다.
For simple and easily reproducible bugs, then, the accent will be on the "semi" rather than the "random"; debugging skill and intimacy with the code and its architecture will matter a lot. But for complex bugs, the accent will be on the "random". Under these circumstances many people running traces will be much more effective than a few people running traces sequentially—even if the few have a much higher average skill level.
For simple and easily reproducible bugs, then, the accent will be on the "semi" rather than the "random"; debugging skill and intimacy with the code and its architecture will matter a lot. But for complex bugs, the accent will be on the "random". Under these circumstances many people running traces will be much more effective than a few people running traces sequentially—even if the few have a much higher average skill level.
 
단순하고 쉽게 복제할 수 있는 버그의 경우, 강조점은 **랜덤**이 아닌 **세미**에 있을 것이다; 이 경우 디버깅 기술과 코드와 구조에 대한 친밀함은 많은 문제를 일으킬 것이다. 그러나 복잡한 버그의 경우 강조점은 이 **랜덤**에 있을 것이다. 이러한 상황에서, 소수의 사람들의 평균 기술 수준이 훨씬 높다 하더라도 다수의 사람들이 트레이스를 다루는 것이 소수의 사람이 트레이스를 다루는 것보다 훨씬 더 영향을 미칠 것이다.
 
This effect will be greatly amplified if the difficulty of following trace paths from different surface symptoms back to a bug varies significantly in a way that can't be predicted by looking at the symptoms. A single developer sampling those paths sequentially will be as likely to pick a difficult trace path on the first try as an easy one. On the other hand, suppose many people are trying trace paths in parallel while doing rapid releases. Then it is likely one of them will find the easiest path immediately, and nail the bug in a much shorter time. The project maintainer will see that, ship a new release, and the other people running traces on the same bug will be able to stop before having spent too much time on their more difficult traces [RJ].
This effect will be greatly amplified if the difficulty of following trace paths from different surface symptoms back to a bug varies significantly in a way that can't be predicted by looking at the symptoms. A single developer sampling those paths sequentially will be as likely to pick a difficult trace path on the first try as an easy one. On the other hand, suppose many people are trying trace paths in parallel while doing rapid releases. Then it is likely one of them will find the easiest path immediately, and nail the bug in a much shorter time. The project maintainer will see that, ship a new release, and the other people running traces on the same bug will be able to stop before having spent too much time on their more difficult traces [RJ].
 
다른 표면적인 증상부터 버그들에 대한 트레이스 경로들을 따라감에 대한 어려움이 그러한 증상을 살펴보는 방법만으로는 예측할 수 없게 크게 많아진다면 이 효과는 크게 증폭될 것이다. 그러한 경로들을 순차적으로 샘플링하는 1인 개발자는 첫 번째 시도부터 쉬운 것도 까다로운 트레이스 경로를 선택하는 것처럼 보일지도 모른다. 반면에, 많은 사람들이 급속한 버전들이 출시함과 동시에 트레이스 경로를 추적하는 중이라고 가정하자. 그러면 그들 중 한명이 바로 가장 쉬운 경로를 찾아내 더 짧은 시간 안에 버그를 잡을 수 있을 것이다. 프로젝트 관리자는 새로운 버전을 배포하고나면 동일한 버그에 대한 트레이스를 다루고있는 다른 사람들이 더 까다로운 트레이스에 너무 많은 시간을 소비하기 전에 멈출 수 있게 조치할 것이다.
 
## 장미가 장미다우려면
## 장미가 장미다우려면
Having studied Linus's behavior and formed a theory about why it was successful, I made a conscious decision to test this theory on my new (admittedly much less complex and ambitious) project.
Having studied Linus's behavior and formed a theory about why it was successful, I made a conscious decision to test this theory on my new (admittedly much less complex and ambitious) project.
Loading