第1关:软件工程的本质特性
软件工程的概念:“软件工程为了经济地获得可靠的且能在实际机器上高效运行的软件,而建立和使用完善的工程原理。”
IEEE给出了更全面更具体的定义:软件工程是:“①把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;②研究①中提到的途径。”
软件工程的本质特性
1.软件工程关注于大型程序的构造
随着计算机技术的快速发展,程序的规模越来越大。软件工程学科的出现,就是针对大型软件在开发维护过程中的种种问题。考虑IBM360系统,开发人员最终写出了100万行源代码,文档手册就有6英尺厚。在顶峰时,有超过 1000 人在为它工作。
2.软件工程的中心课题是控制复杂性
许多软件的复杂性主要不是由问题的内在复杂性造成的,而是由必须处理的大量细节造成的。IBM360系统,这个经历了数十年,极度复杂的软件项目甚至产生了一套不包括在原始设计方案之中的工作系统。这主要是由于在设计过程中需要考虑大量细节。IBM360以它良好的兼容性作为它最大的卖点,与此同时带来了一系列的问题:在软件设计时要考虑到大量的软硬件协同工作。导致系统开发的复杂性非常高。
3.软件经常变化
软件通常都模拟了现实世界的一部分,而现实世界是在不断变化中的。软件为了不被很快淘汰,必须随着模拟的现实世界一起变化。IBM360系统1964年宣告研制成功。随着计算机的不断更新,IBM360系统也不断进行版本的迭代。
4.开发软件的效率非常重要
设想IBM360 的工作由一个小型、精干的团队来解决。譬如 10 人队伍。作为一个尺度,假设他们都非常厉害,比一般的编程人员在编程和文档方面的生产率高 7 倍。假定 OS/360 原有开发人员是一些平庸的编程人员(这与实际的情况相差很远)。同样,假设另一个生产率的改进因子提高了 7 倍,因为较小的队伍所需较少的沟通和交流。那么,,他们需要 10 年来完成 5000 人年的工作。一个产品在最初设计的 10 年后才出现,还有人会对它感兴趣吗者它是否会随着软件开发技术的快速进步,而显得过时呢/p>
5.和谐地合作是开发的关键
软件处理的问题十分庞大,必须多人协作才能解决这类问题。为了有效地合作,必须明确地规定每个人的责任和相互通信的方法。考虑IBM360系统的开发,最多时有1000人投入开发工作。如果没有规定责任和相互通信的方法,那么相互交流的工作量按照递增,其时间成本的增加是不可承受的。
6.软件必须有效地支持他的用户
开发软件的目的是支持用户的工作。当时,仅IBM公司的晶体管电脑就有7个种类20多个型 ,软件和外部设备都不能互换使用,给用户带来极大的不便。IBM360的问世代表着电脑有了一种共同的语言,它们都共用代 为OS/360的操作系统。让单一OS适用于整个系列的产品IBM360成功的关键。让用户不用每次换一个产品,都需要换一个配套的操作系统。“兼容性”是一个伟大的观念变革,它给现代电脑发展带来的技术进步,至今还在发挥巨大作用。
7.在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品
软件工程师是诸如Java程序设计、软件体系结构、测试或统一建模语言等方面的专家,他们通常并不是图书馆管理、航空控制领域或银行事务等领域的专家,但是他们却不得不为这些领域开发应用系统。缺乏应用领域的相关知识,是软件开发项目出现问题的常见原因。
第2关:软件工程的基本原理
1.用分阶段的生命周期计划严格管理
一个软件从产生到废弃,要经历很长的一个生命周期。软件的生命周期由软件定义、软件开发和软件维护3个时期组成,每个时期又分为若干个阶段。在软件的生命周期的各个阶段中,需要完成不同种类的工作。我们应该制定可行的计划,在软件的生命周期的各个阶段严格落实。不同层次的管理人员都应该严格按照计划管理软件的开发和维护工作,不能受上级或者客户的影响违背计划。Blaauw在《人月神话》中指出,整个创造性活动也可以分为三个独立的阶段:体系结构(Architecture)、设计实现(Implementation)、物理实现(Realization)。在实际情况中,它们往往可以同时开始和并发地进行。
2.坚持进行阶段评审
不能在软件编码结束后再进行评审工作。根据巴利·玻姆及有关人员的统计,软件设计错误占软件错误的63%,编码错误占软件错误的37%。由此可见,软件错误大部分发生在软件开发的前期。而错误发现的越晚,返工成本越高,为了改正错误付出的代价越大。所以,在软件开发的每个阶段结束后及时进行评审,可以发现软件错误,及时止损。不论协作与否,拥有能了解状态真相的评审机制是必要的。大型项目中,可能需要每周对某些部分进行评审。
3.实行严格的产品控制
在软件开发的过程中,客户的需求难免发生变动。但变动一项需求往往会付出比较高的代价。因此,我们需要使用科学的产品控制来满足这种要求。当我们需要改变一项需求时,为了保证软件各个配置成分的一致性,必须实行严格的产品控制,其中主要是实行基准配置管理。也就是说,所有关于软件修改的建议,特别是对基准配置的修改,必须经过严格的流程进行评审,不能随便修改软件。
4.采用现代程序设计技术
实践表明,采用先进的技术不仅可以提高软件开发和维护的效率,而且可以提高软件产品的质量。IBM360系统是使用汇编语言编程的,这导致了软件的生产率和调试速度受到了非常大的影响。生产率的改进体现在软件整体开发进度上,而使用高级语言带来的调试上的改进来自下列事实——存在更少的 bug,而且更容易查找。Brooks在《人月神话》中这样描述:如果使用高级语言编程,生产速度将会提高5倍。
5.结果应能清楚地审查
软件产品不同于一般的物理产品,它是看不见摸不着的逻辑产品。Brooks在《人月神话》中对IBM360系统项目进度的拖延进行了这样的描述:“当人们听到某个项目的进度发生了灾难性偏离时,可能会认为项目一定是遭受了一系列重大灾难。然而,通常灾祸来自白蚁的肆虐,而不是龙卷风的侵袭。同样,项目进度经常以一种难以察觉,但是残酷无情的方式慢慢落后。实际上,重大灾害是比较容易处理的,它往往和重大的压力、彻底的重组、新技术的出现有关,整个项目组通常可以应付自如。但是一天一天的进度落后是难以识别、不容易防范和难以弥补的。”这时候,就需要在软件开发的过程中设置“里程碑”。里程碑的选择只有一个原则,那就是:里程碑必须是具体的、特定的、可度量的事件,能够进行清晰定义。
6.开发小组的人员应该少而精
软件开发小组的组成人员的素质应该好,人数则不宜过多。开发小组人员的素质和数量是影响软件产品质量和开发效率的重要因素。Sackman、Erikson 和 Grand 曾对一组具有经验的程序人员进行测量。在该小组中,最好的和最差的表现在生产率上平均为10:1;在运行速度和空间上具有 5:1 的惊人差异!简言之,$20,000/年的程序员的生产率可能是$10,000/年程序员的 10 倍。
7.承认不断改进软件工程实践的必要性
不仅要积极主动地采纳新的软件技术,而且要注意不断总结经验。遵循前6条基本原理,就能够按照当代软件工程基本原理实现软件的工程化生产。如果遵循了前六条基本原理,IBM360系统的开发也不会显得如此举步维艰。但是,仅有前6条原理并不能保证软件开发与维护的过程能赶上时代前进的步伐,能跟上技术的不断进步。因此,Boehm提出应把承认不断改进软件工程实践的必要性作为软件工程的第7条基本原理。
第3关:软件工程方法学
软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。
管理:通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。
方法学(Methodology):在软件生命周期全过程中使用的一整套技术方法的集合,也称为范型(Paradigm)。
软件工程方法学包含3个要素:方法、工具和过程。方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;工具是为运用方法而提供的自动的或半自动的软件工程支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
传统方法学
传统方法学也称为生命周期方法学或结构化方法(Structured Method)。它采用结构化技术完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。
传统方法学的特点:
- 采用结构化技术完成软件开发的各项任务。
- 把软件生命周期划分成若干个阶段,顺序地完成每个阶段的任务。
- 每一个阶段的开始和结束都有严格的标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一个阶段的开始标准。
- 在每一个阶段结束之前都必须正式严格的技术审查和管理复审。
传统方法学的优点:
- 把软件生命周期划分成若干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员协作。
- 使软件开发工程的全过程以一种有条不紊的方式进行,保证了软件的质量。特别是提高了软件的可维护性。
- 采用生命周期方法学可以大大提高软件开发的成功率,软件开发的生产率也能明显提高。
传统方法学的缺点:
- 当软件规模庞大,或者对软件的需求是模糊的或会随时间变化而变化的时候,使用传统方法学开发软件往往不成功。
面向对象方法学
面向对象方法(Object-Oriented Method)把数据和行为看成是同等重要的,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。
面向对象方法学的特点:
- 把对象作为融合了数据及在数据上的操作行为的统一的软件构件。
- 把所有对象都划分成类。
- 按照父类与子类的关系,把若干给相关类组成一个层次结构的系统。
- 对象彼此间仅能通过发送消息互相联系。
面向对象方法学的优点:
- 降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作,促进了软件重用。
第4关:软件工程的发展历程
世界软件工程的发展史
时间 | 1960年代 | 1970年代 | 1980年代 | 1990年代 |
---|---|---|---|---|
事件 | 出现了软件危机 | 程序设计方法学成为研究热点 | 软件开发方法学成为研究热点 | 软件复用和构件技术受到关注 |
特点 | 软件工程被正式提出 开始注重程序结构的研究 程序设计语言和编译系统得到应用 |
出现了结构化分析和设计方法 | CASE工具和环境的研制成为热点 面向对象技术开始出现并逐步流行 |
软件复用和软件构件技术被视为解决软件危机的一条现实可行途径 基于构件的软件开发方法成为主流技术之一 |
课外阅读链接:杨芙清.软件工程技术发展思索[J].软件学 ,2005
中国软件工程的发展史
为了满足中国软件产业发展需求,中国自1980年启动软件工程研究与实践,其过程和成果与国际发展趋势一致。
时间 | 1980年代 | 1990年代 | 2000年以后 |
---|---|---|---|
特点 | 开展软件开发方法学研究 CASE工具和环境的研发 |
以构件技术为主线开展前沿研究 建立较为全面的软件工程环境 |
展开 构软件技术体系的研究 建设软件构件库体系 建立标准和培养人才 |
工业界 | 软件产业起步 开发停留在手工作坊式 |
软件企业开始使用软件工具 | 软件企业开始尝试工业化生产技术 |
课外阅读链接:中国软件产业40年发展政策回顾和展望
课外视频链接:中国软件产业十年发展历程
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!