透视软件开发过程中的难点_PHP教程
作者:田占海 1 引言 如果你是一个程序员,可能常常为不能按时完成任务而苦恼。如果你是一个项目经理,可能会觉得开发符合预算和进度要求的软件简直难于上青天。实际上,软件项目常常严重超期或超出预算仍是困扰着绝大多数软件机构的难题。据美国一份评估报告显示,17个主要的国防部软件合同中,平均28个月的进度计划推迟了20个月才完成。一个4年应该完成的任务,7年还未提交,其中没有一个项目按时完成。由于存在软件问题,B1轰炸机的部署被推迟了,同样的原因,580亿美元的A12飞机计划也被部分取消了。持续了二三十年的软件危机为什么愈演愈烈?软件开发为什么如此之难?本文试结合作者的体会对软件开发的困难之处做一剖析,并提出一些建议。 2 困难所在 2.1 极大的复杂性 大多数大型软件软件产品由几十甚至几百万行源代码构成,例如:Windows95操作系统由大约1100万行代码组成。每一行代码都可能影响到程序的其它部分,并且各个部分之间都可能互相影响。这样一个错综复杂的巨大系统当中,每一个小小的错误都可能导致整个系统崩溃。有些大型软件,例如Windows,可能是人类曾经建造过的最复杂的事物之一,从古至今最复杂的建筑都无法与之相比。 2.2 高度的不确定性 一个软件项目从一开始就存在许多不确定性因素。其一:用户需求很难确定。这是因为软件开发者很难详细了解用户的需求,甚至用户在看到产品之前也不清楚自己到底需要什么,所以从项目开发的自始至终都可能会有新的需求提出,致使系统结构不断修改,最终面目全非。其二:设计不完全可以预测。有时,一个设计时认为可行的方案,在实现时可能行不通,或者最初的设计方案存在很大的缺陷而没有及时发现,或者突然一个设计时没有料到的技术难点阻挡了项目的进度。从设计到实现实际上有着很大的不可预测性。其三:用户需求不断变化,如果最初的用户需求没有了解的很清楚,可能整个项目很快就会陷在不断变化的需求之中不能自拔。其四:客观条件的不确定性。在项目的进展过程中,可能会有人员的流动,可能会有资源的调整,可能会有这样或那样的客观条件的限制而阻挡了项目的正常进行。在这样高度的不确定之中,在较早阶段精确估计一个项目不只是很难地,甚至是不可能的。 3 造成工期延误的原因 3.1 开发人员的过分乐观 许多开发人员倾向于一切都会进展顺利,这种盲目的自信对于项目开发来说是不对的。如果按照最乐观的估计,可能绝大多数任务都不能按时完成,因为在软件开发中不确定因素实在太多了。对于任务的复杂性和难度,对于自己能支配的时间,对于可能的突发事件的干扰等没有清楚的认识和估计,即使对自己的时间表作出保证,也可能常常无法按时交货。 3.2 来自外部的压力 作为项目的管理者或者客户都希望项目早日结束,因而为项目设置了一个个时间节点。 这些时间节点可能设置的根本就不可能实现或者实现起来会有很大难度,但是开发人员为了按时完工只好加班加点,以最快的速度完成要求的功能,而对于系统结构的考虑就会放到次要的位置上去,这样就为今后程序的维护埋下了隐患。更可怕的是一个个bug会随着压力的增大而产生,最后造成更大量的返工。程序就象程序员的孩子一样,每个人都希望自己的孩子茁壮成长,但是没有办法,多生快生就不能优生。 3.3 项目以外事情的干扰 如果一个项目的开发人员经常被项目以外的事情所干扰、牵制,不能全身心地投入到项目开发之中,常常会因此而影响了进度。这种现象在规模较小的软件企业中比较多见,一个开发人员经常身兼多职,甚至同时参与多个项目的开发。如果其它项目急于完工,则该项目只好被拖延。 3.4 项目管理的混乱 软件企业内部项目管理的混乱似乎是一个世界性的通病。卡耐基梅隆大学软件工程研究所(SEI)建立了一套标准,用来衡量软件企业从混乱到持续发展的这种状态,这就是就是CMM五级标准。第一级最为混乱,每升高一级情况都有所好转,第五级状况最好。 到2001年1月底,全世界只有1654家软件公司和机构通过了不同级别的认证。从下图可以看出,这是一个金字塔型的分布状态,图上只显示了二级和二级以上的企业,而处在 金字塔最低层的那些一级企业的数目不知有多少个1654家!所以从世界范围来看,软件管理的总体水平还是很低的。 3.5 开发人员的不足 全世界对于人才的竞争可能在IT界表现的最为激烈。一方面人才的绝对数量不足导致了许多企业不能招到自己急需的人才;另一方面人才的流动也导致了企业很容易失去自己的员工。一个项目如果缺少人手或人才频繁流动,将不能保证项目的正常进展。 4 如何避免工期延误 4.1 对不确定性做好充分准备 中国人都对《三国演示》中的赤壁之战非常熟悉,诸葛亮在赤壁埋伏了数路伏兵对曹操进行围追堵截,一招不行,还有下一招,对整个过程做了非常周密的准备和部署,所以大获全胜。软件开发亦是如此,在项目展开的初期就应该对过程中可能会出现各种的情况有所准备,才不至于车到山前无路可走。 4.2 立足于产品的灵活性 设计的灵活性是一个软件产品的灵魂。好的设计总是容易维护和升级,而不好的设计却会为今后的维护带来很大的麻烦,甚至整个产品都可能被废弃重来。因此在软件开发的的初期应花很大力气致力于整体设计,而不是急于编码,磨刀不误砍柴工,前期的投入会获得高额回报的。 4.1 提高软件管理水平 ISO9000质量管理系统的标准系列是建立在这样一个前提上:如果生产和管理系统没有问题,那么其产品和提供的服务也就没有问题,这说明管理水平如何于产品的质量有至关重要的影响。 我认为一个软件企业提高管理水平的最好途径就是为自己制定一个目标,比如实现CMM的级别认证或者ISO9000质量体系认证,在对这些目标努力的过程中会逐渐提高自己的管理水平。 1 结束语 本文对软件开发过程中的困难之处和常常造成工期拖延的因素做了一些粗浅的分析,并不是很系统、全面。对于如何避免工期延误也提出了几点建议,恳请读者批评指正。 2 参考文献 1.卡耐基梅隆大学软件工程研究所. 软件能力成熟度模型(CMM):软件过程改进指南. 电子工业出版社,2001.07。 2.[德] 霍克,勒丁,帕克特,林德纳,米勒. 软件业的成功奥秘. 上海远东出版社,2000 3.龚键雅. 当代GIS的若干理论与技术. 武汉测绘科技大学出版社,1999.03 4.廖斌. CMM介绍1. 2001.09

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Le 3 mars 2022, moins d'un mois après la naissance de Devin, le premier programmeur d'IA au monde, l'équipe NLP de l'Université de Princeton a développé un agent SWE pour programmeur d'IA open source. Il exploite le modèle GPT-4 pour résoudre automatiquement les problèmes dans les référentiels GitHub. Les performances de l'agent SWE sur l'ensemble de tests du banc SWE sont similaires à celles de Devin, prenant en moyenne 93 secondes et résolvant 12,29 % des problèmes. En interagissant avec un terminal dédié, SWE-agent peut ouvrir et rechercher le contenu des fichiers, utiliser la vérification automatique de la syntaxe, modifier des lignes spécifiques et écrire et exécuter des tests. (Remarque : le contenu ci-dessus est un léger ajustement du contenu original, mais les informations clés du texte original sont conservées et ne dépassent pas la limite de mots spécifiée.) SWE-A

Le gestionnaire de packages Python est un outil puissant et pratique pour gérer et installer des packages Python. Cependant, si vous ne faites pas attention lors de son utilisation, vous risquez de tomber dans divers pièges. Cet article décrit ces pièges et les stratégies pour aider les développeurs à les éviter. Piège 1 : problème de conflit d'installation : lorsque plusieurs packages fournissent des fonctions ou des classes portant le même nom mais des versions différentes, des conflits d'installation peuvent survenir. Réponse : Vérifiez les dépendances avant l'installation pour vous assurer qu'il n'y a pas de conflits entre les packages. Utilisez l'option --no-deps de pip pour éviter l'installation automatique des dépendances. Piège 2 : problèmes de package avec les anciennes versions : si une version n'est pas spécifiée, le gestionnaire de packages peut installer la dernière version même s'il existe une version plus ancienne, plus stable ou adaptée à vos besoins. Réponse : Spécifiez explicitement la version requise lors de l'installation, par exemple p

JavaServerPages (jsP) est une technologie Java utilisée pour créer des applications WEB dynamiques. Les scripts JSP sont exécutés côté serveur et rendus en HTML côté client. Cependant, les applications JSP sont sensibles à diverses vulnérabilités de sécurité pouvant entraîner une fuite de données, l'exécution de code ou un déni de service. Vulnérabilités de sécurité courantes 1. Cross-site scripting (XSS) Les vulnérabilités XSS permettent aux attaquants d'injecter des scripts malveillants dans des applications Web, qui seront exécutés lorsque la victime accédera à la page. Les attaquants peuvent utiliser ces scripts pour voler des informations sensibles (telles que les cookies et les identifiants de session), rediriger les utilisateurs ou compromettre les pages. 2. Vulnérabilité d'injection Une vulnérabilité d'injection permet à un attaquant d'interroger la base de données d'une application Web.

L'extension PHPPhar offre aux développeurs PHP un moyen puissant et flexible de regrouper des scripts, des bibliothèques et des ressources. En créant des archives Phar, les développeurs peuvent facilement déployer et distribuer des applications complexes sans se soucier des autorisations ou des dépendances du système de fichiers. Avantages des fichiers Phar Déploiement dans un seul fichier : les archives Phar regroupent tous les composants d'une application dans un seul fichier pour une distribution et un déploiement faciles. Indépendance : les fichiers Phar sont indépendants du système de fichiers, l'application peut donc s'exécuter sur n'importe quelle machine dotée d'un interpréteur PHP. Protection du code : les fichiers Phar peuvent être cryptés pour protéger leur contenu contre tout accès non autorisé. Contrôle de version : L'extension Phar fournit un support de contrôle de version pour les fichiers Phar, permettant aux développeurs de suivre

Le développement multiplateforme est crucial pour créer des applications qui s’exécutent de manière transparente sur plusieurs systèmes d’exploitation simultanément. Python et Jython, en tant que langages de programmation de premier plan, fournissent des solutions puissantes pour le développement multiplateforme et libèrent leur potentiel. Compatibilité multiplateforme de Python Python est un langage interprété qui utilise une machine virtuelle pour exécuter du code. Cette architecture permet au code Python de s'exécuter sur plusieurs plates-formes, notamment Windows, Linux, MacOS et les appareils mobiles. La large prise en charge de Python le rend idéal pour créer des applications multiplateformes. De plus, Python dispose d'un riche écosystème de bibliothèques tierces qui offrent un large éventail de fonctions, du traitement des données et du développement WEB à l'apprentissage automatique et aux données.

Avec l'essor des systèmes distribués et des processeurs multicœurs, les collections simultanées sont devenues cruciales dans le développement de logiciels modernes. Les collections simultanées Java fournissent des implémentations de collections efficaces et sécurisées tout en gérant la complexité de l'accès simultané. Cet article explore l'avenir des collections simultanées en Java, en se concentrant sur les nouvelles fonctionnalités et tendances. Nouvelle fonctionnalité JSR354 : collectes simultanées résilientes jsR354 définit une nouvelle interface de collecte simultanée avec un comportement élastique pour garantir performances et fiabilité même dans des conditions de concurrence extrêmes. Ces interfaces fournissent des fonctionnalités supplémentaires d'atomicité, telles que la prise en charge des invariants mutables et des itérations non bloquantes. RxJava3.0 : Collections simultanées réactives RxJava3.0 introduit le concept de programmation réactive, permettant aux collections simultanées d'être facilement intégrées aux flux de données réactifs.

Les fichiers constituent l'unité de base du stockage et de la gestion des informations dans les systèmes informatiques et constituent également l'objectif principal des opérations sur les fichiers Java. Comprendre la nature des fichiers est essentiel pour les exploiter et les gérer efficacement. Abstraction et hiérarchie Un fichier est essentiellement une abstraction qui représente un ensemble de données stockées sur un support persistant tel qu'un disque ou une mémoire. La structure logique d'un fichier est généralement définie par le système d'exploitation et fournit un mécanisme d'organisation et d'accès aux données. En Java, les fichiers sont représentés par la classe File, qui fournit un accès abstrait au système de fichiers. Persistance des données L'une des caractéristiques clés d'un fichier est la persistance de ses données. Contrairement aux données en mémoire, les données des fichiers persistent même après la fermeture de l'application. Cette persistance rend les fichiers utiles pour le stockage et le partage d'informations à long terme.

Un système de contrôle de version (VCS) est un outil indispensable dans le développement de logiciels qui permet aux développeurs de suivre et de gérer les modifications du code. git est un VCS populaire et puissant largement utilisé dans le développement Java. Ce guide présentera les concepts et opérations de base de Git, fournissant aux développeurs Java les bases du contrôle de version. Le concept de base de Git Repository : où sont stockés le code et l’historique des versions. Branche : ligne de développement indépendante dans une base de code qui permet aux développeurs d'apporter des modifications sans affecter la ligne de développement principale. Commit : une modification du code dans la base de code. Rollback : rétablissez la base de code à un commit précédent. Fusionner : fusionner les modifications de deux branches ou plus en une seule branche. Premiers pas avec Git 1. Installez Git Téléchargez et téléchargez depuis le site officiel
