<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7018844622305267172</id><updated>2011-11-27T15:16:16.252-08:00</updated><category term='System requirements'/><category term='LCSAJ'/><category term='smoke testing'/><category term='Quality related'/><category term='CMMI model'/><category term='Statement coverage'/><category term='code inspection'/><category term='regression testing'/><category term='ram testin'/><category term='Coverages'/><category term='conition/decision coverage'/><category term='IEEE 12207.0'/><category term='condition coverage'/><category term='Life cycle Process'/><category term='code walkthrough bugs in code inspection'/><category term='White box testing'/><category term='Unit testing boundary value analysis'/><category term='memory testing'/><category term='data line error'/><category term='Hardware in loop simulation'/><category term='MCDC'/><category term='address bus error'/><category term='embedded systems'/><title type='text'>Software Engineering Explored</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>29</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-129564170713110040</id><published>2010-01-06T07:49:00.000-08:00</published><updated>2010-01-06T07:51:28.184-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='data line error'/><category scheme='http://www.blogger.com/atom/ns#' term='address bus error'/><category scheme='http://www.blogger.com/atom/ns#' term='memory testing'/><category scheme='http://www.blogger.com/atom/ns#' term='ram testin'/><title type='text'>Testing memories in embedded systems</title><content type='html'>In embedded software, memory plays an important role. To see that memory works correctly; we have to test memory. There are two aspects of testing a memory.&lt;br /&gt;&lt;br /&gt;Memory tested at manufacturer end and memory tested at the developers end. Due to advance in technology, defects in the memory due to manufacturing process are few and can be tested against. But at the developer end, memory can fail in many ways and to test the memory against those failures, it requires lots of time and resources in programming. Other question is whether memory tested at the start of the program execution is good enough or tests shall be conducted at regular interval during execution of the program.&lt;br /&gt;&lt;br /&gt;To understand the algorithm to test the memory against failures, we must first see what are the different ways in which memory can fail? There two categories in which errors causing failures are divided, hard errors and soft errors.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Hard errors&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Memory uses a sometimes very complex net of wiring and circuitry. Wires break, socketed chips rattle loose, corrosion creates open circuits, and chips fail.&lt;br /&gt;&lt;br /&gt;Any of such error occurring due to electrical connections between processor and memory or absence of memory or loose connection of memory is called as hard error. These errors are again divided into three types: Address bus error, data us error and control signal error. Although it is relatively easier to derive and algorithm and test memory against address and data bus errors, it is some what impractical to test control signal errors.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Data line errors:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;These are errors which occur due to malfunctioning of data line connecting processor to the memory. In this case wrong data is written on and read from the memory location.&lt;br /&gt;&lt;br /&gt;For example, “Stuck together” where one or two bits contain same value irrespective of data transmitted on the data line or “stuck high” and “stuck low” where a particular bit is always high or always low, as the case may be.&lt;br /&gt;&lt;br /&gt;These errors can be tested against by making each bit or data line 0 and 1 independent of other bits.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Address line error&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;These errors occur due to cross connection or open connection in the address line. In this case data written is seems to be overlapping as data intend for one memory location is written on other.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Signal error&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Due to failure of control signals, memory probably, will not work at all and can be easily detected. Although practically there are no generalized tests possible to test against these errors, theoretically it is possible to generate specific tests.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Soft errors&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;These are errors which corrupt the memory location contents and are transient. Tests to check the soft memory errors are generally based on the principle that “is it the same what we had written on the memory location.”&lt;br /&gt;&lt;br /&gt;Tomorrow we will be working on developing tests against above mentioned errors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-129564170713110040?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/129564170713110040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2010/01/testing-memories-in-embedded-systems.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/129564170713110040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/129564170713110040'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2010/01/testing-memories-in-embedded-systems.html' title='Testing memories in embedded systems'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-3738742061778059140</id><published>2009-12-23T06:15:00.001-08:00</published><updated>2009-12-23T06:16:06.171-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Hardware in loop simulation'/><title type='text'>What is hardware in loop simulation?</title><content type='html'>A system in which hardware and software are both involved satisfying the intended functionality is called as embedded system. This kind of systems must interact with the outer world and hence the outer environment has profound impact on the correct working of the system.&lt;br /&gt;&lt;br /&gt;But one cannot have the outer world ready at the time of development or testing of the system which system is going to be part of or it is not possible or advisable to develop or test such system in the real outer world in to gain confidence in the system. Consider an example of a navigation system for launch vehicles; we cannot afford to test them with the real launch vehicles which cost in billions. Take another one, a system which will control a nuclear power plant, can we risk lives if system doesn’t perform correctly in the real plant. Then, how to test these systems?&lt;br /&gt;&lt;br /&gt;There is one method known as “Hardware in loop simulation”.&lt;br /&gt;We develop the system in the host environment (normal PC) and burn (put it into) PROM and make the system ready. Now we find out what are the elements in the outer world, the system is going to interact with and how there responses would be if system sends them a particular signal at the time of operation. Create a model out of the outer environment and simulate the outer world in the model. Test the system with that simulated environment. So you don’t have real hardware in picture still u are testing their responses to the system under test.&lt;br /&gt;There is another advantage this testing can be done while system is still under development so that to fine tune the expectations to be implemented in the system.&lt;br /&gt;You can test the control units with extreme conditions that might not be feasible in the real world.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-3738742061778059140?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/3738742061778059140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/12/what-is-hardware-in-loop-simulation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/3738742061778059140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/3738742061778059140'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/12/what-is-hardware-in-loop-simulation.html' title='What is hardware in loop simulation?'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-8782947411580181825</id><published>2009-10-28T06:41:00.001-07:00</published><updated>2009-10-28T06:42:15.383-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smoke testing'/><category scheme='http://www.blogger.com/atom/ns#' term='regression testing'/><title type='text'>Regression testing</title><content type='html'>Regression testing is process of finding defects in features of software which were working perfectly prior to bug fixation or inclusion of new features. So most of the test cases will be already present and we have to just re-run them. If new feature has been added, we might have to create new test cases.&lt;br /&gt;Why we need regression testing? The answer for the question lies in the design process. However perfectly we design our system or software, there may be some interdependency among various functions and modules of the software called as coupling. As a result, a small change in one function can have catastrophic effect on the other. So to be assured that, any change done to fix a bug in one module has not affected any other module, we use regression testing.&lt;br /&gt;&lt;br /&gt;Qualifying a component for regression testing: When any build comes for regression testing, we have to check whether or not the build worth testing.  It may be possible that the build doesn’t satisfy the major requirements, so there is not point putting efforts in testing various smaller requirements. So it is advised that always test critical and difficult parts of the software at the first glance and then move on to the trivial and smaller parts. This process of qualifying software for detailed testing is called as smoke testing.&lt;br /&gt;&lt;br /&gt;These are the four types of tests one shall run on the software before qualifying it for further testing.&lt;br /&gt;1) Customer based tests: Find out all scenarios in which software is going to be used and run test cases to test software functionalities in those scenarios. Think at higher level i.e. product level and ask what are the test case critical for your customer and run them on priority. Operation profile of the software may be handy&lt;br /&gt;2) Complex tests:  Find out which are the test cases which will test majority of the important features of the software.&lt;br /&gt;3) Expected failure tests:  From the past experiences and intuition one can find out what are the ways in which the system can fail and try to test those things first before moving to other features.&lt;br /&gt;4) Big picture test: Test the performance of the software and any other quality attributes. If software doesn’t satisfy these attributes tests then avoid testing other features. &lt;br /&gt;Hence one can now understand that regression testing in not about blindly running already created test cases but there are some other subtle issues to be taken care of.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-8782947411580181825?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/8782947411580181825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/10/regression-testing-regression-testin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/8782947411580181825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/8782947411580181825'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/10/regression-testing-regression-testin.html' title='Regression testing'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-2366627106335530005</id><published>2009-10-07T10:10:00.000-07:00</published><updated>2009-10-07T10:16:08.219-07:00</updated><title type='text'>Make code readable and understandable: Naming conventions</title><content type='html'>Uniform naming conventions shall be followed for variables and functions names throughout the code. One can decide upon the naming notations available (Hungarian, Camel, and Pascal etc) as per the requirement and comfortableness but once chosen, notation shall be followed throughout the code.  &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;a) Names shall clearly state the intent of the variable or function&lt;/span&gt;. The most important consideration in naming a variable is that the name fully and accurately describes the entity the variable represents.&lt;br /&gt;For example variable that current payload status is better named as curr_payload_status than cps.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;b) Names should be as specific as possibl&lt;/span&gt;e. For example, one can use variable name date to represent current or today’s date. It’s almost a good names but it can represent any date and not the specific today’s date. It can be better named as currentDate.  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;c) Names should represent problem domain than the solution.&lt;/span&gt; They must represent what then how. For example, if one is dealing with temperature obtained by sensor, one shall name it as sensor_temp rather than obtain_temp.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;d) Variable should be of Optimum length neither too long nor too short.&lt;/span&gt;&lt;br /&gt;For example, for representing no of sensors in payload, numberofsensorsinpayload is too long where as n is too short. Optimal length name will be num_sensors&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;e) If variable stores result of some computation like total, average, maximum or minimum then names shall be prefixed or suffixed (one shall be followed throughout the code) with these quantifiers.&lt;/span&gt;&lt;br /&gt;For example to represent average of all sensor data, average_sensor_data would be good name as compared to avg or avg_data etc.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;f) Loop indexes should be given more meaningful name&lt;/span&gt; rather than just i, j, k if loop indexes are to be used outside the loop or loop body is longer than a few lines.  &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;g) For naming any status variable, better name than flag should be given.&lt;/span&gt; For clarity, they must be assigned values and compared to enumerators and global variables which are defined as named constants.  &lt;br /&gt;characterType= =CONTROL_CHARACTER is more meaningful than statuflag==0X80&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;h) Temp should be avoided as much as possible.&lt;/span&gt; Instead of that a better name should be given to temporary variable which states the intent of the variable.  &lt;br /&gt;Temp= sqrt(b^2-4*a*c) &lt;br /&gt;root[0]= (-b +temp)/2*a&lt;br /&gt;root[1]= (-b -temp)/2*a&lt;br /&gt;It is not advisable to use temp to store the result of expression as it is used in two places after that. Better name and code would be like&lt;br /&gt; Discrimant= sqrt(b^2-4*a*c) &lt;br /&gt; root[0]= (-b + Discrimant)/2*a&lt;br /&gt; root[1]= (-b - Discrimant)/2*a&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;i) Boolean variable shall be named as done, error, found, success or OK&lt;/span&gt;. One can use them as isDone, isError, isFound, isSuccess etc. &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;j) When using an enumerated type, you can ensure that it’s clear that members of the type all belong to the same group by using group suffix.&lt;/span&gt;&lt;br /&gt;                     Like Enum color&lt;br /&gt;                              {&lt;br /&gt;            color_Red;&lt;br /&gt;            color_Green;&lt;br /&gt;           color_Blue;  &lt;br /&gt;               }&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;k) When naming constants, name the abstract entity the constant represent rather than the number the constant refers to.&lt;/span&gt; NINE is a bad constant name for no of channels While NO_OF_CHANNELS is a better one. As no of channels can vary, they can be changed at one place only.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Avoid  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   a) Avoid names with similar meanings like input and inputValue, numRecord and recordNum etc. &lt;br /&gt;b) Avoid variables with different meaning and similar name.&lt;br /&gt;c) Avoid names that sound similar such as wrap and rap.&lt;br /&gt;d) Avoid numerals in names like file1, temp1, temp2 etc.&lt;br /&gt;e) Don’t differentiate variable names solely by capitalization like naming two variables as File and file is a bad practice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-2366627106335530005?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/2366627106335530005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/10/make-code-readable-and-understandable.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/2366627106335530005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/2366627106335530005'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/10/make-code-readable-and-understandable.html' title='Make code readable and understandable: Naming conventions'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-7531670491215912014</id><published>2009-09-27T00:40:00.000-07:00</published><updated>2009-09-28T10:34:15.523-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Coverages'/><category scheme='http://www.blogger.com/atom/ns#' term='White box testing'/><category scheme='http://www.blogger.com/atom/ns#' term='LCSAJ'/><title type='text'>What is LCSAJ?</title><content type='html'>LCSAJ stands for Linear Code Sequence and Jump. Typically it contains three parts:&lt;br /&gt;1) Initial step of the program code or  a step to which control may jump and continue to execute after that.&lt;br /&gt;2) The program terminating step or an instruction which lead to jump.&lt;br /&gt;3) And the destination step of the jump.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;Let’s there is a program which finds whether input number is prime or not.&lt;br /&gt;&lt;br /&gt;1) Printf( “Enter the number:”);&lt;br /&gt;2) Scanf(“%d”,&amp;num)      ;&lt;br /&gt;3) bPrime=true;&lt;br /&gt;4) for(int i=2;i&amp;&lt;num/2;i++)&lt;br /&gt;5) {&lt;br /&gt;6)   if( num%i==0)&lt;br /&gt;     {&lt;br /&gt;7)      Printf( “ %d is factor of %d”, i, num);&lt;br /&gt;     bPrime = false;&lt;br /&gt;     }&lt;br /&gt;8) }&lt;br /&gt;9) if(bPrime==true)&lt;br /&gt;10) {&lt;br /&gt;11)       Printf( “Number is Prime”);&lt;br /&gt;12) }&lt;br /&gt;13)  End of program.&lt;br /&gt; &lt;br /&gt;To find all LCSAJs in code, find all jumps in the program. Those are: (4-&gt;9, 8-&gt;5, 6-&gt;8 and 9-&gt;13). All those instructions, to which control could jump from instruction other than the preceding one, are called as start of the LCSAJ. &lt;br /&gt;In the above code starts of LCSAJ are: (1 (entry of the program), 5, 8 and 13).&lt;br /&gt;&lt;br /&gt;Now find LCSAJ from each LCSAJ start. For LCSAJ starting at 1, control goes from instruction 1 to 3 and checks for condition at step 4. If the condition is false, then code jump occurs giving first LCSAJ, assuming all other conditions following it are true, (Initial step, branching step and destination step) (1, 4, 9). Now, the case where condition at step 4 is true, control flows from step 5 and then step 6, which is a condition statement. If that condition is false, a new LCSAJ would be formed due to jump which is (1, 6, 8).  Similarly, LCSAJs (1, 8, 5) and (1, 9, 13) are also there.&lt;br /&gt;Similarly, LCSAJs could be formed with every start of the LCSAJ.&lt;br /&gt;&lt;br /&gt;100% LCSAJ Coverage implies 100% Decision Coverage.  But there is a possibility of LCSAJs being infeasible while testing and also effort required for LCSAJ testing and coverage is more as compared to decision coverage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-7531670491215912014?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/7531670491215912014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/09/what-is-lcsaj.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/7531670491215912014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/7531670491215912014'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/09/what-is-lcsaj.html' title='What is LCSAJ?'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-5341382608977497255</id><published>2009-09-24T09:42:00.000-07:00</published><updated>2009-09-24T09:43:50.129-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IEEE 12207.0'/><title type='text'>IEEE 12207.0 Software life cycle processes</title><content type='html'>IEEE 12207.0 is a standard which describes the various life cycle processes, activities and tasks to followed in various phases and parts of software life cycle. It is the standard which describes all activities and tasks for software development form cradle to grave from acquisition process to maintenance process along with some umbrella process like management process, infrastructure and training process.&lt;br /&gt;It classifies all process into three parts: Primary processes, supporting processes and organizational process. Diagram below shows the structure of the standard.&lt;br /&gt;&lt;br /&gt;Primary processes: these are processes which are performed by primary parties (which are involved in development, operation and maintenance of the software).&lt;br /&gt;These primary parties are: acquirer who acquires the software, Supplier who supplies the software, Developer who develops the software, Operator who operates the software,       and maintainer who maintains the software.&lt;br /&gt;   &lt;br /&gt;1) Acquire process:  This process is collection of activities and tasks of the organization which acquires the system, software or service.&lt;br /&gt;2) Supply process: This process is collection of activities and tasks of the organization which supplies the system, software or service.&lt;br /&gt;3) Development process: This process is collection of activities and tasks of the organization which develops the system, software or service.&lt;br /&gt;4) Operation process: This process is collection of activities and tasks of the organization which operates the system, software or service in its live environment.&lt;br /&gt;5) Maintenance process: This process is collection of activities and tasks of the organization which maintains, track changes and keep running the system, software or service in its live environment.&lt;br /&gt;&lt;br /&gt;Supporting processes: A supporting process supports another process (primary) in an integral part, as when needed, for successful completion of that process and quality outcome. There are eight supporting processes &lt;br /&gt;1) Documentation process: It defines and elaborates the activities and tasks to be performed while recording the information of life cycle process; it can be requirements, design or any contract of the process.&lt;br /&gt;2) Configuration management process: It defines all activities and tasks which are required for proper configuration management of project deliverable and artifacts.&lt;br /&gt;3) Quality assurance process: It defines and elaborates various activities and tasks to assure quality of the product and process and ensure that product is developed as per requirements and adhere to their established plans.&lt;br /&gt;4) Verification process: It defines activities (for acquirer, supplier, or independent party depending on the nature and time of conduction of process) for proper verification of the product being developed in varying depth based on the nature of the software.&lt;br /&gt;5) Validation process: It defines activities (for acquirer, supplier, or independent party depending on the nature and time of conduction of process) for proper validation of the product being developed in varying depth based on the nature of the software.&lt;br /&gt;Important difference between verification and validation is that verification is done for both process and product but validation is of product only.&lt;br /&gt;Verification ensures that we are making system right.&lt;br /&gt;Validation ensures that we have made the right system.&lt;br /&gt;6) Joint review process: It defines all activities for reviewing the intermediate and final product and process. There are two parties involved in the process one is who is reviewing (may be independent) other being reviewed.&lt;br /&gt;7) Audit process: It defines all activities and tasks which are essential for determining whether the process followed in development is compliance to the standard adopted. Here also there are two parties involved auditing and other being audited.&lt;br /&gt;8)   Problem resolution process: Defines activities and tasks for analyzing and removing the   problems (including nonconformance), whatever their nature or source, that are discovered during the execution of development, operation, maintenance, or other processes.&lt;br /&gt;&lt;br /&gt;3) Organizational processes: These processes are employed by organization for establishing and developing the underlying structure for life cycle process and producing personnel for improving the process and structure. These are umbrella process and are outside the project limits and can be employed and required across the projects. There are four organizational processes:&lt;br /&gt;1)  Management process: It defines activities and tasks for management for maintaining and improving the process including project management and execution of life cycle process.&lt;br /&gt;2)  Infrastructure process: It defines basic activities for establishing underlying structure for life cycle processes.&lt;br /&gt;3) Improvement process: It defines basic activities and tasks (for all primary and supporting parties) for establish, measure, control and improve life cycle process.&lt;br /&gt;4) Training process: It defines activities and tasks to produce skilled and adequately trained manpower for life cycle processes. &lt;br /&gt;  These are various processes in 12207. Software life cycle processes standard. We will discuss each and every process in detail in forth coming posts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-5341382608977497255?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/5341382608977497255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/09/ieee-122070-software-life-cycle_24.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/5341382608977497255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/5341382608977497255'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/09/ieee-122070-software-life-cycle_24.html' title='IEEE 12207.0 Software life cycle processes'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-8455668696935673380</id><published>2009-09-22T04:36:00.000-07:00</published><updated>2009-09-22T09:48:07.236-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unit testing boundary value analysis'/><category scheme='http://www.blogger.com/atom/ns#' term='conition/decision coverage'/><title type='text'>Unit testing techniques</title><content type='html'>Unit is an atomic part of a program which could not be decomposed in smaller parts. Testing that part for its correct implementation is called unit testing. There are various techniques for conducting unit testing. These techniques are complementary to each other and find different set of errors when applied to unit, one after the other.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;1)      Specification based testing techniques:&lt;/span&gt;  This technique generates test cases based on program's behavior,input domain and expected output.Following are specification based techniques&lt;br /&gt;a)      Equivalence partition: Under the technique, input domain of the unit is partitioned into various classes. Each class contains input values which would have similar effect on the code. Test cases select input values at random,from these classes.&lt;br /&gt;&lt;br /&gt;b)      Boundary value analysis: test cases are generated so that they can cover the boundaries of any condition in the code. Generally, it is performed after equivalence partition. One test case is designed for inside of the classes and as many as necessary to cover its limits.&lt;br /&gt;&lt;br /&gt;c)      Decision tables and cause effect graphing: Inputs for the unit can occur in any combinations. Those combinations are represented and analyzed with decision tables and cause effect graphing. Then test cases are generated for all the possible input output combinations.&lt;br /&gt;&lt;br /&gt;d)      Random testing: Test cases are generated at random according to the input domain and expected output domain specified in specifications.&lt;br /&gt;&lt;br /&gt;2)      Code based testing techniques: These testing techniques can be again classified into two categories:&lt;br /&gt;Control flow based criteria: This varies as to how well and what part of code, the test case covers in the program control flow.&lt;br /&gt;Data flow based criteria: In this, test cases cover the execution space between variable defined and where they are used in the program flow.&lt;br /&gt;&lt;br /&gt;Let’s consider the control flow based criteria techniques:&lt;br /&gt;a)      Statement coverage:  Test cases generated for this criterion must ensure that they execute each and every statement of the code.&lt;br /&gt;&lt;br /&gt;b)      Decision (branch) coverage: Code contains many decisions and corresponding branches for those decisions. To fulfill the decision or branch coverage criterion test cases must ensure that all the program decisions take the value true or false and execute the corresponding code&lt;br /&gt;&lt;br /&gt;c)      Condition (Predicate) Coverage: In practice, decisions compose of many conditions. Combination of values attained by these conditions decides the final outcome for decisions. To satisfy condition coverage criterion, test cases must ensure that all conditions present in the decision take the value true and false.&lt;br /&gt;&lt;br /&gt;d)      Modified condition/ decision coverage: There may be a case where we have    tested the condition and decision in the program, but still individual effect of each condition on the decision is not tested. There may be cases of short circuiting in logical expressions. To test the independent influence of every condition on decision modified condition/ decision coverage is used.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-8455668696935673380?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/8455668696935673380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/09/unit-testing-techniques.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/8455668696935673380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/8455668696935673380'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/09/unit-testing-techniques.html' title='Unit testing techniques'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-5423925105937506628</id><published>2009-09-21T00:09:00.000-07:00</published><updated>2009-09-21T07:02:07.640-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code walkthrough bugs in code inspection'/><category scheme='http://www.blogger.com/atom/ns#' term='code inspection'/><title type='text'>Nature of bugs found in code inspection</title><content type='html'>Code inspection is an important process in any mission or safety critical system development. It’s a type of static testing in which code is not executed but critically analyzed in order to find some subtle bugs which are not detectable or require lot of efforts to detect in testing phase. The point of interest is what kind of defects one can find in code inspection. This article analyses bugs classes found in the code in code inspection process.  &lt;br /&gt;&lt;br /&gt;1) &lt;span style="font-weight:bold;"&gt;Maintainability of the code:&lt;/span&gt;  No code is perfect when it has been written. It is bound to change, enhanced and modified for adaptation to different platforms. So it is necessary that code written is understandable and maintainable. Code inspection focuses on this goal. Under this, following points are looked for in code:&lt;br /&gt;a) Code to comment ratio is proper and whether comments explain intent of the code appropriately and correctly.&lt;br /&gt;b) Whether all the variable names and function names are meaningful and clearly state the intention.&lt;br /&gt;c) Whether the coding standards or guidelines are adhered to.&lt;br /&gt;d) Whether code has proper logical flow or not?&lt;br /&gt;&lt;br /&gt;2) &lt;span style="font-weight:bold;"&gt;Design flaws:&lt;/span&gt; Code reflects design of the software. What if the deign itself contains flaws. Since software is tested against requirements and design, it is very difficult to detect these kind of defects in testing phase. In that case, code inspection provides an additional design review step. There are issues which will never fail the system but very dangerous from the quality point of view.  For example, when designing system, one designs a structure to keep track of some of the hardware channels status like if they were empty or full etc. The very thought instrumental behind the design was that structure could be used bit wise and memory could be saved which would have not possible by using arrays. But this thought didn’t consider that system had some functionality which requires checking status of all channels at the same time like for averaging of all channels data. Since the data structure used was bit wise structure, one has to check all the fields of the structure one by one resulting in very lengthy and unstructured code which would have been very simple, in single loop if array has been used.&lt;br /&gt;&lt;br /&gt;3) &lt;span style="font-weight:bold;"&gt;Structural flaws:&lt;/span&gt;  Proper structure of the code is must for understanding and testing of the software. Following points which are given stress on in code inspection process:&lt;br /&gt;&lt;br /&gt;a) Does every function implement single functionality and is testable?&lt;br /&gt;b) Does length of the function justifiable or shall it be broken into smaller ones?&lt;br /&gt;c) Is any dead or extra code present in the code?&lt;br /&gt;d) Is any unreachable code present in the code?&lt;br /&gt;e) Whether there are multiple exists for functions and can they be removed?&lt;br /&gt;f) Does every variable, that has been assigned value in any conditional block, get initialized prior to usage?        &lt;br /&gt;    &lt;br /&gt;     4) &lt;span style="font-weight:bold;"&gt; Logical errors:&lt;/span&gt; These are errors which are infused in the coding phase by developer because of ambiguous design or unclear requirements. As there is no guard against them in requirements and design, these kinds of bugs are subtle,not obvious in nature,may occur once in many execution cycles or when a particular sequence of events occur.&lt;br /&gt;For example, lets say, software works in sequence of steps like power on, operation on, check of automatic corrections,operation off and then power off. In operation phase, it first checks whether given number of passes have already been elapsed in operation then only does the automatic correction. The variable which keeps track of no of passes was reinitialized at the power on stage. Assuming that software goes to operation off state; again comes to operation on state without going to power off state. Now since this is a fresh operation, automatic correction shall be applied after given no of passes have been elapsed in this operation, but as variable keeping track of no of passes is not reinitialized hence contains last value, so software does not wait for given no of passes to elapse and starts performing automatic correction. This error will not hamper the functioning of the software but will surely hamper the algorithm which calculates the corrections to be applied to the data. These kinds of errors are found in the code inspection by hypothesis.&lt;br /&gt;&lt;br /&gt;There is subtle difference between code walkthrough and code inspection&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Code walkthrough &lt;/span&gt;is an informal process which is conducted by developer team. Peer reviews are kind of code walkthrough.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Code inspection &lt;/span&gt;is more formal process with formal team,roles and meetings. Code inspections report is asked for in project and process audits. Checklists are used for code inspection.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-5423925105937506628?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/5423925105937506628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/09/nature-of-bugs-found-in-code-inspection.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/5423925105937506628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/5423925105937506628'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/09/nature-of-bugs-found-in-code-inspection.html' title='Nature of bugs found in code inspection'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-8956157023060174338</id><published>2009-09-02T09:38:00.000-07:00</published><updated>2009-09-02T09:41:46.096-07:00</updated><title type='text'>Improving code quality</title><content type='html'>Code is implementation of design of your software. However robust and reliable you design your software it is going to give problems especially while maintaining, changing or debugging. It is therefore important that code written shall be quality one. So the question is how to write quality code. There is set of steps which if followed while coding can result in quality code.&lt;br /&gt;&lt;br /&gt;1) &lt;span style="font-weight:bold;"&gt;Identify and implement coding standard:&lt;/span&gt; Coding standards provide a common platform to all involved in the development so that everybody can understand code written by other and can easily change and test it. Coding standard makes code more readable and understandable which is most important form the QA point of view who conducts code walkthroughs. These also prevent mistakes which are induced due to hidden characteristics (Like precedence order of operators) of the language in which code has been implemented. Standards specify naming conventions, mandatory things to do and not to do etc. It is not necessary that coding standard followed by one organization or even project be suitable or mandatory for the other. These shall identified as per the project needs and project critically. Like in an on board projects MISRA C standard shall be followed but it is too strict for any ground software.&lt;br /&gt;Various coding standards available are:&lt;br /&gt;&lt;br /&gt;2) &lt;span style="font-weight:bold;"&gt;Code walkthrough/ Inspection:&lt;/span&gt; This technique comes under static testing process and finds out bugs and violation in code without executing the code. Code walkthrough try to improve the structure, flow and understandability of the code and focuses on errors which are hindrance to maintainability and changeability of the code although it tries to find out logical mistakes in the code. Usually, a checklist, which contains a list of commonly occurring errors, is used in code walkthrough/ inspection. These some faults therefore are removed in the code before going for testing. &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;3) Proper commenting:&lt;/span&gt; Commenting is the best way to document your code. Commenting shall be mandatory for all projects but the extent of commenting may vary. For example for a critical medical software there may be 1:1 ratio of comments i.e. for every line of code written, there is a comment explaining the intent of the statement while for a website code it can 1:10 i.e. one comment for every ten lines of code. A format can be devised for comments at module level which may contain the version no of the module, purpose of the module, Functional requirement implemented in the module, inputs, processing and out of the module. &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;4) Use static code analyzer:&lt;/span&gt; These kinds of software are very useful in detecting trivial errors like connection not closed, file not closed, null pointer dereference (if applicable for language) etc. Using these tools can save time as well resources for code walkthrough as majority of the trivial errors will be detected by these tools and they can focus on major logical errors. There are many static code analyzer are available both commercial and open source. &lt;span style="font-style:italic;"&gt;FindBugs &lt;/span&gt;is one of such open source code analyzer software for JAVA&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-8956157023060174338?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/8956157023060174338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/09/improving-code-quality.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/8956157023060174338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/8956157023060174338'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/09/improving-code-quality.html' title='Improving code quality'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-5333260325057546848</id><published>2009-08-24T10:03:00.001-07:00</published><updated>2009-08-24T10:07:11.684-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Statement coverage'/><category scheme='http://www.blogger.com/atom/ns#' term='MCDC'/><category scheme='http://www.blogger.com/atom/ns#' term='condition coverage'/><category scheme='http://www.blogger.com/atom/ns#' term='White box testing'/><title type='text'>Coverage types in white box testing</title><content type='html'>White box testing generally focus on the structure of the code and find bugs related to the structure of the code like some statement not executed, some condition is never met etc. It is very useful in detecting dead code and unreachable code along with bug which are initiated by execution of particular statement or satisfaction of particular condition.&lt;br /&gt;For test adequacy criteria for white box testing we put some limit on the code coverage like we can state that white box testing is completed when 90% of the statements in the code have been executed. Coverage can be statement coverage, decision coverage condition coverage, or both condition decision coverage or modified condition decision coverage. These coverage criteria are ordered in the increasing power of revealing defects and the no of test cases required achieving them.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Statement coverage&lt;/span&gt;: If the test adequacy criteria statement is like all (100%) statements in the code shall be executed before testing is completed then tester has to design test suite in such a fashion that every statement in the code is executed at least once.&lt;br /&gt;This type of coverage can reveal defects in improper assignments or computation but it cannot reveal defect that is originated from a missing statement.&lt;br /&gt;For example we have a code &lt;br /&gt;If (age&lt;65 and married==TRUE)&lt;br /&gt;{&lt;br /&gt; statement1;&lt;br /&gt; statement2;&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt; statement3;&lt;br /&gt; statement4;&lt;br /&gt;}&lt;br /&gt;For 100% statement coverage of this code we need two test cases one for if part and other for else part. &lt;br /&gt;TestId1              age=30 and married=true         statement 1, statement2&lt;br /&gt;TestId2              age=70 and married=true        statement3, statement4 &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Decision coverage&lt;/span&gt;: This coverage makes sure that each and every branch in the code has been executed. It execute all decision statement like if then else, for loop, while loop and ensure all the outcome of the statement have been executed. It is considered stronger coverage then statement coverage because decision coverage will automatically executes all statements and in addition it also verifies all decisions/branches.&lt;br /&gt;Above mentioned example also satisfies the decision coverage criteria, where TestId1 covers if part and TestId2 covers the else part.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Condition coverage&lt;/span&gt;: Most of the time decision statements consist of more than one condition. For decision coverage we only require that the path shall be executed without bothering which condition has been satisfied for that. This can be dangerous when short circuiting occurs.&lt;br /&gt;For example in the above mentioned code, we had 100% branch coverage but it has not shown the effect of the variable 'married==false'. To cover all the condition we have to rewrite the TestID1 as age=30 and married=false. Now in the decision we have two conditions taking all possible values. &lt;br /&gt;TestId1              age=30 and married=false         Decision outcome: false&lt;br /&gt;TestId2              age=70 and married=true          Decision outcome: false&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Condition/decision coverage&lt;/span&gt;: In above example, we can see that although each condition has taken all possible outcomes but the decision has taken only one value (not all possible value). To address this problem, we have another criterion that is condition/decision coverage which mandate that all conditions take there possible outcomes as well as all decision outcomes are also taken or all branches are also executed. Taking the above example, we have to write another test case for this.&lt;br /&gt;&lt;br /&gt;TestId3           age=30 and married=true            Decision outcome: true&lt;br /&gt;By looking carefully we can remove this extra test case by modifying above test cases as&lt;br /&gt;&lt;br /&gt;TestId1              age=30 and married=true         Decision outcome: true&lt;br /&gt;TestId2              age=70 and married=false          Decision outcome: false&lt;br /&gt;These two test cases now will give 100% condition coverage and 100% decision coverage.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Modified condition/ decision coverage&lt;/span&gt;: As we can see from above test case, all combinations for all the conditions in a decision are not required in any of the above criterion. Modified condition/ decision coverage mandates that all the possible combinations of the conditions in the decision shall be executed for each outcome of the decision.&lt;br /&gt;For example test cases for the above mentioned code will be &lt;br /&gt;TestId1              age=30 and married=true         Decision outcome: true&lt;br /&gt;TestId2              age=70 and married=false        Decision outcome: false&lt;br /&gt;TestId3              age=70 and married=true         Decision outcome: false&lt;br /&gt;TestId4              age=30 and married= false       Decision outcome: false&lt;br /&gt;&lt;br /&gt;To identify and write test cases for such criteria we use binary table and assign each condition true/false value and based on that find out the decision value.&lt;br /&gt;100% MCDC coverage is mandatory for the any software which is safety critical of level A according to DO-178B&lt;br /&gt;&lt;br /&gt;These are the various coverage criteria in white box testing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-5333260325057546848?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/5333260325057546848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/08/coverage-types-in-white-box-testing_24.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/5333260325057546848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/5333260325057546848'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/08/coverage-types-in-white-box-testing_24.html' title='Coverage types in white box testing'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-3389966517329010252</id><published>2009-07-20T04:57:00.000-07:00</published><updated>2009-07-20T04:59:27.633-07:00</updated><title type='text'>Ten things to include in design of an embedded software</title><content type='html'>Software component of the embedded system is different than the normal software. This software has to interact with the environment via interfaces, perform tasks in real time etc. It’s not just lines of code which maps the input domain to output domain. So while designing any embedded systems software one has to take care of some basic fundamentals.&lt;br /&gt;&lt;br /&gt;1)      Decision making strategy: This should be decided in design itself that what mechanism will be used for decision making. There are various flow controls provided by languages, like if then else, switch statements or lookup tables.Since embedded systems are generally real time systems, it’s always required that the decisions are taken quickly. For that look-up tables are most&lt;br /&gt;efficient way of doing so. Another advantage being added is code becomes more readable and understandable.&lt;br /&gt;&lt;br /&gt;2)      While designing data structures to be used in code, try to have fixed size arrays.&lt;br /&gt;Fixed size arrays save memory allocation- de-allocation overhead. Also it should be taken care that size of the array is in power of 2. This saves the cost of multiplication overhead which is replaced by simple shift operator.&lt;br /&gt;&lt;br /&gt;3)      Always byte alignment of the underlying hardware should be mentioned. Whether the underlying architecture is ‘little endian’ or ‘big endian’ should be mentioned so that errors are avoided in coding. There should be explicit padding while defining structures, if the complier&lt;br /&gt;doesn’t provides that, because it reduces the fetch cycles of the data.&lt;br /&gt;&lt;br /&gt;4)      A state diagram should be provided with clearly identified states and the triggers which are responsible for transition from one state to another. Commands that are to be accepted in a particular state shall bedecided and mentioned.&lt;br /&gt;&lt;br /&gt;5)      Proper hamming distance shall be maintained between command words so that invalid commands are not accepted as valid commands.&lt;br /&gt;&lt;br /&gt;6)      There shall be a feedback loop so that the status can be updated or maintained and any glitches in the system can be identified.&lt;br /&gt;&lt;br /&gt;7)       Always have built-in self test routines so that system starts from correct state.&lt;br /&gt;&lt;br /&gt;8)       Implement watchdog timer so that if system is in infinite loop, it can reset the system.&lt;br /&gt;&lt;br /&gt;9)      Limit the use of temporary and global variables as usually embedded systems have limited memory.&lt;br /&gt;&lt;br /&gt;10)      Se if the functionality can be implemented in the hardware effectively and efficiently.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-3389966517329010252?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/3389966517329010252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/07/ten-things-to-include-in-design-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/3389966517329010252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/3389966517329010252'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/07/ten-things-to-include-in-design-of.html' title='Ten things to include in design of an embedded software'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-6014185980066173853</id><published>2009-07-09T09:12:00.000-07:00</published><updated>2009-07-09T09:13:39.642-07:00</updated><title type='text'>Four root causes why Code goes haywire?</title><content type='html'>Code written by us is not the last one but it will be modified maintained and enhanced by many others. There are many reasons why code becomes unmanageable after some time. In this post I will be considering four reasons. &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Root cause 1:  Creating libraries of business functions without considering their domain module.&lt;/span&gt;&lt;br /&gt;It’s a general tendency to club similar functions together in one library file. For example, while developing a banking application, we tend to write the all interest functions together without worrying whether that interest is calculated on loan or deposit. Loan and deposit are domain modules of the application here.&lt;br /&gt;Another example of the similar mistake can be the reservation system; we tend to write the payment and reservation functions in same file as they are linked but we do not consider that their domain is different.&lt;br /&gt;First of all, it will be very difficult to enhance such systems, if at all, you are able to do some modifications in to that worst effect is seen while performing regression testing. Your small modification will affect many unrelated functions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Root cause 2: Mixing up the business logic with the presentation logic.&lt;/span&gt;&lt;br /&gt;If user is borrower, screen 1 should appear; if user is depositor, screen2 should appear. All these are parts of presentation logic. These decisions shall be handled at the presentation layer of the application without disturbing the business logic.&lt;br /&gt;Your loan calculation function checks whether the call for interest calculation is from batch processing or online is a classic example when you mix the business logic with the presentation logic. &lt;br /&gt;&lt;span style="font-weight:bold;"&gt; &lt;br /&gt;Root cause 3: No proper layering of functions and communication mechanism.&lt;/span&gt;&lt;br /&gt;We shall never keep utility function with domain specific at the same layer. For example, the utility function for date formatting shall not be at the same level of a domain specific function like interest calculation. There are general rules which shall be followed:&lt;br /&gt;• Module residing on the same level shall communicate with each other via predefined interfaces.&lt;br /&gt;• Module at upper layer can access the lower level functions but not vice -a- versa.&lt;br /&gt;This will also enable user to put some common part of a function, which is used across the domains, in lower level and more specialized part for the specific domain in the upper layer.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Root cause 4: Not organizing code as per functional domain.&lt;/span&gt;&lt;br /&gt;Do not keep all your files at the same hierarchy irrespective of their domain. Always make separate folder for keeping files which are related to one domain. This will improve the maintainability of the system as the code written is well organized.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-6014185980066173853?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/6014185980066173853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/07/four-root-causes-why-code-goes-haywire.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/6014185980066173853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/6014185980066173853'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/07/four-root-causes-why-code-goes-haywire.html' title='Four root causes why Code goes haywire?'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-5409761270828331184</id><published>2009-07-04T19:25:00.000-07:00</published><updated>2009-07-04T19:29:31.021-07:00</updated><title type='text'>What is Parameterized Unit Test (PUT)?</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Unit testing&lt;/span&gt;&lt;br /&gt;Unit is an atomic entity of any program which performs a specific task and can be tested independently (well almost). To test that unit of a program for its correct functionality is called as unit testing.&lt;br /&gt;&lt;br /&gt;For unit tests we have to write unit test cases. Developer themselves write unit test cases for their unit and run those against developed units. Typically, a unit test can be divided into three parts. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Exemplary data&lt;/span&gt;: Data which we input to the test case.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Method sequence&lt;/span&gt;: Based on the test inputs, this calls several methods of code-under-test.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Assertion&lt;/span&gt;: Test case fails if the assertion fails. There is another reason why a test case can fail and that is if exception is thrown but not caught.&lt;br /&gt; &lt;br /&gt;Example 1: A typical unit test case.&lt;br /&gt;&lt;br /&gt;public void AddElementTest() &lt;br /&gt;{&lt;br /&gt;//exemplary data&lt;br /&gt;int capacity = 1;&lt;br /&gt;object element = null;&lt;br /&gt;&lt;br /&gt;// method sequence&lt;br /&gt;ArrayList list = new ArrayList(capacity);&lt;br /&gt;list.Add(element);&lt;br /&gt;&lt;br /&gt;// assertions&lt;br /&gt;Assert.IsTrue(list[0] == element);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;This test case considers a particular array and tests that if one element is added to the array it should be at first place. It does not consider any other array lists and does not test their behavior.&lt;br /&gt;&lt;br /&gt;Traditional unit tests do not take input, so the intuition is to pass parameters. Hence parameterized unit tests come to light.&lt;br /&gt;&lt;br /&gt;Example 2: Consider the example given below. It is more generic than the test case given above.&lt;br /&gt; public void AddSpec2&lt;br /&gt;(&lt;br /&gt;// data&lt;br /&gt;ArrayList list, object element)&lt;br /&gt;{&lt;br /&gt;// assumptions&lt;br /&gt;PexAssume.IsTrue(list != null);&lt;br /&gt;&lt;br /&gt;// method sequence&lt;br /&gt;int len = list.Count;&lt;br /&gt;list.Add(element);&lt;br /&gt;&lt;br /&gt;// assertions&lt;br /&gt;PexAssert.IsTrue(list[len] == element);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;This &lt;span style="font-weight:bold;"&gt;parameterized unit test&lt;/span&gt; case is for the whole class of objects and only for single instance of that class. It can be applied to all array lists present in the code and we don’t have to write test cases for each of them.&lt;br /&gt;&lt;br /&gt;One other advantage of parameterized unit test cases is that they clearly separate two concerns; to write specifications for the system parameterized unit test cases (PUT) used, can be done by humans only. And to generate test cases inputs which based on the specifications and code written maximize the code coverage. This can be done by tools. PEX is one of a tool which analyzes your code and generates test inputs for PUTs .More on PEX later. &lt;br /&gt;&lt;br /&gt;PUTs provide us with ability to specify a system’s behavior on the level of the actual software API and in programming language.&lt;br /&gt;&lt;br /&gt;This is all on the parameterized Unit test, in future posts I will be explaining how to conduct PUT using PEX tool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-5409761270828331184?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/5409761270828331184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/07/what-is-parameterized-unit-test-put.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/5409761270828331184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/5409761270828331184'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/07/what-is-parameterized-unit-test-put.html' title='What is Parameterized Unit Test (PUT)?'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-6896069772809949513</id><published>2009-07-03T10:44:00.000-07:00</published><updated>2009-07-03T10:46:07.172-07:00</updated><title type='text'>Which architecture fits your application?</title><content type='html'>Client server is not the only architecture your application can be built on. There are many more. You should consider all the alternatives before zeroing in on the one you select. Designing algorithm and data structures for an application is necessary. However, when application size and complexity increase, design problem goes beyond above mentioned things. Designing and specifying system’s overall structure becomes the next task. The structure may include gross organization, global control structures, protocols for communications, synchronization and data access, allocating functional requirements to different components, scaling and performance etc. These are all part of the architecture in which you wish to build your system. &lt;br /&gt;So how to decide which architecture fits your application? For that fist of all, one should know how many types of architectures exist? What kind of application is mine? And last but not the least what kind of requirements I have to fulfill in order to make it a quality application.&lt;br /&gt;&lt;br /&gt;I will be explaining architecture styles in series of my posts. Today I’ll be explaining two architecture styles.&lt;br /&gt;&lt;br /&gt;1) Pipe line architecture&lt;br /&gt;The characteristics of Pipe line architecture is that there are set of component having set of input and set of output. Component reads input, processes it and gives the whole processed input as output to the next component Components are connected by Pipes. Components are independent of each other and do not share their states. Another thing they do not know about the component upstream and component down stream.&lt;br /&gt;&lt;br /&gt; Advantages of the Pipe line architecture&lt;br /&gt;• Allows programmer to see input/output behavior of system as composition of behavior of individual component.&lt;br /&gt;• Supports reuse; any filter can be used any other system needing same functionality as provided by the component.&lt;br /&gt;• Easily enhanced as new filters can be added without affecting the existing system.&lt;br /&gt;           Disadvantages&lt;br /&gt;  Not good for handling interactive application.&lt;br /&gt;  Need of parsing and unparsing the data entering into the component. &lt;br /&gt;Example of such architecture is UNIX command execution. UNIX provides facility to connect two commands through pipes where output of one command is send to other command as input.&lt;br /&gt;Other example would be complier where each component has a specified function like lexical analysis, parsing etc and provides the processed input to the next phase.&lt;br /&gt;&lt;br /&gt;2) Event based, implicit invocation&lt;br /&gt;When a component wishes to communicate with other component, it explicitly calls a method of that component. But in some applications we need application to react to events without any explicit calls.&lt;br /&gt;&lt;br /&gt;In this approach, instead of calling a method, component registers an event. Other components register their interest into that event and associate a procedure with that event. Now whenever that event is raised by component, all the procedures registered with the event are automatically invoked.&lt;br /&gt;Announcer of the event does not know which component will be affected by the event.&lt;br /&gt;&lt;br /&gt;Advantages of implicit invoke event based architecture.&lt;br /&gt;• Easy to extend as new component can easily replace old component by registering for those events.&lt;br /&gt;• Reusability as any component can be used just by registering for the event.&lt;br /&gt;             Disadvantages&lt;br /&gt;• No control over the execution of the procedures.&lt;br /&gt;• Problem with data transfer as the component which raised the event does not know when the response will be complete.&lt;br /&gt;Best example of this kind of architecture will be databases management systems which have triggers which are executed whenever a new record is enter in order to check for integrity checks. Debugger in the programming environment also follows the same architecture.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-6896069772809949513?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/6896069772809949513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/07/which-architecture-fits-your.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/6896069772809949513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/6896069772809949513'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/07/which-architecture-fits-your.html' title='Which architecture fits your application?'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-228495107461532907</id><published>2009-07-01T05:59:00.000-07:00</published><updated>2009-07-01T19:30:00.395-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System requirements'/><title type='text'>Everything goes wrong if your first step is wrong.Part 2</title><content type='html'>Analyzing the requirement was the first step towards the correct requirements. &lt;br /&gt;&lt;br /&gt;Second big thing you shall do is to document them properly in specified format.There are many standard templates available for writing specifications. IEEE 830 template is one of them. Template helps you to organize your specification under proper headings and makes sure that you don’t miss any critical specification that needs to be address.Keep functional and non functional, rather performance or quality requirements separate. &lt;br /&gt;&lt;br /&gt;After finalizing your template one shall chose tools available for requirements definitions or management. Many requirement management tools are available in the market.‘DOORS’ is one such tool developed by Telelogic, now IBM. These tools help you to keep trace of your requirements in design and test cases. For tracing, every requirement should be given a unique identifier. &lt;br /&gt;&lt;br /&gt;Third thing you should keep in mind, when you are documenting requirements, is that no duplicate requirement is included and no valid requirement is omitted from the document. Each and every requirement shall be elaborated in sufficient manner in order to avoid ambiguities. It’s very important that you keep your language simple so that everybody can understand written requirements.&lt;br /&gt;&lt;br /&gt;Before you document requirement you shall always consider the feasibility of the requirement under specified constraints. You shall ask yourself questions like what is the risk associated with the requirement, what if this requirement is not implemented, is there any problem integrating this requirement with any other or does it conflict with any other requirement. You shall also consider legal and ethical issues associated with the requirements.&lt;br /&gt;&lt;br /&gt;Assign every requirement its priority and user who will execute that. If possible, provide the dependency of the requirement on other requirements.&lt;br /&gt;&lt;br /&gt;Finally when requirements are documented.. send it for validation process.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-228495107461532907?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/228495107461532907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/07/everything-goes-wrong-if-your-first.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/228495107461532907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/228495107461532907'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/07/everything-goes-wrong-if-your-first.html' title='Everything goes wrong if your first step is wrong.Part 2'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-7113562254079003931</id><published>2009-06-30T05:08:00.000-07:00</published><updated>2009-06-30T05:13:57.173-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System requirements'/><title type='text'>Everything goes wrong if your first step is wrong.</title><content type='html'>Any sphere is equal to 4 times the cone which has its base equal to the greatest circle in the sphere and its height equal to the radius of the sphere…..&lt;br /&gt;Did you get that?? …No……Then read this&lt;br /&gt;V= 4/3 pi * r 3 Where V= volume, and r= Radius.&lt;br /&gt;Both statements convey the same message. Which will you prefer? Second,right? Same is the case with software requirements; more are they simple,more is possibility that they are understood and implemented right.&lt;br /&gt;&lt;br /&gt;Requirement definition and analysis phase is considered as cradle for any software project. If you make mistake in this phase, it is less likely that you will be correct at any phase of the lifecycle. Impact of poorly expressed requirements can be unmanageable, as they can have domino effect that leads to time consuming rework and schedule and budget overrun.&lt;br /&gt;&lt;br /&gt;Defining and creating good requirements is a big challenge that IT industry faces. But what do you call a good requirement? Don’t worry!! Pick up any software engineering book and its there. A good requirement is complete,correct, consistent, clear, modular, feasible, testable so on and so forth.&lt;br /&gt;&lt;br /&gt;However, the question arises how to get a good requirement and manage that requirement. First and fore most step is requirements analysis and to document systems specifications. To understand the value of this phase, we must first look into difference between system requirement and user&lt;br /&gt;requirements.&lt;br /&gt;&lt;br /&gt;User requirements are usually the first attempt for the description of the requirements, they are not well organized, sometimes ambiguous and some implied requirements are not stated. User requirements are from the business perspective and they define servicesthat software shall provide with specified constraints to enhance the business. They are used by user for acceptance testing.&lt;br /&gt;Example of user requirement for a Library system would be The library system should provide a way to allow a patron to borrow a book from the library.&lt;br /&gt;&lt;br /&gt;System requirements are written keeping the system in mind and are detailed explanation of the services and constraints of the software. These are precise, cover all aspects and address quality requirements in quantifiable manner. These are used by developers and designer for developing the system.System requirement for the above mentioned Library system would be &lt;span style="font-style:italic;"&gt;The library system should provide a withdraw interaction that allows a&lt;br /&gt;patron to withdraw a book given the ISBN and copy number of the book to be withdrawn. The interaction fails if: the book is already withdrawn, the book is not in the library's collection, the patron has already withdrawn 5 books, the patron owes more than $5, and book is on hold by someone else.Otherwise….. All cases are to be described.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Although system requirements are derived from user requirements they are more structured and complete. So there should be always a phase calledrequirement analysis phase which translates user requirements into system requirements documented in the document called SRS.&lt;br /&gt;&lt;br /&gt;This was the only first step that we have discussed in order to getdirection right.&lt;br /&gt;In future posts, I’ll be explaining more techniques to get you requirement right in the first attempt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-7113562254079003931?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/7113562254079003931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/everything-goes-wrong-if-your-first.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/7113562254079003931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/7113562254079003931'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/everything-goes-wrong-if-your-first.html' title='Everything goes wrong if your first step is wrong.'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-7407020573674369255</id><published>2009-06-29T03:03:00.000-07:00</published><updated>2009-07-01T19:32:22.464-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Quality related'/><title type='text'>Five reasons why not to use global variables?</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Introduction&lt;/span&gt;&lt;br /&gt;Global variables are those variables which can be accessed and modified by any module.&lt;br /&gt;They are declared in outermost scope so that they are visible to every inner scope module.&lt;br /&gt;&lt;br /&gt;They are usually considered as bad practice because of their non locality.They create mutual dependencies and increase complexity of program.However, there are some places where global variables are suitable to use.When one wants to avoid frequent passing of parameters form one function to another, global variables can be of use. They are used to pass information&lt;br /&gt;between modules that do not share called / caller relationship such as concurrent threads and signal handlers or interrupt routines.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Why they should be avoided when unnecessary&lt;/span&gt;&lt;br /&gt;As explained in the introduction section, global variables induce interdependency between modules thus increasing complexity of the code making it hard to analyze it.Here I give you other reason for not to use global variable unless absolutely necessary.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Reason 1: Non locality&lt;/span&gt;&lt;br /&gt;Global variables are declared in the outmost scope. So if a function uses it in the innermost scope we have to keep track that whether that variable have been modified before that is been used in the function. Functions are easy to analyze when their variables are localized and have minimum influence of other modules over them. If you code is large enough, then another problem called thrashing (related to paging in OS) may occur (only if there is no spare memory left) while executing your code as the variable and code may be on different pages.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Reason 2: Implicit coupling&lt;/span&gt;&lt;br /&gt;Coupling between modules of the code should be as low as possible in order to make it maintainable in future. When you use global variables in code,they induce coupling between modules.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Reason 3: Concurrency issues&lt;/span&gt;&lt;br /&gt;This case arises when your application is multithreaded. If more than one thread try to access the same variable at the same time, which might result in deadlock situations. Special precaution should be taken to avoid such situation resulting in extra code. We have to implement lock and unlock functions to ensure single thread access to the global variable. There may&lt;br /&gt;be a possibility that threads get obsolete values.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Reason 4: No access control or constraint checking&lt;/span&gt;&lt;br /&gt;Global variables can be get or set in any part of the program without worrying about the rules to access them as there are no rules.  This greatly hinders security when you are using third party tools.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Reason 5: Difficult to test&lt;/span&gt;&lt;br /&gt;Code which use global variables are difficult to test as there is no easy method to set a clean environment between run. It will be very difficult to test modules in isolation as Unit test suggests. There will be some implicit effect of other modules on the module in form of global variables, so it will be difficult to pin point and debug code.&lt;br /&gt;&lt;br /&gt;These are five reasons why you should avoid global variables as far as possible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-7407020573674369255?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/7407020573674369255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/introduction-global-variables-are-those.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/7407020573674369255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/7407020573674369255'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/introduction-global-variables-are-those.html' title='Five reasons why not to use global variables?'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-7814016534912895476</id><published>2009-06-26T22:02:00.000-07:00</published><updated>2009-07-01T19:32:22.465-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Quality related'/><title type='text'>Why we need code walkthrough when we have testing in place?</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Background&lt;/span&gt;&lt;br /&gt;There are many techniques employed to build confidence that your software works correctly. Code walk through is one of them. It is considered by many as “waste of time” and argued as “when we have testing in place why to go for walkthrough?” When deadlines are to be met, developers tend to avoid this phase. But in this post I will be explaining why you should have code walkthrough before you send your code for testing.&lt;br /&gt;Before that there are some facts&lt;br /&gt;HP found 80% of the errors detected during inspections were unlikely to be caught by testing.&lt;br /&gt;HP, Shell Research, Bell Northern, and AT&amp;T all found inspections 20 to 30 times more efficient than testing in detecting errors.&lt;br /&gt;IBM found inspections gave a 23% increase in productivity and a 38% reduction in bugs detected after unit test.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Reason 1: Testing cannot be exhaustive&lt;/span&gt;&lt;br /&gt;Before we go for the reason, let me explain the difference between fault and failure.&lt;br /&gt;Fault is any programming or design bug that is present in the software.&lt;br /&gt;When fault is activated, it results into failure. Not all faults result into failure all the time.&lt;br /&gt;Testing cannot be exhaustive, that is, each and every condition and path in which software will be executed, cannot be explored. So there may be some faults that are not activated in testing and gone undetected to customer end. Faults found at testing are only subset of the faults present in the software. To detect those inactivated and potential faults we have to rely on the code walkthrough.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Reason 2: Maintainability&lt;/span&gt;&lt;br /&gt;Testing only concentrates on the functional and performance requirements conformance. It never considers that how software has been written, if it works and satisfies requirements. However, when software has to be maintained (either perfective, enhance or adaptive) in future, one has to deal with code and if code is not written in legible and understandable manner, every thing goes for a toss. Code walkthrough ensure that code is written in way that future modification can be done by any programmer, there are proper and adequate commenting, function and variable names are self explanatory and coding standard are followed, which are not done in testing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Reason 3: Reuse of the code&lt;/span&gt;&lt;br /&gt;In my opinion reuse is a hyped term. We seldom use piece of code in our software in effective manner because either we are not aware that such an item is available of the self or we are not able to understand that code. If code walkthrough are conducted then other (committee members) come to know that such an item is available of the self, if required in future, as well as they have very good understanding of the software in the hand. So their knowledge can be handy in future when some other developer wants to reuse the same code in his software.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Reason 4: Effectiveness&lt;/span&gt;&lt;br /&gt;A well conducted code walkthrough can produce stunning results. According to paper by Jack G Ganssle, IBM manages to remove approx 82% of the bugs before testing. Each bug found at code walkthrough saves 9 hours of development time down the lane. Cost incurred is very much low when defect is detected in code walkthrough phase than found in the testing phase. Finally code walkthrough adds value to your code. &lt;br /&gt;&lt;br /&gt;So don’t consider it a “hassle factor” and opt for code walkthroughs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-7814016534912895476?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/7814016534912895476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/why-we-need-code-walkthrough-when-we.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/7814016534912895476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/7814016534912895476'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/why-we-need-code-walkthrough-when-we.html' title='Why we need code walkthrough when we have testing in place?'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-1963306211325589149</id><published>2009-06-26T06:05:00.000-07:00</published><updated>2009-07-01T19:30:31.755-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CMMI model'/><title type='text'>CMMI Organization</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ugsZBHUZvJo/SkTIOqmP6cI/AAAAAAAAAB0/OwfpZhsQq_4/s1600-h/CMMI_Organisation.GIF"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 166px;" src="http://4.bp.blogspot.com/_ugsZBHUZvJo/SkTIOqmP6cI/AAAAAAAAAB0/OwfpZhsQq_4/s320/CMMI_Organisation.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5351622411501431234" /&gt;&lt;/a&gt;&lt;br /&gt;In the series of CMMI posts this is the last article and in this I will be explaining how components of the model have been organized.&lt;br /&gt;&lt;br /&gt;At the top, in a particular maturity level, there are various process areas which are to be satisfied by organization, to be at that level. For example an organization at level at 2 shall satisfy requirement management process area, planning project, process and product quality assurance etc. I will explain requirement management process area in all examples below. &lt;br /&gt;&lt;br /&gt;Below process areas, there are goals; goals can be classified in two namely, specific goal and generic goals. Specific goals are goals which are to be achieved in order to satisfy that particular process area; while generic goals are required by many process areas and have organization wide presence.&lt;br /&gt;&lt;br /&gt;For example in the PA1 there is specific goal (SG1) “Requirements are managed and inconsistencies with project plans and work products are identified.” This is specific goal as it has to be implemented to satisfy only PA1 and not any other PA.&lt;br /&gt;&lt;br /&gt;Same PA has generic goal (GG2) that says “The process is institutionalized as a managed process”. There can be many other processes which can institutionalized as this PA so that’s why this is a generic goal.&lt;br /&gt;&lt;br /&gt;Specific goals are further divided into specific practices and generic goals in generic practices. Below generic practices, there are generic practices elaborations which are guidelines to implement generic practices.&lt;br /&gt;&lt;br /&gt;For example, SG1 has a specific practice (SP1.1) “Develop an understanding with the requirements providers on the meaning of the requirements.”&lt;br /&gt;&lt;br /&gt;Generic practices are categorized into four groups and those groups are called as common features as explained in the previous post.&lt;br /&gt;&lt;br /&gt;For example under the common feature “Commitment to perform” there is a generic practice (GP 2.1) “Develop an organization policy.”&lt;br /&gt;&lt;br /&gt;Again these practices (Specific or Generic) constitute of various activities listed as SP1.1.1 and so on or GP1.1.1 and so on.&lt;br /&gt;&lt;br /&gt;So this the basic organization of the CMMI model also explained in the figure given.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-1963306211325589149?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/1963306211325589149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/cmmi-organization.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/1963306211325589149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/1963306211325589149'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/cmmi-organization.html' title='CMMI Organization'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkTIOqmP6cI/AAAAAAAAAB0/OwfpZhsQq_4/s72-c/CMMI_Organisation.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-7542698018552160465</id><published>2009-06-25T05:10:00.000-07:00</published><updated>2009-06-25T05:13:24.033-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CMMI model'/><title type='text'>Model components</title><content type='html'>Yesterday we had discussion about CMMI, its representation and what different maturity level. Today I will be discussing different terms used in CMMI and how those terms form the complete standard.&lt;br /&gt;&lt;br /&gt;Process area:  Process area is collection of best practices which when performed collectively; satisfy certain goals which are considered important for process improvement.&lt;br /&gt;&lt;br /&gt;Specific goals: These apply to a process area and address the unique characteristics that must be implemented in order to satisfy the process are. These are required model [1] component.&lt;br /&gt;&lt;br /&gt;Specific practices: These are activities to be completed to achieve specific goals of a process area. These are expected model [2] component.&lt;br /&gt;&lt;br /&gt;Generic goals: These are generic because the same goal statement appears in multiple process areas or they have to be fulfilled to satisfy process area.In staged representation each process area has only one generic goal.Achievement of the generic goal signifies the control and improvement of the process. These are required model [1] component.&lt;br /&gt;&lt;br /&gt;Generic practices: Generic practices provide institutionalization so that processes associated with process area are effective, repeatable and lasting. Categorized by generic goal and common features explained below.These are expected model [2] component.&lt;br /&gt;&lt;br /&gt;Common feature: These are not rated component. They are just a way of grouping generic practices. There are four common features as given below with their abbreviations&lt;br /&gt;1)      Commitment to perform (CO)&lt;br /&gt;2)      Ability to perform (AB)&lt;br /&gt;3)      Directing implementation. (DI)&lt;br /&gt;4)      Verify implementation (VI)&lt;br /&gt;&lt;br /&gt;[1] Required model component: These components must be achieved by organization’s planned and implemented process. These are essential to rate any organization.&lt;br /&gt;[2] Expected model component: These are components which organization will typically implement in order to achieve require component.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-7542698018552160465?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/7542698018552160465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/model-components.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/7542698018552160465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/7542698018552160465'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/model-components.html' title='Model components'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-4700417692751789936</id><published>2009-06-24T01:51:00.000-07:00</published><updated>2009-07-01T19:30:31.755-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CMMI model'/><title type='text'>Do you know CMMI? Think again</title><content type='html'>What is Capability Maturity Model Integration?&lt;br /&gt;&lt;br /&gt;Model&lt;br /&gt;Model is simple representation of real world. It shows overall picture of the thing without going into intricacies of it.&lt;br /&gt;Maturity&lt;br /&gt;Definition varies form one to another but generally mature process is considered to be well defined, analyzed and repeatable along with being effective.&lt;br /&gt;&lt;br /&gt;According to the SEI, CMMI is a framework for management, engineering,support best practices organized into 25 topics called process areas.&lt;br /&gt;Other definition may be it is integrated model (many models like CMM software, CMM system engineering, CMM People and many more are integrated into it), which provides a framework to be used by organizations to improve their processes.&lt;br /&gt;&lt;br /&gt;CMMI has two representations namely staged representation which all we are aware of, and continuous representation slightly unheard term.&lt;br /&gt;Let’s talk about what is difference between two.&lt;br /&gt;One major difference is staged representation talks in terms of maturity levels with five maturity levels, where as continuous representation talks in terms of capability levels with six capability levels.&lt;br /&gt;In staged we just achieve two generic goals to reach at the top level while in continuous representation we have to achieve six generic goals (What are generic goal is topic of next post).&lt;br /&gt;In staged representation process areas are group together in levels that means if organization is at this level it shall conform to all process areas at that level, while in continuous representation process areas are divided into four groups namely process management, project management, engineering and support.&lt;br /&gt;&lt;br /&gt;Now I will briefly discuss what five maturity levels one by one &lt;br /&gt;1)      Initial&lt;br /&gt;No process is being followed and success is matter of heroics of one person. Past success cannot be repeated.&lt;br /&gt;&lt;br /&gt;2)      Repeated&lt;br /&gt; Some processes like requirement management, project planning is defined and past success can be repeated and ensures that practices are retained at the time of stress. Mile stones are defined and work products are visible to management at those points.&lt;br /&gt;&lt;br /&gt;3)      Defined&lt;br /&gt; Processes are well understood and defined in standards, procedures, tools and methods. Processes are consistent across the organization and project can define own standard by tailoring organization set of standard according to tailoring guidelines. Difference between level 2 and 3 is that scope of processes and standards. At level two every project has different standards and processes. At level 3 standards, process, methods are established at organizational level.&lt;br /&gt;&lt;br /&gt;4)      Quantitatively managed&lt;br /&gt;At this level quality levels are established and used as criteria for managing the processes. Quality and process performance is understood in statistical terms and managed throughout the life cycle of the project.&lt;br /&gt;Special causes of variations are analyzed and steps are taken to prevent their occurrences. Decisions are taken based on fact and not at whim.&lt;br /&gt;Difference between level 3 and level 4 is process predictability. Processes are qualitatively managed at level 3 where as at level there are managed quantitatively.&lt;br /&gt;&lt;br /&gt;5)      Optimizing&lt;br /&gt;It focuses on continuous process improvement using innovative technologies.&lt;br /&gt;Process improvement objectives are established and used as criteria for managing the processes.&lt;br /&gt;Process improvement addresses common causes of variations.&lt;br /&gt;Difference between level 4 and level 5 is that level 4 addresses special cause of process variation and provide statistical predictability for the process, while level 5 addresses common cause of variation and strive to achieve established quantitative process objectives.&lt;br /&gt;&lt;br /&gt;That’s all for today, tomorrow I will discuss, what are the terms used in CMMI like generic goals, specific goals, generic practices, specific practices, common features etc, and how the standard is organized with these terms.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-4700417692751789936?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/4700417692751789936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/do-you-know-cmmi-think-again.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/4700417692751789936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/4700417692751789936'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/do-you-know-cmmi-think-again.html' title='Do you know CMMI? Think again'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-1025450077356001410</id><published>2009-06-23T05:48:00.000-07:00</published><updated>2009-07-01T19:33:01.503-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Quality related'/><title type='text'>How do you know your software is quality one?</title><content type='html'>In my last post I discussed three quality attributes mentioned in ISO 9126 and explained how to measure them. Today I will be covering rest three.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4) Efficiency: &lt;/span&gt;According to ISO 9126 efficiency is set of attribute that bear on the relationship between the level of performance of the system and amount of resources used, under stated condition. Efficiency is very much important for software otherwise the whole purpose of software goes in vain.&lt;br /&gt;There are three sub attributes given for it&lt;br /&gt;&lt;br /&gt; A)Time behavior: How much time does it take to respond to your action?&lt;br /&gt; B)Resource utilization: Does the system uses system resources efficiently?&lt;br /&gt;&lt;br /&gt;Measuring efficiency is some what easy as compare to other attribute. You can easily measure ‘Time behavior’ sub attribute without any tool like you can easily say whether system is responding in time or not, is it slow or not?&lt;br /&gt;For measuring resources utilization there are some standard tools available. Memory utilization can be estimated while performing code walkthroughs of software.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;5) Maintainability:&lt;/span&gt; It is set of attribute that bear on the effort needed to make specified modifications. All though maintainability is a subjective term but it can be said that it’s inversely proportional to the size of the code and complexity of the software. Many other metrics can be used for assessing maintainability of the software like cyclomatic complexity, coupling between modules, language used and coding, code to comment ratio etc.&lt;br /&gt;There are four sub attributes for it&lt;br /&gt;&lt;br /&gt; A)Analyzability: Can faults easily diagnosed?&lt;br /&gt; B)Changeability: Is software easily modifiable?&lt;br /&gt; C)Stability: Is software stable i.e. it does not stop functioning if changes are made?&lt;br /&gt; D)Testability: Is software testable?&lt;br /&gt;&lt;br /&gt;Measuring maintainability directly is a tough job but indirectly it can be related to many metrics as explained above.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;6) Portability:&lt;/span&gt; It is asset of attribute that bear on the ability of software to be transferred from one environment to another.&lt;br /&gt;There are four sub attributes &lt;br /&gt;&lt;br /&gt;A)Adaptability: Can software moved on to other environment without affecting functionality?&lt;br /&gt;B)Install ability: Can software be installed on any system easily?&lt;br /&gt;C)Conformance: Does software conform to portability standards?&lt;br /&gt;D)Replace ability: Can software easily replace other software?&lt;br /&gt;&lt;br /&gt;Portability cannot be measure easily. But by measuring some other thing we can deduce the portability of the software. For example we can measure no of function to be changed in order to make software work correctly on other environment.&lt;br /&gt;Portability will be inversely proportional to ratio of No of functions changed to Total no of functions.&lt;br /&gt;These are six quality attributes and some measuring techniques to gauge  our software’s quality.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-1025450077356001410?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/1025450077356001410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/how-do-you-know-your-software-is.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/1025450077356001410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/1025450077356001410'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/how-do-you-know-your-software-is.html' title='How do you know your software is quality one?'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-3135035529194844614</id><published>2009-06-20T22:46:00.000-07:00</published><updated>2009-07-01T19:32:22.465-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Quality related'/><title type='text'>How do you know your software is quality one?</title><content type='html'>We all talk about having quality in our software. How to measure that quality? What are various metrics we should measure in order to say that our software is a quality software?&lt;br /&gt;What should an acquirer specify to supplier to ensure development of quality software?&lt;br /&gt;&lt;br /&gt;All these questions were answered in ISO 9126 quality standard. It contains all the quality requirements of software with minimal overlapping. But that is a theoretical part of it and some of things which it specifies are very difficult to measure, if not impossible.&lt;br /&gt;&lt;br /&gt;So let’s discuss various quality attributes and their sub attributes and also explore how to measure them for particular software.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1)Functionality:&lt;/span&gt; It bears on the ability of the software to fulfill all functional requirements, stated or implied.&lt;br /&gt;It has four sub attributes &lt;br /&gt; a)Suitability: Can software perform the task expected of it?&lt;br /&gt; b)Accuracy: Can software perform task in a correct manner?&lt;br /&gt; c)Interoperability: Can software interact and work with other systems?&lt;br /&gt; d)Security: Can software prevent unauthorized access to it.&lt;br /&gt;We can easily measure this attribute as everything is visible and objective in nature. Either your software is accurate or not; either software secure or not. Every sub attribute can be measured directly and hence the main attribute.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;2) Reliability:&lt;/span&gt; As per ISO 9126 STD definition of reliability is capability of the software to maintain its level of performance under stated conditions and stated environment.&lt;br /&gt;It is further divided into three sub attributes: &lt;br /&gt; a)Maturity: Has bug rate decreases as the software matured and comes to an acceptable level?&lt;br /&gt; b)Fault tolerance: Does software has ability to avoid exceptional conditions and can avoid error states?&lt;br /&gt; c)Recoverability: Does software has ability to resume work from the point it left when crashed or gone offline?&lt;br /&gt;There is big question? Is reliability quantifiable? Can we measure it or at least predict it.&lt;br /&gt;In best of my knowledge there are some models which can predict reliability but quantifying reliability is still a big NO.  Reliability is very subjective in nature. Reliability for a e learning system may have totally different context than reliability of a on board system integrated with rockets.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;3)Usability:&lt;/span&gt; It’s a set of attributes that bear on the effort required to use the software by stated or implied user.&lt;br /&gt;There are four sub attributes &lt;br /&gt; a)Understandability: Does user understands how to use the system?&lt;br /&gt; b)Learnability: Can user learn how to use the system?&lt;br /&gt; c)Operability: Can user operate the software without any special efforts?&lt;br /&gt; d)Attractiveness: Is the user interface good?&lt;br /&gt;It’s totally subjective in nature. Software which is very much usable for me may not be same for you. But still you can measure the attribute by measure some of its sub attributes. Like on can measure understandability by saying &lt;br /&gt;          &lt;span style="font-weight:bold;"&gt;Understandability = no of functions understood by user/ Total functions&lt;/span&gt;&lt;br /&gt;Learnabilty can be measure as how many days does it take user to be well versed with the software? In this we can quantify usability&lt;br /&gt;&lt;br /&gt;Not stretching my post more, I will stop here, will write three more quality attributes stated in ISO 9126 tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-3135035529194844614?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/3135035529194844614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/how-do-you-know-your-softwrae-is.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/3135035529194844614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/3135035529194844614'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/how-do-you-know-your-softwrae-is.html' title='How do you know your software is quality one?'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-6093778261825986166</id><published>2009-06-19T22:13:00.001-07:00</published><updated>2009-07-01T19:31:30.224-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life cycle Process'/><title type='text'>We don’t think of V Model!</title><content type='html'>I assume that readers are well aware of all other life cycle models like Water fall model, iterative and incremental model or spiral model. If not please go through my second post and then you can continue reading this.&lt;br /&gt;&lt;br /&gt;All of the above mentioned models have some thing is common and that’s test after you build. That means you never worry about testing until you reach testing phase. But the cost and effort required fixing a bug increase exponentially as we move from planning phase to testing phase. So it’s advisable that u start testing activities as soon as possible. So there came a model which runs testing activities in parallel with development activities. Like you plan acceptance tests as soon as you get user requirements or unit tests as soon as component is build.&lt;br /&gt;&lt;br /&gt;Various phases:&lt;br /&gt;V model explains relationship of each phase of development cycle to its associated testing. Now let me explain what the relation is;&lt;br /&gt;&lt;br /&gt;First of all we have requirement specification, so while finalizing requirement specifications we also finalize what all we be the acceptance test cases and perform acceptance testing as per those cases.&lt;br /&gt; &lt;br /&gt;Next we translate requirements into system specifications and define various functionality that system shall provide and performance requirements that to be met.&lt;br /&gt;So we can easily make test cases that shall be passed in order to say that system is functioning as per expectations and meeting performance requirements. So we design system test cases and perform system testing accordingly.&lt;br /&gt;&lt;br /&gt;Once we are done with system specification, we ponder upon system architecture and design. What architectures to be considered is issue of another post. (It’s not all about server client). While deciding architecture and design we from systems integration plan and interface test. After developing components in which system is decomposed, we go for integration as per the plan and test case produce while designing.&lt;br /&gt;&lt;br /&gt;Finally we decomposed our system into smaller components and start developing them, to test these individual components we write unit test cases.&lt;br /&gt;&lt;br /&gt;As soon as we are finished with development, we are also done with half of the testing work. Now we just have to test components, interfaces, and system. That’s all as we have already produced test cases for each of this things wok will be easier and testing will be more accurate and bug oriented.  &lt;br /&gt;&lt;br /&gt;Various advantages that you achieve while using V model are Minimized project risks, improved quality, minimized cost and shorter life cycle period, and effective way of communication between stakeholders.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-6093778261825986166?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/6093778261825986166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/we-dont-think-of-v-model_19.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/6093778261825986166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/6093778261825986166'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/we-dont-think-of-v-model_19.html' title='We don’t think of V Model!'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-4597222236199856201</id><published>2009-06-18T05:18:00.000-07:00</published><updated>2009-07-01T19:31:30.225-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life cycle Process'/><title type='text'>Deep into abstraction</title><content type='html'>&lt;div style="direction: ltr; text-align: justify;"&gt;Do you know why IBM USB supports any pen drive you enter in it?&lt;br /&gt;Answer is in this post¡K read on!&lt;br /&gt;&lt;br /&gt;There must be technique or method by which lower level implementation can be hidden. There must be some thing that can be used by all the pen drives you have, so that all of them can be compatible with the USB.&lt;br /&gt;&lt;br /&gt;Yes I am talking about abstraction and interfaces!&lt;br /&gt;Oh my God! Both are the same thing¡K what to worry about! Use whatever you want on the day and be happy :) Why to worry?&lt;br /&gt;&lt;br /&gt;No they are not the same; there are clear differences between these abstraction methods.&lt;br /&gt;&lt;br /&gt;Abstract classes:&lt;br /&gt;These are classes which contain variables and prototypes of the functions which are to be implemented by derived classes.&lt;br /&gt;&lt;br /&gt;Interface:&lt;br /&gt;These are collections of some functions that are to be implemented by the class which implements them.&lt;br /&gt;&lt;br /&gt;Confused! What's the difference? Here are the differences:&lt;br /&gt;Abstract class gives identity to the derived object like 'Object A is ' where as interface gives the capability or property to the object. Object B can sing or has salary.&lt;br /&gt;&lt;br /&gt;The major difference is that abstract classes can have some functions implemented while interface can not have any implemented function just prototypes. Although both them cannot be instantiated. Other difference is that you can implement abstract class that you have inherited partially but you have to implement each and every function of the interface that is&lt;br /&gt;implemented by your class.&lt;br /&gt;&lt;br /&gt;One more difference is regarding the maintainability. Later on you find that there should be some change in interface you have already implemented in 50 classes? What? Go and change in 50 classes. While if you using abstract class you have to make change only at the one place. That means one should not use interfaces at any time? No. That's not the correct thinking. Consider an example; I have an abstract class Person&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Abstract Class Person&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;       String Name;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;       String gender;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;       Int age;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;       String Occupation;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;       Int Salary;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;       String qualification;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;       String companyName;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;getName();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;getGender();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;getAge();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;getQualification();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now I decide to inherit this class in class called salaried person. And I implement this class! So far so good! Now I want to have a class Student. Student has many properties matching with salaried person and I decide to inherit the same Person class. But wait what I shall do with the extra fields and functions that are forced on me?&lt;br /&gt;&lt;br /&gt;Interface comes to my rescue. I can have an interface, interface_common, where getName().getGender() and getAge() can be put. I can create another interface interface_diff, that can have getQulification() and getSalary().&lt;br /&gt;The abstract class can implement the interface_common and the more specialized interface_diff can be implemented by the class salaried person.&lt;br /&gt;&lt;br /&gt;Hence interface has given us opportunity to reuse the same functions without have extra information loaded with our derived class. Consider two objects totally different but having single function in common. You will be clearer when to use interfaces.&lt;br /&gt;&lt;br /&gt;Now coming to our original question why IBM USB supports any pen drive you enter in it? Because there are some interface decided and every pen drive has to implement those in order to get recognized. So interface are again at your service!&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-4597222236199856201?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/4597222236199856201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/deep-into-abstraction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/4597222236199856201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/4597222236199856201'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/deep-into-abstraction.html' title='Deep into abstraction'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-296655567216463270</id><published>2009-06-17T10:08:00.000-07:00</published><updated>2009-07-01T19:31:30.225-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life cycle Process'/><title type='text'>Confusing testing techniques :(</title><content type='html'>&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 10"&gt;&lt;meta name="Originator" content="Microsoft Word 10"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CJitu%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:543642024; 	mso-list-type:hybrid; 	mso-list-template-ids:233608506 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 	{mso-level-text:"%1\)"; 	mso-level-tab-stop:.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} ol 	{margin-bottom:0in;} ul 	{margin-bottom:0in;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0in 5.4pt 0in 5.4pt; 	mso-para-margin:0in; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman";} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;There are a plenty of testing techniques ranging from ad hoc monkey testing to moral formal unit testing. White box testing, black box testing, Grey box testing and so on so forth. Being under graduate in software engineering or fresher in software industry, you may always confuse between one testing and other.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;So let’s explore some of the most confusing and interrelated terms used in testing terminology;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in; font-weight: bold;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;1)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;Sanity testing and smoke testing&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;Sanity testing is a testing technique in which you take a specialized functionality of the whole system and travel deep into that and try to find out if the that functionality is working correctly in every aspect. Actually it follows depth first approach.&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;Smoke testing is testing technique in which you just check broadly whether the system in question worth testing. The scope of the test is whole system and follows breadth first approach.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;Smoke testing is generally used in hardware testing, if hardware component produces smoke as soon as it is put in test that means that the component is not yet ready for testing and require more time. Same principle is applied to software too.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in; font-weight: bold;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;2)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;Regression testing and Retesting&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;When you fix a bug in code and you want to be sure that this fixing has not affected any other part of the program you re run all existing test case again&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;This is called regression testing.&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;Retesting is process in which we write different or more test cases for the same functionality in order to test it completely and satisfactorily after there has been testing with existing test case.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in; font-weight: bold;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;3)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;Load testing and stress testing&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;When you test a system for its robustness, giving inputs within the allowed range this is called load testing. For example if an application has to support 500 users, load testing will be done with simulating 500 users and noting the performance degradation of the application.&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;When you test a system for its robustness, giving inputs which are out of bound or beyond the scope of the system, it’s called stress testing. Like if your system supports only 100 users, and you simulate 110 users and see how the performance of the system degrades.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in; font-weight: bold;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=""&gt;4)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;Integration testing and interface testing&lt;/span&gt;&lt;!--[endif]--&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;When you combine two components that are independently developed you need to test that these two components work correctly together and perform the task assign to the integrated component in seamless manner. To test this you do integration testing.&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;When there is communication between two components, protocols and message formats are define to communicate. Interface testing confirms that the data passing from one component to another is in the correct and in specified format and follows the protocol decided upon. Whether two components perform the correct task is none of the concern of interface testing.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="font-size:100%;"&gt;Hope after reading this post your doubts, about slightly different and confusing testing techniques, may have vanished.&lt;/span&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-296655567216463270?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/296655567216463270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/confusing-testing-techniques.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/296655567216463270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/296655567216463270'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/confusing-testing-techniques.html' title='Confusing testing techniques :('/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-853364899748799376</id><published>2009-06-14T09:06:00.000-07:00</published><updated>2009-07-01T19:31:30.225-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life cycle Process'/><title type='text'>IEEE Std 12207.0</title><content type='html'>We talked about  models  in the last post,but what are the processes which are to be followed inside those models? There are various standards available and can be applied to the model as per the organisation. The most accepted and flexible standard is IEEE std 12207. It is in three parts 12207.0,12207.1 and 12207.2.&lt;br /&gt;First one discusses various life cycle process, second deals with data and metric collection during life cycle and third is to help/ guidelines for implementing the standard.&lt;br /&gt;&lt;br /&gt;We will discuss here 12207.0 std.&lt;br /&gt;These standard discusses life cycle process to be followed. It recommends total 17 processes in three categories :&lt;br /&gt;Primary life cycle processes : Acquisition, supply, development,operation and maintenance (5)&lt;br /&gt;Supporting life cycle processes :Documentation, Configuration management,verification, validation,review&amp;amp;audit,  and problem  resolution.(8)&lt;br /&gt;Organization life cycle processes: Training, management, infrastructure and  improvement.(4)&lt;br /&gt;&lt;br /&gt;These 17 process are divided into activities and these activities are divided into task.&lt;br /&gt;&lt;br /&gt;For the development phase it recommends following activities:(in brackets given the output of the activities)&lt;br /&gt;1) Project management and development plan preparation (PMP/PDP)&lt;br /&gt;2) System requirement analysis (SRD)&lt;br /&gt;3) System architecture&lt;br /&gt;4) Software requirements analysis (SRS)&lt;br /&gt;5) Software  architecture (SAD)&lt;br /&gt;6) Software designing (SDD)&lt;br /&gt;7) Code and testing (Code and executable with designer level test cases and test results)&lt;br /&gt;8) Software integration (Integrated software)&lt;br /&gt;9) Software qualification test ( Test results)&lt;br /&gt;10) System integration (Integrated system)&lt;br /&gt;11) System qualification test ( Test results)&lt;br /&gt;12) Delivery&lt;br /&gt;&lt;br /&gt;These are various activities to be performed when you are involved in development activities!!&lt;br /&gt;Of course, these are not mandatory for all systems developed and IEEE 12207.0  gives an Appendix  for guidelines to tailor this standard as per your need.&lt;br /&gt;Check out which of these activities are performed in your company and see what kind of standard does it follow(if at all it follows one :-))!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-853364899748799376?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/853364899748799376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/ieee-std-122070.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/853364899748799376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/853364899748799376'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/ieee-std-122070.html' title='IEEE Std 12207.0'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-1601317004905912639</id><published>2009-06-13T09:06:00.000-07:00</published><updated>2009-07-01T19:31:30.225-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life cycle Process'/><title type='text'>Agile Model</title><content type='html'>We all know we have some standard  traditional models that we follow when we develop any system.Water fall model, Rapid development model, incremental and iterative model , Spiral model to say some. Each model has its own advantages and suitability to particular project.&lt;br /&gt;We  follow Water fall model when we are sure that requirements are not gone to be  change, at least not frequently,Incremental and iterative model when we are not sure what user really wants and there is possibility of putting system in operation with limited functionality, Spiral when we are planning new technologies in project or risk associated with the project are high.&lt;br /&gt;&lt;br /&gt;These are all traditional methods of software life cycle. They follow a predefined path in the development task like requirements and design should  freeze once project goes for testing. Testing phase starts only after development has finished  excluding the  developer level  unit testing.&lt;br /&gt;&lt;br /&gt;Now a days systems are so much complex and huge ; so much schedule constrained that applying traditional model will not produce as per expectations. Water fall model is to rigid to incorporate changes which are now synonyms with software; Incremental and iterative model requires lot of communication between stake holders and developer that take time and remember the saying in our industry "customer wanted it yesterday".&lt;br /&gt;&lt;br /&gt;So keeping all these things into mind industry needed a model which is light weight, easily understandable and has desirable properties of existing process models.Agile was the answer!!&lt;br /&gt;&lt;br /&gt;In Agile model we focus on iterations; each iteration not more than 2-3 weeks. Iteration consists of three phases requirement collection;design; implementation; test; feedback and again requirement collection. Requirements are not very formal in  nature and  generally are  user stories(What are user stories we would talk later). After completion of each iteration team's internal meeting is conducted to track the progress and stakeholder(which is appointed by client in the organization itself) is invited for feedbacks.&lt;br /&gt;&lt;br /&gt;Agile concentrates on four major  parts of any development:&lt;br /&gt;Leadership encouraging team work, self accountability and self organization; set of best engineering practices , disciplined project management and business approch aligned with customer needs.&lt;br /&gt;Clear  advantages  of the model are that user is involved in every stage of the development and changes can be incorporated at any stage i.e flexibility. Only disadvantage is that it cannot be used when size of team is very large.&lt;br /&gt;eXtreme Programing  (XP) follows this model.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-1601317004905912639?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/1601317004905912639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/agile-model.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/1601317004905912639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/1601317004905912639'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/agile-model.html' title='Agile Model'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7018844622305267172.post-6522790857019747881</id><published>2009-06-12T09:11:00.001-07:00</published><updated>2009-07-01T19:31:30.226-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life cycle Process'/><title type='text'>Half life</title><content type='html'>&lt;p class="MsoNormal"&gt;IEEE/ACM Software engineering code of ethics says: Software engineers shall participate in lifelong learning regarding the practice of their profession……They shall continually endeavor to further their knowledge of developments in analysis, specifications, design, development, maintenance and testing of software…., together with the management of the development processes, to improve the their knowledge of relevant standards and laws governing the software and related documents.&lt;br /&gt;&lt;br /&gt;That's not just code of ethics but its a way of survival in an industry which changes at whim for better, of course. Things which were very much ahead of their time are now obsolete, things which were thought as domain of software experts are now taught in undergraduate courses. If you just pick up any software technical magazine dated 10 years back, you would be surprised to see technologies, which are considered obsolete today, mentioned on cover page.&lt;br /&gt;&lt;br /&gt;Phlliphe kruchten professor of software engineering in University of British Columbia  says that  half life of any software engineering idea is 5 years. That means what we studied five years back , half of that is, already, not of use. So we need to update ourselves.&lt;br /&gt;In any interview we face, take it granted, this question would always be asked "Which technical journal or book did you read in last six months?" And if answer is none you can imagine your chances in interview.&lt;br /&gt;&lt;br /&gt;Somewhere I read that you are what you read. So i have also started reading books, papers and technical journals. I know all you people working in MNCs are too busy to go through all these things. To provide you latest updates in our industry I have thought of this idea. I will be blogging daily and giving you relevant material on software engineering and software design.&lt;br /&gt;&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7018844622305267172-6522790857019747881?l=softwareengineeringexplored.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwareengineeringexplored.blogspot.com/feeds/6522790857019747881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/half-life.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/6522790857019747881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7018844622305267172/posts/default/6522790857019747881'/><link rel='alternate' type='text/html' href='http://softwareengineeringexplored.blogspot.com/2009/06/half-life.html' title='Half life'/><author><name>Sangar</name><uri>http://www.blogger.com/profile/01063643139786628049</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='14' height='32' src='http://4.bp.blogspot.com/_ugsZBHUZvJo/SkuYmM6-TpI/AAAAAAAAACA/Wa4kmtaayzI/S220/jjitu.jpg'/></author><thr:total>0</thr:total></entry></feed>
