Thursday, February 4, 2010

Chapter 18: Using Critical Realism in IS Research












Chapter 18: Using Critical Realism in IS Research



Sven A. Carlsson
J�nk�ping International Business School, Sweden



Copyright � 2004, Idea Group Inc. Copying or distributing in print or electronic forms without written permission of Idea Group Inc. is prohibited.




Abstract



Different strands of postmodern, poststructuralist, postrealist, and nonpositivistic approaches and theories have gained popularity in information systems (IS) research. Since most of these approaches have a flat treatment of the agency/structure dimension, focus almost exclusively on micro phenomena, and reject objectivist elements, it can be argued that they are problematic to use in IS research. An alternative approach and philosophy is critical realism, which suggests, for example, that social reality is not simply composed of agents' meanings but that there exist structural factors influencing agents' lived experiences. Critical realism starts from an ontology which identifies structures and mechanisms through which events and discourses are generated as being fundamental to the constitution of our natural and social reality. This is in direct contrast to a constructivist ontology. This chapter presents critical realism and Derek Layder's critical-realism-based adaptive theory and exemplifies how they can be used in IS research.











How to Use This Book



[ Team LiB ]









How to Use This Book


Whether you are new to process improvement, new to CMMI, or already familiar with CMMI, this book can help you understand why CMMI is the best model to use for improving your product life-cycle processes.


Readers New to Process Improvement


If you are new to process improvement or new to the CMM® concept, we suggest that you read chapter 1, "Introduction," and the case study in chapter 7 first. Chapter 1 will give you an overview of process improvement and explain what CMMI is all about. Chapter 7 will help you to see how CMMI can be used by an organization. When you read chapter 7 the first time, don't be concerned about understanding all the terminology or details. Just read it to get an overall feel for what's going on in the case study. Then, go back and read chapters 1 through 7. When you read chapter 7 again, after reading the balance of Part One, you will understand the details much better.


Next, skim Part Two to get a feel for the scope of the best practices contained in CMMI. Pay closest attention to the statement of purpose at the beginning of each section.


In Part Three, look through the references in Appendix A and select additional sources you think would be beneficial to read before moving forward with using CMMI. Read through the acronyms and glossary to become familiar with the language of CMMI. Then, go back and read the details of Part Two.



Readers Experienced with Process Improvement


If you are new to CMMI but have experience with other process-improvement models, such as the Software CMM or the Systems Engineering CM (i.e., EIA 731), you will immediately recognize many similarities.


We recommend that you read Part One to understand how CMMI is different from other process-improvement models, but you may want to read some of the sections more quickly than others. Read Part Two with an eye open for best practices you recognize from the models you have already tried. Identifying familiar material gives you a feel for what is new and what has been carried over from the model you already know.


Next, review the glossary to understand how some terminology may differ from that used in the process-improvement model you know. Many concepts will be repeated, but they may be called something different.



Readers Familiar with CMMI


If you have reviewed or used one of the CMMI models available on the SEI Web site, you will quickly recognize the CMMI concepts discussed and the best practices presented. The differences between this book and the SEI-released models are mainly found in Part One, "About CMMI."


Although the continuous and staged representations of the models' best practices are presented together in Part Two, no changes were made that affect the meaning or applicability of these best practices. In Part One, we added information about the benefits of process improvement and historical information about process-improvement models for readers new to process improvement or to the CMM® concept. We explained the vast similarities of the two representations reflected in the models and included detailed discussions of both capability levels and maturity levels and their importance in CMMI. To understand how the two representations have been formatted for Part Two, see the descriptions and illustrations of typographical conventions (Figures 2.2, 2.3 and 2.4) in chapter 2.


We also expanded the discussion of generic model components into a chapter that you will find more informative than what is found in the SEI-released models (see chapter 3). A chapter containing a case study of CMMI (chapter 7) was added to describe the real-life experience of an organization preparing to adopt CMMI.


In Part Three, "The Appendices and Glossary," we combined all terms and their definitions into the glossary, so that you can find definitions more quickly and easily. Terms are no longer addressed in a separate chapter in Part One.


As you read Part One, we recommend that you pay closest attention to chapter 3, "Process Institutionalization," and chapter 7, "CMMI Case Study: United Space Alliance, LLC." Review the format used in Part Two. This format helps you differentiate between the two representations.








    [ Team LiB ]



    The Java Sound API









    The Java Sound API


    So far, I've considered the Applet play( ) method and the more useful AudioClip class. AudioClip is probably sufficient for the straightforward playing and looping of audio, as illustrated by the SoundPlayer application of the last section.


    The Java Sound API has more extensive playback capabilities than AudioClip because it offers low-level access to, and manipulation of, audio data and the underlying machine's audio hardware and software. The API also supports audio capture and synthesis, features not found in AudioClip.


    The Sound API's power makes it complex to use, so the rest of this chapter will be given over to introducing its basic playback features for sampled audio (e.g., WAV files) and MIDI sequences. Chapter 8 will develop Sound API-based classes for loading and playing audio, which I'll use frequently in later chapters to play music and sound clips in my games. Chapter 9 is about applying audio effects to existing sampled audio and sequences using the Sound API. Chapter 10 describes various ways of synthesizing samples and sequences with the API.


    The Java Sound API has two main parts: a javax.sound.sampled package for manipulating sampled audio and javax.sound.midi for MIDI sequences. The rest of this chapter will first discuss sampled audio, followed by MIDI.


    The API has two service provider packages, javax.sound.sampled.spi and javax.sound.midi.spi, to encourage extensibility. They can be utilized to add new audio devices (e.g., new mixers, synthesizers) and formats (e.g., MP3). I won't be looking at themthis book is long enough without going off on tangents.









      Data Analysis













      Data Analysis

      For each instrument, five CFA models were fitted (null, one general trait only, uncorrelated methods only, correlated traits only, and traits-and-methods). Convergent validity, discriminant validity, and the presence and effects of method variance were evaluated following the procedures outlined by Widaman (1985) and Bagozzi and Yi (1990). All confirmatory factor analyses were performed using the EQS/Windows statistical software package (Bentler, 1995). For a full explanation of the goodness-of-fit indices used in this study, see Bollen (1989) and Bentler (pp. 92–94). Data analyses were performed using the Satorra and Bentler procedure to correct for non-normal data (Bentler, p. 47).


      The data analyses refer to various models derived from Widaman's taxonomy. These models are depicted in Figures 1 to 5. Due to space limitations, we show only the CSE in the figures (see Appendix).





      • Figure 1: Null model, CSE (Model 1);





      • Figure 2: One general trait, CSE (Model 2);





      • Figure 3: Methods only, CSE (Model 3);





      • Figure 4: Traits only, CSE (Model 4);





      • Figure 5: Multitrait-multimethod, CSE (Model 5).







      Convergent Validity


      Convergent validity was assessed in two ways. First, model 1 (null) was compared with model 4 (correlated traits) to see if the addition of traits significantly improved the fit of the model (Bagozzi & Yi, 1990, p. 554). The χ2 difference tests between model 1 and model 4 for both instruments are statistically significant (see Table 3): χ2 difference EUCSI = 6802.7, 33 df, p < .001 and χ2 difference CSE = 6512.9, 46 df, p < .001).



      Table 3: Goodness of Fit Indices for the CFA Models.




























      End User Computing Satisfaction Instrument




      X2




      (df)




      X2/df




      NFI




      NNFI




      CFI




      GFI




      AGFI




      RMSR




      Null Model



      10160.2



      276



      36.8




      Model 2



      4192.9



      253



      16.6



      .305



      .249



      .243



      .218



      .073



      .249




      Model 3



      1904.6



      253



      07.5



      .721



      .715



      .683



      .467



      .368



      .099




      Model 4



      3357.5



      243



      13.8



      .484



      .425



      .402



      .275



      .105



      .234




      Model 5



      510.9



      219



      02.3



      .929



      .936



      .944



      .868



      .819



      .062













































      Computer Self-Efficacy Instrument




      X2




      (df)




      X2/df




      NFI




      NNFI




      CFI




      GFI




      AGFI




      RMSR




      Null Model



      14233.8



      780



      18.3




      Model 2



      8554.9



      740



      11.6



      .399



      .388



      .419



      .250



      .169



      .170




      Model 3



      3591.1



      736



      04.9



      .748



      .775



      .788



      .650



      .610



      .058




      Model 4



      7720.9



      734



      10.5



      .458



      .448



      .481



      .259



      .173



      .170




      Model 5



      2066.4



      694



      02.9



      .855



      .885



      .898



      .780



      .741



      .037




      Note: Model 2—One general trait only




      Model 3—Uncorrelated methods only




      Model 4—Correlated traits only




      Model 5—Traits and methods





      Second, because convergent validity results when a trait loading on a measure is statistically significant, the trait-item loadings of model 4 were examined (Bagozzi & Yi, 1990). For each item, a statistically significant trait-item loading indicates that the trait explains a statistically significant amount of variance in the item (Bagozzi & Yi; Widaman, 1985).


      For the EUCSI, 15 of the trait-item loadings in model 4 are statistically significant at p < .001; C1 (self) and E1 (self) are statistically significant at p < .05; C2 (self), C3 (self), C4 (self), A2 (self), and T2 (self) are statistically significant at p < .01; and E2 (self) and T1 (self) are not statistically significant (p > .05). For the CSE, all trait-item loadings in model 4 are statistically significant (p < .001), with the exception of B8 (self), which is statistically significant (p < .05). Space limitations do not permit the trait-item loadings to be shown.






      Discriminant Validity


      Discriminant validity was assessed for both instruments in two ways. First, model 2 (one general trait) was compared with model 4 (correlated traits) to determine if the addition of distinct traits significantly improved the fit of the model (Schmitt & Stults, 1986; Widaman, 1985). Model 2 constrains all intertrait correlations to 1.00 while model 4 allows the intertrait correlations to be estimated. A perfect correlation between two latent variables means that it is impossible to empirically discriminate or distinguish between the variables. A significantly better fit of model 4 over model 2 suggests that the intertrait correlations are not equal to 1.00. The χ2 difference tests between model 2 and model 4 for both instruments are statistically significant (see Table 3): χ2 difference = 835.4, 10 df, p < .001 and χ2 difference CSE = 834, 6 df, p < .001.



      Second, the correlations among traits and their standard errors were examined. Discriminant validity among traits is attained when an intertrait correlation is less than 1.00 by an amount greater than twice the standard error (Bagozzi & Yi, 1990). Six of the 10 intertrait correlations in the EUCSI demonstrate discriminant validity. The exceptions are content-format, content-timeliness, accuracy-format, and format-timeliness (see Table 4). Five of the six intertrait correlations in the CSE exhibit discriminant validity, with the exception of file-advanced (see Table 4).



      Table 4: Correlations Among Traits and Standard Errors.




























      End User Computing Satisfaction Instrument (Model 3--Correlated traits)




      Accuracy




      Content




      Format




      Ease of Use




      Accuracy




      Content



      .920 (.019)




      Format



      .991 (.015)



      .993 (.017)




      Ease of Use



      .826 (.034)



      .770 (.032)



      .840 (.029)




      Timeliness



      .938 (.022)



      .996 (.015)



      .995 (.023)



      .780 (.035)




























      Computer Self-Efficacy Instrument (Model 3--Correlated traits)




      Basic Skill




      File Skill




      Advanced Skill




      Basic Skill




      File Skill



      .904 (.015)




      Advanced Skill



      .863 (.018)



      .990 (.009)




      Mainframe Skill



      .541 (.039)



      .701 (.030)



      .685 (.031)








      Method Variance


      The presence and effects of method variance were examined in five ways. First, the overall fit of model 5 (traits and methods) was examined. For the EUCSI, the goodness-of-fit indices (see Table 3) show that model 5 demonstrates an excellent fit to the data, with the exceptions that the χ2 value is statistically significant and the GFI is below 0.9. Thirteen of the 24 trait-item loadings are statistically significant at p < .001. C1, C2, C3, C4, F2, T1, and T2 (peer) and A1, A2, E1, and E2 (self) are non-significant, p > .05. All method-item loadings are statistically significant (p < .001).


      For the CSE, the goodness-of-fit indices (see Table 3) show that model 5 demonstrates an adequate fit to the data, with the exceptions that the χ2 value is statistically significant, the GFI is less than 0.9, and the AGFI is less than 0.8. All trait-item and method-item loadings are statistically significant (p < .001).


      Further, the square of the trait-item and method-item loadings is the proportion of the item variance (R2) accounted for by the trait and by the method. The R2 value can be used to estimate the reliability of each item, with R2 values above 0.50 suggesting acceptable reliability (Bollen, 1989). However, Bagozzi and Yi (1990) used a more relaxed criterion for reliability, stating that if a loading is greater than twice the value of its standard error, then it is statistically significant, and the variance explained by the trait for that item is statistically significant.


      For the EUCSI, the statistically significant trait-item and method-item loadings demonstrate reliability using Bagozzi and Yi's (1990) criterion. No trait-item loadings, but all method-item loadings, demonstrate reliability using Bollen's (1989) criterion.


      For the CSE, all trait-item and method-item loadings demonstrate reliability using Bagozzi and Yi's (1990) criterion. Using Bollen's (1989) criterion, two trait-item loadings and 18 method-item loadings demonstrate reliability.



      Second, model 3 (uncorrelated methods) was compared with model 1 (null) to determine if the addition of the two method factors significantly improved the fit of the model. The χ2 difference tests between model 3 and model 1 for both instruments are statistically significant (see Table 3): χ2 difference EUCSI = 8255.6, 23 df, p < .001 and χ2 difference CSE = 10642.7, 44 df, p < .001.



      Third, model 4 (correlated traits) was compared to model 5 (traits and methods) to determine if the addition of the method factors significantly improved the fit of the model (Widaman, 1985). The χ2 difference tests between model 4 and model 5 for both instruments are statistically significant (see Table 3): χ2 difference EUCSI = 2846.6, 24 df, p < .001 and χ2 difference CSE = 5654.5, 40 df, p < .001.



      Fourth, the specific effects of the method factor were assessed by examining the statistical significance of the individual method-item loadings in model 3 (Bagozzi & Yi, 1990). All individual method-item loadings in model 3 for both instruments are statistically significant at p < .001.



      Fifth, CFA enables the variance of the model to be partitioned between the variance attributable to trait, to method, and to error. A comparison of the relative amounts of variance explained suggests the relative importance of method variance in the EUCSI and CSE data sets. The five traits of the EUCSI account for 6.8% of the variance and the two methods explain 68.3% of the variance, with the remaining 24.9% of the variance attributable to error. The four traits of the CSE account for 22.7% of the variance and the two methods explain 41.1% of the variance, with the remaining 36.2% of the variance attributable to error.












      Recipe 8.2 Making a Web Form Print-Ready











       < Day Day Up > 







      Recipe 8.2 Making a Web Form Print-Ready







      Problem





      You need to have a form that users can

      fill out online, or that they can print and then fill out offline, as

      shown in Figure 8-1.







      Figure 8-1. An online form











      Solution





      First, create a print media style sheet and a

      class selector that transforms the

      form elements so that they display black text and

      feature a one-pixel border on the bottom. For example, the following

      HTML code for an input text element:





      <label for="fname">First Name</label>

      <input class="fillout" name="fname" type="text" id="fname" />







      requires the following CSS rule:





      <style type="text/css" media="print ">

      .fillout {

      color: black;

      border-width: 0;

      border: 1px solid #000;

      width: 300pt;

      }

      </style>







      For drop-down menus, hide the

      select element altogether and add some additional

      markup to help produce the bottom border:





      <label for="bitem">Breakfast Item</label>

      <select name="bitem" size="1">

      <option selected="selected">Select</option>

      <option>Milk</option>

      <option>Eggs</option>

      <option>Orange Juice</option>

      <option>Newspaper</option>

      </select><span class="postselect"> </span>







      Then, in the CSS rules, convert the inline span

      element to a block element. This enables you to

      set the width of the span element and places the

      border at the bottom to equal that of the input

      elements in the preceding CSS rule:





      <style type="text/css" media="print">

      select {

      display: none;

      }

      .postselect {

      display: block;

      width: 300pt;

      height: 1em;

      border: none;

      border-bottom: 1px solid #000;

      }

      </style>







      For elements such as a Submit button, which can't be

      used on the printed page, set the display property

      to none. You can see the finished product in Figure 8-2.







      Figure 8-2. The same form primed for printing











      Discussion





      Lines on an order form tell users they can fill out the form. By

      using the border property, you can easily

      create these lines in a browser, making web forms useful both online

      and offline.





      For select elements, the workaround is

      somewhat of a hack that involves interfering with the ideal semantic

      markup; it still works and is valid HTML. Place a

      span element after the select element:





      <select name="bitem" size="1">

      <option selected="selected">Select</option>

      <option>Milk</option>

      <option>Eggs</option>

      <option>Orange Juice</option>

      <option>Newspaper</option>

      </select>

      <span class="postselect"> </span>







      Then set the select element to disappear:





      select {

      display: none;

      }







      Next, set the span element to display as a block

      to enable the width and height properties. With those width and

      height properties set, the bottom border can be placed to match the

      rest of the form elements:





      .postselect {

      display: block;

      width: 300pt;

      height: 1em;

      border: none;

      border-bottom: 1px solid #000;

      }







      As browsers implement attribute selectors from the CSS specification,

      styling forms for print becomes easier. Currently, the only browsers

      that support attribute selectors are Netscape Navigator

      6+ and Opera 5+. When you use attribute selectors,

      it's easier to distinguish which

      form elements should be stylized than it is when

      you insert class attributes and their respective values in the

      markup.





      In the following code, the first CSS rule applies only to

      input elements for text, while the second rule

      hides the Submit button and the Select drop box:





      input[type="text"] {

      color: black;

      border-width: 0;

      border: 1px solid #000;

      }

      input[type="submit"], select {

      display: none;

      }







      Once your form is ready to be printed, be sure to include

      instructions on how users should handle the printed form. For

      example, if you want users to mail the form, add a mailing address to

      the page on which the form is printed.









      See Also





      Attribute selector documentation in the W3C specification at

      http://www.w3.org/TR/CSS21/selector.html#attribute-selectors;

      HTML 4.01 specification about the label tag at http://www.w3.org/TR/html401/interact/forms.html#edef-LABEL.



















         < Day Day Up > 



        Section 6.3. Methods and Parentheses








        6.3. Methods and Parentheses


        Ruby allows parentheses to be omitted from most method
        invocations. In simple cases, this results in clean-looking code. In
        complex cases, however, it causes syntactic ambiguities and confusing
        corner cases. We'll consider these in the sections that follow.



        6.3.1. Optional Parentheses


        Parentheses are omitted from method invocations in many common Ruby
        idioms. The following two lines of code, for example, are
        equivalent:


        puts "Hello World"
        puts("Hello World")



        In the first line, puts looks like a keyword,
        statement, or command built in to the language. The equivalent second
        line demonstrates that it is simply the invocation of a global method,
        with the parentheses omitted. Although the second form is clearer, the
        first form is more concise, more commonly used, and arguably more
        natural.


        Next, consider this code:


        greeting = "Hello"
        size = greeting.length



        If you are accustomed to other object-oriented languages, you may
        think that length is a property, field, or variable
        of string objects. Ruby is strongly object oriented, however, and its
        objects are fully encapsulated; the only way to interact with them is by
        invoking their methods. In this code, greeting.length
        is a method invocation. The length method expects no
        arguments and is invoked without parentheses. The following code is equivalent:


        size = greeting.length()



        Including the optional parentheses emphasizes that a
        method invocation is occurring. Omitting the parentheses in
        method invocations with no arguments gives the illusion of property
        access, and is a very common practice.


        Parentheses are very commonly omitted when there are zero or one
        arguments to the invoked method. Although it is less common, the
        parentheses may be omitted even when there are multiple arguments, as in
        the following code:


        x = 3              # x is a number
        x.between? 1,5 # same as x.between?(1,5)



        Parentheses may also be omitted around the parameter list in
        method definitions, though it is hard to argue that this makes your code
        clearer or more readable. The following code, for example, defines a
        method that returns the sum of its arguments:


        def sum x, y
        x+y
        end





        6.3.2. Required Parentheses


        Some code is ambiguous if the parentheses are omitted, and here
        Ruby requires that you include them. The most common case is nested
        method invocations of the form f g x,
        y
        . In Ruby, invocations of that form mean f(g(x,y)). Ruby 1.8 issues a warning, however, because the code could also be
        interpreted as f(g(x),y). The warning has been
        removed in Ruby 1.9. The following code, using the
        sum method defined above, prints
        4, but issues a warning in Ruby 1.8:


        puts sum 2, 2



        To remove the warning, rewrite the code with parentheses around
        the arguments:


        puts sum(2,2)



        Note that using parentheses around the outer method invocation
        does not resolve the ambiguity:


        puts(sum 2,2)   # Does this mean puts(sum(2,2)) or puts(sum(2), 2)?



        An expression involving nested function calls is only ambiguous
        when there is more than one argument. The Ruby interpreter can only
        interpret the following code in one way:


        puts factorial x   # This can only mean puts(factorial(x))



        Despite the lack of ambiguity here, Ruby 1.8 still issues a
        warning if you omit the parentheses around the
        x.


        Sometimes omitting parentheses is a true syntax error rather than a simple warning. The following
        expressions, for example, are completely ambiguous without parentheses,
        and Ruby doesn't even attempt to guess what you mean:


        puts 4, sum 2,2   # Error: does the second comma go with the 1st or 2nd method?
        [sum 2,2] # Error: two array elements or one?





        There is another wrinkle that arises from the fact that
        parentheses are optional. When you do use
        parentheses in a method invocation, the opening parenthesis
        must immediately follow the method name, with no
        intervening space. This is because parentheses do double-duty: they can
        be used around an argument list in a method invocation, and they can be
        used for grouping expressions. Consider the following two expressions,
        which differ only by a single space:


        square(2+2)*2    # square(4)*2 = 16*2 = 32
        square (2+2)*2 # square(4*2) = square(8) = 64



        In the first expression, the parentheses represent method
        invocation. In the second, they represent expression grouping. To reduce
        the potential for confusion, you should always use parentheses around a
        method invocation if any of the arguments use parentheses. The second expression would
        be written more clearly as:


        square((2+2)*2)



        We'll end this discussion of parentheses with one final twist.
        Recall that the following expression is ambiguous and causes a
        warning:


        puts(sum 2,2)   # Does this mean puts(sum(2,2)) or puts(sum(2), 2)?



        The best way to resolve this ambiguity is to put parentheses
        around the arguments to the sum method. Another way
        is to add a space between puts and the opening
        parenthesis:


        puts (sum 2,2)   



        Adding the space converts the method invocation parentheses into
        expression grouping parentheses. Because these parentheses group a
        subexpression, the comma can no longer be interpreted as an argument
        delimiter for the puts invocation.










        Section 1.5. Summary










        1.5. Summary


        With CSS, it is possible to completely change the way elements are presented by a user agent. This can be executed at a basic level with the display property, and in a different way by associating style sheets with a document. The user will never know whether this is done via an external or embedded style sheet, or even with an inline style. The real importance of external style sheets is the way in which they allow authors to put all of a site's presentation information in one place, and point all of the documents to that place. This not only makes site updates and maintenance a breeze, but it helps to save bandwidth since all of the presentation is removed from documents.


        To make the most of the power of CSS, authors need to know how to associate a set of styles with the elements in a document. To fully understand how CSS can do all of this, authors need a firm grasp of the way CSS selects pieces of a document for styling, which is the subject of the next chapter.