Tuesday, July 31, 2007

Control Structures (Part 3)-- Perl Study Notes

Control Structures (Part 3)-- Perl Study Notes

  Operator syntax
    if ($expression)
    {
    ....
    }
    elsif ($expression)
    {
    ...
    }
    else
    {
    ...
    }
   
    unless ($expression)
    {
    ...
    }
   
    while ($expression)
    {
    ...
    }
   
    until ($expression)
    {
    ...
    } 
   
    do
    {
    ...
    }  while ($expression)
   
    do
    {
    ...
    }  until ($expression)
   
    for($initial_exp1;$test_exp;$reinit_exp)
    {
    ...
    } 
   
    foreach $value (@list)
    {
    ...
    } # $value get each element in the @list
   
    foreach (@list)
    {
    ...
    } #$_ get each element in the @list
 
  How to populate true or false in Perl
    a. convert the expression to string
    b. if the string is empty or "0", it returns false else true
    "0" #false
    0 #false
    "00" #true
    undef #false
    1 #true
 
  last: to exit from the loop
  while (something) {
      something;
      something;
      something;
      if (somecondition) {
        somethingorother;
        somethingorother;
        last; # break out of the while loop
        }
      morethings;
      morethings;
  }
  # last comes here 
 
  next: to exit current loop and continue the next round loop
  while (something) {
      something;
      something;
      something;
      if (somecondition) {
        somethingorother;
        somethingorother;
        next; # break out of the while loop
        }
      morethings;
      morethings;
     # next comes here
  }
  
   redo: to jump to the beginning of the current block(without reevaluating the control expression)
   while (somecondition) {
      # redo comes here without evaluate the somecondition
      something;
      something;
      something;
      if (somecondition) {
        somethingorother;
        somethingorother;
        redo; # break out of the while loop
        }
      morethings;
      morethings;

   }   
   The follow is another loop structure without any while/for/foreach/until statement
   {
     startstuff;
     startstuff;
     startstuff;
     if (somecondition) {
     last;
     }
     laterstuff;
     laterstuff;
     laterstuff;
     redo;
    } # this block will be looped until somecondition is true
   
    Pls note that last/next/redo can not be used in the do{}while/until statement
   
    Expression Modifiers
    some_expression if control_expression
    this is equivalent to
    if(control_expression)
    {
    some_expression
    }
   
    exp2 unless exp1; # like : unless(exp1){exp2;}
    exp2 while exp1; #like: while(exp1){exp2;}
    exp2 until exp1; #like: until(exp1){exp2;}
   
    && and || Control Structures
    this && that; # equivalent to that if this
    this || that; # equivalent to that unless this

Regular Expression (Part 5)-- Perl Study Notes

Regular Expression (Part 5)-- Perl Study Notes

Single-Character Patterns
/a./; #. matches any characters except \n. /a./ matches any two-letter sequence that starts with a but except a\n
/a+/; #+ matches one or more of the immediately previous character, such as lookaab,aaabc but no lookup
/a*/; #* matches zero or more of the immediately previous character, such abs, asdic
/a?/; #? matches zero or one of the immediately previous character, such as abc,aabc
/[abcde]/; #match a string containing any one of the letters
/[^0-9]/; #match any single non-digit
/[^aeiouAEIOU]/; #match any single non-vowel
/[^/^]/; #match any character except an up-arrow
/[\da-fA-F]/; #match one hex digit
/\d/ # equivalent to /[0-9]/
/\D/ # equivalent to /[^0-9]/
/\w/ # equivalent to /[0-9a-zA-Z]/
/\W/ # equivalent to /[^0-9a-zA-Z]/
/\s/ #equivalent to /[\r\t\n\f]
/\S/ $equivalent to /[^\r\t\n\f]

Group Patterns
/x+box?/; # + means one or more of the immediately previous character and the ? means zero or one of the immediately previous character.

# the above pattern match the string "xbox","xxbo","xxbox"
/x{1,5}/; # match any string with one

Parentheses as memory
/fred(.)barney\1/; # \1 means the first parenthesized part of the regular expression.
# if matchs fredybarneyy but not fredybarneyx
/a(.)b(.)c\2d\1/; # matchs azbycydz but not abbccd
/a(.*)b\1c/; #match aFREDbFredC not axxbxxxc

Alternation Patterns
/songbule/; #matchs either song or blue

Anchoring Patterns
/fred\b/; # matches fred, but not frederick
/\bmo/; #matches moe but not emo
/\bFred\b/; #matchs Fred but not Frederick or alFred
/\b\+\b/; #matchs "x+y" but not "++" or " + "
/abc\bdef/; #never matchs
/\bFred\B/; #matchs "Frederick" but not "Fred Flintstone"
/^Fred/; #matchs Fredabc but not aFred
/Fred$/; #matchs abcFred but not Freda

Other operators
~/^he/; ~ to select a different target, for example
$a="hello world";
$a=~/^he/; #true, but $a still ="hello world"
$a=~/(.)\1/; #true, but $a still ="hello world"
if ($a=~/(.)\1/) #true
{
# put statement here
}

/abc/i; # i to ignore the case. it matches abs, Abs, ABC

/^\/usr\/etc/; # Using standard slash delimiter. It matches the string containing /urs/etc
m@^/usr/etc@; #using @ for a delimiter. It also matches the string /usr/etc
m#^/usr/etc#; #using # for a delimiter. It also matches the string /usr/etc
pls note that the delimiter must be any nonalphanumeric character

$what = "[box]"; #\Q will ignore any specify character in the regular expression
foreach (qw(in[box] out[box] white[sox])) {
if (/\Q$what\E/) {
print "$_ matched!\n";
}
}

Ready-Only Variable
# variable $1,$2,$3 and so on are set to the same values as \1,\2,\3, and so on
$_="this is a test";
if (/(\w+)\W+\(\w+)/)
{
print "$1\n"; # $1 = this
print "$2\n"; # $2 =is
}

#$& is the part of the string that matched the regular expression
#$` is the part of the string before the part that matched
#$' is the part of the string after the part that matched

Substitutions
the syntax of the substitutions is
s/old-regex/new-string/
If you want to the replacement to operate on all possible matches instead of just the first match, append a g to the substitution

$_="foot fool buffoon";
s/oo/bar/; # $_=fbart fool buffoon;
$_="foot fool buffoon";
s/oo/bar/g; # $_=fbart fbarl buffoon;
$_ = "this is a test";
s/(\w+)/<$1>/g; # $_ is now "<this> <is> <a> <test>"

$d{"abc"}=123;
$d{"def"}=456;
$d{"ghk"}=789;

foreach (keys %d)
{
print "$d{$_}\n";
$d{$_}=~s/^/x /; #prepend "x " to hash element
print "$d{$_}\n";
}
#we can see that the original string is changed after using regular expression substitutions.

#example for \G usage

$what = "[box]";

foreach (qw(in[box] out[box] white[sox]))

{ if (/\Q$what\E/) { # equivalent to match the regular expression of /\[box\]/

print "$_ matched!\n";

}

Monday, July 30, 2007

Basic I/O (Part 4)-- Perl Study Notes

Basic I/O (Part 4)-- Perl Study Notes

<STDIN>
while (defined($line = <STDIN>))
{
... # process $line here
}

Diamond Operator
a. The diamond operator gets its data form file or files specified on the command line that invoked the Perl program

for example, we have a pl file readfile.pl as below
#!/usr/bin/perl
while (<>)
{
print $_;
}
run the perl like this
readfile.pl file1 file2 file3
the diamond operator reads each line of file 1 and file2 and file3
b. In a scalar context, it returns a single line. In a list/array context, it returns all lines.
c. The daimond operator gets the files form the @ARGV. @ARGV is initiated by the parameters of the command line.The parameter can be assigned in the program itsefl. Here is the example,

#!/usr/bin/perl
@ARGV=qw(file1,file2,file3)
while (<>)
{
print $_;
}

<STDOUT>
print (2+3),"hello"; # wrong! prints 5, ignores "hello"
print ((2+3),"hello"); # right, prints 5hello
print 2+3,"hello"; # also right, prints 5hello


Filehanlers
open (FILEHANDLE,$filewanttoopen); #open external file or device $filewanttoopen, return true if success and false if fail
open FILEHANDLE, ">$filewanttowrite); # open the file $filewanttowrite to write, return true if success and false if fail
open FILEHANDLE, ">>$filewanttoappend); # open the file $filewanttoappend for appending, return true if success and false if fail
close(FILEHANDLE); #close the FILEHANDLER

Pls note reopen the FILEHANDLE can close it automatically.


die and warn
die("This is the error message!!!"); # print out "This is the error message!!!" followed the program name and line number and exit the perl.
die("This is the error message!!!\n"); # just print out "This is the error message!!!" followed the program name and line number and exit the perl.
warn("This is the error message!!!"); # just print out the string "This is the error message!!!" without terminate the perl

#!c:\perl\bin\perl.exe
# here is the example to copy file $a to $b
open(IN,$a) die "cannot open $a for reading: $!";
open(OUT,">$b") die "cannot create $b: $!";
while () { # read a line from file $a into $_
print OUT $_; # print that line to file $b
}
close(IN) die "can't close $a: $!";
close(OUT) die "can't close $b: $!";


File tests operator (Most used)
-e $filename; return true if $filename is existing while false if not.
-r $filename; return true if $filename is readable while false if not.
-w $filename; return true if $filename is writable while false if not.
-x $filename; return true if $filename is executable while false if not.
-s $filename; return size of the $filename if $filename is existing.
-M $filename; return days since the $filename is last modified.
-A $filename; return days since the $filename is last accessed.
-C $filename; return days since the inode of the $filename changes.

Thursday, July 26, 2007

Data Type (Part 2 - Array/Hash Variable)-- Perl Study Notes


Data Type (Part 2 - Array/Hash Variable)-- Perl Study Notes 

Array Variable
 Array operator: ..
    (1 .. 5) # same as (1,2,3,4,5)
    (1.1 ..5.1) #same as (1.1,2.1,3.1,4.1,5.1)
    (3.2 .. 5.1) #same as (3.2,4.2)
    Notes: .. operator create a list of values starting at the left scalar value up through the right scalar value incrementing by one each time

           Having the right scalar less than the left scalar results in an empty list
           If the final value is not a whole number of steps above the initial value, the list stops just before the next value would have been outside the range,just as the above sample

           Only effective to the number lists
 
 Array example,
  @fred=qw(4 5 6);
  @fred=(4,5,6);
  $a=@fred; # $a=3, If one array is assigned to a scalar variable, the number assigned is the length of the array.
  ($a)=@fred; $a=4, only assign the first value to the $a.
  @fred=("fred", "wilma", "pebbles", "dino");
  $fred[-1]; # return "dino"
  $#fred;  #return 3. $#array_name returns the last index of the array
 
Hash Variable
 Hash example,
  $fred{"aaa"} = "bbb"; # creates key "aaa", value "bbb"
  $fred{234.5} = 456.7; # creates key "234.5", value 456.7
  if %hash {...} # in the scalar context, merly using %hash will reveal whether the hash is empty or not

 Hash Slices
  @score{"fred","barney","dino"} = (205,195,30);
  @players = qw(fred barney dino);
   print "scores are: @score{@players}\n"; # scores are: 205 195 30

Wednesday, July 25, 2007

Data Type (Part 1 - Scalar Variable) -- Perl Study Notes

Data Type (Part 1- Scalar Variable)

Scalar Variable

number: including the integer and float number. all number will be converted into double in internal perl
1000
10.24
1.25e45
012 #Octal number
0x12 #Hex number

number operator: +-*/%

number logical comparion: > < == >= <= !=

string: single-quoted strings
'hello' #hello
'don\'t' #don't
'silly\\me' #silly\me
'hello\n' #hello\n
'hello $name' # hello $name
double-quoted strings
"hello world\n" # hello world and new line
"coke\tsprite" #coke+a tab+sprite
"my name is $name" #my name is zhengol, if $name="zhengol"

string operator:. x
"abc"."def" #abcdef
"abc"x4 #abcabcabc
(3+2)x5 #55555

string logical comparaion: eq lt gt ne le ge

Notes: the numeric and string comparions are roughly oppposite of what they are for the Unix which uses -eq for string comparison and == for numeric comparison

(To be continued)

Friday, July 13, 2007

How to export/import schema in ClearQuest (Part 2)

How to export/import schema in ClearQuest (Part 1)

How to decrease the schema version

In the part 1, we have mentioned usually we use the testing env to debug the schema and use exportschema/importschema or exportintegration/importschema to update the schema.

Using exportschema/importschema command, we can export/import all versions. Using exportintegration/importintegration command, we can export/import the partial versions but constrained by that the schema must exist in target schema repository.

Sometimes the schema we debugged in the testing env need to be check-out/check-in many times. It makes the version number large. If the schema existed in our production schema, we can use exportintegration/importintegration command to import the schema with only the version in the production env to increase by 1. For example,

We have the schema gqasch in testing env with version 40 while the version in production is 1. After we use the exportintegration/importintegration, the schema version in production is increased by 1, it becomes to 2.

If the schema does not exist in production env, and the schema version in testing env is 40 for example. Most of us can not bear the version in production is also 40 after using importschema. Hence we can not use importschema/importintegration command to cater for such case. Following steps is for such scenario,

Solution 1,
We assumed that the schema gqasch with version 40 and no such schema in production env. Here are the steps,

    1. export schema using exportschema command
    2. cqload exportschema -dbset cqms.testingclan.site admin 123456 gqasch c:\temp\abc.txt

    b. import schema using importschema command

      cqload importschema –dbset cqms.productclan.site admin 345678 c:\temp\abc.txt

    c. delete the schema version

      In the ClearQuest designer, delete the schema version from 2 to 40

    d. export schema using exportintegration command

      cqload exportintegration –dbset cqms.testingclan.site admin 123456 gqasch 2 39 “” c:\temp\abc.txt

    e. import schema using importintegration command

      cqload importintegration –dbset cqms.productclan.site admin 345678 gqasch “” “testing usage” 40 c:\temp\abc.txt “”

After all above steps done, the schema version of gqasch in production env is 2.


Solution 2:

    1. export schema using exportschema command
    2. cqload exportschema -dbset cqms.testingclan.site admin 123456 gqasch c:\temp\abc.txt

    b. import schema using importschema command

      cqload importschema –dbset cqms.productclan.site admin 345678 c:\temp\abc.txt

    c. using cloneschema to clone the scheme gqasch with another name

      The syntax of cloneschema is,

      installutil clonescheam dbsetname cq_login cq_password from_schema_name from_schema_rev to_schema_name to_schema_description

dbsetname is the name of the schema repository

      from_schema_name is the schema name which you want to clone form
      from_schema_rev is the version you want to clone
      to_schema_name is the schema name which you want to clone to

      Now we want to clone all version of gqasch to gqasch1. Gqasch1 is not existing in the production env. Here is the command line

      installutil cloneschema cqms.productclan.site zhengol 3398810 gqasch 40 gqasch1 “copy from gqasch”

      After command exits successfully, the schema gqasch1 is created with version 1. you can change the to_schema_name with a meaningful name. If you still want to use the gqasch, pls precede step d

    d. Delete the whole schema gqasch in the ClearQuest designer.
    e. Using the clone schema again to change back the schema name

      installutil cloneschema cqms.productclan.site zhengol 3398810 gqasch1 1 gqasch “copy back from gqasch”

    f. Delete the schema gqasch1 in the ClearQuest designer

After all above steps done, you can find the schema gqasch with version 1.

Wednesday, July 11, 2007

How to export/import schema in ClearQuest (Part 1)

How to export/import schema in ClearQuest (Part 1)

1. Import schema to one schema repository which the schema is not existing

a. export the schema using the following command.
cqload exportschema –dbset dbsetname admin_user pwd schema_name exportpath

dbsetname is the name of the schema repository. You can find the dbset name under clearquest maintenance tool

schema_name is the name of the schema which you want to export. In clearquest, the schema repository composed of multiple schema which define the different entiry/fields/action/flow

Here is the example to export the schema gqasch from the schema repository of cqms. testingclan.site with admin,
cqload exportschema –dbset cqms.testingclan.site admin 123456 gqasch c:\temp\schemaexport.txt

After run the command, you can find the whole schema file under c:\temp

b. Import the schema using the following command.
cqload importschema –dbset dbsetname admin_user pwd importfilepath
dbsetname is the same meaning as that in exportschema command. In the importschema command, no need to specify the schema name like exportschema since the name is in the export file

Here is the example to import above schema to the repository of cqms.productclan.site with user admin,
cqload importschema –dbset cqms. productclan.site admin 345678 c:\temp\schemaexport.txt

After import ,you can find the schema gqasch in the ClearQuest designer with the same version as the cqms.productclan.site.

Pls note that if the target schema repository has the schema named gqasch, the import command will fail

2. Import schema to one schema repository which the schema is existing already
In the SDLC, we should setup multiple env for our products for different usage. The production env is for end-user while the testing env is for the enhancement/bugfix before migration to the production for example. Here we assume that cqms. productclan.site is our production env and cqms.testingclan.site is our testing env. After the above export/import actions, each schema repository contains the schema gqasch with version 9.
The following steps is to show how to apply the updated schema to the production env after gqasch version 12 (after multiple check-out/check-in) is ready in testing env.

1. export the latest version of gqasch
Since the schema gqasch exists in the product env(cqms.productclan.site) already, we need use the exportintegration to export the schema.

The syntax of the command is,
cqload exportintegration –dbset dbset admin_user pwd schema_name begin_rev end_rev record_type_to_rename schema_pathname

dbset, admin_user, schema_name has the same meaning as mentioned above.
begin_rev, end_rev means the versions to be exported. If begin_rev is 9 and
env_rev 10, it means export the version 9 and 10 of schema_name
record_type_to_rename is always set "" although it will be used sometimes

Now let’s export the latest schema gqasch 12 from testing env using following command,

cqload exportintegration –dbset cqms.testingclan.site admin 123456 gqasch 12 12 "" c:\temp\updatedschema.txt

Pls be noted the parameter of begin_rev and end_rev is set to 12 12 instead of 9 12.

We can find the updated schema under c:\temp

2. import the updated version of gqasch
The following steps are to show how to import the schema to the production env(cqms.productclan.site)

Using the importintegration to import the updated schema.
The syntax of importintegration is
cqload importintegration –dbset dbset admin_user pwd schema_name new_record_type_name integration_name integration_version schema_pathname formname

Here is the command to import the schema to production clan
cqload importintegration –dbset cqms.productclan.site admin 345678 gqasch "" "comment of the schema, just description" 12 c:\temp\updatedschema.txt

One thing should be noted that after import, the version of the schema gqasch is 10 intead of 12.

Export/import schema is frequently used in the schema upgrade. Here is the summary of exportschema/importschema and exportintegration/importintegration usage
a. exportschema/importschema is to export/import the whole schema with all version from the original to the target schema repository. The schema name and the version are same in both repository.
b. Importintegration/exportintegration is to export/import partial version from the original to the target schema repository.
c. Command cqload importschema fails if the schema name is existing in the target schema repository. Cqload importintegration fails if the schema name is not existing in the target schema repository.
d. The version in target repository is same as the exported schema after using importschema. The version in target repository is increase by 1 after using importintegration regardless of the version of exported schema.


To Be Continued

Saturday, July 7, 2007

3个月大的笑笑


笑笑今天满3个月了。 闺女的身体发育很好,可为什么总觉得怎么才3个月啊! 照顾小孩真是好累,每天6点小家伙准时起床,她不睡别人都不能睡,早早的她妈就要抱着出去晒太阳.白天睡觉基本靠抱,小家伙长的越来越胖,大家伙们可是越来越瘦。不过还是那就话,小孩子一半是魔鬼一半是天使。现在就来看看我们家的小天使。


这里是这三个月来的一些照片。

小家伙出生时的身份证。三个月前第一次见到她,除了不可思议之外,就只剩下心情激动了。




我见过的最漂亮的新生儿



太阳晒的很舒服,打个呵欠先



我最喜欢的照片。媳妇偷拍的




还没有习惯洗澡




满月了,我们也要有一把长命百岁锁





聪明的一休



3个月了,抬头对笑笑来说是小case了

Friday, July 6, 2007

How to send mail in local desktop


How to send mail in local desktop

Sometimes we may need/must send mail from our scripts/program. In some case, we can use the packages or functions supplied by software vendor, Perl for example. But without the specific env, nothing can be done. The following solution is to use the 3rd tool “blat” to implement the mail-send function with any coding env, Perl/C++/WSH and whatever.

With the existing SMTP server
1. Install the blat.exe
As mentioned above, we need to first download the blat first. You can find the installation file as the blow link.
http://downloads.sourceforge.net/blat/blat262.full.zip?modtime=1175256820&big_mirror=0

You can find the syntax here
http://www.blat.net/syntax/syntax.html

2. After finish the tool setup, we need to configuration the tool env. Using the follow command line to specify the SMTP server and the sender’s mail address

Blat.exe –install SMTP-server sender-address
SMTP-server: the SMTP server name. 
sender-address: it will be showed in the sender field. Any well-formatted address can be designate here. Pls be noted that the address can not be used to receive mail since it is just a dummy one.

After setup, you can test it using below command
Blat.exe body-file-name –to your-mail-address –subject mail-subject
body-file-name: one file which contains the mail body

Cheers if you receive the mail ~~.

3. Execute the command in your script/program.
#here is the Perl code sample
#!C:\perl\perl.exe
# separate the mail address with ‘,’
$maillist= "testing@company.com";
$mailsubject= "Testing Message";
$mailbody="mailbody.log";
SendMail ($mailsubject,$ mailbody)

sub SendCQMail
{
 #$_[0] is the mail subject
 #s_[1] is the mail body. It is the contend of the importlog or exportlog
$cmdresult=`C:\\Blat250\\full\\blat.exe "$_[1]" -to $maillist -subject "$_[0]"`;
 print $cmdresult;
        }


'Here is the VBS sample
mailSub="Testing _Message"
mailaddress=" testing@company.com"
mailbody="mailbody.log"
SendMail mailbody,mailaddress,mailSub

Public Sub SendMail(body,mailid,subject)
  command="C:\Blat250\full\blat.exe " & body & " -to " & mailid & " -subject " & subject
  ExeCommand command 
End Sub

' The function is to execute the shell command and return the result
Public Function ExeCommand(commandline)
  On Error Resume next
   Set WshSheell=CreateObject("WScript.Shell")
   Set WshScriptExec=WshSheell.Exec(commandline)
   Do While True
      If WshScriptExec.StdOut.AtEndOfLine Then
       Exit Do
      Else
       ExeCommand=WshScriptExec.StdOut.ReadAll
      End If
   Loop
   Set WshScriptExec=Nothing
   Set WshSheell=Nothing
End Function

Without the existing SMTP server
As described above, we need to assign the SMTP server before using the blat.exe. The following example is to show how to setup one SMTP server in the local desktop.

1. Install the IIS component in local desktop.
     You can install the service under Control Panel->Add or Remove Programs->Add New Programs-> Add/Remove Windows Components->Internet Information Service

2.  Configure SMTP server
     Go to Control Panel->Administrative Tools->Internet Information Services, open the properties of Default SMTP Virtual Server.

     Click the Access Tab

  1. Authentication setting: Check the Anonymous access option
  2. Connection: Check the All except the list below
  3. Relay: Check the All except the list below

3. Follow the above instructions of With the existing SMTP server and just point to the SMTP server to local in the blat.exe –install

That’s it. Cheers~~

Listening Material



US President George W Bush has intervened to prevent Lewis Libby, a convicted former vice-presidential aide, from serving a prison term.

President Bush described as "excessive" the 30-month sentence Libby was facing for obstructing an inquiry into the leaking of a CIA agent's name.

Though no longer required to go to jail, Libby is still due to serve a period of probation and pay a fine.
A leading Democratic politician said Mr Bush's decision was "disgraceful".
History will judge the president "harshly" for using his power to benefit his own Vice President's chief of staff, Harry Reid, the leading Democrat in the US Senate, said.

Lewis Libby, also known by his nickname, "Scooter" Libby, was found guilty in March of perjury and obstructing justice in a case connected to Washington's decision to invade Iraq.

His trial saw the White House accused of having illegally made public the identity of a serving CIA agent, Valerie Plame, in an apparent effort to embarrass her husband.

Convict (vt,n): 犯人,定罪
Obstruct (vt): 阻碍,妨碍      
Perjury (n): 撒谎
To be found guilty of sth



Wednesday, July 4, 2007

CMMI - Level 2 - Requirement Management Part1

CMMI – Level 2 – Requirement Management   Part1

Process Areas in the Level 2 - Managed

    • Requirement Management
    • Project Planning
    • Project Monitoring and Control
    • Supplier Agreement Management
    • Measurement and Analysis
    • Process and Product Quality Assurance
    • Configuration Management

PA Requirement Management

Specific Goal:
SG1 Manage Requirement

Specific Practices:
SP 1.1 Obtain an understanding of Requirements (a stage of static checking before requirement study)
      Sub-practices:

    1. Define the criteria for distinguishing requirement provider.
    2. Define the criteria for accepting the requirement.
    3. Analyze requirement to see whether criteria is met.
    4. Reach an understanding of the requirements.

    
      Typical Work Product:

    1. Lists of criteria for distinguishing appropriate requirements provider.
    2. Lists of criteria for accepting the requirements.
    3. Results of analyses against criteria.
    4. An agreed-to set of requirements.

SP 1.2 Obtain commitments to the requirements (requirement study stage)
      Sub-practices:

    1. Assess the impact of requirements
    2. Record the commitments

     Typical Work Product:

  1. Requirements impact assessment
  2. Requirements / Requirement changes commitment


SP 1.3 Manage Requirement Changes
      Sub-practices:

    1. Record all requirements and requirement changes.
    2. Record all changes history.
    3. Evaluate the impact of the changes from the standpoint of the relevant stakeholders. (comments: this is mentioned in the official CMMI documents, but actually the practice actually has finished in SP2 seems no need to do it again in the SP 1.3)
    4. Make the requirements and change data available to the project.

    Typical Work Products

    1. Requirement status
    2. Requirement database
    3. Requirement decision database

SP 1.4 Maintain Bidirectional Traceability of Requirements
 Sub-practice:

  1. Maintain requirements traceability to ensure that the source of lower lever requirement is documented.
  2. Maintain requirements traceability from a requirement to its derived requirements as well as to its allocation of functions, objects, people, processes and work product.
  3. Maintain horizontal traceability from function to function.
  4. Generate the requirements traceability matrix. (comments: duplicated with point 1,2,3)

     Typical Work Products

    1. Requirements traceability matrix
    2. Requirements tracking system

SP 1.5 Identify Inconsistencies between Project Work and Requirements
     Sub-practice:

  1. Review the project plan, work products for consistency with the requirements and the changes made to them.
  2. Identify the source of the inconsistency.
  3. Identify changes need to be done on project plan, work product based on the requirements changes.
  4. Take the corrective actions.

     Typical Work Products

  1. Documentation of inconsistencies in project plan and work product.
  2. Documentation of the corrective actions.

The above documents can be included in the system analyze document.



CMMI Start --General Concept

CMMI Start --General Concept

CMMI = Capability Mature Model Integration

1. CMMI Structure (Model)


Picture (Metafile)

Supplement of the above module.

Typical Work Products:  Typical Work Products are the output of Specific Practices and the Generic Practices. For example, in the requirement management Process Area, there are multiple Specific Practices, requirement study for example. Under the Specific Practices, there are some Typical Work Products, such as definition the channel of requirement delivery, definition the entry and exit criteria of requirement study.

Sub-practices: Sub-practices is the detailed description to provide the guideline for interpreting Specific and Generic practices.



2. Terminology Abbreviation
  PA: Process Area
  SG: Specific Goal
  SP:  Specific Practices
  GG: General Goal
  GP: General Practices
  CO: Commitment to Perform
  AB: Ability to Perform
  DI: Directing Implementation
  VE: Verifying Implementation
  SG n:  n is a number.  Specific Goal is numbered sequentially. SG 1 means the first SG
              in a process area. SG 2 is the second and so on.
  GG n:  n is a number.  The meaning is same as that in SG.
  SP  n.m:  n, m are both numbers. n is mapped to the sequence of the SG.
                m is the sequence of SP itself.
                For example, SP 1.2 means that the Specific Practices is the 2nd SP under SG 1.
  GP n.m: n,m are both numbers. The means is same as SP.


3. Some useful concept which is confused always

Procedure: A procedure is a specification of the series of actions, acts or operations which have to be executed.

Process: A process is any series of actions or operations viewed as a whole


Vocabulary in July 4th

Vocabulary

Correspondent
Overtake
Captivity
Captor
Be found guilty of
Convict
Compound
Reinforce

Tuesday, July 3, 2007

Here is the Start ----- Let's Go

Maybe inspired by Andrew a deligent boy I ever met and being touched with, I decide to post my working experience here and share with everyone who will happen to visit.

You can view below link of his space here.
http://andrewliuan.spaces.live.com/


Ok. This is a new start ----- Let's GO.