Zitat von John Ralls <jra...@ceridwen.us>:
I estimate the effort in the following way:
(AVG_of_branching * number_of_functions * time_to_test_one_branch_in_minutes)/(minutes_in_hour * number_of_working_days). Avg of branching in function is something that i get by dividing code complexity number (3729) by number of functions, (...)

Like I said, you're the only one at this point who knows how fast you can code. But your calculations are a bit, um, overly precise.

I agree with John on the "overly precise" bit. However, I don't think this is a problem at this point in time at all.

For your project we can simply confirm that the goal of "full unittest coverage of all of libqof" is too ambitious for GSoC. Doing the complexity estimations is one out of several useful ways to tell up front whether the task can or cannot be done, and it is also a valid part of such a GSoC project. Thanks for the numbers :-)

I agree with John that you should pick a useful subset of libqof, and this way, the project will surely fit inside GSoC again.

As for how to find the "useful subset": I've created a list of libqof's symbols which are used from the rest of gnucash (attached) with usage count. This list of used symbols has 346 entries, whereas the list of libqof's exported symbols contains 524 entries. This is already a strong indication that libqof might contains 524-352=172 functions which are unused throughout gnucash. Following my remarks in my last message I'd say almost all of those 176 unused functions should be removed anyway, which means your project size might already reduce into useful ranges.

Note: I've done this for *symbols*. A symbol corresponds to an exported function. The libqof code might provide more functions to the rest of gnucash which are still used but are not a symbol. For example, all macros and all enums are provided to the rest of gnucash but are not symbols. Similar for inline functions even though I don't know whether we actually use those. The details for my research is shown below.

For now, I'd propose you should go ahead in writing up your application, and we can just confirm we will find a useful subset of libqof to be covered that will be doable within GSoC.

Regards,

Christian


# Create list of symbols exported from libqof in file "exportedsymbols"
nm -A src/libqof/qof/.libs/libgnc-qof.so  | grep ' T ' > exportedsymbols

# Find all non-libqof binaries of gnucash
L=`find . -name '*.so' | grep -v libgnc-qof`
L="$L src/bin/.libs/gnucash"

# For each other binary, lookup the imported (unresolved) symbols, grep those
# that are from libqof, then sort the resulting list and count by occurrence
for A in $L ; do nm $A | grep ' U ' | sed 's/^.* \([^ ]*\)$/\1/' | grep -wFf- exportedsymbols | cut -d: -f2 ; done | sort | uniq -c | sort -nr > all-qof-usage

     20  qof_log_prettify
     17  qof_log_indent
     17  qof_log_dedent
     17  qof_log_check
     15  safe_strcmp
     13  qof_instance_get_type
     10  qof_entity_get_guid
     10  gnc_numeric_zero_p
      9  qof_query_run
      9  qof_query_destroy
      9  gnc_numeric_neg
      8  qof_query_set_book
      8  qof_query_create_for
      8  qof_instance_get_slots
      8  kvp_value_get_guid
      8  guid_null
      8  gnc_numeric_add
      8  gnc_numeric_abs
      7  qof_book_get_slots
      7  qof_book_get_collection
      7  gnc_numeric_sub
      7  gnc_numeric_convert
      6  string_to_guid
      6  qof_session_get_book
      6  qof_query_set_sort_order
      6  qof_query_copy
      6  qof_print_date
      6  qof_instance_get_guid
      6  qof_instance_get_book
      6  qof_collection_lookup_entity
      6  kvp_value_new_guid
      6  kvp_value_get_string
      6  kvp_frame_get_slot_path
      6  guid_to_string
      6  gnc_numeric_to_double
      6  gnc_numeric_negative_p
      6  gnc_numeric_mul
      6  gnc_numeric_equal
      6  gnc_numeric_check
      6  double_to_gnc_numeric
      5  timespecFromTime_t
      5  string_to_gnc_numeric
      5  qof_strftime
      5  qof_query_set_sort_increasing
      5  qof_query_merge
      5  qof_query_add_term
      5  qof_event_suspend
      5  qof_event_resume
      5  kvp_value_delete
      5  guid_to_string_buff
      5  guid_equal
      5  gnc_timet_get_today_end
      5  gnc_print_date
      5  gnc_numeric_to_string
      5  gnc_numeric_positive_p
      5  gnc_numeric_compare
      4  qof_query_string_predicate
      4  qof_query_set_max_results
      4  qof_query_get_books
      4  qof_query_date_predicate
      4  qof_query_build_param_list
      4  qof_query_add_guid_match
      4  qof_query_add_boolean_match
      4  qof_instance_set_guid
      4  qof_instance_get_dirty
      4  qof_event_register_handler
      4  qof_collection_foreach
      4  qof_book_mark_saved
      4  qof_backend_set_error
      4  kvp_value_new_string
      4  kvp_value_new_numeric
      4  kvp_value_new_gint64
      4  kvp_value_get_numeric
      4  kvp_value_get_gint64
      4  kvp_value_get_frame
      4  kvp_frame_set_slot_path
      4  kvp_frame_set_slot_nc
      4  kvp_frame_new
      4  guid_malloc
      4  guid_free
      4  gnc_timet_get_today_start
      4  gnc_numeric_div
      4  gnc_dmy2timespec
      3  timespecToTime_t
      3  timespec_equal
      3  timespecCanonicalDayTime
      3  qof_session_save
      3  qof_session_load
      3  qof_session_get_url
      3  qof_session_destroy
      3  qof_scan_date
      3  qof_query_purge_terms
      3  qof_query_guid_predicate
      3  qof_query_get_search_for
      3  qof_query_create
      3  qof_print_date_dmy_buff
      3  qof_object_foreach
      3  qof_log_set_level
      3  qof_instance_set_slots
      3  qof_instance_get_destroying
      3  qof_instance_get_collection
      3  qof_event_unregister_handler
      3  qof_collection_count
      3  qof_book_new
      3  qof_book_get_data
      3  qof_book_get_backend
      3  kvp_value_new_timespec
      3  kvp_value_new_glist_nc
      3  kvp_value_new_gdate
      3  kvp_value_new_double
      3  kvp_value_get_type
      3  kvp_value_get_timespec
      3  kvp_value_get_glist
      3  kvp_value_get_gdate
      3  kvp_value_get_double
      3  kvp_frame_set_string
      3  kvp_frame_get_string
      3  kvp_frame_get_gint64
      3  kvp_frame_for_each_slot
      3  gnc_tm_get_today_start
      3  gnc_timet_get_day_end
      3  gnc_timespec_to_iso8601_buff
      3  gnc_numeric_error
      3  gnc_num_dbg_to_string
      3  gnc_iso8601_to_timespec_gmt
      2  xaccDateUtilGetStampNow
      2  timespec_cmp
      2  qof_util_string_cache_remove
      2  qof_util_string_cache_insert
      2  qof_session_new
      2  qof_session_get_error
      2  qof_session_begin
      2  qof_query_term_is_inverted
      2  qof_query_term_get_pred_data
      2  qof_query_term_get_param_path
      2  qof_query_search_for
      2  qof_query_numeric_predicate
      2  qof_query_merge_in_place
      2  qof_query_invert
      2  qof_query_int64_predicate
      2  qof_query_has_terms
      2  qof_query_get_terms
      2  qof_query_double_predicate
      2  qof_query_core_to_string
      2  qof_query_char_predicate
      2  qof_query_boolean_predicate
      2  qof_print_gdate
      2  qof_object_register_backend
      2  qof_object_get_type_label
      2  qof_object_foreach_backend
      2  qof_log_set_default
      2  qof_instance_set_dirty
      2  qof_instance_mark_clean
      2  qof_instance_guid_compare
      2  qof_instance_get_infant
      2  qof_instance_get_display_name
      2  qof_instance_get_dirty_flag
      2  qof_event_gen
      2  qof_date_format_get_string
      2  qof_commit_edit
      2  qof_class_get_parameter_getter
      2  qof_class_get_parameter
      2  qof_book_shutting_down
      2  qof_book_set_data_fin
      2  qof_book_not_saved
      2  qof_book_kvp_changed
      2  qof_book_get_type
      2  qof_begin_edit
      2  qof_backend_get_registered_access_method_list
      2  qof_backend_get_error
      2  null_strcmp
      2  kvp_value_new_frame
      2  kvp_frame_to_string
      2  kvp_frame_set_value_nc
      2  kvp_frame_set_slot
      2  kvp_frame_set_guid
      2  kvp_frame_set_frame_nc
      2  kvp_frame_get_slot
      2  kvp_frame_get_guid
      2  kvp_frame_get_frame_slash
      2  kvp_frame_delete
      2  guid_new_return
      2  guid_compare
      2  gnc_strisnum
      2  gnc_numeric_to_decimal
      2  gnc_numeric_same
      2  gnc_numeric_reduce
      2  gnc_numeric_errorCode_to_string
      2  gnc_dow_abbrev
      2  gnc_date_string_to_dateformat
      2  dateSeparator
      1  timespec_to_gdate
      1  timespec_now
      1  timespec_get_type
      1  timespec_diff
      1  timespec_abs
      1  qof_string_number_compare_func
      1  qof_set_alt_dirty_mode
      1  qof_session_swap_data
      1  qof_session_save_in_progress
      1  qof_session_safe_save
      1  qof_session_process_events
      1  qof_session_pop_error
      1  qof_session_get_error_message
      1  qof_session_export
      1  qof_session_events_pending
      1  qof_session_ensure_all_data_loaded
      1  qof_session_call_close_hooks
      1  qof_session_add_book
      1  qof_query_sort_get_sort_options
      1  qof_query_sort_get_param_path
      1  qof_query_sort_get_increasing
      1  qof_query_shutdown
      1  qof_query_set_sort_options
      1  qof_query_run_subquery
      1  qof_query_print
      1  qof_query_num_terms
      1  qof_query_last_run
      1  qof_query_kvp_predicate_path
      1  qof_query_kvp_predicate
      1  qof_query_int32_predicate
      1  qof_query_init
      1  qof_query_has_term_type
      1  qof_query_get_term_type
      1  qof_query_get_sorts
      1  qof_query_get_max_results
      1  qof_query_equal
      1  qof_query_date_predicate_get_date
      1  qof_query_core_predicate_free
      1  qof_query_core_predicate_copy
      1  qof_query_collect_predicate
      1  qof_query_clear
      1  qof_query_choice_predicate
      1  qof_query_add_guid_list_match
      1  qof_print_date_buff
      1  qof_object_register
      1  qof_object_printable
      1  qof_object_lookup_backend
      1  qof_object_foreach_sorted
      1  qof_log_shutdown
      1  qof_log_parse_log_config
      1  qof_log_level_from_string
      1  qof_log_init_filename_special
      1  qof_log_init_filename
      1  qof_log_init
      1  qof_load_backend_library
      1  qof_instance_version_cmp
      1  qof_instance_set_idata
      1  qof_instance_set_destroying
      1  qof_instance_set_book
      1  qof_instance_reset_editlevel
      1  qof_instance_lookup_twin
      1  qof_instance_init_data
      1  qof_instance_increase_editlevel
      1  qof_instance_get_referring_object_list_from_collection
      1  qof_instance_get_referring_object_list
      1  qof_instance_get_editlevel
      1  qof_instance_gemini
      1  qof_instance_decrease_editlevel
      1  qof_instance_copy_version_check
      1  qof_instance_copy_version
      1  qof_instance_copy_guid
      1  qof_instance_copy_book
      1  qof_instance_books_equal
      1  qof_init
      1  qof_get_alt_dirty_mode
      1  qof_date_text_format_get_string
      1  qof_date_format_set
      1  qof_date_format_get
      1  qof_date_completion_set
      1  qof_commit_edit_part2
      1  qof_collection_set_data
      1  qof_collection_new
      1  qof_collection_mark_dirty
      1  qof_collection_mark_clean
      1  qof_collection_is_dirty
      1  qof_collection_insert_entity
      1  qof_collection_get_type
      1  qof_collection_get_data
      1  qof_collection_add_entity
      1  qof_close
      1  qof_class_register
      1  qof_class_get_parameter_setter
      1  qof_choice_create
      1  qof_choice_add_class
      1  qof_book_use_trading_accounts
      1  qof_book_set_string_option
      1  qof_book_set_dirty_cb
      1  qof_book_set_data
      1  qof_book_set_backend
      1  qof_book_mark_readonly
      1  qof_book_mark_dirty
      1  qof_book_mark_closed
      1  qof_book_is_readonly
      1  qof_book_increment_and_format_counter
      1  qof_book_get_string_option
      1  qof_book_get_dirty_time
      1  qof_book_destroy
      1  qof_book_commit_edit
      1  qof_book_begin_edit
      1  qof_backend_set_message
      1  qof_backend_register_provider
      1  qof_backend_init
      1  qof_backend_destroy
      1  kvp_value_new_glist
      1  kvp_value_new_frame_nc
      1  kvp_value_new_binary_nc
      1  kvp_value_get_binary
      1  kvp_glist_delete
      1  kvp_frame_set_value
      1  kvp_frame_set_timespec
      1  kvp_frame_set_slot_path_gslist
      1  kvp_frame_set_numeric
      1  kvp_frame_set_gint64
      1  kvp_frame_set_frame
      1  kvp_frame_replace_value_nc
      1  kvp_frame_is_empty
      1  kvp_frame_get_value
      1  kvp_frame_get_slot_path_gslist
      1  kvp_frame_get_numeric
      1  kvp_frame_get_hash
      1  kvp_frame_get_frame
      1  kvp_frame_copy
      1  kvp_frame_compare
      1  guid_new
      1  guid_hash_to_guint
      1  guid_hash_table_new
      1  guid_g_hash_table_equal
      1  gnc_timezone
      1  gnc_timet_get_day_start
      1  gnc_timespec_last_mday
      1  gnc_timespec2dmy
      1  gnc_numeric_sub_with_error
      1  gnc_numeric_mul_with_error
      1  gnc_numeric_get_type
      1  gnc_numeric_eq
      1  gnc_numeric_div_with_error
      1  gnc_numeric_add_with_error
      1  gnc_kvp_bag_remove_frame
      1  gnc_kvp_bag_merge
      1  gnc_kvp_bag_find_by_guid
      1  gnc_kvp_bag_add
      1  gnc_dmy2timespec_end
      1  gnc_date_string_to_monthformat
      1  gnc_date_my_last_mday
      1  gnc_date_monthformat_to_string
      1  gnc_date_dateformat_to_string
      1  g_hash_table_kv_pair_free_gfunc
      1  g_hash_table_key_value_pairs
      1  g_hash_table_foreach_sorted
      1  gdate_to_timespec
      1  binary_to_string
_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel

Reply via email to