Before you get started
This class requires you to do a LOT of work between reading assignments, a pretty large project, and two exams.
Grading is quite strict as well, in that failure to get a passing grade in, say, the project will earn
you a failing grade in this class. Put it another way, you cannot get around work by skipping assignments
and hoping to pass based on a good class average.
^ Top ^
Class participation will help settle borderline grades. While class attendance is not taken, your instructor believes
that regular class attendance is important and expects students to actively participate in class. Questions and comments
are always welcome.
Late Work
There is no late work in this class, really. The deadline for the project is the last week of class, which means that if you
fail to deliver, the only things you can get are a failing grade or an incomplete, depending on circumstances.
Same thing for the weekly project status updates that you have to deliver to your peers, live if you are in the main section,
or in writing if you work on the project individually. If you don't have your status update, then you'll get penalized as and
we move on.
^ Top ^
Programming Language(s)
For any of the assignments in this class, including the project, please feel free to use any of the free and/or
open-source (FOSS)
object-oriented programming languages in the set { Java, Ruby, JavaScript, Python, PHP, Objective C }.
Work done using languages other than specified above, as well as the linking of free and open-source software
with proprietary 3rd party libraries will not be accepted.
To learn more about free software check out the Free Software Foundation.
You should also know that free software is not the same thing as open-source software,
this article from the
GNU foundation clarifies the matter for you.
^ Top ^
Test Environment
All programming work you do for this class will be tested on our computer(s) running a fresh installation of
Ubuntu 12.04 (Precise Pangolin).
I'm sorry, but the fact that your code runs on your computer and not on ours is not enough to earn you credit
for your work.
If you've been using Linux, then this requirement is very easy to satisfy. If you're new to Linux, then you'll have
some learning to do, which is a very good and valuable thing.
We're not going to test under any version of Windows, nor are we going to do it under any other Unix variant other
than the one described above.
Even if your application happens to be a web application, we should be able to check out the code from your repository,
follow the build instructions, deploy locally and be able to test it using a good browser such as Firefox, Chrome, or
Safari.
If you're building a mobile application, then we'll use the simulator/emulator that comes with iOS or Android.
^ Top ^
Unit Testing
We're all tired of bad software, whether because it crashes when we least expect it or because of security
holes that allow the bad guys to take over our systems and identities. We all pretty much despise software
maintenance, in particular when we're asked to modify code that we never touched, don't really understand,
and have no way of making sure our changes don't damage existing functionality.
The good news is that we can do something about it: creating automated unit tests for all your code is a
very good start. Doing it in Test-Driven Development (TDD) fashion is even better.
You cannot possibly get full credit for your work unless each and every method in your classes has good
unit testing. By good I mean meaningful and sufficient:
- A unit-test that just asserts true is not meaningful.
- Providing only one unit test for a method that requires multiple tests is not sufficient.
You will be required to measure and include with your deliverables the unit test coverage as measured by the tool
of choice in your chosen programming language, e.g. jCoverage for Java, Rcov for Ruby, etc.
If you fail to submit unit testing, then you cannot expect to get more than 50% in the assignment.
Unit test coverage above 80% is required for full credit. Unit test coverage below 50% doesn't earn you any credit.
^ Top ^
Project
The true measure of good Software Engineering is working software delivered on time--not much of a choice here since the
delivery date is fixed--and that satisfies the customer expectations. Your budget is fixed too since you cannot add new members
to the team.
Team
If you are in section #1 (live, Main Campus), then you'll do the project as part of a team of 4-5. Students in all the
other sections will work on individual projects.
You should work on creating a team or becoming part of a team. Your instructor doesn't like assigning students to teams.
Topic
If you have an idea, then pitch it to your peers and get them to join your team. In this case you are the customer and the
delivery team which makes for some interesting challenges: you're more like an entrepreneur than a small company that delivers
software on to paying customers.
Your instructor will assign you a project topic only all else has failed.
FOSS
All work you do is FOSS. Your instructor prefers GNU's GPL, however for purposes of this class you may use any of the
open-source licenses that are popular, e.g. Apache, MIT, FreeBSD.
House Keeping
Project Management and Collaboration
As a team you'll need a way to collaborate on your project. Keeping track of stories and who's working on them, issues,
defects, group discussion, etc. are things that are best done using a tool. Some like
Pivotal Tracker, others like Bitbucket,
and yet others are totally fine using Google Docs and Groups.
I strongly encourage you to stay away from email and Excel spreadsheets. Spend a day as team researching what's out there,
choose something that looks reasonable and doesn't cost money and go for it. Remember, in the end it's just a tool and
no tool is perfect.
Last but not least, you have to invite your instructor and your TA to your project management/collaboration account.
Code Repository
Each team member is expected to write code for their respective project. We expect to see frequent commits to
the code repository you have chosen for your project.
Since your project is FOSS, you're going to use a public repository where the public at large has read access and only the
team members are allowed to commit code.
^ Top ^