Estandares Buenas Practicas Desarrollo de Software
Estandares Buenas Practicas Desarrollo de Software
Estandares Buenas Practicas Desarrollo de Software
PRACTICAS DE DESARROLLO DE
SOFTWARE
CORE BANK 1.5
Marzo 2015
Contenido
Revisin: 01
Fecha:
Cdigo: EDS-SI
1. Objetivo...................................................................................................... 5
2. Nivel de aplicacin.................................................................................... 5
2.1. Nomenclatura......................................................................................... 5
2.1.1. De proyectos........................................................................................ 5
2.1.2. De clases.............................................................................................. 5
2.1.3. De Objetos y/o Controles...................................................................5
2.1.4. Nomenclatura de Las instancias de las clases y formularios......7
2.1.5. De los mtodos en clases y formularios.........................................7
2.1.6. De Variables......................................................................................... 7
2.1.7. De Constantes..................................................................................... 9
2.1.8. Del Indentado...................................................................................... 9
2.1.9. De Editor de cdigo............................................................................ 9
2.2. Uso de control de excepciones..........................................................10
2.3. Liberacin de cuentas.........................................................................10
2.4. Uso de imgenes en los controles.....................................................10
2.5. Uso clases de encriptacin.................................................................10
2.6. Uso de Regiones................................................................................... 11
2.7. Uso de Snippets................................................................................... 11
2.8. Administracin de plantillas en Visual Studio.................................15
3. Nivel de Base de datos...........................................................................20
3.1. Definicin de objetos o tablas...........................................................20
3.2. Definicin de campos..........................................................................21
3.3. Constraint e ndices............................................................................. 22
3.4. Vistas..................................................................................................... 23
3.5. Procedimientos almacenados............................................................23
3.6. Triggers.................................................................................................. 24
3.7. Declaracin de variables en SQL.......................................................24
3.8. Uso de Proyectos en Sql Server Management................................26
4. Estndares de codificacin SQL Server...............................................29
4.1. Objetivo de la estandarizacin en la base de datos.......................29
4.2. Convenciones de sintaxis de Transact-Sql.......................................29
5. Variables Globales del Core Bank.........................................................37
6. Buenas Prcticas de Programacin......................................................38
6.1. Codificacin........................................................................................... 38
Elaborado
Revisado:
Aprobado:
Pgina
Alan Huanca Villaverde
Comit revisor
Vidal Egas Arroyo
Pgina 2 de 41
Confidencial: Est prohibida la reproduccin total o parcial del contenido de este documento sin permiso de la
empresa Soluciones Integrales ELS S.A.C. - SolIntELS.
Revisin: 01
Fecha:
Cdigo: EDS-SI
Elaborado
Revisado:
Aprobado:
Pgina
Alan Huanca Villaverde
Comit revisor
Vidal Egas Arroyo
Pgina 3 de 41
Confidencial: Est prohibida la reproduccin total o parcial del contenido de este documento sin permiso de la
empresa Soluciones Integrales ELS S.A.C. - SolIntELS.
Revisin: 01
Fecha:
Cdigo: EDS-SI
INTRODUCCION
El presente documento proporciona un nivel de estndares de desarrollo de
sistemas, que permite a los usuarios encargados de mantenimiento de los
sistemas, cumplir adecuadamente sus funciones bajo parmetros y lineamiento
generales. Del mismo modo presentamos nomenclaturas convencionales que
conforman los Estndares para la programacin y mantenimiento de la base de
datos. El uso de procedimientos y documentacin estandarizada proporciona la
base de una comunicacin clara y rpida, adiestramiento menos costoso del
personal de sistemas, ayuda a los analistas y diseadores de sistemas en el
trabajo de integracin de sistemas, reduccin de costos de almacenamiento,
entre otros.
Por lo crtica de esta documentacin se debe revisar y actualizar
permanentemente, ajustando a las condiciones ms convenientes para el
desarrollo de sistemas.
Elaborado
Revisado:
Aprobado:
Pgina
Alan Huanca Villaverde
Comit revisor
Vidal Egas Arroyo
Pgina 4 de 41
Confidencial: Est prohibida la reproduccin total o parcial del contenido de este documento sin permiso de la
empresa Soluciones Integrales ELS S.A.C. - SolIntELS.
1. Objetivo
Establecer un marco de desarrollo nico y de fcil aplicacin al momento
de implementar las aplicaciones realizar por la empresa.
2. Nivel de aplicacin
2.1.
Nomenclatura
2.1.1.
De proyectos
La nomenclatura del proyecto a nivel de capas se define con la
abreviatura del mdulo y en la capa a la que pertenece. Como
se muestra en la imagen
Ejm: CAJ.CapaNegocio
es el ejemplo del nombre del
proyecto del mdulo de caja en la capa de lgica de negocio.
CAJ.AccesoDatos es el ejemplo del nombre del proyecto
del mdulo de Caja en la capa de acceso a datos.
Cualquier proyecto que se adicione deber ser del tipo
ClassLibrary de a acuerdo a la versin del netframework (4.5)
de la aplicacin y el lenguaje de programacin a seleccionar es
C Sharp (c#).
2.1.2.
De las clases
La Clase es la estructura de un objeto, es decir, la definicin de
todos los elementos de que est hecho un objeto. Una clase se
compone de dos partes atributos y Mtodos.
La definicin del nombre de las clases deber iniciar con el
prefijo cls de una clase, seguido por la abreviatura de la
capa al cual pertenece mostrado en la tabla N 1, finalizando
con el nombre de la clase. Donde la sintaxis quedara de la
siguiente forma: prefijo+Abreviatura+NombreClase.cls
Ejem1: La
forma de
nombrar
una clase
que
Abreviat
ura
CN
AD
Capa de negocio
clsCNNombreClase.cs
Capa de acceso a
clsADNombreClase.cs
datos
pertenece a la capa de negocio encargado del cierre de crdito seria como
sigue: inicia con cls la que indica que representa a una clase, continua
con CN la que indica que pertenece a la capa de negocio, y finalmente el
nombre de la clase CierreCredito. Dando como resultado el siguiente
nombre: clsCNCierreCredito.cs
2.1.3.
grb
txt
btn
cbo
dtg
lbl
rbl
chb
nud
pbx
dtp
tmr
ltv
con
Ejemplos:
cboAgencia
Combo box para listar las agencias
chbCodOfi
Check box para seleccionar los cdigos
de oficina
txtNroDocumento Textbox para recabar la informacin
del Nmero de documento.
Nombres Fsicos
El Primer grupo de tres caracteres debe hacer referencia a las
abreviaciones para identificacin del objeto mostrada en la
tabla N 3.
Para asignar nombres a los formularios, programas, libreras,
etc. deben tener el siguiente estndar:
Xxx Yyy Zzz Www N . ext
Donde:
XXX
Ejemplo 1: frmDeclaracionMasivaSueldo.frm
frm
primer detalle
descriptivo.
Masiva
frmContenedorNue
la
instancia
es:
2.1.5.
De los mtodos en clases y formularios
Los mtodos y/o funciones que se declaran en las clases y
formularios debern seguir el siguiente formato:
-
xxxYyy()
Donde
xxx: es la accin en verbo infinitivo, escrito en
minsculas.
Yyy: es el objeto sobre la cual se aplica la accin,
escrito con la primera letra en mayscula y a
continuacin en letras minsculas.
Ejemplo:
guardarCobranza()
retornarSolicitud()
2.1.6.
De Variables
Las variables vienen precedidas por una letra, la cual indica el
tipo de variable que es. El nombre de la variable deber ser
significativo en relacin a su significado y/o uso, utilizando
palabras representativas, y comenzando de preferencia con
una letra en mayscula.
Compuesta por las siguientes partes:
t
Yyy
Zzz
?
c
d
t
n
l
g
a
Tabla N 4
Carcter
Fecha
Fecha y hora
Numrico
Lgico
General
Array (arreglos)
Ejemplos: cCodigoCliente,
dFechaSistema
cCodigoCliente1,
Clasificacin de Variables
Para asignar los prefijos y nombres las variables se clasifican de
la siguiente manera:
<summary>
Realiza una bsqueda de cliente por nombre
Seguridad: Administradores
</summary>
/// <param name="nombre">Parte del nombre a
buscar</param>
/// <returns>Lista de clientes</returns>
2.1.11.
De Operadores
Todos los operadores deben rodearse de un espacio antes y
despus del operador. Ejemplo A = A + B, los que por defecto
brinda el .Net. al asignar el ; al final.
2.1.12.
De Llamadas a Sp
La Ejecucin de Stores Procedures deber realizarse a travs
de la clase objEjeSp y su mtodo EjecSP. Adems el envo de
parmetros al SP deber ser de forma implcita.
Luego deber ejecutarse el SP de la siguiente manera:
objEjeSp.EjecSP("GEN_InsSoliciAproba_SP", idAgencia,
idCliente,
nTipOper, idMoneda, idProducto,
nMonto, idCuenta, dFecSolic, idMotivo,
cSustento, dFecAprob, idUsuario);
2.1.13.
De Messagebox
Situacin
Para avisar o consultar al usuario sobre
algo inesperado, se puede dar la
posibilidad de elegir entre varios botones.
Cuando se desea informar de un proceso
concluido, o de una tarea ejecutada
satisfactoriamente.
Utilizar
los
2.2.
Uso de control de excepciones
La arquitectura actual proporciona de manera genrica el control de
excepciones al iniciar cada instancia de un formulario al ser llamado
de manera dinmica desde el men con la clase Exception, sin
considerar el formulario de inicio y el formulario principal.
Solo en casos que justifiquen su uso explicito se proceder a
implementar la sentencia:
try
{}
catch (ExceptionExplicit ex)
{}
2.3.
Liberacin de cuentas
Al utilizar los controles de bsqueda de cuentas ya sea de crditos
y/o
depsitos,
dichas
cuentas
quedaran
bloqueadas
automticamente de manera lgica en el registro de la base de
datos, por ello deber implementar el mtodo de liberacin en los
eventos de cierre de formularios.
2.4.
Uso de imgenes en los controles
Para la creacin de un nuevo botn deber considerar un icono en
formato PNG la cual deber ser lo ms descriptivo con respecto a
la funcin que realizara. Las dimensiones son:
-
Width : 24 px
Height : 24 px
2.5.
Uso clases de encriptacin
Deber utilizar la clase clsCriptografia ya existente para la encriptacin
y desencriptacin de cadenas, dicha clase podr referenciarla desde
el namespace GEN.Funciones.
2.7.
Uso de Snippets
Un snippet es un bloque de cdigo reutilizable que puede insertar
donde sea necesario en el cdigo.
Ejemplo de un snippet:
for (int i = 0; i < length; i++)
{
}
2.8.
SI_FI
Tabla N 7
Xxx
Yyy
Zzz
N
(T) Debe identificarse qu tipo de tabla es:
M
T
H
D
P
W
A
maestro
Tipos genricos
Histrico
Detalle (descriptivo)
Puente
Tabla de Trabajo Temporal
Auditoria
SI_Fin
D
Recibo
Egreso
3.2.
Definicin de campos
Los campos de las tablas deben al igual que las variables mantener
las normas. Se tiene la siguiente descripcin del armado de los
campos.
t Yyy Zzz Xxx ?
t
Yyy
Zzz
Xxx
?
tipo de dato
1ra. Descripcin del campo. (1ra Letra en mayscula)
2da. Descripcin del campo.(1ra. Letra en mayscula)
3ra. Descripcin del campo. (1ra Letra en mayscula)
Nro. Adicional para diferenciar dos campos iguales
Ejemplos: nNumeroDocumento
Donde:
n
Numero
Documento
3.3.
Constraint e ndices
CONSTRAINT PRIMARY KEY (Clave Primaria)
Estructura:
NombreTabla_NombreIndice_CPK
Ejemplo: SI_FinMCliente_CPK
PK_SI_FinEstadoComprobante
CONSTRAINT DEFAULT
Estructura:
NombreTabla_NombreDefault_CDF
Ejemplo: SI_FinMCliente_SI_FinMMatricula_CDF
CONSTRAINT CHECK
Estructura:
NombreTabla_NombreCheck_CCH
Ejemplo: SI_FinMCurso_cCodigoCurso_CCH
INDICES CLUSTERED
Estructura:
NombreTabla_NombreIndice_IXC
Ejemplo: SI_FinMRecibo_nNumRecibo_IXC
INDICE NONCLUSTERED
Estructura:
NombreTabla_NombreIndice_IXN
Ejemplo: SI_FinMRecibo_dFecEmiRec_IXC
3.4.
Vistas
Estructura:
xxxNombreVista_Vis
xxx
Bank
NombreVista
Ejemplo: SI_FinMDireccionCliente_Vis
3.5.
Procedimientos almacenados
Estructura:
XXX_NombreSP_SP
Donde:
Abreviatura del mdulo al que pertenece (ver tabla
de mdulos). Longitud 03 caracteres.
Xxx
NombreSp
SP
Los
Stored
Procedures
deben
nombrarse
con
prefijo
AbreviaturaModulo_. NO usar nunca sp_, La razn porque: SQL
Server reconoce el prefijo sp_ como System Stored Procedure, es
decir, un procedimiento almacenado de Sistema y lo buscara en la
BBDD Master.
3.6.
Triggers
Estructura:
xxx_yyy_NOMBRETABLA_TR
Donde:
XXX Nombre del mdulo
yyy Tipo de desencadenador (Upd, Ins, Del), o la combinacin de
los 3 casos.
Nombre Tabla
Nombre de la Tabla sin el indicador de aplicativo
Ejemplo: CRE_Upd_SI_FinMCliente_tr
3.7.
Declaracin de variables en SQL
Las variables seguirn el patrn de estndares para la declaracin de
campos en tablas BD. Bajo las siguientes consideraciones:
Tipo de Dato
Binary
Character
Date and time
Exact numeric
Approximate
numeric
Integer
Monetary
Special
user-defined
datatypes
Text and image
Tabla N 10.
Tipo de dato de SQL Prefijo
Server
binary[(n)]
b
varbinary[(n)]
b
char[(n)]
c
varchar[(n)]
c
Datetime
d
smalldatetime
d
decimal[(p[, s])]
n
numeric[(p[, s])]
n
float[(n)]
n
Real
Int
Smallint
Tinyint
Money
smallmoney
Bit
timestamp
n
n
n
n
n
n
l
d
udt
Text
Image
Xml
t
I
x
b. Desde la barra de
File/New/Project
men
principal
seleccionar
la
opcin
f.
i.
j.
4.2.
--ESTNDAR c.
CREATE PROCEDURE [dbo].[CRE_RegCobro_SP]
@XmlPlanPagoCobrado
XML
@dFechaSistema
SMALLDATETIME
@nUsuarioSis
INT
,
,
,
@nIdAgencia
@nMoraPagada
@cNroOpera
AS
BEGIN
INT
,
DECIMAL(14,2)
VARCHAR(50)
SET NOCOUNT ON
<CODIGO>
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
--ESTNDAR d.
GRANT EXECUTE ON [dbo].[CRE_RegCobro_SP] TO [ROL_FIN]
GO
2. Para un adecuado control de las fechas de despliegue de los SPs,
FNs y Vistas NO se admite modificaciones a los objetos con
la sentencia ALTER.
3. Cuando se codifiquen SPs, la primera declaracin que se debe
escribir es SET NOCOUNT ON, pues mediante esta sentencia se
minimiza el trfico de red entre el Servidor SQL y las aplicaciones
cliente.
Ejemplo:
CREATE PROCEDURE dba_dbccreindex
@iScanDensIni SMALLINT,--valor del rango inicial del scan density
a corregir
@iScanDensFin SMALLINT,--valor del rango final del scan density a
corregir
@cFrecuencia CHAR(2),--frec. de ejecucion del mtto. (TD: todos
los dias, DO: domingos)
@cDb
VARCHAR(50) --nombre de la BD a la que se hace
el mentenimiento
AS
SET NOCOUNT ON
<CODIGO>
4. Slo se crearn SPs cifrados (opcin WITH ENCRYPTION) si se
justifica la proteccin del cdigo contenido en estos.
Ejm:
INSERT authors
(au_id, au_lname, au_fname, phone, address, city, state,
zip, contract)
VALUES ('409-56-7008', 'Bennet', 'Abraham', '415 6589932',
'6223 Bateman St.', 'Berkeley', 'CA', '94705', 1)
IF @@ERROR = 0
BEGIN
COMMIT TRAN
END
ELSE
BEGIN
ROLLBACK TRAN
END
Try catch
Go to trataerror
7. Las palabras reservadas se deben escribir en maysculas.
Ejemplo:
--LAS PALABRAS RESERVADAS SE ESCRIBEN EN
MAYSCULAS
DECLARE @loginame SYSNAME
SET @loginame = NULL
ROLLBACK TRAN
END
9. Tambin se debe identar las sentencias SELECT que contienen
mltiples lneas.
Ejemplo:
--IDENTADO en mltiples lneas
SELECT e.emp_id, e.fname, e.lname, j.job_desc
FROM employee e
INNER JOIN jobs j
ON e.job_id = j.job_id
WHERE e.hire_date > '1990-01-01'
AND j.min_lvl >= 100
10.Para casos en que se tenga que usar sentencias CASE complejas,
se debern usar mltiples lneas para un mejor entendimiento del
cdigo.
Ejemplo:
--CASE complejos
SELECT
CASE region
WHEN 'WA' THEN 'Phil'
WHEN 'WA' THEN 'Phil'
WHEN 'WA' THEN 'Phil'
ELSE 'Unknown'
END AS Salesman,
CustomerID,
CompanyName,
ContactName
FROM Customers
ORDER BY Salesman
ON E.job_id = J.job_id
WHERE
E.hire_date > '1990-01-01'
AND J.min_lvl >= 100
Codificacin
Para comparar dos strings se debe utilizar el String.Equal
pasndole cmo parmetro el StringComparison para evitar
diferencias entre maysculas y minsculas, as como tambin
las diferentes culturas.
Utilizar String.Empty
en lugar de en lugar de utilizar el
carcter de comilla doble ().
switch ( tipoCorreo )
{
case TipoCorreo.Html:
//hacer algo
break;
case TipoCorreo.TextoPlano:
// hacer algo
}
No utilizar cdigo duro en rutas o letras de dispositivos. Esto
deber ser almacenado en la base de datos.
Correcto:
string direccion;
int salario;
Incorrecto:
string nom;
string domic;
int sal;
El nombre de los mtodos debe decir lo que hace. No uses
nombres engaosos. Si el nombre del mtodo es obvio, no hay
necesidad de documentacin que explique qu hace el
mtodo.
6.2.
En la Base de Datos