web-dev-qa-db-fra.com

Comment améliorer la formation des étudiants en matière de maintenabilité?

La main-d'œuvre est une participation majeure du développement logiciel professionnel. En effet, la maintenance est presque toujours la partie la plus longue d'un cycle de vie logiciel, car elle dure de la libération du projet jusqu'à la fin de la fin des temps.

De plus, des projets étant en maintenance représentent une grande majorité du nombre total de projets. Selon http://www.vlegaci.com/298/interresting-statistics-%E2%80%93-numbers-of-programers-in-Maintenance-vs-development/ , la proportion de Les projets étant en maintenance sont environ 2/3.

J'ai récemment rencontré cela question , où le gars a l'air assez surpris de découvrir que son travail consiste principalement à la maintenance. J'ai ensuite décidé d'ouvrir une Discussion (français sur le site principal de la communauté française de professionnels du développement de logiciels ( http://www.developpaz.com/ ). La discussion est intitulée "Les étudiants sont-ils assez bien formés à la réalité du développement de logiciels professionnels?" et est principalement environ maintenabilité . Il a été souligné que, du moins en France, les gens ne sont pas assez bien préparés pour faire face à la maintenance des deux aspects:

  • maintenir le code existant
  • faire du code maintenu

Ma question ici fait écho à cette discussion et vise à trouver un bon moyen d'enseigner la maintenabilité.

  • Comment pouvons-nous enseigner la maintenabilité?
  • Quel genre d'exercice suggéreriez-vous?
  • Si vous avez été bien formé à la maintenabilité, quel genre de cours avez-vous pris?

[EDIT] Après quelques malentendus, je pense que je dois clarifier ma question. En tant que chef de projet et développeur de logiciels, je travaille souvent avec des stagiaires ou des étudiants fraîchement diplômés. Une fois, j'ai été fraîchement diplômée moi-même. La chose est que les étudiants ne soient généralement pas familiers avec des principes tels que SOLID = === qui augmentent la maintenabilité d'un projet. Nous finissons souvent à avoir des difficultés importantes faisant des projets évoluent (faible maintenabilité). Ce que je cherche Voici un exemple académique concret d'enseignement réussi sur l'importance de la maintenabilité et sur la manière de créer un meilleur code concernant ce point particulier; ou des suggestions possibles pour améliorer la manière dont les étudiants sont formés.

18
Matthias Jouan

Disclaimer: Je viens de recevoir mon diplôme CS. Je ne suis pas un enseignant.

Cela peut sembler évident, mais je pense que le meilleur moyen d'enseigner la maintenance du code est de faire effectuer des étudiants de maintenance du code. Voici ce que je ferais:

  1. Prenez un problème modérément complexe et deux implémentations sémantiquement identiques, mais on est beaucoup plus maintenu que l'autre.
  2. Demandez un certain nombre d'ajouts de modifications/fonctionnalités qui sont beaucoup plus faciles à mettre en œuvre sur la meilleure base de code. Une moitié des étudiants doivent les mettre en œuvre sur la base de code plus maintenue, l'autre moitié sur le moins maintenu.
  3. Par souci d'équité, vous voudrez peut-être répéter cet exercice avec les rôles inversés.
  4. Comparez le nombre moyen de modifications mises en œuvre avec succès entre les bases bonnes et mauvaises bases et le temps passé à les mettre en œuvre. Demandez aux élèves de partager leurs expériences, de leurs griefs et de parler généralement du travail qu'ils ont fait.

L'idée est de savoir non seulement que les élèves travaillent avec le code de quelqu'un d'autre, mais également de leur faire évoluer une appréciation du code maintenu qui, espérons-le, améliorera leurs compétences de conception.

11
suszterpatt

Je n'aime pas le terme maintenable par rapport au développement de logiciels. La réalité est que tous les logiciels sont maintenus en ce sens qu'il peut être soumis à des travaux de maintenance. Le problème réel est donc de savoir si des logiciels sont coûteux ou peu coûteux de maintenir, relativement parlant. Je sais que cela ressemble à une énoncé très pédant à faire au début d'une réponse, mais mon point deviendra plus clair dans un instant.

Le problème avec ses diplômes que le développement de logiciels majeur est qu'ils n'apprendent vraiment que les élèves le plus grand minimum que les étudiants doivent savoir sur l'écriture de logiciels. Les compétences professionnelles et les connaissances sont gagnées grâce à l'apprentissage qui se fait dans les premières années après qualificatif pour le diplôme. C'est quand un diplômé commence à travailler sur des projets qui comptent réellement pour un client, dans un environnement où il y a une grande pression à effectuer, et l'attente est de créer un produit à une norme professionnelle. Malheureusement, de nombreuses entreprises n'encouragent pas une culture dans laquelle les normes professionnelles des logiciels sont maintenues et se retrouvent avec des projets qui se révèlent coûteux pour développer et maintenir en conséquence. Malheureusement pour nos diplômés, ils apprennent beaucoup de mauvaises habitudes dans de tels environnements dans les premières années de leur carrière, et cela peut être longtemps avant d'apprendre à surmonter ces habitudes ... du tout.

Vous feriez mieux d'enseigner aux élèves comment écrire du code propre et comment identifier les problèmes liés aux logiciels qui finissent généralement par supporter dette technique . Regardez dans des livres sur - Clean Code , refactoring et Développement du logiciel Lean comme point de départ comme un lieu de départ et apprendre aux étudiants à écrire une unité Tests avant le code de mise en œuvre afin de s'assurer qu'il existe un degré de couverture de test élevé. Enseignez aux élèves de reconnaître des modèles dupliqués et répétitifs au sein de leur code et comment refactoriser le code pour supprimer une telle duplication. Aidez les élèves à comprendre et à appliquer des principes tels que SOLIDE et SEC . Plus important encore, éliminez cette idée que la capacité de maintenir le code est quelque chose qui se fait uniquement sur la conception et la mise en œuvre du code, et instillez plutôt un sentiment d'artisanat et de qualité dans la production de logiciels dès le départ, cherchant à Affinez le code tel qu'il est mis en œuvre afin de minimiser l'impact de la dette technique et de maintenir ainsi le coût de maintenance de logiciels au minimum au fil du temps.

1
S.Robins