jeudi 16 septembre 2004

Introduction Delphi


Delphi est un outil de programmation orienté Windows et maintenant linux. Un peu comme Visual Basic, il est possible de créer des programmes Windows et linux très aisément. C'est un logiciel de développement de type rad (rapid application development).
Delphi est puissant et fiable, grâce à la vcl (virtual composent library), on n'a plus réellement besoin de se soucier des caractéristiques propre à Windows ou linux. On n'a qu'à se concentrer sur l'algorithme à développer. On peut à tout instant décider d'utiliser l'api au lieu de la vcl.

Delphi permet d'utiliser le basic, l'assembleur, les microsoft foundation classes(mfc). Comme on peut voir, il est très polyvalent. La vcl fournit de nombreux composants visuels et non-visuels dans de nombreux domaines : bases de données, communication, réseau, multimédia. Avec l'envolé d'internet, on retrouve de plus en plus de composant gratuit ou à peu de frais sur la toile.

Delphi utilise le pascal objet, qui a fait ses preuves depuis longtemps. Il surpasse dans certains domaines le langage c++. En somme, il possède la puissance du C++ avec la facilité du visual basic, ce qui constitue un rêve pour les programmeurs. Les fichiers exécutables de delphi nécessitent aucunement de bibliothèque supplémentaire enfin de fonctionner, ce qui augmente considérablement leurs vitesses d'exécution.
Delphi pour Windows en est rendu à sa 8 version, on a le choix entre 4 variantes de delphi:
  • personnel
  • professionnel
  • entreprise
  • architecte
Le standard étant amplement suffisant pour les besoins d'un programmeur débutant, les autres préféreront la version professionnelle.
Kylix est la version de Delphi et de bcb pour linux,ils sont offert en trois versions:
  • Développement Serveur
  • Développement Desktop
  • Open Edition
La version open edition est offerte gratuitement en téléchargement, si vous voulez découvrir la puissance de delphi, n'hésitez pas à la télécharger.

Même si delphi facilite grandement la programmation, il faudra comme dans tout langage travailler fort enfin de devenir un excellent programmeur. On peut grâce à delphi 6, 7 et kylix développer une application qui fonctionnera sans trop de problème sous les deux systèmes d'exploitation.

Delphi 8 est orienté .NET, le pont avec Win 32 est brisé. Borland utilise le framework MS .Net.

Bonne programmation!

mercredi 15 septembre 2004

Bash



Ce livre offre un moyen de s'initier et s'améliorer sur le script bash. Les auteurs traitent des concepts de bases telle que les flux de donnée, les entrées/sorties, les options de la ligne de commande...

Des concepts plus avancés telle que la gestion de processus, administration du shell sont aussi passé en revue. Ils traitent même de l'édition en utilisation vi et emacs.

Beaucoup d'exemple y sont présenté même s'il manque d'exemple réelement utile. C'est un livre de référence pour quiconque désire se mettre au scrip sous linux.

mercredi 25 août 2004

Système de news


SYSTÈME DE NEWS

Le système de news est un script très simple à mettre en oeuvre. Il s'agit en fait que d'une table pour la news. Nous avons inclus une référence à la table soussection. Cette référence permet d'afficher la news liée à une section. Par exemple, nous insérons une news relative au Génie logiciel, elle sera affichée sur la page principale du site en plus d'être affichée sur la page de la section Génie logiciel. Si vous ne désirez pas une telle option, il suffit d'enlever la référence à SOU_NOSOUSSECTION dans le code de la table ci-dessus. Si vous désirez de plus amples renseignements sur la table sectio, soussection lisez les autres tutoriels de php.

La table news contient seulement quelques information, si vous désirez ajouter le nom de l'auteur de la news, vous pouvez soit ajouter un champ de type string à la table. Cette façon de faire est simple, mais il y aura de la redondance. Le nom de l'auteur sera inscrit autant de fois qu'il a inscrit de news. Il est préférable de créer une table membre (voir tutoriel forum) et ensuite de faire une référence avec la table news.

DROP TABLE IF EXISTS `news`;
CREATE TABLE `news` (
  `NEW_NONEWS` int(11) NOT NULL auto_increment,
  `SOU_NOSOUSSECTION` int(11) NOT NULL default '0',
  `NEW_TITRE` varchar(120) default NULL,
  `NEW_DATE` date default NULL,
  PRIMARY KEY  (`NEW_NONEWS`),
  KEY `NEW_NONEWS` (`NEW_NONEWS`)
) TYPE=MyISAM AUTO_INCREMENT=39 ;

Le script ci-dessus affiche les news. Seules les 10 dernières nouvelles sont affichées. Ceci afin que la page soit affichée plus rapidement.

function returnnews()
{
  echo '<div id="main"><table class="tab">';
  $requete = mysql_query("SELECT new_titre , new_date, s.sec_nomsection FROM news LIMIT 10");
  if ( mysql_num_rows($requete) != 0 )
  {
    while ($ligne = mysql_fetch_assoc($requete))
    {
      if(''.$ligne['sec_nomsection'].'' != "")
        echo '<tr><td class="newsdate">'.$ligne['new_date'].'</td><td class="newstitre"> '.$ligne['new_titre'].' dans la section '.$ligne['sec_nomsection'].'</td></tr>';
      else
        echo '<tr><td class="newsdate">'.$ligne['new_date'].'</td><td class="newstitre"> '.$ligne['new_titre'].'</td></tr>';
    }
  }
  echo '</table></div><br/>';
}

L'insertion d'une nouvelle est simple, vous devez créer un formulaire. Dans notre cas, nous utilisons une listbox pour afficher les sections ainsi qu'un input pour entrer le texte de la nouvelle.

echo '<br/><div class="titresection">Ajout de new</div>';
  echo'<div id="main">';
  echo'<form id="new" action="ajout" method="post">'; 
  
  //nom de la section et type de la section
  $requete = mysql_query("SELECT sou_nosoussection, ss.sec_nosection, sou_soussection, sec_nomsection from soussection ss inner join section s on s.sec_nosection = ss.sec_nosection"); 
  echo '<div>Nom de la section<br/></div>';
  echo '<div><select name="section">';
  echo '<option value="0" SELECTED>Aucune</option>';
  while ($ligne = mysql_fetch_array($requete)){       
    echo '<option value="'.$ligne["sou_nosoussection"].'">'.$ligne["sec_nomsection"].' - '.$ligne["sou_soussection"].'</option>';
  }
  echo '</select><br/><br/></div>';

  echo "<div>Titre de la new<br/></div>";
  echo '<div><input name="titre" class="txtsub" size="75" maxlength="120"/><br/><br/></div>';  
  echo '<div><input type="hidden" name="form" value="new"/></div>';
  echo '<div><input type="submit" class="butsub" value="Soumettre"/></div>';
  echo '</form>';
  echo'</div>';

Dans la listbox, nous affichons la section ainsi que la sous-section. Par exemple: delphi - tutoriel, delphi - livre, php - tutoriel... Nous avons aussi mis la possibilité de mettre aucune donnée pour cet élément.

Ce cas peut s'avérer utile si vous ajoutez une nouvelle n’ayant aucun lien avec une section. Par exemple un nouveau modérateur, changement de graphisme...
N'oubliez pas de valider vos données avant de les insérer dans la base de données. Voici le code de validation du formulaire qu'on a vue.

function validationnew()
{
  echo '<div class="titresection">Ajout de new</div>';
  echo '<div id="main">';

  if (!empty ($_POST['section']) && !empty ($_POST['titre'])) 
  { 
    mysql_query("INSERT INTO news (new_titre, sou_nosoussection, new_date) VALUES ('" . $_POST['titre'] . "',  '" . $_POST['section'] . "', NOW())");
 
    echo "Merci d'avoir contribué.";
    echo '<br/>La new à été ajouté<br/><br/>';
  }
  else
  {
    echo "La new ne peut être insérée. Un problème a été détecté, il y a soit un champ vide.";
    echo "Veuillez revenir en arrière dans votre navigateur.";
  }
   echo '</div>';
 }

samedi 21 août 2004

Les tests


LES TESTS

Un test permet grâce à un procédé de vérification de s'assurer d'une certaine qualité pour un produit, service. Cette activité doit permettre de déceler les problèmes, défaut encore présent.

Tel que montré dans l'article sur le cycle de développement logiciel et les méthodes de développement, les tests devraient représenter une bonne partie d'un projet informatique. Nous savions tous quand réalité que c'est beaucoup moins, sinon il y aurait beaucoup de problèmes avec les logiciels. Il est préférable de détecter une erreur lors des tests que de la détecter chez le client. Les coûts de réparations ne sont pas les mêmes.

Les tests ne sont pas faits pour montrer qu'il n'y a pas d'erreur, mais bien pour montrer qu'il en existe.

Étant donné la complexité des applications d'aujourd'hui, il est peu réaliste de vouloir tester toutes les possibilités qu'un logiciel peut offrir. Une telle situation serait quand même l'idéale.

Le test unitaire

Ce test est fait directement par le programmeur. C'est le test le plus efficace pour déceler des erreurs. C'est le test qui permet d'en trouver le plus et c'est à cette étape du codage que le coût d'une erreur est le plus bas à résoudre. Il consiste à vérifier si la classe, fichier, unité comporte des erreurs. On les teste séparément. Lorsque les tests voulus ont été effectués, ils peuvent être testés ensemble.

Nous pourrions avoir 3 fichiers : validation.c, encryption.c. Les tests seraient faits séparément sur les deux premiers fichiers en premier lieu. Lorsqu'on crée une méthode ou une fonction, on peut avoir des paramètres et une valeur de retour. On doit tester ces éléments avec différentes valeurs et regarder si le résultat est celui désiré. Le compilateur et débugeur est d'une aide précieuse à ce niveau des tests. Des logiciels permettent d'automatiser ces tests tels que JUnit. Cette solution permet d'économiser temps et argent.

Le test d'intégration

Ce test valide tous les tests unitaires qui ont été faits indépendamment. Le fichier formulaire.c utilise les deux autres fichiers cités précédemment. On tente alors de déceler les problèmes qui peuvent survenir lorsqu'on combine les fichiers ensemble : les appels de fonctions, problème de droit dans les classes. Il est possible de créer des composants à partir de plusieurs fichiers.

Ce composant peut très bien fonctionner seul. Une fois mis en place avec d'autres, son fonctionnement peut être altéré. Ce test a pour mission de déceler ce genre de problème.

Le test de régression

Lorsque des modifications sont fait au programme, ajout de fonctionnalité, modification de fonctionnalité... des tests de régression devrait être fait. Les tests déjà faits sur le système doivent être refaits afin de savoir si le système fonctionne toujours comme il devrait.

Refaire à chaque fois de nouveau test est coûteux en temps, argent et ressource. Il est possible de cibler les tests devant être nécessaires afin d'évaluer certaines parties du système. Par exemple, un problème pourrait avoir été corrigé, mais sa correction pourrait entraîner d'autres problèmes.

Test d'acceptation

Ce test vérifie le système tel que le désire le client, dans les conditions de fonctionnement établi par lui. Ce test est donc basé sur les exigences et spécification de l'utilisateur. Le système est vérifié dans son ensemble. Ce test n'est pas fait par les développeurs. Des personnes n'ayant eu aucun contact avec le système peuvent être employées pour le tester. Ils peuvent ainsi déceler des anomalies qui auraient passé inaperçues par l'équipe du projet. Le client approuve ou non le système après avoir effectué ce test.

Des critères doivent être définis afin de savoir ce qui permet de spécifier si le système peut être livré ou non. L'implication du client doit absolument se faire à ce niveau du test. Chaque élément testé doit inclure l'exigence testée, les résultats attendus, le résultat obtenu. Ces données sont mises dans un document. Ce document permet de savoir ce qui fonctionne et ce qui ne fonctionne pas.

lundi 7 juin 2004

Les métriques

LES MÉTRIQUES

Les métriques d'un logiciel sont différentes mesures de propriété d'un logiciel. Les mesures sont primordiales en génie logiciel. Elles permettent d'estimer les coûts, les échéanciers et les ressource ce qui permet de définir un coût approximatif pour le système à créer. Nous allons discuter un peu des métriques pouvant être évaluées. Il est donc indispensable d'avoir de bonnes méthodes de travail ainsi que de bons logiciels pour mesurer un logiciel. Nous n'allons pas nous attarder énormément sur la théorie, car des outils existent pour effectuer ces tâches.

Différentes types de mesure

Source lines of code Source lines of code (SLOC)

C'est le nombre de ligne de code du programme. Une telle mesure permet d'estimer l'effort nécessaire pour développer le logiciel. Ça permet d'aussi de connaître l'étendu du logiciel. Il y a deux types de mesure pour le SLOC.
  • Physique
  • Logique

Physique

Le type physique compte ce qui indépendant du langage de programmation: les commentaires, interligne.

Logique

Le type logique compte le nombre de commande, il est dépendant du langage utilisé. Par exemple en c, pascal, Java on pourrait avoir une idée en comptant le nombre de «;». Windows 3.1 a environ un SLOC de 3 millions tandis que celui de Windows XP tourne autour de 40 millions. Le noyau de Linux 2.4 tourne autour de 4 millions. Ce chiffre n'est que pour le noyau et non le gui et cie tel que les chiffres présentés pour Windows.
Un programme ayant un SLOC élevé, sera habituellement plus long à faire, coûteux et nécessitera une bonne gestion.

La complexité cyclométrique

C'est le niveau de complexité de l'application, plusieurs critères déterminent cette complexité: flux de contrôle, flux de données, structure de donnée. Cette mesure détermine le nombre de chemin indépendant dans un algorithme. Plus qu'il y a de chemin, plus la complexité est élevée. Ce nombre détermine aussi la quantité de tests à effectuer si on désire tester toutes les possibilités. Un graphe de contrôle doit être créé afin de pouvoir déterminer la complexité structure du graphe.
  • n = Nombre de noeuds
  • e = Nombre d'arcs
  • v = Nombre cyclomatique
v donne le nombre approximativement de tests nécessaire.
if(x)
 while(y)
  b;
else
  z;
a;

Voici un petit diagramme pour illustrer ce code



Il y a donc 5 noeuds et 6 arcs: n=5, e=6. Il y a 1 point d'entrée et 1 point de sortie. 5-6 + 1 + 1 = 3. Un nombre supérieur entre 30 et 50 comment à être très élevé. Des erreurs peuvent être aisément commises et les tests seront plus complexes à réaliser. Il y a quand même des exceptions, par exemple le switch disponible dans quelques langages... même si le nombre cyclomatique peut être élevé dans cette commande, sa compréhension est fort simple. L'exemple ci-dessus est simple, mais permet de se faire une idée de l'approche. De toute façon, ce genre de calcul est donné à des logiciels qui se chargent d'analyser le code source.

Point de fonction

Les points de fonctions sont utilisés lorsqu'on veut estimer la dimension du projet, le temps de développement ainsi que l'effort pour un projet. Cette méthode consiste à calculer le nombre d'entrée, sortie, interrogation et donnée (interne et externe).

Les entrées

C'est les données qui entrent dans l'application. Ceci peut représenter des données matérielles : écran, cd... ou logiciel: paramètre, variable...

Les sorties

C'est les données qui sortent de l'application.

Les interrogations

C'est un mélange d'entrée et de sortie

Les niveaux de complexité

Un niveau de complexité doit être déterminé pour chaque composant: faible, moyen et élevé. Un nombre est attribué pour faible, moyen et élevé.
Calcul des points de fonction
Type de composant Complexité Nombre Total Total pour le composant
Entrée Faible *4=
Moyen *5=
Élevée *6=
Sortie Faible *4=
Moyen *5=
Élevée *6=
Interrogations Faible *4=
Moyen *5=
Élevée *6=
Nombre de point de fonction
Il faut être prudent avec un tel tableau. Même si un système possède par exemple 20 points de fonctions, cela ne garantit en rien qu'il est moins complexe qu'un qui en inclurait 50. On pourrait avoir un système de gestion sonore qui serait beaucoup plus complexe niveau code et algorithme à produit qu'un système de gestion créer avec vb. Ce type de mesure est efficace pour les systèmes de gestion et les systèmes ayant une interface usager très marqué, mais l'est beaucoup moins pour ceux ayant beaucoup d'algorithmes.

Depth of inheritance Tree

C'est la profondeur de la classe au niveau de l'héritage. Plus une méthode se situe à un niveau inférieur plus que son nombre de méthode et d'attributs son élèvé. La structure devient alors très complexe. Les erreurs peuvent être très difficiles à trouver dans un système avec énormément d'héritage. De plus, si des changements doivent être faits, ils peuvent avoir des impacts un peu partout au niveau des classes.

Number of Children (NOC)

C'est le nombre d'enfants d'une classe.Il y a beaucoup de réutilisation lorsque le nombre d'enfants est élevé. Il peut aussi y avoir un problème au niveau de la classe de base. Des méthodes ont mal été définies, son niveau d'abstraction est trop bas ou trop élevé. Tel que dit précédemment s'il y a beaucoup d'enfants, beaucoup d'héritage a lieu, ce qui rend le système plus complexe à comprendre, à tester.

Coupling between Objects (CBO)

C'est le complage de classe. Le nombre de classes qu'une classe utilise. Lorsque beaucoup de classe est utilisée dans une classe, il y a peu de modularité et donc le risque de réutilisation devient faible. C'est aussi un signe que notre classe peut avoir mal été pensé.Un CBO faible est un indice qu'une classe est réutilisable aisément.

Mesure pour un projet

Les métriques ne s'applique pas uniquement sur les systèmes informatiques. Ils sont très important aussi pour le domaine de la gestion. Connaissant l'expériences des programmeurs, analystes, ils peut être possible de déterminer le nombre de jour homme pour le développement concernés. Une complexité peut être assigné à chaque module à développer. La même stratégie peut être assigné à la correction de problème. La mesure de la complexité à résoudre le problème ainsi que le degré de sévérité permettent d'assigner les bonnes ressources aux problèmes. L'outils Bugzilla offre différents diagrammes et de rapport concernant les problèmes du système. C'est un outils indispensable pour la phase de test.

Logiciel pour les métriques

Divers outils existent pour les métriques dont plusieurs pour Java, en voici quelques-uns.
JStyle
PMD
JDepend

lundi 3 mai 2004

Conception et programmation orienté objet




Ce livre ne s'adresse pas à un langage en particulier. C'est un livre de référence pour la création de logiciel. Une excellente base de ce qui est nécessaire de connaitre lors du développement d'une application est écrit dans ce bouquin.

L'héritage, le polymorphisme, les patrons, l'architecture, la réingénierie... sont couvert. Un des rare bon livre en Français sur le sujet.

L'auteur explique en plusieurs étapes et méthodes la façon de développer un logiciel pour qu'il réponde aux normes les plus strictes.

Il explique d'une façon très intelligente la POO. Il explique le pourquoi des choses. Les principes et les exemples utilisent le langage eiffel. C'est le livre par excellence pour la POO.

mercredi 25 février 2004

Software architecture in pratice




Ce livre introduit les concepts de base de l'architecture logicielle. L'architecture du logiciel est comme la fondation d'une maison, c'est la base. Un mauvais départ aura des répercussions si aucun changement n'est apporté. Il permet d'élaborer la base du système afin qu'il réponde à certain critère donné.

Ce livre présente différente architecture, les avantages et inconvénients de chacune. Un exemple sur l'aviation est présenté tout au long du livre. Les auteurs mettent l'emphase sur la période de conception de l'architecture, sur la création et l'analyse de l'architecture.

La réutilisation d'architecture et le passage à une autre architecture y sont discutés. Ces concepts font partis de plusieurs chapitres du livre. Ce livre permet de voir le développement d'un système d'une autre façon. Il permet de mieux comprendre l'importance d'élaborer de bonne base afin de limiter les problèmes possibles et de pouvoir réutiliser les bases créées.

Il est nécessaire d'avoir une certaine base en informatique afin d'apprécier ce livre à ça juste valeur. Ce n'est pas un livre aisé, il peut servir de référence lors de la l'architecture d'une application. Il sera alors utile de relire certain passage afin de répondre au spécification désiré.