第五章 公安信息化与大数据应用 软件技术基础
1,软件工程概述
软件是软件工程的研究对象,也是软件工程的产品形态与客观存在。
工程是将理论和知识应用于实践的科学,其目的是经济有效地解决实际问题
软件工程是为了解决开发成本效益和软件质量的问题而产生的,倡导以工程的原理,原则和方法进行软件的开发,用系统的,可控的,有效的方式构建高质量的软件产品
1.1软件的定义
软件=程序+数据+文档
程序:计算机可以接受的一系列指令,运行时可以提供所要求的功能和性能
数据:使得程序能够适当地操作信息的数据结构
文档:描述程序的研制过程,方法和使用的图文资料。
1.2软件的本质特性
软件具有复杂性,一致性,可变性和不可见性等固有的内在特性,这是造成软件开发困难的根本原因。
复杂性
一致性
可变性
人们总是认为软件是容易修改的,但忽视了修改带来的副作用
不断的修改最终导致软件的退化,总而结束其生命周期
不可见性
1.3软件工程的产生和发展
软件工程诞生
1969年,北大西洋公约组织(NATO)召开国际会议,提出’软件工程‘概念和术语
1.4
#工程的含义
工程是将理论和知识应用于实践的科学,以便经济有效地解决问题
*大规模地设计与建造
*复杂问题与目标分解
*团队协作与过程控制
#软件工程的基本概念
软件工程是将系统性的,规范化的,可定量的方法应用于软件的开发,运行和维护,即工程化应用到软件上,并对其中所属的方法进行研究。
软甲工程的目标——创造’足够好‘的软件
*较低的开发成本
*按时完成开发任务并及时交付
*实现客户要求的功能
*具有良好性能,可靠性,可扩展性,可移植性等
*软件维护费用低
#软件工程的基本元素
过程:支持软件开发各个环节的控制和管理
方法:完成软件开发任务的技术手段
工具:为软件开发方法提供自动的或半自动的软件支撑环境
目标
2.编写高质量代码
2.1编程过程与规范
软件编码规范是与特定语言相关的描写如何编写代码的规则结合。
目的
-提高编码质量,避免不必要的程序错误
-增强程序代码的可读性,可重用性和可移植性
现实
-软件全生命周期的70%成本是维护
-软件在其生命周期中很少由原编写人员进行维护
Python编程规范:程序模板
学会只编写够用的注释,过犹不及,重视质量而不是数量
-好的注释解释为什么,而不是怎么样
-不要在注释中重复描述代码
-当自己在编写密密麻麻的注释来解释代码,需要停下来看是否存在更大的问题
-想一想在注释中写什么,不要不懂脑筋就输入
-写完注释之后要在代码的上下文回顾一下,它们是否包含正确的信息?
-当修改代码时,维护代码周围的所有注释
Python编程规范:命名
好的名字一目了然,不需要读者去猜,甚至不需要注释
-Python库的命名约定有点混乱,因此很难使之变得完全一致,不过还是有公认的命名规范。
-新的模块和包(包括第三方的框架)必须符合这些标准,但对已有的库存在不同风格的,保持内部的一致性是首选的。
不需要编写需要外部文档支持的代码,这样的代码是脆弱的,要确保你的代码本身读起来就很清晰。
编写自文档化的代码
-唯一能完整并正确地描述代码地文档是代码本身
-编写可以阅读的代码,其本身简单易懂
3.1单元测试概述
单元测试是对软件中的最小可测试单元进行检查和验证。
单元测试原则
快速的-单元测试应能快速运行,如果运行缓慢,就不会愿意频繁运行它
黑盒测试(Black Box Testing)
白盒测试(White Box Testing)
4.软件开发过程
瀑布模型-将基本的开发活动看成是一系列界限分明的独立阶段,这是一种计划驱动的软件过程,有利于规范软件开发活动
原型化模型-原型是一个部分开发的产品,用于加强对系统的理解,有助于明确需求和选择可行的设计策略
迭代式开发-将描述,开发和验证等不同活动交织在一起,在开发过程中建立一系列版本,将系统一部分一部分地逐步交付
可转换模型-利用自动化的手段,通过一系列转换将需求规格说明转化为一个可交付使用的系统
5.程序设计语言
1.程序设计语言的分类
(1)机器语言(面向机器)
机器语言是一种用二进制‘0’和‘1’表示计算机各种操作的程序设计语言。一条机器指令能够控制计算机执行一种操作
计算机能够直接理解和执行使用机器语言编写的程序,执行速度快,占用内存少;但难于记忆,编程困难,可读性差,容易出错,可移植性差
(2)汇编语言(面向机器)
为了克服机器语言的缺点,人们采用与代码指令实际含义相近的英文缩写词,字母和数字等符号来取代指令代码,于是产生了汇编语言。
汇编语言是一种用助记符来表示各个基本操作的程序设计语言。如用ADD表示加法操作,SUB表示减法操作等。
汇编语言的出现,大大减少了程序编写,阅读,修改,维护等方面的工作量,但汇编语言也是一种面向机器的语言,计算机不能直接执行,通用性和可移植性差,必须经过汇编程序翻译成机器语言后才能在计算机上执行,需要程序元对计算机内部非常了解。
(3)高级语言(面向用户)
高级语言是向用户的,基本上独立于计算机种类和结构的语言。
其最大的优点是:形式上接近于算术语言和自然语言,概念上接近于人们通常使用的概念。高级语言的一个命令可以代替几条,几十条甚至几百条汇编语言的指令。因此,高级语言易学易用,通用性强,应用广泛。