1.1 软件开发的本质
1.1.1 软件工程的本质问题
体现在软件本身固有的困难中,困难包括:
固有的困难:complexity(复杂性)、conformity(一致性)、changeability(可变性)、invisibility(不可见性)
可变的困难:stakeholders(利益相关者)、process(过程)、modeling(建模)
可支持性(适应性)由3个系统特征组成的集合来定义:可理解性、可维护性(maintainability)、可伸缩性(可扩展性)
1.1.2 利益相关者
1、利益相关者是在软件项目中存在利害关系的人,主要包括两组:customers(客户)、developers(开发者)
2、信息系统是社会系统,它由人为人开发
1.1.3 过程
1、定义软件生产中使用的活动和组织程序和维护
2、一个过程模型:
-
声明了所执行活动的次序
-
详细说明要交付哪些开发的人工制品,以及什么时候交付
-
将活动和人工制品分配给开发者
-
提供用来监控项目进展、评估结果和规划未来项目的标准
3、软件过程不易于被标准化(Is not susceptible to standardization)
4、Iterative and incremental process(迭代和增量过程)
-
现代软件开发过程总是迭代和增量的。
-
在连续的迭代中增加细节,必要时还引入了变更和改进(迭代完发布新版本)。
-
增量版本保持了用户的满意度,提供重要反馈(一次迭代的功能增加或减少)
(注:增量版本并不是向软件产品增加新的功能,增量改进非功能性的软件质量,如软件的正确性、可靠性、耐用性、性能等)
-
具有特殊意义的变体:
-
螺旋模型(the spiral model):包含了RUP,MDA,敏捷开发模型
-
RUP(the Rational Unified Process (RUP)):提供文本,概念,开发思路
-
MDA(Model Driven Architecture (MDA)):由模型和构件生成软件
-
敏捷开发过程(the agile development process):提出了一个框架,人与团队协作被认为比规划、文档更重要
-
面向方面的软件开发(aspect-oriented software development):引入有关横切关注点的正交思想
-
5、能力成熟度模型(Capability Maturity Model,CMM)过程标准
-
用于进行过程评估和改进的交流方法
-
本质上是一个由IT组织填写的问卷调查表
-
第一级:走到哪算到哪,没有特定的规则,大部分都在第一级
第二级:可重复级,靠经验每一次用相同的方法,东软
第三级:定义级,已经定义好了规则,不到整个软件企业总量的10%
第四级:管理级,对整个每一步的过程增加了监控,亚马逊
第五级:优化级,对整个过程或标准优化的策略,基本是军方企业
6、ISO9000系列质量标准 过程标准
- 如果过程是正确的,那么结果一定是正确的,即关注产品质量问题
- 强调必须完成什么,没强调必须怎么执行
7、ITIL框架 过程标准
- 高效的利用4P:people、processes、products、partners
- 致力于方案交付和管理的操作方便
- 持续的服务改进方案(continuous service improvement programme,CSIP),用来实现解决方案管理的ITIL方法。该方案以实现高水平业务目标的决心为起点,接着检查是否达到里程碑,并通过巩固已达到的改进和持续任务循环而保持发展的势头。
8、COBIT框架 产品标准 服从框架
-
侧重于一个组织需要做什么,而非如何去做
-
将相关的IT工作组织到4个领域:P8
- 规划与组织(Plan and Organize)
- 获取与实现(Acquire and Implement)
- 交付与支持(Deliver and Support)
- 监控(Monitor)
-
将控制目标分配到这些领域,有34个高级别的控制目标,它依据COBIT推荐的318个详细控制目标来评估IT过程
1.1.4 建模
1、建模几软件开发活动,是来自现实的抽象,是现实的抽象表示
2、需要开发人员在不同阶段进行沟通(language)和文档化(tools)
3、统一建模语言(UML)
- 是一种通用的、可视化的建模语言
- 独立于任何软件开发过程,也独立于实现技术
- 要求:只要面向对象开发方法就行
- 分类:
- 状态模型(state models),类图:描述静态数据结构
- 行为模型(behavior models),用例图,时序图,