cpsc310 Introduction to SE Section Specification

Introduction to SE – Section Specification
Section Specification
insightUBC Section Specification 1. API
2. Managing course section data 2.1 Adding a dataset
2.2 Removing a dataset
2.3 Listing all datasets
3. Querying the data for insights
Valid Query argument to performQuery Query EBNF
Valid query keys
Simple example query
Complex example query
4. IInsightFacade.ts
5. Caching Progress (Persistence)
Change Log
01/22/24 – Updated the Caching Progress section
https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 1/28

1/29/24, 5:08 PM Introduction to SE – Section Specification
insightUBC Section Specification
UBC has a wide variety of courses. Manually viewing information about the courses is painful and slow. Students and Professors (users) would like to be able to query information about courses to gain insights into UBC. InsightUBC will provide a way for users to manage their course section data and query this data for insights.
Users will interact with your project through a xed API, dened through a provided interface,
. Very important: do not alter the given API (interface) in any way, as it is used to grade
your project!
The interface provides four methods: , , Users will manage their course section data through the methods
and users will query their data using the method
, and . and
The contents of the API le, , is given below in the IInsightFacade.ts section. Read the entire le carefully – it contains details about the expected parameters, what the methods should do and what specific error types to throw for failures.
For example, a user might write the following code to use your API:
2. Managing course section data
We allow users to perform three actions for managing their data: 1. Adding a dataset, so it is available for querying.
2. Listing all datasets that are available to query.
3. Removing a dataset, so it is no longer available for query.
Each of these actions has a corresponding API method dened in . 2.1 Adding a dataset
)”piz.snoitces-cbu/sevihcra/secruoser/crs”(eliFdaer.sf nruter
{ >rebmun= )rorre((hctac.
)swoRmun.!tesatad >= )tesatad((neht.
))”cbu” === di.tesatad >= )tesatad((dnif.stesatad >= )stesatad((neht.
))(stesataDtsil.)(edacaFthgisnI wen >= )((neht.
))snoitceS.dniKtesataDthgisnI
,tnetnoc ,”cbu”(tesataDdda.)(edacaFthgisnI wen >= )tnetnoc((neht.
))”46esab”(gnirtSot.reffub >= )reffub((neht.
st.edacaFthgisnII
yreuQmrofrep
tesataDtsil tesataDdda
tesataDevomer
yreuQmrofrep tesataDevomer tesataDtsil tesataDdda
st.edacaFthgisnII
st.edacaFthgisnII
https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 2/28

1/29/24, 5:08 PM Introduction to SE – Section Specification
Without data, there is nothing to search through for insights! Before a user can query, they will need to add data to the system. All valid course sections should be extracted from the dataset and stored such that they can later be queried.
The following method is dened in the interface le:
adds a dataset to the internal model, providing the id of the dataset, the string of the content of the dataset, and the kind of the dataset. Any invalid inputs should be rejected.
Each of the three arguments to addDataset are described below:
Valid ID argument to addDataset
A user can add multiple datasets to your project and they will be identied by the ID provided by the user. A valid
is an , dened in the EBNF (see below). In addition, an that is only whitespace is invalid. Valid Content argument to addDataset
The parameter is the entire zip le, in the format of a base64 string. That’s the entire zip le, all the data you need is contained in it. You should use the JSZip module to unzip, navigate through, and view the les inside.
A valid dataset:
Is a structured as a base64 string of a zip le. Contains at least one valid section.
A valid course:
Is a JSON formatted le.
Contains one or more valid sections.
Within a JSON formatted le, valid sections will be found within the key.
Is located within a folder called in the zip’s root directory.
A valid section:
Contains every eld which can be used by a query (see the “Valid Query Keys” section below).
If a eld you use in a section is present in the JSON but contains something counter-intuitive like empty string, it is still valid.
An example of a valid dataset which contains 64,612 valid UBC course sections can be found here. This data has been obtained from UBC PAIR and has not been modied in any way. The data is provided as a zip le: inside of the zip you will nd a le for each of the courses offered at UBC. Each of those le contains a JSON object containing the information about each section of the course.
Unzip the example valid dataset to see what a valid JSON formatted le looks like. You can use an online JSON
gnirtsdi di
>][gnirts][tesataDthgisnIgnirts][tluseRthgisnIdleifs | dleifm<_>gnirtsdi< gva_sesruoc dleifs | dleifm }"*C" :"tped_snoitces"{ :"SI" NOSIRAPMOCS TSIL_YEK SNMULOC gnirts*tupni yek s'REDRO .ksiretsa tpecxe ,retcarahc yna fo erom ro oreZ // *]*^[ =:: gnirtstupni .erocsrednu tpecxe ,retcarahc yna fo erom ro enO // +]_^[ =:: gnirtsdi 'diuu' | 'eltit' | 'rotcurtsni' | 'di' | 'tped' =:: dleifs 'raey' | 'tidua' | 'liaf' | 'ssap' | 'gva' =:: dleifm '"' dleifs '_' gnirtsdi '"' =:: yeks '"' dleifm '_' gnirtsdi '"' =:: yekm yeks | yekm =:: yek https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 6/28 1/29/24, 5:08 PM Introduction to SE - Section Specification https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 7/28 1/29/24, 5:08 PM Introduction to SE - Section Specification https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 8/28 Simple example query [:"SNMULOC" {:"SNOITPO" 79:"gva_snoitces" "gva_snoitces":"REDRO" "gva_snoitces" ,"tped_snoitces" The result for this would look like: ,} 96.79 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 76.79 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 35.79 :"gva_snoitces" ,"srun" :"tped_snoitces" { ,} 35.79 :"gva_snoitces" ,"srun" :"tped_snoitces" { ,} 5.79 :"gva_snoitces" ,"cude" :"tped_snoitces" { ,} 84.79 :"gva_snoitces" ,"htam" :"tped_snoitces" { ,} 84.79 :"gva_snoitces" ,"htam" :"tped_snoitces" { ,} 74.79 :"gva_snoitces" ,"spnc" :"tped_snoitces" { ,} 74.79 :"gva_snoitces" ,"spnc" :"tped_snoitces" { ,} 14.79 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 14.79 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 33.79 :"gva_snoitces" ,"srun" :"tped_snoitces" { ,} 33.79 :"gva_snoitces" ,"srun" :"tped_snoitces" { ,} 92.79 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 92.79 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 52.79 :"gva_snoitces" ,"htam" :"tped_snoitces" { ,} 52.79 :"gva_snoitces" ,"htam" :"tped_snoitces" { ,} 90.79 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 90.79 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 90.79 :"gva_snoitces" ,"htam" :"tped_snoitces" { ,} 90.79 :"gva_snoitces" ,"htam" :"tped_snoitces" { } 87 79 :"gva snoitces" "espe" :"tped snoitces" { 1/29/24, 5:08 PM Introduction to SE - Section Specification https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 9/28 Complex example query 09:"gva_cbu" } 87.99 :"gva_snoitces" ,"htam" :"tped_snoitces" { ,} 87.99 :"gva_snoitces" ,"htam" :"tped_snoitces" { ,} 91.99 :"gva_snoitces" ,"spnc" :"tped_snoitces" { ,} 89.89 :"gva_snoitces" ,"hpps" :"tped_snoitces" { ,} 89.89 :"gva_snoitces" ,"hpps" :"tped_snoitces" { ,} 8.89 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 67.89 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 67.89 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 57.89 :"gva_snoitces" ,"ecee" :"tped_snoitces" { ,} 57.89 :"gva_snoitces" ,"ecee" :"tped_snoitces" { ,} 17.89 :"gva_snoitces" ,"srun" :"tped_snoitces" { ,} 17.89 :"gva_snoitces" ,"srun" :"tped_snoitces" { ,} 7.89 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 85.89 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 85.89 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 85.89 :"gva_snoitces" ,"srun" :"tped_snoitces" { ,} 85.89 :"gva_snoitces" ,"srun" :"tped_snoitces" { ,} 5.89 :"gva_snoitces" ,"srun" :"tped_snoitces" { ,} 5.89 :"gva_snoitces" ,"srun" :"tped_snoitces" { ,} 54.89 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 54.89 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 63.89 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 12.89 :"gva_snoitces" ,"srun" :"tped_snoitces" { ,} 12.89 :"gva_snoitces" ,"srun" :"tped_snoitces" { ,} 80.89 :"gva_snoitces" ,"espe" :"tped_snoitces" { ,} 89 :"gva_snoitces" ,"rwrc" :"tped_snoitces" { ,} 89 :"gva_snoitces" ,"rwrc" :"tped_snoitces" { ,} 87.79 : gva_snoitces , espe : tped_snoitces { 1/29/24, 5:08 PM Introduction to SE - Section Specification https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 10/28 "ehda":"tped_cbu" [:"SNMULOC" {:"SNOITPO" 59:"gva_cbu" "gva_cbu":"REDRO" ,"tped_cbu" The result of this query would be: ,} 45.29 :"gva_cbu" ,"923" :"di_cbu" ,"ehda" :"tped_cbu" { ,} 84.19 :"gva_cbu" ,"033" :"di_cbu" ,"ehda" :"tped_cbu" { ,} 33.19 :"gva_cbu" ,"033" :"di_cbu" ,"ehda" :"tped_cbu" { ,} 33.19 :"gva_cbu" ,"033" :"di_cbu" ,"ehda" :"tped_cbu" { ,} 92.19 :"gva_cbu" ,"033" :"di_cbu" ,"ehda" :"tped_cbu" { ,} 58.09 :"gva_cbu" ,"033" :"di_cbu" ,"ehda" :"tped_cbu" { ,} 28.09 :"gva_cbu" ,"923" :"di_cbu" ,"ehda" :"tped_cbu" { ,} 27.09 :"gva_cbu" ,"033" :"di_cbu" ,"ehda" :"tped_cbu" { ,} 5.09 :"gva_cbu" ,"033" :"di_cbu" ,"ehda" :"tped_cbu" { ,} 81.09 :"gva_cbu" ,"214" :"di_cbu" ,"ehda" :"tped_cbu" { ,} 71.09 :"gva_cbu" ,"033" :"di_cbu" ,"ehda" :"tped_cbu" { ,} 61.09 :"gva_cbu" ,"214" :"di_cbu" ,"ehda" :"tped_cbu" { ,} 20.09 :"gva_cbu" ,"923" :"di_cbu" ,"ehda" :"tped_cbu" { ,} 33.39 :"gva cbu" ,"923" :"di cbu" ,"ehda" :"tped cbu" { 1/29/24, 5:08 PM Introduction to SE - Section Specification https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 11/28 ,} 59 :"gva_cbu" ,"535" :"di_cbu" ,"spnc" :"tped_cbu" { ,} 59 :"gva_cbu" ,"535" :"di_cbu" ,"spnc" :"tped_cbu" { ,} 59 :"gva_cbu" ,"985" :"di_cbu" ,"cspc" :"tped_cbu" { ,} 59 :"gva_cbu" ,"985" :"di_cbu" ,"cspc" :"tped_cbu" { ,} 59 :"gva_cbu" ,"995" :"di_cbu" ,"rwrc" :"tped_cbu" { ,} 59 :"gva_cbu" ,"995" :"di_cbu" ,"rwrc" :"tped_cbu" { ,} 59 :"gva_cbu" ,"995" :"di_cbu" ,"rwrc" :"tped_cbu" { ,} 59 :"gva_cbu" ,"995" :"di_cbu" ,"rwrc" :"tped_cbu" { ,} 59 :"gva_cbu" ,"995" :"di_cbu" ,"rwrc" :"tped_cbu" { ,} 59 :"gva_cbu" ,"995" :"di_cbu" ,"rwrc" :"tped_cbu" { ,} 59 :"gva_cbu" ,"995" :"di_cbu" ,"rwrc" :"tped_cbu" { ,} 59 :"gva_cbu" ,"615" :"di_cbu" ,"noce" :"tped_cbu" { ,} 59 :"gva_cbu" ,"615" :"di_cbu" ,"noce" :"tped_cbu" { ,} 59 :"gva_cbu" ,"374" :"di_cbu" ,"pcde" :"tped_cbu" { ,} 59 :"gva_cbu" ,"374" :"di_cbu" ,"pcde" :"tped_cbu" { ,} 59 :"gva_cbu" ,"606" :"di_cbu" ,"espe" :"tped_cbu" { ,} 59 :"gva_cbu" ,"286" :"di_cbu" ,"espe" :"tped_cbu" { ,} 59 :"gva_cbu" ,"286" :"di_cbu" ,"espe" :"tped_cbu" { ,} 59 :"gva_cbu" ,"994" :"di_cbu" ,"nik" :"tped_cbu" { ,} 59 :"gva_cbu" ,"005" :"di_cbu" ,"nik" :"tped_cbu" { ,} 59 :"gva_cbu" ,"005" :"di_cbu" ,"nik" :"tped_cbu" { ,} 59 :"gva_cbu" ,"235" :"di_cbu" ,"htam" :"tped_cbu" { ,} 59 :"gva_cbu" ,"235" :"di_cbu" ,"htam" :"tped_cbu" { ,} 59 :"gva_cbu" ,"465" :"di_cbu" ,"lrtm" :"tped_cbu" { ,} 59 :"gva_cbu" ,"465" :"di_cbu" ,"lrtm" :"tped_cbu" { ,} 59 :"gva_cbu" ,"995" :"di_cbu" ,"lrtm" :"tped_cbu" { ,} 59 :"gva_cbu" ,"355" :"di_cbu" ,"csum" :"tped_cbu" { ,} 59 :"gva_cbu" ,"355" :"di_cbu" ,"csum" :"tped_cbu" { ,} 59 :"gva_cbu" ,"355" :"di_cbu" ,"csum" :"tped_cbu" { ,} 59 :"gva_cbu" ,"355" :"di_cbu" ,"csum" :"tped_cbu" { ,} 59 :"gva_cbu" ,"355" :"di_cbu" ,"csum" :"tped_cbu" { ,} 59 :"gva_cbu" ,"355" :"di_cbu" ,"csum" :"tped_cbu" { ,} 59 :"gva_cbu" ,"424" :"di_cbu" ,"srun" :"tped_cbu" { ,} 59 :"gva_cbu" ,"424" :"di_cbu" ,"srun" :"tped_cbu" { ,} 59 :"gva_cbu" ,"945" :"di_cbu" ,"tsbo" :"tped_cbu" { ,} 59 :"gva_cbu" ,"105" :"di_cbu" ,"cysp" :"tped_cbu" { ,} 59 :"gva_cbu" ,"105" :"di_cbu" ,"cysp" :"tped_cbu" { ,} 59 :"gva_cbu" ,"105" :"di_cbu" ,"cshr" :"tped_cbu" { ,} 59 :"gva_cbu" ,"075" :"di_cbu" ,"kwos" :"tped_cbu" { ,} 33.39 : gva_cbu , 923 : di_cbu , ehda : tped_cbu { ,} 59 :"gva_cbu" ,"795" :"di_cbu" ,"gemb" :"tped_cbu" { 1/29/24, 5:08 PM Introduction to SE - Section Specification https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 12/28 4. IInsightFacade.ts The high-level API you must support is shown below; these declarations should be in your project in . { rorrE sdnetxe rorrEdnuoFtoN ssalc tropxe { )gnirts :?egassem(rotcurtsnoc { rorrE sdnetxe rorrEthgisnI ssalc tropxe ;rebmun | gnirts :]gnirts :yek[ { tluseRthgisnI ecafretni tropxe ;rebmun :swoRmun ;dniKtesataDthgisnI :dnik ;gnirts :di { tesataDthgisnI ecafretni tropxe ,"smoor" = smooR ,"snoitces" = snoitceS { dniKtesataDthgisnI mune tropxe .krow ton lliw etius tset eht ro lla ta ecafretni siht egnahc ton dluohs uoY * .st.edacaFthgisnI dellac elif a ni eb dluohs siht ,edacaFthgisnI dellac ssalc A * :eb dluohs ereht redlof siht nI .tcejorp eht rof IPA level-hgih yramirp eht si sihT * st.edacaFthgisnII/rellortnoc/crs ;)rorrEthgisnI ,siht(ecarTkcatSerutpac.rorrE ;)egassem(repus } 11.69 :"gva_cbu" ,"923" :"di_cbu" ,"ehda" :"tped_cbu" { ,} 59 :"gva_cbu" ,"795" :"di_cbu" ,"gemb" :"tped_cbu" { { )gnirts :?egassem(rotcurtsnoc 1/29/24, 5:08 PM Introduction to SE - Section Specification https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 13/28 rof yromem otni eulav detsisrep siht daol ot elba eb dluohs metsys * ;ksid ot detsisrep eb dluohs erutcurts atad dessecorp ehT .ngised ruoy * fo erutcurts atad a otni dessecorp eb dluohs ti ,tesatad eht gniviecer retfA * .devas ton dna detcejer eb dluohs tesatad eht ,tesatad dedda ydaerla na fo di eht sa emas eht si di fI * .sretcarahc ecapsetihw ylno si ro ,erocsrednu na sniatnoc ti fi dilavni si di nA * .rorre eht gnibircsed rorrEthgisnI na htiw tcejer dluohs esimorp ehT * lufsseccus a nopu stesatad dedda yltnerruc lla fo sdi eht gniniatnoc * ,yarra gnirts a htiw llifluf dluohs esimorp ehT * .seruliaf yna rof tcejer ,dda lufsseccus a no llifluf dluohs esimorp ehT * >][gnirts< esimorP nruter@ * tesatad eht fo dnik ehT dnik marap@ * .elif piz dezilaires a fo mrof eht ni eb dluohs tnetnoc sihT .tesatad eht fo tnetnoc 46esab ehT tnetnoc marap@ * .dedda gnieb tesatad eht fo di ehT di marap@ * .CBUthgisni ot tesatad a ddA * { edacaFthgisnII ecafretni tropxe { )gnirts :?egassem(rotcurtsnoc { rorrE sdnetxe rorrEegraLooTtluseR ssalc tropxe ;)rorrEegraLooTtluseR ,siht(ecarTkcatSerutpac.rorrE ;)egassem(repus ;)rorrEdnuoFtoN ,siht(ecarTkcatSerutpac.rorrE ;)egassem(repus { )gnirts :?egassem(rotcurtsnoc 程序代写 CS代考 加微信: cstutorcs 1/29/24, 5:08 PM Introduction to SE - Section Specification ni( dedda ton tesatad a secnerefer ,dettamrof yltcerrocni si yreuq a fI * .demrofrep eb ot yreuq ehT yreuq marap@ * .CBUthgisni no yreuq a mrofreP * ;>gnirtsgnirts< esimorP nruter@ * .evomer ot tesatad eht fo di ehT di marap@ * .CBUthgisni morf tesatad a evomeR * ;>][gnirts][tesataDthgisnI][tesataDthgisnI< esimorP nruter@ * .swor fo rebmun dna ,sepyt rieht ,stesatad dedda yltnerruc lla tsiL * ;>][tluseRthgisnI][tluseRthgisnI< esimorP nruter@ * .rorrEegraLooTtluseR a htiw detcejer eb dluohs ti ,stluser 0005 naht erom nruter dluow yreuq a fI * .rorrEthgisnI na htiw detcejer eb dluohs ti ,stesatad elpitlum secnerefer ro * ,)ksid no ro yromem 1 :swoRmun ,snoitceS.dniKtesataDthgisnI :dnik ,"oof" :di { = tesataDthgisnI :tesataDym tsnoc https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 15/28 1/29/24, 5:08 PM Introduction to SE - Section Specification 5. Caching Progress (Persistence) Dataset processing is computationally expensive. As such, we wish to build a system that is resilient to unexpected changes (i.e. crashes) without data loss. To do this, we will cache the added datasets on persistent storage (disk). Once a dataset has been added to the system via , any future instance of should be able to access it, to avoid having to re-process the data. In other words, when a user creates a new instance of , they should be able to query/list/remove datasets that had been added to "old" instances, so long as they had not been removed since. To simplify your implementation of this feature, once a new has been created, the behaviour of all "old" instances is undefined. This means that you will only have to reason about having one concurrently active at a time. As mentioned, you must cache correctly added datasets on disk. Disk behaves differently than memory. Disk persists between instances but memory does not. For example, storing an array in a class variable, would be storing that array in memory (e.g. ). Saving that array in a le, would be storing that array on disk. Disk is obviously more persistent than memory and this is intentional -- if any code crashed, data in memory would be lost, but data in disk could be safely recovered. The valid dataset les should be saved to the directory. You can store the data on disk in whatever way that works for you. You just need to be able to (a) read it, and (b) remove it if removeDataset is called with the appropriate id. This can be a single le, a folder full of les, text le(s), json le(s), etc. Hint: You may be tempted to read all the data when constructing a new instance, but this will cause performance issues. We recommend that you load datasets lazily. The dataset les should be read and written using the package. Make sure to not commit any les in to git as this may cause unpredicted test failures. ;)...(ssalCtesataD wen = ssalCtesataD :tesataDym tsnoc } ... { tesataDthgisnI stnemelpmi ssalCtesataD ssalc atad/>RID_TCEJORP< edacaFthgisnI atad/>RID_TCEJORP< ;]"c" ,"b" ,"a"[ = yromeMnIyarra etavirp ;)"cbu"(tesataDevomer.ecnatsnIwen )"cbu"(tesataDevomer.edacaf sa emas eht krow dna ,krow llits dluohs siht // ;)(edacaFthgisnI wen = ecnatsnIwen tsnoc ...retal // ;)snoitceS.dniKtesataDthgisnI ,tesatad ,"cbu"(tesataDdda.edacaf tiawa ;)(edacaFthgisnI wen = edacaf tsnoc edacaFthgisnI tesataDdda edacaFthgisnI edacaFthgisnI edacaFthgisnI edacaFthgisnI https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 16/28 1/29/24, 5:08 PM Introduction to SE - Section Specification https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 17/28 1/29/24, 5:08 PM Introduction to SE - Section Specification https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 18/28 程序代写 CS代考 加QQ: 749389476 1/29/24, 5:08 PM Introduction to SE - Section Specification https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 19/28 1/29/24, 5:08 PM Introduction to SE - Section Specification https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 20/28 1/29/24, 5:08 PM Introduction to SE - Section Specification https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 21/28 1/29/24, 5:08 PM Introduction to SE - Section Specification https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 22/28 1/29/24, 5:08 PM Introduction to SE - Section Specification https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 23/28 1/29/24, 5:08 PM Introduction to SE - Section Specification https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 24/28 Computer Science Tutoring
1/29/24, 5:08 PM Introduction to SE – Section Specification
https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 25/28

1/29/24, 5:08 PM Introduction to SE – Section Specification
https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 26/28

1/29/24, 5:08 PM Introduction to SE – Section Specification
https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 27/28

1/29/24, 5:08 PM Introduction to SE – Section Specification
https://sites.google.com/view/ubccpsc310-23w2/project/section-specification?authuser=0 28/28