Research Article

Practical Experiences in the Use of Pattern-Recognition Strategies to Transform Software Project Plans into Software Business Processes of Information Technology Companies

Algorithm 1

PSM_MSProjectDatabase_TO_PIM_process_MM (J: Msp_Projects).
Input: J project, which is stored in MPS® Database Published instance
Output: BP Process, which conforms to platform-independent (PIM) Process Metamodel [28] that includes OCL Time Rules
BP ⟵ new(Process); —They refer to mappings included in Table 4(a)
for each ((TMP: Msp_tasks) ∈ (J: Msp_Projects)){ —It maps MPS® Tasks onto PIM MM Activities
A ⟵ create_Activity (TMP); —It creates A: new Activity ∈ BP for each project task
create_TCs (A, TMP); —It creates TCs: duration, fixed or flexible events
create_TDs (A, TMP); —It creates TDs: dependencies between current task and their predecessors
};
return BP;
function create_Activity (TMP: Msp_Task) { —It creates an Activity and its corresponding subclasses
A ⟵ new(Activity) ∈ BP; —The activity is included into BP (mappings included in Table 4(b))
case (TMP) {
  “SubprojectorTask_Group”: {
   P ⟵ new(Process) ▷ A; —Subprojects/Groups are mapped as subprocesses
   SP ⟵ new(Subprocess) ▷ P; SP ▷ A; —It sets the hierarchy of Activities and subprocesses (Table 4(d))
   if (TMP == “Task_Group”) SP.isAdHoc := true; —It groups tasks as AdHoc subprocesses (Table 4(c))
  }
 “Single Task”: T ⟵ new(Task) ▷ A; —Activity is a single task
 “Milestone”: M ⟵ new(Milestone) ▷ A; —It is a milestone
 }
};
function create_TCs (A: Activity,TMP: Msp_Task) { —It creates TCs: duration and time events
TC ⟵ new(Time_Constraint) ∈ A; —It creates TC for activity duration (Table 4(e))
if (TMP.task_dur_is_est) then {TC.tc_type ⟵ “FLEXD”; —It refers to estimated duration as Flexible Duration}
else {TC.tc_type ⟵ “FIXD”; —It is fixed duration};
if (TMP.task_constraint_type ∈ {“MSON”, “SASAP”, “SALAP”, “SNET”, “SNLT”, “MFON”, “FASAP”, “FALAP”, “FNET”, “FNLT”}) then {
  TC ⟵ new(Time_Constraint) ∈ A; —It creates TC for scheduled end events (Table 4(f))
 };
};
function create_TDs (A: Activity,TMP: Msp_Task) { —It creates TDs {“SS”, “SF”, “FS”, “FF”}
for each (LK: Msp_links) ∈ (TMP: Msp_Task) { —It maps links onto dependencies
  TD ⟵ new(Time_Dependency) ∈ A; —It creates TD for scheduled events (Table 4(g))
 }
};