CSCE 431: Software Engineering (Study Abroad in Singapore)

Syllabus
Slack

Class Activities

Slides

  1. Overview & Intro
  2. Agile & Teams & Pairs
  3. Ruby
  4. Architecture
  5. Rails
  6. Version Control
  7. BDD
  8. TDD
  9. Design Patterns
  10. Security
  11. Refactoring
  12. JavaScript
  13. Operations

Team Status

Team Iteration 0 Iteration 1 Progress Presentation Team Peer Evaluation Iteration 2 Iteration 3 Iteration 4 Final Project Report Final Project Demo Final Team Peer Evaluation
Marina Bay SaaS OK OK OK OK OK OK OK OK OK OK
Numberzz OK OK OK OK OK OK OK OK OK OK
Healthy Singapore OK OK OK OK OK OK OK OK OK OK
Keyboard Nipple OK OK OK OK OK OK OK OK OK OK
The Instagram Spot OK OK OK OK OK OK OK OK OK OK
Timothy for the Nguyen OK OK OK OK OK OK OK OK OK OK
CSCE 431 - Singapore 2020
-------------------------

This is a list of all the things you need to do for the class.  This is an almost up-to-date list.


Now! (REALLY do before arrival in Singapore)
--------------------------------------------
[ ] Set up your working environment.  This includes:
	[ ] Create an Amazon EC2 (students may opt to use Cloud9) or LightSail instance
		* EC2's free tier and LightSail's $5.00 plan are sufficient.
		* New to AWS?  12 months of 750 hrs/month free.  That means you can leave the instance running 24/7 for free.  LightSail is a flat rate after the free runs out.
		* Not new to AWS and want to control costs?  Shutdown the instance when not in use (good for security, too).
		* If you can't decide which to pick, pick LightSail.
	[ ] Install Ruby on Rails on the EC2/LightSail instance
	* You are hereby EXPLICITLY and SEVERELY warned: DO NOT develop locally on your machine.  And especially don't put Rails on your device.  It's possible, but it's messy.  Do all development in the EC2/LightSail instance. I will have no sympathy for those who disregard this warning.
[ ] Create a GitHub account (https://github.com)
[ ] Create an PivotalTracker account (https://www.pivotaltracker.com)
	* I have requested an Academic Account so I can make private projects
	* If you don't need a private project, public projects are free
	* You'll create the project later, you just need to register the account now
[ ] Create a Heroku account (https://www.heroku.com/)
[ ] Learn git (https://try.github.io/)
[ ] Get started with Ruby (https://www.ruby-lang.org/en/documentation/quickstart/)
[ ] Get started with Ruby on Rails (https://guides.rubyonrails.org/getting_started.html)
[ ] Get started with Heroku (https://devcenter.heroku.com/articles/getting-started-with-ruby), (https://devcenter.heroku.com/articles/getting-started-with-rails5)


	
Now-is-good (best to do before arrival in Singapore)
----------------------------------------------------
[ ] Reading Summaries
	[ ] Reading 0: Watch The Future of Software Engineering (https://www.youtube.com/watch?v=h1TGJJ-F-fE)
	[ ] Reading 1: The Crisis in Software (https://people.engr.tamu.edu/pcr/courses/csce431/winter20/reading/CrisisInSoftware.pdf)
	[ ] Reading 2: Development and Deployment at Facebook (https://people.engr.tamu.edu/pcr/courses/csce431/winter20/reading/FacebookDevelopment.pdf)
	[ ] Reading 3: The Joel Test: 12 Steps to Better Code (http://www.joelonsoftware.com/articles/fog0000000043.html)
	[ ] Reading 4: API Design Matters (https://people.engr.tamu.edu/pcr/courses/csce431/winter20/reading/APIDesign.pdf) or Software Engineering at Google (https://arxiv.org/pdf/1702.01715.pdf)
	[ ] Reading 5: Scaling Ruby-on-Rails (https://people.engr.tamu.edu/pcr/courses/csce431/winter20/reading/scaling-ruby-rails.pdf)
[ ] Programming Assignments
	[ ] Programming 1: Ruby Intro (https://github.com/saasbook/hw-ruby-intro)
	
	[ ] Programming 2: Rails Intro (https://github.com/saasbook/hw-rails-intro)
	[ ] Programming 3: BDD & Cucumber (https://github.com/saasbook/hw-bdd-cucumber)
	
[ ] Read the Textbook
	[ ] Chapter  1: Introduction to SaaS and Agile Deployment
	[ ] Chapter  2: The Architecture of SaaS Applications
	[ ] Chapter  3: SaaS Framework: Introduction to Ruby
	[ ] Chapter  4: SaaS Framework: Introduction to Rails
	[ ] Chapter 10: Project Management: Scrum, Pairs, and VCS
[ ] Start your Travel Journal


Then (do while in Singapore)
----------------------------
[ ] Meet your Team
	[ ] Introduce yourselves
	[ ] Exchange contact details
	[ ] Decide on a team name
		* Team name should not be lame (as judged by instructor, e.g. "Team 1" is lame).
		[ ] ONE person on the team sends email to me:
		To: Philip Ritchey 
		Subject: [CSCE 431] Project Team - (Team Name)
		Team Name: SparkleUnicorn
		Jane Student
		Joe Student
		...
[ ] Create a Team on Heroku
[ ] Create an Organization for your team on GitHub
[ ] Create a PivotalTracker project
[ ] Iteration 0
[ ] Iteration 1
[ ] Progress Presentation
[ ] Team Peer Evaluation
[ ] Read the Textbook
	[ ] Chapter  7: Requirements: BDD and User Stories
	[ ] Chapter  8: Testing: Test-Driven Development
	[ ] Chapter 11: Design Patterns for SaaS Classes
	[ ] Chapter  5: SaaS Framework: Advanced Rails
	[ ] Chapter 12: Performance, Releases, Reliability, and Security
[ ] Attend class everyday
[ ] Participate in all group activities
[ ] Keep your Travel Journal up to date
[ ] Be safe
[ ] Have fun

	
Later (do after returning to USA)
---------------------------------
[ ] Read the Textbook
	[ ] Chapter 6: SaaS Client Framework: JavaScript Introduction
	[ ] Chapter 9: Maintenance: Legacy, Refactoring, and Agile
[ ] Iterations 2,3,4
[ ] Final Project Report
[ ] Final Project Demo
[ ] Final Team Peer Evaluation
[ ] PICA end-of-course evaluation


Reading Summaries
-----------------
Each summary (2 points each) should be less than one page long (expected length: approximately 1/2 - 2/3 page). Quality is valued over quantity. Submissions over one page will receive no credit.

Each summary should contain the following:
* a heading that states the title(s), author(s), and chapter(s)/section(s) (if applicable) of the reading(s)
* one paragraph containing the main idea and several important supporting points and ideas from the reading
* one short (1-2 sentence) paragraph about how this material relates to what has been covered so far in class or in your project
* one paragraph of your own analysis of the concepts described by the paper (Does the author present valid points? Do you agree with the material and/or position presented? What's your opinion?)

Be sure to include specifics and back up your statements with data from the article or your particular experiences. Provide minimal, if any, direct quotes: this is your summary.

If you summarize the main points from the article, and provide a reasonable critical analysis, you should get full points. Reasons for not getting full points include errors in spelling, grammar, punctuation, tense, organization, format, etc.

Submit as a pdf or txt file to eCampus.


Programming Assignments
-----------------------
Submit the address of your Git repository and your Heroku app (as applicable) by email to pcr@tamu.edu


Iteration 0
-----------
This week you should set up meetings with your customer. Emphasize to them that time is short, so you need to get going right away. In the first meeting(s) you should extract their user stories, sketch low-fi user interfaces and story boards (bring something to sketch on/with), etc. It might help to record your conversation (e.g. on your phone). You can then iterate with them and prioritize the stories. Each team should select a Scrum Master and Product Owner. The Scrum Master will submit the team reports. I recommend it be the Product Owner who makes contact with the customer to set up the meetings. You need to meet with the customer every iteration, if at all possible.

Turn in the following, with all elements in a single PDF file:
* Team roles: The team should elect a scrum master and product owner.
* Customer meeting date/time/place: The team product owner should contact the customer and set up a meeting.
* Summary: Write a two-paragraph (max) summary of the main customer need and how the application meets it, including who the stakeholders are.
* User stories: Create at least 4 user stories on 3x5 cards. These should be in the format shown in Chapter 7. You can submit photos of the 3x5 cards or type them up. Example:
	Feature: Add a movie to Rotten Potatoes
	As a movie fan
	So that I can share a movie with other movie fans
	I want to add a movie to the Rotten Potatoes database
* User interface: Create lo-fi UI mockups and storyboards for at least 4 user stories. Submit photos of these.
* Pivotal Tracker: Create a free open-source public Pivotal Tracker project and enter the user stories. Give access as “observers” to the instructor and TAs.

* GitHub Repo: Populate the initial public GitHub repo for your project. An open source repo is free. Give the instructor and TAs access as collaborators.
* Scrum: When and where does your team have their scrum meetings?
* For legacy projects: write a one-page document discussing your overall strategy for learning/improving the prior code. Also, if any of your user stories are improved/replacement stories for what was done in the past, please note that in this document.


Iterations 1 -- 4
-----------------
Overall Requirements
* Using Pivotal Tracker, identify a subset of stories you'll work on during this iteration and who owns each.
* Use BDD+TDD to develop these stories and deploy to Heroku.
* For legacy projects, understand and refactor legacy code as necessary.
* Get feedback from customer and indicate how this will affect the next iteration.

Specific Milestones in Each Iteration
* Pick approximately 1/4 of the stories you submitted for Iteration 0 (along with any later user story additions) for each iteration, balancing the workload between each of the iterations. The selection should be based on customer meetings.
* Create a comprehensive set of Cucumber and RSpec test cases for each user story to be implemented. You should have a Cucumber feature file with one or more scenarios with high-level declarative steps, corresponding to the UI sketches. The test cases must be able to run automatically. Test cases should include both successful and exceptional scenarios (happy and sad paths). Make sure that we can git checkout and run your tests from scratch.
* Design diagram identifying current key entities and relationships in the app, i.e., what will be the most important models and how will they be related. A UML class diagram is one way to do this, but any understandable informal method is acceptable. Update this diagram on each iteration.
* Implement the user stories selected for the iteration and make sure that all test cases can be run automatically and that the test cases pass.
* Deploy to Heroku, verify that the user stories are working, and demo for the customer and obtain customer feedback.

Turn in the following, with all elements in a single PDF file:
1. Customer meeting date to demo this iteration.
2. User stories implemented in this iteration.
3. Design diagram for this iteration.
4. Any additional documentation related to the user stories, e.g. changes to lo-fi UIs.
5. If you were not able to implement all the stories that you initially chose for this iteration, please list which ones and why not.
6. If you have changed any of your stories, please write a short description of the changes made and the reason behind the changes.
7. If you are working on a legacy project, please list any user stories that were rewritten and code refactored.
8. Evaluations of your code and tests, such as SimpleCov and CodeClimate
9. Links to your Pivotal Tracker, Github repo, and Heroku deployment. Make sure these are up-to-date.
10. Scrum meeting time and place.

Please tag your git repository revision with Iteration1, Iteration2, etc. Here are some example commands for how to tag revisions:
* To tag the current revision: git tag -a Iteration1
* Warning: You must explicitly push your tags with the command git push --tags. Before you submit, please make sure that when we clone, we can see the tag.

Grading will be based on the quality of user stories, comprehensiveness, and success of your test cases. We might also create our own test cases. Make sure that we can git checkout and run your tests from scratch.


Progress Presentation
---------------------
Each team will give a 15-minute prepared presentation (including 3-minute Q&A) in class on the project progress. All team members must participate in the presentation.
Elements should include:
* some sort of visual aid, e.g. slideshow, digital poster
* describe the application
* walk through the major use cases
* explain some of the design choices you've made while working on your project
* describe challenges and lessons you have learned so far about the software engineering process
* how you will improve your design and development process for the next 2 iterations
* demo working aspects of the application (should be about 50% of total planned functionality)


Team Peer Evaluation
--------------------
Each team member must fill out the first team peer evaluation (https://people.engr.tamu.edu/pcr/courses/csce431/winter20/project/TeamPeerEvaluation1.docx) and must submit by email. This peer evaluation will be non-graded for individual team members. However, ALL team members must submit their forms in order for the team to gain the points.

Each team member must fill out the final team peer evaluation (https://people.engr.tamu.edu/pcr/courses/csce431/winter20/project/TeamPeerEvaluation2.docx). Each member must submit these by email separately.


Final Report
------------
Submit a zip-compressed file by email including the PDF of your poster, your progress presentation slides, and a final report (as a PDF) with following items:
1. Two-paragraph summary of the project as implemented, including the main customer need and how the application meets it, including who the stakeholders are. This will contrast to what you wrote in Iteration 0.
2. Description of all user stories (including revised/refactored stories in the case of legacy projects). For each story, explain how many points you gave it, explain the implementation status, including those that did not get implemented. Discuss changes to each story as they went. Show lo-fi UI mockups/storyboards you created and then the corresponding screen shots, as needed to explain to stories.
3. For legacy projects, include a discussion of the process for understanding the existing code, and what refactoring/modification was performed on the code, in addition to the user stores listed above.
4. List who held each team role, e.g. Scrum Master, Product Owner. Describe any changes in roles during the project.
5. For each scrum iteration, summarize what was accomplished and points completed.
6. List of customer meeting dates, and description of what happened at the meetings, e.g. what software/stories did you demo.
7. Explain your BDD/TDD process, and any benefits/problems from it.
8. Discuss your configuration management approach. Did you need to do any spikes? How many branches and releases did you have?
9. Discuss any issues you had in the production release process to Heroku.
10. Describe your implementation environment – homebrew, VirtualBox, AWS, Cloud9, etc., and any issues with it.
11. Describe the other tools/GEMs you used, such as CodeClimate, or SimpleCov, and their benefits.
12. Link to two-minute video interview with the customer. Store the video on Vimeo.
13. Link to the 2+ minute demo highlighting your app's main features. Here are two examples from past projects: Nurse Vacation Scheduler and Pet Foster Home Finder.
14. Link to your public GitHub repo. Make sure all code (including Cucumber and RSpec!) is pushed to your repo.

Notes:
* See a sample final report (https://people.engr.tamu.edu/pcr/courses/csce431/winter20/project/SampleFinalReport.pdf). The report should take no more than 5 pages of 12-point text, not counting figures (e.g., screen shots).
* The instructor will retain a copy of all of your project material to facilitate future legacy projects.


Final Project Demonstration
---------------------------
* Final presentations/demos will take place sometime in the 2 weeks before Spring Break (hopefully).
* The final presentation will consists of two parts: an 8-minute prepared poster presentation and live demo (on a team member laptop), and a random testing by the instructor. Grading will be based on the quality of the poster presentation and prepared demo, and testing by the instructor.
* In your poster presentation and live demo, you should describe the application and walk through the major use cases. You may also explain some of the design choices you made while working on your project. The poster should go over your application, your design, and challenges and lessons you have learned about the software engineering process. Every team member must participate in some way in the presentation and demo.
* Use PowerPoint (or equivalent) to create your poster. Your poster dimensions can be up to around 30 inches by 40 inches. Here (https://people.engr.tamu.edu/pcr/courses/csce431/winter20/project/ExamplePoster.pptx) is an award-winning 30x40 inch poster example.


Travel Journal
--------------
Create a blog (e.g. at Blogger, WordPress, Wix, Weebly, etc.) and submit the URL by email. 
Use the blog to document your thoughts and experiences while studying abroad.

Requirements:
* post at least 1 photograph/video per day (taken by you or someone else taking a picture of you) between 29 December 2018 and 11 January 2019 (14 photographs/videos in total)
* four "special" posts
	- one post on your perception of the interconnectedness of your own life with that of Singaporeans and of the U.S. with Singapore
	- two posts on your perception of the similarities and differences between Singapore and the U.S. with respect to food, language, traditions, customs, laws, technology, and education
	- one post on the history of Singapore since 1965
* "ordinary" posts must have a minimum of 150 words (remember: thoughts and experiences! at the very least, explain the picture and what significance it has).
* "special" posts must have a minimum of 500 words.

The blog does not need to be public (world-readable), but you must give Dr. Ritchey  read access.

While this is not a grade for CSCE 431, it is necessary in order to satisfy the ICD requirement for study abroad.  It will also be fun and your pictures and stories will help us recruit students for next year's trip.