CSCI 265 (Wessels): Fall 2026 Practice Midterm Sample Solutions

Cautionary note: (i) I haven't proof-read these yet, they're just my initial stream-of-conciousness drafts of solutions, and (ii) some of them are longer/more detailed than I'd be expecting in your answers.

Question 1: Short answer [10]

Provide short (one or two-sentence) answers for each of the following five questions on version control and git.
  1. Briefly explain the concept of a remote in git, and how/why one might use one.

    Sample solution
    
    A remote is a repository other than the current repo's default pull source or push
    destination, used when there is another relevant repository we would like to pull
    content from or push content to.
    

  2. Briefly explain circumstances under which one might use a branch in git.

    Sample solution
    
    Branches are often used to introduce new code without altering the code
    currently in place, e.g. to introduce experimental new features, fixes, or functionality
    without modifying the existing code base.
    

  3. Briefly explain what is meant by a merge conflict in git, and the circumstances under which one might arise.

    Sample solution
    
    A merge conflict arises when the same file has been altered in different ways in two
    parallel branches of a repository, and an attempt is made to merge those two branches
    together.  This necessitates identifying to git what the "correct" resulting version
    of the conflicted file should be.
    

  4. Briefly explain how a merge conflict might arise from a pull or push in git, and how it might be resolved.

    Sample solution
    
    In the case of a pull or push, we have a conflicted file across two parallel repositories
    rather than across two parallel branches.  The resolution is much the same as for regular
    merge conflicts: edit each conflicted file to contain the expected "correct" content
    to reflect the different alterations in each repo.
    

  5. Teams often choose to have a 'git leader' to manage their team repo. Briefly explain the key issues such a role is meant to address.

    Sample solution
    
    The git leader typically manages the initial setup of the team repo, granting the
    needed invites/permissions/access to the other team members, and ensuring that safe
    and effective processes are developed and followed to coordinate the development
    of content in the team members' individual repositories and to merge that into
    the central team repo.
    

Question 2: Brief explanations [10]

Provide short single-paragraph answers for each of the following two questions.
  1. Non-functional requirements
    One of the most challenging non-functional requirements to express is that a product must be "easy to learn". Briefly explain why it is difficult to write a 'good' requirement for this, and suggest some suitable wording.

    Sample solution
    
    One of the biggest challenges in this regard is that everyone has a different perception
    of 'easy to learn' for any given product, heavily influenced by their familiarity with
    the general knowledge domain of the product, their past experience with similar products,
    and their general comfort level with exploring new tools or technologies.  A suitable wording
    might instead list the ways in which learning is supported, e.g. "The product must include
    a tutorial for each of the following use cases (...some list...), and must include tooltips
    for each interactible field/control of the interface."
    

  2. HCI/Accessibility/Internationalization
    One of the common themes in our discussion of these topics was that it is easier to incorporate them if they are built into our design from the beginning. Pick one of the three areas (HCI, accessibility, internationalization) and provide a short example illustrating why it is more challenging to retro-fit a fix.

    Sample solution
    
    (Here using internationalization as the example, but very similar answers could be
    given for either of the other two choices.)
    Suppose we were developing a program that was initially planned for use here in Nanaimo,
    with (Canadian) English as the presumed language.  If we weren't actively designing with
    internationalization in mind, it might be perfectly natural to write all our output
    statements "hard-coded" directly into the various functions/methods in our program,
    and to assume all currency amounts were in dollars/cents, all measurements were in metric,
    and all times were in BC's new year-round time zone (PCT).  In order to later
    support other locations, languages, and measuresments, we would need to redesign and
    rewrite the logic for every such function.  If we designed with internationalization
    in mind then we could have written the original logic to reference configurable settings,
    which would be far easier to add to in an incremental fashion.
    

Question 3: Software development life cycles [10]


Study the system and client description below and recommend a suitable SDLC to complete the final system within 16 months (including providing a clear timeline showing which phases/aspects will be worked on in which months), then provide justification for that choice of SDLC over the other possibilities.

System description: resource utilization modeling tool
A local client wants a custom software product developed over the next 16 months to model the consumption of resources by his crews at sites around various remote Vancouver Island locations. The crews frequently switch between sites, with periodic visits back to their headquarters in Nanaimo.

The client wants the completed tool to be able to report on current storage levels of each resource at each site the crews visit, the rates at which the resources are being consumed, and to forecast when new resources need to be ordered and shipped to ensure the crews do not run out of key resources.

Each crew's resource needs are somewhat different, and resource needs also vary from site to site.

To gather information on the system needs, your team can meet with the leads of each of the different crews during times when they are in Nanaimo, but should also plan on at least one visit to each remote site while there is a crew there.

The client and crew leads are keen on having such a system in place, but they are all very busy and have limited time available to provide you with details about their needs and operations. The client is willing to pay current market rates for you and a team of up to four other people for the 16 months to gather requirements, design, and develop the product. (Any longer term revisions and/or maintenance to be negotiated separately.)

Sample solution
(A case could probably be made for any of the various SDLCs, depending on which aspects
of the scenario you deemed most crucial and how you chose to address them.)

Resource management tools are not uncommon, so my initial expectation would be
that my team could develop or customize an effective tool relatively 'easily'
once we know what the precise needs/expecations are.

My greater concerns would revolve around the challenge of finding out exactly
what the needs/expectations would be, particularly given that there are multiple
sites and multiple crews (and we're told each has unique needs), and that the
crews (or leads) have limited time available to meet/discuss issues with our team.

I would probably want to ensure that our requirements gathering included having
one or two people from our team visit each site at least once while a team was there,
and met with each team at least once, and with as many client meetings as could be
readily arranged.  After some time to develop and refine our view of the actual needs,
I would want our team to have at least one follow-up meeting with each team lead,
preferably with some of those taking place at the locations with the most challenging needs.
(Which specific locations would be identified as part of the requirements gathering steps.)

With sign-off from the client, we could then commence the initial implementation,
ideally leaving time for a round of on-site testing followed by a revision phase
before final delivery.

This suggests something of a spiral model, but one where the first cycle is somewhat
longer than the second to reflect the extra information gathering needed in that first round, e.g.:
    First cycle: 11 months
  • 3 months: requirements gathering, client/leader/onsite meetings and visits
  • 2 months: requirements development
  • 1 month: requirements review, client/leader/onsite meetings
  • 1 months: revision of requirements
  • 2 months: design
  • 2 months: implementation and internal testing

    Second cycle: 7 months
  • 1.5 months: onsite testing at designated sites
  • 1.5 month: revision of requirements and design
  • 2.5 months: revised implementation and internal testing
  • 1.5 months: final onsite acceptance testing
I've avoided the use of scrum and agile approaches here because of the challenges we would be faced with in terms of getting timely feedback (since the teams are scattered and have limited time to spend with us). I've avoided a strict waterfall here just to allow for one round of testing/revision in case there are practical issues that weren't caught due to the limited time available to spend with each crew while on site.

Question 4: Modeling requirements [10]

Consider the system described on the last page of the exam (feel free to detach the sheet for easier reference) and pick exactly one of the four modeling techniques below to help clarify the description for potential readers: (If you provide more than one modeling diagram then only the first will be graded.)

On the next page:
System Description: GameBraker
GameBraker is a software tool focused on the ways games crash and the people who crash them (intentionally or not).

Registered users can add games to the system for tracking, report new crashing techniques for games that are tracked, confirm crashes reported by other users, or confirm that new game patches or versions have fixed crash issues. (Unregistered users can browse the tracked games and crash reports, but cannot add content.)

Users register by selecting a unique username (the system automatically flags attempts to use offensive or already-selected usernames), providing an email address, and following the setup/confirmation steps given in an email the system sends to that address. The user can then complete a profile to include (optional) information about their preferred platforms, games and game styles, age, region, etc.

Users can add new games for tracking by submitted the name of the game and the platform and game version they are using, along with an email address or URL for that game's producers (preferably an email/URL associated with bug reporting for the game). The staff at GameBraker Inc then verify the information provided and have the game added to the system.

After testing or experiencing a game crash (in a tracked game), users either browse existing reports and confirm/deny the crash is still present (deny actually meaning they did not experience a crash with the same circumstances as the other user reported) or they can add a new crash report. Either approach begins by selecting the game, platform, and version in GameBraker's reporting system, then either selecting an existing crash report for that game for confirmation or creating and filling in a crash report. If a new report is being generated then the user is asked to provide detailed information on the form (date/time, detailed descriptions of the steps leading up the crash, nature of the crash, etc).

Sample solution
(Any of the diagramming techniques could be chosen, I chose an ERD since so much of the
description above was focused on the different forms of information handled by the system.
I also put more detail into descriptions of the different entities than I would expect
in your actual midterm answers.)

... coming shortly ...