软件工程复习(1)

三个阶段(填)

​ 程序设计阶段 50~60年代

​ 程序系统阶段 60~70年代

​ 软件工程阶段 70年代以后

1968北大西洋公约组织的计算机科学家在西德召开了国际会议,讨论软件危机问题,在这次会议上正式提出了并使用了’软件工程’这个名词,一门新兴的的学科就此诞生。(选)

软件危机的概念(选)

在计算机软件开发和维护的阶段所遇到的一系列严重的问题

产生软件危机的原因

  • 对用户要求没有完整准确的认识就匆忙着手编写程序是许多软件开发工程师失败的主要原因之一

  • 软件开发最初的工作应该是问题定义也就是确定要求解决的问题是什么;然后要进行可行性研究,决定该问题是否存在一个可行性的解决办法;接下来还应该进行需求分析,也就是深入具体的了解用户的要求

软件工程的概念

  • 软件工程就是指导计算机软件开发和维护的一门工程学科。

  • 以经济地开发出高质量的软件并有效的维护它这就是软件工程

  • 1999年IEEE进一步给出了更全面更具体的定义:“软件工程是:1.把系统的、规范的、可度量的途径应用于软件的开发、运行和维护过程,也就是把工程应用于软件;2研究1中提到的途径”

  • 1、软件工程关注于大型程序的构造

  • 2、软件工程的中心课题是控制复杂性

  • 3、软件经常变化

  • 4、开发软件的效率非常重要

  • 5、和谐的合作是开发软件的关键

  • 6、软件必须有效地支持它用户

  • 7、在软件工程领域通常由一种文化背景的人替具有另一种文化背景的人

软件工程的基本原理(背)

  • 1、用分阶段的生命周期计划严格执行管理

  • 2、坚持进行阶段评审

    ​ 基准配置又称基线配置,他们是经过阶段评审后的软件配置成分(各个阶段产生的文档或程序代码)。基线配置管理也称为变动控制:一切有关修改软件的建议,特别是涉及对基准配置的修改建议,都必须按照严格的规程进行评审,获取批准后才能实施,绝对不能谁想修改软件(包括尚在开发过程中的软件),就随意进行修改。

  • 3、实行严格的产品控制

  • 4、采用现代化程序设计技术

  • 5、结果应该清楚的审查

  • 6、开发小组的人员应该精而少

    ​ 软件开发小组的组成员的素质应该好,而人数不宜过多

  • 7、承认不断改进软件工程实践的必要性

软件工程方法学(背)

  • 传统方法学

    ​ 传统方法学也称生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构设计和结构化实现)来完成软件开发的各项任务,

    把软件生命周期的全过程依次划分为若干个阶段,

    每一个阶段的开始之前的都必须进行正式严格的技术审查和管理复审。

  • 面向对象方法学

    (1)把对象(object)作为融合数据及在数据的操作行为的统一的软件构件。

    (2)把所有的对象都分成类(class)。

    (3)按照父类(或称为基类)与子类(或称为派生类)的关系,把若干相干类组成一个层次结构的系统(也称为类等级),这种现象称之为继承(Inheritance)

    (4)对象彼此间仅能通过发送信息互相联系。

    面向对象方法学的出发点和基本原则,是尽量模仿人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界、解决问题的方法与过程,从而使描述问题的问题空间(也称问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。

    传统方法学强调自顶向下顺序的完成软件开发的各阶段任务。事实上,人类认识客观世界解决现实的问题的过程,是一个渐进的过程。人的认识需要在继承已有的有关知识基础上,经过多次反复才能逐步深化。在人的认识深化过程中,既包括了从一般到特殊的演绎思维过程,也包括了从特殊到一般的归纳思维的过程。

软件生命周期

  • 1、问题定义

    要解决的问题是什么?

  • 2、可行性研究

    可行性研究应该比较简短这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决方法。

  • 3、需求分析

为解决这个问题,目标系统必须做什么,主要是确定目标系统必须具备哪些功能。

  • 4、总体设计

    总体设计的另一项主要任务就是设计程序的体系结构,也就是确定程序的有哪些模块

    组成以及模块间的关系。

  • 5、详细设计

这个阶段将会详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。

  • 6、编码和单元测试

    详细设计的结果翻译成用选定的语言书写的程序,并仔细测试编写每一个模块

  • 7、综合测试

    通过各种类型的测试(及相应的调试)使软件达到预订的要求。

软件过程

软件过程是为了获得高质量软件所需要完成的一系列任务的框架,他规定了完成各项任务的工作步骤。

瀑布模型

  • 1、阶段具有顺序性和依赖性
  • 2、推迟实现的观点
  • 3、质量保证的观点
  • 瀑布有许多的优点:1、可强迫开发人员采用规范的方法(例如,结构化技术);2、严格的规定了每个阶段必须要提交的文档;3、要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
  • “瀑布模型是由文档驱动的“这个事实也是它的一个主要缺点。
  • 仅仅通过一个写在纸上的静态的规格说明很难全面正确地认识动态的软件产品
  • 一但一个用户开始使用一个软件,在他的头脑中关于一个软件应该做什么的想法就会或多或少地发生变化,这就使得最初提出的需求变得不完全适用了
  • 要求用户不经过实践就提出完整准确的需求,在许多情况都不是不切实际的

快速原型

  • 所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能玩成的功能往往是最终产品能完成的功能的一个子集。
  • 快速原型模型的第一步是快速建立一个能反映用户主要需求的原型系统,让用户在计算机上试用它,通过实践来了解目标系统的概貌。
  • 快速原型模型是不带反馈环的,这正是这种过程模型的主要优点
  • 快速原型模型的本质是’快速’。开发人员应该尽可能快地建造出原型系统,以加速软件开发过程,节约软件开发成本。原型的用途是获悉用户的真正需求,一旦需求确认了,原型将被抛弃。

增量模型(别名:渐增模型)

  • 采用瀑布模型或快速原型开发软件时,目标都是一次就把一个满足所有需求的产品提交给用户。
  • 能在较短时间内向用户提交可完成部分工作的产品,是增量模型的一个优点。
  • 在把每个新的增量构件集成到现有软件体系结构中时,不破坏原来已经开发出来的产品,必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品加入新构件的过程必须是开放的

螺旋模型

​ 对项目管理人员的要求较高

  • 螺旋模型有许多优点:对可选方案和约束条件的强调有利于已有的软件的重用,也有助于把软件质量作为软件开发的一个重要目标;减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险;更重要的是,在螺旋模型中维护只是模型的另一个周期在维护和开发之间并没有本质的区别。
  • 螺旋模型主要适用于内部开发的大规模的软件项目。
  • 螺旋模型的主要的优势在于,它是风险驱动的,但是,这也可能是他的一个弱点。

喷泉模型

​ 迭代是软件开发过程中普遍存在的一个内在属性,迭代面向对象,无缝

Rational统一过程

​ Rational统一过程是由Rational公司推出的一种完整而且完美的软件过程。

  • 所谓构件就是功能的清晰的模块或子系统
  • 所谓模型,就是为了理事物作出的一种抽象,对事物的一种无歧义的书面描述。(次重点)
  • RUP强调采用迭代和渐增的方式来开发软件,整个项目开发过程组成。在每次迭代中只考虑系统的一部分需求,针对这些部分的需求进行分析,设计,实现,测试和部署等工作,事实上,RUP重复一系列组成软件生命周期的循环。

敏捷过程与极限编程

敏捷过程(开发宣言:工、文、合、变)

  • 目的:具有高效工作和快速响应变化能力

  • (1)个体和交互胜过过程和工具

    团队的合作、沟通以及交互能力要比单纯的软件编程能力要重要

  • (2)可以工作的软件胜过面面俱到的’文档’

  • (3)客户合作胜过合作谈判(沟通)

  • (4)响应变化胜过遵循变化(灵活性)

极限编程

​ 极限编程(eXtreme Programming.XP)是敏捷过程中最富盛名的一个,

  • 结对编程(名词解释)

    ​ 结对编程就是有两个编程人员在同一台计算机上共同编写同一个问题的程序代码,通常’一个人编码’,另一个人对代码进行’审查和测试’,以保证代码的正确性与可读性。

  • 重构(名词解释)

​ 所谓代码重构就是在不改变系统行为的前提下重新调整和优化系统的内部结构以降低复杂性、消除复杂性、消除冗余、增加灵活性和提高性能

小结

面向对象方法=对象+类+继承+用消息通信