EFinanceFactory Andriy Kurhanevych, development group manager.

20
12 th in the Series of Webinars Produced by the National Catholic Partnership on Disability

Transcript of EFinanceFactory Andriy Kurhanevych, development group manager.

Page 1: EFinanceFactory Andriy Kurhanevych, development group manager.

eFinanceFactory

Andriy Kurhanevych, development group manager

Page 2: EFinanceFactory Andriy Kurhanevych, development group manager.

Refactoring project

Old implementation No scalabelity Poor extensibility,

changeability and reuseablity

Antipatterns almost not at all OO no interfaces no basic pattern responsibilities in the

classes are difficult to determine

code duplication ...

Customer needed Scalability Better extensibility,

changeability, reuseability High decoupling between

business logic and user interface

Page 3: EFinanceFactory Andriy Kurhanevych, development group manager.

Project goals

Scalability Maintainability Extensibility Internationalization Additional business rules

New Architecture

eFinanceFactory

Additional features

Page 4: EFinanceFactory Andriy Kurhanevych, development group manager.

Project profile and phases

Requirements

Architecture basis

Prototype

Full migration of the DCB web site

Migration of all other Web-Applications

eFF1.1

eFF 1.2

eFF 2

Internationalization

eFinanceFactory

Size > 5 PY

Length 54 weeks

Begin December 2001

End January 2003

Page 5: EFinanceFactory Andriy Kurhanevych, development group manager.

Distributed development

Customer (DCB)

ULYBIN (2) New Ground (2)

Continental Software (3)

Maximal Solution (2)

- Management - Analysis- Design- Implementation- Testing

- Implementation- Testing

- Implementation- Testing

- Management - Analysis- Testing- Deployment

Page 6: EFinanceFactory Andriy Kurhanevych, development group manager.

Phase development process Tasks and problems management Web Tool

MS-Project plan

Software Architecture Document

Requirements Specification

Rational Rose UML model

Release Notes

Test cases

Technical Acceptance Document

Requirements management

Design

Management

Automated Deployment Procedure (based on Jakarta Ant)

Deployment

Customer (DCB)

Code Review

Web Repository (IIS + FrontPage Server Extension)

Implementation

Keystone

define and assign tasks

Continental Software (3)

ULYBIN (2)

Technical Acceptance

Automated Unit Tests (JUnit)

Rational Robot JTesting

(based on DCB standards and IEEE templates)

Page 7: EFinanceFactory Andriy Kurhanevych, development group manager.

Web-based development

Tasks and defects management Web Tool (Keystone) Tracking tasks and problems Priorities management Automated e-mail notification

Documents and sources Web repository (IIS 5.0 + FrontPage extension) Versions management Checkin/checkout per Internet

Page 8: EFinanceFactory Andriy Kurhanevych, development group manager.

Development platform Technologies:

J2EE: JDK1.2.2,, EJB 1.1, JSP 1.1 Web technologies: Java Script, XML, XSLT

Application and Web servers: IBM WebSphere Advanced Server 3.5.3 (target) Jboss 2.4.3, Tomcat 3.2.3 (for quick development only)

Database: Oracle 8.2

Tools: MS Project 2000 MS Visual Studio 6.0 IIS 5.0 + FrontPage extension Rational Rose 2000 Rational Robot J 2000 Keystone Jakarta Ant 1.4

Page 9: EFinanceFactory Andriy Kurhanevych, development group manager.

Example of iteration plan

Task names contain numbers of the corresponding tasks in the Keystone

Page 10: EFinanceFactory Andriy Kurhanevych, development group manager.

Save calculation Send calculation per emailPrint calculation

Calculate via direct access

External Application

Pass calculation on

CalculationType

productClassID : intcustomerTypeID : int

(from calculationdata)

User

(from Use Case View)...)

Choose calculation type

+edit

Input parameters

<<include>>

Display action info

CalculationResult

installment : floatisActionApplied : booleanactionIdentity : FPActionIdentity

(from calculationdata)

Display Vehicle Image and links

<<include>>

Calculation data operation

CalculationInput

vehiclePrice : floatdeposit : floatvehicleIdentifier : VehicleIdentifiercurrencyID : StringcontractTerm : intisDepositMethodPercent : booleanresultCurrencyValuesFractionPrecisionresultPercentageValuesFractionPrecision

(from calculationdata)

+input/edit

Input desired installment

Abstract Calculation

+Chooses implementation

<<include>>

Display calculation data <<extend>>

<<include>>

+display

<<include>> <<extend>>

+display

Calculate by installment <<include>>

<<include>>Calculate

<<include>>

<<include>>

<<extend>>

Find Finance Product

<<include>>

Example of Use Case Diagram Calculation functionality common for all calculation types (determined by customer type and product class)

Set of input/output parameters and calculation logic depend on the calculation type

Page 11: EFinanceFactory Andriy Kurhanevych, development group manager.

Example of Use Cases analysis Calculation types hierarchy and common parts

Abstract Calculation

(from AbstractCalculation)

Financing

PrivateLeasing

AbstractFinancing

Plus3Financing

AbstractLeasing

<<include>>

Leasing

<<include>>

PrivateFinancingPrivateAbstract Financing

<<include>>

PrivatePlus3Financing

<<include>>

BusinessFinancing BusinessPlus3 Financing

BusinessAbstract Financing

<<include>>

<<include>>

BusinessCalculation

<<include>>

BusinessLeasing

<<include>>

Page 12: EFinanceFactory Andriy Kurhanevych, development group manager.

Example of input page

Page 13: EFinanceFactory Andriy Kurhanevych, development group manager.

Example of output page

Page 14: EFinanceFactory Andriy Kurhanevych, development group manager.

J2EE platform architecture

Internet explorer WebSphere cluster Oracle

Page 15: EFinanceFactory Andriy Kurhanevych, development group manager.

Middle tier architecture

com.dcb.eff.gci.ui

financefactory

JSP

com.dcb.eff.gci

...gci.facade

...gci.sessionfacade...entities

Business Delegate EJB pattern:- hides all EJB implementation details- minimizes coupling between presentation-tier and business services

Session Facade EJB pattern:- hides persistence implementation details (entity beans)- reduces number of remote method invocations between client and server

Generate XML, XSLT

... ... ...

Page 16: EFinanceFactory Andriy Kurhanevych, development group manager.

Example of EJB patterns use

CalculatorFacadeServiceLocator

<<static>> getCalculatorServiceHome()<<static>> getCalculatorBusinessDataServiceHome()<<static>> getInitialContext()

(from ...gci.sessionfacade)

CalculationInput

vehiclePrice : floatdeposit : floatvehicleIdentifier : VehicleIdentifiercurrencyID : StringcontractTerm : intisDepositMethodPercent : booleanresultCurrencyValuesFractionPrecisionresultPercentageValuesFractionPrecision

(from calculationdata)

CalculatorInputRelatedBusinessData Interface

getProductClassName()getCustomerTypeName()

getCurrencyName()getVehicleInfo()

getVehicleURLs()getVehicleMakeName()

getVehicleMainGroupName()getVehicleModelName()

getTermRange()getVehicleMakeIdentities()

getVehicleMainGroupIdentities()getVehicleModelIdentities()getVehicleTypeIdentities()

CalculationType

productClassID : intcustomerTypeID : int

(from calculationdata)

CalculatorInterface

setCalculationType()getCalculationType()

setCalculationInputAndType()setDefaultDepositPctByCalculationTypeChange()

setDefaultVehicleForMainGroup()setDefaultVehicleForMake()setDefaultVehicleForModel()

getCalculatorInputRelatedBusinessDataInterface()load()save()

S

CalculatorService

<<HomeMethod>> create()<<HomeMethod>> create()

(from ...gci.sessionfacade)...)

CalculatorBeancalculatorService : CalculatorServicecalculationType : CalculationTypecalculationInput : CalculationInputcalculationResult : CalculationResultruleBrokenException : CalculatorRuleBrokenException

CalculatorBean()getCalculatorRuleBrokenException()isDefaultDepositPctByCalculationTypeChange()

<<EJB-reference>>

<<obtain>> 1

<<use>>

S

FinanceFactoryStateful Calculator

setDimension()calculateDimension()getRuleViolations()

getDimension()getViolatingRuleDimensionNames()

getFloatDimensionRange()<<HomeMethod>> create()

(from services)

FinanceCore(from financefactory)

FinanceProductPK

productName : StringproductVersion : String

(from businessdata)

CalculationInterface

setCalculationInput(calculationInput : CalculationInput) : voidgetCalculationInput() : CalculationInput

setDefaultDepositPctByVehicleChange(value : boolean)calculate() : void

calculateByInstallment(installment : float) : voidisCalculated() : boolean

getCalculationResult() : CalculationResult

CalculationResult

installment : floatisActionApplied : booleanactionIdentity : FPActionIdentity

(from calculationdata)

FPActionIdentity

actionName : StringactionNumber : String

(from businessdata)

FPActionInfo

actionDescription : StringvalidFrom : TimestampvalidTo : TimestampvalidForNew : booleanvalidForVorfuehr : booleanvalidForUsed : boolean

(from businessdata)

FinanceProductValue

isAction : booleanusage : byteleasfin : bytebaseProduct : Stringintext : byteproduct : Stringsort : intproductVersionElu : StringvalidForJahresWagen : booleanvalidForAVRueckLaeufer : booleankulanzSplitting : int

(from ...entities)

E

FinanceProduct

getData()getActionIdentity()

getActionInfo()<<HomeMethod>> findActionsByCalculationTypeAndTerm()

<<HomeMethod>> findByCalculationTypeAndVehicleTypeAndTerm()

(from ...entities)

Business Delegate

Service Locator

Session Facade

Value Object

<<use>>

<<use>>

Page 17: EFinanceFactory Andriy Kurhanevych, development group manager.

Example of GoF design patterns use

AbstractFinancingCalculator

FinancingCalculator

PrivateLeasingCalculatorPrivateFinancingCalculatorPrivateAbstractFinancingCalculation PrivatePlus3FinancingCalculator

BusinessFinancingCalculatorBusinessAbstractFinancingCalculation BusinessPlus3FinancingCalculator BusinessLeasingCalculator

BusinessCalculation

Plus3FinancingCalculator LeasingCalculator

AbstractLeasingCalculation

CalculationInterface

setCalculationInput()getCalculationInput()

setDefaultDepositPctByVehicleChange()calculate()

calculateByInstallment()isCalculated()

getCalculationResult()

(from ...gci.facade)

InclCalculation

CalculationDataHandlingStrategy

setFFCalculatorInput()getFFCalculatorOutput()

handleBrokenRules()

CalculatorPrimitiveOperations

getFinanceProducts()getCheapestCalculationComparator()

getCalculationResultClass()calculateDeposit()

CalculatorTemplateMethods

calcPrimitiveOperations : CalculatorPrimitiveOperationscheapestFinanceProduct : FinanceProduct

calculate()calculateForFP()getUsedFinanceProduct()calculateForFPByInstallment()

AbstractCalculator

calculationInput : CalculationInputcalculationResult : CalculationResultisCalculated : boolean

getProductClassID()getCustomerTypeID()getCalculationInputClass()getDefaultDepositPercentage()

CalculatorServiceBean

calculationType : CalculationType

<<EJBSessionBeanImpl>>

StrategyTemplate Method

Page 18: EFinanceFactory Andriy Kurhanevych, development group manager.

Example of Sequence Diagram

: User : edit_calculation_input.jsp : CalculatorBean

The class of the CalculationInput is changed. If vehicle is not allowed for the new calculation type then it is changed to default allowed value.

All entered parameters are passedredirect = "edit_calculation_input.jsp"

Form changes: - new set of fields (according to class of CalculationInput)- new product class or customer type- possibly new vehicle model and type lists, vehicle, terms list and term

change product class or customer type

: edit_calculation_input_ctrl.jsp

request

fillCalculationTypeFromRequest(CalculationType)

include sequence 'GetCalculationInputFromRequest'

setCalculationInputAndType(CalculationInput, CalculationType)

redirect

include sequence 'DisplayCalculationData'

getCalculationType( )

Page 19: EFinanceFactory Andriy Kurhanevych, development group manager.

Automated unit testing

Testing class for each business case and each significant parameter set

Near 100 testing classes in the project Automatic script running all test cases and

informing on errors Daily cross-testing between developers

teams

Page 20: EFinanceFactory Andriy Kurhanevych, development group manager.

Testing automation with Rational Robot J

Automated black-box testing of user interface Separate tests of all business cases and all

parameter sets Automatic script running all tests nightly

Page 21: EFinanceFactory Andriy Kurhanevych, development group manager.

Quality assurance

Tasks and defects management system (Keystone) Tracking tasks and defects Priorities management

Version management system (sources web repository)

Analysis and design UML model Many EJB and GoF design patterns

Code review and refactoring Automated testing

Automated unit testing (JUnit) Automated testing of user interface (Rational Robot J)