Bedömning av ärenden¶
Django använder Trac för att hantera arbetet med kodbasen. Trac är en trädgård som sköts av gemenskapen med de buggar som folk har hittat och de funktioner som Django har beslutat att lägga till. Som i alla trädgårdar finns det ibland ogräs som ska rensas bort och ibland blommor och grönsaker som behöver plockas. Vi behöver din hjälp för att skilja det ena från det andra, och i slutändan gynnas vi alla tillsammans.
Precis som i alla trädgårdar kan vi sträva efter perfektion, men i verkligheten finns det inget sådant. Även i den mest orörda trädgård finns det fortfarande sniglar och insekter. I en gemensam trädgård finns det också hjälpsamma människor som - med de bästa avsikter - gödslar ogräset och förgiftar rosorna. Det är hela samhällets uppgift att sköta sig självt, hålla problemen på ett minimum och utbilda dem som kommer in i gemenskapen så att de kan bli värdefulla bidragande medlemmar.
På samma sätt, även om vi strävar efter att Trac ska vara en perfekt representation av Djangos framsteg, erkänner vi att detta inte kommer att hända. Genom att distribuera belastningen av Trac-underhåll till gemenskapen accepterar vi att det kommer att finnas misstag. Trac är ”mestadels korrekt”, och vi tar hänsyn till det faktum att det ibland kommer att vara fel. Det är helt okej. Vi är perfektionister med deadlines.
Vi förlitar oss på att gemenskapen fortsätter att delta, håller ärenden så korrekta som möjligt och tar upp frågor för diskussion på Django Forum när det finns förvirring eller oenighet.
Django är ett gemenskapsprojekt och alla bidrag hjälper till. Vi kan inte göra det här utan dig!
Arbetsflöde för triagering¶
Unfortunately, not all reports in the ticket tracker provide all the required details. A number of tickets have proposed solutions, but those don’t necessarily meet all the requirements adhering to the guidelines for contributing.
Ett sätt att hjälpa till är att trimma ärenden som har skapats av andra användare.
Det mesta av arbetsflödet är baserat på konceptet med en ärendes triage stages. Varje steg beskriver var i sin livstid ett visst ärende befinner sig vid varje tidpunkt. Tillsammans med en handfull flaggor berättar detta attribut enkelt för oss vad och vem varje ärende väntar på.
Eftersom en bild säger mer än tusen ord börjar vi där:
We have four roles in this diagram. Maintainers (also known as Fellows) usually take part in all of them, but anyone in the Django community can participate in any role except merger. The merger role is granted by a vote of the Steering Council.
Triagers: anyone can take on this role by checking whether a ticket describes a real issue and keeping the tracker organized.
Bug fixers: anyone can contribute by opening a pull request and working on a solution for a ticket.
Reviewers: anyone can review pull requests and suggest improvements.
Mergers: people with commit access who make the final decision to merge a change.
Our Trac system is intentionally open to the public, and anyone can help by working on tickets. Django is a community project, and we encourage triage and collaboration by the community. This could be you!
For example, here’s the typical lifecycle of a ticket:
Alice creates a ticket and opens an incomplete pull request (missing tests, incorrect implementation).
Bob reviews the pull request, marks the ticket as ”Accepted”, sets the flags ”needs tests” and ”patch needs improvement”, and leaves a comment explaining how Alice can improve the patch. This puts the ticket automatically into the ”waiting on author” queue within the ”accepted” stage.
Alice updates the pull request, adding tests (but not yet fixing the implementation), and removes the two flags. The ticket moves into the ”needs PR review” queue.
Charlie reviews the pull request, sets the ”patch needs improvement” flag again, and leaves another comment suggesting changes to the implementation. The ticket moves back to the ”waiting on author” queue.
Alice updates the pull request again, this time fixing the implementation, and removes the ”patch needs improvement” flag. The ticket moves once more into the ”needs PR review” queue.
Daisy granskar pull request och markerar ärendet som ”Redo för incheckning”.
Jacob, a merger, reviews and merges the pull request.
Some tickets move through these steps quickly, while others take more time and discussion. Each contribution helps Django improve.
Triage-stadier¶
Nedan beskriver vi mer i detalj de olika steg som ett ärende kan gå igenom under sin livstid.
Ej Recenserade¶
The ticket has not been reviewed by anyone who felt qualified to make a judgment about whether the ticket contained a valid issue or ought to be closed for any reasons. Unreviewed tickets appear in the ”triage” queue.
Accepterad¶
The absolute meaning of ”accepted” is that the issue described in the ticket is valid and actionable. It is broken out into three queues:
Needs Patch (Accepted + No Flags)
Ärendet är giltigt, men ingen har skickat in en patch för det ännu. Ofta innebär detta att du kan börja skriva en fix för den. Detta är i allmänhet mer sant för accepterade buggar än accepterade funktioner. Ett ärende för en bugg som har accepterats innebär att problemet har verifierats av minst en triager som en legitim bugg - och bör förmodligen åtgärdas om möjligt.
För nya funktioner bör accepterade ärenden endast existera efter att idén har gått igenom den lämpliga processen för att föreslå nya funktioner och fått godkännande av gemenskapen och Steering Council, eller accepterats i en DEP.
Needs PR Review (Accepted + Has Patch)
Ärendet väntar på att folk ska granska den medföljande lösningen. Detta innebär att ladda ner patchen och prova den, verifiera att den innehåller tester och dokument, köra testsviten med den medföljande patchen och lämna feedback på ärendet.
Waiting On Author (Accepted + Has Patch + Needs fixes)
Detta innebär att ärendet har granskats och att det har konstaterats att det behöver ytterligare arbete. ”Behöver testas” och ”Behöver dokumenteras” är självförklarande. ”Patch needs improvement” åtföljs i allmänhet av en kommentar i ärendet som förklarar vad som behövs för att förbättra koden.
Redo för incheckning¶
Ärendet granskades av någon annan medlem av gemenskapen än den person som levererade patchen och ansågs uppfylla alla krav för ett commit-ready bidrag. En fusion måste nu genomgå en sista granskning innan den kan skickas in.
Det finns många pull requests. Det kan ta ett tag för din patch att bli granskad. Se Bidra med kod FAQ för några idéer här.
En dag/kanske¶
Detta steg visas inte i diagrammet. Det används sparsamt för att hålla reda på långsiktiga förändringar.
Dessa ärenden är ovanliga och generellt sett mindre användbara eftersom de inte beskriver konkreta problem som kan åtgärdas.
Andra triageattribut¶
Ett antal flaggor, som visas som kryssrutor i Trac, kan ställas in på ett ärende:
Har lapp¶
This means the ticket has an associated solution. These will be reviewed to ensure they adhere to the documented guidelines.
De följande tre fälten (Behöver dokumentation, Behöver tester, Patch behöver förbättras) gäller endast om en patch har levererats.
Behov av dokumentation¶
Den här flaggan används för ärenden med korrigeringar som behöver tillhörande dokumentation. Fullständig dokumentation av funktioner är en förutsättning för att vi ska kunna checka in dem i kodbasen.
Behov av tester¶
Detta flaggar för att patchen behöver associerade enhetstester. Återigen, detta är en obligatorisk del av ett giltigt bidrag.
Patch behöver förbättras¶
Den här flaggan betyder att även om ärendet har en lösning, är den inte riktigt redo för incheckning. Det kan betyda att patchen inte längre tillämpas korrekt, att det finns ett fel i implementeringen eller att koden inte uppfyller våra standarder.
Lätt att välja¶
Ärenden som skulle kräva små, enkla förändringar.
Typ¶
Ärenden bör kategoriseras efter typ mellan:
- Ny funktion
För att du tillför något nytt.
- Insekt
För när en befintlig sak är trasig eller inte beter sig som förväntat.
- Uppstädning/optimering
För när inget är trasigt men något kan göras renare, bättre, snabbare, starkare.
Komponent¶
Ärenden bör klassificeras i komponenter som indikerar vilket område av Django-kodbasen de tillhör. Detta gör att ärendena blir bättre organiserade och lättare att hitta.
Allvarlighetsgrad¶
Attributet severity används för att identifiera blockerare, det vill säga problem som bör åtgärdas innan nästa version av Django släpps. Vanligtvis är dessa problem buggar som orsakar regressioner från tidigare versioner eller potentiellt orsakar allvarliga dataförluster. Detta attribut används ganska sällan och de allra flesta ärenden har en allvarlighetsgrad på ”Normal”.
Version¶
The version attribute indicates the earliest version in which the bug was reproduced. During triage, this field can be updated, but there is no need to make further updates when that version goes out of support. The field should not be reset to ”dev” to show the issue still exists: instead, the tested commit hash can be noted in a comment.
UI/UX¶
Den här flaggan används för ärenden som rör frågor om användargränssnitt och användarupplevelser. Den här flaggan skulle till exempel vara lämplig för användarvänliga funktioner i formulär eller administratörsgränssnittet.
Cc¶
Du kan lägga till ditt användarnamn eller din e-postadress i det här fältet för att bli meddelad när nya bidrag görs till ärendet.
Nyckelord¶
Med det här fältet kan du märka ett ärende med flera nyckelord. Det kan t.ex. vara användbart för att gruppera flera ärenden på samma tema. Nyckelord kan antingen separeras med kommatecken eller mellanslag. Nyckelordssökning hittar nyckelordssträngen var som helst i nyckelorden. Om du t.ex. klickar på ett ärende med nyckelordet ”form” får du fram liknande ärenden som är märkta med nyckelord som innehåller strängar som ”formset”, ”modelformset” och ”ManagementForm”.
Stänga ärenden¶
När ett ärende har avslutat sin användbara livscykel är det dags att stänga det. Att stänga ett ärende är dock ett stort ansvar. Du måste vara säker på att problemet verkligen är löst, och du måste komma ihåg att den som rapporterat ärendet kanske inte är glad över att få sitt ärende stängt (om det inte är åtgärdat!). Om du inte är säker på om du ska stänga ett ärende, lämna en kommentar med dina tankar istället.
Om du stänger ett ärende bör du alltid kontrollera följande:
Försäkra dig om att problemet är löst.
Lämna en kommentar med en förklaring till beslutet att stänga ärendet.
Om det finns något sätt de kan förbättra ärendet för att öppna det igen, låt dem veta det.
Om ärendet är en dubblett ska du hänvisa till det ursprungliga ärendet. Korsreferera också det stängda ärendet genom att lämna en kommentar i det ursprungliga ärendet - detta gör det möjligt att få tillgång till mer relaterad information om den rapporterade buggen eller den begärda funktionen.
**Var artig Ingen gillar att få sitt ärende avslutat. Det kan vara frustrerande eller till och med avskräckande. Det bästa sättet att undvika att avskräcka människor från att bidra till Django är att vara artig och vänlig och att ge förslag på hur de kan förbättra detta ärende och andra ärenden i framtiden.
Ett ärende kan lösas på flera olika sätt:
- fixerad
Används när en patch har rullats in i Django och problemet är åtgärdat.
- ogiltig
Används om det visar sig att ärendet är felaktigt. Detta innebär att problemet i ärendet faktiskt är resultatet av ett användarfel, eller beskriver ett problem med något annat än Django, eller inte alls är en buggrapport eller funktionsbegäran (till exempel skickar vissa nya användare supportfrågor som ärenden).
- wontfix
Används när någon beslutar att begäran inte är lämplig för övervägande i Django. Ibland stängs ett ärende som ”wontfix” med en begäran om att rapportören ska starta en diskussion på Django Forum om de känner annorlunda än den motivering som ges av den person som stängde ärendet. Andra gånger föregås beslutet att stänga ett ärende av en diskussion. Använd alltid forumet för att få ett samförstånd innan du återöppnar ärenden som stängts som ”wontfix”.
- duplicera
Används när ett annat ärende täcker samma fråga. Genom att stänga dubbla ärenden håller vi all diskussion på ett ställe, vilket är till hjälp för alla.
- arbetar för
Används när ärendet inte innehåller tillräckligt med detaljer för att replikera den ursprungliga buggen.
- behöver information
Används när ärendet inte innehåller tillräckligt med information för att replikera det rapporterade problemet, men fortfarande kan vara giltigt. Ärendet bör öppnas på nytt när mer information har lämnats.
Om du tror att ärendet stängdes av misstag - eftersom du fortfarande har problemet, eller det har dykt upp någon annanstans, eller triagerarna har gjort ett misstag - öppna ärendet igen och ge ytterligare information. Återigen, öppna inte ärenden som har markerats som ”wontfix” och ta med problemet till Django Forum istället.
How can I help with development?¶
The development process is primarily driven by community members. Really, ANYONE can help.
Om du vill engagera dig kan du börja med att skapa ett konto på Trac. Om du har ett konto men har glömt ditt lösenord kan du återställa det genom att använda sidan för återställning av lösenord.
Då kan du hjälpa till genom att:
Stänga ”Ogranskade” ärenden som ”ogiltiga”, ”arbetsform”, ”duplikat” eller ”wontfix”.
Stänga ”ogranskade” ärenden som ”behöver information” när beskrivningen är för knapphändig för att kunna åtgärdas.
Korrigering av flaggorna ”Behöver testas”, ”Behöver dokumenteras” eller ”Har patch” för ärenden där de är felaktigt inställda.
Ställ in flaggan ”Easy pickings” för ärenden som är små och relativt okomplicerade.
Ange typ av ärenden som fortfarande är okategoriserade.
Kontrollera att gamla ärenden fortfarande är giltiga. Om ett ärende inte har varit aktivt på länge är det möjligt att problemet har åtgärdats men att ärendet ännu inte har stängts.
Identifiera trender och teman i ärendena. Om det finns många felrapporter om en viss del av Django, kan det tyda på att vi bör överväga att refaktorisera den delen av koden. Om en trend håller på att växa fram bör du ta upp den till diskussion (med hänvisning till de relevanta ärendena) på Django Forum.
Kontrollera att de lösningar som andra har skickat in är korrekta. Om de är korrekta och även innehåller lämplig dokumentation och tester flyttar du dem till steget ”Redo för kontroll”. Om de inte är korrekta lämnar du en kommentar där du förklarar varför och sätter motsvarande flaggor (”Patch needs improvement”, ”Needs tests” etc.).
Observera
Sidan Reports innehåller länkar till många användbara Trac-frågor, inklusive flera som är användbara för att triagera ärenden och granska förslag som föreslås ovan.
You can also find more Råd till nya bidragsgivare.
Vi ber dock alla allmänna gemenskapsmedlemmar som arbetar i ärendedatabasen att göra följande
Främja inte dina egna ärenden till ”Redo för incheckning”. Du kan markera andras ärenden som du har granskat som ”Redo för incheckning”, men du bör få minst en annan medlem av gemenskapen att granska en patch som du skickar in.
Reversera inte ett beslut utan att skicka ett meddelande till Django Forum för att hitta konsensus.
Om du är osäker på om du bör göra en ändring, gör inte ändringen utan lämna istället en kommentar med dina farhågor på ärendet eller skicka ett meddelande till Django Forum. Det är okej att vara osäker, men din input är fortfarande värdefull.
Bisektion av en regression¶
En regression är en bugg som finns i en nyare version av Django men inte i en äldre. En mycket användbar information är den commit som introducerade regressionen. Att veta vilken commit som orsakade förändringen i beteende hjälper till att identifiera om förändringen var avsiktlig eller om det var en oavsiktlig bieffekt. Så här kan du avgöra detta.
Börja med att skriva ett regressionstest för Djangos testsvit för den aktuella frågan. Vi låtsas till exempel att vi felsöker en regression i migreringar. När du har skrivit testet och bekräftat att det misslyckas på den senaste huvudgrenen, lägg det i en separat fil som du kan köra fristående. I vårt exempel låtsas vi att vi har skapat tests/migrations/test_regression.py, som kan köras med:
$ ./runtests.py migrations.test_regression
Därefter markerar vi den aktuella punkten i historien som ”dålig” eftersom testet misslyckas:
$ git bisect bad
You need to start by "git bisect start"
Do you want me to do it for you [Y/n]? y
Nu måste vi hitta en punkt i git-historiken innan regressionen infördes (dvs. en punkt där testet godkänns). Använd något som git checkout HEAD~100 för att kolla in en tidigare revision (100 commits tidigare, i det här fallet). Kontrollera om testet misslyckas. Om så är fallet markerar du den punkten som ”dålig” (git bisect bad), checkar sedan ut en tidigare revision och kontrollerar igen. När du hittar en revision där ditt test godkänns markerar du den som ”bra”:
$ git bisect good
Bisecting: X revisions left to test after this (roughly Y steps)
...
Nu är vi redo för den roliga delen: att använda git bisect run för att automatisera resten av processen:
$ git bisect run tests/runtests.py migrations.test_regression
Du bör se git bisect använda en binär sökning för att automatiskt kontrollera revisioner mellan de bra och dåliga begåvningarna tills den hittar den första ”dåliga” begåvningen där testet misslyckas.
Rapportera nu dina resultat på Trac-ärendet och inkludera regressionstestet som en bilaga. När någon skriver en fix för buggen kommer de redan att ha ditt test som utgångspunkt.