哈工大软件过程与工具复习1——第1-2讲 概论与核心思想

目录

一、概论

1. 软件的基本概念

(1)什么是软件

(2)软件的发展

2. 软件工程的基本概念

(1)软件工程产生的历史根源

(2)软件工程的基本概念

(3)软件工程的知识体系

 3. 软件工程工具

二、软件工程核心思想

1. 软件工程的本质:不同抽象层次之间的映射与转换

2. 软件工程所关注的目标

3. 软件开发中的多角色

4. 软件工程 = 最佳实践

5. 软件工程的四个核心理论概念


一、概论

1. 软件的基本概念

(1)什么是软件

软件 (Software) 一组对象或项目所形成的一个“配置”,由 程序、文档和数据 等部分构成。
程序 (program) :可被计算机硬件理解并执行的一组指令,提供期望的功能和性能;
数据 (data structure):程序能正常操纵信息的数据结构;
文档 (document) :与程序开发、维护和使用有关的图文材料
软件的四大特征:
1.  复杂性 (complexity): 软件要解决的现实问题通常很复杂,数据、状态、逻辑关系的可能组合导致了软件本身的复杂性。 软件无法以“制造”的方式被生产,只能采用手工开发方式, 这是一种人为、抽象化的智能活动 ( 智力密集型 ) ,与人的水平密切相关,人类思维的不确定性导致了开发过程的复杂性
2.  不可见性(invisibility): 尚未完成的软件是看不见的,无法像产品一样充分呈现其结构,使得人们在沟通上面临极大的困难,难以精确的刻画和度量
3. 易变性(changeability): 软件所应用的环境由人群、法规、硬件设备、应用领域等因素汇集而成,而这些因素皆会频繁快速的变化
4.  一致性(conformity): 各子系统的接口必须协同一致,而随着时间和环境的演变,要维持这样的一致性通常十分困难

(2)软件的发展

1960-70年代:结构化方法——结构化程序设计方法、瀑布模型、螺旋模型等,好比建平房或用建平房的技术建造复杂建筑

1980:面向对象的方法——面向对象方法、面向对象模型及建模工具等,好比建高楼,可以更方便地构建复杂建筑

1990:构件化方法——软构件方法、Web Services、软件复用方法等,好比堆积木、造预制件等,可以批量地、快速地构建更为复杂的建筑

2000:面向服务的体系结构SOA方法——基于Internet与云计算的软件开发方法

1950-1960年代:
软件 = 程序(Program)
面向过程的软件 = 算法(Algorithm) + 数据结构(Data Structure)

1970年代:
软件 = 程序(Program) + 文档(Document)
软件 = 程序(Program) + 文档(Document) + 数据(Data)

1980-1990年代:
面向对象的软件 = 对象(Object) + 消息(Message)

1990年代-至今:
面向构件的软件 = 构件(Component) + 框架(Framework)
面向服务的软件 = 服务(Service) + 消息(Message) + 总线(Bus)

2. 软件工程的基本概念

(1)软件工程产生的历史根源

软件危机(Software Crisis):计算机软件的开发和维护过程所遇到的一系列严重问题; 

(2)软件工程的基本概念

(3)软件工程的知识体系

 3. 软件工程工具

计算机辅助系统工程工具 - CASE
制图、建模工具:Rational Rose / Microsoft Visio / StarUML
原型制作工具:Balsamiq Mockups / ExtJS /  jQuery / EasyUI /墨刀
集成开发环境:Visual Studio.NET / Eclipse
数据库设计工具:PowerDesigner / ERWin
代码生成工具:Rational Rose(含)
项目管理工具 - Microsoft Project
 

二、软件工程核心思想

1. 软件工程的本质:不同抽象层次之间的映射与转换

任何软件系统开发的共同本质在于:从现实空间的需求到计算机空间的软件代码之间的映射与转换

单步映射与多步映射

软件工程本质:用严格的规范和管理手段来缩小偏差,通过牺牲“时间”来提高“质量”

概念映射:问题空间的概念与解空间的模型化概念之间的映射 

业务逻辑映射:问题空间的处理逻辑与解空间处理逻辑之间的映射

为了实现以上两个映射,软件工程需要解决以下问题:
1. 需要设置哪些抽象层次——单步映射?多步映射?几步?
2. 每一抽象层次的概念、术语与表达方式——公式?图形?文字?
3. 相邻的两个抽象层次之间如何进行映射——需要遵循哪些途径和原则?

需求分析:在一个抽象层上建立需求模型的活动,产生需求规约(Requirement Specification),作为开发人员和客户间合作的基础,并作为以后开发阶段的输入

软件设计:定义实现需求规约所需的系统内部结构与行为,包括软件体系结构、数据结构、详细的处理算法、用户界面等,即所谓设计规约(Design Specification),给出实现软件需求的软件解决方案

实现:由设计规约到代码的转换,以某种特定的编程语言,对设计规约中的每一个软件功能进行编码

验证/确认:一种评估性活动,确定一个阶段的产品是否达到前阶段确立的需求(verification),或者确认开发的软件与需求是否一致 (validation)

现实空间的需求 → 需求规约 → 设计规约 → 代码

2. 软件工程所关注的目标

产品:各个抽象层次的产出物
过程:在各个抽象层次之间进行映射与转换
软件工程具有“产品与过程二相性”的特点,必须把二者结合起来去考虑,而不能忽略其中任何一方

功能性需求(Functional Requirements):软件所实现的功能达到它的设计规范和满足用户需求的程度(功能1、功能2、…、功能n)
完备性:软件能够支持用户所需求的全部功能的能力
正确性:软件按照需求正确执行任务的能力,正确性描述软件在需求范围之内的行为
健壮性:在异常情况下,软件能够正常运行的能力,包括容错能力和恢复能力。健壮性描述软件在需求范围之外的行为。
可靠性:在给定的时间和条件下,软件能够正常维持其工作而不发生故障的能力

非功能性需求(Non-Functional Requirements):系统能够完成所期望的工作的性能与质量
效率:软件实现其功能所需要的计算机资源的大小,“时间-空间”
可用性:用户使用软件的容易程度,用户容易使用和学习
可维护性:软件适应“变化”的能力,系统很容易被修改从而适应新的需求或采用新的算法、数据结构的能力
可移植性:软件不经修改或稍加修改就可以运行于不同软硬件环境(CPU、OS和编译器)的能力
清晰性:易读、易理解,可以提高团队开发效率,降低维护代价
安全性:在对合法用户提供服务的同时,阻止未授权用户的使用
兼容性:不同产品相互交换信息的能力
经济性:开发成本、开发时间和对市场的适应能力
商业质量:上市时间、成本/受益、目标市场、与老系统的集成、生命周期长短等

不同类型的软件对质量目标的要求各有侧重:
实时系统:侧重于可靠性、效率
生存周期较长的软件:侧重于可移植性、可维护性

3. 软件开发中的多角色

客户单位(Client,甲方)
决策者(CXO)、终端用户(End User)、系统管理员(Administrator)

软件开发公司(Supplier,乙方)
决策者(CXO)
软件销售与市场人员
咨询师、需求分析师
软件架构师、软件设计师
开发人员:开发经理/项目经理、程序员
维护人员

(曾经的我还会负责地把右下角的东西P掉,现在的我只想要躺平摆烂) 

4. 软件工程 = 最佳实践

软件系统的复杂性、动态性使得:高深的软件理论在软件开发中变得无用武之地。即使应用理论方法来解决,得到的结果也往往难以与现实保持一致

因此,软件工程被看作一种实践的艺术。做过越多的软件项目,犯的错误就越少,积累的经验越多,承接项目的成功率就越高。对新手来说,要通过多实践、多犯错来积累经验,也要多吸收他人的失败与教训与成功的经验。
在软件工程师试图解决“软件危机”的过程中,总结出一系列日常使用的概念、原则、方法和开发工具。这些实践经验经过长期的验证,已经被证明是更具组织性、更高效、更容易获得成功。大部分的这些实践都没有理论基础!

5. 软件工程的四个核心理论概念

核心概念:概念和形式模型、抽象层次、大问题的复杂性:分治复用折中、一致性和完备性、效率、演化

分而治之

将复杂问题分解为若干可独立解决的简单子问题,并分别独立求解,以降低复杂性。然后再将各子问题的解综合起来,形成最初复杂问题的解

核心问题:如何的分解策略可以使得软件更容易理解、开发和维护?

复用

在一个新系统中,大部分的内容是成熟的,只有小部分内容是全新的,构造新的软件系统可以不必每次从零做起。复用已经成功使用的架构、框架、同类经验的团队,直接使用已有的软构件,即可组装成新的系统,复用已有的功能模块,既可以提高开发效率,也可以改善新开发过程中带来的质量问题。

折中

不同的需求之间往往存在矛盾与冲突,需要通过折中来作出的合理的取舍,找到使双方均满意的点

核心问题:如何调和矛盾(需求之间、人与人之间、供需双方之间、…)

演化

软件系统在其生命周期中面临各种变化
核心问题:在设计软件的初期,就要充分考虑到未来可能的变化,并采用恰当的设计决策,使软件具有适应变化的能力
即:可修改性、可维护性、可扩展性

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值