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 Project goals eFinanceFactory New Architecture Scalability Maintainability Additional features Extensibility Internationalization Additional business rules Project profile and phases Size > 5 PY Length 54 weeks Begin December 2001 End January 2003 Requirements eFF1.1 Architecture basis Prototype Full migration of the DCB web site eFinanceFactory eFF 1.2 Internationalization eFF 2 Migration of all other Web-Applications Distributed development - Management - Analysis - Testing - Deployment Customer (DCB) Continental Software (3) Maximal Solution (2) ULYBIN (2) - Implementation - Testing - Management - Analysis - Design - Implementation - Testing New Ground (2) - Implementation - Testing Phase development process (based on DCB standards and IEEE templates) Tasks and problems management Web Tool define and assign tasks Keystone Management Customer (DCB) MS-Project plan Continental Software (3) Requirements management Requirements Specification Design Software Architecture Document Rational Rose UML model ULYBIN (2) Web Repository (IIS + FrontPage Server Extension) Implementation Testing Automated Unit Tests (JUnit) Deployment Technical Acceptance Rational Robot J Test cases Automated Deployment Procedure Release Notes (based on Jakarta Ant) Code Review Technical Acceptance Document 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 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 Example of iteration plan Task names contain numbers of the corresponding tasks in the Keystone 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 Example of Use Cases analysis Calculation types hierarchy and common parts Abstract Calculation (from AbstractCalculation) AbstractFinancing AbstractLeasing <<include>> Financing Plus3Financing <<include>> Leasing <<include>> <<include>> PrivateAbstract Financing PrivateFinancing PrivatePlus3Financing PrivateLeasing <<include>> <<include>> BusinessAbstract Financing BusinessFinancing BusinessPlus3 Financing <<include>> <<include>> BusinessCalculation BusinessLeasing Example of input page Example of output page J2EE platform architecture Internet explorer WebSphere cluster Oracle Middle tier architecture ... Generate XML, XSLT JSP com.dcb.eff.gci .ui ... com.dcb.eff.gci ...gci.facade Business Delegate EJB pattern: - hides all EJB implementation details - minimizes coupling between presentation-tier and business services ...gci.sessionfacade ...entities financefactory Session Facade EJB pattern: - hides persistence implementation details (entity beans) - reduces number of remote method invocations between client and server Example of EJB patterns use Example of GoF design patterns use Example of Sequence Diagram : User : edit_calculation_input.jsp change product class or customer type : edit_calculation_input_ctrl.jsp : CalculatorBean request getCalculationType( ) All entered parameters are passed redirect = "edit_calculation_input.jsp" fillCalculationTypeFromRequest(CalculationType) include sequence 'GetCalculationInputFromRequest' setCalculationInputAndType(CalculationInput, CalculationType) redirect include sequence 'DisplayCalculationData' 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 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. 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 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 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)