- Mobile voting exercise.
- How to compute voting results?
- Some Coding Guidelines.
Programming exercise for Factory Method and properties (using Play's application.conf for properties). Properties are a mechanism for implementing protected variations and the Open-Closed Principle.
No lab this week
Assignment: ExceedVoting. Field test your applications with a friendly competition of ... your applications.
Due Dates:
- 17 April - Register your team as contestant Here. Then I'll send the sysadmin a file containing voter data.
- 18 Apr (Sat) - 19 Apr (Sun) - Preview everyone login as voter to 4 apps you will be voting on and try them, so you know how you want to vote. You can vote/rate (mock voting), but votes won't count yet.
- 19 Apr 17:00 - Preview results Mock voting is closed and mock results are posted on each site. Please check them, since "show results" is one of the requirements.
- 20 Apr (Mon) - Prepare for Prelim Round of Voting prepare you app for Prelim Round of voting. Remove mock votes.
- 21 Apr (Tue) 12:00-18:00 - Preliminary Round of Voting, please login to all 4 apps and make identical votes. Your votes determine which apps advance to the finals. Ratings help the teams improve their apps.
- 21 Apr (Tue) 19:00 or earlier - Prelminary Results Available apps show results of prelimary voting. Every app in same division should (hopefully) show same results. Two finalists chosen from each division.
- 22 Apr (Wed) - Final Preview Four finalists apps are available for everyone to login and try them. Mock voting (again).
- 22 Apr (Wed) 18:00 - Preview Results finalists display the results of mock voting.
- 23 Apr (Thu) 9:00 - Finalists Demo demo the admin interface in class. Optionally demo mobile features.
- 23 Apr (Thu) 9:30 - Final Round of Voting everyone vote on each of the final 4 apps.
- 23 Apr (Thu) 10:00 - Final Round Results and retrospective.
- Quiz on using JUnit
- Authentication and intercepters in Play. Intercepters let you easily and consistently secure all your non-public resources. The Play tutorial section on Adding Authentication describes how.
Assignment: Review security of your application.
- Ensure that all non-public pages are protected the security checks, and unauthenticated users are redirected.
- Use Play intercepters, not custom
iftests in controllers to handle security.
By end of this iteration, your application should implement these features:
- Login Required - must login to view pages.
- Vote by Criterion - user can vote for own contestant (project) for each criterion. There may be several criteria like "Most complete implementation", "Most creative app".
- Ratings - user can assign ratings to each contestant (project). There should be a clear description of what the rating is for, and there may be more than one rating topic, such as "Playability", "User Interface".
- Administrative Interface - users with admin privilege can manage contestants, voting criteria, and voting period.
- Compute and Display Results - application computes "winner" for Criterion topics, and ratings (for each contestant) for Rating topics.
Based on what Aj. Panpiti said and wrote, eXceedVote should have these characteristics.
- Intuitive - people can vote without any training. App should have obvious navigation and prompts.
- Fast voting - can vote quickly. Don't need to navigate a lot.
- Feedback and Confirmation - user can see what he has done so far.
- Easy to Navigate - easy screen should show how to get around. Never need to user browser 'back' button.
- Low Cognitive Load
Create Iteration Plan CO1.md according to the template and add it to your project repository.
- Quiz on basics of Play framework. May be be paper or programming.
- Demo EL2 work product. TAs and instructor will choose a team member to demonstrate, so everyone should be prepared to explain and demo.
- More unit testing.
No lab exam during midterm week.
- Unit Testing Intro.
- Useful intro: http://users.ece.utexas.edu/~miryung/teaching/EE461L-Spring2012/labs/testing.html
- JUnit Home: http://junit.org JUnit is included with Eclipse and Netbeans, but it doesn't have Javadoc or other docs. Download JUnit if you want the Javadoc.
- Unit Test Exercise. See week8/StackTesting.md for details.
- GRASP practice.
- Free time to work on projects.
- Prepare to demo your EL2 work product next week.
- Please study how to use JUnit and how to write test cases.
- Each team will demo their application.
- Discuss and submit the Design Patterns assignment from week 6.
- Requirements update.
- Modeling exercise (TBA).
- Discussion of common glossary terms: Rating, Vote/Voting, "Organizer", Administrator. Many terms are being used for the contentants/entrants such as "Team", "Project", "Group".
- Report results of your retrospective meeting to the TAs individually.
- In the Roadmap below it lists what you should have by the end of EL1. Check that you've done them.
- Class Assignment: Create consistent set of terms and definitions for concepts like (these are my terms) "Ballot Item" (something to vote or judge), "Vote", "Rate", the "contestants" or "entrants" (the things we are voting/rating), "Administrator" (make more specific). "Organizer" is likewise way too vague.
- At eXceed Camp who selects the "voting" criteria and scoring method? How is winner selected?
- Create a common glossary for the class.
- Add Tag: Add a tag named "EL1" to mark the Github commit that corresponds to your work products for end of EL1. You can use the
git tag -acommand to create a tag, or Github "releases".- If you've added more commits since the end of EL1, please find the commit that corresponds to your final EL1 end products and tag that commit.
- You can see your commit history on Github by clicking on "commits" button. It shows the commit checksum prefix and commit messages; you can use the prefix as argument to the
tagcommand.
- Javadoc: Write descriptive Javadoc class comments for each class and interface. Include @author tag. Look at Java API for examples.
- Create a plan for EL2 in file Iteration Plan for EL2.md on Github. Please don't abbreviate the name.
- Include unfinished work from EL1.
- Review and update your Domain Model.
- Write fully dressed Use Cases for UC you will implement in this iteration.
- Please include these goals in EL2 if you haven't already completed them:
- Voter can submit his votes/ratings and system records them.
- System returns clear acknowledgement when votes/ratngs are received.
- Complete domain and software model of design to tally votes/ratings.
- Implement software model for tallying votes/ratings. Provide a UI to display results.
- Write an Installation document (on Github) describing the steps to install and run your app.
We are starting Elaboration Iteration 1. Your team will identify features to implement in EL1. To keep all teams on track, TAs and I will choose a common set of features we want all projects to implement.
By the end of EL1 you must have a running, deployable application. You must also have good documentation, including a better set of requirements (as UC and Supplemental Requirements) and some design documentation, which you will bundle into a Software Architecture Document. The SAD is for developers, so it isn't as rigorous as the SRS, but it should be accurate and complete. Record important design decisions in the SAD. Your Web Frameworks review is a design decision.
In the next few weeks, we'll study some useful technology. I hope to cover Unit Testing, Logging, Persistence, and a few design patterns. We will introduce and require teams to use Issue Tracking and Milestones using Github and Waffle.io, and Git branches for development.
- TA review of your progress. Be prepared to explain what you've done and what you plan to do this week (see [[Iteration Workflow]]).
- Introduction to Design Patterns, with some (hopefully) useful patterns.
- Complete the design pattern practice exercises. Discuss & submit next week.
- Act on advice from TAs. If they make suggestions via issues, either do them or add comment explaining why not.
- Finish iteration EL1. See Roadmap for the Next Four Weeks (above) for what work products you should have.
- Have your web app running next week so you can demo it in lab. It should be reachable from any computer in the lab via web browser.
- Review and discussion of teams' Domain Models. I will choose a few teams to present, so be prepared.
- You should be able to relate your Domain Model to your Use Cases and Mock-up. They should be consistent.
- (postponed) Introduction to Play! framework.
- Practice drawing System Sequence Diagrams.
- Overview of Elaboration Iteration 1 (EL1), its goals, and writing an Iteration Plan for EL1.
- Intro to issue tracking for recording tasks and progress.
- Meet with team to choose goals, tasks, and milestones for this iteration.
- Create Iteration Plan for EL1 using template. Put it on your Wiki and link to your project README file.
- Due: Friday (20th) 21:00. You may revise it later.
- Record backlog and tasks in Github as Issues. Record Milestones as Github Milestones (in issue tracker).
- Work on your tasks. The person doing task should "assign" it to himself (on Github), and change status as work proceeds.
- This is easy to do on waffle.io and it updates the issues on Github.
- Iteration EL1 ends in 2 weeks (3 March). You must have/do:
- deployable web application
- demo the application
- Use Cases for EL1 written in "fully dressed" form.
- Updated domain model, including class and sequence diagrams, accurate glossary, some software design notes in SAD.
UML Sequence Diagram practice (reschedule from week3)
Review of Requirements and Use Cases
Domain Modeling
- Revise and improve your Use Cases, Vision, and Mock-up.
- Create a domain model. You should have at least one domain class diagram and one or more sequence diagrams. These may be sketches (don't have to be beautiful).
- Add terms to your Glossary that explain important concept classes in domain model. For example, if you have a class named "Registrar" then explain what it is!
- Be prepared to explain your Domain Model in lab next week! 2-3 teams will be selected to present.
Quiz on git
Meet the customer!
Each team should create a project on Github. On this site create:
- Vision Statement including Mock-up of the UI. Mock-up is not just some wishful sketch: it must show how the application will be used (screen-by-screen) and how it fulfills the customer's primary use case requirements.
- Glossary file containing terms you learned from the customer, plus any significant terms you learn from your own research.
- Informal Use Cases short descriptions of customer's requirements. Number them UC1, UC2, etc.
- Supplementary Requirements document containing non-functional requirements, or any requirements not expressed as Use Cases.
5 Comparison of Java Web Frameworks: Select some frameworks, use them to create a project, and write a summary of your findings. See: http://goo.gl/9erztx
Due: Tuesday, 10 Feb, on Github.
UML Practice
Git practice (game)
Form a team of 3-5 people for the class term project, which will begin next week.
A "mini-project" as overview of what you will do during your own software project for this course.
For today you will work in teams of 5. You may choose a different team later for the course project, so don't spend a lot of time selecting a team now.
The activities to perform are:
- Find out [Requirements|what the customer wants].
- Jointly develop a [Vision Statement|Vision] of the solution. Ask questions, draw mock-ups of what the solution will look like, investigate existing or similar projects.
- Write a [Vision Statement] (usually 2 pages) that unifies everyone's vision of the product. The Vision helps keep your team on track and avoid feature creep.
- Discover requirements. In this case we will only write "user stories" or "informal use cases" that describe major features. (There are many other kinds of requirements.)
- Plan the first iteration. What can you implement '''today'''?
- Design software for the first iteration. -- Use the whiteboards.
- Quickly write tasks you need to do. Don't try to be complete -- you'll discover tasks as you start coding.
- Do the tasks (write the software). Test your work! Update your tasks, too.
- Integrate & test the result.
- Demo and review it.
- Create a Github project for your team.
- In the project, write a README.md listing your team members.
- Write a short Vision Statement. Vision should include:
- Background - what is the context? what is the problem?
- Who are the customer and stakeholders? How does the problem affect them?
- Why is this project worth undertaking? (Aside from the fact that its required for this course.)
- Your VISION of the solution. And make it visual.
- How is your solution different from existing products?
- Write the Vision in Github or Google Docs. Put a '''link''' to it in your README.md.
- If you use Google Docs be sure to ''share'' it.