首页 > 代码库 > 构建之法学习(1)

构建之法学习(1)

软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。

软件分为各种形式:

系统软件:操作系统、设备驱动程序、工具软件等

应用软件:用户使用它们来完成工作,从管理核电厂到写文章,或者是通信、游戏、浏览网页、播放视频等

恶意软件:软件病毒等软件

软件开发五大难题:

1.复杂性(Complexity)软件可以说是人类创造的最复杂的系统类型。大型软件(操作系统、办公软件、搜索引擎)有超过百万行的源代码,上万个不同的文件。而软件工程师通常一次只能看到30—80行源代码(相当于显示器的一屏),他们的智力、记忆力和常人差不多。软件的各个模块之间有各种显性或隐性的依赖关系,随着系统的成长和模块的增多,这些关系的数量往往以几何级数的速度增长。

2.不可见性(Invisibility)软件工程师能直接看见源代码,但是源代码不是软件本身。软件以机器码的形式高速运行,还可能在几个CPU核上同时运行,工程师是“看”不到自己的源代码如何具体地在用户的机器上被执行的。商用软件出现了错误,工程师可以看到程序在出错的一瞬间留下的一些痕迹(错误代号、大致的目标代码位置、错误信息),但是几乎无法完整重现到底程序出现了什么问题。

3.易变性(Changeability)软件看上去很容易修改,修改软件比修改硬件容易多了。人们自然地期待软件能在下面两种情况下“改变”:让软件做新的事情;让软件适应新的硬件。但是与此同时,正确地修改软件是一件很困难的事情。

4.服从性(Conformity)软件不能独立存在,它总是要运行在硬件上面,它要服从系统中其他组成部分的要求,它还要服从用户的要求、行业系统的要求(例如银行利率的变化)。

5.非连续性(Discontinuity)人们比较容易理解连续的系统:增加输入,就能看到相应输出的增加。但是许多软件系统却没有这样的特性,有时输入上很小的变化,会引起输出上极大的变化。

软件工程的15个知识领域:

1.SoftwareRequirement

2.SoftwareDesign

3.SoftwareConstruction

4.SoftwareTesting

5.SoftwareMaintenance

6.SoftwareConfigurationManagement

7.SoftwareEngineeringManagement

8.SoftwareEngineeringProcess

9.SoftwareEngineeringModelsandMethods

10.SoftwareQuality

11.SoftwareEngineeringProfessionalPractice

12.SoftwareEngineeringEconomics

13.ComputingFoundations

14.MathematicalFoundations

15.EngineeringFoundations

 

构建之法学习(1)