软件工程——学堂在线学习笔记一

一. 初识软件工程

1. 软件定义

软件是软件工程的研究对象,是软件工程的产品形态与客观存在

工程是将理论和知识应用于实践的科学

软件 = 程序 + 数据 + 文档

程序:自己编写的代码
数据:使程序能够操作的信息的数据结构
文档:描述程序的研制过程、方法和一些的资料

2. 软件具有的本质特性

软件具有复杂性、一致性、可变性、不可见性等内在特性,这些导致了软件开发困难。

开发过程难以控制,开发团队如同在焦油坑中挣扎的巨兽

3. 软件开发面临什么主要问题?

客户不满意

项目过程失控

风险与成本问题

无力管理团队

4. 怎么理解软件工程概念

(1). 发展历史

20世纪60年代末爆发软件危机

1968年,北大西洋公约召开国际会议,提出了软件工程

1968-1982年结构化开发方法

瀑布式软件生命周期模型成为典型

1983年-1995年面向对象开发方法

软件过程改进:CMM/ISO9000/SPICE质量标准体系

20世纪90年代至今敏捷开发方法

紧密团队协作
有效应对需求变化
快速提交高质量软件
迭代和增量开发过程

(2). 理解概念

工程:将理论和知识应用于实践的科学,以便经济有效解决问题

软件工程:将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,也就是将工程化应用到软件上

(3). 软件开发基本要素

1. 过程:

支持软件开发各个环节的控制和管理

软件开发活动

  • 问题定义
  • 需求开发
  • 软件设计
  • 软件构造
  • 软件测试
  • 软件维护
2. 方法:

完成软件开发的技术手段

软件工程方法

  • 面向服务
  • 面向构件
  • 面向对象
  • 面向过程
3. 工具:

让软件开发提供自动的软件环境支持

软件工程工具

在这里插入图片描述

(4). 软件开发的基本策略

  1. 软件复用

    不用光靠自己来制造轮子,用别人造好的轮子

     例如:库函数、模板、设计模式、组件、框架
    
  2. 分而治之

    复杂问题分成一些小的简单的模块,逐个解决

  3. 逐步演进

    遵循客观规律,进行迭代增量

  4. 优化折中

    不断的优化和折中成本和性能

(5). 软件工程学科发展的一些规范

  1. 抽象
  2. 软件建模方法
  3. 用户界面原型化
  4. 软件体系结构
  5. 软件过程
  6. 软件复用
  7. 度量
  8. 工具与集成环境

5. 软件开发遵循哪些工程化原则?

(1). 什么是好的软件?

1. 软件质量好

对用户来说:功能质量丰富
对开发人员:结构质量强
对投资者来说:过程质量按时交付

所以软件质量涵盖:软件过程、软件产品、产品效用

(2). 如何对一个产品判断其质量的好坏

从产品的质量维度来看:

  1. 性能
  2. 特色
  3. 可靠性
  4. 符合性
  5. 耐久性
  6. 可服务性
  7. 审美
  8. 感知

ISO9126质量模型来判断软件的好坏

  1. 功能性
  2. 可靠性
  3. 易用性
  4. 效率
  5. 可维护性
  6. 可移植性

(3). 如何提高一个软件产品的质量?

在这里插入图片描述

1. 高质量的软件开发之道:
  1. 高质量的设计
  2. 规范的编码
  3. 有效的测试

(4). 商业环境下的软件质量

因为企业是要赚钱的,所以不会一味地追求软件质量

企业会从:成本、质量、效率综合考虑

6. 软件企业人士怎么看待软件工程?

软件的质量和软件开发周期的平衡

人:
代码的极强的书写和阅读能力
极强的责任心,责任感
职业的道德
协同的能力

二. 编写高质量代码

编程是软件工程师的基本能力
编写优雅的代码是每一个程序员的不懈追求
编程是一门艺术,他能展示结构之美、构造之美、表达之美

1. 软件编程工作

包括:

  1. 编写代码
  2. 代码审查
  3. 单元测试
  4. 代码优化
  5. 系统构建
  6. 集成调试

在这里插入图片描述

2. 高质量的软件开发之道之规范的编码

在这里插入图片描述
说白了就是编写代码的规则

可以减少BUG,提高可读性,可移植性

参考Google的编程规范

3. Python编码规范举例

(1). 程序模板

在这里插入图片描述

(2). 注释

  • 以#开头

  • 字符串文档’’’ ‘’’

学会只编写够用的注释,过犹不及,重视质量而不是数量

在这里插入图片描述
pydoc库可以将代码自动生成文档

(3). 命名

好的名字一目了然

(4). 语句

缩进

不要分号

类名首字母大写

import语句要规范

4. 高质量的软件开发之道之高质量的设计

在这里插入图片描述

(1). 模块化设计

将大的程序按功能分为一系列小的模块

(2). 面向抽象编程

(3). 错误与异常处理

三. 单元测试

1. 高质量的软件开发之道之有效的测试

对软件的最小可测试单元进行检查和验证

2. 单元测试内容

在这里插入图片描述

3. 单元测试原则

  1. 快速的
  2. 独立的
  3. 可重复的
  4. 自我验证的
  5. 及时的

4. 单元测试过程

在这里插入图片描述

5. 衡量测试质量的指标

(1). 测试通过率

(2). 测试覆盖率

1. 概念

在这里插入图片描述

(3). 代码覆盖率

在这里插入图片描述

6. 单元测试方法

在这里插入图片描述

(1). 分类一

1. 静态测试

人工分析

2. 动态测试

动态分析

(2). 分类二

1. 黑盒测试(Black Box Testing)

又叫功能测试

将测试对象看做一个黑盒子,完全不考虑程序内部的结构和特性,只根据需求规格说明书,检查功能是否符合

在这里插入图片描述

2. 白盒测试

又叫结构测试

把测试对象看做一个透明的盒子,允许测试人员利用内部的结构和信息,设计或选择测试用例,对所有逻辑路径进行测试
拆开零件,查看每一个部分

白盒测试技术

  • 基于控制流测试

    控制流图
    在这里插入图片描述
    控制流测试过程
    在这里插入图片描述

  • 基本路径测试

    在这里插入图片描述

  • 循环测试
    嵌套循环、串接循环、Z路径覆盖下的循环测试

7. 单元测试的工具

在这里插入图片描述

(1). 单元测试之Unit

好处:

  • 单个函数、单个类、几个功能相关类测试
  • 纯函数测试,接口级测试

(2). 单元测试之Mock

解决复杂场景的测试

8. 测试用例

(1). 重要性

在这里插入图片描述

(2). 概念

为了一个特定的目标设计的特定输入、执行条件、预期结果

目的:测试路径是否正确

包括:测试用例值、期望结果、前缀值、后缀值

(3). 设计要求

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值