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.