Code Monkey home page Code Monkey logo

ftedit's Introduction

FTEdit

An open source fault tree editor

Dependencies

This project requires Qt5, qmake and a C++ compiler to be used.

On Debian based Linux distribution, packages can be installed with :

sudo apt-get install qt5-default

On MacOS (with Homebrew) :

brew install qt

Compilation

On Linux and MacOS, use the following commands:

qmake Makefile.pro
make

The program will be located in the release folder.

For the Windows operating system, please use precompiled binaries in the release section.

ftedit's People

Contributors

chuokupai avatar huxunyue avatar junlaw avatar nazberrypie avatar petitesprit avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

ftedit's Issues

Result n'initialise pas ses pointeurs

En C++, les pointeurs ne sont pas initialisés par défaut. Certains compilateurs ont des warnings à propos, mais ce n'est pas le cas de g++. Initialisez vos pointeurs à nullptr pour éviter les soucis

BalanceNodePos ne fonctionne pas

A l'ajout d'un noeud, il le place lorsqu'il y a de l'espace suffisant.
Exemple:
2Gates cote-à-cote génère de l'espace libre et le nouveau noeud y est placé.

Or il devrait le placer après les autres noeuds fils. Joie.
Bug BalanceNodePos

Ne pas bloquer le reste du check

Lorsqu'un noeud est invalide, ne pas bloquer le check de ses enfants si ils existent. Par exemple la porte And bloque le check de son unique fils si elle est invalide (vu qu'elle bloque si le nombre de fils est < 2)

Probabilités arrondies par le gui

-la probabilité de Shape pour Weibull est capée à 99,99
-la probabilité de Scale pour Weibull est remise à 99,99 après validation pour un nombre supérieur
-la probabilité de lambda pour Exponential est remise a 1 après validation pour un nombre supérieur

Exemple: si je met 12345 dans lambda pour un Exponential, elle sera remise a 1 après avoir validé

segfault "want to save?"

C'est un peu bizarre à expliquer mais quand on ré-éxécute le programme plusieurs fois, sans jamais sauvegarder, le message de sauvegarde apparait avant l'application .
save_sans_appli
Encore plus bizarre, si on save sur cette fenêtre,ca segfault.
Si on cancel/close without saving,l'application s'ouvre mais n'est pas un nouveau projet.
Appli chelou
Tout modif sur cette appli entraîne un segfault.
kesskisspass?

ResultBoolean recalcule les probabilités

QList ResultBoolean::getProbabilities() doit uniquement retourner la liste. L'arbre peut avoir été modifié ou supprimé entre temps. Lors de l'instanciation de la classe, tout doit être calculé.

Crash lors de modifications sur le fichier

Il suffit de sauvegarder un fichier vide, puis modifier le contenu de cette façon :

<opsa-mef author="FTEdit">
    <define-fault-tree name="Tree1">
        <attributes>
            <attribute value="true" name="keep"/> <!-- Changer "true" par "false" -->
        </attributes>
    </define-fault-tree>
</opsa-mef>

Les arbres doivent être par défaut set à keep = true, pareil pour les portes

J'ai besoin d'un accept dans Event.hh

Avoir serait plus simple pour la conception de mon visiteur et algorihtme.
Il devrait de la forme :
void accept(SaveVisitor &v) { v.visit(*this)}

Problèmes avec le clipboard

Le clipboard ne copie pas en profondeur l'arbre, alors des réfrences sont perdues en mémoire. Il faut INTEGRALEMENT copier la structure, sinon ça ne risque pas de fonctionner, donc faire des setMachin de getMachin, si ce sont des références ou pointeurs, nope.

Les méthodes check ne fonctionnent pas

Renvoie false si invalide, true si valide, or ce n'est pas le cas, par exemple la porte And :

bool And::check(QList<QString>& errors)
{
	if (children.size() < 2)
	{
		errors << prop.getName() + ": There must be 2 or more inputs.";
		return (false); // ok mais bloque le check des enfants
	}
	for (int i = 0; i < children.size(); ++i)
		children.at(i)->check(errors);
	return (errors.size() > 0); // erreur, doit renvoyer true si la liste est vide
}

Result appelle son destructeur

Result doit pas se delete lui-même c'est déjà le rôle de son destructeur. Il faut delete les ResultBoolean et/ou ResultMCS qu'il a alloués avec new, donc les pointeurs diférents de la valeur nullptr.

Ajouter des méthodes virtuels dans Node

Je dois utiliser une liste<Node*>, je vais mettre ses fils Gates et Containers dedans, du coup quand je veux appeler des méthodes des fils, c'est le polymorphisme, il faut ajouter des méthodes virtuelles correspondant dans Node.

Surcharge operator dans Event

Parce que je dois utiliser QMap et la fonction .contains() de QList, il faut surcharger operator== et operator< de classe Event. Sinon y'aura erreurs.

Segfault classe Event

J'ai un segfault en appelant la méthode setDistribution(nullptr) dans la classe Event, d'ailleurs le pointeur de distribution n'est pas initialisé à nullptr dans le constructeur.

La méthode remove de Transfert segfault

Le lien vers le sous arbre ne doit pas être supprimé, uniquement détaché (si il existe).

J'en profite aussi pour dire que le compteur de ref de link n'est pas mis à jour

EvalVisitor n'est pas correct

L'attribut proba ne sert à rien. Il suffit de remplacer

double EvalVisitor::getProba() { ... }
void EvalVisitor::reset() { ... }
void EvalVisitor::setTime(double time) { ... }

par

double EvalVisitor::getProba(Gate *top, double time)
{
    this->time = time;
    return top->accept(*this);
}

Segfault avec check lorsqu'il y a un cycle

Lorsqu'il y a une porte + une porte de transfert qui est liée au même arbre, il y a un segfault lors de l'évaluation (étape du check qui ne vérifie pas correctement si il y a un cycle)

Configuration du test (testable sur la branche gui actuellement) :

cycle

Leak mémoire dans le destructeur de l'Editor

La classe Editor ne libère pas la mémoire des objets qu'elle contient lorsque le destructeur est appelé.

(Attention à tout delete, y compris les portes de transferts et les containers qui ne sont pas dans les listes, avec la méthode remove sur tous les arbres en mémoire)

Les portes de transfert n'ont pas de nom pour l'analyse?

C'est normal mais du coup, pour l'analyse de l'arbre, si deux portes de transfert ont la même erreur
on ne voit qu'une erreur sur l'error list(puisque c'est le même texte et qu'on enlève les doublons) et; si une seule est fausse on ne sait pas laquelle...

Faudrait-il le changer et si oui comment?(donner un nom juste pour l'analyse, donner un nom définitif, d'autres idées...)

Program not responding due to step/mission time

Describe the bug
Increment step/mission time by using arrows give access to incoherent numbers.

To Reproduce

  1. Go to Analysis/Evaluate after making a tree
  2. Click on Use boolean algebra
  3. Click 8 times on the increase arrow for Step
  4. See Step as 0.799999s
  5. Click 8 times on the decrease arrow for Step
  6. See Step as 2.77*e-17s
  7. Increase Mission time by 0.1 then click on Continue
  8. See Program not responding

Expected behavior
The increase of the mission time/step should not suddenly change, as it induce unexpected behaviours
Screenshots
misstep

Desktop (please complete the following information):

  • OS: [Debian]
  • Version []
    Additional context

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.