简答题
1. KISS law,2/8 law,2+-7 law,separate of concern
1.1 KISS原则
KISS是Keep It Stupid Simple或 Keep It Simple,Stupid。其核心思想就是“解耦,解耦,再解耦”,职责单一化,功能单一化为以后的维护和重构都会带来极大的便利。
1.2 2/8原则
计算机在80%的时间执行20%的常用代码或是系统在80%的时间使用着20%的常用数据。
1.3 separate of concern
关注点分离,只与“特定概念、目标”(关注点)相关联的软件组成部分进行“标识、封装和操纵”的能力,即标识、封装和操纵关注点的能力。
2. 软件的作用
- 系统软件用于计算机内部的管理、维护、控制和运行以及计算机程序的翻译、装入、编辑、控制和运行。
- 应用软件是为某种实际应用或解决某类问题所编制的各种应用程序。
3. 软件的复杂性
3.1 定义:
软件复杂性主要表现在程序的复杂性。程序的复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少、开发周期长短和软件内部潜伏错误的多少。同时它也是软件可理解性的另一种度量。
3.2 主要原因在于:
- 问题域的复杂性:软件系统一般都是处理逻辑或业务规则比较复杂的问题。
- 管理开发过程的困难性:不存在标准的流程,且现有的各种流程都只适合特定的团队、项目或者产品。
- 软件实现的灵活性:软件的实现是没有标准的,即便存在一些所谓的原则(如面向对象设计原则),这些原则也可以在进度或特定限制下妥协。
- 描述离散系统行为的问题:离散系统永远都只能是对连续过程的抽样和模拟,这就使得系统一直是从一个状态变到另一个状态,而这些状态又容易受到外部的干扰。
3.3 如何克服软件的复杂性
4. 软件危机
4.1 定义
软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
4.2 产生的原因
- 软件的规模越来越大,结构越来越复杂。
- 软件开发的管理困难。
- 软件开发费用不断增加。
- 软件开发技术、开发工具落后,生产率提高缓慢。
- 生产方式落后。软件仍然采用个体手工方式开发。
- 开发工具落后,生产率提高缓慢
4.3 如何克服软件危机
- 充分吸收和借鉴人类长期以来从
事各种工程项目中积累的行之有效的有效原理、概念、技术与方法,特别是吸取几十年来人类从事计算机硬件研究和开发的经验教训。在开发软件的过程中努力作到良好的组织,严格的管理,相互友好的协作。 - 推广在实践中总结出来的开发软件的成功的技术和方法,并研究更好、更有效的技术和方法,尽快克服在计算机系统早期发展阶段形成的一些错误概念和作法。
- 根据不同的应用领域,开发更好的软件工具并使用这些工具。将软件开发各个阶段使用的软件工具集合成一个整体,形成一个很好的软件开发环境。
5. 软件工程及其三要素
5.1 什么是软件工程
软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。
5.2 简述软件工程的三要素
软件工程包括三个要素:方法、工具和过程。
- 软件工程方法为软件开发提供了“如何做”的技术。
- 软件工具为软件工程方法提供了自动的或半自动的软件支撑环境。
- 软件工程的过程则是将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。
6. 面向对象与面向过程软件开发方法
6.1 概述面向对象(OO)和面向过程(PO)的区别
- 面向对象简单,面向过程对人员要求素质过高
- 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
- 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
7. 迭代软件开发过程与瀑布软件开发过程
7.1 迭代软件开发
所有的阶段可以细分为迭代。每一次的迭代都会产生一个可以发布的产品,这个产品是最终产品的一个子集。
优点:
- 降低了在一个增量上的开支风险。
- 降低了产品无法按照既定进度进入市场的风险。
- 加快了整个开发工作的进度。
- 适应需求的变化会更容易。
7.2 瀑布软件开发流程
讲软件生命周期分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护六个基本活动,并且规定他们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
优点:
- 为项目提供了按阶段划分的检查点
- 当前一阶段完成后,你只需要去关注后续阶段
- 可在迭代模型中应用瀑布模型。
8. 软件的基本技能
分析,设计,编码,测试,维护
9. 业务建模
描述组织内部各系统(人肉系统、机械系统、电脑系统......)如何协作,使得组织
可以为其他组织提供有价值的服务。业务建模的目的是从组织的角度来定位系统应该提供的价值。
业务建模的步骤
- 选定要改进的组织
- 组织的业务用例图
- 现状业务序列图
10. 需求的重要性与困难
- 用户与开发人员很难进行交流;
- 用户的需求是动态变化的;
- 系统变更的代价呈非线性增长
11. 软件设计
设计阶段:工程管理角度,概要设计,详细设计;技术角度,体系结构数据,数据设计,接口设计,过程设计;面向对象角度,体系结构设计,类设计,接口设计,构件设计
设计过程:系统设计阶段,确定系统的具体实现方案,结构设计阶段,确定软件结构。
9个步骤:设想供选择的方案;合理选取方案;推荐最佳方案;功能分解;设计软件结构;设计数据库;制定测试计划;书写文档;审查和复审。
设计原理:模块化
12. 业务用理与系统用例
业务用例指业务执行者希望通过和组织交互达到的,而且组织能提供的价值。业务用例是组织的、而不是组织内某个系统的用例。组织的用例不会因为某个人肉系统或电脑系统的存在或消失而改变。
系统用例的定义:系统能够为执行者提供的、涉众可以接受的价值。
13. 业务工人和业务实体
业务工人(Business Worker)─组织内的人肉系统
业务实体就是组织中的非人系统
业务工人会被业务实体替换
14. 系统执行者和业务执行着
系统执行者的定义:在所研究系统外,与该系统发生功能性交互的其他系统。�
系统执行者不是所研究系统的一部分,是该系统边界外的一个系统
系统执行者必须和系统有交互,不和系统交互的不算是系统的执行者。
系统执行者和重要无关
业务执行者是一个组织(或人群),而不是系统