<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sheila&#039;s Blog &#187; development</title>
	<atom:link href="http://sheilapollard.com/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://sheilapollard.com</link>
	<description>Software Development</description>
	<lastBuildDate>Wed, 24 Mar 2010 17:19:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Setting up an Automated Build System</title>
		<link>http://sheilapollard.com/2009/06/09/setting-up-an-automated-build-system/?utm_campaign=feed&utm_medium=feed&utm_source=blog</link>
		<comments>http://sheilapollard.com/2009/06/09/setting-up-an-automated-build-system/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 10:04:43 +0000</pubDate>
		<dc:creator>Sheila</dc:creator>
				<category><![CDATA[build]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://sheilapollard.wordpress.com/?p=430</guid>
		<description><![CDATA[Many teams apply continuous integration as part of their software development process.  This means that each team member integrates their work regularly.  To facilitate doing this, you first need an automated build script that each developer can use to compile and build the code locally.  If there are no issues, then the developer can check [...]]]></description>
			<content:encoded><![CDATA[<p>Many teams apply continuous integration as part of their software development process.  This means that each team member integrates their work regularly.  To facilitate doing this, you first need an automated build script that each developer can use to compile and build the code locally.  If there are no issues, then the developer can check in their code.  At this point you want an automated build system that takes the latest code from source control and builds it, notifying the team if there are any errors.  The advantage of such an automated build system is that teams are notified early on if there are any integration issues rather than just before a  release deadline.  The build machine also serves as a fully deployed example of the latest version.  When a team member says that a piece of work is completed it should be verified on this machine &#8211; not their own.</p>
<p><a href="http://sheilapollard.com/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2NydWlzZWNvbnRyb2wuc291cmNlZm9yZ2UubmV0Lw==" target=\"_blank\">Cruisecontrol</a> is an open source continuous integration tool.  It allows you to monitor a project, building it when files are updated and notifying you if any part of the build process fails.  There are a lot of reporting tools that can be run on your build.  Unit tests, cover coverage and analysis tools and java documentation are useful to add to your build and make available in your reporting application.  These can be integrated into cruisecontrol.</p>
<p>This post assumes that you are installing cruisecontrol on a redhat machine and that you deploy your application to JBoss.  Any necessary databases have been installed and configured, and you have an ant build script for building and deploying the application.  You have also created a user called cruise that will run the automated build.</p>
<p><strong>Install Java</strong><br />
Download jdk-6u13-linux-i586.bin to /home/cruise<br />
Type sh jdk-6u13-linux-i586.bin<br />
Accept the license agreement<br />
Java will install into the cruise home directory<br />
JAVA_HOME = /home/cruise/jdk1.6.0_13</p>
<p><strong>Install JBoss</strong><br />
Download jboss-4.2.2.GA.zip to /home/cruise<br />
unzip jboss-4.2.2.GA.zip<br />
To avoid any permgen memory errors edit JBOSS_HOME/bin/run.conf and set the following Xms, Xmx, PermSize and MaxPermSize values
<code&gt;JAVA_OPTS="-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512 -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"&lt;/code></p>
<p><strong>Install Ant</strong><br />
Download apache-ant-1.7.1-bin.tar.gz to /home/cruise<br />
gunzip apache-ant-1.7.1-bin.tar.gz<br />
tar -xvf  apache-ant-1.7.1-bin.tar</p>
<p><strong>Configure paths and settings for the user</strong><br />
You need to configure the .bashrc for the cruise user (assuming the user shell is bash)<code># .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
  . /etc/bashrc
fi

# User specific aliases and functions
export JAVA_HOME=/home/cruise/jdk1.6.0_13
export ANT_HOME=/home/cruise/apache-ant-1.7.1
export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
export JBOSS_HOME=/home/cruise/jboss-4.2.2.GA

export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$ORACLE_HOME/bin:$JBOSS_HOME/bin:$PATH</code><br />
<strong>Install subversion</strong><br />
Subversion should already be available, check this by running 'rpm -q subversion'<br />
and making sure it returns a value</p>
<p><strong>Install cruisecontrol</strong><br />
Download cruisecontrol-src-2.8.2.zip to /home/cruise<br />
unzip cruisecontrol-src-2.8.2.zip<br />
Type ant in /home/cruise/cruisecontrol-2.8.2/main</p>
<p><strong>Configure the build projects</strong><br />
mkdir /home/cruise/build<br />
mkdir /home/cruise/build/artifacts<br />
mkdir /home/cruise/build/logs<br />
mkdir /home/cruise/build/projects</p>
<p><strong>Configure a new project</strong><br />
For a project called 'projectname', in /home/cruise/build/projects/projectname you should check out the source code eg.<br />
svn checkout http://svn.company.com/project/trunk<br />
Configure the project settings and test the build script to verify that it works without errors.</p>
<p><strong>Configure CruiseControl</strong><br />
You will need to create a file called build-projectname.xml
<code>&lt;!-- Delegating build script, used by cruisecontrol to build the project.
Note that the basedir is set to the checked out project --&gt;
&lt;project name="build-projectname"
default="automatedbuild"
basedir="/home/cruise/build/projects/projectname"&gt;
  &lt;target name="automatedbuild"&gt;
    &lt;!-- Get the latest from SVN --&gt;
    &lt;exec executable="svn"&gt;
      &lt;arg line="up --username user --password pass"/&gt;
    &lt;/exec&gt;
    &lt;!-- Call the target that does everything --&gt;
    &lt;ant antfile="build.xml" target="clean-deploy"/&gt;
  &lt;/target&gt;
&lt;/project&gt;</code></p>
<p>Edit this file to match your own settings and set the correct username/password for subversion.</p>
<p>Now you need to create the config.xml that is used by cruisecontrol:
<code>&lt;cruisecontrol&gt;
&lt;!-- Schedule each project to check for modifications every 15 mins and build if modifications have been made --&gt;

&lt;project name="projectname" buildafterfailed="true" requiremodification="true"&gt;
  &lt;plugin name="svn" classname="net.sourceforge.cruisecontrol.sourcecontrols.SVN"/&gt;
    &lt;listeners&gt;
      &lt;currentbuildstatuslistener file="logs/projectname/status.txt"/&gt;
    &lt;/listeners&gt;
    &lt;modificationset quietperiod="180" ignoreFiles="*/projectname/db/**"&gt;
      &lt;svn localworkingcopy="projects/projectname"/&gt;
    &lt;/modificationset&gt;
    &lt;schedule interval="900"&gt;
    &lt;ant anthome="/home/cruise/apache-ant-1.7.1"
buildfile="build-projectname.xml"
target="automatedbuild"
uselogger="true"
usedebug="false"/&gt;
     &lt;/schedule&gt;
    &lt;log logdir="logs/projectname"&gt;
      &lt;delete every="1" unit="MONTH"/&gt;
      &lt;merge dir="projects/projectname/reports/junit/"/&gt;
      &lt;merge file="projects/projectname/reports/checkstyle/cs_errors.xml"/&gt;
      &lt;merge dir="projects/projectname/reports/metrics/"/&gt;
      &lt;merge dir="projects/projectname/reports/cobertura/"/&gt;
    &lt;/log&gt;
  &lt;publishers&gt;
  &lt;htmlemail mailhost="xxx.xxx.x.x"
username="emailuser"
password="emailpass"
returnname="CruiseControl"
returnaddress="&lt;em&gt;user@company.com&lt;/em&gt;"
reportsuccess="always"
subjectprefix="CruiseControl: Projectname - "
buildresultsurl="http://xxx.xxx.x.x:8080/cruisecontrol/buildresults/projectname"
skipusers="true" spamwhilebroken="false"
logdir="logs/projectname"
xsldir="/home/cruise/cruisecontrol-2.8.2/reporting/jsp/webcontent/xsl"
css="/home/cruise/cruisecontrol-2.8.2/reporting/jsp/webcontent/css/cruisecontrol.css"&gt;
&lt;always address="user@company.com" /&gt;
&lt;failure address="teamlist@company.com" reportWhenFixed="true"/&gt;
  &lt;/htmlemail&gt;

&lt;/publishers&gt;

&lt;/project&gt;

&lt;/cruisecontrol&gt;</code></p>
<p>Edit this again to suit your own settings.  Refer back to the cruisecontrol documentation for further information on the settings above, but this will check for updates to the source code every 15 mins.  If there are changes then the build will be run.  If the build fails then the team is emailed.  If it's successful then someone who monitors the build system can be emailed.</p>
<p><strong>Start CruiseControl</strong></p>
<p>To test the cruisecontrol configuration you need to execute cruisecontrol.sh from /home/cruise/build<br />
First set the permissions with chmod a+x /home/cruise/cruisecontrol-2.8.2/main/bin/cruisecontrol.sh<br />
Then run<br />
/home/cruise/cruisecontrol-2.8.2/main/bin/cruisecontrol.sh</p>
<p><strong>Configure Reporting</strong><br />
Type ant in<br />
/home/cruise/cruisecontrol-2.8.2/reporting/jsp</p>
<p>You will be asked for these parameters:<br />
log.dir: /home/cruise/build/logs<br />
status.file: status.txt<br />
artifacts.dir: /home/cruise/build/artifacts</p>
<p>Copy /home/cruise/cruisecontrol-2.8.2/reporting/jsp/dist/cruisecontrol.war to the jboss deploy directory</p>
<p>Start up jboss and you should be able to access cruisecontrol at http://<em>xxx.xxx.x.x</em>:8080/cruisecontrol/</p>
<br /><a href="http://sheilapollard.com/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3NoZWlsYXBvbGxhcmQud29yZHByZXNzLmNvbS8/cD00MzAjY29tbWVudHM=" title=\"Comments on &quot;Setting up an Automated Build System&quot;\"><img src="http://sheilapollard.com/wp-content/plugins/feed-comments-number/image.php?430" alt="Comments" /></a> <img src="http://sheilapollard.com/wp-content/plugins/feed-statistics.php?view=1&post_id=430" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://sheilapollard.com/2009/06/09/setting-up-an-automated-build-system/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Scrum &#8211; The Scrum Team</title>
		<link>http://sheilapollard.com/2009/04/17/scrum-team/?utm_campaign=feed&utm_medium=feed&utm_source=blog</link>
		<comments>http://sheilapollard.com/2009/04/17/scrum-team/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 14:19:05 +0000</pubDate>
		<dc:creator>Sheila</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://sheilapollard.wordpress.com/?p=298</guid>
		<description><![CDATA[Scrum requires a team of people rather than a group of individuals.  A team has a common goal and set of standards.  They will collaborate and support each other to achieve that goal.  The team size is usually 4-9.  Ideally the team members are full-time and co-located to help communication.
The team [...]]]></description>
			<content:encoded><![CDATA[<p>Scrum requires a team of people rather than a group of individuals.  A team has a common goal and set of standards.  They will collaborate and support each other to achieve that goal.  The team size is usually 4-9.  Ideally the team members are full-time and co-located to help communication.</p>
<p>The team should be cross-functional, including whatever skills are needed to achieve the goal.  Each person should ideally be a generalist rather than a specialist.  Rather than creating bottlenecks where tasks can only be done by a limited number of resources, knowledge should be shared among other team members.  The hierarchy is flat &#8211; each member must participate and commit to what will be delivered.  The team as a whole succeeds or fails.</p>
<p><strong>Tuckman phases:</strong><br />
Bruck Tuckman described a model of group development in 1965.  The model has 4 phases, all of which are necessary for a team to grow and deliver reults.</p>
<p>Forming &#8211; a new team meets, gets to know each other and agrees on goals.<br />
Storming &#8211; the team addresses issues including how the team will function and what standards will be applied.  Some teams never progress past this stage.<br />
Norming &#8211; the team adjusts to working together, motivation and productivity increases.<br />
Performing &#8211; the team is functioning effectively as a group with little conflict or guidance.</p>
<p>Obviously the goal in scrum is to bring the team all the way through to the performing stage.  Unfortunately it only takes a small change like replacing a team member to potentially bring the team back to the forming stage again.</p>
<br /><a href="http://sheilapollard.com/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3NoZWlsYXBvbGxhcmQud29yZHByZXNzLmNvbS8/cD0yOTgjY29tbWVudHM=" title=\"Comments on &quot;Scrum &#8211; The Scrum Team&quot;\"><img src="http://sheilapollard.com/wp-content/plugins/feed-comments-number/image.php?298" alt="Comments" /></a> <img src="http://sheilapollard.com/wp-content/plugins/feed-statistics.php?view=1&post_id=298" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://sheilapollard.com/2009/04/17/scrum-team/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Development &#8211; choosing a software methodology</title>
		<link>http://sheilapollard.com/2009/04/14/software-development-choosing-a-software-methodology/?utm_campaign=feed&utm_medium=feed&utm_source=blog</link>
		<comments>http://sheilapollard.com/2009/04/14/software-development-choosing-a-software-methodology/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 22:50:25 +0000</pubDate>
		<dc:creator>Sheila</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[waterfall]]></category>

		<guid isPermaLink="false">http://sheilapollard.wordpress.com/?p=285</guid>
		<description><![CDATA[There are a lot of methods for developing software out there now.  Choosing the best one for your company or team can be difficult &#8211; and that&#8217;s before you start adapting it to suit your particular situation.  Here&#8217;s a brief history and overview of some of the more common ones you&#8217;ll come across.  Each of [...]]]></description>
			<content:encoded><![CDATA[<p>There are a lot of methods for developing software out there now.  Choosing the best one for your company or team can be difficult &#8211; and that&#8217;s before you start adapting it to suit your particular situation.  Here&#8217;s a brief history and overview of some of the more common ones you&#8217;ll come across.  Each of them have good elements that you can make use of or learn from.</p>
<p><strong>In the beginning, there was Waterfall&#8230;</strong><br />
Not that long ago, almost all IT companies based their software development on what was known as the waterfall cycle.  To deliver a project you moved through phases in order.  Requirements Specification, Design, Construction, Integration, Testing, Installation and finally Maintenance.  This style of development works well where the requirements are very clear and not going to change, but that rarely happens in practice.  For dealing with a typical software project, the method is rigid and closed.  The software to be delivered has to be fully described in detail months or years in advance of delivery.  The cycles are long with low visibility of what&#8217;s being done.  It&#8217;s hard to find out if deadlines will be met until the dates have already gone past.  Despite the abundance of planning and documentation, the customer may be unhappy with the delivered product or it no longer matches what the customer actually needs.  This can be a costly and restrictive way of developing software which can lead to people to shifting blame onto others as the final deadline approaches if things are going poorly.</p>
<p>In more recent years there has been a move away from the traditional style of developing software to address some of the issues mentioned above and allow for projects where the requirements aren&#8217;t fully known at the start.  Many of these are incremental and/or iterative.  Incremental development is when the work is divded into parts (or increments) which are integrated when they&#8217;re completed.  At the end of each phase there is a fully completed unit of work or increment.  Iterative development uses multiple iterations to progress to a final solution.  The important distinction is that each iteration can include refactoring or expanding on a piece of work &#8211; rather than fully completing a unit of work at a time.  The first iteration may provide a basic piece of functionality and later iterations will develop it further until it grows into the final product.</p>
<p><strong>The Unified Process&#8230; </strong><br />
The Unified Process (and also the Rational Unified Process) is an iterative framework.  Each time-boxed iteration provides an increment of work which is the input for the next iteration.  It&#8217;s still quite similar to waterfall.  The architect/designer is a vital role as each iteration is driven by UML use cases.  Roles and responsibilities are very clearly defined with each level in the organisation delivering particular artifacts to the next.  The Unified Process gives better observability than the waterfall method, but using tools like Rational Rose add overhead and the process creates big divisions between design and development.  At each point where an artifact is handed over, responsibility is also effectively handed over which is not necessarily a good thing.</p>
<p><strong>Enter Agile&#8230;</strong><br />
Agile is a group of software development methodologies with the agile principles at the core of each.  The Agile Manifesto is a statement of these principles.  The four main principles are:<br />
Individuals and interactions over processes and tools<br />
Working software over comprehensive documentation<br />
Customer collaboration over contract negotiation<br />
Responding to change over following a plan<br />
You can view the full Agile Manifesto and history <a href="http://sheilapollard.com/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2FnaWxlbWFuaWZlc3RvLm9yZy9wcmluY2lwbGVzLmh0bWw=">here</a>.  Three of the Agile methodologies are XP, Scrum and Lean Software Development which we will take a quick look at.<br />
<strong><br />
XP / Extreme Programming&#8230;</strong><br />
XP replaces use cases with user stories.  These are less formal and usually less detailed than use cases as there&#8217;s more interaction between the developers and the person giving the requirements.  Instead of handing the requirements over at the start of the project, regular feedback is an important ingredient.  XP aims to have fast iterations with frequent planning and estimating.  Rather than using layering, software is built in slices so that feedback can be given early on.  Teams provide regular increments of software that could be delivered to the client using test-first approaches, continuous integration and regular customer feedback.  This allows for changing requirements as the project progresses.</p>
<p><strong>Eliminating Waste with Lean&#8230;</strong><br />
Another Agile method is Lean Software Development which takes its inspiration from methods used in the manufacturing industry.  Waste is reduced or eliminated by removing anything that doesn&#8217;t contribute to the overall goal.  Decisions are deferred until as late as possible or until there&#8217;s no advantage to holding off.  This means decisions don&#8217;t have to be made at the very start of the project, but can be made when more information is available.  Teams try to eliminate time spent waiting (for another developer or a 3rd party to deliver something, or for more detailed requirements) and to deliver only what&#8217;s required as fast as possible.  More communication is encouraged and documentation is produced on-demand.  Teams are encouraged to see the bigger picture rather than focusing only on the slice of work they are doing.</p>
<p><strong>Scrum&#8230;</strong><br />
Scrum progresses on from XP, but takes a wider viewpoint including focusing on how an agile team can function well within a large organisation.  Scrum was developed independently, but at a similar time as Lean and they have similar goals.   Many teams using the scrum practices also use XP and Lean practices.  Each team includes a Product Owner and Scrum Master.  Teams are small with 5-7 members and cross-functional.  The team as a whole commits to delivering functionality.  The Product Owner decides what functionality they want, and what order they would like it in and the team will decide what it can commit to in each iteration (called a sprint).  The scrum master is there to ensure the process is followed and assist the team in meeting their goals.  Communication is a key factor here with daily meetings to keep all the team members in synch and share knowledge.</p>
<p><strong>SOA &#8211; the latest buzzword&#8230;</strong><br />
Moving on from the Agile methods, one of the things you will commonly hear about now is Service Oriented Architecture.  SOA started in the larger companies &#8211; ones that may have merged with other companies on a regular basis, inheriting legacy systems and duplicating functionality as they went along.  As the complexity of working with completely different software systems increases, so does the cost.  SOA is a stategy for managing this complexity.  It can be used to reduce dependencies on 3rd party vendors and help &#8216;clean up&#8217; the systems.  By reducing coupling between systems you gain the ability to swap out a component and replace it with an improved one.</p>
<p>It&#8217;s common to associate SOA with adding a web services layer over different systems but SOA should be seen more as a long-term strategy.  To reduce language coupling you can use XML, to reduce protocol coupling you can use web services.  Network coupling can be reduced using ESB and component coupling is reduced by making components replaceable.  The primary goal is to bring back simplicity.  Not everything should be a service and reuse of components isn&#8217;t always a good thing.  If communication is costly then the overhead of communicating that a service is available may be higher than if the component wasn&#8217;t reused.</p>
<p><strong>General Strategies&#8230;</strong><br />
Agile methods tend to promote a low tech approach that avoids putting distance between the team and the state of the project.  In an ideal situation, an agile team is located together and communication is easier.  The client or product owner is heavily involved in refining requirements and providing feedback.  MS Project and Gantt charts aren&#8217;t used and updates are made directly by the people doing the work. Documentation goes out of date fast, so instead of documenting everything extensively, teams are kept aware of each others activities.  Documentation can be as simple as a photo of a whiteboard instead of using software tools.  Teams avoid making vague long-term predictions by assessing the risk of something happening, and then making it observable so changes can be made when they&#8217;re actually needed, rather than catering for something that never actually happens.</p>
<p>All of the methods above can work really well, or fail spectacularly.  Regardless of what method a company uses for developing software, the one thing that applies across the board is that there&#8217;s always room for improvement.  And even a good development process can&#8217;t manage teams of individuals well for you.  For that you have to rely on having at least one good team lead &#8211; whatever process they follow or job title they hold.</p>
<br /><a href="http://sheilapollard.com/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3NoZWlsYXBvbGxhcmQud29yZHByZXNzLmNvbS8/cD0yODUjY29tbWVudHM=" title=\"Comments on &quot;Software Development &#8211; choosing a software methodology&quot;\"><img src="http://sheilapollard.com/wp-content/plugins/feed-comments-number/image.php?285" alt="Comments" /></a> <img src="http://sheilapollard.com/wp-content/plugins/feed-statistics.php?view=1&post_id=285" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://sheilapollard.com/2009/04/14/software-development-choosing-a-software-methodology/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
