170 likes | 342 Views
Software Engineering for Software as a Service: A Software Engineering Course with Student Projects that Actually Work!. Armando Fox and David Patterson UC Berkeley June 21, 2010. Overview. Web 2.0 SaaS is a great motivator for teaching software skills
E N D
Software Engineering for Software as a Service:A Software Engineering Course with Student Projects that Actually Work! Armando Fox and David Patterson UC Berkeley June 21, 2010
Overview • Web 2.0 SaaS is a great motivator for teaching software skills • students get to build artifacts they themselves use • some projects continue after course is over • opportunity to (re-)introduce “big ideas” in software development/architecture • Cloud computing is great fit for CS courses • elasticity around project deadlines • easier administration of courseware • students can take work product with them after course (e.g. use of Eucalyptus in RAD Lab)
Trends over Next Decade • Computing at Extremes: Mobile Client + Cloud • Expanding Software As A Service (SaaS) • Applications for the datacenter • Web 2.0 apps delivered via browser • Shrink wrap SW Services over Internet • Cloud Computing Accelerates SaaS • Pay-for-use computing, storage, network transfer • Amazon Web Services, Google Apps, M/S Azure, … • Instant Scale-up, Scale-down • Rewards Conservation: Can cost 0$ when doing 0
Software Education in 2010 (or: the case for teaching SaaS) • New: languages & tools are actually good now • Ruby, Python, etc. are tasteful and allow reinforcing important CS concepts (higher-order programming, closures, etc.) • order-of-magnitude greater productivity than 1 generation ago, including for testing
Team Skills • Web 2.0 SaaS apps increasingly composed of loosely coupled teams doing Develop/Assess/-Deploy/Operate (DADO) • Technical as well as “social” team skills needed • repository management • branching, tagging, merging • distributing responsibility during collaboration • Web 2.0 SaaS == Great fit for ugrad education • Apps can be developed/deployed in 1 semester • Rapid gratification =projects outlive the course • Team skills in context of agile development
SaaS Using Ruby on Rails at Cal • What’s different about DADO for SaaS • Basic *ilities: Horizontal scaling, load balancing, H/A • Consistency, caching, database scaling, CAP thm • Benchmarking, tuning, understanding SLA’s • How CS “big ideas” make RoR high productivity • H.O. programming, metaprogramming, introspection =ActiveRecord ORM • runtime code generation =AJAX support
Web 2.0 SaaS as Course Driver • Almost all students: ability to design own app was key to appeal of the course • design things they or their peers would use • High productivity frameworks =projects work • actual gratification from using CS skills, vs. getting N complex pieces of Java code to work but not integrate • Fast-paced semester is good fit for agile iteration-based design • Tools used are same as in industry
Cloud Computing as a Supporting Technology • Cloud Computing Elasticity is great for courses! • Donation from AWS; ~$100/student • Watch a database fall over: ~200 servers needed • Lab deadlines, final project demos • VM image simplifies courseware distribution • Prepare image ahead of time • Students can be root if need to install weird SW, libs... • students get better hardware • cost associativity • cloud provider updates HW more frequently • VM images compatible with Eucalyptus—enables hybrid cloud computing
Questions? • Help yourself to our materials (http://radlab.cs.berkeley.edu)
Planning a SaaS course? • Pick a highly-productive framework • Projects can be deployed, and will actually work • Students can use production-quality tools & methods • We used Ruby on Rails; Google AppEngine probably also a good choice • Avail yourself of *-as-a-service • Google Code for Subversion version control • PivotalTracker for project tracking • EC2 for app deployment (Amazon is very good about donating AWS credits for education) • Tie high-productivity mechanisms back to CS “big ideas” • Code generation, introspection/reflection, metaprogramming, higher order programming • Steal our materials (http://radlab.cs.berkeley.edu)
Topic coverage & labs • “Hello World” web app in Rails • Unit-test-driven design of a specified module • User-story-driven design of an app (work in teams of 2 or 3 students) • Deploy own app to Amazon EC2 • Use Cloudstone benchmark app to saturate MySQL database (using EC2) • Experiment with different types of caching to observe effect on database saturation • Final demo: publicly-deployed app, short talk
Comparison to other SW Eng./programming courses • Open-ended project • vs. “fill in blanks” programming • Focus on SaaS • vs. Android, Java desktop apps, etc. • Focus on RoR as high-level framework • Projects expected to work • vs. working pieces but no artifact • most projects actually do work, some continue life outside class • Focus on how “big ideas” in languages/programming enable high productivity
Success stories, cont. • Fall 2009 project: matching undergrads to research opportunities • Fall 2009 project: Web 2.0 AJAXy course scheduler with links to professor reviews • Spring 2010 projects: apps to stress RAD Lab infrastructure • gRADit: vocabulary review as a game • RADish: comment filtering taken to a whole new level