国庆快乐,今天开始更新《软件工程与计算(卷二)》的重要知识点内容~
一.软件
1.软件独立于硬件
早期的软件是为了计算机硬件在研究型项目中而开发制造的,人们使用专门针对于硬件的指令码和汇编语言编写,这也是最早软件的雏形~此时软件是为了最大化计算机硬件的能力而编写的,没有独立存在的需求,本质上被认为是硬件的零件之一。
导论20世纪5/60年代中期,计算机硬件开始进入商用,同时带动了软件的发展——直至如今,绝大多数的软件是独立于计算机硬件的。
2.软件是一种工具
软件能够完成复杂的科学计算,是一种有用的计算工具~随着商用计算机的普及,软件被广泛利用与商业计算和数据处理之中
3.软件的核心是程序
软件以程序代码为核心,由3个部分组成:
- 程序:机器指令的集合
- 文档:描述程序操作和使用的文档
- 数据:程序运行时需要使用的信息
4.开发比编程远远复杂
软件的发展和变化有两个重要趋势:
- 软件的规模和复杂度日益增加
- 用于解决实际业务问题的应用软件越来越多
为了控制因为程序增长带来的复杂度,开发人员需要首先进行需求开发明确问题域目标,然后进行设计将单个的复杂程序分解为多个简单部分以方便编程~
随着规模的增加,编程的工作比例会下降,其他的比例会上升:
5.应用软件基于现实又高于现实
总的来说,应用软件和现实的关系是:始于现实、基于现实并改进现实,实现现实的螺旋上升~
- 首先,软件始于现实,有需要解决的问题时人们才会要求开发软件
- 其次,基于现实才能解决问题——即以现实为基础,然后才能构建解决问题的软件方案~
- 最后,软件并不是单纯的模拟显示,它还要解决显示世界的问题,把现实世界变得更好
二.软件工程
1.定义
- 简单理解:生产软件的工程学
- 标准定义:应用系统的、规范的、可量化的方法来开发、运行和维护软件,即将工程应用到软件
2.一种工程活动
工程学科共性:
- 具有解决实际问题的动机
- 应用科学知识指导工程活动
- 以成本效益比为基本条件
- 构建及其或事物
- 以服务人类为最终目的
工程师有共同要求:
- 仔细评估项目的可选活动
- 需要对某些对象进行度量
- 强调项目设计过程中的纪律性
- 可胜任:研发、开发、设计、生产、测试、管理、销售等多种角色
- 选择和使用合适的工具是工程的关键要素
- 通过专业写会发展和确认原理、标准和最佳实践方法,并提高个人能力
3.动机
软件工程需要解决的问题领域范围广泛,没有行业和领域限制,需要客户和用户的紧密合作~
与传统的工科相比,一个软件工程师要能够在不同的行业领域里表现出同等的工作能力,而同时,软件工程师不可能了解所有的领域,所以他们要与实际问题的来源——客户和用户进行深入的交流和合作,因为客户和用户最了解领域知识和问题。但在软件工程领域,用户必须积极参与构建过程才能得到心仪的软件产品,实践也一再表明,客户和用户的有效参与是软件成功的必要因素~
软件工程师在构建软件之前要花很大力气去明确项目的目标——这一点非常重要!
4.科学性、实践性、工艺性并重
软件工程的指导知识还是“工艺、实践方法/原则和科学知识并立”,软件工程行为既有科学性,又有实践性,还有工艺性~
5.追求足够好
软件工程不追求最好的方案,只要求足够好的方案——即成本效益比有效的方案~
6.产品基于虚拟计算机
软件工程的核心是创建软件方案,描述所需软件系统的特征和行为,然后把软件方案通通过编程移植到通用的计算机上面,计算机就会神奇的表现出软件方案所描述的特征和行为~
(本质上就是各种个人PC)
7.最终目的
承担社会责任,促进整个社会的进步——软件工程追求生产方式的成功,而不是特定产品的成功~
- 软件工程要以科学知识为基础,建立成熟的方法与技术,通过可普及和可重复的生产方式开发软件
- 软件工程的社会责任最基本要求是开发者对软件产品的质量负责,此外还要求软件工程从业者要遵守职业道德(保证质量,不危害他人)
三.软件工程概览
1.工程知识域
5个技术知识域:
6个管理知识域:
11个知识域并非等同重要~
职业软件工程师的软件知识重要性评价:
软件工程师要两个的掌握各个知识域,尤其是软件技术知识域,还要具备良好的交流沟通能力~
2.开发活动
需求开发:
软件工程要解决的实际问题是范围广泛并且模糊不清的,所以在开发软件之初就需要进行需求开发,它从空白开始,主要目的是建立软件解决方案,具体任务包括:①探索并明确描述现实世界信息;
②探索并定义问题;
③建立软件系统的解决方案,使得将软件系统应用到现实世界之后能够解决问题。
软件解决方案又称为软件产品设计方案,需求开发产生的主要制品是软件需求规格说明文档和需求分析模型:
- 软件需求规格说明文档详细描述了软件解决方案的内容
- 需求分析模型重点描述了软件解决方案中的复杂技术方案
软件设计:
软件设计在需求开发之后进行,它以软件需求规格说明为基础,主要目的是建立软件系统的构建方案,具体任务括:
①软件体系结构设计,确定系统的高层结构;
②详细设计,将高层结构的部件设计为更详细的模块与类,定义模块与类的功能以及它们的接口;
③人机交互设计,设计软件系统与外界的有效交互方案,包括设计用户界面。
软件构建方案又称为软件工程设计方案,是由抽象软件实体组成的复杂概念结构。工程设计方案是从生产者的角度和产品内部结构的方式描述产品
软件设计产生的主要制品是软件设计描述文档和软件设计模型:
- 软件设计描述文档:软件构建方案的内容
- 软件设计模型:软件构建方案中的细节
软件构造:
软件构造在软件设计之后进行,它以软件构建方案为基础,主要目的是使用编程语言实现软件构建方案,具体任务包括:
①程序设计,以“数据结构+算法”的方式继续细化和深化软件构建方案基本单位(模块或者类)的设计
②编程,将程序设计方案映射为代码;
③调试,修改程序代码,解决程序中发现的问题。
软件构造产生的主要制品是程序源代码和编译后的可执行程序。
软件测试:
软件测试的主要目的是验证和确认软件产品的质量,它包含两重含义:
①从技术上保证产品的质量是合格的,主要判定产品生产中的技术运用过程是否正确;
②保证产品质量是符合需求规格的,主要判定产品生产中的技术运用出发点是否正确。
软件测试产生的主要制品是测试报告,它描述了测试中发现的错误和故障。
软件交付:
软件交付在软件产品通过所有测试之后进行,主要目的是将软件产品交付给用户使用
软件交付的主要任务包括:
①安装与部署软件系统;
②培训用户使用软件并提供文档支持。
软件交付产生的主要制品是用户使用手册,它描述了软件使用方法和常见故障的解决。
软件维护:
软件维护又称为软件演化,在软件产品交付给用户之后进行,直到软件产品消亡才结束,主要目的是保持交付给用户的软件产品能够正常运行。
软件维护的主要任务是修改软件使之移除缺陷、适应环境变化、提高软件质量或满足新的需求。
3.常见的角色分工
- 需求工程师:需求开发
- 软件体系结构师:体系结构设计
- 软件设计师:详细设计
- 程序员:软件构造
- 人机交互设计师:人机交互设计
- 软件测试人员:软件测试
- 项目管理人员:计划、组织、领导、协调
- 软件配置管理人员:管理各种产品
- 质量保障人员:监督、保障质量
- 培训和支持人员:负责软件交付与维护
- 文档编写人员:专门写作文档