软件工程的来源&&要解决的问题
来源:首先要提到著名的软件危机的概念
1970年代和1980年代的软件危机。在那个时代,许多软件最后都得到了一个悲惨的结局,软件项目开发时间大大超出了规划的时间表。一些项目导致了财产的流失,甚至某些软件导致了人员伤亡。同时软件开发人员也发现软件开发的难度越来越大。
简单的说就是,当软件项目过于庞大的时候,传统的软件开发管理办法已经很难准确的对项目的时间、金钱、代码、质量等进行很好的控制,这就导致了很多大型软件开发的时候,最后不能按时交付或者是消耗的金钱大大超出了预算,导致项目最后的失败。
典型的案例:美国银行1982年进入信托商业领域,并规划发展信托软件系统。项目原订预算2千万美元,开发时程9个月,预计于1984年12月31日以前完成,后来至1987年3月都未能完成该系统,期间已投入6千万美元。美国银行最终因为此系统不稳定而不得不放弃,并将340亿美元的信托账户转移出去,并失去了6亿美元的信托生意商机。
在这样的软件危机下,北大西洋公约组织在1968年提出了软件工程的概念。
解决的问题:知道了软件工程的来源之后,他要解决的问题也就显而易见了,就是利用工程化的方法,在软件开发和软件项目管理中来更好的帮助项目的按期、按质量的交付。
软件工程如何解决那些问题主要是在项目中运用软件工程的一系列方法论,来更好的控制项目的开发过程。这里列举出常见的开发模型:
图中是快速原型模型,用很短的时间给出一个可以运行的原型。
轻量级方法:敏捷开发(Agile Processes),极限编程(XP)重量级的方法:瀑布模型,迭代开发,增量模型,螺旋开发模型各种模型的特点和优缺点这里就不写了,书上都有。
软件工程的定义对软件工程的定义,不同的学者组织有很多的版本,但是主要的意思都是一样的,就是
通过工程化的方法来进行软件开发和完成一个软件项目。这里使用维基百科的定义,有很多种说法:1. 创立与使用健全的工程原则,以便经济地获得可靠且高效率的软件。2. 应用系统化,遵从原则,可被计量的方法来发展、操作及维护软件;也就是把工程应用到软件上。3. 与开发、管理及更新软件产品有关的理论、方法及工具。4. 一种知识或学科,目标是生产质量良好、准时交货、匹配预算,并满足用户所需的软件。5. 实际应用科学知识在设计、建构计算机程序,与相伴而来所产生的文件,以及后续的操作和维护上。6. 使用与系统化生产和维护软件产品有关之技术与管理的知识,使软件开发与修改可在有限的时间与费用下进行。7. 建造由工程师团队所开发之大型软件系统有关的知识学科。8. 对软件分析、设计、实施及维护的一种系统化方法。9. 系统化地应用工具和技术于开发以计算机为主的应用。10. 软件工程是关于设计和开发优质软件
软件工程的两个方面软件开发:软件开发方法学、软件工具和软件工程环境软件项目管理:软件度量、项目估算、进度控制、人员组织、配置管理、项目项目等
软件工程与计算机科学的关系这里给出一个维基百科的截图:
按照一般的理解,软件工程就是比较偏工程,
侧重点就是在如何实现一个工程性的应用,所以就涉及到如何完成一个工程,引出了一系列的相关知识,比如需求的获取和分析,极限编程等各种开发模型,测试技术等等。而计算机科学就是侧重研究一个方法一个理论,如何提高一个算法的性能等等。但是实际上我们可以发现,不管是国内还是我们这边,其实并没有很明显的界限。首先培养方式上,国内很多的高校的软件工程和计算机科学的学生都是一样的培养方式,学的东西也都差不多;其次软工的学生在学习工作中也需要计算机科学的知识来帮助研究,计算机科学的学生如果想要实现某个技术,往往也需要软件工程的思路。所以有很大的相关性。