软件工程学习笔记

 

第一章 初识软件工程、

1.1 软件的本质特性

  •   复杂性:数量多、调用负责
  •   一致性: 不能独立存在,需要一定的环境,遵从人为的惯例
  •   可变性:软件生命周期中不断升级改版

  • 不可见性:软件是一种看不见摸不着的逻辑实体,看以看到源码,但源码不是软件本身,软件以机器码的形式运行

“软件人员太像“皇帝的新衣”故事中的裁缝了。当我来检查软件开发工作时,所得到的回答好象对我说:我们正忙于编织这件带有魔法的织物。只要等一会儿,你就会看到这件织物是及其美丽的。但是我什么也看不到,什么也摸不到,也说不出任何一个有关的数字,没有任何办法得到一些信息说明事情确实进行得非常顺利,而且我已经知道许多人最终已经编织了一大堆昂贵的废物⽽而离去,还有不少人最终什么也没有做出来”

 

1.2 软件开发面临的问题

 

1.3 基本概念

 

 

1.4 软件质量实现

软件质量对于用户、开发者、投资者的角度不相同

产品质量的维度:

David Garvin 模型:

 

软件质量需要依靠设计、编码和测试共同实现。

在商业环境下谈质量,软件质量过低或过低都不利于企业长远发展,而是应当恰好让大多数用户满意。当为提高质量而付出的代价高于商业价值时,产品就没有价值了。

 

 

第二章 编写高质量代码

2.1 编写过程和规范

    谷歌公司的代码规范: https://github.com/google/styleguide

    注释不是越多越好,过犹不及。因体现功能,而不是描述语句含义。

    维护代码时应当顺带维护周围的注释。

    变量命名应遵守规范,容忍历史代码和第三方代码的风格,但在新代码中不应该延续这些风格。

    (python 中 import this模块输出了几条规则,但代码本身完全违背了这些规则。)

    

2.2 良好的编程实践

    如何向开源社区提问问题:  https://github.com/seajs/seajs/issues/545

  • 模块化程序设计:按照业务逻辑水平分、按照系统结构垂直分、基于易变和稳定分、基于单一职责(类或函数制作一件事,且做好一件事;单一职责是指被单一变化触发)

 

2.3 集成环境

    pycharm(待商榷,我喜欢用文本编辑器或者vs code)

 

2.4 静态代码检查

静态检查内容:

利用 pylint http://www.pylint.org/  可以做python静态检查

 

2.5 代码性能分析

根据 80/20 原则,实现程序的重构、优化、扩展以及文档相关的事情通常需要消耗80% 的工作量。

找瓶颈,关注算法和数据结构的效率。

代码优化的步骤:

profile是python内置的性能分析工具。一行代码就可以使用 

import profile; profile.run("入口函数名")

 

2.6 结队编程

    驾驶员操作键盘编写代码,领航员负责提醒和领航。

    两人互换角色,口渴指数是考核交流程度的标准

    

第3章 单元测试

3.1 单元测试概述

不同阶段的错误率和修复成本

单元测试(uint testing) 是对软件中最小可测试单元进行检查和验证。

 

单元测试的原则:快速的、独立的、可重复的、自我验证的(通过布尔输出提示是否通过)、及时的(及时编写单元测试)。

 

单元测试衡量指标: 1) 测试通过率: 测试用例的通过率应该达到100%  2)测试覆盖率:代码覆盖率70%-80%左右即可

 

测试方法: 

静态测试:通过人工分析或程序正确性证明;

动态测试:通过动态分析和程序测试等方法

黑盒测试:又称功能测试,不考虑程序内部逻辑和特性,只根据程序需求说明书设计测试用例

白盒测试:又称结构测试,允许通过程序内部逻辑设计测试用例。

 

单元模块往往依赖下层模块,由上层模块调用。为了将测试模块隔离,需要开发桩模块(调用测试模块并给出测试用例的结果)和驱动模块(模拟下层的模块)

 

单元测试之xUint:

单元测试之Mock:

mock测试:是在测试过程中对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象(即Mock对象)来创建以便测试的方法。

 

3.2 黑盒测试

    测试用例保护:测试用例值、期望结果、前缀值(软件在接受测试用例之前的必要输入)、后缀值(测试用例被发送之后,需要被发送到软件的值)

    测试用例的设计:1)具有代表性和典型性、2)寻求系统设计的弱点、3)考虑异常输入、4)考虑用户实际使用场景

    黑盒测试技术:

3.3 白盒测试

    白盒测试将测试对象看成透明盒子,允许测试人员获知内部的逻辑结构和有关信息,据此设计和选择测试用例。

    基于控制流的白盒测试技术(控制流图,control flow graph)。

 

3.4 单元测试工具

    python中的unittest、mock

 

第四章软件开发过程

    4.1过程

    过程是一组将输入转化为输出的相互关联或相互作用的活动。确定过程、监视测量过程(前中后)

    过程方法: 管理过程、实现过程、支持过程。

    软件开发活动的过程:问题定义、需求开发、软件设计、软件构造、软件测试。

 

    4.2 软件过程模型

  • 瀑布模型:1970提出的,把开发活动看成是一系列界限分明的独立阶段(需求定义分析、设计、构造、测试、运行维护)。开发过程难以响应用户需求,早期错误在测试时才能被发现。因此只适用于需求相对稳定的软件,目前已经不再使用。
  • 原型化模型:一个部分开发的产品,用于加强对系统的理解,可以是纸上的模拟界面。
  • 迭代式开发:将描述、开发和验证等不同活动交织在一起,开发过程中建立一系列版本,将系统一部分一部分地交付。
  • 可转换模型:利用自动化手段,通过一系列转换将需求规格转化为一个可交付使用的系统。适用于有限状态的嵌入式系统。

    

    4.3 敏捷开发

    背景:需求变化和快速交付的挑战

 

 

    敏捷开发 借助增量式和迭代式的开发过程

 

    敏捷开发有两种主流模式:Scrum 、XP(极限编程)

    Scrum意为橄榄球中的争球。 Scrum迭代开发将整个软件生命周期分为多个小的迭代(2-4周),每一次迭代就是一个小的瀑布模型。

 

 

 

 

附录:UML类图

http://www.uml.org.cn/oobject/201211231.asp

三类关系:

关联  在一个类中实例化另一个类。包括关联、聚合、组合

依赖  体现在某个类的方法使用另一个类的对象作为参数

泛化 即从基类继承

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值