软件开发七大难点原因
1.软件产业是年轻
人类一直在建设的房子,道路和桥梁数千年之久。已经不知道在初期很多房子或桥梁倒塌如何为人类学会建立这些结构的正确方法。
只要看看臭名昭著的宋体海峡大桥坍塌在1940年认识到,千百年来第一桥建成后,他们仍然没有完善桥梁建设。
相比较而言,软件业只有50岁左右。我们还有很长的路要走,我们有我们身后经验的机构,建筑和制造行业有。
今天建筑行业大多使用预制材料和部件。大多数的这些由机器制成并已尝试和许多其他项目进行测试。
另一方面软件行业不具有其他行业有预置组件的范围内。软件系统是由发现,发明,并且创造的,其结果是每一个新系统是从零开始创建的自定义项目新组件的方法从根本上构建的。这使我们对我们的下一个点
2.每行代码是失败的潜在点
由于所有新项目都定制接下去的每一行代码都未经证实,因此应进行测试。然而,在现实世界中,这是完全不切实际的。
每一行代码都会有几十个,甚至上千个,可能的输入,输出,州或依赖来处理。这会影响到,或由其他行代码或由外部因素的影响。即使是可能的记录每一次测试案例一行代码,你仍然不能确定,有没有一些未知因素,可能会导致错误。
和测试一个单一的代码行是挑战的一部分。代码不存在行自身。它是整个系统的一部分,整个需要进行测试,以确保该应用程序的功能的所有部分正确。
软件的极度复杂性意味着它不可能测试每个路径,以便在现实世界上最好的项目团队将实施,旨在提高对软件无缺陷的可能性的过程。他们将使用的技术,如编码标准,单元测试,冒烟测试,自动回归测试,设计和代码审查等,所有这些都应该提高软件的质量。
所有这些测试是有代价的。每个项目都需要回答的问题是 - 如何关键的是这个软件,我们应该有多少测试,请确保该软件是正确的?
往往测试阶段火速和软件出去与缺陷不可接受的水平。另一方面,对于大多数系统中,有
继续以测试缺陷所获得的值的点。这就是为什么大多数商业软件即使它是已知含有缺陷被释放。
3.缺乏用户输入的
在过去10年的研究公司,Standish Group的,都被调查企业对他们的IT项目。导致软件项目成为质疑的一号因素是“缺乏用户输入”。
这种情况的原因可能包括:
该系统正在推动的管理等业务的用户没有买入
用户是太忙,有“更重要”的事情要做
用户社区和IT团队之间的关系不佳
如果没有一个用户代表的参与和投入的项目是注定要失败的。这个人应该是一个专业领域专家有权作出决定,并在项目时间表的承诺。
因此,假如有好的用户输入然后翻译需求到设计开始的挑战。而这是不容易的任务,因为我们的下一个点的节目。
4.用户不知道他们想要什么,直到他们看到它
即使从用户良好的输入再多的用户需求分析,可以带走一个不可改变的事实,即用户只认为他们知道自己想要什么。事实上,这不是直到他们开始看到的东西,并用它,他们开始真正了解他们需要什么。这尤其是当软件正在为他们以前没有使用一个新的想法或流程开发的。
有研究表明,平均项目经历大约在要求一个25%的变化从“要求的完整”的阶段到第一释放。这就是著名的“范围蔓延”的问题,besets几乎所有的项目。它通常开始,一旦最初设计开始出现引起了用户更深刻地思考他们真正想要的。
目前的挑战是,你一)忽略了新的要求,并进行按照设计文件和风险提供一个系统,没有做什么用户需要或b)承担的变化,因为它们产生的结果,该项目拓展和建设成本的上升?
没有简单的回答这个两难尽管事实上,多种技术,如敏捷开发,已经发展到更容易地适应不断变化的需求。即使是看似微小的变化可能对项目产生重大影响。每一个明确的要求,可能会导致更多的隐性要求(高达50倍)的软件进一步复杂化。
在开发阶段变化的要求是摆在所有软件开发者的巨大挑战之一。这是可以做到,但千万不要以为这很容易。同时,请不要以为新的要求,而不影响时间轴或预算,除非有相应的拆除要求得到满足。
5.有没有进入壁垒,成为一名程序员
有一种说法,指出软件开发是如此的困难,因为节目是那么容易。换句话说,它是比较容易学习如何编写代码,但存在着,并提供优秀的软件之间存在巨大的差距。
人们可以有可能它等同于学习一门新的语言。是的,你可以拿起语法并获得合理的词汇,但是这是一个完全不同的球赛有一些母语流利的双向讨论。
各种研究表明,不同等级的显影剂之间的生产率比率可以高达28:1。考虑到这一点它,你肯定会只想聘请最好的开发者。不幸的是,这是不容易,因为伟大的开发是一个非常罕见的商品。
没有任何障碍进入编程世界,因此它是充斥着许多贫穷的程序员谁的项目产生不利影响。此外,即使是潜在的优秀的年轻开发者仍然会是一个更有经验的开发人员已经学会了避免错误。
这真的是值得付出更多的一个一流的经验的开发人员。他们会做的事情更快,更好,用更少的代码。您的项目将交付更快,将会有较少的缺陷。他们现在将节省您的钱,他们也将节省您的钱通过系统的寿命,支持和维护成本。
6.所有软件是受外部因素影响
物理结构服从物理定律例如它们经过几千年的学习多的受到重力,质量,气氛等是已知的关于物理世界,因此可以建模和预测。
软件是“mindware”,因此不服从物理定律,但它通常必须符合外部制约因素,如硬件,与其他软件整合,政府法规,传统的数据格式,性能标准,可扩展性等。
理解和照顾所有这些外部因素是一个近乎不可能完成的任务。即使是一个看似简单的要求,如支持多种浏览器,成倍增加了两个构建和测试软件的难度。如果您再添加一个需要支持多个版本的每一个浏览器,那么你将再次呈指数级增长的复杂性和难度。
7.估计是一门艺术而不是科学
鉴于其前提是所有新项目都是定制的,有没有预先构建的组件,该项目将受到范围蔓延,并且在开发团队的技能水平通常是改变那也难怪,估计持续时间该项目的永远不能科学锻炼。有太多的未知数。如果你从来没有建立在同一个软件之前同一支球队,那么你怎么能知道要多久时间?
当然经历使你在估算和更多的经验,你有你就越有可能会预见的未知数。太多的项目,跑过来,因为过于乐观的估计是由没有经验的人谁希望一切顺利流动,谁做的未知数没有考虑设置。
靠的方式来控制项目的时间表,并因而成本,是不适合于所有的项目,甚至对项目某些部分。
如果项目涉及使用复杂的外部接口或新技术,然后估计变得更难得到的权利。这些是通常很难量化的前期,通常只发现为完成工作的风险。