软件工程@产品读书笔记

笔记 | 高级软件工程 & 导论

2018-05-07  本文已影响92人  Kofe_

序言

在软工系列课程上,老师常提及的一条等式 软件 = 程序 + 软件工程 ( 或 软件 = 程序 + 文档),即一般情况讨论,一款软件产品的诞生之际总是伴随着一系列的软件过程。

那么如何充分理解软件工程 (过程)?从本书作者理念出发,我所理解的即应该时刻对软件产品持有 生命周期 的思维模式,将 需求、建模、设计、实现、测试、维护 等工程阶段联系起来,以自身代入案例环境中,去模拟开展软件过程的一系列活动,而非割裂。而这样的动态过程中,相对枯燥地学习理论、方法,则更像是问题所需、问题导向的理论应用过程。

当然,软件工程作为一门工程学科,学习过程的最大收获可以说是对 项目思维模式 的掌握。譬如,我们可以抛开软件产品的范畴,谈谈现实生活的实例:假若你需要在一定时限内掌握一门新知识、任务,则我们的做法可以从调研、计划、布局、实施,直至验收,即类似的过程可复用软件工程的方法。

最后,需要声明的:学习软件工程的过程中,无可避免地将反映本人的一些观点、倾向,当然这也反映该学科需要 多沟通 的特点,若有不恰当、错误之处,欢迎大伙出建议、斧正。

零 总览

壹 软件过程

软件过程模型

瀑布模型

图1-1 瀑布模型

增量式开发

图1-2 增量式开发

面向复用的软件工程

基于复用开发的一般过程模型如图 1-3 所示。初始需求描述阶段、有效性验证阶段与其他过程差不多,面向复用过程的中间阶段是不同的。

图1-3 面向复用的软件工程

过程活动

软件描述

图1-4 需求工程过程

软件设计和实现

软件有效性验证

软件进化/软件维护

软件工程不再是开发和维护两个独立的过程,而是一个进化过程。即软件在其生命内不断随着需求的变更而变更的进化式过程。

图1-5 系统进化

应对变更

原型构造

增量式交付

Boehm 的螺旋模型

Rational 统一过程

贰 敏捷软件开发

开始敏捷开发篇章前,引入一有趣的例子。Jazz Band 模式,跟 “敏捷的开发模式” 类似,同样也可以产生优秀的作品。( 演奏中,Miles Davis 先用小号吹出主题 ( 类比为架构师 ),然之后到一旁抽烟。曲目交由其他人员即兴发挥。最后, Miles Davis 加入演奏,回应主题 )。

感兴趣的可以观看视频:Miles Davis So What


敏捷方法

计划驱动开发和敏捷开发

计划驱动和敏捷描述如图 2-1 所示。

图 2-1 计划驱动和敏捷描述

极限编程 (XP)

图 2-2 极限编程的版本循环

极限编程中的测试

结对编程

结对编程是有一些质量效益,但却不足以抵消它的开销。但信息共享在结对编程是很重要的,因为当有团队成员离开时,它降低了项目风险。

敏捷项目管理

可扩展的敏捷方法

叁 需求工程

功能需求与非功能需求

软件需求文档

<center>表 3-1 需求文档结构</center>

章节 描述
绪言 定义文档的读者对象,说明版本的修正历史,包括新版本为什么要创建,每个版本间的变更内容的概要
引言 描述为什么需要该系统,简要描述系统的功能,解释系统是如何与其他系统协同工作的。描述该系统在机构总体业务目标和战略目标中的位置和作用
术语 定义文档中的技术术语和词汇。假设文档读者是不具有专业知识和经验的人
用户需求定义 这一部分要描述系统应该提供的服务以及非功能系统需求,该描述可以使用自然语言、图表或者其他各种客户能理解的标记系统。产品和过程必须遵循的标准也要在此定义
系统体系结构 这一部分要对待建系统给出体系结构框架,该体系结构要给出功能在各个模块中的分布。能被复用的结构中组件要用醒目方式示意出来
系统需求描述 这一部分要对功能和非功能需求进行详细描述。如有必要,对非功能需求要再进一步描述,例如定义与其他系统间的接口
系统模型 这一部分要提出一个或多个系统模型,以表达系统组件、系统以及系统环境之间的关系。这些模型可以是对象模型、数据流模型和语义数据模型
系统进化 这一部分要描述系统基于的基本设想和定位以及硬件和用户需求改变时所要做的改变。这部分对系统设计人员来说是有用的,因为这有助于他们避免一些设计决策,这些决策可能会限制未来系统的变更
附录 这一部分要提供与开发的应用有关的详细、专门的信息。该附录的例子是硬件和数据库的描述,硬件需求定义了系统最小和最优配置,数据库需求定义了系统所用的数据的逻辑结构和数据之间的关系
索引 可以包括文档的几个索引。除了标准的字母顺序索引外,还可以有图标索引、功能索引等

需求描述

自然语言描述

结构化描述

<center>表 3-2 胰岛素泵需求的结构化描述</center>

项目名称 胰岛素泵/控制软件/SRS/3.3.2
功能 计算胰岛素剂量;安全的胰岛素水平
描述 计算所要传输的胰岛素剂量,这是在当前度量的血糖水平处于 3-7 个单位之间这样正常范围之内时的胰岛素计算
输入 当前血糖读数 (r2),先前的两个读数 (r0, r1)
来源 来自传感器的当前血糖读数。其他读数来自内存
输出 CompDose:所要传输的胰岛素剂量
目的地 主控制循环
行动 如果血糖水平是稳定的或往下掉或是上升但速率下降,则 CompDose 为 0。若血糖的水平是在上升且上升速率也上升,那么 CompDose 的计算方法是求当前血糖水平和先前血糖水平,再除以 4 并取整。若取整的结果为 0,那么 CompDose 就被设置成可以传输的最小剂量
需求 两个先前的读数,这样血糖变化速率就可以计算出来了
前置条件 胰岛素池容纳至少是单个传输剂量的最大值
后置条件 r0 被 r1 替换,然后 r1 被 r2 替换
副作用

需求工程过程

图 3-2 需求工程过程的螺旋模型

需求导出和分析过程

图 3-3 需求分析的深入实际方法和原型法

需求有效性验证

需求管理

图 3-4 需求进化过程

需求管理规划

需求变更管理

肆 系统建模

上下文模型

交互模型

用例建模

图 4-2 用例图 图 4-3 时序图

结构模型

课本第 6、18、19 章讲述软件体系结构的不同方面和软件体系结构建模。

类图

泛化

图 4-6 泛化关系

聚合

图 4-7 聚合关系

依赖

如图 4-8 所示,展示了依赖关系。

图 4-8 依赖关系

行为模型

数据驱动的建模

事件驱动模型

图 4-9 状态图

模型驱动工程

模型驱动体系结构

图 4-10 复合平台特定模型

可执行 UML:xUML

上一篇 下一篇

猜你喜欢

热点阅读