Agile Coding

94 views 9:58 am 0 Comments April 21, 2023

ITECH2306 – Assignment 2 Task Specification (2023-Sem1) Page 1 of 12
ITECH2306 Agile Coding
Semester 1, 2023
Assignment 2 – Company Share-Registry Management Program
Overview
Large companies have thousands of shareholders who have invested in them. In this assignment you
will work by yourself to write a medium-sized Java program consisting of several classes, to
demonstrate your understanding of topics and the development of skills from
weeks 1 to 6, for a
program that could be used to manage the dealings with investors (share-holders) of a company.
You are not expected to use anything taught from week 7 or later – the task is achievable using only
the topics taught up to week 6.
You must
use a git repository in the GitHub Classroom, to progressively work on your assignment.
You are provided a detailed set of functional requirements which describe the behaviour that must be
exhibited by the program you create. In addition to the various functional requirements are other tasks
or approach-requirements that specify suggested implementation approach to be taken, or skills that
need to be demonstrated by you. These are all detailed in the remainder of the assignment. Make sure
you read it all carefully before you commence, so you understand what needs to be achieved. Finally,
there are a range of suggested Tasks to be completed (see next page).
It is highly likely that the next assignment will extend the work you do in this assignment.
You will need to commence early in order to give sufficient time to thinking about the work that needs
to be done, and then to do it, as coding something of this complexity can involve making many
mistakes and re-writings along the way. Do not wait until one or two days before the due date to start.
You are expected to make multiple commits to a git repository over time as you progress through the
development.
If you have any questions about any of the requirements, please ask your teacher through their
preferred means of communication.
This is an individual assignment. The work you submit must be written only by you and no-one else.
The code you submit will be compared to work that other students submit, by using a specialised
plagiarism-checking software that specifically compares Java programs, to identify any potential
collusion or sharing of work between people.
You may also be asked to attend a short interview with the marker to explain portions of the code or
approaches you have taken, or to make small alterations to the code ‘live’, before the assessment
mark is finalised – if you do not participate in such interview when requested, you will receive 0 marks
for the assignment.
Timelines and Expectations

Percentage Value of Task:
Due Date:
Cut-off Date:
Minimum time expectation:
25%
Sunday 30
th April, 2023 at 11:59pm
7
th May – after this date, you would get 0%
10 hours

Maximum time expectation: 25 hours
Time estimates assume that you have completed all learning activities and reading of the textbook that
applies to weeks 1 through 6. Most people will take somewhere between the minimum and maximum
expected time.

ITECH2306 – Assignment 2 Task Specification (2023-Sem1) Page 2 of 12
Learning Outcomes Assessed
The following course learning outcomes are assessed to some degree, by completing this
assessment:
S1. Select and justify appropriate data types to represent information in a program.
S2. Develop object-oriented programs involving several interacting classes.
S3. Develop, compile, test and debug code using an appropriate Integrated Development
Environment (IDE).
S4. Incorporate pre-written classes, including those from an API, into software solutions.
S5. Manage code assets through use of a source-code version control system repository.
A1. Design, develop, test and debug programs from supplied program specifications.
A2. Use source-code version control tools to manage a repository of code.
In particular, this assignment is focused on assessing your attainment/achievement of a range of the
learning objectives of weeks 1 through 6 of the course. For more detail on how you are marked, refer
to the section at the back of this Task Specification document.
Tasks to be completed
The following is a description of the tasks you may want to complete to address the needs of this
assignment:
1. Read through the entire assignment task description (all pages) to understand what the program
needs to achieve, and how you will be assessed.
2. Perform a textual analysis to identify potential classes (look for nouns), potential methods (look for
verbs or actions), potential fields/data (look for nouns again). Develop a UML class diagram to
document your thoughts. You can use software such as Enterprise Architect (available at the
university) or draw.io or similar web-based diagramming tools.
3. When you are ready to start coding, accept the GitHub Classroom assignment “invitation” by clicking
the link in Moodle (underneath the link you clicked to obtain this document) to create your repository.
Use the link to the repository, to clone it to your computer and import the starter project it contains
into your Eclipse workspace, as explained in the “Using Eclipse IDE to interface with GitHub
repository” document, found on Moodle in the Course Information section and the Week 6 lab.
4. Start coding, for example by taking one functional requirement at a time to work with and solve.
Consider whether you might be able to write tests to check/prove that it is addressed and correct,
and develop code to address it testing as you go (you do not
have to follow a fully test-driven
approach, but you do need to have
some JUnit testing in the final submission).
5. Once each functional requirement is fully addressed/working, commit the code files containing that
functionality-update to the repository (you can commit more frequently if you wish, provided the
commit is significant), then select another functional requirement and repeat the process of solving,
coding, committing, until all requirements have been addressed.
6. When completed, finalise the repository on GitHub (make sure it contains the final version), review
the UML Class Diagram and prepare a document containing it to be submitted to Moodle.
Assessment Details
Background/Context Information
All companies need money to be able to operate. To begin the company they will need money that
can be used to start up the company, and a large amount of this money usually comes from
investors who give money to the company in exchange for receiving shares in the company. For
example, companies like Telstra, Origin Energy, BHP, have many millions (or even billions) of
shares that they have issued to investors.

ITECH2306 – Assignment 2 Task Specification (2023-Sem 1) Page 3 of 12
We could consider a simple company that is just beginning, for example, FedSoft could be
planning to make software for various organisations to use. It will need money so that it can pay
the workers until they can start selling their software. Perhaps it estimates it will need $1 million in
the initial period. And so it decides to advertise for investors to buy shares in what is called its
initial
round offer
(because this is the first time it is offering shares to anyone other than the person who
started the company, who had to buy at least 1 share). It may decide to offer 100,000 shares, each
one to be issued in return for $10 paid by an investor. Normally the company will set a minimum
number of shares that an investor must
subscribe to buying, e.g. maybe FedSoft decides that each
investor must subscribe for a minimum of 20 shares, which would require $200 to be paid. They
may also place an upper limit on the number of shares any one person can buy, e.g. maybe the
maximum is 1000 shares (representing $10,000 as a maximum). The total money raised from the
investors (including the person who starts the company), is known as the
capital of the company.
As the company proceeds to operate, and makes profits, it will from time to time “declare a
dividend”. This means the company has made a decision to pay each shareholder some fixed
amount for each share that they hold. So if the dividend is 25 cents per share, then a shareholder
who has 20 shares will get $5, and a shareholder who has 400 shares will get $100. That is
income for the shareholder (and the shareholder may need to pay tax on it, as they would for their
other income such as wages).
Also, once per year, a company has to hold an “Annual General Meeting” to present financial
statements to all the shareholders, and ask approval for various things. An example could be a
vote to “approve the report of the company directors” or a vote to “appoint
person XYZ to be a
director of the company”. It could even be to approve subsequent rounds of share offers to
additional investors. There are various other things that might require a vote by the shareholders.
(A
director is one of the board-members who oversees the operation of a company, particularly for
large companies).
At least a month before the meeting is scheduled, each shareholder needs to be notified what
votes there will be. During the meeting, each shareholder is given the opportunity to vote on the
various things for approval. The shareholder is able to effectively give one vote in support of or one
vote against the issue being voted on, for each share that they hold. They are usually also able to
submit their votes in the days prior to the meeting (either on a paper form which they mail to the
company, or using a computer system to enter their vote), or they can attend the meeting and cast
their vote during the meeting. At the end of the voting time during the meeting,
all of the votes are
added up to determine a result.
The person who starts the company, usually wants to retain “control” of the company, and this is
achieved by them having a large quantity of shares compared to all the other investors. For
example, this person may own 40% of all the shares there will eventually be issued; but this
doesn’t mean that they paid the same price per share as the other investors in the initial round
offer. Quite often this person’s shares may have cost around 1 cent (very cheap compared to the
more expensive price that the new shares are offered to other investors). So they might own
100,000 shares of their own, that they only spent $1,000 in total to obtain. If they make another
100,000 shares available to other investors, then the total shares will be 200,000 and this person
would have 50% ownership of the company that they started.
A large amount of the management of these shareholder matters on behalf of various companies,
is performed by special
other companies called “Shareholder Registry” companies. The program
you write is intended to be used by a new Shareholder Registry company that will be utilised by
various companies in the future to manage their interactions with their investors.
The details of what your program must do are specified in the Functional Requirements section
over the following pages.
There are some other requirements that must also be addressed, which are not functional
requirements but are required to meet the assessment objectives of this assessment task,
provided after the functional requirements.

ITECH2306 – Assignment 2 Task Specification (2023-Sem 1) Page 4 of 12
Functional Requirements
The following are the Functional Requirements (FR) or behaviours that the program must achieve.
FR-1: The program must be a text-console menu-based system
As we have not yet learned about making GUI programs in Java, you are to make a program that
operates through the console (using System.out for output, and Scanner for input).
The program needs to allow the user flexibility in what actions they perform (the order in which they
are done), and so you should be designing the user interaction to make use of menus, that is, you
display to the user a list of the actions that they can perform (as a numbered list of options), and
the user selects the desired action by entering the corresponding number. Some actions available
in the top-level menu may lead into a period of being in a sub-menu which has a task-specific set
of actions that could be done – if so, there needs to be a way to ‘exit’ back to the main/top-level
menu.
There should be an option in the main menu to exit/end the program.
FR-2: Allow the user to add a new company to the system
One of the menu options of the top-level menu, should be to allow the user to enter information
about a company, who will need to have the details about its shareholders managed by this
system.
When this menu option is selected, the program needs to ask for the following details to record in
the system about the company:
The company’s name
The number of shares that are considered already issued to the first Shareholder (the
person who started the company).
The name of that first Shareholder.
How many new shares in total, that it will be issuing to investors / shareholders.
The price that each new share will be offered for
The minimum number of new shares a person must obtain if they become an initial investor
The maximum number of new shares a person is allowed to obtain if they become an initial
investor
After obtaining the above set of details about a company, you need to create a suitable object to
represent the company. You then need to store the object in memory in such a way that will enable
you to retrieve the company’s details in other parts of the program at any later point during running
the program. Note that other details besides those listed above will need to be recorded in the
object, to support other functional requirements – the above are just those things that are needed
when a company is being created in the system.
You should assume that the maximum number of companies that the system is capable of storing
the details about, is 6. If there are already 6 companies, your program can simply say “There are
already 6 companies in the system” and refuse to allow the user to add any more.
During development, you may also (for your convenience during manual testing and development)
create several ‘default’ companies that will exist every time the program starts running, but any
such objects should be removed from the final version of the program you submit for marking.
FR-3: Allow the user to get a list of the companies which the system is managing
Another one of the menu options of the top-level menu, should be to allow the user to see a list of
the companies which have been added into the system. This may be needed in various other
functional requirements, but there should still be a menu option to “see a list of all companies”.

ITECH2306 – Assignment 2 Task Specification (2023-Sem 1) Page 5 of 12
The list should show the name of the company together with the number of shares owned by all
investors (so far – not the unissued shares that may be owned later), as shown in the following
example:
1. FedSoft Company [103000 shares issued]
2. Hammock’s Book Stores [7544000 shares issued]
3. Twinkletoes Child Care [257200 shares issued]
4. Bank of Darwin [3500000 shares issued]
FR-4: Allow the user to add a new investor to the system
Another one of the menu options of the top-level menu, should be to allow the user to enter
information about a new investor who is buying shares in any company that the system knows
about.
When this option is selected, the user needs to be able to specify which company the investor is
choosing to invest in (to buy shares of). After selecting the company, if there are still shares
available to be bought (at least as many as the minimum number of shares required by each
investor of that company), then they should be told the information about the share offer:
The price per share
The minimum number of shares they must obtain
The maximum number of shares they can obtain
they should be asked for the following details:
The investor’s full name, e.g. Louise Carolyn Yates, or Sumanpreet Prakash Singh
How many shares they want to obtain.
If the number of shares entered by the user is valid – being at least the minimum required of
investors, and no more than both the maximum permitted for investors and the number of shares
still available to be issued, then the program should continue on to tell how much the investment
will cost. If it is not valid (such as zero) just return to the main menu.
If the user confirms that they will proceed with payment, then the program should record that this
investor is allocated the number of shares that they requested, in such a way that we can retrieve
this information in other parts of the program at any later point during running the program. The
user should be told confirmation that their request for shares to be issued has succeeded.
For coding simplicity, you should assume that the maximum number of people that can invest in a
particular company, including the initial person who starts the company, is 100 investors.
FR-5: Allow the user to get a list of the current investors of a particular company
Another one of the menu options of the top-level menu, should be to allow the user to see a list of
all the current investors for a particular company.
When this option is selected, the user needs to be able to specify which company to see the list
for. After selecting the company, it should show the name of the company, and information about
its investors by showing the names of each investor, together with the number of shares owned by
that investor and the
percentage of ownership for that investor. It should show each investor on a
separate line, and at the end show the total shares owned by all investors, using a format similar to
the following:
The following are the investors for the company: Hammock’s Book Stores
1. Bronwyn Classens [3000000 shares, 39.8%]
2. Dhirendra Singh [1000000 shares, 13.3%]
3. Kumi Taguchi [750000 shares, 9.9%]
4. Lenice Tremont [944000 shares, 12.5%]
5. Kyle Blyston [105000 shares, 1.4%]
6. Louise Hansford [200000 shares, 2.7%]
7. Jacob Cranston [450000 shares, 6.0%]

ITECH2306 – Assignment 2 Task Specification (2023-Sem 1) Page 6 of 12
8. Tian Chao [705000 shares, 9.3%]
9. George Constansis [280000 shares, 3.7%]
10. Leopold Johnson [110000 shares, 1.5%]
Total shares issued to shareholders: 7544000
For reporting the percentage ownership, you need to work out the proportion of that investor’s
shares to the total number of shares currently issued to investors (as at the time when this report is
generated). It is preferably to show all percentages with 1 decimal place as in the example above –
you may like to use the ‘NumberFormat’ class to do so. Small rounding errors are acceptable.
FR-6: Allow the user to enter information about a dividend declared by a company
Another one of the menu options of the top-level menu, should be to allow the user to enter
information about a dividend that a company has decided to grant to its shareholders (because the
company
declares a dividend).
When this option is selected, the user needs to be able to specify which company is declaring the
dividend, and the date when the dividend will be paid (in any format, such as: 5 May 2023, or
5/5/23), and what amount per share to pay each investor.
The system needs to consider each current shareholder of the company, to calculate how much
that shareholder is due to receive for this dividend. It should be recorded so that it would be able to
be retrieved at any later point during running the program. (However, you are not required to
remember earlier dividends, if a second or subsequent dividend is declared for that company – just
record the most recent dividend amount and date. But if you want to, you can keep track of more
than one dividend for each shareholder.)
You also need to display a list showing the amounts that need to be paid to each shareholder.
The following is an example of how this functional requirement might behave when selected by the
user, for a dividend of 4 and a half
cents per share:
Which company is declaring a dividend?
1. FedSoft Company [103000 shares issued]
2. Hammock’s Book Stores [7544000 shares issued]
3. Twinkletoes Child Care [257200 shares issued]

4. Bank of Darwin
2
[3500000 shares issued]

What is the dividend amount per share that Hammock’s Book Stores is paying
to its investors:
0.045
The following amounts will need to be paid to the investors:
$135,000.00 ‐ Bronwyn Classens
$45,000.00 ‐ Dhirendra Singh
$33,750.00 ‐ Kumi Taguchi
$42,480.00 ‐ Lenice Tremont
$4,725.00 ‐ Kyle Blyston
$9,000.00 ‐ Louise Hansford
$20,250.00 ‐ Jacob Cranston
$31,725.00 ‐ Tian Chao
$12,600.00 ‐ George Constansis
$4,950.00 ‐ Leopold Johnson
Total amount being paid: $339,480.00
You should aim to show the money amounts to 2 decimal places, and if possible using thousandsseparators. The ’NumberFormat’ class may assist you to achieve this.
ITECH2306 – Assignment 2 Task Specification (2023-Sem 1) Page 7 of 12
FR-7: Allow the user to set topics/questions for shareholders of some company to vote on
As mentioned earlier, at the company meetings the shareholders (the investors) are able to cast
votes on various matters. The purpose of this requirement is to allow the user to set-up a new set
of topics for voting on, for a particular company.
When this option is selected, the user needs to be able to specify which company you are setting
up the votes for. After indicating which company, you need to ask
how many topics/questions the
shareholders will need to vote for – this can be any number.
You then need to ask the user to enter that many topics, and record these topics for the company
in a way that they can then be presented when later providing the actual votes of the shareholders
(see next FR).
(If there were already topics/votes for the same company from earlier, they are to be deleted and
replaced by the new topics gathered on this occasion of selecting the menu option for this FR.)
There should be no votes recorded for any of the shareholders on the topics.
The following is an example of how the user might interact with the program to achieve this FR:
Please select the company that is holding an AGM:
1. FedSoft Company [103000 shares issued]
2. Hammock’s Book Stores [7544000 shares issued]
3. Twinkletoes Child Care [257200 shares issued]

4. Bank of Darwin
2
[3500000 shares issued]

How many vote topics are required for the Hammock’s Book Stores AGM?
2
Please enter the topic for vote 1:
Approval of the Annual Report of the Directors
Please enter the topic for vote 2:
Appointment of Mr John Swee Tang as a director of the company.
The vote topic(s) are now set up ready for shareholders to vote.
FR-8: Allow the user to record votes by a shareholder
When the user chooses this function, they should be asked which company the shareholder is from
and make a selection from a list of all the known companies. If the selected company has no open
votes at the moment, it should report the mistake of the user, and return back to the main menu.
If the selected company
does currently have topics open for voting, then the user should be asked
to specify which shareholder to record the votes of. If that user has already had their votes for the
current topics recorded, the user should be told so, and the program return back to the main menu.
Otherwise, the program should present the topics of each vote one at a time, asking the user
whether the shareholder is voting in favour (yes / agree), or against (no / disagree).
The yes / no vote of the shareholder, for each vote topic/question, needs to be recorded in the
system so that it can be later used in determining the overall results of each topic/question.
After confirming to the user that the votes for all topics have been obtained and recorded for the
shareholder, just return back to the main menu.
FR-9: End the voting and report the outcomes
When the user chooses this function, it means that the time for voting for all the topics of the
particular company, is finished.
The user will need to specify which company to end the voting for. If a valid selection is made, then
the following happens:

ITECH2306 – Assignment 2 Task Specification (2023-Sem 1) Page 8 of 12
For each topic/question that was available for voting, show firstly what the topic/question was.
Then on the next line show the total number of shares which have been voted in favour (i.e. for all
the shareholders who said yes, the sum of their shares). And on the next line, show the total
number of shares which have been voted against (the total number of shares that voted no).
Also show the
proportion of total cast votes that were in favour, and the proportion that were
against. To calculate this, you only consider the shareholders who actually voted. Some
shareholders may not have voted, or may not be allowed to vote for various legal reasons.
For example, if Kyle Blyston, Louise Hansford and Jacob Cranston all voted in favour (total yes
votes = 755000 votes), and Tian Chao voted against the topic (total no votes = 705000 votes), then
the proportion of votes in favour is 65.8% and the proportion of votes against the topic is 34.2%.
You should not show individual people’s votes or proportions – just show the totals.
Again, small rounding errors are acceptable.
The effect of running this Functional Requirement is that nobody will be able to cast any more
votes on any of the topics that were set up for voting (until a new set of topics is set up for that
company’s next meeting). And if the user selected this company for this function again, it would not
work (because the voting has already been closed).
FR-10: Allow the user to show information about a specific shareholder
When the menu option for this function is selected, the user should be asked to specify a company,
and then select one of the investors of that company to see the information about.
The information that should be shown is:
The name of the shareholder
The number of shares that the shareholder has
The amount (if any) and date of the most recent dividend. (If you chose to record multiple
dividends from separate occasions, you should show all dividends here).
If there are any topics that the company is currently, or previously was holding a vote for,
then show whether the shareholder voted in favour or against the topic, or didn’t yet vote on
the topic – even if the vote has now been closed, but only for the most recent topics (you
should not be keeping/showing votes for prior sets of vote topics that have since been
replaced).
NOTE:
There is no need to be able to remember any data between separate runs of the program, as you
have not yet been taught any methods by which such could be done.
Other Requirements:
These are other things you must address or consider in developing your solution. See also the
marking guide at the back.
OR-1: Create a class diagram to model the planned organisation of classes
Before you commence any coding, you should create a UML class diagram which shows what
classes you need, and what data each class will record and what are the key methods that each
class will provide. This diagram can be created using “Enterprise Architect” on computers on
campus, or you can find an online system such as
draw.io that may also allow drawing of class
diagrams. You are allowed to revise this diagram before submitting.

ITECH2306 – Assignment 2 Task Specification (2023-Sem 1) Page 9 of 12
OR-2: Code constructs/elements/techniques that must be used
You are expected to make use of the following at appropriate places in the code:
Use selection/decision constructs (and form suitable relational expressions)
Use repetition constructs
Implement association (links between classes) in appropriate places
Implement aggregation in appropriate places
Use arrays (with square-brackets) in appropriate places in your work. (Some people may
know about the ArrayList class, but this is not required to be used for this assignment as it
will be taught later in the semester so you should try avoiding using that.)
Use the Scanner class for keyboard input. Remember to use extra .nextLine() calls after
numeric inputs.
Follow the recommended techniques (presented in the learning materials) for the
appropriate naming of variables, parameters, methods and classes. (And do not use
abstract names devoid of context such as
decision1, decision2, input4, or obscure names
such as
tw or yp as these do not make any sense to humans about the purpose or
meaning of the values inside them or the objects they might refer to.)
Use in-code documentation to explain significant segments of code (e.g. an explanation of
each method’s purpose, the meaning of the parameters, the meaning of the returned value)
Use proper indentation of code within blocks so that the structure of the code is visually
clear to comprehend at a glance, as is expected by industry-standard coding.
Additionally, you are expected to write all the code yourselves. Do not share your code with
anyone else or copy from other sources.
OR-3: You need to consider what other classes may be needed to make things “work”
To meet the functional requirements will require a range of classes to be written. Some of these
may be obvious from the descriptions given earlier. But you will need to consider more completely
what set of classes are required to fully enable the program to be realised. Not all classes have
been explicitly described, or have not been described fully in one place, because you need to apply
appropriate problem-solving techniques and programming to fully achieve the functional
requirements. You will be assessed on the appropriateness of the choices you make for these
“other” classes.
You will also be assessed on the appropriateness of choices of programming constructs used in
your code (such as methods, fields, constants), and the appropriateness of the modularisation of
the code, the distribution of responsibilities across the classes, etc.
OR-4: Use Git to keep track of incremental development work
The assignment is designed to be developed incrementally, over time. As we have taught the git
tool in this course (refer to Week 6 materials), you will be expected to use a git repository created
through the GitHub Classroom for this course, and to make regular commits to the repository, in
order to provide evidence that you have developed the solution incrementally (and to provide
evidence that you can use git). Also, in the video you submit, you will be expected to show yourself
making a commit of something to the repository and ensuring it gets pushed through to the version
of the repository hosted on GitHub (see later for details).
Before beginning to write any code, you will need to “Accept the Invitation” for this assignment on
the GitHub classroom, to have the repository created for you. The link to the invitation is found in
Moodle. It will contain an empty Eclipse Java project with a ‘src’ folder in which to place your
packages and classes, which you can import into Eclipse to begin writing the code.
It is suggested that you would commit to the repository each time you complete one of the
Functional Requirements (or make a correction/addition to a functional requirement). But you
should be mindful to only commit code that is free of syntax errors (and hopefully free of logical

ITECH2306 – Assignment 2 Task Specification (2023-Sem 1) Page 10 of 12
errors), which compiles without errors. The marker will be examining your commit history and
checking that you committed sensible work, and that you used suitable commit messages.
NOTE: The marker will obtain your assignment work by cloning your repository. If any work is not
in the repository, and not in the final commit on the ‘main’ branch, it will not be considered during
marking.
OR-5: The code must separate domain classes from user interaction classes
Good programming practice requires that you would ensure that each class you write is focused on
one aspect: e.g. a domain class would focus on representing an object or concept from the
problem domain, and separate classes would focus on managing the user interactions, other
classes would focus on data management aspects. This would mean that if the user interactions
were to initially use a text-based interface, but later was replaced by a graphical user interface, that
there would not be any need to alter domain classes or data management classes.
Therefore, you should make sure that you do not make use of console-based output and input
inside the domain classes. Place all the code that does input and all the code which does output
into classes which are solely focused on handling user-interaction – and then use parameters or
return values to communicate between the domain class and the other classes.
OR-6: Develop JUnit Tests for several separate aspects
You are expected to write one or two test classes to test the correctness of behaviour of at least
one of the domain classes which is used to represent information about shareholders or
companies. In particular, you should consider writing tests that confirm the following:
Tests that check that some shareholder’s shareholding information is correctly stored and
retrieved.
Tests that check that a shareholder’s dividend is calculated correctly
Some other similar test which seeks to confirm the correctness of calculations or the
alteration of state of some object (of one of the classes you designed).
You are not expected to test
every method of the domain classes, but should make a reasonable
attempt to tests several methods as indicated by the above dot-points.
In developing the tests, you should consider carefully what your test cases will achieve / prove, by
selecting appropriate actions/test data to use, and consider what would be an appropriate pre-test
state for doing the test.
A reasonable attempt getting high marks would make use of several different types of assertions
across your test cases, and probably have at least 2 different test cases for each aspect listed
above as a dot-point.
Video Assessment requirements:
After you have completed the coding, you need to create a short video (no more than 4 minutes
please). Both the screen and your face must be recorded for the duration of the video. The
following things must be in the video:
Alter one of the domain classes by swapping the order of any two methods in that class
(use cut/copy and paste), save, and then commit this changed file to your git repository .
After committing, show that this change has definitely been committed, by viewing the
repository history and viewing that commit’s difference-view in your web browser.
Show that your JUnit test cases run.
Explain how you decided how to form the test, for one of the more complicated JUnit test
cases that tests a method that is
not just a plain get or set method (nor a constructor).
ITECH2306 – Assignment 2 Task Specification (2023-Sem 1) Page 11 of 12
If you do not have software already installed to do the video recording you can access one through
Moodle from the ‘Assignment 2 Video’ submission page, after you click “Add media submission”
when you see the “My Media” page of Kaltura, there is a button on the right labelled “+ Add New”.
Clicking that displays a menu of options – you can select “Kaltura Capture” which may ask you to
install the software that will allow you to capture the screen and video via one of the links
“Download for Windows” or “Download for Mac”. (You may need to refresh the browser page after
installing. After uploading a recording you may need to re-start the submission process to select
the uploaded video.)
Submission Requirements & Implications of Missed Deadlines
Even though you are using GitHub to commit the work as you go along, we still require you to
submit your code to Moodle. However, the marker is going to clone your repository to do the
marking of your work.
Also, as mentioned in OR-1, you need to create a UML Class Diagram. The diagram should be
placed into either a PDF or Microsoft Word document, and this should be included in the
submission made to Moodle (you can put it in the root/base folder of the Eclipse project).
You are also required to submit a video as explained above.
The submission time used for you will be determined as the later of the time you submit the code
or video to Moodle, or make the final commit to the repository.
Submissions made later than the due time will have a penalty of 5% of the available marks
deducted for each day (or part of day) that it is late.
For example, if you submit or commit code
to the GitHub repository 30 hours late, this is more than 1 day but less than 2 days, so a penalty of
10% of 20 (i.e. 2), will be deducted from what your work is worth. If you have a legitimate reason
why you won’t be able to submit on time, you must request an extension from your lecturer in
advance of the due date (2 days before due date), by submitting the relevant documentation
through “My Student Centre”. After the cut-off date (7 days later than due date), you are no longer
eligible to receive a mark.
Marking Criteria
All code files submitted in your repository will be considered together in order to form judgements
about the criteria listed below. About 46% of the marks are given based on correctness of the
behaviour / functioning of the program – whether it behaves in the manner described in the
requirements.
The remainder of the marks are given based on judging your demonstration of various aspects of
coding skill/techniques and the quality of the design of your solution, and on several other tasks
you had to do besides coding the program. (A “
quality” approach to the design of a solution is one
which applies the principles that have been taught, and exhibits the best possible design choices
that a person could make for the situation).
The manner in which marks are available is shown in the table on the following page. However, it
is not possible to give any greater detail without giving-away the solution approaches.

ITECH2306 – Assignment 2 Task Specification (2023-Sem1) Page 12 of 12

Criteria for Assignment 2 Available
Marks
Assessment Item 1: The program behaves in accordance with the Functional
Requirements
[30 marks]
FR-1: The program must be a text-console menu-based system 2 marks
FR-2: Add a new company to system 4 marks
FR-3: Allow the user to get a list of the companies 2 marks
FR-4: Allow the user to add a new investor to the system 5 marks
FR-5: Allow the user to get a list of the current investors of a particular company 3 marks
FR-6: Allow the user to enter information about a dividend declared by a company 3 marks
FR-7: Allow the user to set topics/questions for shareholders of some company to vote on 3 marks
FR-8: Allow the user to record votes by a shareholder 3 marks
FR-9: Allow the user to end the voting and report the outcomes 3 marks
FR-10: Allow the user to show information about a specific shareholder 2 marks
Other Assessment Items – Concepts/Skill/Approaches [33 marks]
Assessment Item 2: Ability to appropriately designate responsibilities to classes across the
system (fields, methods, inter-object interactions)
12 marks
Assessment Item 3: Ability to achieve an appropriate level of modularisation of the code 1 mark
Assessment Item 4: Ability to implement aggregation 2 marks
Assessment Item 5: Ability to use arrays 3 marks
Assessment Item 6: Ability to perform input and output appropriately 3 marks
Assessment Item 7: Ability to include an appropriate level of documentation in code and to
adhere to the recommended techniques of naming identifiers
2 marks
Assessment Item 9: Ability to represent a class model by a UML class diagram 3 marks
Assessment Item 10: Ability to develop JUnit tests to appropriately test domain classes 4 marks
Assessment Item 11: Ability to use Git to keep a history of incremental progress on a
project
3 marks
Video [2 marks]
Assessment Item 12: Demonstrations in the video 2 marks
Overall Total: 65 marks
available

<End of document>