软件危机是指在计算机软件开发和维护时所遇到的一系列问题。软件危机主要包含两方面的问题:一是如何开发软件以满足社会对软件日益增长的需求;二是如何维护数量不断增长的已有软件。
软件是指能够实现预定功能和性能的可执行的计算机程序,使程序正常运行所需要的数据,和文档的完整集合。
软件工程是应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度,实现满足用户需求的软件产品的定义、开发、发布和维护的工程或进行研究的学科。它采用工程的概念、原理、技术和方法来开发与维护软件,目标是实现软件的优质高产。
软件产品从问题定义开始,经过开发、使用和维护,直到最后被淘汰的整个过程就是软件生存周期,也称软件生命周期。
特点:规范的、文档驱动的方法。开发阶段按顺序进行,适合需求分析较明确,开发技术较成熟的情况。
优点:(软件生存周期阶段间的顺序性和依赖性,推迟软件编码的观点,保证质量。)
有利于大型软件开发过程中人员的组织、管理,有利于软件开发方法和工具的研究,从而提高了大型软件项目开发的质量和效率。
缺点:(不适合需求模糊的系统,开发初始阶段很难弄清系统需求。)
(1)开发过程一般不能逆转,否则代价太大;
(2)实际的项目开发很难严格按该模型进行;
(3)客户往往很难清楚地给出所有的需求,而该模型却要求如此。
(4)软件的实际情况必须到项目开发的后期客户才能看到,这要求客户有足够的耐心。
使用范围:
(1)用户的需求非常清楚全面,且在开发过程中没有或很少变化;
(2)开发人员对软件的应用领域很熟悉;
(3)用户的使用环境非常稳定;
(4)开发工作对用户参与的要求很低。
特点:构建原型系统让用户试用并收集用户意见,获取用户真实需求。
优点:只要使用得当,就能减少软件的总成本,缩短开发周期。
(克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险。)
(1)可以得到比较良好的需求定义,容易适应需求的变化;
(2)有利于开发与培训的同步;
(3)开发费用低、开发周期短且对用户更友好。
这种模型适合预先不能确切定义需求的软件系统的开发。
缺点:
(1)客户与开发者对原型理解不同;
(2) 准确的原型设计比较困难;
(3) 不利于开发人员的创新。
所选用的开发技术和工具不一定符合主流的发展;快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。
使用这个模型的前提是要有一个展示性的产品原型,因此在一定程度上可能会限制开发人员的创新。
使用范围:
(1)对所开发的领域比较熟悉而且有快速的原型开发工具;
(2)项目招投标时,可以以原型模型作为软件的开发模型;
(3)进行产品移植或升级时,或对已有产品原型进行客户化工作时,原型模型是非常适合的。
特点:
优点:(能够在早期向用户提交部分产品且易于维护)
(1)采用增量模型的优点是人员分配灵活,刚开始不用投入大量人力资源;
(2)如果核心产品很受欢迎,则可增加人力实现下一个增量;
(3)可先发布部分功能给客户,对客户起到镇静剂的作用。
缺点:(软件的体系结构必须是开放的。)
(1)并行开发构件有可能遇到不能集成的风险,软件必须具备开放式的体系结构;
(2)增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。
使用范围:
(1)进行已有产品升级或新版本开发,增量模型是非常适合的;
(2)对完成期限严格要求的产品,可以使用增量模型;
(3)对所开发的领域比较熟悉而且已有原型系统,增量模型也是非常适合的。
特点:适用于面向对象方法
是一种以用户需求为动力,以对象作为驱动的模型,适合面向对象开发方法。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性,开发过程具有迭代性和无间隙性。
优点:各个阶段没有明显的界限,开发人员可以同步进行开发。
可以提高软件项目开发效率,节省开发时间。
缺点:
由于各开发阶段是重叠的,因此在开发过程中需要大量开发人员,不利于项目管理。开发过程过于无序。
适用范围:
面向对象的软件开发过程
特点:
螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险,即是在每个阶段之前都增加了风险分析过程。
优点:
对可选方案和约束条件的强调有利于已有软件的重用,也有利于把软件质量作为软件开发的一个重要目标;
减少了过多测试(浪费资金)或者不足(产品故障多)所带来的风险;
在螺旋中维护的只是模型的另一个周期,在维护和开发之间没有本质的区别
(1)设计上的灵活性,可以在项目的各个阶段进行变更;
(2)以小的分段来构建大型系统,使成本计算变得简单容易;
(3)客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性;
(4) 随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互。
缺点:
(1)采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失;
(2)过多的迭代次数会增加开发成本,延迟提交时间。
使用范围:
适用于大规模内部开发项目,分析风险和排除风险。
螺旋模型只适合于大规模的软件项目。
特点:
适用于面向对象方法,使用统一建模语言UML,采取用例驱动和构架优先的策略,迭代增量的构造方法。
优点:
提高了团队生产力,在迭代的开发过程、需求管理、基于组件的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面,针对所有关键的开发活动为每个开发成员提供了必要的准则、模板和工具指导,并确保全体成员共享相同的知识基础。它建立了简洁和清晰的过程结构,为开发过程提供较大的通用性。
缺点:
RUP只是一个开发过程,并没有涵盖软件过程的全部 内容,例如它缺少关于软件运行和支持等方面的内容;此外,它没有支持多项目的开发结构,这在一定程度上降低了在开发组织内大范围实现重用的可能性。可以说 RUP是一个非常好的开端,但并不完美,在实际的 应用中可以根据需要对其进行改进并可以用OPEN和OOSP等其他软件过程的相关内容对RUP进行补充和完善。
实体:矩形框表示
关系:用菱形表示
属性:椭圆或圆角矩形
数据源点或终点:正方形或正方体
数据处理:圆角矩形或圆形
数据存储:两端用同向圆弧封闭的平行横线或开口矩形
数据流:箭头
*:表示数据流之间是“与”关系
+:表示数据流之间是“或”关系
椭圆:表示实体的一种状态
箭头:表示从箭头出发的状态可以转换到箭头所指的状态
事件: 箭头附近可标出引起状态转换的事件名
实心圆:指出该实体被创建后所处的初始状态
内部实心的同心圆:表示实体的最终状态
数据字典(DD)是对数据流图中出现的所有数据元素、数据流、文件、处理的定义的集合。作用是在软件分析和设计过程中提供数据描述,是数据流图必不可少的辅助资料。
数据字典通常由数据元素、数据流、数据存储、和数据处理组成
软件的模块化、模块的独立性、抽象和逐步求精、信息隐蔽和局部化。
软件测试是由人工或计算机来执行或评价系统的过程,已验证它是否满足规定的需求,测试的根本任务是发现软件中的错误,测试过程的早期使用白盒法,后期使用黑盒法。
使用尽可能少的高效测试数据,从而尽可能多的发现软件中的错误
软件重用是指在软件开发,维护过程中不作修改或稍作修改就可以重复使用相同或相似的软件元素的过程。这些软件元素包括应用领域知识、开发经验、设计经验、体系结构、需求分析文档、设计文档、程序代码和测试用例等。对于新的软件开发项目而言,他们是构成整个软件系统的部件,或者在软件开发过程中可发挥某种作用、通常把这些软件元素称为软件构件。
逆向工程是指根据已有的源代码构造中间产品,包括重新创建设计和规约
再工程是指在逆向工程所获得信息的基础上,重新进行软件设计,重构已有系统的一个新版本。