Je suis un développeur junior et j'ai du mal à estimer combien de temps il faut pour terminer un projet logiciel plus grand. Je sais comment structurer l'architecture en général, mais c'est difficile pour moi de savoir quels détails que je dois faire et quels problèmes je dois résoudre. Il est donc difficile d'estimer combien de temps il faudra pour terminer un projet plus grand, car je ne sais pas quels problèmes auxquels j'ai besoin de résoudre et combien de temps il faut pour les résoudre.
Comment puis-je expliquer cela à une personne qui est pas un développeur de logiciels?
Vous pouvez lui demander d'estimer combien de temps il faudrait pour elle d'accéder à un emplacement éloigné dans un coin inhabité du monde. À titre d'exemple extrême, choisissons un sommet moindre connu dans l'Himalaya, où très peu (le cas échéant) les gens ont déjà monté. Elle aurait besoin d'une énormément de préparation plus la pratique avant même de commencer le voyage, plus un tas de permis, chacun peut retarder le voyage pendant des mois à des années ... et une bonne équipe de soutien ... puis une fois sur la colline pente, elle aurait besoin d'attendre et de prier pour que le beau temps commence à grimper vers le sommet ... etc. Etc. La plupart d'entre eux sont difficiles à estimer, même avec une expérience antérieure.
Et le point est: chaque projet logiciel est un peu comme grimper une nouvelle montagne, où personne n'a été auparavant, donc personne n'a d'expérience préalable directe. Les développeurs chevronnés ont peut-être collecté une expérience sur plus ou moins similaire Projets, mais il y aura toujours de nouveaux éléments et surprises - sinon, Si un projet logiciel était Exactement comme une partie précédente, il n'y aurait absolument aucun point de le faire .
Avez-vous expliqué que à la personne? Vous êtes l'ingénieur du logiciel professionnel, de sorte que la personne que vous construisez des logiciels pour devoir envisager vos connaissances et vos commentaires en matière de conception et de mise en œuvre de systèmes logiciels.
Le cône d'incertitude est probablement un bon point de départ. Les projets logiciels sont difficiles à estimer jusqu'à ce que plus de détails soient connus, ce qui se passe plus tard dans le projet. En outre, l'évolution des exigences changera également des estimations. Vos estimations initiales au début d'un projet auront une grande quantité de variabilité.
Vous pourriez être intéressé par d'autres techniques d'estimation. Vous avez mentionné que vous n'êtes qu'un développeur junior. En règle générale, des développeurs plus expérimentés ont une meilleure capacité d'estimer car ils ont vu plus de problèmes, les résolus et (espérons-le) ont gardé une trace de l'estimation par rapport à l'heure actuelle. Vous pouvez profiter de cela en utilisant des techniques d'estimation telles que large bande Delphi ou Planning Poker .
En tant que développeur junior, commencez les estimations de suivi et le temps réel maintenant. Vous pourriez être intéressé à lire sur le processus logiciel personnel développé à l'Institut Software Engineering. Les livres de base de la PSP sont ne discipline pour l'ingénierie logicielle , PSP: processus d'auto-amélioration pour les ingénieurs logiciels et Introduction au processus logiciel personnel . Je crois que l'introduction au processus logiciel personnel couvrirait les sujets que vous trouveriez le plus utile. Je pense que cela dépasse généralement la plupart des développeurs, mais il dispose de bonnes idées et de bonnes pratiques qui peuvent être retirées et utilisées afin d'améliorer la productivité personnelle et de manipuler diverses compétences (y compris d'estimation) que vous utiliserez continuellement sur votre carrière.
Si vous allez faire beaucoup plus de travail dans l'estimation, je recommande vivement deux des livres de Steve McConnell: Estimation logicielle: Démystifier l'art noir (se concentre sur l'estimation en tant qu'art et science) et Développement rapide: Taming Wild Software calendriers (Processus d'ingénierie logicielle générale et thèmes de gestion de projet).
Se réfère à la littérature. Il y a une énorme tas de matériaux complexes et souvent contradictoires, qui, comme prouvé par la pratique (expériences), ne fonctionnent pas comme prévu. Au moins les universitaires sont influencés par une pile de livres.
Must-Lire: http://fr.wikipedia.org/wiki/the_mythical_man-minth
Le mythique mensuel de l'homme: essais sur l'ingénierie logicielle est un livre sur l'ingénierie logicielle et la gestion de projet par Fred Brooks, dont le thème central est que "l'ajout de la main-d'œuvre à Un projet de logiciel tardif le rend plus tard ". Cette idée est connue sous le nom de loi de Brooks et est présentée avec l'effet de second système et le plaidoyer du prototypage.
Les observations de Brooks sont basées sur ses expériences à IBM tout en gérant le développement du système d'exploitation/360. Il avait ajouté davantage de programmeurs à un projet qui tombe derrière le calendrier, une décision qu'il aurait ultérieurement contraignant intuitivement à avoir retardé le projet encore plus loin. Il a également commis l'erreur d'affirmer qu'un projet - écrivant un compilateur d'algol - nécessiterait six mois, quel que soit le nombre de travailleurs impliqués (il a nécessité plus longtemps). La tendance aux gestionnaires de répéter de telles erreurs dans le développement de projets LED Brooks pour que son livre s'appelle "la Bible de l'ingénierie logicielle", car "tout le monde le cite, certaines personnes le lisent et quelques personnes y passent." Le livre est largement considéré comme un classique sur les éléments humains de l'ingénierie logicielle ...
J'ai rencontré des personnes qui affirment qu'ils peuvent estimer des logiciels, mais je ne sais pas comment ils le font. Ni aucun d'entre eux n'a été capable d'expliquer comment ils le font.
En tant que consultant, mes clients ont souvent besoin de moi de travailler sur une base de soumission fixe. Ainsi, j'ai besoin d'estimer afin que je puisse préparer une offre réaliste. Je n'ai jamais réussi cela. On pourrait penser que je voudrais trop souvent que je sous-joins, mais ce n'est jamais le cas. Le résultat est que je perds souvent beaucoup d'argent sur mes contrats et que je finis à gagner beaucoup moins que moi, si je travaillais pour une entreprise comme employé régulier.
Je cherche de nombreuses années pour un livre qui m'apprendrait comment estimer le logiciel, mais je n'ai pas encore trouvé un.
Quant à l'expliquer cela à quelqu'un qui n'est pas un codeur. Vous pouvez souligner que personne dans l'industrie n'est toujours capable de répondre à leurs estimations. Il arrive tout le temps que de nouveaux produits logiciels soient prénoncés, uniquement pour expédier des mois ou des années après la date annoncée à l'origine.
Si une grande entreprise comme Microsoft ne peut pas comprendre comment estimer le temps qui se développe dans ses propres produits, comment puis-je?
Que je sois payé à l'heure ou à l'emploi, mes clients attendent toujours que je fournisse ces estimations. Je ne sais pas comment ils s'attendent à eux de les produire lorsqu'une telle estimation n'est enseignée nulle part et je n'ai aucune base rationnelle pour mes estimations.
Découvrez ce qu'ils planifient avec cette estimation. Dans leur esprit, ils veulent savoir si cela prendra des mois ou des années et que vous essayez d'obtenir les heures exactes (ingénieur typique).
Voyez si vous pouvez travailler sur un morceau du projet, puis placez une meilleure estimation si nécessaire.
S'ils continuent à pousser, vous serez obligé de détailler autant de tâches que vous pouvez appliquer une période. Dites-leur que vous les informerez dès que vous voyez tout ce qui peut affecter l'estimation et faire des ajustements. Les gens essaient généralement d'éviter des surprises.
L'estimation de l'ensemble du temps est généralement effectuée par le responsable du projet et non le programmeur.
Vous pouvez créer un argument en fonction du fait que le gestionnaire de projet dispose de la liste complète des tâches requises. Sans cette liste, aucune estimation sera une supposition "mauvaise".
De plus, le temps dépend de nombreux facteurs tels que le nombre de personnes disponibles et la portée des exigences que vous n'avez pas dit que vous avez. L'architecture seule ne suffit pas.
Un autre point que vous puissiez faire est que l'ingénierie logicielle en est encore à sa balance par rapport à d'autres domaines d'ingénierie et n'a pas suffisamment mûré pour que les techniques de développement esquitables soient apparues.
L'ingénierie du logiciel est également dans un état continu de flux. Au moment où une technologie est suffisante pour être considérée comme mature, elle est souvent abandonnée en faveur de certaines nouvelles technologies. Cela empêche toute personne d'acquérir suffisamment d'expérience avec une technologie pour pouvoir produire des estimations fiables.
Contrairez cela avec l'estimation de la construction. C'est un problème très bien compris, non seulement parce que les contrats sont attribués sur la base des offres, mais parce que l'humanité a construit des choses depuis l'aube de la civilisation.