目录
软件过程
1. 软件开发的本质
- 软件工程的本质问题体现在软件本身所固有的困难中,我们只能承认这些困难——没有获得突破性进展或“银弹”的方法。软件工程的本质问题是由软件固有的复杂性、一致性、可变性和不可见性所导致的。
- 软件的“本质困难”定义了软件开发的不变事实。不变事实声明软件是一种创造性开发行为的产品——由工匠而不是优秀艺术家所完成的行为意义上的一种工艺品或艺术品。在典型的情况下,软件并不是制造业重复性行为的结果。
软件开发的不变事实
- 软件本身就是复杂的。在现代软件系统中,复杂性不过是软件规模(如以代码行表示的函数,以及组成软件产品的构件之间相互依存关系的函数)
- 算法的复杂性不会增加软件的复杂度,但数据的复杂性会
- 构建能够容纳所有业务数据、规则和特殊情况的软件一贯是困难的
- 另外3个重要特性(一致性、可变性及不可见性)加重了这种困难
- 应用软件必须与其所基于的特定硬件/软件平台相符合(一致),也必须与现有的信息系统相符合并集成在一起。
- 因为业务过程和需求是在不断变化的,所以在建立应用软件时必须能够容纳变化。
- 尽管应用软件提供了可见的输出,但是负责输出的代码通常深深地隐藏在“不可见的程序语句、二进制代码库,以及周边的系统软件中。
- 软件是开发出来的,而不是成批制造出来的
- 一旦将软件产品开发出来,就能够以最小的代价复制(成批制造),但是对于企业信息系统这种情况,从来都不需要复制软件。每个系统都是独特的,并且是为特定企业开发的。困难在于开发,而并不在于成批制造。因此,整个软件生产的成本都在于它的开发。
软件开发的意外事件
- 信息系统即社会系统,它的成果和失败依赖于:人、他们对系统的接受或支持、用于开发的过程、管理措施、软件模型技术的利用等。
- 意外困难分为三类:
-
利益相关者:利益相关者是在软件项目中存在利害关系的人。任何受到系统影响或对系统开发产生影响的人,都是利益相关者。有两组主要的利益相关者:
-
客户(用户或系统所有者)
- 客户的需求被误解了,或者没有被完全捕获。
- 客户的需求改变得过于频繁。
- 客户没有准备为项目提供足够的资源。
- 客户不想与开发者合作。
- 客户怀有不切实际的期望。
- 系统不再对客户有利。
-
开发者(分析员,设计员,程序员等)
- 项目也会因为开发者的不胜任而失败。
- 随着软件复杂性的增加,开发者的技能和知识是至关重要的。
- 良好的开发者能够交付一个可接受的解决方案
- 卓越的开发者能够更快、更廉价地交付一个更优越的解决方案
- 伟大的设计来源于伟大的设计者。
-
软件项目的成功由社会因素决定,技术是次要的,有许多技术低劣的系统仍在为客户工作并使他们受益,而对客户没有好处的系统则会被抛弃,无论其技术多么辉煌
-
-
过程:在哪个阶段,哪些人,应该干哪些事
- 迭代与增量过程
- 在连续的迭代中增加细节,必要时还引入了变更和改进,即增加功能
- 而软件模块的增量版本则保持了用户的满意度,并且为尚在开发中的模块提供重要的反馈,即精益求精
- 几种变体,包括:
- 螺旋模型
- Rational统一过程(the Rational Unified Process, RUP)
- 模型驱动的体系结构(Model-Driven Architecture, MDA)
- 敏捷开发过程
- 面向方面的软件开发。
- 能力成熟度模型(capability maturimodel,CMM):是一种用来进行过程评估和改进的流行方法
- 从本质上说,CMM是一个由IT组织填写的问卷调查表。问卷随后进行核查和认证,并将组织分配到5个CMM级别中的一个。级别越高,组织的软件过程越成熟
- 此处有图!!!!!!!!
- 迭代与增量过程
-