软件工程
一、软件
P1 综述 P2 软件定义介绍 P3 软件面临问题介绍 P4 什么是软件工程 P5 软件工程质量标准 P6 访谈 P7 编程过程与规范 P8 良好的编程实践 P9 Python集成开发环境简介 P10 代码审查 P11 代码性能优化 P12 结对编程与访谈介绍 P13 访谈(主讲人口才经验思维都很强) P14 单元测试 P15 黑盒测试方法 P16 基本概念 P17 代码覆盖标准 P18 基本路径测试 P19 单元测试工具 P20 软件开发过程 P21 软件开发模型 P22 敏捷开发方法 P23 邹欣经理自我介绍 P24 微软开发过程之一 P25 微软开发过程之二 P26 软件团队的重要性 P27 团队沟通 P28 软件项目计划 P29 软件项目估算 P30 敏捷开发之Scrum P31 用户故事方法 P32 Tower工具介绍(1) P33 Tower工具介绍(2) P34 软件配置管理 P35 软件配置管理工具git P36 需求工程师介绍与技能要求 P37 需求定义 P38 需求分类 P39 需求分类详解 P40 需求过程 P41 需求来源 P42 需求获取技术 P43 需求研讨会 P44 需求注意事项 P45 撰写需求文档 P46 情景驱动的需求方法-用例建模 P47 用力建模过程 P48 用例精讲 P49 常用软件建模工具 P50 “紫荆之声”抢票系统–用例建模 P51 面向对象建模分析 P52 CRC卡片分拣法 P53 CRC卡片分拣法(2) P54 面向对象设计 P55 开闭原则 P56 UML类图 P57 继承|泛化 P58 软件行为建模 P59 顺序图建模过程 P60 顺序图建模风格 P61 状态建模 P62 状态图 P63 状态图精讲 P64 软件体系结构概念 P65 软件设计原则 P66 软件体系结构风格(一) P67 软件体系结构风格(二) P68 事件风格 P69 软件设计过程 P70 Web系统架构设计 P71 数据库选择策略 P72 软件交互设计(讲师笑容挺甜) P73 软件交互设计–可用性 P74 软件交互设计–设计原理 P75 设计原理–KML效率模型 P76 设计原理–Fitts定律 P77 软件交互设计–设计过程 P78 软件测试概念 P79 软件测试类型 P80 软件功能测试 P81 软件性能测试 P82 软件部署与交付 P83 软件演化与维护
1. 软件的定义
软件=程序+数据+文档
2. 软件的本质特性
复杂性、一致性、可变性、不可见性
3. 软件开发活动
问题定义—需求开发—软件设计—软件构造—软件测试
4. 软件工程方法
面向过程—面向对象—面向构件—面向服务
5. 编程规范(Python)
-
注释:#解释为什么不是是什么 -
命名:
- 类名:驼峰风格且首字母大写 class BookShelf
- 变量名:下划线风格 bool_shelf
- 不要使用制表符tab进行缩进,要使用四个空格
- 每行只写一条语句
- 语句末尾不要加分号
-
语句:
-
import语句:
-
import次序:import Python内置模块-》第三方模块-》自己开发项目中的其他模块 这几种模块用空行分隔开来 -
一条import语句import一个模块 -
当从模块中import多个对象且超过一行时,使用如下方法断行 from module import(obj1,obj2,obj3,obj4,obj5,obj6) -
不要使用from module import*,除非import常量定义模块或者其他你确保不会出现命名空间冲突的模块
6. 模块化设计
- 单一职责:类或者函数应该只做一件事,并且做好这件事。只有一个引起变化的原因
单一职责not单一功能
7. Python的集成开发环境IDE-PyCharm
8. 代码审查
代码分析工具 PyLint
9. 代码性能优化
性能测试工具Profile 是Python语言内置的性能分析工具
import profile
def profileTest(){
}
if __name__ == "__main__":
profile.run("profileTest()")
- 改进算法,选择合适的数据结构
- 算法时间复杂度的排序依次是:
*c < log2N < n < n * Log2N < n^2 < n^3 < 2^n < 3^n < n!* - 对成员的查找访问等操作,字典(dictionary)要比列表(list)更快
- 集合set的并、交、差的操作比列表list的迭代要快
- 循环优化的基本原则:尽量减少循环过程中的计算量,在多重循环的时候尽量将内层的计算提到上一层
- 字符串的优化:Python的字符串对象是不可改变的。字符串连接的使用尽量使用join()而不是+。当对字符串可以使用正则表达式或者内置函数处理时,选择内置函数。
- 使用列表解析和生成器表达式:列表解析要比在循环中重新构建一个新的list更为有效,因此可以利用这一特性来提高运行效率。
10. 结对编程
11. 单元测试
p14
|