View Single Post
  #9   Spotlight this post!  
Unread 26-03-2012, 22:43
BigJ BigJ is offline
Registered User
AKA: Josh P.
FRC #1675 (Ultimate Protection Squad)
Team Role: Engineer
 
Join Date: Jan 2007
Rookie Year: 2007
Location: Milwaukee, WI
Posts: 947
BigJ has a reputation beyond reputeBigJ has a reputation beyond reputeBigJ has a reputation beyond reputeBigJ has a reputation beyond reputeBigJ has a reputation beyond reputeBigJ has a reputation beyond reputeBigJ has a reputation beyond reputeBigJ has a reputation beyond reputeBigJ has a reputation beyond reputeBigJ has a reputation beyond reputeBigJ has a reputation beyond repute
Re: How does your team architect its codebase?

Quote:
Originally Posted by carrillo694 View Post
Another Command-Based Programming team here to chime in -- here's our codebase, for reference:https://github.com/prog694/joebot/

Ziv has already covered the basics of CBP. Ultimately, our team is pleased with this architecture -- we liked the distinction between configurable robot actions (commands) and actual implementations (subsystems).

One thing we did this year was create a series of "fake" subsystems, for debugging purposes. If we wanted to only troubleshoot the Drivetrain and disable everything else, we would replace all of our regular subsystem instantiations with a safe, "Fake" version that simply prints statements instead of actuating hardware.


I will now comment on our software engineering practices, since others have too. We have an unusually large team of [software] engineers, many of whom are unfortunately made anonymous by the orange "prog694" committer in the preceding graph. Our development process is best characterized by the following graph:https://github.com/prog694/joebot/network (click & drag the graph to scroll it.)

We have one guaranteed stable code branch, 'master.' From 'master,' we branch off into a 'develop' branch, where we write all of our untested code.

When someone is charged with implementing a feature, he/she creates a branch off of 'develop' with the prefix 'feature-,' e.g. 'feature-foobar.' Then, when it is time to test this feature on one of our old robots, from that feature branch we branch off into a new branch with the prefix 'debug-', e.g. 'debug-foobar.' In that debug branch, we implement test code that will prove that the feature works.

Finally, once the feature has been tested on old robots to the greatest extent, we merge that 'feature-' branch back in to 'develop' using GitHub "Pull Requests" (example). Because we have so many developers of various skill levels, Quality Control is critical, and so we review every new feature before it is merged with our 'develop' branch.

At a regional, once we have run continuous matches without re-loading code, we merge 'develop' into 'master' and tag that commit, starting with v1.0 and iterating as we improve control over time.
Thanks for the discussion on practices. I have learned a bit about github over the past few months and really want to get our team on a development track like this. Currently working with the school district's IT dept to get unfettered https access to Github

Here's a good talk about Github for anyone familiar with version control that basically describes a process like the above -- How Github Uses Github to Build Github (warning, I don't remember, but there may be a few "bad words" here and there but not many -- this is a presentation at an informal convention given by an adult to adults) http://zachholman.com/talk/how-githu...o-build-github