透视软件开发过程中的难点_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

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

CrystalDiskMark是一款适用于硬盘的小型HDD基准测试工具,可以快速测量顺序和随机读/写速度。接下来就让小编为大家介绍一下CrystalDiskMark,以及crystaldiskmark如何使用吧~一、CrystalDiskMark介绍CrystalDiskMark是一款广泛使用的磁盘性能测试工具,用于评估机械硬盘和固态硬盘(SSD)的读写速度和随机I/O性能。它是一款免费的Windows应用程序,并提供用户友好的界面和各种测试模式来评估硬盘驱动器性能的不同方面,并被广泛用于硬件评

CrystalDiskInfo是一款用来查看电脑硬件设备的软件,在这款软件中我们可以对自己的电脑硬件进行查看,例如读取速度、传输模式以及接口等!那么除了这些功能之外,CrystalDiskInfo怎么使用,CrystalDiskInfo究竟是什么呢,下面就让小编为大家整理一下吧!一、CrystalDiskInfo的由来作为电脑主机三大件之一,固态硬盘是电脑的存储媒介,负责电脑的数据存储,一块好的固态硬盘能加快文件的读取速度,影响消费者使用体验。当消费者收到新设备时,可通过第三方软件或其他固态硬盘

费马大定理,即将被AI攻克?而且整件事最意味深长的地方在于,AI即将解决的费马大定理,正是为了证明AI无用。曾经,数学属于纯粹的人类智力王国;如今,这片疆土正被先进的算法所破译,所践踏。图片费马大定理,是一个「臭名昭著」的谜题,在几个世纪以来,一直困扰着数学家们。它在1993年被证明,而现在,数学家们有一个伟大计划:用计算机把证明过程重现。他们希望在这个版本的证明中,如果有任何逻辑上的错误,都可由计算机检查出来。项目地址:https://github.com/riccardobrasca/flt

这个AI辅助编程工具在这个AI迅速发展的阶段,挖掘出了一大批好用的AI辅助编程工具。AI辅助编程工具能够提高开发效率、改善代码质量、降低bug率,是现代软件开发过程中的重要助手。今天大姚给大家分享4款AI辅助编程工具(并且都支持C#语言),希望对大家有所帮助。https://github.com/YSGStudyHards/DotNetGuide1.GitHubCopilotGitHubCopilot是一款AI编码助手,可帮助你更快、更省力地编写代码,从而将更多精力集中在问题解决和协作上。Git

我们在使用Edge浏览器的时候有时候会出现不兼容的软件尝试一起加载,那么这是怎么回事?下面就让本站来为用户们来仔细的介绍一下一个不兼容的软件尝试与Edge加载怎么解决吧。 一个不兼容的软件尝试与Edge加载怎么解决 解决方案一: 开始菜单搜IE,直接用IE访问即可。 解决方案二: 注意:修改注册表可能会导致系统故障,谨慎操作。 修改注册表参数。 1、运行中输入regedit。 2、找到路径\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Micros

Go语言开发移动应用程序教程随着移动应用市场的不断蓬勃发展,越来越多的开发者开始探索如何利用Go语言开发移动应用程序。作为一种简洁高效的编程语言,Go语言在移动应用开发中也展现出了强大的潜力。本文将详细介绍如何利用Go语言开发移动应用程序,并附上具体的代码示例,帮助读者快速入门并开始开发自己的移动应用。一、准备工作在开始之前,我们需要准备好开发环境和工具。首

PhotoshopCS是PhotoshopCreativeSuite的缩写,由Adobe公司出品的软件,被广泛用于平面设计和图像处理,作为新手学习PS,今天就让小编为您解答一下photoshopcs5是什么软件以及photoshopcs5使用教程。一、photoshopcs5是什么软件AdobePhotoshopCS5Extended是电影、视频和多媒体领域的专业人士,使用3D和动画的图形和Web设计人员,以及工程和科学领域的专业人士的理想选择。呈现3D图像并将它合并到2D复合图像中。轻松编辑视

2022年3月3日,距世界首个AI程序员Devin诞生不足一个月,普林斯顿大学的NLP团队开发了一个开源AI程序员SWE-agent。它利用GPT-4模型在GitHub存储库中自动解决问题。SWE-agent在SWE-bench测试集上的表现与Devin相似,平均耗时93秒,解决了12.29%的问题。SWE-agent通过与专用终端交互,可以打开、搜索文件内容,使用自动语法检查、编辑特定行,以及编写和执行测试。(注:以上内容为原内容微调,但保留了原文中的关键信息,未超过指定字数限制。)SWE-A
