01-Implementation Procedure
Purpose
The
objective of the implementation procedure is the transformation of the detailed
design representation into a programming language realization by applying the
appropriate coding standard and to develop the required product documentation
to support the coded product. The code will be grouped into executable units
(this will be dictated by the selected language and design information). All
units shall be transformed into executable code to be debugged. Incorrect code
and other product component will be re-worked until
run free of errors.
Inputs
No |
Input |
Coming from/Output Of |
1.
|
EA File |
Updated
analysis, Architecture and design models |
Activities
No |
Activity |
RESP |
Input |
Output |
Temp/Solution |
1.
|
Review
Interface Descriptions of the components integration and notify related
stakeholders for changes |
Scrum Master, DEV Team |
All _Procedure Inputs |
Product source code |
EA Repo |
2.
|
Review the
release completeness by verifying the UC & UX and solution mapping |
SM, PO |
All _Procedure Inputs |
Product source code |
Language related component |
3.
|
Understand
software specs (Use cases and activity diagrams) to implement the solution. |
Scrum Master, DEV Team |
All _Procedure Inputs |
Product source code |
EA Repo |
4.
|
Generate
physical Components using the created component diagram. |
Scrum Master, DEV Team |
All _Procedure Inputs |
Product source code |
Language related component |
5.
|
Create
implementation components, classes using the output of use cases (and/Or)
class diagram |
Scrum Master, DEV Team |
All _Procedure Inputs |
Product source code |
Implementation classes |
6.
|
Translate the
use case details in the implementation classes as follow: 1-Pre-conditions:
Can be done
throw: if statements in the caller class or in the main use case main
function. Or Check_Before_+’UC’ function. 2-Scenario:
Main function 3-Alternative
Scenario: ‘UC’+Alternative Name, 5-Exception:
Handling Exception behavior |
Scrum Master, DEV Team |
All _Procedure Inputs |
Product source code |
Implementation classes |
7.
|
Create and
debug components codes, and interfaces code according to procedure inputs and coding standard using the detailed
design documents and diagrams. |
Scrum Master, DEV Team |
All _Procedure Inputs |
Product source code |
Models |
8.
|
Create and test
database according to procedure
inputs and normalization
techniques. |
Scrum Master, DEV Team |
All _Procedure Inputs |
Executable Product
Components |
|
9.
|
Ensure that all
product components are compatible and ready for
integration considering
component reusability including code units, database, DLL etc. |
Scrum Master, DEV Team |
Executable Product
Components |
Ready Executable Product
Components |
UI and design models |
10. |
Perform initial
integration of all product components. |
Scrum Master, DEV Team |
Executable Product Components
|
Initial Integrated Product
|
|
11. |
Call
Refactoring process to enhance source code quality and maintainability. |
Scrum Master, DEV Team |
Source code |
Source Code |
Source Code |
12. |
Add source code
documentation: -Class
objectives -operation objectives -operation inputs and outputs description -scenario description: each bulk of code -line comment |
Scrum Master, DEV Team |
Source code |
Commented source code |
|
13. |
Generate
Release notes for work performed |
Scrum Master, DEV Team |
Executable Product
Components |
Initial Integrated Product
|
TFS/DevOps Notes query |
14. |
Add/Update Code
Metrics and resolve required issues |
Scrum Master, DEV Team |
Executable Product
Components |
|
TFS/DevOps Notes query |
15. |
Add/Update
performance metrics and resolve required issues |
Scrum Master, DEV Team |
Executable Product
Components |
|
TFS/DevOps Notes query |
16. |
Analyze code
metrics as follow: ·
Do we have the suitable
LOC for module ·
Do we have the suitable
metrics changes according to work performed ·
How to increase
maintainability ·
How to decrease
: LOC, coupling, cyclomatic index Note: Use in order to enhance code metrics, use the following:
|
Scrum Master, DEV Team |
Executable Product
Components |
|
TFS/DevOps Notes query |
Outputs
No |
Output |
Going To/Input Of |
1. |
Approved
Product Components |
PD_Unit_Test_Execution_Procedure |
2. |
Updated
EA File |
|
02-DB Refactoring Procedure
Purpose
The objective of this procedure is to evaluate, and enhance current software code process according to a predefined standards focusing on the
business needs and highly bad analysis metrics.
Refactoring means enhancing the solution
architecture after we develop the solution to consider quality factors like
maintainability, scalability, performance, reusability
and all other attributes.
When it takes time to create nothing, then
you need to refactor.
We need to build a code not only for machine to understand, but also for human to understand.
We need it: easy to understand, cheaper to
maintain, easy to find bugs, increase performance.
Refactoring should be done when:
1. Creating
new function
2. Solving
bugs
3. Code
Review
SQL Server
Refactoring methods
Inputs
No |
Input |
Coming from/Output Of |
1 |
Db
Design |
PD_Implementation |
Refactoring Database
Activities
No |
Activity |
Responsible |
Input |
Output |
Temp/Solution |
|||
1.
|
Review
database tables for: 1.
remove all
fields can be calculated using a clear criterion 2.
Remove
fields without need or added values to the business model 3.
Add standard objects fields for tracability
(Created by, creation date, modification date, modified by) 4.
Add standard objects fields (transactional, status) according to
object nature |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
2.
|
Review
database tables for: 1.
Remove 2.
Merge with
the same key 3.
Merge with
the same purpose 4.
Becoming
logical view |
|
|
|
|
|||
3.
|
Add
check constraints to prevent data inconsistency Ex: ALTER TABLE dbo.Employee ADD
CONSTRAINT CK_Employee_Gender CHECK (Gender IN ('M','F')) |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
4.
|
In order to prevent model
customization for handling attributes default values, Give default value to
any attributes according to the need |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
5.
|
Do not
add grouping for columns without needs For example : Group
by Code,Name0,Name1 |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
6.
|
Index
ordering and grouping columns in order to enhance
performance. |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
7.
|
Do not
repeat calls without needs, for example: Select account.*, dbo.GetValue(“Order”)
from account Because
repeated calls per each row will get the same value. |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
8.
|
Arrange your where condition column by putting what reduces the result-set significantly, then the remaining |
|
|
|
|
|||
9.
|
Follow
the fifth normalization forms for data models
specially the MVD model. MVD
means multi value driven attributes, so if field is
already generated by equation of other fields, it should not be recorded in
the database. Example : a = b* 4c You
should calculate a in one of: 1. View 2. Function 3. Procedure This
feature should be applied if the value is not subject for adding new value or
updating the calculated value. For
example: Calculating
Barcodes with facility to add new or update. Example:
1. Use calculated field |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
10.
|
Set the
selection period to the last visited procedures related to the last year by
the following query: select * from Koudjis.information_schema.routines where routine_type = 'PROCEDURE' and
Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_') AND
LAST_ALTERED >= ‘1/1/2014’ ORDER
BY LAST_ALTERED
DESC |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
11.
|
Select the first
procedure and open it for analysis |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
12.
|
Search for repeated
groups to separate them in new function, using the routine definition column
as follow: select * from Koudjis.information_schema.routines where routine_type = 'PROCEDURE' and
Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_') AND
ROUTINE_DEFINITION LIKE
'%, SPACE(1), SPACE(0))))) =
SPACE(0)%' ORDER
BY LAST_ALTERED
DESC |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
13.
|
Search for repeated
select statement to separate them in new function, using the routine definition
column,like getting the
default currency as follow: select * from information_schema.routines where routine_type = 'PROCEDURE' and
Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_') AND
ROUTINE_DEFINITION LIKE
'% = CurrencyID%' ORDER
BY LAST_ALTERED
DESC |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
14.
|
In order to increase
reusability and maintainability, Separate function steps in separate
procedures using the following Name: Module name + ‘_’ +Function Name |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
15.
|
Create Temp table instead
of physical tables for temp calculation using the following query: Search for repeated
select statement to separate them in new function, using the routine
definition column,like
getting the default currency as follow: select * from information_schema.routines where routine_type = 'PROCEDURE' and
Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_') AND
ROUTINE_DEFINITION LIKE
'%create table%' ORDER
BY LAST_ALTERED
DESC |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
16.
|
Create function or
procedure for all aggregate required functionalities, like sum and count with
or without conditions using the following queries: select * from information_schema.routines where routine_type = 'PROCEDURE' and
Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_') AND
ROUTINE_DEFINITION LIKE
'%select count%' ORDER
BY LAST_ALTERED
DESC select * from Koudjis.information_schema.routines where routine_type = 'PROCEDURE' and
Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_') AND
ROUTINE_DEFINITION LIKE
'%select sum%' ORDER
BY LAST_ALTERED
DESC |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
17.
|
Remove any
dependencies on the language [for main operation, not localization for the
content] by separating strings in resource table. Use the following
query to detect them: select * from information_schema.routines where routine_type = 'PROCEDURE' and
Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_') AND
ROUTINE_DEFINITION LIKE
'%CASE @lang%' ORDER
BY LAST_ALTERED
DESC |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
18.
|
Add Function for date
conversion, and use it for all date fields as follow: select * from information_schema.routines where routine_type = 'PROCEDURE' and
Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_') AND
ROUTINE_DEFINITION LIKE
'%Convert(datetime%' ORDER
BY LAST_ALTERED
DESC |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
19.
|
Merge duplicated
procedures when they are resulted from the same query, for example: select * from information_schema.routines where routine_type = 'PROCEDURE' and
Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_') AND
(ROUTINE_DEFINITION LIKE
'%select sum%' or ROUTINE_DEFINITION
LIKE '%select
count%') ORDER
BY LAST_ALTERED
DESC You will find that the result contains: proc_CashBoxBalance proc_BoxBalance In addition, they have
the same body. |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
20.
|
Create an Enum table
and enum function in order to
simplify the queries and increase reusability as follow: create table CustomLookups
(id int, Name nvarchar(20),primary key (id,name)) insert into CustomLookups
(id,Name) values(0,'CashAdd') insert into CustomLookups
(id,Name) values(1,'CashAdd') insert into CustomLookups
(id,Name) values(2,'CashAdd') select * from
GetEnumValues('CashAdd'); insert into CustomLookups
(id,Name) values(10,'DRCR') insert into CustomLookups
(id,Name) values(20,'DRCR') select * from
GetEnumValues('DRCR'); CREATE FUNCTION GetEnumValues(@EnumName
nVarchar(20)) RETURNS @EnumItems TABLE (Id
int NOT NULL) AS BEGIN INSERT
INTO @EnumItems (Id) SELECT
Id FROM Enums
WHERE name = @EnumName; RETURN; END; For example the procedure proc_Stock_GetTransSearch, you should use it in the [where] conditions. |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
21.
|
Unify Search
procedures by parameterize them by the table name: select * from Koudjis.information_schema.routines
where routine_type
= 'PROCEDURE' and Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_') AND Routine_Name
like '%bylike' ORDER BY LAST_ALTERED
DESC |
TL and DEV
team |
Database |
Updated
Database |
SQL
Database |
|||
22.
|
Move update or delete
statements to new procedures using the following query: select * from Koudjis.information_schema.routines
where routine_type
= 'PROCEDURE' and Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_') AND ( ROUTINE_DEFINITION LIKE '%update
%' or ROUTINE_DEFINITION LIKE '%delete
from %' or ROUTINE_DEFINITION LIKE '%insert
into %' or ROUTINE_DEFINITION LIKE '%select
into %' ) ORDER BY LAST_ALTERED
DESC |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
23.
|
Unify lists procedure
to have a parameter for the table name and return all records of the table: select * from Koudjis.information_schema.routines
where routine_type
= 'PROCEDURE' and Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_') AND ( ROUTINE_NAME LIKE '%_GetAll' ) ORDER BY LAST_ALTERED
DESC |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
24.
|
Unify Delete procedure
by parameters as follow: select * from Koudjis.information_schema.routines
where routine_type
= 'PROCEDURE' and Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_') AND ( ROUTINE_NAME LIKE '%_DeleteByPrimaryKey' ) ORDER BY LAST_ALTERED
DESC |
TL and
DEV team |
Database |
Updated
Database |
SQL Database |
|||
25.
|
Unify Getting all
records by primary key using the following: select * from Koudjis.information_schema.routines
where routine_type
= 'PROCEDURE' and Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_') AND ( ROUTINE_NAME LIKE '%_GetByPrimaryKey' ) ORDER BY LAST_ALTERED
DESC |
TL and
DEV team |
Database |
Updated
Database |
SQL
Database |
|||
26.
|
Find the data duplication using the following sql by replacing the table name: declare @nTotalCount int; declare @nDistCount int; set @nDistCount = (select count(1) from (select distinct * from _Edarat) recset); set @nTotalCount = (select count(1) from _Edarat) select @nTotalCount -@nDistCount; |
|
|
|
|
|||
27.
|
Consolidate the functions
that retrieve specific values from an object, Like GetAreaCode,GetAreaName. Create Tabular
function GetAreaInfo to retrieve the mentioned
columns and use the cross apply or outer apply to us it. select * from
stockdet outer apply dbo.GetAccountInfo(0, AddAccount) AccountInfo |
|
|
|
|
|||
28.
|
Review database
objects sizes in order to decrease the database
size, and enhance the performance, using the following statement:
|
|
|
|
|
Outputs
No |
Output |
Going To/Input Of |
1 |
Approved Corrective
Actions |
Updated Source code |
2 |
Updated Models |
EA Models |
03-Code Refactoring Procedure
Purpose
The
objective of this procedure is to evaluate, and
enhance current software code process according to a
predefined standards focusing on the business needs and highly bad analysis
metrics.
Refactoring
means enhancing the solution architecture after we develop the solution to
consider quality factors like maintainability, scalability, performance, reusability and all other attributes.
When it
takes time to create nothing, then you need to refactor.
We need
to build a code not only for machine to understand,
but also for human to understand.
We need
it: easy to understand, cheaper to maintain, easy to find bugs, increase
performance.
Refactoring
should be done when:
4. Creating
new:
a. Components
b. Classes
c. Functions
5. Solving
bugs
6.
Code Review
Source code Refactoring methods
|
Extract |
Move |
Update/ Unify |
Component |
To keep reusability out of the current solution |
-Use SRP |
-Keep small paces |
Class |
-Extract super class: for shared functionality between classes -Extract class: for repeated code between unrelated classes |
-Lazy classes[1] to be merged with active one -Use SRP |
-Keep small paces -Use inheritance |
Operation |
Keep functions reusable, maintainable, so decreasing the duplicate behavior |
-Separate the code to the correct place in the source code -Use SRP |
-Keep small paces -Change the operation signature -Increase the values domain be sent to decrease the LOC and increase reusability -remove non-valued parameters |
Attribute |
|
Put it in the correct location |
Self-Encapsulate fields[2] |
SQL Server Refactoring methods
8. Structural – A change in the definition of tables,
views, and columns. Some of these refactoring’s include the replace one-
to- many relationship with associative table, split table, rename table, and
more
9. Data Quality – This category of refactoring is
covers changes that improve the quality of the data stored in a database.
Refactoring’s in this category are add lookup table, drop standard type,
move data, and more
10. Referential Integrity – Changes that ensures
that any data that is referenced by one table exists, and also that unused data
is removed
11. Architectural – Changes with a goal of
improving the overall methodology in which external applications interact with
a database
12. Method – Code changes like adding/removing
parameters to a stored procedure, with a goal to improve overall quality
13.
Transformations –
Changes in a database schema. For example, introducing a new table or a
column, and inserting and updating data
14.
Performance: Use one trip to the table for read or
update instead of multiple visits.
Steps
S# |
Step |
Definition |
4.
|
Code Cleaning |
Includes: · Removing un-used classes, functions and variables. · Separating resources to resource dll · Merge UI events together like controls enter and set focus and lost focus · Move all system parameters that be sent statically to resources |
5.
|
Code slicing |
Includes: · Slicing class to set of classes. · Slicing class to set of functions. · Reuse separated classes and functions |
6.
|
Code Refactoring |
Includes: · Redesign solution according to business functionality, so class should represent the required business model. · Evaluate the correct way of implementation and re-implement the correct one. · Create reusable components for objects · Build the solution according to MVC model to coupe with web model |
7.
|
Client Side refactoring |
Includes: 1- Refactoring HTML files 2- Refactoring Javascript files 3- Refactoring JQuery files 4- Migration to TYPESCRIPT |
Inputs
No |
Input |
Coming from/Output Of |
1 |
Source Code |
PD_Implementation |
Refactoring Backend Activities
No |
Activity |
Responsible |
Input |
Output |
Temp/Solution |
1.
|
Get the latest source code from configuration
management environment for the selected project/component for refactoring. |
TL and DEV team |
TFS access |
Free Errors code |
VSS |
2.
|
Remove un-used namespaces, classes, and member
functions |
TL and DEV team |
TFS access |
Free Errors code |
|
3.
|
Separate resources to resource module |
TL and DEV team |
Source Code |
Updated Source Code |
|
4.
|
Move all system parameters that be sent
statically to resources, like: String strName = GetModuleName(“ARM”); |
TL and DEV team |
|
|
|
5.
|
Conduct code cleaning and merge process for same
bulks using the analyze solution for code clones |
TL and DEV team |
TFS access |
Free Errors code |
VSS |
6.
|
Calculate and save code metrics for the selected project |
TL and DEV team |
Free Errors code |
Code Metrics Resuilts |
VS 2013 |
7.
|
Remove all functions with zero lines of codes, using metrics |
TL and DEV team |
Free Errors code |
Code Metrics Resuilts |
VS 2013 |
8.
|
Search For events handlers to find duplications and unify event handlers
using if conditions for the command or control. |
TL and DEV team |
Free Errors code |
Code Metrics Resuilts |
VS 2013 |
9.
|
Arrange the source code metrics priority according to the low
maintainability, high cyclomatic, and high line numbers of code. Arrange starts with: 1.
Red dots 2.
Triangles 3.
Minimum number of the maintainability
index. |
TL and DEV team |
Code Metrics Resuilts |
Priorities |
VS 2013 |
10. |
Understand the selected function logically, from business and
technical point of view |
TL and DEV team |
Free Errors code |
Understanding |
Source Code |
11. |
Set Proposal for the class design from functionality perspective not
UI perspective[3],
according to its functionality using the following elements: 1.
UI 2.
Source code |
TL and DEV team |
Free Errors code |
Understanding |
Source Code |
12. |
Remove all dependencies on the UI elements that direct the business,
so do not check if field is visible or enabled, but use the main attribute or
business rule that cause the change of appearance. |
TL and DEV team |
Free Errors code |
Understanding |
Source Code |
13. |
Group each set of code according to its functionality, so slicing
should be on business workflow; this will help you to let your code tell your
business. |
TL and DEV team |
Source Code |
Group of source code lines created |
Updated Source code |
14. |
Slice the function to a set of functions according to the grouped
lines. In case of Non-MVC code, use the following pattern: -
Read from UI -
Execute behavior -
Update UI |
TL and DEV team |
Source Code |
New Functions created |
Updated Source code |
15. |
Set the function signature according to: 1- Functionality 2- Expected inputs: that links the lines before the
function with the function. 3- Expected outputs: that needed to complete the execution
after the function. |
TL and DEV team |
Source Code |
New Functions created |
Updated Source code |
16. |
Find code similar groups and replace if typical,
considering that maximum number of lines per function is 20 LOC. Please note
that Small functions increases reusability than large functions because the
percentage of intersection decreases according to the function size. |
TL and DEV team |
Source Code |
New
Functions Used |
Updated Source code |
17. |
If not typical, modify the function signature to meet the
modification of the lines between groups, like changing the return value,
function name, and function inputs. |
TL and DEV team |
Source Code |
New
Functioned Updated |
Updated Source code |
18. |
Repeat the steps until finish. |
TL and DEV team |
Source Code |
All
Process outputs |
Updated Source code |
19. |
For the repeated calls for the same sliced function, Study why we need all these calls? In addition, can we
replace it by member variables or not. Ex: 1-Setting values for
common controls events, like set focus and lost focus 2-Getting values many times from different actions, you
can get it once on form or view startup |
TL and DEV team |
Source Code |
All
Process outputs |
Updated Source code |
20. |
Re-measure the code metrics to find the variance, if not
accepted, continue the process. |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
21. |
Separate business logic from the UI layer, so do not read
from the UI in your business functions, read your UI elements and send the
values to your business function in order to be used from class library. |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
22. |
Create new business module for each application, with the
following name pattern: Module+BL Example: Security module SecBL.dll |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
23. |
Update solution architecture models, and Re-architect
classes according to the main and alternative scenarios and object lifecycle.[i] |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
24. |
Test Migrated Classes and operations Ex: 1-Use unit testing methods 2-Regression testing before delivery to QC team |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
25. |
In order to apply MVC model, and prevent the intersection
between UI and business, Move the completed classes to class library in
process finalization, and use it from your application, considering that each
group of classes related to the same business domain should have on class
library. For Example: Security issues= Security library BRM = Business rules manager layer Stock TXN = Stock library Encryption = Encryption Library. |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
26. |
MVC model be built upon the following method: 1. Read from View 2. Read and execute
models behavior, so never inject your controller with business 3. Write to view (with
the model full signature, like returned values, messages and objects) So, you should separate the Desktop operation to the
mentioned functionality: 1. ReadView 2. ValidateView_CS 3. ValidateView_SS 4. Load[Object]Model 5. UpdateModel 6. UpdateView |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
27. |
All functions should have the following elements: 1. A return, so void
the void. 2. Try and catch
sections 3. Logging for each
step 4. Logging for the
exception section. 5. Suitable return
value according to the operation result. |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
28. |
For Performance Issues, do not log if the loop contains
large number of records. |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
29. |
Encapsulate function behavior, so do not expect more
function inputs [parameters] to support your function while you can get it
inside. For Example, sending the following parameter: TXN Code, TXN Currency, while the currency is part of the
TXN definition. |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
30. |
To prevent traffic consuming and locking issues,
consolidate all operations that belongs to a main operation with facility to
be run on the server. Example: Main and details insertion methods group them in one
procedure and send all objects from the client once. |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
31. |
For All functions that are not related to the class
responsibility, move it to the related class |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
Outputs
No |
Output |
Going To/Input Of |
1 |
Update Source code |
Updated files |
2 |
Updated Models |
EA Models |
Measures
No |
Output |
Description |
Rules |
1 |
Maintainability index |
To which level we have
maintainable source code |
0-100 The greater the best |
2 |
Cyclomatic Index |
It measures the number of
branches in source code , like loops and if statements |
increases according to
the branches the least is the best |
3 |
Coupling |
Measures the coupling to
unique classes through parameters, local variables, return types, method
calls, generic or template instantiations, base classes, interface
implementations, fields defined on external types, and attribute decoration.
Good software design dictates that types and methods should have high
cohesion and low coupling. High coupling indicates a design that is difficult
to reuse and maintain because of its many interdependencies on other types. |
The least is the best |
4 |
Depth of inheritance |
Levels of inheritance |
The least is the best |
5 |
Lines Of Codes |
Count the number of lines |
The least is the best |
|
|
|
|
Implementation
guidelines
Each Class can have the
following pattern of design as a reference with facility to change
S# |
Method |
Number of Similar Methods |
1 |
LoadSetting |
1 |
2 |
LoadDataFor+[SomeThing] |
M |
3 |
CreateObj |
1 |
4 |
CreateObjDetail |
M |
5 |
UpdateObj |
1 |
6 |
UpdateObjDetail |
M |
7 |
DeleteObj |
1 |
8 |
ApproveObj |
1 |
9 |
PostObj |
1 |
10 |
Validate+[Something] |
M |
11 |
Check+[Something] |
M |
12 |
SearchForObject |
1 |
|
|
|
Refactoring FE Activities
No |
Activity |
Responsible |
Input |
Output |
Temp/Form |
1.
|
Separate resources (HTML, bootstrap,
angular) to resource module |
TL and DEV team |
Source Code |
Updated Source Code |
|
2.
|
Remove all functions with zero lines of codes |
TL and DEV team |
Free Errors code |
Code Metrics Resuilts |
VS 2013 |
3.
|
How to get code metrics for java script |
TL and DEV team |
Free Errors code |
Code Metrics Resuilts |
VS 2013 |
4.
|
Set client side architecture design according to CS operations like: 1-
Views_Validators 2-
Views_Generator 3-
BackEnd_Caller |
|
|
|
|
5.
|
Set Proposal for JS files design [as class design] from functionality
perspective not UI perspective[4],
according to its functionality using the following elements: 1.
UI 2.
Source code |
TL and DEV team |
Free Errors code |
Understanding |
Source Code |
6.
|
in order to increase reusability, Differentiate between the following
types of functions: 1-
Functions that read and write from UI
elements 2-
Function that execute behavior 3-
Functions that call backend code |
TL and DEV team |
Free Errors code |
Understanding |
Source Code |
7.
|
Slice the function to a set of functions according to the grouped
lines |
TL and DEV team |
Source Code |
New Functions created |
Updated Source code |
8.
|
Set function maximum size to 10-15 lines
to slice correctly and increase reusability |
TL and DEV team |
Source Code |
New
Functions Used |
Updated Source code |
9.
|
Review functions behavior for
consolidate, and change the signature as required |
TL and DEV team |
Source Code |
New
Functioned Updated |
Updated Source code |
10. |
In order to enable unit testing for JS
functions, All functions should have the following elements: 1. A return, so void
the void. 2. Try and catch
sections 3. Logging for each
step 4. Logging for the
exception section. 5. Suitable return
value according to the operation result. |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
11. |
Review functions responsibilities, and
move it to the related JS File |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
12. |
Review functions responsibilities and
merge the similar with required modifications in method name and number of
parameters |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
13. |
Create section for initialization of the
JS file, to be handled as a constructor |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
14. |
Use JS objects for structured data types var book =
{ "name": "The Principles of Object-Oriented JavaScript", "year": 2014 }; //object with json
format |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
15. |
Use JQuery
ready function to execute the startup code, variables initialization, and events binding $(document).ready(function () { ….} |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
16. |
Use session storage in order to save
variable and prevent consuming
the backend calls var username = sessionStorage.getItem('UserName'); sessionStorage.setItem('UserName', 'CM Manager'); |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
17. |
Using [eval] for complicated and dynamic
operations function ExecuteEvalFunction() { var vScript
= "5+4"; //var vScript = "5<4"; $('#TXTInput').val("4"); vScript
= "$('#TXTInput').val()>3 && $('#TXTInput').val()<3"; vScript
= eval(vScript);//result will
be 9 } |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
18. |
Use [RegExp] in order to validarte formats function RegExpression() { var v = new RegExp("http") alert(v.test("http://www.google.com")) window.alert(v.test("adsashsgfsd")) } |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
19. |
Migrate JS and JQuery
to typescript in order to enable OO client side code |
TL and DEV team |
Updated Source code |
All
Process outputs |
Updated Source code |
04-Issue Resolving Procedure
Purpose
The
objective of this procedure is to objectively settle a concrete solution based
on clear inputs, for the raised issues by the quality team, either control or
assurance.
Inputs
No |
Input |
Coming from/Output Of |
1 |
Source Code |
PD_Implementation |
2 |
Issues |
Issue Tracking system |
Activities
No |
Activity |
Responsible |
Input |
Output |
Temp/Solution |
1.
|
Collect suitable work products from the repository. Ex: Client Database from client. |
TL and DEV team |
Solution sources |
Solution sources |
|
2.
|
Update all work products to latest version to
prevent resolving old issues on old work products Ex: ·
Database version ·
Procedures and functions ·
infrastructure components (Components,
services) |
TL and DEV team |
Solution sources |
Solution sources |
|
3.
|
Identify the issue in clear statement: -
Normal user scenarios -
Alternative user scenarios -
Different channels |
TL and DEV team |
Solution sources |
Solution sources |
|
4.
|
Understand issue Analysis models (For old/new
modules) |
TL and DEV team |
Solution sources |
Solution sources |
|
5.
|
Understand issue design models if needed |
TL and DEV team |
Solution sources |
Solution sources |
|
6.
|
Conduct source code and database refactoring if
needed |
TL and DEV team |
Solution sources |
Solution sources |
|
7.
|
Identify the issue scenario in structured
statement which includes: ·
Steps ·
Step inputs ·
Step outputs |
TL and DEV team |
Solution sources |
Solution sources |
|
8.
|
Identify the issue history, and its impact on the
system |
TL and DEV team |
Solution sources |
Solution sources |
|
9.
|
RCA: Identify expected sources for the issue |
TL and DEV team |
Solution sources |
Solution sources |
|
10. |
Define proposed solutions for the issues: -
Corrective solutions (To resolve the impact
of the issue) -
Preventive solutions (To prevent the occurrence
again) |
|
|
|
|
11. |
Technical Enhancement model: -
Application of defensive programming model -
Logging enrichment to early detect the problem -
Refactoring as required (OOA perspective/OOD
perspective) -
SonarCloud enhancement as required |
|
|
|
|
12. |
Automation testing enrichment: -
Unit testing -
Automation testing scripts |
TL and DEV team |
Solution sources |
Solution sources |
|
13. |
Testing Phase: -
Main scenarios -
Alternative scenarios -
Impacted areas. -
Impacted solutions -
Impacted channels |
TL and DEV team |
Solution sources |
Solution sources |
|
14. |
Take corrective actions to resolve issues impact
on the main and alternative scenarios including Arabic and English UI to
confirm the consistency between different interfaces. |
TL and DEV team |
Solution sources |
Solution sources |
|
15. |
Retest the resolution and conduct required
changes during the retest step |
TL and DEV team |
Solution sources |
Solution sources |
|
Outputs
No |
Output
|
Going
To/Input Of |
1 |
Updated
source code with the resolved issues |
Updated
Source code |
2 |
Updated
Models |
EA Models |
3 |
Updated DevOps |
AzureDevOps |
4 |
RCA
document |
As
Required |
[1] - Each class you create costs money to maintain and understand. A class that is not doing enough to pay for itself should be eliminated. Remove them, and do not pay for nothing.
[2] - like calculating value each time for the same thing according to the same equation, so you can put it in a separate property or method, it is the way of organizing data. You should hide all details of the field like how you calculate it and what is the real value according to which condition.
[4] - For Example: function name should be CheckCurrencyCode, not txtCurr_Validate, AddingNewLine, not grid_row_add