第 1 章 软件工程概述

软件工程的研究领域包括软件的开发方法、软件周期以及软件工程的实践等。

软件危机与软件工程的起源

1. 计算机系统的发展历程

20 世纪 60 年代中期以前,是计算机系统发展的早期:

软件为每个具体应用而专门编写的。

软件实质为规模较小的程序,编写容易,没有系统化的方法,对软件开发工作更没有进行任何管理。

编写者和使用者为同一个(或同一组)人。

软件设计只是一个模糊的过程,除了程序清单之外,没有其他文档资料。

20 世纪 60 年代中期到 70 年代中期,是计算机发展的第二代:

硬件发展:多道程序、多用户系统引入了人机交互的新概念,使硬件和软件的配合上了一个新层次。实时系统能够从多个信息源收集、分析和转换数据,使得进程控制能以毫秒而不是分钟来进行。在线存储技术的进步导致了第一代数据库管理系统的出现。

软件发展:软件个体化特性。软件数量极具膨胀。在程序运行时发生的错误必须设法改正。用户有了新的需求时必须相应的修改程序。硬件或操作系统更新时,通常需要修改程序以适应新的环境。软件维护工作,以令人吃惊的比例耗费资源,许多程序的个体化特性使得它们最终成为不可维护的。

2. 软件

定义:软件是由一个完整的配置组成:

程序:能够完成预定功能和性能的可执行的指令序列。

数据:是使程序能够适当地处理信息的数据结构。

文档:是开发、使用和维护程序所需要的图文资料。

1983 年 IEEE 对软件的定义:计算机程序、方法、规则、相关的文档资料、运行程序时所必须的数据。

特点:

1) 软件是一种逻辑实体,而不是具体的物理实体。

2) 软件的生产与硬件不同。在软件开发过程中没有明显的制造过程。

3) 在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。

4) 软件成本相当高。

3. 软件危机介绍

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

软件危机包含两方面问题:如何开发软件,以满足对软件日益增长的需求;如何维护,数量不断膨胀的已有软件。

软件危机的典型表现:对软件开发成本和进度的估计常常很不准确。用户对“已完成的”软件系统不满意的现象经常发生。软件产品的质量往往靠不住。软件常常是不可维护的。软件通常没有适当的文档资料。软件成本在计算机系统总成本中所占的比例逐年上升。软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅速普及深入的趋势。

4. 产生软件危机的原因

1) 客观:软件本身特点

逻辑部件:由于软件缺乏“可见性”,软件的质量比较难评价,因此,管理和控制软件开发过程相当困难。

规模庞大:软件规模庞大,软件复杂性将随着程序规模的增加而呈指数上升。

2) 主观:不正确的开发方法

忽略需求分析:对用户要求没有完整准确的认识就匆忙着手编写程序是许多软件开发工程失败的主要原因之一。(软件生命周期:一个软件从定义、开发、使用和维护,直到最终被废弃,要经历一个漫长的过程。)

软件就是程序:程序只是完整的软件产品的一个组成部分。软件配置主要包含程序、文档、数据等成分。

轻视软件维护:在软件开发的不同阶段进行修改需要付出的代价是很不同的。早期:涉及的面较少,因而代价也比较低。中期:软件配置的许多成分已经完成,引入一个变更要对所有已完成的配置成分都做相应的修改,不仅工作量大,而且逻辑上也更复杂,因为付出的代价剧增。完成阶段:在完成阶段时再引入变动,当然需要付出更高的代价。

5. 消除软件危机的途径

组织管理:工程项目管理方法

技术措施:软件开发技术与方法、软件工具


软件工程

1. 什么是软件工程

定义:软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,经济地开发高质量的软件并有效的维护它。

IEEE(IEE83) 的定义:软件工程是开发、运行、维护和修复软件的系统方法。

IEEE(IEE93) 的定义:把系统化的、规范的、可度量的途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软件中。

Fairly 的定义:软件工程学是为了在成本限额以内按时完成开发和修改软件产品所需要的系统生产和维护技术及管理科学。

Fritz Bauer 的定义:软件工程是为了经济的获得可靠的且能在实际机器上有效地运行的软件,而建立和使用的完善的工程化原则。

2. 软件工程的 7 条基本原理

1) 用分段的生命周期计划严格管理

项目概要计划、里程碑计划、项目控制计划、产品口控制计划、验证计划、运行维护计划。

2) 坚持进行阶段评审

软件的质量保证工作不能等到编码阶段结束之后在进行。原因:大部分错误是在编码之前造成的,设计错误占软件错误的 63%,编码错误仅占 37%。错误发现与改正得越晚,所需付出的代价也越高。

3) 实行严格的产品控制

在软件开发过程中不应随意修改需求,当需求发生改变时,为了保持软件各个配置成分的一致性,必须实行严格的产品控制,其中主要是实行基准配置管理。基准配置又称为基线配置,它们是经过阶段评审后的软件配置成分(各个阶段产生的文档或程序代码)。

基准配置管理也称为变动控制:一切有关修改软件的建议,特别是涉及对基准配置的修改建议,都必须按照严格的规程进行评审,获得批准以后才能实施修改。

4) 采用现代程序设计技术

采用先进的技术不仅可以提高软件开发和维护的效率,而且可以提高软件产品的质量。

5) 结果应能清楚地审查

软件是看不见摸不着的逻辑产品。为了提高软件开发过程的可见性,更好地进行管理,应根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,从而使得所得到的结果能够清楚地审查。

6) 开发小组的人员应该少而精

开发小组人员的素质和数量,是影响软件产品质量和开发效率的重要因素。

7) 承认不断改进软件工程实践的必要性

3. 软件工程三个要素

1) 方法(Method):“如何做”

2) 工具(Tool):用什么做

3) 过程(Process):按什么顺序做

4. 软件工程的本质特性

1) 软件工程关注于大型程序的构造

2) 软件工程的中心课题是控制复杂性

3) 软件经常变化

4) 开发软件的效率非常重要

5) 和谐地合作是软件开发的关键

6) 软件必须有效地支持它的用户

7) 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品

5. 软件工程的框架


软件工程包含的领域

1. 软件需求(software requirements)

软件需求涉及软件需求的获取、分析、规格说明和确认。

2. 软件设计(software design)

软件设计定义了一个系统或组件的体系结构、组件、接口和其他特征的过程以及这个过程的结果。

3. 软件构建(software construction)

软件构建是指通过编码、验证、单元测试、集成测试和调试的组合,详细的创建可工作的和有意义的软件。

4. 软件测试(software testing)

软件测试是为评价、改进产品的质量、标识产品的缺陷和问题而进行的活动。

5. 软件维护(software maintenance)

软件维护是指由于一个问题或改进的需要而修改代码和相关文档,进而修改现有的软件产品并保留其完整性的过程。

6. 软件配置管理(software configuration management)

软件配置管理是一个支持性的软件生命周期过程,它是为了系统地控制配置变更,在软件系统的整个生命周期中维持配置的完整性和可追踪性,而标识系统在不同时间点上的配置的学科。

7. 软件工程管理(software engineering management)

软件工程的管理活动建立在组织和内部基础结构管理、项目管理、度量程度的计划制定和控制三个层面上。

8. 软件工程过程(software engineering process)

软件工程过程设计软件生命周期过程本身的定义、实现、评估、管理、变更和改进。

9. 软件工程模型和方法(software engineering models and methods)

软件工程模型特指在软件的生产与使用、退役等各个过程中的参考模型的总称,诸如需求开发模型、架构设计模型等都属于软件工程模型的范畴;软件开发方法,主要讨论软件开发各种方法及其工作模型。

10. 软件质量(software quality)

软件质量特征涉及多个方面,保证软件产品的质量是软件工作的重要目标。

11. 软件工程职业实践(software engineering professional practice)

软件工程职业实践涉及软件工程师应履行其实践承诺,使用软件的需求分析、规格说明、设计、开发、测试和维护成为一项有益受人尊敬的职业;还包括团队精神和沟通技巧等内容。

12. 软件工程经济学(software engineering econmics)

软件工程经济学是研究为实现特定功能需求的软件工程项目而提出的在技术方案、生产(开发)过程、产品或服务等方面所做的经济服务与论证,计算与比较的一门系统方法论学科。

13. 计算基础(computing foundations)

计算基础涉及解决问题的技巧、抽象、编程基础、编程语言的基础知识、调试工具和技术、数据结构和表示、算法和复杂度、系统的基本概念、计算机的组织结构、编译基础知识、操作系统基础知识,数据库基础知识和数据管理、网络通信基础知识、并行和分布式计算、基本的用户人为因素、基本的开发人员人为因素和安全的软件开发和维护等方面的内容。

14. 数学基础(mathematical foundations)

数据基础涉及集合、关系和函数,基本的逻辑、证明技巧、计算的基础知识、图和树、离散概率、有限状态机、语法,数字精度、准确性和错误,数论和代数结构等方面的内容。

15. 工程基础(engineering foundations)

工程基础涉及实验方法和实验技术、统计分析、度量、工程设计,建模、模拟和建立原型,标准和影响因素分析等方面的内容。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271