cycle de développement informatique

Au cours d'écriture de petits scripts, le programmeur se retrouve bien vite à un dilemne cornélien, poursuivre ou arrêter son développement. La précédente image illustre bien la situation.

Petite anecdote

Pour exemple, je prend le cas du script python Bitwarden2lastpass où la première version de 40 lignes çi-dessous me suffisait pleinement.


import csv
import os
import re

def open_file_bitwarden(fullpathfile_csv):
    file_r = open(fullpathfile_csv, newline='')
    reader = csv.reader(file_r)
    header = next(reader) # the first line is the header
    data = []
    for row in reader:
        bw_folder, bw_favorite, bw_type, bw_name, bw_notes, bw_fields, bw_login_uri, bw_login_username, bw_login_password, bw_login_totp = row
        data.append([bw_folder, bw_favorite, bw_type, bw_name, bw_notes, bw_fields, bw_login_uri, bw_login_username, bw_login_password, bw_login_totp])
    file_r.close
    return data

def create_file_lastpass(data, fullpathfile_csv):
    file_w = open(fullpathfile_csv, 'w')
    writer = csv.writer(file_w)
    writer.writerow(["url", "username", "password", "extra", "name", "grouping", "fav"])
    for i in range(len(data)-1):
        row=data[i]
        lp_url = row[6]
        lp_username = row[7]
        lp_password = row[8]
        lp_extra = row[4]
        lp_name = row[3]
        lp_grouping = row[0]
        lp_fav = ""
        writer.writerow([lp_url, lp_username, lp_password, lp_extra, lp_name, lp_grouping, lp_fav]) 
    file_w.close

files = [f for f in os.listdir('.') if re.match(r'bitwarden_export_.*\.csv', f)]
files.sort()
path_bitwarden_csv = files[-1]
print(F"Fichier traité: {path_bitwarden_csv}")
data = open_file_bitwarden(path_bitwarden_csv)
lp_path_csv = path_bitwarden_csv.replace("bitwarden", "lastpass")
create_file_lastpass(data, lp_path_csv)
print(F"Fichier généré: {lp_path_csv}")

Puis, l'idée vient à améliorer et durcir le code contre les erreurs, vérifier l'existence ou non des répertoires et des fichiers, pallier au manque de place sur le disque dur, de gérer les problèmes de droits sur le système de fichiers, d'afficher une aide, de passer et de contrôler les arguments en ligne de commande, d'assurer une compatibilité Windows/Linux/MacOS, d'utiliser un gestionnaire de versions (git), de partager son développement (github), etc...

Le script a pris alors de l'embonpoint pour atteindre 320 lignes, soit 11 fois plus que l'original, multipliant les possibilités d'y insérer des erreurs de code. (loi de Murphy)

Et encore, je n'ai pas encore employé de couverture de tests (pytest) qui démultiplient (à raison) le développement initial.

A toute fin, je me suis quand même épargné des joies induites d'une application commerciale.

Cycle

Enjoy. :-)


La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.

Antoine de Saint-Exupéry


Related Posts


Published

Category

software

Tags

Contact