Usikker forskning: Python-script gav forskellige resultater afhængig af styresystem

16. oktober 2019 kl. 10:1514
Usikker forskning: Python-script gav forskellige resultater afhængig af styresystem
Illustration: Selenit, BigStock.
Et Python-script brugt i over hundrede forskningsprojekter har virket forskelligt afhængigt af, hvilket operativsystem scriptet er kørt på.
Artiklen er ældre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

Hundredevis af kemi-forskningsartikler kan vise sig at være upræcise, viser et studie, der netop er udgivet i Organic Letters.

Problemet er, at et meget anvendt script ved navn Willoughby-Hoye sorterede forskelligt og dermed gav forskellige resultater afhængigt af, hvilket operativsystem du brugte.

For både Windows og nogle udgaver af macOS (Mavericks) gav scriptet det forventede resultat, mens det drillede i Ubuntu og andre versioner af macOS.

Forskelligheden skyldes, at koden afhænger af systemkald, der kan være forskellige fra operativsystem til operativsystem, hvilket ikke er hensigtsmæssigt.

Artiklen fortsætter efter annoncen

Patrick Willoughby, der har lagt navn til det oprindelige script, har efterfølgende skrevet på Twitter:

»Da jeg skrev scriptet for seks år siden, kunne styresystemet godt finde ud af at sortere korrekt. Rui og Williams har tilføjet den nødvendige sorteringskode og har tilføjet en funktion, der sikrer og udregninger sker korrekt. Godt gået!«

Han fortæller overfor The Register, at han forventer, at hans script er brugt i 150-160 forskningsprojekter.

14 kommentarer.  Hop til debatten
Denne artikel er gratis...

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.

Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.

Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.

Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.

Debatten
Log ind eller opret en bruger for at deltage i debatten.
settingsDebatindstillinger
12
17. oktober 2019 kl. 15:12

Hvis man er afhængig af at listen er sorteret må programmøren sikre sig at den returneres sorteret (læs dokumentationen) eller indsætte en sortering.

Mon ikke det er det der menes?

Men de fleste af os har vel prøvet at falde i den slags usikre antagelser - det er vel det man kalder erfaring?

10
17. oktober 2019 kl. 08:17

(som for resten virkede fint dengang),

Ved vi det helt eksakt? Hvis algoritmen giver et andet resultat med en anden sortering. Hvorfor skulle den så give det rigtige resultat med den første sortering.

Jeg ville give de oprindelige resultater er check også med den viden man har om algoritmen nu.

9
17. oktober 2019 kl. 06:15

Jeg synes måske kritikken her i kommentar sporet rammer ved siden af.

Kritikken går meget på at der ikke bliver overholdt x, y, og z bedt practices, som man ville kende, hvis man var en programmør.

Han er jo netop ikke programmør, han er kemiker. At skyde skylden på ham, for andres lemfældige brug af hans kode synes jeg rammer ved siden af.

I stedet for at kritisere ham for at skrive et script til sig projekt (som for resten virkede fint dengang), så skulle man måske tage et konstruktivt, kritisk syn på processen for at vælge scripts til at bearbejde data til videnskabelige artikler.

Måske man kunne indføre peer review på dette også, eller måske noget helt andet.

8
17. oktober 2019 kl. 00:06

En algoritme burde ikke afhænge af rækkefølgen overhovedet. Det er vel den virkelige fejl.

6
16. oktober 2019 kl. 15:14

Sorteringen er vel ikke kun operativsystem-afhængigt, men nok også filsystems-afhængig?

Hvis hverken OS eller sprogets standard library laver sortering, vil der vel være forskel på om du lister filer fra et filsystem med btree indexering, eller et "dumt" fs som fx FAT?

5
16. oktober 2019 kl. 14:49

Hele funktionen tyder generelt på at de ikke er super kyndige i python. funktionen kunne bare have været:

  1. def read_gaussian_outputfiles():
  2. return glob.glob("*.out")
Der er ingen grund til at løbe over listen for at lave en ny liste. I det mindste kunne man have brugt en list comprehension.

4
16. oktober 2019 kl. 12:25

Første sætning af dokumentationen af Pythons glob modul:

The glob module finds all the pathnames matching a specified pattern according to the rules used by the Unix shell, although results are returned in arbitrary order.

I pathlib modulet nævner de godt nok ikke noget om rækkefølgen, men alle eksemplerne starter med at sortere resultatet.

3
16. oktober 2019 kl. 12:25

Er historien her ikke bare at man skal være varsom med at læne sig op ad sideeffekter

Jeg vil sige det er et godt eksempel på hvad der kan ske, når man forlader sig på 'citizen programming'.

Fra artiklen:

  1. def read_gaussian_outputfiles():
  2. list_of_files = []
  3. for file in glob.glob('*.out'):
  4. list_of_files.append(file)
  5. return list_of_files

The glob module finds all the pathnames matching a specified pattern according to the rules used by the Unix shell, <em>although results are returned in arbitrary order</em>

Man må formode (håbe :) at en professionel Python programmør ville have vist dette. Og ja, som der skrives ovenfor, hvis sortering er vigtig så lav en testcase for det.

2
16. oktober 2019 kl. 12:20

.. og skrive tilstrækkelige testcases til ens kode.

1
16. oktober 2019 kl. 12:14

Så en forsker skriver noget kode som kraftigt afhænger af korrekt sortering men sikrer sig ikke samme sortering. Er historien her ikke bare at man skal være varsom med at læne sig op ad sideeffekter? ?