目录

软件生命周期

开发过程

开发模型

瀑布模型

增量模型

分析阶段

面向过程分析

面向对象分析

设计阶段

面向过程设计

面向对象设计

实现阶段

语言选择

软件质量

测试阶段

白盒测试

黑盒测试

文档

用户文档

系统文档

技术文档


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

研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。

软件生命周期

软件生命周期是软件工程的一个基础概念,软件周期性地重复一些阶段。软件工程采用的生存周期方法就是从时间角度对软件开发的维护的复杂问题进行分解,把软件生存的漫长周期依次划分为若干阶段,每个阶段有相对独立的任务,然后逐步完成每个阶段的任务。

开发过程

开发过程只是软件生命周期中的三个过程的其中之一,它是上图中处于循环流程之外。开发过程包括4个阶段:分析、设计、实现和测试。开发过程由多种模型,最常见的两种:瀑布模型和增量模型。

开发模型

瀑布模型

这种模型中,开发过程只是一个方向的流动,这意味着前一个阶段不结束,后一个阶段不开始。

优点:在下一个阶段开始前,之前的每一个阶段都已完成。

缺点:难以定位问题:如果过程的一部分有问题,必须检查整个过程。

增量模型

软件的开发要经历一系列步骤。开发者首先完成帧个系统的一个简化版本,这个版本表示了帧个系统,但不包括具体的细节。

在后续的版本中,加入更过的细节,而这次还没有完成,然后再次测试系统。如果有问题,开发者知道问题出于新功能。知道现有系统工作正确后,在增加新功能,现在的开发模型基本上都是增量模型,边开发,边测试。

分析阶段

开发过程开始于分析阶段,这个阶段生成规格说明文档,这个文档说明了软件要做什么,没有说明如何去做。分析阶段使用的下面两种方法依赖于实现阶段使用的是过程语言还是面向对象语言。

面向过程分析

针对实现使用的是面向过程语言,也称为结构化分析或经典分析,这种情况下的规格说明可以使用多种建模工具:

1、数据流图:显示了系统中数据的流动。下图显示了一个小旅馆中预定系统的简单版本。

2、实体关系图:ER模型,实体--联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。实体关系图表示在信息系统中概念模型的数据存储。数据库设计中使用ER模型,在此看一个简单的例子,学生考试成绩关系图:图中通过三张实体表(实体:学生、课程、教师),另外建两张表把它们联系起来(联系:教师讲授课程的讲授表,学生选课的选修表)。

3、状态图

通常用于当系统中的实体在响应事件时状态的改变。下图是老式电梯的状态,此种电梯很简单:只有三种状态:上行,下行,停止。只有停止时才能接受请求。如果请求的楼层和当前的一样,则保持停止状态,否则要么上行,要么下行,直到停止。

面向对象分析

针对实现使用的是面向对象语言,这种情况下的规格说明可以使用多种建模工具:

1、用例图

用例图给出了系统的用户视图:显示了用户和系统的交互。

使用4中组件:系统、用例、动作者、关系。系统(用矩形表示)执行功能。系统中的动作(用原圆角矩形表示)由用例显示,动作者是使用系统的某人或某事

老式电梯系统的用例图,使用者可以按电梯按钮和电梯内的楼层按钮

 2、类图

老式电梯系统中涉及到电梯按钮两种实体类,这里按钮分为了两种,可以分别创建继承自按钮类的电梯按钮类楼层按钮类,如图:

3、状态图

类图完成后,就可以为类图中的每个类型准备状态图。同面向对象分析中的状态图作用一致,对于上面的类图会有四个状态,电梯开,电梯关,电梯上,电梯下。

设计阶段

在设计阶段定义系统如何完成分析阶段所定义的需求,系统的许哦呦的组件部分都被定义。

面向过程设计

既要设计过程,也要设计数据。下面是一类注重过程的设计方法,整个系统被分解成一组过程或模块。

1、结构图

说明模块间关系的常用工具是结构图。例,如图:

2、模块化

意味着将大项目分解成较小的相互通信的部分,以便能够容易理解和处理,在分解成模块时主要关心两点:耦合和内聚

  • 耦合:对两个模块相互绑定紧密程度的度量。软件系统中模块间的耦合必须最小化。越紧耦合度的模块,它们的独立性有差,所以需要松散耦合,理由见下:

    1. 松散耦合的模块更可能被重用;
    2. 松散耦合的模块不容易在相关模块中产生错误;
    3. 当系统需要修改时,松散耦合的模块允许我们只修改需要修改的模块,而不会影响到不需要改变的模块。
  • 内聚:是程序中处理过程相关紧密程度的度量,软件系统中模块间的内聚必须最大化。

面向对象设计

通过详细描述类的细节来继续,在设计阶段列出这些类的属性和方法的细节

实现阶段

为面向过程设计中的模块编写程序或者编写程序单元,实现面向对象设计中的类。

语言选择

选择合适的语言,通常面向过程的选择C,面向对象的C++、Java等。

软件质量

能够划分成三个广义的度量:可操作性、可维护性、可移植性。见下图展开:

1、可操作性

  • 准确性:不准确的系统比没有系统更能糟糕。
  • 高效性:主观术语,在一些实例中,用户将制定性能指标。
  • 可靠性:综合了其他各种因素。
  • 安全性:以未经授权的人得到系统数据的难易程度为参照。
  • 及时性:及时传递输出,在线系统及时响应用户请求。
  • 适用性:主观术语。

2、可维护性

以保持系统正常运行并及时更新为参照。

  • 可变性是一个主观因素,现在有很多软件度量工具来估算程序的复杂性和结构。
  • 可修正性的一种度量时恢复正常的平均时间。
  • 适应性是接受用户经常要求在系统中进行变动的难易程度。
  • 可测试性是测试工程是测试的难易度。

3、可移植性

把数据或系统从一个平台移动到另一个平台并重用代码的能力。

  • 代码重用,需要封装,松散耦合。
  • 互用性是发送数据给其他系统的能力。
  • 可移植性是一种把软件从一个硬件平台迁移到另一个软件平台的能力。

测试阶段

目标是发现错误,这需要良好的测试策略能发现更多的错误:有两种测试方式:白盒和黑盒。

白盒测试

是基于知道软件内部结构的,测试的目标是检查软件所有部分是否全部设计出来。白盒测试由软件工程师或一个专门的团队来完成,需要满足下面4条标准:

  • 每个模块的所有独立的路径至少被测试过一次。
  • 所有的判断结构(两路或多路的)每个分支都被测试。
  • 每个循环被测试。
  • 所有的数据结构都被测试。

有下面两种测试方法:

  1. 基本路径测试:这种方法创建一组测试用例,这些用例执行软件中的每条语句至少一次

  2. 控制结构测试:包含基本路径测试。包括条件测试、数据流测试、循环测试。

黑盒测试

不知程序的内部也不知道程序是怎样工作的情况下测试程序。按照软件的应该完成的功能来测试软件。如它的输入和输出。

  1. 穷尽测试:最好的黑盒测试方法就是用输入域中的所有可能的值去测试软件。但是在复杂的软件中,输入域非常巨大,这样常常不现实。
  2. 随机测试:选择输入域的值的子集来测试,子集选择的方式是非常的重要,在这种情况下,随机数生成器是非常有用的。
  3. 边界值测试:当遇到边界值时,错误经常发生。如果模块在边界值出错,那有可能就是模块代码中的有些条件边界值取的有问题,如 x > 100 被写成了 x >= 100。

文档

软件的正确使用和有效维护离不开文档,通常软件有三种独立的文档:用户文档、系统文档、技术文档。注意文档是一个持续性的过程。只有当软件包过时后,编写文档才停止。

用户文档

就是用户手册,告诉用户如何一步步地使用软件包,通常包含一个教程指导用户熟悉软件包的各项特性。手册应该面向新手和专业用户。

系统文档

系统文档定义软件本身。目的是为了让原始开发人员之外的能够维护和修改软件包。系统文档在系统开发的所有4个阶段都应该存在。

在分析阶段,应该仔细地用文档记录收集到的信息,同时应该定义信息的来源。需求和选用的方法必须用基于这些信息的推论来清楚表述。包括(软件规格说明书,系统测试需要的标准文档对所开发软件的功能、性能、用户界面及运行环境等作出详细的说明。它是在用户与开发人员双方对软件需求取得共同理解并达成协议的条件下编写的,也是实施开发工作的基础。该说明书应给出数据逻辑和数据采集的各项要求,为生成和维护系统数据文件做好准备。

在设计阶段,最终版本中用到的工具必须记录在文档中。例如,如果结构图修改了多次,那么最终版本要用完整的注释记录在案。概要设计说明书:该说明书是概要设计阶段的工作成果,它应说明功能分配、模块划分、程序的总体结构、输入输出以及接口设计、运行设计、数据结构设计和出错处理设计等,为详细设计提供基础。详细设计说明书:着重描述每一模块是怎样实现的,包括实现算法、逻辑流程等。

在实现阶段,代码的每个模块都应记录在案。代码应该使用注释和描述头详细地形成自文档。

在测试阶段,开发人员必须仔细形成测试阶段的文档。对最终产品使用的每种测试,连同它的测试结果一起记录。测试分析报告 测试工作完成以后,应提交测试计划执行情况的说明,对测试结果加以分 析,并提出测试的结论意见。

技术文档

技术文档描述了软件系统的安装和服务。安装文档描述了软件如何安装,服务文档描述了系统应该如何维护和更新。


凡是过往,即为序章

计导 第 10 章 软件工程相关推荐

  1. 计导 第 16 章 安全

    目录 安全概论 安全目标 攻击 威胁机密性的攻击 威胁完整性的攻击 威胁可用性的攻击 服务和技术 密码术 隐写术 机密性 对称密钥密码 非对称密钥密码 其他安全服务 消息完整性,消息验证.数字签名 密 ...

  2. 计导 第 6 章 计算机网络

    目录 网络分类 TCP/IP协议族 应用层 传输层 传输层地址(端口号) 多路复用和解多路复用 拥塞控制 流量控制(确认系统) 差错控制 传输层协议 SCTP 流控制传输协议,是一个新的协议,结合了U ...

  3. 复现经典:《统计学习方法》第 10 章 隐马尔可夫模型

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

  4. 《软件项目管理(第二版)》第 10 章——项目收尾 重点部分总结

    文章目录 前言 一.讨论 二.简答题 总结 前言 学习了项目的开发与发布之后,我们就可以单独对一个项目进行开发了,但是在企业中开发中,除了编码之外,还需要项目管理.团队协作开发等,这就是软件项目管理板 ...

  5. 第8,9,10章读后感

    第8章讲的是需求分析,学习到了软件需求的类型.利益的相关者,获取用户需求的常用方法和步骤,竞争性需求的分析的框架和NABCD,四象限方法,项目计划的和计的技术. 第9章主要讲的是项目经理,学习到了团队 ...

  6. 终章 - 软件工程实践总结作业

    终章 - 软件工程实践总结作业 一.请回望暑假时的第一次作业,你对于软件工程课程的想象 当时正值酷暑,快开学了,在家里也是无所事事,就花费了一些心思写下了那份第一次作业.现在看来,当时的想象还是蛮符合 ...

  7. 《学习OpenCV3》第10章 滤波与卷积

    <学习OpenCV3>第10章 滤波与卷积 1. 预备知识 1.1 滤波.核和卷积 1.2 边界外推和边界处理 1.2.1 自定义边框 1.2.2 自定义外推 2. 阈值化操作 2.1 t ...

  8. 【计导非课系列】绪言——什么是“计导非课”系列?

    关于"计导非课"系列 What does it mean? 计算机导论是第一门进入大学开始学习并且最早结束的一门课程,虽说很快就结束了,考试也是近在咫尺,但是计算机导论远远不只是一 ...

  9. 【计导非课系列】 第五节 二进制 进制计算 编码

    [计导非课系列] 第五节 二进制 进制计算 编码 对于计算机来说,数字只有两个--0和1. 数据对于计算机来说是相当重要的,而电路的通断两种状态决定了计算机只能通过1和0来进行一切事情的处理.所以,我 ...

最新文章

  1. iphone应用程序结构
  2. facebook对话链接_Facebook已开源其最新的聊天机器人Blender
  3. 为什么古诗我们能读懂,白话诗却一头雾水呢?
  4. 黑马程序员 Python学习笔记之 判断(if)语句
  5. 坐标上海,我看见这群开发者用热爱改变世界
  6. 多文件自平衡云传输(二)资源接收 断点续传篇 —————— 开开开山怪
  7. Java程序员都是青春饭吗?
  8. 如何制作自己的图片数据集-基于tensorflow
  9. 系统栈与用户栈 以及 栈的内部实现
  10. 干货!常见waf识别
  11. 断言Assertion
  12. linux启动服务命令
  13. 山大泰山学堂笔试面试经验
  14. 百度编辑器上传视频配置
  15. 关于Java开发环境
  16. 大数据进行时:聚光灯后的四大推手
  17. 单片机反相器_基于AT89S52单片机的新型智能家居安防系统
  18. css利用什么xhtml标记构建网页布局,css是利用什么XHTML标记构建网页布局
  19. SVD分解——潜在语义分析LSA(I)——概率性潜在语义分析PLSA(I)
  20. 豆粕、白糖期货涨跌幅的可视化分析

热门文章

  1. 经济学基础(本)【3】
  2. 12.4 jason格式
  3. linux 只允许运行指定程序,我命由我不由天!如何只让程序运行指定时间?
  4. 苹果手机免密支付怎么取消_苹果取消配件,废旧手机配件真的没用了?
  5. js仿新浪微博消息发布功能
  6. 下一代安全管理平台NextSOC
  7. 一篇就可以搞定——ADB连接多台设备问题
  8. Java工程师学习指南(入门篇)
  9. ENC28J60学习笔记——第3部分
  10. 关于.net framework4.0安装失败,“安装时发生严重错误”