目录
1 软件工程
1.1 软件需求分析与定义
软件的需求必须是可以验证的,无法验证的需求没有意义,这也是目前很多公司推进测试参与设计的原因,避免有些需求实现之后发现无法测试,导致重做。
扩展,很多公司在前期设计时经常拉很多人如产品、开发、测试、运维开会,导致会议很多,很多程序员不喜欢开这样的会(准确的说是不喜欢白天开这样的会议,晚上自己实现代码),但是如果提高一点视觉,这样的会从公司层面来说是非常有必要,而且整体成本较低的一种模式,会议本身也是一种项目实施工作。
需求分析的目标:检测和解决需求之间的冲突,发现系统的边界,描述系统的需求。
1.2 软件设计、测试与维护
软件设计:根据软件需求,产生一个软件内部结构的描述,并将其作为软件构造的基础。通过软件设计,描述出软件架构及相关组件之间的接口;然后,进一步详细地描述组件,以便能构成这些组件。
通过软件设计得到要实现的各种不同模型,并确定最终方案。其可以划分为软件架构设计(也叫作高层设计)和软件详细设计两个阶段。
软件测试:为了评价和改进产品质量、识别产品的缺陷和问题而进行的活动。
测试不再只是一种仅在编码阶段完成后才开始的活动。现在的软件测试被认为是一种应该包括在整个开发和维护过程中的活动,它本身是实际产品构造的一个重要部分。 软件测试伴随开发和维护过程,通常可以在概念上划分为单元测试、集成测试和 系统测试3个阶段。
软件维护:将软件维护定义为需要提供软件支持的全部活动。这些活动包括在交 前完成的活动,以及交付后完成的活动。交付前要完成的活动包括交付后的运行计划 和维护计划等。交付后的活动包括软件修改、培训、帮助资料等。
软件维护有如下类型:
①更正性维护——更正交付后发现的错误;
②适应性维 护——使软件产品能够在变化后或变化中的环境中继续使用;
③完善性维护——改进交付后产品的性能和可维护性;
④预防性维护——在软件产品中的潜在错误成为实际错误前,检测并更正它们。
1.3 软件质量保证及质量评价
软件的质量包括:内部质量、外部质量和使用质量三部分(记住即可)
验证与确认的概念(CMMI中的概念,在翻译过程中导致有些难以理解)
验证过程:尝试确保活动的输出产品构造正确,即活动的输出产品满足活动的规范说明。
确认过程:则试图确保构造了正确的产品,即产品满足其特定的目的
1.4 软件配置管理
软件的配置管理活动包括:软件配置管理计划、软件配置标识、软件配置控制、软件配置状态记录、软件配置审计、软件发布管理与缴费等活动
扩展:在学校里搞代码开发时,往往不太重视软件的工程化特别是配置管理,但是在工作中软件的配置管理非常重要!配置管理计划、标识、版本发布未必要多么复杂,但是要有,特别是要实用、可控、可追溯,相信很多读者读经历过上线产品版本错误导致问题回溯的痛苦吧,特别是创业型公司对于代码和版本的控制更是重视。
1.5 软件过程管理
包括以下5个方面(与PMP非常类似,毕竟软件过程管理也是项目管理的一种)
- 项目启动与范围定义
- 项目规划
- 项目实施
- 项目监控与评审
- 项目收尾与关闭
1.6 软件复用
软件复用是指利用已有软件的各种有关知识构造新的软件,以缩减软件开发和维护的费用。复用是提高软件生产力和质量的一种重要技术。我们经常使用的开源框架例、标准库、中间件都是可复用技术的典型产品,早期的软件复用主要是代码级复用,被复用的知识专指程序,后来扩大到包括领 域知识、开发经验、设计决策、架构、需求、设计、 代码和文档等一切有关方面。
2 面向对象系统分析与设计
2.1 面向对象设计的基本概念
对象:对象由一组属性和对组属性进行的操作构成
对象的三个基本要素:对象标识、对象状态、对象行为
类:类是现实中实体的形式化描述,类将实体的属性和操作封装在一起。
类相当于产品的设计图,对象相当于产品
Car |
-type:String -color:String |
+run() |
抽象:通过特定的实例抽取共同特征以后形成概念的过程。抽象是一种单一化的描述,强调给出与应用相关的特性,抛弃不相关的特性。对象是现实世界中某个实体的抽象,类是一组对象的抽象。
封装:将相关的概念组成一个单元模块,并通过一个名称来引用它。面向对象封装是将数据和基于数据的操作封装成一个整体对象,对数据的访问或修改只能通过对象对外提供的接口进行。例如类面向对象语言中(如C++)的private成员变量,需要通过成员函数才能修改,这种思想对于提升软件的质量非常有帮助,是简单而伟大的软件开发思想。
继承:表示类之间的层次关系(父类与子类),这种关系使得某类对象可以继 承另外一类对象的特征,继承又可分为单继承和多继承。
多态:使得在多个类中可以定义同一个操作或属性名称,并在每个类中可以有 不同的体现。多态使得某个属性或操作在不同的时期可以表示不同类的对象特性。 如图所示,Rectangle和Circle都继承于Shape,对于Shape而言,会有getArea() 的操作。但Rectangle和Circle的getArea()方法的实现是完全不一样的,这就体现了多 态的特征。
接口:描述对操作规范的说明,其只说明操作应该做什么,并没有定义操作如何做。可以将接口理解成为类的一个特例,它规定了实现此接口的类的操作方法,把真正的实现细节交由实现该接口的类去完成。
接口实现了屏蔽内部干扰,实现接口的类后续内部升级,只要接口不变就不影响,相当于一块自留地
2.2统一建模语言与可视化建模
统一建模语言(Unified Modeling Language,UML)用于对软件进行可视化描述、 构造和建立软件系统的文档。需要注意的是,UML是一种可视化的建模语言,而不是编程语言。这个在选择题的选项中经常出现。
在UML中,使用各种不同的符号元素画成图形,用以表示系统的结构和行为。 UML图提供了对系统进行建模的描述方式,主要包括:
- 用例图(Use Case Diagram)
- 类图(Class Diagram)
- 对象图(Object Diagram)
- 组件图(Component Diagram)
- 部署图(Deployment Diagram)
- 状态图(State Diagram)
- 序列图(Sequence Diagram)
- 协作图(Collaboration Diagram)
- 活动图(Activity Diagram)等
RUP(Rational Unified Process)是使用面向对象技术进行软件开发的最佳实践之一, 是软件工程的过程。
3. 应用集成技术
3.1 数据库与数据仓库
数据库:主要用于事务处理,即OLTP(Transaction),也就是我们常用的面向业务的增删改查操作。常用的数据库有关系库Mysql,Oracle,PostgreSQL,内存库Redis,时序库PI。
数据仓库:主要用于数据分析,即OLAP(Analytics),供上层决策,常见于一些查询性的统计数据。常见的数仓有Greenplum,Hive。基于MYISAM存储引擎的MySQL也是可以用来做数据仓库的。
教材中的定义:数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。
3.2 WebServices技术
Web服务(Web Services)定义了一种松散的、粗粒度的分布计算模式,使用标准的HTTP(S)协议传送XML表示及封装的内容。
Web服务的典型技术包括:
- 用于传递信息的简单对象访问协议(Simple Object Access Protocal,SOAP)
- 用于描述服务的Web服务描述语言(Web Services Description Language,WSDL)
- 用于Web服务注册的统一描述、发现及集成(Universal Description Discovery and Integration,UDDI)
- 用于数据交换的XML
Web服务的主要目标是跨平台的互操作性,
适合使用Web Services的情况包括:跨越防火墙、应用程序集成、B2B集成、软件重用等。
不适合使用Web服务的情况包括:单机应用程序、局域网上的同构应用程序等。
3.3 JavaEE 架构和J2EE架构
JavaEE(Java Platform Enterprise Edition) Java企业版本是最早由Sun公司提出、各厂商共同制定 并得到广泛认可的企业标准。JavaEE概念已经比较老旧,早已被J2EE代替,J2EE的全称是Java 2 Platform Enterprise Edition,它是由SUN公司领导、各厂家共同制定的工业标准,J2EE是市场上主流的企业级分布式应用平台的解决方案(这个也有一定年头了,当然现在还有不少银行、大型企业由于历史问题仍然在使用)
3.4 NET 架构
NET开发框架在通用语言运行环境(Common Language Runtime)基础上,给开发人员提供了完善的基础类库、数据库访问技术及网络开发技术,开发者可以使用多种语言快速构建网络应用。
3.5 软件中间件
中间件(Middleware)是位于硬件、操作系统等平台和应用之间的通用服务。借由中间件,解决了分布系统的异构问题。
通常将中间件分为数据库访问中间件、远程过程调用中间件、面向消息中间件、事务中间件、分布式对象中间件等。
重点介绍一下以下中间件
数据库访问中间件:通过一个抽象层访问数据库,从而允许使用相同或相似的 出 码访问不同的数据库资源。典型技术如Windows平台的ODBC和Java平台的JDBC等。
远程过程调用中间件(Remote Procedure Call,RPC):这是一种分布式应用程序的处理方法。一个应用程序可以使用RPC来“远程”执行一个位于不同地址空间内的过程,从效果上看和执行本地调用相同。典型产品如ICE。