<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2.1" -->
<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/"
	>

<channel>
	<title>Learn Software Development</title>
	<link>http://learnsoftwareprocesses.com</link>
	<description>All about the processes involved in software development</description>
	<pubDate>Sun, 29 Jun 2008 10:33:32 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.1</generator>
	<language>en</language>
			<item>
		<title>Guidelines for usability testing</title>
		<link>http://learnsoftwareprocesses.com/2008/06/29/guidelines-for-usability-testing/</link>
		<comments>http://learnsoftwareprocesses.com/2008/06/29/guidelines-for-usability-testing/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 10:33:32 +0000</pubDate>
		<dc:creator>ashish</dc:creator>
		
		<category><![CDATA[Usability]]></category>

		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://learnsoftwareprocesses.com/2008/06/29/guidelines-for-usability-testing/</guid>
		<description><![CDATA[When we were going in for usability testing, I was part of the team that would evaluate the results from the usability testing, and it was important for me to understand more about the usability testing process. Besides understanding the need for usability testing and the process, it was also important for the team to [...]]]></description>
			<content:encoded><![CDATA[<p>When we were going in for usability testing, I was part of the team that would evaluate the results from the usability testing, and it was important for me to understand more about the usability testing process. Besides understanding the need for usability testing and the process, it was also important for the team to understand what the guidelines were for usability testing. They would also help understand how usability testing works. Some of the guidelines (both from reading the literature on this subject, and also from overall study of the process in practise) that I learnt were:</p>
<p>1. Deciding the target audience for your usability testing: Given that the outcome of the usability testing will help in determining changes to your design strategy, it is absolutely essential that the usability testing be done among people who are good representatives of the target subject; this means that the selection should be done carefully. Avoid the temptation to cut corners, or to select neighbors who seem to represent the target segment. Devise a set of queries that will help determine if the selected people actually are good representatives; similarly, use experts to help you get good target subjects. And, other than a few cases, don&#8217;t let them know the name of the company - it may cause bias to appear in their results.</p>
<p>1. a) Different users may specialize is separate workflows, for example, if you want to get testing done of a new shopping site catering to working professionals, you should design an appropriate query form. Review the answers so that you can get an idea of which area a user would move more towards; this may help in deciding the exact set of users.</p>
<p>2. Before actually starting the testing: Remember, your tests will only be good when the people taking part are comfortable with the whole process. They need to feel that the environment in which the test is taking place is similar to that of their home or work environment. And of course, stay easy on the legalese - you may want to make sure that your in-process development is safe and want them to sign NDA&#8217;s, but if you may it full of complicated legal terms, they are likely to get confused. If your office is not exactly very accessible, consider doing the testing in a more convenient location. </p>
<p>3. Starting the usability testing: Don&#8217;t plunge the users directly into the testing process. Get talking with them, explain what the website is about and what the URL is; get some initial feedbacks about what they expect from such a site. If they mention some phrases or some other such term, then it is good to understand these statements or terms. Getting some words of polite conversation in makes them more comfortable.</p>
<p>4. Decide what you want to get tested: When deciding to select tasks for review by users, it is absolutely essential that you dump the notion about favorite sections of the site. You may have added a great new section that was very difficult to develop, but if it is not critical to the success of the site, then it is not a high priority to get an evaluation done. You should select tasks that are critical for the success of the site.</p>
<p>5. Scenarios are always better for such evaluations: Again, you need to talk in the language of the customer. You may have had great internal debate on the naming of features, but if you asking customers to evaluate some flows, then you should:<br />
- Ask them to try out workflows / use cases (for example, you need to find some white shoes for your kid, and pay for them through the card that you normally use)<br />
- Use simple language (avoid more technical words such as payment processing, and instead use phrases such as payment options)<br />
- Set tasks that have a logical conclusion</p>
<p>6. The actual task execution: It is almost a core logic of usability testing that people should not be tasked very heavily during the process of usability testing. Get them to do one task at a time, and focus on their responses during the execution of the task. In a lot of cases, users may have to be given inputs during the course of the task (say, you want them to test out the convenience of posting videos to YouTube); in such cases, make sure that they have the equipment needed for the task (in this case, they either have a sample of home videos, or they have a camera readily available)</p>
<p>7. The participant is not at fault: Sometimes, you get users struggling during the usability test, or they get stuck at places where you would think that things are very simple. Remember, all their feedback is important, and if they are not able to do some tasks or part of tasks, then it is most likely a reflection of the task rather than any inherent inabilities on the part of the contestants. Further, if they are confused by something, or they have to make a choice, don&#8217;t guide them down some path (you would most likely introduce a bias if doing so). If you are asked a direct question, then reply, but not venture an opinion.</p>
<p>8. Don&#8217;t get distractions into place: Once the user has started, minimise distractions. Prevent people from coming or going in the location, and this includes a lot of traffic in front of the room where the test is happening. If people need to see, then they should see this on a video conference or some other facility. Test subjects can get conscious if there are too many there.</p>
<p>9. The user has completed their testing: If the user is done, then you need to gather as much information as possible. Ask the user about their impressions, about what worked well and what did not. Ask about what they feel could be done to improve things, and whether what they saw was how they would have done things. This could involve also asking them about what they recall about the software or the site - this helps in highlighting the parts that remain in the minds of the tester.</p>
<p>10. Go through the recording of the tester interaction; this helps in determining where the tester was able to move fast, where there was hesitation, and most importantly, where the tester expected to find something and did not.</p>
<p>11. If you are still not clear after going through with a number of testers, use more ! Your product success depends on getting the flow right, and if this means that you need more usability testing done, then so be it.</p>
]]></content:encoded>
			<wfw:commentRss>http://learnsoftwareprocesses.com/2008/06/29/guidelines-for-usability-testing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Usability testing tools</title>
		<link>http://learnsoftwareprocesses.com/2008/06/07/usability-testing-tools/</link>
		<comments>http://learnsoftwareprocesses.com/2008/06/07/usability-testing-tools/#comments</comments>
		<pubDate>Sat, 07 Jun 2008 10:56:30 +0000</pubDate>
		<dc:creator>ashish</dc:creator>
		
		<category><![CDATA[Usability]]></category>

		<category><![CDATA[Tools]]></category>

		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://learnsoftwareprocesses.com/2008/06/07/usability-testing-tools/</guid>
		<description><![CDATA[Usability testing is a part of the development life cycle that is pretty critical. It is part of the series of steps (along with user testing and beta testing) that validate  whether the product (and the features) are actually usable by the actual end users; feedback from this stage can make a difference between [...]]]></description>
			<content:encoded><![CDATA[<p>Usability testing is a part of the development life cycle that is pretty critical. It is part of the series of steps (along with user testing and beta testing) that validate  whether the product (and the features) are actually usable by the actual end users; feedback from this stage can make a difference between success and failure of the software / website. But such a process can only be useful it is done effectively; if done wrongly, it can prove to be either useless or provide wrong results.<br />
Here is a smattering of tools that can be of help if you are in the business of being involved in usability testing:</p>
<p>1. Usability Test Data Logger tool v5.0 (<a href="http://www.userfocus.co.uk/resources/datalogger.html" target="_blank">link to site</a>)<br />
Some features:<br />
# Cross-platform: Datalogger is a PC- or Macintosh-compatible Microsoft Excel file (requires Microsoft Excel to run).<br />
# Customisable: You can enter participant details, task names, task order, pre- and post-test interview questions and include your own satisfaction questionnaire.<br />
# Captures quantitative data: The spreadsheet includes preset task completion scores and includes a built-in timer to record time-on-task.<br />
# Captures qualitative data: Allows data entry of qualitative observations for each participant and each task.<br />
# Provides real-time data analysis: Automatically generates charts illustrating task completion, time-on-task and user satisfaction with the product.</p>
<p>2. Morae Usability Testing for Software and Web Sites (<a href="http://www.techsmith.com/morae.asp" target="_blank">link to site</a>)<br />
From the website:<br />
Morae gives you the tools to:<br />
    * Instantly calculate and graph standard usability measurements, so you can focus on understanding results<br />
    * Visualize important results in ways that make them more understandable and meaningful<br />
    * Present results persuasively and professionally<br />
Morae bundle can be bought for $1495 (<a href="http://store.techsmith.com/default.asp#morae" target="_blank">link</a>)</p>
<p>3. A website that explains how to use Macromedia Director as a Usability testing tool (<a href="http://www.acm.org/crossroads/xrds6-5/macromedia.html" target="_blank">link to article</a>)<br />
From the website:<br />
While Director will not eliminate standard development environments or programming languages, it will enhance the prototyping and usability testing experience by allowing developers to gather feedback from prospective clients and users early in product development. Early prototyping will allow developers to identify and fix defects early in development.</p>
<p>4. QUIS: The Questionnaire for User Interaction Satisfaction (<a href="http://www.cs.umd.edu/hcil/quis/" target="_blank">link to site</a>)<br />
From the website:<br />
The purpose of the questionnaire is to:<br />
   1. guide in the design or redesign of systems,<br />
   2. give managers a tool for assessing potential areas of system improvement,<br />
   3. provide researchers with a validated instrument for conducting comparative evaluations, and<br />
   4. serve as a test instrument in usability labs. Validation studies continue to be run. It was recently shown that mean ratings are virtually the same for paper versus computer versions of the QUIS, but the computer version elicits more and longer open-ended comments. </p>
<p>5. Rational Policy Tester Accessibility Edition (<a href="http://www-306.ibm.com/software/awdtools/tester/policy/accessibility/" target="_blank">link to site</a>)<br />
From the website:<br />
The Accessibility Edition helps ensure website user accessibility by monitoring for over 170 accessibility checks. It helps determine the site&#8217;s level of compliance with government standards and displays results in user-friendly dashboards and reports.<br />
    * Improves visitor experience by exposing usability issues that may drive visitors away<br />
    * Facilitates compliance with federally-regulated guidelines and accessibility best practices<br />
    * Enlarges your market opportunity: over 10 percent of the online population has a disability (750 million people worldwide, 55 million Americans)<br />
    * Operating systems supported: Windows</p>
<p>6. Serco service (<a href="http://www.serco.com/usability/services/index.asp" target="_blank">link to site</a>)<br />
They have a service that covers the following stages:<br />
Planning and Strategy<br />
User needs<br />
Defining concepts<br />
Usability evaluation</p>
<p>7. Web accessibility toolbar (<a href="http://www.visionaustralia.org.au/info.aspx?page=614" target="_blank">link to site</a>)<br />
From website:<br />
The Web Accessibility Toolbar has been developed to aid manual examination of web pages for a variety of aspects of accessibility. It consists of a range of functions that:<br />
    * identify components of a web page<br />
    * facilitate the use of 3rd party online applications<br />
    * simulate user experiences<br />
    * provide links to references and additional resources</p>
<p>8. WAVE 4.0 Beta (<a href="http://wave.webaim.org/" target="_blank">link to site</a>)<br />
From website:<br />
WAVE is a free web accessibility evaluation tool provided by WebAIM. It is used to aid humans in the web accessibility evaluation process. Rather than providing a complex technical report, WAVE shows the original web page with embedded icons and indicators that reveal the accessibility information within your page.</p>
<p>9. Readability Test (<a href="http://juicystudio.com/services/readability.php" target="_blank">link to site</a>)<br />
The website provides a service that helps in determining how readable a site is.<br />
From the website:<br />
Gunning Fog, Flesch Reading Ease,  and Flesch-Kincaid are reading level algorithms that can be helpful in determining how readable your content is. Reading level algorithms only provide a rough guide, as they tend to reward short sentences made up of short words. Whilst they&#8217;re rough guides, they can give a useful indication as to whether you&#8217;ve pitched your content at the right level for your intended audience.</p>
<p>If you have feedback on the above, or other tools that have been useful for you, please comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://learnsoftwareprocesses.com/2008/06/07/usability-testing-tools/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Usability testing methods</title>
		<link>http://learnsoftwareprocesses.com/2008/06/07/usability-testing-methods/</link>
		<comments>http://learnsoftwareprocesses.com/2008/06/07/usability-testing-methods/#comments</comments>
		<pubDate>Sat, 07 Jun 2008 09:45:00 +0000</pubDate>
		<dc:creator>ashish</dc:creator>
		
		<category><![CDATA[Usability]]></category>

		<category><![CDATA[Techniques]]></category>

		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://learnsoftwareprocesses.com/2008/06/07/usability-testing-methods/</guid>
		<description><![CDATA[Usability testing can take the form of several methods and techniques (depending on the situation and need):
Cognitive Walkthrough: Performed continually during the development cycle, cognitive workflows try to evaluate the system from a user&#8217;s thought process that help in decision making (these include the ability to reason as well as other factors such as memory [...]]]></description>
			<content:encoded><![CDATA[<p>Usability testing can take the form of several methods and techniques (depending on the situation and need):</p>
<p>Cognitive Walkthrough: Performed continually during the development cycle, cognitive workflows try to evaluate the system from a user&#8217;s thought process that help in decision making (these include the ability to reason as well as other factors such as memory load). This will help in terms of understanding how the system will seem like to a infrequent user. The input for such users could be in the form of paper workflows or through a working prototype. More details can be <a href="http://www.usabilityhome.com/FramedLi.htm?CognWalk.htm" target="_blank">found at this link</a>.</p>
<p>Focus Groups: Focus groups are actually a method used by marketing companies whereby a group of people from the target segment are brought together in a discussion type of format. A person from the product team acts as the moderator, and prepares a list of issues to be discussed. More details from this <a href="http://www.usabilityhome.com/FramedLi.htm?FocusGro.htm" target="_blank">site (link)</a>. </p>
<p>GOMS: Goals, Operators, Methods, and Selection Rules; a slightly difficult mechanism to evaluate and model human task performance.</p>
<p>Prototyping: Prototyping is a very famous method for displaying a system for internal users and for external usability testers. Prototypes can range from paper models to actual almost working types of prototypes.</p>
<p>Walk-Around Review: This type of study is meant to harness the observations of other people in the company who are not part of the engineering team. The idea is to place paper mockups on the walls of the company along with space for comments so that people can write their comments; in addition, early builds can be provided to company people for them to use and provide comments on. Such a method can provide a lot of useful tips (and have an incidental benefit of providing greater visibility to your project).</p>
<p>Field Observation: Representatives of the product team go to the actual user workplaces and observe how they use the software in their daily lives (example, if a digital imaging application for professional photographers is being developed, then a good way is to have multiple days where people tag along with photographers and observe their usage of the application).</p>
<p>Task Analysis: # An analyst determines the user goals and tasks, then makes recommendations aimed at increasing efficiency and user-friendliness. The objective is to determine how the user actually feels comfortable in using software / sites.</p>
<p>Interviews/Observations: These are one-to-one discussions. Do a thorough discussion with them about what they do, and observe their usage at the same time. This will help in doing a realistic determination about their pattern of usage.</p>
<p>Usability Inspection: reviews a system based on a set of usability guidelines. Experts familiar with issues of usability in design perform the usability inspection.</p>
<p>User Testing: Users (sampled from the final target customer segment) use the final software / site. These can be final users from the client side (if the software is developed for a specific client), or can be a sample set of users. Usability experts study their interactions and figure out what are the paint points and improvements needed.</p>
]]></content:encoded>
			<wfw:commentRss>http://learnsoftwareprocesses.com/2008/06/07/usability-testing-methods/feed/</wfw:commentRss>
		</item>
		<item>
		<title>About usability testing and timing</title>
		<link>http://learnsoftwareprocesses.com/2008/06/07/about-usability-testing-and-timing/</link>
		<comments>http://learnsoftwareprocesses.com/2008/06/07/about-usability-testing-and-timing/#comments</comments>
		<pubDate>Sat, 07 Jun 2008 08:58:14 +0000</pubDate>
		<dc:creator>ashish</dc:creator>
		
		<category><![CDATA[Usability]]></category>

		<category><![CDATA[Benefits]]></category>

		<category><![CDATA[Testing]]></category>

		<category><![CDATA[Process]]></category>

		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://learnsoftwareprocesses.com/2008/06/07/about-usability-testing-and-timing/</guid>
		<description><![CDATA[Suppose you are in a tight development cycle. You have to deliver either a new product, or the next version of an existing product. Getting the features of a product right is always a touch task, given that there are a number of competing features that seem important, and prioritizing the features is something that [...]]]></description>
			<content:encoded><![CDATA[<p>Suppose you are in a tight development cycle. You have to deliver either a new product, or the next version of an existing product. Getting the features of a product right is always a touch task, given that there are a number of competing features that seem important, and prioritizing the features is something that is very important. This decides the priorities that the engineering team (the feature development team) will follow during the development cycle.<br />
How is this priority actually decided ? If the company is in in the business of defining an absolutely new product that has not been conceptualized as yet, then getting some feedback from prospective customers is difficult; however, if there are already customers using an existing product (from the same company or a rival company), then it is absolutely essential that these users be polled for the features so that there is a good idea about the features that are most critical (it would also help to identify features that customers would be willing to pay a premium for).<br />
Now consider that we are in the development phase of the project lifecycle, where the UI team works along with the engineering team to define the workflow for the feature. There is a lot of discussion around what the feature should be like (with a possibility of the discussion getting heated as a regular part of feature discussion), and eventually most people agree to what the feature should be like. The UI specs of the feature are drawn up and the feature implementation is based on the spec. At this point, everything may seem settled, but it is critically important that this final implementation be evaluated for usability issues. At this point, the team needs to find a set of people who would adequately represent the final set of users, and get them to see the feature working in the actual product. Such usability testing will help determine whether the determined final feature is actually something that the users can accept, or whether there are problems that need to be modified.<br />
The timing of such user testing is most critical. Typically, such workflows reach a final form close to the end of the cycle, and this is the form in which users can actually exercise the workflows. However, in a contra effect, this time is also very late in the cycle, and the team will be hesitant to accept changes that are significant, since the amount of time required to make these changes may not be easily available.<br />
What is the solution ? The solution that seems to work is to have a much more active involvement with users, starting with showing them mockups as the workflow gets more concrete, active question and answer sessions about what they may be looking for, till the time that they can review the actual product implementation. Further, if a workflow is very new and contentious, then it would make sense to try and complete it earlier. And finally, there needs to be time built into the schedule to take such changes.</p>
]]></content:encoded>
			<wfw:commentRss>http://learnsoftwareprocesses.com/2008/06/07/about-usability-testing-and-timing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>TYPES OF SOFTWARE SYSTEMS</title>
		<link>http://learnsoftwareprocesses.com/2008/05/25/types-of-software-systems/</link>
		<comments>http://learnsoftwareprocesses.com/2008/05/25/types-of-software-systems/#comments</comments>
		<pubDate>Sun, 25 May 2008 05:13:23 +0000</pubDate>
		<dc:creator>ashish</dc:creator>
		
		<category><![CDATA[System]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://learnsoftwareprocesses.com/2008/05/25/types-of-software-systems/</guid>
		<description><![CDATA[BATCH SYSTEMS : They are a set of programs that perform certain activities which do not require any kind of input from the user. Batch systems contain one or more API which perform various tasks.
Ex: When something is typed on a word document by pressing a key, same is displayed on the monitor. The process [...]]]></description>
			<content:encoded><![CDATA[<p>BATCH SYSTEMS : They are a set of programs that perform certain activities which do not require any kind of input from the user. Batch systems contain one or more API which perform various tasks.</p>
<p>Ex: When something is typed on a word document by pressing a key, same is displayed on the monitor. The process of conversion of user input of the key to machine language and then displaying what you have typed on monitor is performed by batch system.</p>
<p>EVENT CONTROL SYSTEMS : These systems process real time data to provide the user with results for the command that has been given.</p>
<p>Ex: When you press Ctrl + S, it tells the computer to save the document. This communication is provided by the event controls that are pre-defined in the system.</p>
<p>PROCESS CONTROL SYSTEMS : When two systems communicate, the co-ordination or data transfer becomes vital. Process control systems are the one’s that receive data from a system and instruct the sending system to perform specific tasks based on the reply sent by the receiving system.</p>
<p>PROCEDURE CONTROL SYSTEMS : These systems are one’s which control the functions of another system.</p>
<p>MESSAGE PROCESSING SYSTEMS : A simple example to explain these kind of systems is the SMS management software used by the mobile operator which handles the incoming and outgoing messages.</p>
<p>DIAGNOSTIC SOFTWARE SYSTEMS : These systems help in diagnosing the computer hardware components.<br />
Ex: The “NEW HARDWARE FOUND” dialogue seen when you plug in a new device to the computer is an example of these kind of systems.</p>
<p>SENSOR &#038; SIGNAL PROCESSING SYSTEMS : In these systems the computer receives input in form of signals and then transforms the signals to a user understandable output.</p>
]]></content:encoded>
			<wfw:commentRss>http://learnsoftwareprocesses.com/2008/05/25/types-of-software-systems/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Deadlock - Algorithms</title>
		<link>http://learnsoftwareprocesses.com/2008/05/25/deadlock-algorithms/</link>
		<comments>http://learnsoftwareprocesses.com/2008/05/25/deadlock-algorithms/#comments</comments>
		<pubDate>Sun, 25 May 2008 05:12:41 +0000</pubDate>
		<dc:creator>ashish</dc:creator>
		
		<category><![CDATA[Algorithms]]></category>

		<category><![CDATA[Deadlock]]></category>

		<guid isPermaLink="false">http://learnsoftwareprocesses.com/2008/05/25/deadlock-algorithms/</guid>
		<description><![CDATA[BANKER’S ALGORITHM 
Consider an example:
There are four customers: A, B, C and D, which are analogous to four processes.
The credit unit is like the resource
The banker himself is the OS
Assume each credit unit = Rs. 1000.
Not all customers need their maximum credit immediately. Hence only 10 credit units are reserved.
Process Current Max. Free = 10
A [...]]]></description>
			<content:encoded><![CDATA[<p>BANKER’S ALGORITHM </p>
<p>Consider an example:</p>
<p>There are four customers: A, B, C and D, which are analogous to four processes.<br />
The credit unit is like the resource<br />
The banker himself is the OS<br />
Assume each credit unit = Rs. 1000.</p>
<p>Not all customers need their maximum credit immediately. Hence only 10 credit units are reserved.<br />
Process Current Max. Free = 10<br />
A 0 6     B 0 5     C 0 4     D 0 7</p>
<p>How does the Algorithm Work?</p>
<p>When a new process (customer) enters the system, it (he) must declare the maximum number of instances of each resource type (credit units) that it (he) may need. This number may not exceed the total number of resources (credit units) in the system. When a user (customer) requests a set of resources (credit unit), the system must determine whether the allocation of these resources will leave the system in a safe state. If it will,<br />
the resources are allocated; otherwise, the process must wait until some other process releases enough resources. Consider current allocation to various processes is as shown below.<br />
Process Current Max. Free = 2<br />
A 1 6    B 1 5    C 2 4    D 4 7<br />
Would the System be in a Safe State?<br />
‘C’ requests 2 additional units and gets them. It then runs to completion and frees all the resources it has.<br />
Process Current Max. Free = 4<br />
A 1 6     B 1 5     C 0 -    D 4 7<br />
Now either ‘B’ or ‘D’ can request and run to completion. Assume ‘B’ requests 4 additional units and gets them. It then runs to completion and frees all its resources. Process Current Max. Free = 5<br />
A 1 6     B 0 -    C 0 -    D 4 7<br />
Now ‘D’ runs and requests 3 additional resources and gets them. It then runs to completion and releases all its resources.Process Current Max. Free = 9<br />
A 1 6     B 0 -    C 0 -    D 0 -<br />
Finally ‘A’ runs and requests 5 additional resources and gets them. It then runs to completion and releases all its resources. Process Current Max. Free = 10<br />
A 0 -     B 0 -    C 0 -    D 0 -<br />
Here is the complete banker’s algorithm: </p>
<p>Several data structures must be maintained to implement banker’s algorithm. Let n be the number of processes and m be the number of resource types. The data structures needed are:<br />
• Available : A vector of length m indicates number of available resources of each type. If Available[j] = k, there are k instances of resource type Rj available.<br />
• Max : A n*m matrix defines the maximum demand of each process. If Max[i,j]=k, then Pi may request at most k instances of resource type Rj.<br />
• Allocation : An n*m matrix defines the number of resources of each type currently allocated to each process. If Allocation[i,j]=k, then process Pi is currently allocated k instances of resource type rj.<br />
• Need : An n*m matrix indicates the remaining resource need of each process. If Need[i,j]=k, then Pi may need k more instances of resource type Rj to complete its task. Need[i,j]=Max[I,j] – Allocation[I,j].</p>
<p>After defining the data structures, algorithm moves into two phases :<br />
• Safety Algorithm<br />
• Resource Request Algorithm</p>
<p>SAFETY ALGORITHM</p>
<p>The safety algorithm is for finding out whether or not a system is in a safe state. It is described below:</p>
<p>1. Let work and finish be vectors of length m and n<br />
respectively. Initialize work = Available and Finish[I] = false for all I = 1, 2, …, n.<br />
2. Find an I such that both<br />
 • Finish[I] = false<br />
 • Needi <= work<br />
If no such I exists, go to step 4.<br />
3. Work = work + allocationi<br />
finish[I] = true<br />
go to step 2</p>
<p>4. If finish[I] = true for all I, then the system is in a safe state. This algorithm may require an order of m * n2 operations to decide whether a state is safe.</p>
<p>RESOURCE – REQUEST ALGORITHM</p>
<p>Having determined that the system is safe, this algorithm grants the requested resources to the process. Let Request i be the request vector for process Pi. If Request[j] = k, then process Pi wants k instances of resource type Rj. When this request is made, the following actions are taken:</p>
<p>1. If request I <= need I, then go to step 2. Otherwise raise an error condition because the process has exceeded its maximum claim.<br />
2. If request I <= available, go to step 3. Otherwise, Pi must wait since the resources are not available.<br />
3. Have the system pretend to have allocated the requested resources to process Pi by modifying the state as follows:<br />
a. Available = available – request I<br />
b. Allocation = allocation + request I<br />
c. Need I = Need I – request I<br />
4. Call the Safety algorithm. If the state is safe, then transaction is completed and process Pi is allocated the resources. If the new state is unsafe, then Pi must wait and the old resource allocation state is restored.</p>
]]></content:encoded>
			<wfw:commentRss>http://learnsoftwareprocesses.com/2008/05/25/deadlock-algorithms/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Deadlock avoidance and prevention</title>
		<link>http://learnsoftwareprocesses.com/2008/05/25/deadlock-avoidance-and-prevention/</link>
		<comments>http://learnsoftwareprocesses.com/2008/05/25/deadlock-avoidance-and-prevention/#comments</comments>
		<pubDate>Sun, 25 May 2008 05:11:58 +0000</pubDate>
		<dc:creator>ashish</dc:creator>
		
		<category><![CDATA[Prevent]]></category>

		<category><![CDATA[Deadlock]]></category>

		<guid isPermaLink="false">http://learnsoftwareprocesses.com/2008/05/25/deadlock-avoidance-and-prevention/</guid>
		<description><![CDATA[Deadlock Prevention
In order to prevent deadlock, the system is built in such a way that no deadlock occurs. Make sure that at least one of the four conditions in which deadlock can occur does not exist.
Attacking Hold and wait : In order to ensure that hold and wait condition never occurs, two protocols can be [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-weight:bold;">Deadlock Prevention</span></p>
<p>In order to prevent deadlock, the system is built in such a way that no deadlock occurs. Make sure that at least one of the four conditions in which deadlock can occur does not exist.</p>
<p>Attacking Hold and wait : In order to ensure that hold and wait condition never occurs, two protocols can be used:<br />
• Make all the requests in the beginning. All or nothing policy.<br />
• A process should request a resource only when it has none.</p>
<p>Attacking Pre-emption : To avoid this situation, the protocol that can be used is if a process that is holding some resources requests another resource that cannot be allocated immediately, then all the resources currently held are released. These released resources gets added to the list of resources for which process is waiting.</p>
<p>Or, if process requests a resource, check their availability, if available allocate them. If not, check if they are allocated to other process that is waiting for additional resources. If so, preempt the desired resources from waiting process and allocate to requesting process. If not available, requesting process should wait.</p>
<p>Attacking Mutual Exclusion : This condition holds for nonsharable resources e.g printer. Sharable resources do not require a mutually exclusive access, and thus cannot be involved in a deadlock.</p>
<p>Attacking Circular Wait Condition : To prevent this condition, use the following protocol:<br />
• Order all the resources.<br />
• Make sure that the requests are issued in such a way so that there are no cycles present in the graph.<br />
• Resources can be requested only in an increasing order i.e. we cannot request a resource whose number is less than any you may be holding.</p>
<p><span style="font-weight:bold;">Deadlock Avoidance</span></p>
<p>It turns out that there are algorithms you can use to avoid deadlock. The principle is as follows: Whenever you are about to make an allocation, you can run this algorithm and see if making that allocation would lead to a deadlock.This seems like<br />
the ideal method but has some important drawbacks.Let us see what these drawbacks are:<br />
1. The algorithms are not that fast and there is a lot of overhead in running them before every resource allocation. The OS might be allocating resources hundreds of times a second.<br />
2. The algorithms assume that processes know their maximum resource needs a priority. But this is often not the case.<br />
3. They (processes) assume that they know what resources are available in the system. Hardware can go down and resources can become unavailable. This could lead to unpredictable deadlock situations.<br />
In short, in deadlock avoidance method, the OS must be given in advance additional information concerning which resources a process will request and use during its lifetime.</p>
<p>Here are some salient points of the algorithm working nature:<br />
• The deadlock avoidance algorithm dynamically examines the resource allocation state to ensure that there can never be a circular-wait condition.<br />
• A state is safe if the system can allocate resources to each process (up to its maximum) in some order and still avoid deadlock.<br />
• A system is in a safe state only if there exists a safe sequence.<br />
• A safe state is not a deadlocked state but a deadlocked state is an unsafe state.<br />
• An unsafe state may lead to a deadlock.</p>
<p>Safe State</p>
<p>A state is safe if the system can allocate resources to each process in some order and avoid deadlock. A safe sequence is a sequence of processes <P1, P2, P3, …, Pn><br />
for the current allocation state if for each Pi, the resources that Pi can still request can be satisfied by the currently available resources plus the resources held by all Pj with j <= i . In this situation, if the resources that process Pi needs are not immediately available, then Pi can wait until all Pj have finished. When they have finished, Pi can obtain all its needed resources, complete its designated task, return its allocated resources, and terminate. When Pi terminates, Pi+1 can obtain its needed resources and so on. If no such sequence exists, then the system state is said to be unsafe.</p>
<p>Resource Allocation Graph Algorithm</p>
<p>Deadlocks can be described more precisely in terms of directed graphs called a system resource allocation graph. A directed edge Pi -> Rj is called request edge which signifies that process Pi requested an instance of resource Rj. A directed edge Rj->Pi is called assignment edge which signifies that resource Rj is allocated to process Pi. A directed edge Pi&#8211;>Rj is called a claim edge which indicates that process Pi can request resource Rj at some time in future. When process Pi requests resource Rj the claim edge becomes a request edge. Similarly, when a resource Rj is released by Pi, the assignment edge is converted to a claim edge.</p>
<p>Suppose process P1 requests resource Rj. Request is granted only if this request edge is converted to an assignment edge, hence not resulting in the formation of a cycle in resource allocation graph. Hence the process has to wait for the resource.</p>
]]></content:encoded>
			<wfw:commentRss>http://learnsoftwareprocesses.com/2008/05/25/deadlock-avoidance-and-prevention/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Deadlock situation</title>
		<link>http://learnsoftwareprocesses.com/2008/05/25/deadlock-situation/</link>
		<comments>http://learnsoftwareprocesses.com/2008/05/25/deadlock-situation/#comments</comments>
		<pubDate>Sun, 25 May 2008 05:11:06 +0000</pubDate>
		<dc:creator>ashish</dc:creator>
		
		<category><![CDATA[Deadlock]]></category>

		<guid isPermaLink="false">http://learnsoftwareprocesses.com/2008/05/25/deadlock-situation/</guid>
		<description><![CDATA[A deadlock is a situation wherein two or more competing actions are waiting for the other to finish, and thus neither ever does. In the computing world deadlock refers to a specific condition when two or more processes are each waiting for another to release a resource, or more than two processes are waiting for [...]]]></description>
			<content:encoded><![CDATA[<p>A deadlock is a situation wherein two or more competing actions are waiting for the other to finish, and thus neither ever does. In the computing world deadlock refers to a specific condition when two or more processes are each waiting for another to release a resource, or more than two processes are waiting for resources in a circular chain.</p>
<p>Under the normal mode of operation, a process may utilize a resource in the following sequence:</p>
<p>Request – when a process needs some resource, it requests for it. Process has to wait if resource is busy.<br />
Use – The process should operate on the resource.<br />
Release – After using, process should release the resource.</p>
<p>Conditions In Which Deadlock Can Arise</p>
<p>• Hold and Wait : As the name suggests, a process is holding a resource and also waiting for some other resources that are held by other process.<br />
• No Preemption : A resource can be released only voluntarily by the process holding it, after that process has completed the task.<br />
• Mutual Exclusion : It means only one process can use the resource at a time. If some other process requests that resource, the requesting process has to wait until the resource is released.<br />
• Circular Condition : There must exist a state of waiting processes in which process P0 is waiting for a resource that is held by P1, P1 waiting for resource held by P2, Pn-1 waiting for resource held by Pn an Pn is waiting for resource held by P0.</p>
]]></content:encoded>
			<wfw:commentRss>http://learnsoftwareprocesses.com/2008/05/25/deadlock-situation/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Usability testing process</title>
		<link>http://learnsoftwareprocesses.com/2008/05/16/usability-testing-process/</link>
		<comments>http://learnsoftwareprocesses.com/2008/05/16/usability-testing-process/#comments</comments>
		<pubDate>Fri, 16 May 2008 18:04:33 +0000</pubDate>
		<dc:creator>ashish</dc:creator>
		
		<category><![CDATA[Usability]]></category>

		<category><![CDATA[Testing]]></category>

		<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://learnsoftwareprocesses.com/2008/05/16/usability-testing-process/</guid>
		<description><![CDATA[Usability testing can make a lot of difference to the ultimate success of the products of the company, and needs to be well planned. If you do the test wrong, or have some of the parameters wrong, then this could have negative results for the company (in addition, you could end up letting the key [...]]]></description>
			<content:encoded><![CDATA[<p>Usability testing can make a lot of difference to the ultimate success of the products of the company, and needs to be well planned. If you do the test wrong, or have some of the parameters wrong, then this could have negative results for the company (in addition, you could end up letting the key designers and engineers get wrong inputs). The key to successful usability testing is careful planning and preparation and making sure that the usability test is properly executed. The following are the steps that could be used in this process:</p>
<p>1. Draw up a list of things to test.</p>
<p>* You can&#8217;t test everything. Decide what are the most important tasks you want users to be able to perform for your product or site, and prioritize them as to which are the ones to be done first. </p>
<p>2. Draw up the scenarios that you want the users to test.</p>
<p>* The scenarios should be based on some of the initial customers that you had designed, and should be realistic.<br />
* Keep the tests to be a reasonable time frame. Remember that people take a certain amount of time to get comfortable with a topic, so anything less than 10 minutes could be tricky, One the other hand, if it gets too long, it could make the subjects weary.<br />
* Test the scenarios on yourself before you use them on your test subjects. </p>
<p>3. Write a script for administering the test &#8212; this is necessary for consistency. It is particularly important if more than one person will be conducting the test, or if you cannot do the test at some point of time. Also, finalizing a script is a good way of ensuring that key people have signed off on the tests.</p>
<p>* Include in the script an introduction to the test, an explanation of how the test will be conducted, the questions that will be asked, and suggestions for follow-up questions to encourage the subjects to discuss what they are doing and why.<br />
* Allow for some free format answers<br />
* You can ask test subjects to think out loud &#8212; a behavior that is not always natural to everyone. You may need to drill this into the subjects periodically, but it is very important - it helps find out what they are thinking. </p>
<p>4. Test the test. Try it on some users &#8212; find out if the scenarios are comprehensible; if there are some problems, then you may need to rework the tests.</p>
<p>5. Train the testers and recorders.</p>
<p>* First-time testers should each practice conducting a test with volunteers or on each other - this will help them get more comfortable and gain a bit of experience.<br />
* First-time testers should then discuss the experience of conducting the test.<br />
* Critique each other, appreciate good things, but learn from mistakes and highlight necessary improvements to be made.<br />
* Practice and critique the recording of subjects, comments. </p>
<p>6. Gather volunteers to be tested, using the various sources that you would have (forums, existing customers, etc).</p>
<p>* Expect to provide some form of compensation to your volunteers, it could be something as simple as a copy of the last released version of the software, or maybe some sort of company branded gift item<br />
* Volunteers should be selected so that they are representative for the general user population. Choose a mixture of age, year in school, occupation, etc.<br />
* People who volunteered should be scheduled and sent several follow-up messages about the time and place for their test.<br />
* Even with reminder messages, expect some people to drop out - there may be sudden personal issues or some other such reason. </p>
<p>7. Make sure you have a quiet place to do the testing. It&#8217;s a good idea to conduct the practice test in the actual room that you will use for the real testing and that the subjects will not have much distractions in such testing. It will not help if people keep dropping in and out of the place.</p>
<p>8. Conduct the tests.</p>
<p>* Schedule enough time between tests for the tester and the recorder to debrief before the next test begins.<br />
* If you discover that a test question or a design element is not working, it is unwise to continue testing. </p>
<p>Fix what is wrong before you continue testing. Make the change and test the correction. The computer industry calls this &#8220;rapid prototyping&#8221;. </p>
<p>9. Record the test results as soon as possible after the test is completed. If possible, stream the actual process so that interested folks can see it easily as it is going on.</p>
<p>10. Analyze the results and determine how to correct the design problems. Redesign based upon usability evaluation results.</p>
<p>Brief steps that need to be taken:<br />
- Recruiting (one month in advance - selecting locations than dates and participants<br />
- Travel Planning (one month in advance - in tandem with the recruiting)<br />
- Prototype development and refinement (2-4 weeks in advance depending on the fidelity)<br />
- Task development (2-4 weeks in tandem with the prototype)<br />
- Approvals (2-4 weeks in advance depending on the formality of the study)</p>
]]></content:encoded>
			<wfw:commentRss>http://learnsoftwareprocesses.com/2008/05/16/usability-testing-process/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Defect Management</title>
		<link>http://learnsoftwareprocesses.com/2008/05/09/defect-management/</link>
		<comments>http://learnsoftwareprocesses.com/2008/05/09/defect-management/#comments</comments>
		<pubDate>Fri, 09 May 2008 10:12:16 +0000</pubDate>
		<dc:creator>ashish</dc:creator>
		
		<category><![CDATA[Defect]]></category>

		<guid isPermaLink="false">http://learnsoftwareprocesses.com/2008/05/09/defect-management/</guid>
		<description><![CDATA[What is a defect?
For a test engineer, a defect is:
•	Any deviation from a given specification.
•	Anything that causes user dissatisfaction
•	Incorrect output
•	Software is not behaving the way it should behave.
Difference between bug, defect and error:-
•	Software is said to have a bug if the features deviate from the specifications.
•	Software is said to have a defect if it is [...]]]></description>
			<content:encoded><![CDATA[<p>What is a defect?</p>
<p>For a test engineer, a defect is:<br />
•	Any deviation from a given specification.<br />
•	Anything that causes user dissatisfaction<br />
•	Incorrect output<br />
•	Software is not behaving the way it should behave.</p>
<p>Difference between bug, defect and error:-<br />
•	Software is said to have a bug if the features deviate from the specifications.<br />
•	Software is said to have a defect if it is having some unwanted side effects.<br />
•	Software is said to have an error if it is giving an incorrect output.</p>
<p>DEFECT TAXONOMIES</p>
<p>All software defects can be broadly categorized into the below mentioned types:<br />
•	Errors of Commission : when something wrong is done.<br />
•	Errors of Omission : when something is left out by accident.<br />
•	Errors of Clarity &#038; Ambiguity : when there are different interpretations.<br />
•	Errors of speed &#038; capacity.<br />
•	Conceptual or Design bugs.<br />
•	Coding bugs<br />
•	Integration bugs.<br />
•	User interface errors.<br />
•	Functional errors.<br />
•	Communication errors.<br />
•	Missing commands<br />
•	Performance<br />
•	Output<br />
•	Error handling errors.<br />
•	Boundary related errors<br />
•	Calculation errors<br />
•	Control flow errors.<br />
•	Race condition errors.<br />
•	Load condition errors.<br />
•	Hardware errors.<br />
•	Source &#038; Version control errors.<br />
•	Documentation errors.<br />
•	Testing errors.</p>
]]></content:encoded>
			<wfw:commentRss>http://learnsoftwareprocesses.com/2008/05/09/defect-management/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
