<?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>Advanced Software Engineering &#187; Software Engineering</title>
	<atom:link href="http://www.gabrielgonzalezgarcia.com/tag/software-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gabrielgonzalezgarcia.com</link>
	<description>or something like that</description>
	<lastBuildDate>Sat, 28 Jan 2012 21:19:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Software Testing Strategies</title>
		<link>http://www.gabrielgonzalezgarcia.com/2011/07/24/software-testing-strategies/</link>
		<comments>http://www.gabrielgonzalezgarcia.com/2011/07/24/software-testing-strategies/#comments</comments>
		<pubDate>Sun, 24 Jul 2011 19:23:23 +0000</pubDate>
		<dc:creator>Gabriel Gonzalez</dc:creator>
				<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://www.gabrielgonzalezgarcia.com/?p=498</guid>
		<description><![CDATA[Software testing belongs to a wider topic, Verification and Validation, where testing procedures try to achieve these goals. Verification: Check whether we are building the product right Validation: Whether we are building the right product Some authors propose several strategies to improve software testing results: Quantify Requirements long before the testing begins: So testers can [...]]]></description>
			<content:encoded><![CDATA[<p>Software testing belongs to a wider topic, <em>Verification</em> and <em>Validation</em>, where testing procedures try to achieve these goals.</p>
<ul>
<li><strong>Verification</strong>: Check whether we are building the <em>product right</em></li>
<li><strong>Validation</strong>: Whether we are building the <em>right product</em></li>
</ul>
<p>Some authors propose several strategies to improve software testing results:</p>
<ul>
<li><em>Quantify Requirements long before the testing begins</em>: So testers can measure how close the product is to the client&#8217;s idea.</li>
<li><em>Specify testing goals</em>: Time between failures, cost of fixing a failure, etc</li>
<li><em>Understand the client&#8217;s behaviour and develop a profile</em>:  Focus software testing on its real usage</li>
<li><em>Testing plan featuring &#8216;Quick Testing Cycles&#8217;</em></li>
<li><em>Self-ControlProduct</em>: Failure detection</li>
<li><em>Formal Testing Techniques</em>: (Alright, they might be cool but too expensive)</li>
<li><em>Continuous Integration</em></li>
</ul>
<p><strong> Strategies for Testing Software</strong></p>
<p><center><img class="size-full wp-image-499 aligncenter" title="SoftwareTestingStrategies" src="http://www.gabrielgonzalezgarcia.com/wp-content/uploads/2011/07/SoftwareTestingStrategies.png" alt="" width="362" height="235" /></center></p>
<p><em>Unit Testing:</em></p>
<ul>
<li>Verification of each module to check whether it implements the contract it relays on.</li>
<li>Since some other components it depends on might not be yet available, some interface simulation must be developed.</li>
</ul>
<p><em>Integration Testing:</em></p>
<ul>
<li>The goal of this process is to test the interaction between modules and prevent any problema when interconecting interfaces</li>
<li>Top-Botton Aproach needs to generate simulators for no yet available modules</li>
<li>Bottom-Up Approach tests first low-level modules and keeps adding higher-level ones so no simulation is needed</li>
<li>Regression Tests are needed to be sure that when some modules has been modified all other keeps working ok</li>
<li>Smoke Testing is a lightweight tests which aims to detect problem in a early stage. It must be tested daily</li>
</ul>
<p><em>Validation</em></p>
<ul>
<li>Focuses to check whether the product stays close to the requirements</li>
<li>Uses Alpha (developer + user) and Beta (only user) tests</li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielgonzalezgarcia.com/2011/07/24/software-testing-strategies/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Introduction to the Personal Software Process</title>
		<link>http://www.gabrielgonzalezgarcia.com/2011/02/19/introduction-to-the-personal-software-process/</link>
		<comments>http://www.gabrielgonzalezgarcia.com/2011/02/19/introduction-to-the-personal-software-process/#comments</comments>
		<pubDate>Sat, 19 Feb 2011 09:15:12 +0000</pubDate>
		<dc:creator>Gabriel Gonzalez</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://www.gabrielgonzalezgarcia.com/?p=353</guid>
		<description><![CDATA[The book is written in a pretty informal way, the author seems to talk to his son or someone really close, which I don&#8217;t really mind but, from my point of view, adds extra literature not necessary at all to explain the PSP. The author focuses in two aspects along the book, measuring / planning and defects. [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_354" class="wp-caption alignleft" style="width: 210px"><a href="http://www.gabrielgonzalezgarcia.com/wp-content/uploads/2011/02/introduction_to_psp.jpg"><img class="size-full wp-image-354 " title="Introduction to the PSP" src="http://www.gabrielgonzalezgarcia.com/wp-content/uploads/2011/02/introduction_to_psp.jpg" alt="Introduction to the PSP" width="200" height="332" /></a><p class="wp-caption-text">Introduction to the PSP</p></div>
<p>The book is written in a pretty informal way, the author seems to talk to his son or someone really close, which I don&#8217;t really mind but, from my point of view, adds extra literature not necessary at all to explain the PSP.</p>
<p>The author focuses in two aspects along the book, measuring / planning and defects. The most valuable part and which I found more interesting is the one dealing with personal planning since it can help you not only when dealing with software projects but in your real life.</p>
<p>I really think that applying techniques such as registering tasks durations, interruptions management and creating week summary can help you become more productive and eliminate those periods of the day you think you are working but your not.</p>
<p>I also agree with the author that using his techniques you can become more realistic when planning a new project I think it is not because of the whole planning stuff but you can know exactly how many time are you really working in your projects without all that bloat of interruptions.</p>
<p>The part I don&#8217;t really like is the second half of the book which focuses in dealing with defects. The author ideas are only applicable when dealing with beginners defects and I don&#8217;t find useful any of the metrics he proposes.</p>
<p>In few words, this books is worth reading if you feel you are wasting your time and want to become more productive and/or want to make sure you can make realistic project plans.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielgonzalezgarcia.com/2011/02/19/introduction-to-the-personal-software-process/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Design Quality Guidelines</title>
		<link>http://www.gabrielgonzalezgarcia.com/2011/02/09/design-quality-guidelines/</link>
		<comments>http://www.gabrielgonzalezgarcia.com/2011/02/09/design-quality-guidelines/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 12:36:10 +0000</pubDate>
		<dc:creator>Gabriel Gonzalez</dc:creator>
				<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://www.advansen.com/?p=342</guid>
		<description><![CDATA[These guidelines are extracted and transformed from the Pressman&#8217;s &#8220;Software Engineering&#8221; book: A design must present an architecture built using known pattern designs, components with the right characteristics and that can be implemented in an incremental way. Must be modular, divided in subsystems Must lead to interfaces which reduce the complexity when connecting components Must be generated [...]]]></description>
			<content:encoded><![CDATA[<p>These guidelines are extracted and transformed from the Pressman&#8217;s <a href="http://www.amazon.com/Software-Engineering-Practitioners-Roger-Pressman/dp/0073375977/ref=ntt_at_ep_dpt_1">&#8220;Software Engineering&#8221; book</a>:</p>
<ul>
<li>A design must present an architecture built using known pattern designs, components with the right characteristics and that can be implemented in an incremental way.</li>
<li>Must be modular, divided in subsystems</li>
<li>Must lead to interfaces which reduce the complexity when connecting components</li>
<li>Must be generated from a reproducible method and the information produced during the analysis</li>
<li>Must use notation to express its meaning correctly</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielgonzalezgarcia.com/2011/02/09/design-quality-guidelines/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cost of Quality (COQ)</title>
		<link>http://www.gabrielgonzalezgarcia.com/2011/02/04/cost-of-quality-coq/</link>
		<comments>http://www.gabrielgonzalezgarcia.com/2011/02/04/cost-of-quality-coq/#comments</comments>
		<pubDate>Fri, 04 Feb 2011 10:56:15 +0000</pubDate>
		<dc:creator>Gabriel Gonzalez</dc:creator>
				<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://www.advansen.com/?p=337</guid>
		<description><![CDATA[To balance the quality of a product and the time spent looking for failures, we need some measurement to estimate how well we are doing. COQ takes into account the following costs: Failure costs: All costs of fixing a defect e.g. Patching a deployed product, using the debugger, reviewing code, etc Appraisal costs: Work done [...]]]></description>
			<content:encoded><![CDATA[<p>To balance the quality of a product and the time spent looking for failures, we need some measurement to estimate how well we are doing.</p>
<p>COQ takes into account the following costs:</p>
<ul>
<li><strong>Failure costs</strong>: All costs of fixing a defect e.g. Patching a deployed product, using the debugger, reviewing code, etc</li>
<li><strong>Appraisal costs</strong>: Work done evaluating whether a product has defects, excluding time spend on fixing them.</li>
<li><strong>Prevention costs</strong>: Resources used to improve the process to reduce the number of defects.</li>
</ul>
<p>Following I will describe the <a href="http://en.wikipedia.org/wiki/Personal_Software_Process">PSP </a>approximation to COQ a simplified way of calculating this measurement. The author states than this version of COQ shows the same effectiveness as the long COQ version.</p>
<ul>
<li>Failure costs: all compiling time, all testing time.</li>
<li>Appraisal cost: All review time</li>
</ul>
<p>Cost of Quality is calculated as a percentage of total development time:</p>
<ul>
<li><strong>Appraisal COQ</strong>: Sum of all review time as percentage of total development time.</li>
<li><strong>Failure COQ</strong>: Sum of all compile and test time as percentage of total development time.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielgonzalezgarcia.com/2011/02/04/cost-of-quality-coq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Attributes of a Software Product</title>
		<link>http://www.gabrielgonzalezgarcia.com/2011/02/02/attributes-of-a-software-product/</link>
		<comments>http://www.gabrielgonzalezgarcia.com/2011/02/02/attributes-of-a-software-product/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 23:07:55 +0000</pubDate>
		<dc:creator>Gabriel Gonzalez</dc:creator>
				<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://www.advansen.com/?p=332</guid>
		<description><![CDATA[Adaptability: The system satisfies user&#8217;s needs Maintainability: Easiness to change after the systems is running Usability: Small learning curve for end users. Reliability: Ability to run without errors in a period of time. MTBF (Mean Time Between Failures) &#38; Availability (likelihood a system is working in a given time) Low density of bugs Efficiency: Complete [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><strong>Adaptability</strong>: The system satisfies user&#8217;s needs</li>
<li><strong>Maintainability</strong>: Easiness to change after the systems is running</li>
<li><strong>Usability</strong>: Small learning curve for end users.</li>
<li><strong>Reliability</strong>: Ability to run without errors in a period of time. MTBF (Mean Time Between Failures) &amp; Availability (likelihood a system is working in a given time)</li>
<li>Low density of bugs</li>
<li><strong>Efficiency</strong>: Complete a task with the lowest usage of resources</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielgonzalezgarcia.com/2011/02/02/attributes-of-a-software-product/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rules to Write Reusable Code</title>
		<link>http://www.gabrielgonzalezgarcia.com/2011/01/27/rules-to-write-reusable-code/</link>
		<comments>http://www.gabrielgonzalezgarcia.com/2011/01/27/rules-to-write-reusable-code/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 09:06:44 +0000</pubDate>
		<dc:creator>Gabriel Gonzalez</dc:creator>
				<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://www.advansen.com/?p=307</guid>
		<description><![CDATA[Cohesion in Methods: Do just one thing or a few but closely related Short Methods: Keep the right size so it can be easily understood and modifiable Method Coherency: Similar to others, similar size, error conditions, etc Split high-level from low-level methods: high-level are those which control, check status and low-level those which get the [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><strong>Cohesion in Methods</strong>: Do just one thing or a few but closely related</li>
<li><strong>Short Methods</strong>: Keep the right size so it can be easily understood and modifiable</li>
<li><strong>Method Coherency</strong>: Similar to others, similar size, error conditions, etc</li>
<li><strong>Split high-level from low-level methods</strong>: high-level are those which control, check status and low-level those which get the job done</li>
<li><strong>Uniform Coverage</strong>: Methods must be able to handle all the possible combination of inputs</li>
<li><strong>Avoid Coupling</strong>: Global objects, etc</li>
<li><strong>State Dependant methods</strong>: Behaviour shouldn&#8217;t change based on external condition, write a new method</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielgonzalezgarcia.com/2011/01/27/rules-to-write-reusable-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Product, Project, Task &amp; Process for a Software Engineer</title>
		<link>http://www.gabrielgonzalezgarcia.com/2011/01/21/product-project-task-process-for-a-software-engineer/</link>
		<comments>http://www.gabrielgonzalezgarcia.com/2011/01/21/product-project-task-process-for-a-software-engineer/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 12:03:40 +0000</pubDate>
		<dc:creator>Gabriel Gonzalez</dc:creator>
				<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://www.advansen.com/?p=294</guid>
		<description><![CDATA[Some definitions taken from  &#8220;Introduction to PSP&#8221; by Watts S. Humphrey which may be worth having them handy Product: Something produced for a company or client Project: Used to produce a Product Task: Element of work Process: Way to do projects Phase: Steps proposed in a process (e.g. Planning, development, testing). Each phase is composed of tasks]]></description>
			<content:encoded><![CDATA[<p>Some definitions taken from  <a href="http://www.amazon.com/Introduction-Personal-Software-Process-sm/dp/0201548097/ref=sr_1_3?ie=UTF8&amp;qid=1295429622&amp;sr=8-3">&#8220;Introduction to PSP&#8221; by Watts S. Humphrey</a> which may be worth having them handy</p>
<blockquote><p><strong>Product</strong>: Something produced for a company or client</p>
<p><strong>Project</strong>: Used to produce a Product</p>
<p><strong>Task</strong>: Element of work</p>
<p><strong>Process</strong>: Way to do projects</p>
<p><strong>Phase</strong>: Steps proposed in a process (e.g. Planning, development, testing). Each phase is composed of tasks</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielgonzalezgarcia.com/2011/01/21/product-project-task-process-for-a-software-engineer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Replication in Distributed Systems</title>
		<link>http://www.gabrielgonzalezgarcia.com/2011/01/19/replication-in-distributed-systems/</link>
		<comments>http://www.gabrielgonzalezgarcia.com/2011/01/19/replication-in-distributed-systems/#comments</comments>
		<pubDate>Wed, 19 Jan 2011 08:43:48 +0000</pubDate>
		<dc:creator>Gabriel Gonzalez</dc:creator>
				<category><![CDATA[Distributed Systems]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[computer networks]]></category>
		<category><![CDATA[distributed systems]]></category>

		<guid isPermaLink="false">http://www.advansen.com/?p=267</guid>
		<description><![CDATA[System Model Assume synchronous system with crashing the only fail Replica Managers contain the replica in a computer and perform operations upon them Front-end issues request to one or more replica managers Coordination: Replica managers coordinate the requests FIFO, Casual, Total Replica manager pass back the first result for responsiveness or what majority has reply [...]]]></description>
			<content:encoded><![CDATA[<p><strong>System Model</strong></p>
<ul>
<li>Assume synchronous system with crashing the only fail</li>
<li>Replica Managers contain the replica in a computer and perform operations upon them</li>
<li>Front-end issues request to one or more replica managers</li>
<li>Coordination: Replica managers coordinate the requests FIFO, Casual, Total</li>
<li>Replica manager pass back the first result for responsiveness or what majority has reply for byzantine failures</li>
</ul>
<p><em>Group Communication</em>:</p>
<p>Group Membership Service:</p>
<ol>
<li>Interface for group membership changes</li>
<li>Failure detector: To track failure of members</li>
<li>Notifying of membership changes:</li>
<li>Group address expansion: change address from single to all members</li>
</ol>
<p><span id="more-267"></span>IP multicast has all except 2 and 3.</p>
<p>Group views: Ordered lists of current group members.</p>
<p>A member can be exclude if it is suspected even it has not crashed.</p>
<p>View Delivery:</p>
<ul>
<li>Instead of query every member views of the group are delivery to applications</li>
<li>They follow Order, Integrity and Non-triviality (if two processes join they can communicate and if they split in two groups that should be reflected)</li>
</ul>
<p>View-Synchronous Group Communication:</p>
<ul>
<li>Agreement: Same set of message delivered in any given view</li>
<li>Integrity: A message is delivered just once</li>
<li>Validity: If a process fails a new view is immediately send.</li>
</ul>
<p><strong><!--more-->Fault-Tolerant Services</strong></p>
<p>Linearizability:</p>
<ul>
<li>Interleaved sequence meets the spec of a correct copy of the objects</li>
<li>Order of operations is consistent with the real times at which they occurred</li>
</ul>
<p>Sequential Consistency:</p>
<ul>
<li>Interleaved sequence meets the spec of a correct copy of the objects</li>
<li>Order of operations is consistent with the program order where those where executed</li>
</ul>
<p><strong>Passive (primary-backup) Replication</strong></p>
<ul>
<li>The primary is replace by one backup, otherwise it would have been incorrect</li>
<li>Replica managers agree on which operations had been performed when secondary takes over</li>
<li>Can be used even in a non-deterministic way, multi-threaded apps</li>
<li>Requires f + 1 replica managers</li>
</ul>
<p><strong>Active Replication</strong></p>
<ul>
<li>Each request is sent to all the servers and executed simultaneously</li>
<li>This schema achieve sequenciality</li>
<li>Total order in which the replica servers process request is not the same as the time order in which the client requested</li>
<li>2f+1 replica managers for byzantine failures</li>
</ul>
<p><strong>High-Available Services</strong></p>
<p>The active behaviour of waiting for all the replica managers to reply undesirable for highly available operations</p>
<p><em>Gosssip Architecture</em>:</p>
<p>Two basic operations, queries (RO) and updates (modify without reading)</p>
<p>The system guarantees the following, even if the replica managers can communicate with each other</p>
<ul>
<li>Each client obtains consistent service over time: Replica managers provide data reflecting at least the updates observed by that client so far</li>
<li>Relaxed consistency between replicas: All replica managers received all the updates and apply them in an order to suit the application needs</li>
</ul>
<p>Supports causal update ordering:</p>
<ul>
<li>Immediate ordering: Applied causal and forced ordering are no happened-before related</li>
<li>Causal ordering: Posting items, they can be ordered by subject: Oranges, &#8220;Re: Oranges&#8221;</li>
<li>Forced-ordering: members joining in the same order</li>
<li>Immediate-ordering: deleting a member, so a user can not being active for some late replica</li>
</ul>
<p>Outline of a gossip service:</p>
<ol>
<li>Request: Front-end sends to only a single replica manager. Block in query, return asap in updates but client may be held till update has been sent to f+1 replica managers to avoid f failures</li>
<li>Update Response: Replica managers replies as soon as received an update</li>
<li>Coordination: A request is held to apply the ordering, maybe waiting for other replica manager updates.</li>
<li>Execution</li>
<li>Query Response</li>
<li>Agreement: Replica managers update one another by gossip messages. Messages exchanged occasionally, lazy fashion or when a replica managers finds out that it is missing an update to send.</li>
</ol>
<p>Front end&#8217;s timestamp:</p>
<ul>
<li>Front-ends keep their own vector timestamp passing it to replica manager and merging when they receive it back</li>
<li>They pass the timestamp to clients</li>
</ul>
<p>Replica Manager State:</p>
<ul>
<li>Value: Each Replica Manager is a state machine and changes applying updates operations</li>
<li>Value Timestamp: Vector timestamp that represents updates reflected in the value. One entry for every replica manager.</li>
<li>Update Log: 1. It can not apply an update yet 2. after being applied it has been in other replica managers</li>
<li>Replica Timestamp: vector timestamp representing accepted updates. Maybe different from value timestamp</li>
<li>Execute Operation Table: Preventing updates applied when coming from Front end and other replica managers, it uses front-end unique identifiers.</li>
<li>Timestamp Table: Timestamps from other replica managers received in gossip messages, used to know when updates have been applied to all other.</li>
<li>Each position of the vector timestamp are updates received from the ith replica manager.</li>
</ul>
<p>Query Operations:</p>
<ul>
<li>The query operation contains a timestamp reflecting the latest version of the value the front-end has read/updated.</li>
<li>The replica managers must return a value, at least, as recent as the timestamp indicates</li>
</ul>
<p>Updates operations in causal order:</p>
<p>The front-end assigns an identifier and adds the timestamp</p>
<p>The replica managers checks whether the id has been previously processed, if not it updates the ith position of the vector timestamp and send it back to the front-end.</p>
<p>The front-end merges the timestamp</p>
<p>Forced and immediate update operations:</p>
<ul>
<li>Forced: Append identifier to timestamp and process them in that order by a Primary Replica Manger</li>
<li>Immediate: Primary server synchronize with other replica managers to reach the order.</li>
</ul>
<p>Gossip Messages:</p>
<ul>
<li>Contains the log and the replica timestamp</li>
<li>Merge arriving log with its own log</li>
<li>Apply stable updates (and no executed before)</li>
<li>Eliminate records from log when they have been applied everywhere</li>
</ul>
<p>Update Propagation:</p>
<ul>
<li>Random: Replica managers randomly choose a partner to synch</li>
<li>Topological: Replica managers arranged in a graph</li>
<li>Tuned to the application</li>
</ul>
<p>Discussion:</p>
<ul>
<li>Lazy approach makes gossip inappropriate for near real-time requirements</li>
<li>Bad scalability, as the number of replica managers grows so does the number of gossips.</li>
<li>Making some replica managers RO may improve scalability</li>
</ul>
<p><em>Bayou and the Operational Transformation Approach</em>:</p>
<ul>
<li>Replica Managers exchange updates in pairs</li>
<li>Users make any updates, when replica managers merge the updates and resolve conflicts (e.g. boss appointments first)</li>
<li>Updates marked as tentative when they can be rearranged. They move to committed.</li>
<li>Before update operation, replica managers perform dependency checks if indicates a conflict a merge is applied</li>
<li>Replication is non-transparent to the application</li>
</ul>
<p><em>Coda Filesystem</em>:</p>
<ul>
<li>Focus on High Availability despite disconnected operation</li>
<li>Replication began to be a problem in AFS, for widely accessed shared files</li>
<li>Provides users with share file repository and allow the to rely on local resources when repository non-accsible.</li>
<li>Relies on replication of file volumes to achieve hight throughput</li>
<li>Vice process, the same as Replica Managers</li>
<li>Venus, mix of Front end and Replica managers</li>
<li>VSG, Volume Storage Group, servers holding replicas of a file volume.</li>
<li>Changes notified to clients via callback and on close, modified files are broadcast in parallel to all the servers.</li>
<li>Code client caches all the files</li>
<li>CVV, Coda Version Vector, vector timestamp each entry is the updates on each server</li>
<li>An open in code provides the most recent copy of the file from the current AVSG, if all servers down, a cached copy is used</li>
<li>Venus processes (client) must check for AVSG shrink/growth</li>
<li>Performance decreases as more users and fold replication enabled</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielgonzalezgarcia.com/2011/01/19/replication-in-distributed-systems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coordination and Agreement in Distributed Systems</title>
		<link>http://www.gabrielgonzalezgarcia.com/2011/01/18/coordination-and-agreement-in-distributed-systems/</link>
		<comments>http://www.gabrielgonzalezgarcia.com/2011/01/18/coordination-and-agreement-in-distributed-systems/#comments</comments>
		<pubDate>Tue, 18 Jan 2011 08:54:19 +0000</pubDate>
		<dc:creator>Gabriel Gonzalez</dc:creator>
				<category><![CDATA[Distributed Systems]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[computer networks]]></category>
		<category><![CDATA[distributed systems]]></category>

		<guid isPermaLink="false">http://www.advansen.com/?p=264</guid>
		<description><![CDATA[For the rest of the post we assume the following: Processes connected by reliable channels Only possible file is a crash Systems Asynchronous Distributed Mutual Exclusion If server involved allowing access to one process at a time Algorithms evaluated following: Bandwidth consumed Client delay Throughput of the system Central Server Algorithm: A process sends a [...]]]></description>
			<content:encoded><![CDATA[<p>For the rest of the post we assume the following:</p>
<ul>
<li>Processes connected by reliable channels</li>
<li>Only possible file is a crash</li>
<li>Systems Asynchronous</li>
</ul>
<p><strong>Distributed Mutual Exclusion</strong></p>
<p>If server involved allowing access to one process at a time</p>
<p>Algorithms evaluated following:</p>
<ul>
<li>Bandwidth consumed</li>
<li>Client delay</li>
<li>Throughput of the system</li>
</ul>
<p><em>Central Server Algorithm</em>:</p>
<ul>
<li>A process sends a request to the server</li>
<li>Server gives Token</li>
<li>When queue is empty next one is chosen</li>
<li>Entering costs two messages (request then grant)</li>
<li>Exiting one message</li>
<li>The server may become a bottleneck</li>
</ul>
<p><em>A ring-based algorithm</em>:</p>
<ul>
<li>Server-less approach</li>
<li>Connection between one process and the following</li>
<li>One a process leaves the critical section sends the token away to the next one</li>
<li>Continuously consumes bandwidth</li>
<li>Entering Delay between 0 to N</li>
<li>Leaving 0 messages</li>
</ul>
<p><em>Ricart and Agrawala&#8217;s Algorithm</em>:</p>
<ul>
<li>Mutual exclusion between N peer processes using multicast</li>
<li>Entering: send multicast message and enters when replied by all other processes</li>
<li>Communication between processes and each one has Lamport clock</li>
<li>Entering messages &lt;T, pi&gt; T timestamp and pi process&#8217; id.</li>
<li>Process&#8217; state: RELEASED, WANTED, HELD</li>
<li>If all process are in RELEASED reply immediately, if any is in HELD waits</li>
<li>Concurrent requests ordered by T and then by pi</li>
<li>Entering 2(N &#8211; 1) or 1 when hardware support for muticast</li>
<li>Synchronization delay only 1 message</li>
</ul>
<p><em>Maekawa&#8217;s Voting Algorithm</em>:</p>
<ul>
<li>Subsets of all processess</li>
<li>Subsets share at least one process</li>
<li>Entering: send message to your subset and wait for all to reply</li>
<li>A process reply only if has not HELD state and has not replied to other process already</li>
<li>Leaving: Process send exiting message and others pop next one from the queue</li>
<li>Dead-lock prone</li>
<li>Bandwidth: Enterying 2*sqrt(N), Leaving sqrt(N)</li>
</ul>
<p><em>Process Election</em>:</p>
<p>Measurement</p>
<ul>
<li>Bandwidth utilization</li>
<li>Turnaround Time</li>
</ul>
<p><em>Ring-based Algorithm</em>:</p>
<ul>
<li>Initially all non-participants, anyone can begin one</li>
<li>Process marks itself as participant and sends election message to its neighbour</li>
<li>Receiver compares identifier. If greater, forwards msg, if not and it is not a participant, substitutes the identifier and forwardit. But do not forward any message if it is already a participant</li>
<li>If the received message is the same identifier, becomes coordinator and sends elected to neighbour</li>
<li>When elected process marks itself as non-participant</li>
</ul>
<p><em>Bully Algorithm</em>:</p>
<ul>
<li>Allows process to crash during election, but message delivery reliable</li>
<li>Assumes synchronous system</li>
<li>Each process knows which processes have higher identifiers</li>
<li>Process begins election when, through timeouts, finds coordinator has died</li>
<li>If the process has the highest id elects itself as coordinator, sending coordinator message</li>
<li>Other processes begin election sending an election message to those with higher identifiers and waits answer, if timeout elects itself as coordinator and announces to lower ids</li>
<li>Receiver of election begins another election</li>
<li>Two processes may announce being coordinators at the same time</li>
<li>O(N^2) in the worst case or N &#8211; 2 in the best</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielgonzalezgarcia.com/2011/01/18/coordination-and-agreement-in-distributed-systems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validation and Verification</title>
		<link>http://www.gabrielgonzalezgarcia.com/2011/01/17/validation-and-verification/</link>
		<comments>http://www.gabrielgonzalezgarcia.com/2011/01/17/validation-and-verification/#comments</comments>
		<pubDate>Mon, 17 Jan 2011 12:17:04 +0000</pubDate>
		<dc:creator>Gabriel Gonzalez</dc:creator>
				<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://www.advansen.com/?p=288</guid>
		<description><![CDATA[Two terms I easily forget: Verification: Does it meet the requirements? Validation: Does it fit its purpose? And the corresponding entry in Wikipedia.]]></description>
			<content:encoded><![CDATA[<p>Two terms I easily forget:</p>
<blockquote><p><strong>Verification</strong>: Does it meet the requirements?</p>
<p><strong>Validation</strong>: Does it fit its purpose?</p></blockquote>
<p>And the corresponding <a href="http://en.wikipedia.org/wiki/Verification_and_validation">entry in Wikipedia</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielgonzalezgarcia.com/2011/01/17/validation-and-verification/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

