软件设计师——软件工程

软件开发模型——瀑布模型(SDLC)

流程:

  1. 软件计划
  2. 需求分析
  3. 软件设计
  4. 程序编码
  5. 软件测试
  6. 运行维护
    (每个阶段结束都会有个评审工作)
    缺陷:研究表明,最后会项目超时,项目超预算,导致项目无法继续。
    主要是软件需求是无法明确的,在初期是更不可能确定。
    适用场景:两种情况,
    一是二次开发
    二是需求明确的项目

原型:可以是一个简单的界面,也可以是一个简易系统给客户看,让客户提出需求。
增量模型:用开发总周期的百分之二十左右的时间,做出系统的核心模块,然后不断同客户方沟通需求,得到最终的版本。
软件设计师——软件工程_第1张图片

软件开发模型——增量模型与螺旋模型

增量模型
软件设计师——软件工程_第2张图片

螺旋模型(具备多个模型的特点)
软件设计师——软件工程_第3张图片
针对需求不明确的情况下,优先选择原型!!!!再是螺旋模型

软件开发模型——其他经典模型(V模型,喷泉模型)

V模型(强调及早的进行测试,测试要贯穿开法始终,而不是压在最尾端)
在需求分析阶段就写好系统测试的测试计划
概要设计阶段会写集成测试阶段的测试计划
详细设计阶段会写单元测试阶段的测试计划

喷泉模型(是面向对象的模型)

RAD(快速开发模型,由喷泉模型和构件化开发结合的模型)
软件设计师——软件工程_第4张图片

软件开发模型——构建组装模型(CBSD)

基本思路:将软件中的各个模块,做成标准的构件,然后将构件进行组装。极大的提高了软件的复用性!!!

  1. 需求分析和定义
  2. 软件架构设计
  3. 构件库的建立
  4. 应用如那件构建
  5. 测试与发布
    软件设计师——软件工程_第5张图片
软件开发模型——敏捷开发方法

敏捷开发模型

  • 自适应开发
  • 水晶方法
  • 特征驱动开发
  • SCRUM
  • 极限编程

基本原则:短平快的会议,小型版本发布,较少的文档,合作为重,客户直接参与,自动化测试,适应性计划调整,结对编程,测试驱动开发,持续集成,重构
四大价值观:沟通,简单,反馈,勇气
五大原则:快速反馈,简单性假设,逐步修改,提倡修改,提倡更改,优质工作
12个最佳实践:计划游戏,小型分布,隐喻,简单设计,测试先行,重构,结队编程,集体代码所有制,持续集成,每周工作40小时,现场客户,编码标准

适用范围:小项目,不适用于太大的项目

信息系统开发方法
  1. 结构化法(相比面向对象方法,不灵活)
  • 用户至上
  • 严格区分工作阶段,每阶段有任务与成果
  • 强调系统开发过程的整体性和全局性
  • 系统开发过程工程化,文档资料标准化
  • 自顶向下,逐步分解(求精)

结构化法最大的弊端:改一模块,需求要变,设计要变,编码要变,还得重新做测试。

  1. 原型法(主要用于需求阶段)
  • 适用于需求不明确的开发
  • 包括抛弃式原型和演化式原型
  1. 面向对象方法(使用较为广泛)
  • 更好的复用性
  • 关键在于建立一个全面,合理,统一的模型
  • 分析,设计,实现三个阶段,界限不明确
  1. 面向服务方法(还处于了解阶段,不需要做深究)
  • SO方法有三个主要的抽象级别:操作,服务,业务流程
  • SOAD分为三个层次:基础设计层(底层服务构件),应用结构层(服务之间的接口和服务级协定)和业务组织层(业务流程建模和服务流程编排)
  • 服务建模:分为服务发现,服务规约和服务实现三个阶段。
需求开发——需求分类与需求获取

软件需求分类

  • 业务需求,用户需求,系统需求(——业务层次需求)
  • 功能需求,性能需求,设计约束(——系统层次需求)
  • 基本需求,期望需求,兴奋需求(——QFD质量改善模型的角度)
    (目前在项目中需要尽量杜绝实现兴奋需求,会占用消耗项目资源,加大项目成本,不利于实现利润最大化)
结构化设计——基本原则
  • 概要设计
  • 详细设计

设计原则:

  • 自顶向下,逐步求精
  • 信息隐蔽
  • 模块独立(高内聚,低耦合,复杂度)
    扩展原则:
  • 保持模块的大小适中
  • 尽可能减少调用的深度
  • 多扇入,少扇出
  • 单入口,单出口
  • 模块的作用域应该在模块之内
  • 功能应该是可预测的

内聚的类型分类:

  1. 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。(功能最高)
  2. 顺序内聚:处理元素相关,而且必须顺序执行。
  3. 通信内聚:所有处理元素几种在一个数据结构的区域上。
  4. 过程内聚:处理元素相关,而且必须按特定的次序执行。
  5. 瞬时内聚(时间内聚):所包含的任务必须在同一时间间隔内执行。
  6. 逻辑内聚:完成逻辑上相关的一组任务。
  7. 偶然内聚(巧合内聚):完成一组没有关系或松散关系的任务。(功能最低)

耦合的类型分类

  1. 非直接耦合:两个模块之间没有直接关系,他们之间的联系完全是通过主模块的控制和调用来实现的。
  2. 数据耦合:一组模块借助参数表传递简单数据。
  3. 标记耦合:一组模块通过参数表传递记录信息(数据结构)。
  4. 控制耦合:模块之间传递的信息中包含用于控制模块内部逻辑的信息。
  5. 外部耦合:一组模块都访问同一全局简单变量,而且不是通过参数表传递该全局变量的信息。
  6. 公共耦合:多个模块都访问同一个公共数据环境。
  7. 内容耦合:一个模块直接访问另一个模块的内部数据,一个模块不通过正常入口转到另一个模块的内部,两个模块有一部分程序代码重叠,一个模块有多个入口。(耦合程度最高)
软件测试——测试原则与类型

测试原则:

  • 尽早,不断地进行测试
  • 程序员避免测试自己设计的程序
  • 既要选择有效,合理的数据,也要选择无效,不合理的数据
  • 修改后应进行回归测试
  • 尚未发现的错误数量与该程序已发现错误数成正比

动态测试(用到计算机)分为三类:黑盒测试法,白盒测试法,灰盒测试法(灰盒为结合黑盒和白盒)

静态测试(纯手工)分为三类:桌前检查,代码走查,代码审查

软件测试——测试用例设计

分为两种
1.黑盒测试(只需要知道输入和输出是什么,过程不考虑)

  • 等价类划分(把所有等价值进行测试,比如,>90 为优,>80为良)
  • 边界值分析(针对边界值进行测试)
  • 错误推测(强调的是一种经验,经常出现的错误)
  • 因果图
    2.白盒测试(根据程序结构模块进行测试)
  • 基本路径测试
  • 循环覆盖测试
  • 逻辑覆盖测试(语句覆盖,判定覆盖,条件覆盖,条件判定覆盖,修正的条件判断覆盖,条件组合覆盖,点覆盖,边覆盖,路径覆盖(路劲覆盖最为全面))
软件测试——测试阶段
  1. 单元测试(测局部的功能,局部的数据结构,功能模块相关接口)
  2. 集成测试(测模块间的衔接)
  • 集成测试中的组装分为两种
  • 一次性组装 和 增量式组装
  1. 确认测试
  • 内部测试确认
  • Alpha测试
  • Beta测试
  • 验收测试 (用户参与,用户决定产品是否满意)
  1. 系统测试(主要涉及到压力,性能,可靠性等的测试)
  • 在性能测试中设计到以下三个方面
  • 负载测试
  • 强度测试
  • 容量测试

单元测试和集成测试的先后关系可以确定,先做单元测试再做集成测试,但确认测试和系统测试在不同资料上有不同的讲法,一般的软件项目而言,只用做到确认测试就结束了。而又有有的情况,系统测试在确认测试之前进行。

软件测试——McCabe复杂度

计算有向图G的环路复杂度公式为:V(G)= m - n + 2
其中V(G)是有向图G中的环路个数,m是G中的有向弧数,n是G中的节点数。
例如: A ->B -> C 的复杂度为 1

系统运行与维护

软件维护是生命周期的一个完整部分。可以将软件维护定义为需要提供软件支持的全部活动,这些活动包括在交付前完成的活动,以及交付后完成的活动。交付钱完成的活动包括交付后运行的计划和维护计划等,交付后的活动包括软件修改,培训,帮助资料等。

可维护性包括四个特征:
1.易分析性
2.易改变性 (松耦合的结构)
3.稳定性
4.易测试性

维护类型也分为四类:
1.改正性维护
2.适应性维护(运行环境的适应,例如操作环境,数据环境)
3.完善性维护
4.预防性维护

项目管理

九大知识领域——只需要了解其中的时间管理和风险管理

时间管理

甘特(Gantt)图 能明显的显示出进度的安排,从何时开始,从何时结束,但是不能明确的表现任务之间的逻辑关系。
PERT图 能清楚的表明任务执行所需的时间,以及任务之间的关系。(最晚开始时间可以用逆推得到)
软件设计师——软件工程_第6张图片
风险管理

风险是指"损失或伤害的可能性"。
风险管理分为项目风险,技术风险,商业风险。
特点:关心未来,关心变化,关心选择。

风险曝光度(Risk Exposure):计算方法是风险出现的概率乘以风险可能造成的损失。
例:假设正在开发的软件项目可能存在一个未被发现的错误,而这个错误出现的概率是0.5%,给公司造成的损失将是1000000元,那么这个错误的风险曝光度就应为1000000x0.5% =5000元。

你可能感兴趣的:(计算机基础,软件设计师,软件工程)