Your donations/sponsorships help to maintain and improve the quality of QGIS

The QGIS project is growing in size, number of contributors/contributions and code complexity. This introduces challenges for the project, especially for maintaining quality. Maintaining and improving quality is one of the main concerns of the QGIS.ORG board and some core developers.

Past and current QA efforts

Tim Sutton introduced a first unit test framework several years ago. But it wasn’t very visible then and passing the tests as a prerequisite to make changes to master wasn’t enforced. About a year ago, Matthias Kuhn introduced automated unit testing for the Linux builds – using Travis continuous integration testing. At our github page you can always see whether the master version builds fine and whether the tests are passing – see the green “Build passing” button at the beginning of the file.

Since then, OS X automated building/testing was added. Pull requests (new contributions from developers) can be tested prior to integration into the master branch. Another effort was to use coverity code scans to detect memory leaks. Nyall Dawson and others did a lot of improvements/fixes due to this automated code scans.

Upcoming challenges

There is still a lot to do regarding quality and automated testing. Because continuous integration tests were only introduced about a year ago, it means that still a lot of areas in the code base remain untested. Also, the current unit tests do not test GUI interactions. There is an ongoing discussion if critical classes should have unit tests enforced for any code changes. Finally, our bug queue at is still quite long, with lots of bigger and minor issues.

Your financial support really matters!

This is where your donations and sponsorships come in. For the past 3-4 releases we were able to pay 2-4 developers who worked for several days concentrating on bug fixing. For QGIS 2.12 we had Nyall Dawson, Jürgen Fischer and Larry Shaffer working on bug fixing. We also financially support Giovanni Manghi for working on our bug tracker (e.g. classifying issues correctly, trying to reproduce the issue, ask bug reporters for more details).

Now – you may wonder why they didn’t fix all the “BLOCKER”s first and then continue on with “HIGH”, “NORMAL” “LOW”  issues – and why a lot of unreported issues and issues with label “LOW” were also fixed? The answer is that it is often more efficient for the developers to concentrate on a certain part of the code – e.g. concentrating on geometry, labeling and editing issues, as Nyall did for this round of bug fixing. This means that he would not only fix issues labeled as “BLOCKER” or “HIGH” but also other bugs that are in the same code. Finally, not all of the “Blocker” and “High” bugs are reproducable or the issue may be much too hard/time consuming to fix.

Due to your financial support, the 3 developers were able to fix the following list of issues for the QGIS 2.12 release – many of the fixes also get back-ported to QGIS 2.8 LTS release:

  • Sweep of all changed dialogs, ensuring tab order is correct
  • UNREPORTED: Only save effect element if it is non-default (decreases size of qgs project files)
  • HIGH: Fix map rotation not considered for ellipse marker data defined rotation (#13367)
  • HIGH: Maintain order of recent expressions (#13461)
  • NORMAL: Make sure recent expression group is always listed last (#13462)
  • NORMAL: [diagrams] Fix initial value of transparency slider not set (#13434)
  • UNREPORTED: Fix potential crashes in renderer widgets
  • NORMAL: Fix legends are empty if presets used with filtered legend (#13300)
  • UNREPORTED: Fix crashes and inconsistent ui when atlas is set to a geometryless layer
  • BLOCKER: Fix diagrams are always shown, regardless of setting (#13501)
  • BLOCKER: Fix fill ring tool used with advanced digitising crashes QGIS (#13355)
  • NORMAL: Fix add ring/fill ring tool works on first polygon (#13069)
  • BLOCKER: Fix missing sip bindings for renderers (#13545)
  • BLOCKER: Fix crash in label property dialog (#13543)
  • NORMAL: Fix hardcoded border for raster legend items (#13540)
  • BLOCKER: Fix symbols drawn multiple times in rule based renderer if symbol (#13220)
  • BLOCKER: Use a model for node editor table, fixed hang when node tool used on large feature (#13541)
  • BLOCKER: Fix node tool duplicates nodes when topological editing and snap are both enabled (#13466)
  • NORMAL: Fix broken data defined SVG marker outline width (#13423)
  • HIGH: Scale svg marker outline width to match context (#11522)
  • HIGH: Allow coloring of svg markers and svg fills when used with graduated/categorised renderers (#11658)
  • HIGH: Fix svg outline widths are incorrectly scaled (#11522)
  • UNREPORTED: Fix snapping options dialog not correctly initialised when loading projects
  • UNREPORTED: Fix uninitialized variables in advanced digitizing dock which meant that sometimes advanced digitising tools would be activated unexpectedly
  • NORMAL: Fix curved labels ignore line orientation placement flag (#5778)
  • UNREPORTED: [console] Move run button earlier in console editor toolbar (prevents it being hidden in overflow menu on small screens)
  • UNREPORTED: Fix fill and outline color for svg markers sometimes enabled even though SVG file does not support parameters
  • UNREPORTED: Fix svg marker colors not correctly restored from project
  • UNREPORTED: If svg files with params do not have a default value set, then don’t reset the fill/border color and border width when changing svg marker/svg fill SVG files (made the behaviour consistent between the svg marker and the other marker symbols)
  • NORMAL: Fix svg symbols are shown in white and hard to see in svg picker (#10908)
  • NORMAL: Fix refining rule based renderer using expression (#10815)
  • UNREPORTED: Fix crash when changing symbol types on windows
  • BLOCKER: Fix split parts tool only leaves one of the newly created parts (#13421)
  • BLOCKER: Fix using add part tool to add part to geometryless rows (#12885, #11319)
  • UNREPORTED: Fix some potential crashes with edit tools and null geometry
  • UNREPORTED (thought I’d submitted this years ago but can’t find the issue now): Allow adding features with empty geometry via attribute table
  • HIGH: Allow delete part tool to remove geometry from single type point and line layers (#13258)
  • LOW: Fix overview canvas background color not set (#11157)
  • Add some unit tests for QgsWKBTypes
  • NORMAL: When adding ring to a geometry, add z or m dimensions to the ring geometry if required (#7400, #7401)
  • NORMAL: Also show features with modified geometry when “show edited and new features” filter is active in attribute dialog (#11684)
  • BLOCKER: Fix broken apply button in label config dialog (#13543)
  • BLOCKER: Fix area calculation when OTF active and no ellipsoid, add unit test (#13601)
  • UNREPORTED: Fix exporting geometry collections to WKT would result in invalid WKT
  • UNREPORTED: Fix unable to import WKT using MultiPoint(1 1,2 2,…) format
  • UNREPORTED: Fix GeometryCollection WKT to support collections with multi* children and GeometryCollection children (allowed by spec)
  • Add a bunch of unit tests to geometry
    – UNREPORTED: Fix calculation of area and length of mixed geometry collections
  • UNREPORTED: Fix geometry casting in python bindings (missing MultiLineString and GeometryCollection casts)
  • UNREPORTED: Fix calculation of length/perimeter for geometry collections
  • UNREPORTED: when creating geometry from WKT, upgrade dimensionality of geometry if coordinates are 3/4 dimensional
  • UNREPORTED: match dimensionality of collections to child dimensionality
  • UNREPORTED: fix area of curves was non-zero if curve is closed
  • UNREPORTED: don’t consider m values when testing for curve closedness
  • NORMAL: Fix merge attributes tool sets skipped attributes to null (#13231)
  • NORMAL: Add skip all option to merge attributes dialog (#6958)
  • UNREPORTED: Fix QgsStatisticalSummary sometimes returning 0 for StDevSample stat
  • UNREPORTED: Fix storing string representations of doubles in an int field results in NULL rather than converting value to int
  • NORMAL: Fix merge attributes/features tool resets values to null for int fields and add a warning if merged attribute value is not compatible with field type (#12842)
  • Fix a LOT of leaks relating to geometry and GEOS operations, labeling
  • UNREPORTED: [pal] Fix regression in placement for free/horizontal polygon labels
  • Add tooltips to advanced digitizing dock
  • Fix a crash in filtered legends
  • Reviewed and merged several bug fix PRs
  • #13433: Help text for rpad and lpad in field calculator are mixed up
  • #13417: missing
  • #13420: Strange behaviour of newly ‘saved as’ project
  • #13463: Identify Results panel always show newly created features in the list
  • #13538: PostGIS tables containing MultiPolygonZ crash QGIS master
  • #13546: qgis trying to update first empty text row with null in db
  • #13027: Join by location does not work when layers have equivalent field names
  • #13032: Save as… fails to populate fields if layer has similar names only different by case
  • #13052: Problem with reshape
  • #10747: Cannot copy/paste points features
  • #13506: Processing help files for QGIS algs all dead now
  • #13274: API combine method for geometry
  • #11755: Real precision (Shapefile)
  • #9208: QGIS crashes when using addAttributes on any vector data provider
  • #13579: Crash Dump 2.11 with user defined expressions
  • #10515: QGIS Crash when trying to load a point layer to georss file
  • #11276: Setting radius units to meters produces incorrect results
  • #13641: editing a feature in a PostGIS layer does not work when the PK contains NULLs
  • #13631: when ELSE rule exists in Styling, all Labels are rendered regardless of styling groups being active/inactive
  • #13638: Cannot load emptry Postgis views
  • #8255: in edit mode changing primary key discards geometry modifications
  • #13594: DB Manager – unable to add a Postgres/PostGIS raster as layer
  • #13446: MYSQL Project File
  • #13310: nightly build packages failing to install with grass error
  • (PR#2378: Allow postgis layers from queries to have multiple column primary keys)
  • (PR#2376: the test for uniqueness now also works for multiple columns by SebDieBln)
  • (#13645: ftools “line intersection” crashes qgis)
  • (#13646: Merge shapefiles from fTools crashes QGIS)
  • transifex updates & german translation
  • attribute editing: don’t allow editing without ChangeAttributeValues capability
  • vector layer: avoid some crashs when methods are called on invalid layers
  • oracle provider: fix call of sdo_filter to verify a spatial index is present
  • #13641: postgres provider: verify unique constraint if NOT NULL is not set on key columns (shortly after release)
  • Commit 6a4544f fix fetching of redirected wms capabilities (followup e95bf6d)