1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
|
=====[ Testing Gwyddion ]====================================================
Basic behaviour
- OK, Cancel buttons work
- Reset button resets really everything and is idempotent
- Clear button clears
- Other action buttons do what they say
- If a button can be pressed (is sensitive), does something reasonable, no
silly state of other controls makes it crash or produce some uninitialized
(unprocessed) or otherwise nonsense data
- Ranges of spinbuttons and other range widgets are reasonable and don't allow
values that leads to clear nonsense
- Settings and values are remembered both on OK and Cancel, and presented the
next time a dialog is run as if it was never closed[1]
- If a dialog is shown for the first time (no module settings in settings),
it shows the same values as after Reset
- Defaults, brought by Reset, are reasonable for the common case
Processing
- Operation does what expected, or at least something looking reasonably if
it cannot be checked exactly, and does it for wide ranges of arguments;
if it is described in User guide, it does what User guide says
- Undo works
- NaNs are not produced
- If a time-consuming operation is cancellable, cancellation leads to a state
as if nothing happened (also wrt undo and redo)
- Works on square, tall, wide data
- Works on data with size of 2^n, and with different sizes (namely FFT, CWT,
DWT methods)
- Works on data with different real/pixel ratios[3]; at least does not crash
and does something more or less reasonable, as some operations are
problematic on such data
- Works on data with mask, without mask, with an empty mask, with presentation,
without presentation, and undo work correctly in all cases
- Does not copy mask and presentations with data on unrelated result
- Works on data of various scales and z/xy (value/lateral) ratios[3]
- If there are check boxes/radio buttons changing mode of operation, all
possibilities work
- Selections are not copied to data in different coordinates (like FFT), but
is copied/kept after operation like level
- If an operation is not supposed to modify data (e.g. it should only add
a mask, must be deduced from context) it doesn't modify data
- Units are handled correctly, even less common units like Volts, namely in
operations that change units (FFT, Slope distribution)[2][3]
- Dimensionless quantities have no units, instead of default meters
- Operations that take long time has a progress bar with a Cancel button
Tools
- Duplication (Ctrl-D) during tool usage cause no strange effects
- Previes/instant apply works (if present) on data switch, tool swtich,
window closing, when all windows are closed and then a file open, when
hid/made visible
- Present/instant apply reacts to parameter changes instantly
- Selections survive switch to another tools (namely those with the same
selection type) and back unchanged
- Apply is sensitive only when it does something [reasonable]
- If one usually wants to repeat the operation, Apply doesn't hide dialog,
otherwise it hides it
- Undo works, namely in connection to previews and duplication
File import/export
- Sizes, values, and units are correct
- Works on systems with distinguishing between binary and text files[4]
- Works on systems with various notions what an end of line is[4]
- Works on 32bit, 64bit platforms[4]
- Works on little, big endian platforms[4]
- Is not affected by locale settings
GUI
- Dialog titles are correct (e.g., not describing another module, etc.)
- Labels are comprehensible
- If user may want to reset parameters to default state (this means almost
always), dialog provides a Reset button
- Menu path ends with `...' if it brings a dialog, doesn't end with `...' if
it's a direct action
- All buttons and other active controls have mnemonics
- Mnemonic works (i.e., when Alt + mnemonic key is pressed, corresponding GUI
control gets focus/is activated, Gtk+ doesn't beep)
- Controls that don't make sense (in a mode of operation, due to state
of other controls) and would only confuse user are insensitive
- Previous point also applies to toolbox buttons and toolbox menu items
- Nothing in toolbox menus crashes
- There are no misaligned controls in dialogs
- Progress dialogs are shown over appropriate windows: dialogs windows during
manipulation inside dialogs; data windows during final processing when the
dialog is no longer shown
- Resizable dialogs behave reasonably on resize
- Capitalization rules: FIXME
Translateability
- There should be no English string in Czech GUI, including in window titles,
etc.[5]
Packaging, installation
- Gwyddion installs itself correctly on Win32
- Gwyddion refuses to install when there's no Gtk+ on Win32
- Gwyddion can be uninstalled
- If Gwyddion user directory doesn't exist, it's created, settings are stored
there (remembered between runs)
- Modules and plug-ins in user directory are found and work
Object leaking
- Does not work on Win32 (FIXME: it may work now, begin fixed by -MD, must
try)
- Run Gwyddion as
gwyddion --debug-objects
- When Gwyddion exits, it prints list of all allocated and freed objects,
with times of allocation and freeing
- Objects still alive on exit have ALIVE(<ref_count>) in place of time of
freeing
- If such objects appear, one can try to locate the operation that leaked
them by running Gwyddion, doing only the suspected operation, and quitting
it
- Other things to look for are long rows of objects of the same type
allocated almost in the same instant, ususally indicating some very
inefficient algorithm
Valgrinding
- Does not work on Win32
- Run Gwyddion as
valgrind --tool=memcheck --num-callers=12 --suppressions=...[6] gwyddion
- It should print no errors[7]
- Ideally, all testing should be done with addrcheck at least (instead of
memcheck which makes the program too slow and memory-hungry)
Footnotes
[1] There's a known common problem: State of no option menu offering list of
data windows is remembered in Gwyddion 1.x.
[2] There's a known problem with graphs, they rarely handle complex units
correctly.
[3] May need to prepare some specific testing data
[4] Requires access to various systems and platforms, so at least what is
available should be tested
[5] Except perhaps in too new modules that have not been translated yet
[6] Suppressions for Gdk and libpng problems are listed below
[7] 3D view is known to cause ***lots*** of errors
Addendum: Valgrind suppressions (for FC3)
<<<<< gdk_display.supp <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
{
gdk_display_open_XReply
Memcheck:Param
write(buf)
fun:__write_nocancel
fun:_X11TransWrite
obj:/usr/X11R6/lib/libX11.so.6.2
fun:_XReply
}
{
gdk_display_open_XEventsQueued
Memcheck:Param
write(buf)
fun:__write_nocancel
fun:_X11TransWrite
obj:/usr/X11R6/lib/libX11.so.6.2
fun:_XEventsQueued
}
{
gdk_display_open_XReply
Memcheck:Param
write(buf)
fun:__write_nocancel
fun:_X11TransWrite
obj:/usr/X11R6/lib/libX11.so.6.2
fun:XFlush
}
{
gdk_display_open_XDrawLine
Memcheck:Param
write(buf)
fun:__write_nocancel
fun:_X11TransWrite
obj:/usr/X11R6/lib/libX11.so.6.2
fun:XDrawLine
}
{
png_write
Memcheck:Cond
obj:/usr/lib/libz.so.1.2.1.2
obj:/usr/lib/libz.so.1.2.1.2
fun:deflate
fun:png_write_finish_row
}
>>>>> gdk_display.supp >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|