首页 > 编程知识 正文

软件生命周期的阶段,软件生命周期概念

时间:2023-05-04 12:46:18 阅读:258496 作者:273

软件生命周期漫谈

自1946年第一台计算机发明以来,对人类的生产活动和社会活动产生了极其重要的影响,并以强大的生命力飞速发展。计算机硬件、软件、操作系统等纷纷应运而生,并发展壮大,时至今日,计算机已经成为人类社会不可或缺的,无可替代的强大工具之一,被看做是20世纪以来最伟大的发明之一。其中,计算机软件在现代社会和经济生活中占有极其重要的地位,在各个领域中发挥着越来越重要的作用。
谈到软件,就绕不开软件生命周期这个永恒的话题,作为软件工程专业的学生,我个人认为,软件工程就是按照工程学的管理方式,有组织、有计划的,在一定的质量基础、时间限度和成本范围内,实现功能明确,符合用户主观要求的软件。开发软件,就必须去熟悉一整套的开发流程(也就是软件的生命周期),以此来更好,更合理,更专业地开发软件。

同任何事物一样,一个软件产品或软件系统也要经历孕育、诞生、成长、成熟、衰亡等阶段,也就是软件的生命周期。概括来讲,软件的生命周期大体上分为3个主要阶段:软件定义时期,软件开发时期和软件运行和维护时期。这三个时期紧密联系,缺一不可,可以说牵一发而动全身。在软件定义时期,主要任务包含:问题定义,可行性分析和需求分析。软件开发时期包含系统设计和系统实现,系统设计主要是指概要设计和详细设计,系统实现主要包括编码和单元测试与综合测试。软件运行维护时期的主要任务是使软件持久地满足用户的需要。
软件不同于硬件,软件作为一种逻辑产品,看不见,也摸不着,由于软件缺乏“可见性”,在写出程序代码并在计算机上试运行之前,软件开发过程的进展情况往往较难衡量,软件的质量的较难评价,因此,管理和控制软件开发过程相当地困难。此外,软件在运行过程中不会因为使用时间过长而被“用坏”,如果运行过程中发现错误,很可能是遇到了一个正在开发时期引入的在测试阶段没能检测出来的错误,因此,软件维护通常意味着改正或修改原来的设计甚至整个架构,这就在客观上使得软件在一定程度上较难维护。
同时,软件作为一种知识产品,它并不像是工业加工产品那样可以实现规模量产,软件的这种特性使得它很容易被复制粘贴,知识产权较难得以保护。另外,软件是一种团队行为,尤其是那种规模较大的软件,为了在有效时间内开发出来,必须要求开发团队之间有一个很好地合作,并且紧密贴合软件生命周期,使用合适的生命周期模型,尽可能用最短的时间,最低的成本,最优的人员配置高效率地进行开发。
在实际的软件开发过程中,软件规模,种类,开发环境及开发时间和开发时所用的技术方法等等,都会在不同程度影响阶段的划分。在软件的生命周期里,每一个步骤可以说都是至关重要,尤其是在开发前期,设计上错误或缺陷如果到了后期才慢慢发现的话,对整个开发过程来说将是一个毁灭性的代价。据统计,大约百分之六十以上的软件失败的原因都归结于前期的需求分析阶段和设计阶段的失误。可以说是一步错,步步错。软件开发过程的种种问题,不论是人员配置不合理,需求分析不全面,还是系统架构不合理,开发经费利用不当等等,都会直接导致软件危机的产生。
那么究竟怎么样开发软件,才能够尽最大可能降低开发的错误和风险呢?
首先,既要有技术措施(方法和工具),又要有必要的组织管理措施。在技术层面,技术水平的高低往往体现在开发团队中个人的技术水平和专业修养。因为软件的开发工作,说到底,还是看人。例如,你组建一个5人的小型团队,团队里全是技术xrpddm,甚至是高级架构师,顶级黑客那种,可想而知,他们之间通过密切合作,很可能会在最短时间内高质量完成一个中型项目。这得益于他们每个人的技术涵养。当然,对他们而言,因为每个人掌握的知识都比较全面且有深度,因此大大降低了他们之间的沟通成本,实现了效率最大化。相反,一群刚入职的新人,他们项目经验很少,技术涵养不够,同时也不能够做到知识全面,你学的前端,他学的后端,所谈论的内容风马牛不相及,沟通成本巨大,开发效率低,可想而知,必然做不出一款出色的软件。这就要求公司的面试官提高门槛,提高对面试者的要求,积极为公司引进高技术人才。另外,公司自己的开发工具也应该规范化,一致化,降低版本冲突,必要的时候开发出一整套属于公司自己内部使用的工具和框架,方便工作小组的开发,减轻软件协调的负担,使成员们更多地把注意力放到算法和架构设计上,避免被开源软件的繁琐设计而焦头烂额。接下来就是组织管理措施方面了,不论什么行业,最最难管的就是人了。尤其在软件开发方面,参与开发的成员过少,会严重影响到软件的整体进度,开发人员过多,又会大大增加各个成员之间的沟通成本,我们知道,点越多,两点之间的连线个数会呈指数方式增长,开发小组之间的沟通亦是如此。因此开发组的管理者务必要做到:让最合适的人去干最合适的活,要学会识人、用人、管人。开发小组的成员必须做到:各司其职,做好本职工作,拥有集体意识,不拖后腿,不搞独立。
接下来我们对软件生命周期的各个步骤进行详细的讨论。在问题定义阶段,需要详尽的了解需要解决的问题是什么,也就是说,作为软件的开发者,在这个阶段系统分析员必须弄清用户“需要计算机解决什么问题”。如果在问题尚未明确的情况下就试图解决这个问题,那么就会白白浪费时间和精力,结果也毫无意义。因此,该阶段的基本任务就是分析要解决的问题,撰写并提交问题定义报告。一般情况下,我们做完问题定义,需要再进一步跟客户确认,如果客户觉得满意,那么该问题定义报告即可作为下一步工作,可行性研究的依据。同时我们也应该认识到,客户对于问题定义的过程往往是模糊的,这就要求系统分析员通过深刻了解客户需求,搞清楚用户的实际需求,对用户的目标了如指掌。在撰写问题定义的书面报告时,要确保一针见血,条理清楚,确保开发人员,客户都能够看懂并拥有一致的看法。该阶段是软件生命周期中最简短的阶段,一般建议1天甚至更短时间内完成。
然后进入可行性分析阶段,按照定义,可行性分析是通过对项目的主要内容和配套条件,如市场需求、资源供应、建设规模、工艺路线、设备选型、环境影响、资金筹措、盈利能力等,从技术、经济、工程等方面进行调查研究和分析比较,并对项目建成以后可能取得的财务、经济效益及社会环境影响进行预测,从而提出该项目是否值得投资和如何进行建设的咨询意见,为项目决策提供依据的一种综合性的系统分析方法。必须记住,可行性研究的目的不是解决问题,而是确定问题是否值得去解。要达到这个目的,不能靠主观猜想而只能靠客观分析。可行性研究的最终要提交可研报告。
软件定义阶段的重点是需求分析,需求分析也称为软件需求分析、系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,这个阶段的任务仍然不是具体地解决客户的问题,而是准确地回答“目标系统必须做什么”这个问题。我个人认为这个阶段最难的是准确了解用户的实际需求,但用户并不具备我们的专业素养,很多情况下,与用户沟通是一件非常困难的事情,因为我们说人类的自然语言虽然容易理解,但同时也存在着许多二义性,用户想要表达的内容和我们所理解的很可能不在一个层面,这就要求我们尽可能多的与用户交流,了解用户的实际需求,确定软件的目标和方向。有时,因为每个人的表达能力有限,客户甚至都不能够准确表达自己的实际想法。这就更要求我们的系统分析员切身的从用户的角度和利益出发,但不是绝对的服从用户,因为有时连用户也不明确自己的实际需求,这一点上就需要加上我们的主观判断,最好是使用一些开发周期模型比如快速原型模型,它可以及早提供有用产品,及早发现问题,及时改错。通过快速原型模型,我们花费较少的时间成本做出产品的原型,然后采集客户的满意度,这样一来就降低了风险,减少了开发的时间,提高了开发的效率。同时呢,用户也可以实时参与进来,增加了沟通,明确了需求,降低了风险,提高了效率。这一阶段的会形成一个需求规格说明书,它是一个十分重要的文档,对于后期的开发,运行与维护起着举足轻重的作用。
然后就到了软件开发阶段,它包括系统设计和系统实现两大部分。设计阶段是架构师和设计师的主要任务,而系统实现是开发师的主要任务。如果要设计出一个软件,工作量庞大而且复杂,而且我们很难找到一个切入点去下手。这时我们可以先做出概要设计,我们的设计师应该设计出目标系统的几种可能方案,然后再综合经济成本,软件可能的规模与复杂度进行优胜劣汰。最终我们再根据方案制定出详细的设计方案。在设计程序时,应该遵循高内聚,低耦合和面向对象、面向抽象的原则,充分采用的模块化的编程思想,将程序的健壮性,可扩展性和可维护性都体现到位。蓝图绘制好了,接下来我们就开始盖大楼。在编码与测试阶段,程序员应该根据目标系统的性质和实际环境,选取一种适当的高级程序设计语言(必要时采用汇编语言),把详细设计的结果翻译成用选定的语言书写的程序,并且仔细测试编写出的每一个模块。综合测试阶段的关键任务是通过各种类型的测试使软件达到预定的要求,最基本的测试是集成测试和验收测试。
最终到了软件的运维阶段。为了使软件的功能持久地满足用户的需要,必须进行各种维护活动,包括改正性维护、适应性维护、完善性维护和预防性维护。软件的维护往往繁琐且枯燥,作为一个长期性的工作,它通常占据了整个软件开发费用的一半以上。从结构层次来看,软件维护其实可以看做前面生命周期的小循环,他对于软件的维护人员提出了更高的要求,并且会特别依赖前期设计好的架构和文档。
以上就是我对于软件生命周期的粗浅认识,直至今日,软件危机依然没能够得到有效解决,几乎所有的软件都不同程度地存在软件危机,究其原因,是因为软件开发的工程方法学和软件生命周期模型没有利用好,我相信在不久的将来,软件开发的过程将进一步完善和发展,软件危机将会进一步的削弱。技术是不断进步的,谁也无法阻止科技前进的步伐,在人工智能和大数据、物联网的冲击下,未来的软件,路在何方,答案托付在了我们这代年轻,富有朝气的年轻程序员们,我们,将不辱使命!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。