「软件工程」 软件工程基础知识

Posted by Dawn-K's Blog on March 4, 2021

软件工程基础知识

软件开发模型

边做边改模型

没有规划一边做一边改. 容易陷入修改困难甚至无法修改的境地.

瀑布模型

将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动. 在瀑布模型中, 软件开发的各项活动严格按照线性方式进行.

缺点: 文档太多, 开发风险大, 用户只能在完全结束后才能看到. 早期的错误需要等到后期才能发现.

快速原型

快速原型模型的第一步是建造一个快速原型, 实现客户或未来的用户与系统的交互, 用户或客户对原型进行评价, 进一步细化待开发软件的需求. 有抛弃和附加两种对待原型的方式. 第一种多用于试验性的工程, 确定需求之后就丢弃原型. 第二种是原型逐步添加新功能, 最终发展成用户满意的系统.

增量模型

整个产品被分解成若干个构件, 开发人员逐个构件地交付产品. 客户可以不断看到开发的软件. 缺点: 新加入的部件不能破坏原有的结构. 需要对软件的整体有很好的的把握.

迭代模型

将软件开发视为一个逐步获取用户需求、完善软件产品的过程

螺旋模型

螺旋模型采用一种周期性的方法来进行系统开发, 在每个项目阶段使用瀑布模型法, 并引进了风险分析活动.

敏捷开发

敏捷开发的核心是迭代开发. 主观能动性优于既定流程和工具. 软件能够运行, 优于详尽的文档. 跟客户的密切协作. 能够响应变化.

测试模型

V模型

标注了测试过程中存在的不同类型的测试

缺陷: 没有明确说明早期的测试, 不能体现”尽早地和不断地进行软件测试”的原则.

W模型

开发是V, 测试也是与此并行的V. 也就是开发进行到某个阶段, 测试就紧接着跟上. 测试与开发是同步进行的, 从而有利于尽早的测试、发现问题 缺陷: 将开发过程看做线性, 不利于迭代.

X模型

X模型左边描述的是针对单独程序片段所进行的相互分离的编码和测试, 此后, 将进行频繁的交接, 通过集成最终合成为可执行的程序. 也就是将交接从点换成一个时间段.

H模型

软件测试是一个独立的流程, 贯穿产品的整个开发周期, 与其它流程并发进行. 只要某个测试达到准备就绪点, 测试执行活动就可以开展.

CMM

软件过程成熟度(Capability Maturity Model)是指某个具体软件过程被明确定义、管理、度量和控制的有效程度. 将软件过程的成熟度分为5个级别.

初始级

项目经常超出预算和不能按期完成

可重复级

组织的软件开发流程可以基于之前成功的例子, 项目处于项目管理系统的有效控制之下, 并能重复以前的成功.

已定义级

管理与工程都已经文档化, 标准化.

已管理级

软件性能和质量是优秀的且可预测的.

优化级

不断提高自身能力, 可持续改善软件过程.

好的项目需要什么

  • 好的需求
  • 技术与风险评估
  • 合适的开发计划
  • 良好的编码, 保证设计和实现是一致的.
  • 充分的测试

测试

单元测试

单元测试(unit testing), 是指对软件中的最小可测试单元进行检查和验证.

C语言中单元指一个函数, Java里单元指一个类, 图形化的软件中可以指一个窗口或一个菜单等

单元测试是在软件开发过程中要进行的最低级别的测试活动, 软件的独立单元将在与程序的其他部分相隔离的情况下进行测试.

集成测试

在单元测试的基础上, 将所有模块按照设计要求(如根据结构图)组装成为子系统或系统, 进行集成测试.