Hands On Open Source Development

namibiancurrishInternet and Web Development

Nov 12, 2013 (3 years and 11 months ago)

123 views

© 2010 SpringSource, A division of
VMware
. All rights reserved

© 2010 SpringSource, A division of
VMware
. All rights reserved

Hands On Open Source Development

Dr. Mark Pollack

Sr. Staff Engineer: SpringSource

2

Introductions…


Who is this guy?


Who are you?


All about SpringSource and the Spring Framework


Project Goal: Build open source software


Using ‘modern’ development processes and tools


Why should you care?







3

Projects to develop


Portable “Blob” storage API


Data access library for the open source database CouchDB


4

Blob project


“Cloud” data storage is where many individuals and companies
store data.


Your personal family pictures


Internal audit trail logs


Several public providers of this fully managed service


Amazon S3


OpenStack


Microsoft Azure


Host your own service on your own infrastrucutre.


Eucalyptus


Riak


10,000 ft project goals


API ease of use for common cases


API portability


5

Data Access library for CouchDB


What is CouchDB


Part of a new ‘wave’ of non
-
relational databases


Open source Apache project


Considered a ‘document’ database. Data is stored as a JSON document


HTTP/REST requests to interact with the database


“GET”


get a document


“PUT
-

put a new document


“DELETE”
-

delete a document





Query is done by creating ‘views’ on the document


Specifically using “Map/Reduce” framework in JavaScript


10,000 ft. project goals


Provide full Java API for all HTTP requests


Simplify the storage of Java objects in the database


Simplify querying the database for common cases



6

Development Philosophy


Follow agile development principals


Adherence to core OO design principals


Decoupling, encapsulation, orthogonality


Unit/Integration tests


Rapid feedback on the impact of my own changes


Continuous integration


Rapid feedback on the impact of everyone else’s changes


Iterations/Sprints/Intervals…


“Stakeholder” feedback on the impact of changes



7

Traditional and Agile software development approaches


Traditional


Assumes change is avoidable


Manage change by sufficient pre
-
planning and design to avoid change


Big design up front


Agile


Assumes change is inevitable and unavoidable


Assumes impossible (or impractical) to plan
-
around change


Ties to manage change by ensuring the software remainds flexible enough or
respond to change


Ensures that sufficient tooling, process and methods are in place to allow
response to change within the context of an incredibly tight feedback loop

8

Key Practice : Version control


Manages the source code across the team


Mark known points in time for releases


We will also integrate source control with bug tracking


Version control is a requirement for Continuous Integration



Will use subversion for version control


Central repository model


You may have to handle merges when there are simultaneous changes to the
same lines of code.


Will be hosted at SpringSource


Will use “Fisheye” to browse code on the web


See
https://fisheye.springsource.org/browse

9

Key Practice: Continuous Integration


Automated way to enable us to rapidly respond to change while
continuing to have working software.


Software that constantly checks out code and does the following



Compiles code


Run unit/integration tests


Run code metrics (optional)


Deploy (optional)


And notifies you on failure…



We will use CI product “Bamboo”


Setup for you already. See
http://build.springsource.org/


Just need to check email for notification



10

Key Practice: Unit/Integration Testing


Developers write tests to ensure software behave as expected


May test an individual class in isolation (unit testing) or larger parts
of the system collaborating together (integration testing)


Both are important


Regression harness


Feedback on code changes


Allows code to be changed/refactored quickly, easily, and safely in response to
change in requirement, architecture, etc.


The quicker you find a bug, the cheaper it is to fix it



To follow this practice need to select a testing framework


We will use JUnit inside Eclipse


11

Key Practice: Bug, Issue, Project Tracking


Manage project goals for components, versions, timelines


“Issues” are entered into the system for new features


Estimates made when to complete stories


“Bugs” entered to report bugs


In practice used to drive much of the reporting and status of the
project



We will use JIRA


See
https://jira.springsource.org/secure/Dashboard.jspa


12

Product documentation


Many ways to provide this, SpringSource has generally settled on
DocBook


XML schema defines book content. e.g. chapter, paragraph, etc.


XMLMind is a graphic semi WYSIWIG editor


13

General flow


Discuss/teach tools/process at each meeting


We will have a planning session at the beginning of each meeting


We will make goals, decide what’s required to achieve those goals, and the
goals need to be measurable


We will also talk about how well we did, what we could have done better, and
what to do for the next iteration
-

retrospective


We will also need to figure out the feasibility and estimate the time it will take to
complete iterations


During iterations, if we have questions contact Mark via the mailing
list.


2 week iterations so iterations cycle=meeting cycle

14

Resources


“Big Picture” agile overview


Agile Samuari



some free chapters (on estimation)


Code Leader: Using People, Tools, and Processes to Build Successful Software



Agile Estimating and Planning


Mike Cohn


Agile Software Development, Principle, Patterns, and Practices



Bob Martin


http://www.agilefirestarter.com/

Free conference material (pdfs)


https://github.com/agilefire/November2010

(power poit)


Eclipse 3.6 or SpringSource Tool Suite 2.5.2


http://eclipsetutorial.sourceforge.net/totalbeginnerlessons.html

(videos!)


JUnit


www.junit.org

(note: JUnit is already integrated into eclipse)


http://www.vogella.de/articles/JUnit/article.html


http://pragprog.com/titles/utj/pragmatic
-
unit
-
testing
-
in
-
java
-
with
-
junit

(book)

15

Resources


Subversion


http://subversion.tigris.org/


Tortoise SVN
-

http://tortoisesvn.tigris.org/


http://subclipse.tigris.org/

eclipse add
-
in


http://svnbook.red
-
bean.com

(free book)


Pragmatic Version Control using Subversion

(book)


DocBook


http://www.docbook.org/


http://www.xmlmind.com/xmleditor/


JIRA


See videos/docs on http://www.atlassian.com/software/jira/


Continuous Integration (“Bamboo”)


See videos on
http://www.atlassian.com/software/bamboo/


Continuous Delivery

(book)

16

Resources


CouchDB


http://couchdb.apache.org/


http://guide.couchdb.org/

(free book)


Amazon S3


http://aws.amazon.com/s3/


http://docs.amazonwebservices.com/AmazonS3/latest/gsg/


http://www.sitepoint.com/books/cloud1/

book


Before, many out of date and difficult to read books on AWS/S3 out there…


17

Resources


Spring Framework


http://en.wikipedia.org/wiki/Spring_Framework


http://www.springsource.org/documentation


Spring in Action V3

(book)


Spring RestTemplate


http://blog.springsource.com/2009/03/27/rest
-
in
-
spring
-
3
-
resttemplate/


Reference Manual


RESTful Web Services

(book)


18

Fun for the weekend


Read the chapter on estimation in the Agile Samurai


http://media.pragprog.com/titles/jtrap/estimate.pdf


Take a look at CouchDB/Amazon S3


With an eye to see which project you want to develop.


If you are not familiar with Java/Eclipse/JUnit already start a bit with the following


Download latest
Eclipse
or
SpringSource Tool Suite
and get familiar
with the environment


Follow the JUnit
tutorial