第一章 软件工程学概述

软件危机

软件工程

基本原理

  1. 用分阶段的生命周期计划严格管理
  2. 坚持进行阶段评审
  3. 实行严格的产品控制
  4. 采用现代程序设计技术
  5. 结果应能清楚地审查
  6. 开发小组的人员应该少而精
  7. 承认不断改进软件工程实践的必要性

软件工程方法学

传统方法学(本教材学习重点)

概念:
传统方法学也称为生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。

特点:
传统方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。
每个阶段的开始和结束都有严格标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一阶段的开始标准。
在每一个阶段结束之前都必须进行正式严格的技术审查和管理复审。
审查的一条主要标准就是每个阶段都应该交出“最新式的”
(即和所开发的软件完全一致的)高质量的文档资料,从而保证在软件开发工程结束时有一个完整准确的软件配置交付使用。

面向对象方法学(不是本教材学习重点)

四个要点:

  1. 把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。
  2. 把所有对象都划分成**类(class)**。【类相当于一种模板,它只能用于制作对象,真正做事情的是对象】
  3. 按照父类与子类的关系,把若干个相关类组成一个层次结构的系统。
  4. 对象彼此间仅能通过发送消息互相联系。

基本原则:

尽量模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界、解决问题的方法与过程,从而使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。

优点:

降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作。
面向对象方法特有的继承性和多态性,进一步提高了面向对象软件的可重用性。

软件生命周期

3个大阶段,8个小阶段,背过!!!!

定义:软件生命周期由**软件定义、软件开发和运行维护(也称为软件维护)**3个时期组成,每个时期又进一步划分成若干个阶段。

  1. 问题定义
  2. 可行性研究
  3. 需求分析
  4. 总体设计
  5. 详细设计
  6. 编码和单元测试
  7. 综合测试
  8. 软件维护

软件过程

概念:【可以理解为培养方案,不同的公司开发软件有不同的方案,就像不同学校专业有不同培养方案。】

软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
软件过程描述为了开发出客户需要的软件,什么人(who)、在什么时候(when)、做什么事(what)以及怎样(how)做这些事以实现某一个特定的具体目标。

瀑布模型

传统瀑布模型,就像泼出去的水,一去不复返,没有反馈的环节。这个模型太过于理想,正常人不可能不犯错误。
对于开发人员,没有反馈,出了问题你很难搞。
对于用户来说,比如你想定制,那你没法去很好的监控它生产的过程,最后做出来你才知道是啥样的,结果就是交货时你很失望但是没办法。
会这样问题就出现在第一个环节,即没有很好的交流用户的需求。1. 没有了解需求。 2. 用户的需求是随时会变的。

因此实际的瀑布模型是:

瀑布模型

快速原型模型

顾名思义:1.快速 2.原始模型。 了解用户需求后,先快速地做一个原始模型,给用户看看确定需求。
这是现在很主流的,从瀑布模型改进来的,只改了瀑布模型的第一个环节,可以在第一环节确定下来用户的需求。也就是激发用户的需求。

增量模型

螺旋模型

喷泉模型

Rational统一过程

敏捷过程与极限编程

微软过程

第二章 可行性研究

“战略阶段”

任务

不是为了解决问题,而实决定问题是否值得去研究。
过程:
问题定义->逻辑模型->解法

至少从以下三方面研究可行性:
技术、经济、操作

过程

  1. 复查系统规模和目标
  2. 研究目前
  3. 导出新系统的高层逻辑模型(两张图!本章重点!)
  4. 进一步定义问题
  5. 导出和评价供选择的解法