前端大型开源项目_在大型开源项目中管理问题
前端大型開源項目
We’re honored by the amount of positive feedback we get from folks using Flutter. As one of the largest active repositories on GitHub, we have a relatively unique challenge and we thought you might find it interesting to learn our philosophy and approach to how we’re dealing with issues at this scale, what changes we’re making to deal with the project growth, and some helpful tips for filing issues to maximize their value.
我們很高興收到來自使用Flutter的人們的積極反饋。 作為GitHub上最大的活動存儲庫之一,我們面臨一個相對獨特的挑戰,我們認為您可能會發現有趣的是了解我們的哲學和方法以了解我們如何處理這種規模的問題,正在做出哪些更改隨著項目的發展,以及一些有用的技巧,可以提出問題以最大程度地發揮其價值。
Sometimes developers attempt to use the total number of public logged issues as a measure of the overall quality of the project. We think this number is poorly correlated with project health, and want to explain why, counter to expectation, a larger number of issues can be a signal of a high-quality, popular project.
有時,開發人員嘗試使用公開記錄的問題總數來衡量項目的整體質量。 我們認為該數字與項目運行狀況的相關性很差,并想解釋為什么與預期相反,大量問題可能是高質量,受歡迎的項目的信號。
Lastly, we want to use this blog post to share some concrete changes we’ve made in recent months: more active scrubbing of our backlog, accomplishing (and holding to) zero-bug-bounce for unassigned issues, and a new prioritization scheme that better aligns with how we believe our customers think about priorities.
最后,我們想使用此博客文章來分享我們最近幾個月進行的一些具體更改:更積極地清理積壓工作,完成(并保持)針對未分配問題的零缺陷反彈以及新的優先級排序方案更好地與我們認為客戶對優先事項的想法保持一致。
Flutter如何使用GitHub (How Flutter uses GitHub)
It’s common in today’s software development world for teams to keep a backlog of issues submitted both by team members and users: this backlog is the sum total of bugs, feature requests, and technical debt facing the team. Flutter is no different: we use GitHub as our backlog. If it’s a bug, an idea for a new feature, or something in between, it’s filed as an issue in our issue database on GitHub.
在當今的軟件開發世界中,團隊經常會積壓團隊成員和用戶提交的問題,這很普遍:此積壓是團隊所面臨的bug,功能請求和技術債務的總和。 Flutter也不例外:我們使用GitHub作為待辦事項。 如果是錯誤,新功能的想法或介于兩者之間的東西,則將其作為問題提交到GitHub上的問題數據庫中 。
Each of these issues starts with you, or one of Flutter’s contributors. Contributors and users file issues about Flutter or Flutter’s API documentation in the flutter/flutter issue tracker, and issues about Flutter’s website (flutter.dev) in the flutter/website issue tracker.
每個問題都從您或Flutter的貢獻者之一開始。 貢獻者和用戶在flutter / flutter問題跟蹤器中提交有關Flutter或Flutter API文檔的問題 ,并在flutter / website問題跟蹤器中 提交有關Flutter網站( flutter.dev )的問題 。
There are three special considerations about how we manage issues on GitHub, which contributes to a large overall number:
關于我們如何在GitHub上處理問題,有三個特殊的考慮因素,這些因素導致了很多問題:
We use one repository for all issues except for those involving the developer toolchain and website. Issues with Android, iOS, Windows, web, macOS, and Linux; framework and engine; API documentation and plugins, are all logged in the same flutter/flutter repository.
除涉及開發人員工具鏈和網站的問題外,我們對所有問題使用一個資源庫。 Android,iOS,Windows,Web,macOS和Linux的問題; 框架和引擎; API文檔和插件都記錄在相同的Flutter / Flutter存儲庫中。
Flutter的分流過程 (Flutter’s triage process)
The flutter/flutter issues are triaged by a member of the team: perhaps a volunteer, or one of the folks at Nevercode who have been helping us with triage, or by a Google employee (or an employee of another company). In triage, we assign as many labels to the issue as we can.
顫動/顫動問題由團隊的一個成員進行分類:也許是志愿者,或者是Nevercode中一直在幫助我們進行分類的人員中的一個,或者由Google員工(或另一家公司的員工)進行了分類。 在分類中,我們為問題分配了盡可能多的標簽。
Some labels direct the issue for secondary triage. For example, the engine label directs the issue to the engine team for secondary triage. Other labels indicate additional attributes, such as whether the issue is a feature request or a possible enhancement to increase the team’s velocity (as I write this, there are over 500 issues with that label).
一些標簽將問題定向為輔助分類。 例如, 引擎標簽將問題定向到引擎團隊進行二次分類。 其他標簽指示其他屬性,例如問題是功能請求還是可能的增強以提高團隊速度(在我撰寫本文時, 該標簽有500多個問題 )。
Between primary and secondary triage, we also assign a priority label for issues filed against the code base or API documentation. Similar to other bug trackers, we use a ranked priority scheme, with priorities ranging from P0 to P6:
在主要分類和次要分類之間,我們還為根據代碼庫或API文檔提出的問題分配了優先級標簽。 與其他錯誤跟蹤器類似,我們使用排名優先級方案,優先級范圍從P0到P6:
The P0 label indicates top-priority issues such as build breaks or severe performance regressions that must be addressed immediately.
P0標簽指示必須立即解決的最高優先級問題,例如構建中斷或嚴重的性能下降。
The P1 label indicates that the issue requires timely attention, such as breakage in a major feature used by the majority of our users, or an issue blocking a strategic partner. We aim to fix or remediate P1 bugs within the current milestone.
P1標簽表示該問題需要及時關注,例如,大多數用戶使用的主要功能出現故障,或者該問題阻礙了戰略合作伙伴。 我們旨在修復或修復當前里程碑內的P1錯誤。
The P2 label indicates major features or issues that affect a significant subset of our users. Like P1 issues, we aim to fix or remediate these within the current milestone.
P2標簽表示影響我們大部分用戶的主要功能或問題。 與P1問題一樣,我們的目標是在當前里程碑內修復或修復這些問題。
The P3 label indicates an issue currently on our timeline for an upcoming release that is at the top of our work list. Many issues we are actively working on bear this label, and most should have a milestone indicating when we think they’ll land.
P3標簽表示我們時間表上當前存在的問題,該問題位于我們工作清單的頂部。 我們正在積極研究的許多問題都帶有這個標簽,并且大多數問題都應具有一個里程碑,指示我們何時認為它們會降落。
The P4 label indicates issues that we agree are important to work on, but not at the top of the work list. This is the default level for bugs.
P4標簽表示我們同意處理的重要問題,但不在工作列表的頂部。 這是錯誤的默認級別。
The P5 label indicates issues we think are valid but not critical. This is the default level for new feature requests.
P5標簽表示我們認為有效但非關鍵的問題。 這是新功能請求的默認級別。
The P6 label indicates valid issues that are unlikely to ever be worked on, but kept open in the event that a contributor might want to tackle it.
P6標簽表示不可能解決的有效問題,但是在有貢獻者希望解決的情況下,這些問題會一直公開存在。
This schema is relatively new, replacing our three-axis system of committed milestones, `customer:` and `severe:` labels. In the process of establishing it, we auto-prioritized a large number of issues based on committed milestones and other labels.
這種模式是相對較新的,代替了我們的三軸承諾里程碑:“ customer:”和“ severe:”標簽。 在建立過程中,我們根據已落實的里程碑和其他標簽自動為大量問題確定了優先級。
通過錯誤計數來衡量質量 (Measuring quality by bug count)
Because Flutter uses GitHub as a fully open issue tracker, with both bugs and feature requests, there’s no direct correlation between issue counts and product quality. Other open source projects, such as Chromium and TensorFlow, also developed fully in the open, have large issue counts as well. If anything, the large number of issues suggests that the project is active and vibrant as users engage in the product finding both bugs and things they’d like to improve.
因為Flutter使用GitHub作為具有漏洞和功能請求的完全開放的問題跟蹤器,所以問題計數與產品質量之間沒有直接關聯。 其他開放源代碼項目(例如Chromium和TensorFlow )也完全在開放狀態下開發,發行量也很大。 如果有的話,大量的問題表明,隨著用戶參與產品發現錯誤和需要改進的事情,該項目是活躍而充滿活力的。
It’s difficult to make apples-to-apples comparisons, though. Some projects proactively close open issues they’re not going to address; others keep their issue database in secret, and others use different projects for different kinds of issues. As already noted, we track feature enhancements and bugs in the same repository; we also use one repository across tools, Android, iOS, first-party plugins, and so forth.
不過,很難進行蘋果之間的比較。 一些項目主動解決了他們不會解決的未解決問題。 其他人將其問題數據庫保密,其他人則針對不同類型的問題使用不同的項目。 如前所述,我們在同一個存儲庫中跟蹤功能增強和錯誤。 我們還跨工具,Android,iOS,第一方插件等使用一個存儲庫。
A better metric to gauge the health of an open-source project is to look at the number of issues closed vs. the number of issues currently open. As of this writing (early July 2020), we have 7,757 issues open and 32,485 issues closed. The rate of closure has increased over the last year, although has flattened somewhat in recent months:
衡量開源項目運行狀況的更好指標是查看已解決問題的數量與當前已解決問題的數量。 截至撰寫本文時(2020年7月上旬),我們有7,757個期刊已發行,有32,485個期刊已關閉。 在過去的一年中,關閉率有所提高,盡管最近幾個月有所下降:
The dip in December is due to the holiday season; many contributors at Google and elsewhere take a vacation in that month. Regardless, the year-over-year average is 1314 issues closed, and if you look at the six-month average, you see that it’s considerably higher, at 1604 issues closed every month.
12月的下降是由于假期。 該月,Google和其他地方的許多貢獻者都休假了。 無論如何,與去年同期相比,平均有1314個問題被關閉,如果您查看六個月的平均水平,您會發現它的平均值要高得多,每個月有1604個問題。
了解我們的未解決問題 (Understanding our open issues)
To get a better understanding of the kinds of issues we face, the Flutter leads recently took a random sample of 1,200 open issues and retriaged them. In the process, we learned the following:
為了更好地了解我們面臨的問題,Flutter領導最近對1200個未解決問題進行了隨機抽樣,并對其進行了重試。 在此過程中,我們了解了以下內容:
- 32% of the issues filed came from core contributors on the project. Many of these are future work items, such as features, ways to improve the product, or improvements to our team’s tooling and infrastructure that would increase our own developer velocity. 提交的問題中有32%來自該項目的核心貢獻者。 其中許多是未來的工作項目,例如功能,改進產品的方法或對我們團隊的工具和基礎結構的改進,這將提高我們自己的開發人員的速度。
- The average Flutter contributor filed 7.4 bugs, while the average user of Flutter who had filed any bugs had filed 1.2 bugs. Flutter貢獻者的平均提交了7.4個錯誤,而Flutter提交了任何錯誤的普通用戶都提交了1.2個錯誤。
- Of the issues we examined, some 25% were either support requests, clearly unactionable, or otherwise no longer valid (i.e., subsequent work fixed the issue or new product directions made the concern of the issue obsolete), which we were able to close. 在我們檢查的問題中,約有25%是支持請求,明顯無法采取行動或已不再有效(即,后續工作解決了該問題或新產品說明使對該問題的關注已過時),我們得以解決。
We’re continuing to work with Nevercode on grooming our backlog, both with recently filed issues and older issues. They have been very helpful in several ways:
無論是最近提交的問題還是較舊的問題,我們都將繼續與Nevercode一起整理積壓的訂單。 他們在幾個方面都非常有幫助:
- They actively create reproducible code for issues, helping other engineers look for ways to fix bona fide bugs in Flutter. 他們積極地為問題創建可重現的代碼,幫助其他工程師尋找方法來修復Flutter中的真實錯誤。
- They deduplicate bugs, closing duplicates after crosslinking them. 他們對重復數據進行重復數據刪除,并在交聯后關閉重復數據。
They close non-reproducible bugs, as well as requests for support (which should be directed to one of the channels listed at https://www.flutter.dev/community).
它們關閉了不可復制的錯誤以及支持請求(應將其定向到https://www.flutter.dev/community上列出的渠道之一)。
- They request additional information for unclear issues, closing those that are unactionable. 他們要求提供更多信息以解決不清楚的問題,并關閉無法解決的問題。
- As time permits, they help us cull our backlog of old issues, answering the same questions: Is it still an issue? Does it have a reproducible case? Is it a duplicate? 在時間允許的情況下,它們可以幫助我們消除積壓的舊問題,并回答相同的問題:這仍然是問題嗎? 有可復制的包裝盒嗎? 它是重復的嗎?
Together, we’ve learned some interesting things about the issues people file: Over the last two months, fully 55% of the issues filed don’t meet our criteria — they’re either requests for support or don’t have reproducible cases.
在一起,我們已經了解到有關人員提出的問題的一些有趣的事情:在過去的兩個月中,提交的問題中有55%完全不符合我們的標準-它們是請求支持或沒有可復制的案例。
For older issues, the Nevercode team has found that fewer issues were invalid or duplicated, likely explained by survivorship bias (issues that survive previous triages are likely not invalid or duplicate issues). Nonetheless, in their sample, 18% of the issues were invalid (either support requests or unactionable), and another 15% were duplicates. The lion’s share — up to 50% — reflects issues that have been subsequently addressed, suggesting that we can do a better job closing old issues as we add functionality and fix bugs.
對于較舊的問題,Nevercode團隊發現無效或重復的問題較少,這很可能是由于生存偏差(在以前的分類中幸存的問題可能不是無效或重復的問題)。 但是,在他們的樣本中,有18%的問題無效(支持請求或無法采取行動),另有15%的問題是重復的。 最多的份額-高達50%-反映了隨后已解決的問題,這表明我們在添加功能和修復錯誤時可以更好地解決舊問題。
發行優先級 (Issue prioritization)
As of this writing (early July 2020), here’s the breakdown of P0-P2 issues:
在撰寫本文時(2020年7月上旬),這是P0-P2問題的細分:
This chart shows a healthy number of issues that we’re actually working on with urgency. As you’d expect from a popular open-source project, there are a lot of other pieces of feedback in our issue database: here’s the breakdown of P3-P6 issues:
此圖顯示了我們正在緊急處理的大量健康問題。 正如您希望從一個受歡迎的開源項目中得到的那樣,我們的問題數據庫中還有很多其他反饋:這是P3-P6問題的細分:
The team is actively working on many of the P3 issues, as well as the higher-priority P0-P2 issues.
團隊正在積極處理許多P3問題以及優先級較高的P0-P2問題。
We still have a historical backlog of triaged unprioritized issues. Of these, we believe that most will likely fall into the P5 or P6 category, because as part of Nevercode’s triage efforts, they’ve escalated those that deserve immediate attention.
我們仍然有未分類優先級問題的歷史積壓。 在這些代碼中,我們認為大多數都可能屬于P5或P6類別,因為作為Nevercode分流工作的一部分,它們已將那些值得立即關注的問題升級。
Just because an issue makes it to secondary triage does not mean that the core engineering team has bandwidth to work on it. In secondary triage, we look at several things to determine what to do with an issue, including:
僅僅因為一個問題導致了二次分類,并不意味著核心工程團隊有足夠的帶寬來處理它。 在次級分類中,我們著眼于確定問題的幾件事,包括:
- What other work have we committed to? 我們還致力于其他哪些工作?
- How severe an issue is this? 這有多嚴重?
- How many people does it affect? 它會影響多少人?
- Is this issue for a specific customer? 這是特定客戶的問題嗎?
- How does working on this issue affect our roadmap and architecture? 解決此問題如何影響我們的路線圖和體系結構?
For details on how we accomplish this, you can see our previous blog post on the topic, “Issues, Bugs, and Backlogs”.
有關我們如何完成此操作的詳細信息,您可以查看我們以前的博客文章,主題為“問題,錯誤和積壓 ”。
您將如何提供幫助 (How you can help)
The Flutter issue database on GitHub isn’t just the team’s issue database, it’s the issue database for our entire community, so we all need to play a part in its health. Here are some things we can all do to help keep a check on the quality of issues in the database:
GitHub上的Flutter問題數據庫不僅僅是團隊的問題數據庫,它還是我們整個社區的問題數據庫,因此我們所有人都需要發揮其健康作用。 我們可以做一些事情來幫助檢查數據庫中問題的質量:
Don’t file an issue for support requests. Support requests should be raised in one of the channels we describe at https://flutter.dev/community. We actively close requests for support raised on GitHub.
不要提出支持請求的問題。 支持請求應通過我們在https://flutter.dev/community中描述的一種渠道提出。 我們正在積極關閉在GitHub上提出的支持請求。
File issues in the appropriate database: Flutter bugs, API documentation bugs, and feature requests in the flutter/flutter issue tracker, and feedback about the Flutter website or codelabs in the flutter/website issue tracker.
在適當的數據庫中記錄文件問題:Flutter / Flutter 問題跟蹤器中的Flutter錯誤,API文檔錯誤和功能請求,以及Flutter / Website問題跟蹤器中有關Flutter網站或代碼實驗室的反饋。
- When filing an issue, search to see if one already exists for the issue you’re having. If so, upvote it and comment if appropriate. The development team uses upvotes as a measure of interest when ranking issues for future work. 提交問題時,搜索以查看您所遇到的問題是否已經存在。 如果是這樣,請對其進行投票,并在適當的時候發表評論。 在對未來工作的問題進行排名時,開發團隊會使用upvotes作為關注度。
- Cross-linking is good! Feel free to crosslink related issues, either when filing new issues or when upvoting an issue you’ve encountered. Like upvoting, the team uses crosslinks in their investigations, and there’s a good chance that you see a relationship that others have missed. 交聯是好的! 在提交新問題或對遇到的問題進行投訴時,可以自由地交叉鏈接相關的問題。 就像投票一樣,團隊在調查中使用交叉鏈接,很可能您會看到其他人錯過的關系。
- Make sure that your bug contains everything the team needs to reproduce it. A minimally reproducible case is crucial for the team to be able to quickly get to the root of a bug. Explaining why a feature is important makes it more likely that the team will prioritize the work quickly. 確保您的錯誤包含團隊需要復制的所有內容。 對于團隊來說,最小的可重復性案例對于快速找到錯誤根源至關重要。 解釋功能為何如此重要的原因使團隊更有可能迅??速確定工作的優先級。
Consider helping the triage effort. See a bug you have time to reproduce? Try reproducing it on the latest stable and master, and let us know if it’s still a problem. See a related issue? Crosslink it. Want to write some code? Submit a PR with a unit test exhibiting the issue, or better yet, a unit test with a fix for the issue. We welcome help on managing issues, so if you’d like to help, see our contributing guide for detailed information on how you can join us in the triage process.
考慮幫助分類工作。 看到您有時間重現的錯誤嗎? 嘗試在最新的馬stable和母版上重現它,并告訴我們是否仍然存在問題。 看到相關問題? 交聯它。 想寫一些代碼嗎? 提交包含問題的單元測試的PR,或者更好的是,提交帶有問題修復程序的單元測試。 我們歡迎您提供有關處理問題的幫助,因此,如果您想提供幫助,請參閱我們的幫助指南,以詳細了解如何加入我們的分診流程。
Speaking for those working on Flutter, we’re in awe of the support you continue to give us in our vision to build ways to bring beautiful, performant applications to your users. Thanks so much for all that you do!
對于那些在Flutter上工作的人來說,我們對您繼續提供給我們的支持感到敬畏,我們將繼續為我們構想為用戶提供美觀,高性能的應用程序的方法。 非常感謝您所做的一切!
翻譯自: https://medium.com/flutter/managing-issues-in-a-large-scale-open-source-project-b3be6eecae2b
前端大型開源項目
總結
以上是生活随笔為你收集整理的前端大型开源项目_在大型开源项目中管理问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA8~17新特性
- 下一篇: Python连接mysql,插入数据时不