一、软件工程师和软件工程团队
1、软件工程师是解决现实问题的,把现实问题抽象成模型,上升到逻辑,形成一个能解决某一现实问题的软件。
事后看起来比较容易,但事前解决起来却不容易
2、
软件工程的任务有两种,一种是本质性的,一种是附属性的
本质性的就是软件的分析与设计、软件的解决方案
附属性的就是编写代码、测试代码
软件的分析与设计的本质工作,是我们无法回避的,也是最困难的东西
程序员和测试工程师联合起来,完成了软件开发的附属性工作
3、设计因为建造的对象而变化。
一个简单的c语言小程序,不用构思,直接写代码;但一道算法题,就需要提前构思、设计一下,再写代码;但如果是一个有复杂功能的软件,写代码之前就更得需要充分的评估、准备、构思,这就是软件工程意义所在。
类比一下,建造一栋楼房,不提前画图纸,不提前做构思设计,谁也不能设计建造地完美。软件工程也是这样,重在设计准备的过程。
4、软件工程本质是工程,那么就会有时间、资金、质量的要求
就得需要一类人来对开发过程进行监督、管控、协调,这类人就是项目经理
4、软件工程中的“三驾马车”:
(1)产品经理(需求工程师)(收入高,写文档,很少写代码,跟现实、用户打交道)
(2)软件体系结构工程师(收入高,写关键代码和困难代码,整个项目的技术权威)
(3)项目经理(保证项目在一定的时间、质量、成本的约数内完成;协调者但不是控制者;决策某件事但不需亲身去执行;激励者,惩罚手段毫无用处;有领导力;有比较好的收入;最重要的是调动、激励,而不是发号施令)
如果一个项目经理基本没做什么特殊的事情,项目却很成功,说明这是一个很出色项目经理。
5、软件工程其他的角色:
(1)人机交互设计师
地位越来越来重要,让用户使用过程中更简便,更人性化,更高效,考虑用户行为。可以理解为做用户体验,收入不错,但比“三驾马车”低一些
(2)程序员,收入一般
(3)高端程序员,设计算法(数据结构工程师),收入比一般程序员好
(4)软件测试工程师,地位工资和程序员差不多
(5)软件维护工程师,难度大,累,地位低,工资低。重要的不是软件的保养,而是软件做增值,做附加值和修改。
四、软件工程历史和软件工程模型
1、程序=算法+数据结构,但软件的开发绝不仅仅是程序的开发,编程只是一部分工作
2、
3、1960s软件危机:
直白的说,就是软件的开发失去了人们的控制。为了解决这一问题,提出了用工程化生产软件的思想
4、结构化方法避免混乱式的代码,让程序有更清晰的结构
5、
6、软件工程学习阶段:
7、软件开发各个步骤简介:
(1)需求分析
该系统或者软件的用户(管理员、普通用户等)是谁?
不同的用户需要什么样的操作?如何实现这样的操作?
(2)设计——构造软件的模型,抽象成各种模型和关系
(3)构造——写代码实现
(4)测试
软件测试方案本身是否正确?
是否解决了问题?
(5)把软件移交给真实的用户,在现实的环境下运行软件,并且不断推出新版本,满足用户需求的变化
8、降低复杂度的方法
1、分解
2、抽象