MacroHard's Detailed Design Document for BCI Project



Table of Contents:


Search for Product:

This window is opened by clicking on the [Search] button on the Product List window. The purpose of this window is to allow users to locate a specific product in the product list if they already know all or part of the product's name or ID number.

Window Title: Search for Product



    Text in window: "Enter a Product Name and/or Product ID# to search for:"
    Button: [Help]
      Function: User clicks on this button to access the on-line help facility.
      Bad input: none

      begin pseudocode (On Click event)
        open "Product Filter Help" form;
      end pseudocode

    Button: [Done]
      Function: User clicks on this button to execute the search with the given parameters (in the Name and Product ID fields). The record in the Product List that matches the selected name or ID will be at the top of the screen when the Search for Product window closes. If no selection has been made, the Product List window will be unchanged.

      begin pseudocode (On Click event)
        If the selected Product ID is not null
          Set the Product List Product ID on the "Product List" form to match the Product ID in this window;
        end if
        requery the Product List on the Product List form;
        close form;
      end pseudocode

    Button: [Cancel]
      Function: Clear data in entry fields and return to Product List window without any changes to the position in the list.
      Bad input: none

      begin pseudocode (On Click event)

        close form;
      end pseudocode

    Entry field (combo box): Product Name
      Function: User enters a string of characters to search for in the product list.
      Type of input: character, not case sensitive
      Default value: blank
      Bad input: A string of characters that doesn't match the beginning of any product name. The user will not be able to exit this field until they have either selected a valid product name or reset the field by pressing the key. If they try to do so, a beep will sound and an error message will appear.

      Query Description:

        Fields: Product Name and Product ID from the Product table Sort Order: Ascending by Product Name Displayed field: Product Name

        begin pseudocode (Before Update event)

          if input does not match anything in the list
            Display message box with message "You must select a product name in the list, or press
            to reset the field";
            Cancel update;
          end if
        end pseudocode

        begin pseudocode (After Update event)

          Set the value of the Product ID field to match the selected product;
        end pseudocode

    Entry field (combo box): - Product ID
      Function: User enters a string of numeric characters to search for in the product list.
      Type of input: numeric characters only (0-9)
      Default value: blank
      Bad input: Any sequence of characters that doesn't match the beginning of an existing product ID. This field will behave similarly to the Name field.

      Query Description:

        Fields: Product ID and Product Name from the Product table Sort Order: Ascending by Product ID Displayed field: Product ID

        begin pseudocode (Before Update event)

          if input does not match anything in the list
            Display message box with message "You must select a product ID in the list, or press to reset the field";
            Cancel update;
          end if
        end pseudocode

        begin pseudocode (After Update event)

          Set the value of the Product Name field to match the selected product;
        end pseudocode

      Help:
        1. Search by name for a product:
          Enter all or part of a name in the Name field, and click on the [Done] button. This will return you to the Product List window with the first matching product at the top of the screen.
        2. Search by product ID:
          Enter all or part of the product ID in the Product ID field, and click on the [Done] button. This will return you to the Product List window with the first matching product at the top of the screen.

        begin pseudocode (On Click event)

          open "Product Search Help" form;
        end pseudocode



Filter Product List:

This window is opened by clicking on the Filter button in the Product List window. The purpose of this window is to allow users to restrict the products shown in the Product List window to those products which match certain types or price ranges.

    begin pseudocode (On Open event)
      set FilterTypeCriteria = ProductTypeCriteria;
      set SQL for Displayed Types to display types allowed by FilterTypeCriteria;
      requery Displayed Types;
      set SQL for Filtered Types to display types not allowed by FilterTypeCriteria;
      requery Filtered Types;
      set From Price field = ProductFromPrice;
      set Through Price field = ProductThroughPrice;
    end pseudocode


Testing Documentation


Testing Documentation


Testing group:

    Joon-Sae Park
    Chuck Pugh
    Scott Jensen
    Jason Archibald

Introduction:

The central objectives surrounding our testing are to ensure that our system is assembled with as few logical defects as possible, and to minimize the number of programming bugs and glitches in our system. Our most extensive testing will be the unit testing of each individual screen. Once we are sure that each screen is up and running to its highest potential, we will be able to assemble the pieces to form the complete system. As the pieces are completed and individually tested, each step of the integration process will be likewise tested for compatibility amongst components. This integration testing will be of the utmost importance to make sure that the system can function as a whole. When all of the tests have been completed, all bugs fixed and all errors in logic have been worked out, we will put the system through two more types of testing. These will include passing a set of walkthrough "real life" scenarios that may occur in connection with our system. This acceptance testing will be followed up by usability tests done by subjects working with our system. Through watching these subjects work with the system that we have created, we will be better able to determine if there are any areas that need reconsideration before our product is released for use in the offices of BFI.

We have established programming and testing schedules that involve members from every division of our team. It is our feeling that there may be issues which our programmers and/or design teams have overlooked or can't see due to their closeness to the project. Hence other members of our team will be closely involved in the testing of our system to help discover additional problems and errors. This will directly boost the quality of the system being built for BFI.

Objectives:

Our principal objective is to make sure the system is of the highest functional quality possible. This will be achieved by meeting the following objectives:

    - proper functioning of individual modules
      - each screen functions properly as set out in the specifications

    - proper integration between modules

      - intercommunication and functionality
      - will be achieved through integration testing

    - correct logic

      - the system functions the way we describe it in the design document
      - will be achieved through acceptance testing (demo) and real life walkthroughs

    - elimination of bugs and faulty code

      - achieved through all levels of testing that we plan to implement on the system

Unit Testing:

We have broken the system down into five basic modules, each of which will be tested individually after it has been coded, before its final integration into the system. The five modules consist of the Main Menu screen, the Product List screen, the Customer Information screen, the Order Information screen, and the Route List screen. Each of these modules must have its individual components tested, such as buttons, fields and dialog boxes. There also exists the underlying "behind the scenes" functionality associated with each model which must be tested extensively to verify correct data flow within the system. This deeper aspect of the system will be covered in more detail under integration testing.

Our unit tests are organized into sections divided by the window. For example, all the unit tests for the buttons and fields associated with the Customer Information Window would be described under the heading Customer Information Window.

Buttons:

    Button - the name of the button
    Success - a brief description of a successful test
    Test - a description of a testing procedure

In cases where the Test section is empty, to test that button just press it.

Fields:

    Field - the name of the field
    Edit - a brief description of a successful test for editing.
    ETest - the test associated with the editing feature of this field.
    DClick - what should happen if it is doubled clicked?
    DTest - the test associated with the testing feature of this field.

The Edit, and Etest will only appear in instances where the field can be edited. In all other cases the field cannot be edited. To test these fields, try to type something into that field. A success would be if nothing happens.

The DClick, and Dtest will only appear in instances where something is supposed to happen when that field is double clicked. In all other cases to test the field double click on the field. If nothing happens, then it is a success.

This means that many of the test descriptions will only have a field name. This means that it cannot be edited and nothing should happen when you double click it, ie. it's only purpose is to display information. So to test these, just make sure that the fields have the correct information in the correct format.


Customer Information Window:


Buttons:

Button: NEW

    Success:
      If all the fields are cleared, allowing the user to enter the corresponding information into the appropriate fields.
    Test:
      This can be checked by searching again for the old record and making sure that any changes made were saved.

Button: DELETE

    Success:
      If a dialog box pops up asking the user to confirm the deletion (and warning them that all the customer's orders will be deleted as well), after which the user responds.
        - Yes. then the currently displayed record should no longer be contained in the database, and all the associated orders and line items will be deleted as well. (If this is a new record that hasn't yet been saved, the fields will just be cleared.)
          - Test:
            This can be checked by performing a search for this record. If the search turns up empty then it has passed the test. The Order and Line Item tables should be examined as well to make sure that the customer's orders have been deleted.

        - No. then the currently displayed record should still be on the screen, and should still be in the database.

          - Test:
            This can be checked by performing a search for this record. If the search finds this record, then it has passed the test.

Button: SEARCH

    Success:
      If the search customer dialog window pops up, then this button performs correctly.

Button: PRINT

    Success: If a print dialog box pops up.

Button: HELP

    Success:
      If the help window pops up with information pertaining to the customer information window.

Button: UNDO

    Success:
      If a message box appears asking the user to confirm this action. If the user responds Yes, all the information returns to the state at the last save, otherwise the record remains unchanged.
    Test:
      This can be checked by first saving the current customer, making a few changes to some of the records, and then pressing UNDO. Try both confirming and not confirming the operation.

Button: DONE

    Success:
      If the customer information window closes, and any changes are saved.
    Test:
      This can be checked by first changing address, and then pressing DONE. Re-enter the customer information window, and search for that customer. If the address has kept the changes, then this button works.

Button: CANCEL

    Success:
      If a message box appears asking the user to confirm this action. If the user responds Yes, the customer information window closes, and none of the changes are saved, otherwise the customer information window remains open, with the changes still intact.
    Test:
      This can be checked by first changing the address, and then pressing CANCEL and confirming the operation. Re-enter the customer information window, and search for that customer. If the address is the same as the one before the change was made, then this button works. (Also try not confirming the operation.)

Button: NEW ORDER

    Success:
      If the order information window opens with a new record. (If the current record is a new record that hasn't been saved, a message box will appear asking the user if they want to save the record. If they respond Yes, then the record should be saved and the order information window opened, otherwise they should remain in the customer information window. The customer record must have been created before the order information window can be opened.)
    Test:
      (1) Click on this button from a previously saved customer record.
      (2) Click on this button from a new customer record that hasn't been saved yet, and confirm that it should be saved. Then search for the record.
      (3) Click on this button from a new customer record that hasn't been saved yet, and don't allow it to be saved.

Button: EDIT ORDER

    Success:
      If the order information window pops up with the selected order information. If no order has been selected, then this button should display a message box telling the user to select an order.


Fields:

Field: ID

Field: CUSTOMER NAME

    Edit:
      Customer's name should change.
    ETest:
      Click on the customer field and type in a different name.

Field: CONTACT

    Edit:
      Contact should change.
    Etest:
      Click on the contact field and type in a different contact name.

Field: PHONE-NUMBER

    Edit:
      Phone number should change.
    Etest:
      Click on the phone-number field and type in a different phone number.

Field: ADDRESS

    Edit:
      Address should change.
    Etest:
      Click on the address field and type in a different address.

Field: CITY

    Edit:
      City should change.
    Etest:
      Click on the city field and type in a different city.

Field: PROV

    Edit:
      Province should change.
    Etest:
      Click on the prov field and type in a different province.

Field: COUNTRY

    Edit:
      Country should change.
    Etest:
      Click on the country field and type in a different country.

Field: POSTAL-CODE

    Edit:
      Postal-code should change.
    Etest:
      Click on the postal-code field and type in a different postal-code.

Field: SECTOR (Combo box)

    Edit:
      If user enters something not in the list and then tries to enter a different field a message box should pop up telling user to choose something from the list.
      If user enters something in the list then it should keep that new sector in the field when you click on some other field.
    Etest:
      Click on the sector field and type in something that is not in the list and then click on the city field. Click on the sector field and type in something that is in the list and then click on the city field.

Field: CREDIT-LIMIT

    Edit:
      If the credit-limit changes. Further it should only accept numbers.
    Etest:
      Click on the credit-limit field and type in a number. Also try typing non-numerical characters.
    Success:
      If non-numerical characters are entered, a beep should be heard and a message displayed when the field is exited.

Field: COMMENTS

    Edit:
      Comments should change.
    Etest:
      Click on the comments field and type in some comments.

Field: ORDER INFORMATION LIST (list box)

    DClick:
      The order information window should pop up with the associated information.
    Dtest:
      Double click on one of the orders.


Customer Information Print Box


Buttons:

Button: HELP

    Success:
      If the help window pops up with help about this window

Button: DONE

    Success:
      - If a selection is made, prints the selected reports in the correct formats with information from the customer record currently displayed in the customer window, then closes the window. (For demonstration purposes, displaying the text in print preview will be sufficient.)
      - If no selection is made, a message box appears advising the user to make a selection or press CANCEL.

Button: CANCEL

    Success:
      Closes the window.

CheckBox: PRINT CUSTOMER INFORMATION

    Success:
      If the customer information is displayed in a print preview format. (After pressing DONE)

CheckBox:PRINT CUSTOMER'S RECENT ORDERS

    Success:
      If the most recent order is displayed in a print preview format. (After pressing DONE)


Customer Information Search Box


Buttons:

Button: HELP

    Success:
      If the help window pops up with help about customer search.

Button: DONE

    Success:
      Closes the box, and the selected customer (if any) is displayed in the customer information window. If no customer is selected, the customer information window will be unchanged.

Button: CANCEL

    Success:
      If this window closes and the customer information window has not changed from the time when we entered the search window to the time when we exited it.

Fields:

Field: CUSTOMER ID, COMPANY NAME, CONTACT NAME, PHONE NUMBER

    Edit:
      The closest match to what we type should be displayed in any of these fields that we edit (sorted by the appropriate field) and all the fields should be updated to display the information for the same customer when one field has been edited.
    Etest:
      Click on each of the fields, making a different selection in each.


Product List Window


Buttons:

Button: PRINT

    Success:
      A list of all products currently listed in the product list window is printed (displayed in print preview).

Button: SEARCH

    Success:
      Opens the Search for Product window.

Button: FILTER

    Success:
      Opens the filter product window.

Button: HELP

    Success:
      Opens the help window with information about the product list window.

Button: ADD TO ORDER

    Success:
      **Note that this button is grayed out and disabled unless the Product List window was invoked from the Order Information window and an item in the product list listbox is highlighted.
      - If the product is not on the order, adds the selected product to the current order.
      - If the product is already on the order, displays a message box notifying the user of this.
    Test:
      Click on one of the products in the list box, and then click on this button. Try adding a product twice.

Button: DONE

    Success:
      Should close this window.


Fields:

Field: PRODUCT LIST

    DClick:
      **If the window was invoked from the order information window, then it should add the selected product to the current order, ie. it should perform same action as ADD TO ORDER button. Otherwise, nothing should happen.
    Dtest:
      Double click on one of the products in the list box.


Filter Product List Window


Buttons:

Button: DONE

    Success:
      - If FROM PRICE > THROUGH PRICE, displays an error message advising the user.
      - If all types are displayed in the FILTER list box, displays an error message advising the user that they have chosen to filter out all product types.
      - If no products are found that pass the filter criteria, displays a message advising the user. - Otherwise closes the window and returns to the Product List.
    Test:
      Try this button with various combinations of filter criteria.

Button: CANCEL

    Success:
      Should close this window, and return to the Product List window, with no changes made, ie. the information in the product list window from before entering this screen and after exiting should be the same.

Button: HELP

    Success:
      A help window should open up with information about the filter product list window.

Button: >

    Success:
      This button is greyed out and disabled unless an item in the left box is highlighted. If so, a single click on this button will move that item into the right box.
    Test:
      Click on the button with an item highlighted, and with no items highlighted.

Button: < (Identical to > except in opposite direction.)


Fields:

Field: FILTER

    Single click:
      Highlights that item.
    DClick:
      Will move associated item to the other box.
    Test:
      Click on the item while another item is highlighted, while no items are highlighted, and while that item is highlighted. Double click on an item under the same conditions.

Field: SELECTION (Identical to Filter except in opposite direction.)

Field: FROM PRICE

    Success:
      Accepts numbers, doesn't accept other characters.
    Etest:
      Try entering both numerical and non-numerical characters.

Field: THROUGH PRICE

    Success:
      Accepts numbers, doesn't accept other characters.
    Etest:
      Try entering both numerical and non-numerical characters.


Search for Product Window


Buttons:

Button: DONE

    Success:
      Should close this window and return to the Product List window, with the matching record at the top of the list.
    Test:
      Click on the button under the following conditions:
        1. A product ID has been selected.
        2. A product name has been selected.
        3. No information has been entered in either field.

Button: CANCEL

    Success:
      Should return to the Product List window, with no changes made. The product list will be identical to what it was before the Search window was invoked.
    Test:
      Same as for DONE button above.

Button: HELP

    Success:
      Should open the help window with information about the search for product window.


Fields:

Field: PRODUCT ID

    Edit:
      Should display the closest matching product in order by product ID. If there is no match for the user's entry, should display an error message when the user tries to leave the field. When the field is exited, the PRODUCT NAME field should be updated to display the corresponding product name.
    ETest:
      Type in both an existing and a non-existing product ID, then try exiting the field.
    Field:
      PRODUCT NAME (Same as for the Product ID)


Order Information Screen


Buttons:

Button: PRINT

    Success:
      Prints (in print preview) the order information currently displayed on the screen. If the current record is a new one that hasn't been saved, it will ask the user if the want the record to be saved first. If they respond "Yes", then the record will be saved then printed, otherwise they remain in the order information screen and nothing is printed.

Button: DELETE ORDER

    Success:
      Displays a message box to confirm the deletion. Deletes the order and the related line items if the user confirms the deletion, and doesn't otherwise. (If the order is a new one that hasn't been saved, it will just clear the fields.)

Button: NEW ORDER

    Success:
      The information shown in the order form is removed, and the user will be presented with a fresh screen to enter a new order.

Button: HELP

    Success:
      A help window with information about the order information screen should pop up.

Button: VIEW PRODUCT LIST

    Success:
      The Product List window pops up with the ADD TO ORDER button and double clicking enabled (Refer to Product list window in preceding section)

Button: DONE

    Success:
      Closes the order information screen and saves all information about the current order.
    Test:
      Make an order and press the DONE button. Reenter the order information screen by double clicking on this order in the order list box. Verify that all information is correct prior to pressing the DONE button.

Button: CANCEL

    Success:
      The CANCEL button should first present a message to the user informing them that they will lose the most recent changes to the information on the screen.
      If the user decides to proceed with the operation, then the screen will be exited and no changes will be saved.
      Otherwise it should just remain on the order information screen with no information changed.
    Test:
      Press cancel button.
        1) Proceed with cancellation and then retrieve this order to verify that changes were not saved.
        2) Do not proceed with cancellation and verify that all information on screen is the same as before pressing the cancel button.

Button: DELIVERED TODAY

    Success:
      The current date is displayed in the DATE DELIVERED field.


Fields:

Field: ORDER ID

    Edit:
      Should not be editable (assigned automatically by MS Access).
    Etest:
      Verify that this is not editable.

Field: ORDER DATE

    Edit:
      Should not be editable.
    Etest:
      Verify that it is not editable and that it automatically puts in the current date when a new order is created.

Field: DATE DELIVERED

    Edit:
      It is important that the field only accept input according to one of the valid date formats, and that it only accept dates less than or equal to the current date.
    ETest:
      Click on the date delivered field and try typing both acceptable and unacceptable date formats.

Field: NEXT ORDER DATE

    Edit:
      Should only accept valid date formats for dates greater than or equal to the current date. If this field is blank when the order is marked as delivered, this should automatically be filled in with a date obtained by taking the difference between the delivery dates for this order and the last one and adding it to this order's delivery date (if there is no previous order, it will prompt the user for a date).
    ETest:
      (1) Click on the next order date and try entering both valid and invalid dates.
      (2) Leave this field blank when marking the order as delivered when there is a previous order.
      (3) Leave this field blank when marking the order as delivered when there is not a previous order.

Field: PRODUCT NAME

    Edit:
      The system must look at all input, and verify whether or not it is a valid product name. If it is not a valid name, the system should inform the user of the problem. If the name is valid, the system should then proceed to fill in the fields id, type, product number, and price/unit automatically according to the information in the data tables. If the Product ID is filled in instead by the user, the system should then fill in the appropriate product name.
    ETest:
      Click on product name field and try to type in a valid product name, and then try typing an invalid product name.

Field: PRODUCT ID

    Edit:
      The system must look at all input, and verify whether or not it is a valid product id. If it is not a valid id, the system should inform the user of the problem. If the id is valid, the system should then proceed to fill in the fields name, type, product number, and price/unit automatically according to the information contained in the data tables. If the product name has been filled in instead by the user, the system should then fill in the appropriate product ID.
    ETest:
      Click on the product id field and then try typing in a valid product id and then an invalid one.

Field: TYPE

    Test:
      Verify that the correct product type is displayed automatically when a product name or ID is selected and that the field can't be edited.

Field: PRICE/UNIT

    Test:
      Verify that the correct price/unit is displayed automatically when a product name or ID is selected and that the field can't be edited.

Field: QUANTITY

    Edit:
      Must be entered by user, and must be a positive integer. When a quantity has been entered, the appropriate quantity discount (if any) should be displayed automatically in the QUANTITY DISCOUNT field, e.g. 10% for orders of 10 boxes or more, and 15% for orders of 50 boxes or more.
    ETest:
      Try adding products without putting in a quantity, making invalid entries, and entering different quantities (with different discounts).

Field: DISCOUNT $

    Edit:
      Should only be editable by an administrator (not implemented in this version, so the field will be non-editable always).
    ETest:
      Ensure that field is filled in based on value set in admin section (the value will be placed directly in the table for this version).

Field: PRODUCT TOTAL

    Test:
      Check that this equals (1 - quantity discount) * product price * quantity. This should be non-editable.

Field: SUB-TOTAL

    Test:
      Check that this equals the sum of the product totals. This should be non-editable.

Field: DISCOUNT (PERCENT)

    Test:
      This field should be non-editable in this version (in a later version, administrators will be able to edit it). For testing, we will put a value directly in the table.

Field: DISCOUNT (DOLLARS)

    Test:
      Check that this equals (DISCOUNT * SUB-TOTAL). It should be non-editable.

Field: SHIPPING & HANDLING

    Test:
      Check that this equals the distance to the customer's sector multiplied by the shipping rate (which is hard-coded in this version). It should be non-editable.

Field: TAX 1 (PERCENT)

    Test:
      This field should be non-editable and display the appropriate value (hard-coded in this version).

Field: TAX 1 (DOLLARS)

    Test:
      Check that this equals (TAX1 (PERCENT) * (SUBTOTAL - DISCOUNT (DOLLARS) + SHIPPING & HANDLING)). It should be non-editable.

Field: TAX 2 (PERCENT)

    Test:
      This field should be non-editable and display the appropriate value (hard-coded in this version).

Field: TAX 2 (DOLLARS)

    Test:
      Check that this equals (TAX2 (PERCENT) * (SUBTOTAL - DISCOUNT (DOLLARS) + SHIPPING & HANDLING + TAX1 (DOLLARS))). It should be non-editable.

Field: GRAND TOTAL

    Test:
      Check that this equals SUBTOTAL - DISCOUNT (DOLLARS) + SHIPPING & HANDLING + TAX 1 (DOLLARS) + TAX 2 (DOLLARS). It should be non-editable.

Field: BALANCE OWING

    Edit:
      This field should only accept numbers as input and should display them in a currency format.
    Etest:
      Try entering both numeric and non-numeric characters.


Route List Window


Buttons:

Button: HELP

    Success:
      The help window window pops up with information about the route list window.

Button: EDIT CUSTOMER

    Success:
      The Customer Information window pops up with all of the selected customer's information filled in, for the user to change at their own discretion.
    Test:
      Highlight a customer in the Route List Display Area, then click the Edit Customer Button.

Button: DONE

    Success:
      The window closes and returns to the previous window, all changes are saved.

Button: PRINT

    Success:
      The Print Box pops up, prompting the user what to do.


Fields:

Field: ROUTE LIST DISPLAY

    Success:
      After clicking on a customer, it becomes highlighted. After clicking on the active field pertaining to a customer, then that field is toggled on or off.
    Test:
      Click on a customer.
      Click on a customer's active field.


Print Box


Buttons:

Button: HELP

    Success:
      A help window pops up with information about the route list print box.

Button: DONE

    Success:
      All of the entries that are marked with 'X's in the Active field are printed out in the correct report formats. There are several possible error conditions:
        - There is a printer error - these errors will be handled by MS Access and the Print Manager provided with Windows, and we will not be testing them.
        - The Route List is empty - then there is nothing to print out, and the user is notified in a an error window that the Route List contains no information to print.
        - No boxes are checked off - then nothing is printed, and the user is notified in a message box that a report must be selected to be printed.
      Test:
        - The list has no active entries to be printed:
          - Click the DONE button when one report is selected.
          - Click the DONE button when multiple reports have been selected.
          - Click on the DONE button when no report is selected.
        - The list has some active entries:
          - Click the DONE button when one report is selected.
          - Click the DONE button when multiple reports have been selected.
          - Click on the DONE button when no report is selected.

Button: CANCEL

    Success:
      The window is shut and the user is returned to the Route List Window.

Checkbox: PRINT ROUTE LIST

    Success:
      The 'X' inside of the box is toggled on or off.

Checkbox: PRINT INVOICES

    Success:
      The 'X' inside of the box is toggled on or off.

Checkbox: PRINT INFO ABOUT PROSPECTIVE CUSTOMERS

    Success:
      The 'X' inside of the box is toggled on or off.


Integration Testing / Integration Plan:


Our integration plan calls for a bottom up approach, beginning with testing by running unit tests screen by screen. The integration tests will be conducted while connecting the various pieces of the system together. For example, some functions in the product list affect the information on order information window. These features will be tested in the integration tests.

Print Windows:

For all the print windows the same test may be done. After clicking the print button, the appropriate window should come up. Within each of the windows, pressing OK should result in the requested for information being sent to the printer. (For demonstration purposes, it will be sufficient to display what would be sent to the printer in a print preview format.) Pressing Done should result in the associated print window closing and return control to the window from which it was called.

Search Windows:

For all the search windows the same test may be done. After clicking the search button, the appropriate search window should come up. After performing a search and pressing OK, the search window should close and the searched-for information should appear in the relevant locations. For example, the top of a list box, or appropriate information filling the associated fields. If Cancel was pressed, then the information on the window which called the search window should not have changed.

Product Order List:

ADD TO ORDER: This button should only be enabled when entering from the order information screen. This can be easily tested by entering it from the order information screen, and then entering it from the main window. Pressing the button should result in the selected order being added to the order list in the order list window. All the fields except quantity and discount should be filled in. This can be easily tested by choosing a product and pressing Add to Order. It only remains to be seen whether this order was added to the current order in the order list window. There is the special case that the user tried to add a product that was already on the order list. A message should pop up telling the user this in these cases. Double-clicking on a product should result in the same actions as add to order.

FILTER screen from product list The test consists of performing a filter, pressing done, and then verifying that only those products which passed the filter conditions remain in the product list.

EDIT CUSTOMER from route list window This can be tested by choosing a customer from the route list and then pressing EDIT CUSTOMER. If the customer information window pops up with all of the highlighted customer's information filled in, and which the user can then edit, then it works properly.


Debugging:

While testing, some unexpected errors are likely occur. Depending on whether error-handling code has been put in, this may cause MS Access either to display a message with the error number and cancel the action that caused the error, or to go into a debugging mode, displaying the code that caused the problem. If either of these events occurs, or a logic error is observed (incorrect computation, etc.), the bug should be reported to the project manager (Gillian Posey) in the following format or a similar format, and she will either correct the error herself or assign the problem to the appropriate person. If the tester believes that they see the solution to the problem, they should describe it when reporting the bug.

_____________________________________________________________________________

| |
| Module tested : ___________________________ |
| |
| Description of output received : _________________________________ |
| __________________________________________________________________ |
| __________________________________________________________________ |
| __________________________________________________________________ |
| |
| Description of actions before the error occurred : _______________ |
| __________________________________________________________________ |
| __________________________________________________________________ |
| __________________________________________________________________ |
| |
| |
|___________________________________________________________________________|


Acceptance Testing:

This is a group of hypothetical situations that will serve several purposes. First, these walkthroughs are a way of testing the integration of the modules with each other. Second, the walkthroughs can be used as a script for our demonstration. Third, these walkthroughs can be used as a method of studying the usability of our system.

Situation 1:

    Search for customer information. A customer calls on the phone and wants to know what he currently has on order. The employee needs to select Customer Information from the main screen, and then clicks on the Search button. The employee would then enter any one of the customer's company name, phone number, or contact person, and then select an order to review.
Situation 2:
    Add a new customer. The employee would select Customer Information from the main window, and click on the New Customer button. Now all of the fields on the Customer Information screen are blank, so the employee needs to enter all relevant information and then click on Done to add the customer. If the customer wants to place an order immediately, the employee could click on New Order to place an order.
Situation 3:
    Placing an order. A customer calls on the phone and wants to order a new supply of business forms. The employee would select Customer Information from the main window, and then locate the information for that customer using the Search for Customer screen. The employee would then click on New Order to open the Order window. The employee can either directly enter the products into the list of items, or click on the Product List button to select items from the Product List window.
Situation 4:
    Changing an order. A customer wants to change the quantity of one item and add another item to an order which has been placed but not yet delivered. The employee would select Customer Information from the main screen, search for the correct customer, select the order from the list of orders, and then click on Edit Order. Now the Order window displays the information on the order in question, so the employee can change the appropriate information.
Situation 5:
    Viewing product information. A potential customer calls to inquire whether BFI supplies a certain type of form. The employee would select Product Information from the main window. The employee could then either scroll through the product list until an appropriate product is found, or she could use the Search for Product function to locate the product based on the product's name or ID number. Now all information about the product is displayed in the product list box.
Situation 6:
    Viewing restricted product information. A customer wants to know what BFI supplies in the price range $15-20. The employee would select Product Information from the main screen, and then click on the Filter button. Then he would enter the values 15 and 20 into the two boxes labeled Price, and click on Done to return to the list with only products in that price range remaining in the list.
Situation 7:
    Printing daily route list. At the beginning of the day, the salesperson wants to know what deliveries he has to make and which customers he has to visit that day. From the main window, he selects Route List and the current day's route is displayed. Now he can print the list by clicking on the Print button.


Usability Testing:

As time permits, we would like to take the time to sit down with some test subjects and to get their reaction to the system. These subjects would include some of the actual end users (employees of BFI) and some people totally unassociated with the project. Usability testing would help us to locate potential problems relating to ease of use in our system that may have been overlooked during the design phase. These changes would then be incorporated into the next release of our product.

The actual usability tests would be set up similar to an interview, where one person from our team would meet with an interviewee. The interviewer would then ask the interviewee to try to accomplish a number of predefined tasks, and all feedback from the user would be documented in detail. This will provide us with important feedback to be used towards the further improvement of the system.


Programming / Testing Schedule:

Based on the fact that we have eleven members on our team, multiple goals can be set because not everyone will be working on every aspect of the testing and coding of the modules at the same time. Please bear in mind that these are proposed dates only, and can be changed as required, of which the only is exception is the acceptance testing, which is our scheduled presentation of our system to BFI on March 26.

Friday March 8, 1996:

    - completion of Main screen
    - completion of Route List screen
    - completion of Customer Information screen

Monday March 11, 1996:

    - module testing of Main screen complete (5)
    - module testing of Route List screen complete (4)
    - module testing of Customer Information screen (2)

Friday March 15, 1996:

    - completion of Order Information Screen
    - completion of Product List screen

Monday March 18, 1996:

    - module testing of Order Information screen (3)
    - module testing of Product List screen complete (1)

Thursday March 21, 1996:

    - integration of all five modules complete, and functioning

Saturday March 24, 1996:

    - completion of integration testing - walkthrough testing (5) (6)

Sunday March 24, 1996:

    - completion of usability testing if time allows (7)

Tuesday March 26, 1996:

    - demonstration of system to BFI, (acceptance testing)

Testing will be done in the following teams (still subject to acceptance by the rest of the group):

Testing Team 1: (unit testing of Product List Screen)

    - Scott Jensen
    - Joon-Sae Park

Testing Team 2: (unit testing of Customer Information Screen)

    - Gillian Posey
    - Soon Poh-Oon
    - Elijh Ooi

Testing Team 3: (unit testing of Order Information Screen)

    - Premila Jeyaraj
    - Ryan McKay
    - Jason Archibald

Testing Team 4: (unit testing of Route List Screen)

    - Tony Ho
    - Chuck Pugh

Testing Team 5: (integration testing of system)

    - Soon Poh-Oon
    - Tony Ho
    - Premila Jeyaraj
    - Gillian Posey

Testing Team 6: (walkthroughs)

    - Scott Jensen
    - Chuck Pugh
    - Ryan McKay

Testing Team 7: (usability testing - if time allows)

    - Jason Archibald
    - Premila Jeyaraj


Conclusion

Testing is an important means that we need to use to ensure the quality of the products we create. It is absolutely essential that we test each individual piece of our program at the lowest levels possible to ensure that every error in coding and logic is found and rooted out. Testing now, though a long and involved process, will potentially save large amounts of money in software maintenance costs down the line. Testing is a crucial and central aspect that has to be given top priority by MacroHard to ensure that the final product we produce for BFI will be of the finest fuctional quality.


Database Model


Database Model


Tables and Field Definitions

    Sector
      - Sector ID
        Type: Counter
      - Sector Name
        Type: Text, 50 characters
      - Sequence number
        Type: Number (byte - 0 to 255)
      - Average distance in km to the sector
        Type: Number (double)
    Customer
      - Customer ID
        Type: Counter
      - Company Name
        Type: Text, 50 characters
      - Contact Name
        Type: Text, 50 characters
      - Phone Number
        Type: Text, 14 characters
      - Address
        Type: Text, 255 characters
      - City
        Type: Text, 50 characters
      - Province/State
        Type: Text, 2 characters
      - Country
        Type: Text, 50 characters
        Comment: This field will give an abbreviation for the customer's province or state.
      - Postal Code
        Type: Text, 7 characters
      - Sector ID
        Type: Number, long integer
      - Credit Limit
        Type: Number, currency
        Comments
          Type: Memo
    Product Type
      - Type ID
        Type: Counter
      - Type Name (e.g. single-sheet, carbon copy, computer forms)
        Type: Text, 50 characters
      - Price per box
        Type: Number, currency
    Product
      - Product ID
        Type: Counter
      - Product Name
        Type: Text, 50 characters
      - Product Description (not used in this implementation)
        Type: Memo
      - Type ID
        Type: Number, long integer
    Order
      - Order ID
        Type: Counter
      - Customer ID
        Type: Number, long integer
      - Order Date
        Type: Date/time
      - Delivery date
        Type: Date/time
      - Next Order Date
        Type: Date/time
      - Special Discount
        Type: Number, percent
      - Shipping rate
        Type: Number, currency
      - Tax 1
        Type: Number, percent
      - Tax 2
        Type: Number, percent
      - Total
        Type: Number, currency
      - Balance Owing
        Type: Number, currency

    Line Item (a single line on an order, giving the order for one product)
      - Line Number
        Type: Counter
      - Order ID
        Type: Number, long integer
      - Product ID
        Type: Number, long integer
      - Quantity (in boxes)
        Type: Number, integer
      - Price
        Type: Number, currency
      - Quantity Discount
        Type: Number, percent
    Route List
      - Customer ID
        Type: Number, long integer
      - Order ID
        Type: Number, long integer
      - Last Order ID
        Type: Number, long integer
      - Active
        Type: Yes/No

    Stored Variables
    (This table stores the date the route list was last recreated, and may also be used in future versions to store values such as the shipping rate. As well, future versions may also include a "Quantity Discount" table which will store the various quantity discounts for different quantities ordered.)
      - Route List Date
        Type: Date/Time


Updated Diagram of Data Model


Management Plan


Management and Modification Issues


The Program Manager:

The program manager will be responsible for integrating the work of other programmers (or interface designers) into single application, and will also keep track of the current work assignments and ensure that everyone is working with the most current version of the database and whatever object(s) they are working on. She will also keep backup copies of all previous versions of the application, and will probably do most of the non-routine programming (e.g. anything that cannot be done using Wizards). She may assign integration testing and the creation of suitable test data to other individuals.

Changes to the application and assignments may be decided in group meetings, but the program manager will be responsible for keeping track of all agreed-upon changes and assignments. When it is not feasible to call a group meeting to decide an issue, the program manager may make a decision unilaterally, although this should only occur for minor details.

Other Programmers/Designers:

Other programmers and designers will mainly be responsible for designing and formatting forms and reports and creating associated objects, such as the underlying queries for the form or report and its lists and combo boxes. They may also write some of the associated event code (especially code that can be produced using wizards), but not without the knowledge of the program manager. They may not edit any code except their own, although they should advise the program manager of any bugs that they encounter. If they see the solution to a bug, they should describe it or include it in comments within the code.

Only one person will be responsible for changes to any object (e.g. a form or report, including its underlying queries) at one time, unless a group of people have agreed to work together using a single copy of the application, and no one will be allowed to modify any object in the application without the knowledge and agreement of the program manager.

Each individual is expected to test their own work and advise the program manager of any problems, but all changes will also be tested by at least one other person, both in isolation and together with the remainder of the application.

Work Assignments:

In general, several work assignments will be made at one time in a meeting and all people involved will receive a copy of the most recent tested and approved version of the application. Their work will be submitted at an agreed-upon time and then integrated into a single application, which will become the current version after testing has been completed. The first version of the application will be called "BCI01.DB", the second will be called "BCI02.DB", and so on.

Modifications to the Application:

The tables in the database must never be modified without the knowledge and approval of the program manager. Fields in a table will not ordinarily be renamed or deleted once they have been used in any part of the application, although new fields may be added.

Any field that is bound to the query underlying a form or report should have the same name (not caption) as the field that it is bound to, and fields in the current application will not ordinarily be renamed. If a field on a form is replaced with a new one, the new one should be given the old name once the old field is deleted. Buttons in a form will also not be renamed, although their captions may be changed. Buttons and unbound fields should be given informative names when they are created.


Glossary of Terms


Glossary of Terms


Combo box:

    This is a combination of a text field with a list. If the user types in the field, the first item in the list that starts with the characters that the user has typed will be displayed as the user types. The text in the field will be highlighted if it matches something in the list, and will not be if it doesn't. The user may also click on a button to the left of the field to display the list, then scroll through it and make a selection with the mouse. (This list may have multiple columns, but only one value will appear in the input field). Normally, the user must enter or select an item that is in the list.

Counter:

    Fields with this type have a positive integer assigned automatically in sequence (for each field) by MS Access.

List box:

    This is a box displaying a list of records (usually with multiple columns). The user may scroll through the list and select any item in the list by clicking on it with the mouse.

Scroll bar:

    A scroll bar is a bar to the right or at the bottom of a window or box, that allows the user to move the text displayed in the window or box by dragging it with the mouse or clicking on the arrows at each end of it. (To drag something with a mouse, move the mouse cursor over the object, press the left mouse button down, and then hold the button down while moving the object to a new position by moving the mouse cursor.)



Last updated 2 Apr 96
by Ryan McKay, Web Page coordinator for Supplier Group #1.