第一部分:简答题(30分,6小题)
1)KISS law,2/8 law,2±7 law,separation of concerns...
KISS law:Keep It Simple and Stupid,意即“简单就是美”。
2/8 law:for many events, roughly 80% of the efffects come from 20% of the causes.
对于大多数事物,最重要的只占20%,其余80%尽管是多数,却是次要的。
2±7 law:an individual can comprehend only about 7, plus or minus 2, chunk information at one time.
Separation of Concerns(关注点分离原则):
不同领域的功能,应该由不同的代码和最小重迭的模块组成。
是日常生活和生产中广泛使用的解决复杂问题的一种系统思维方法。大体思路是:先将复杂问题做合理的分解,再分别仔细研究问题的不同侧面(关注点),最后综合各方面的结果,合成整体的解决方案。
是处理复杂性的一个原则。由于关注点混杂在一起会导致复杂性大大增加,所以能够把不同的关注点分离开来,分别处理就是处理复杂性的一个原则,一种方法。
2)软件的作用
soul of comaputer-besed system.
is indispensable in almost each domain.
在我们生活的方方面面,在交易,文化,日常活动中都扮演着重要作用。
3)软件的复杂性
体现在:
1、系统过于复杂,仅靠少量开发人员难以理解。
2、通常一个bug修好了又会引发别的bug。
如何克服:
Abstraction (Modeling)抽象化建模
Decompositian 分解(对问题进行分解,将问题"各个击破",再分别解决各个子问题)
Hierarchy 分级分层
4)软件危机
定义:
落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
产生的原因:
complexity is inherent characteristic. 软件越来越复杂
intangible 难以理解的
change
no effective technlogy and management approach. 缺少高效的工具与管理方法
如何克服:
SE(软件工程)
5)软件工程及其三要素
What is software?
Method, tool, procedure and paradigm
软件是一系列按照特定顺序组织的计算机数据和指令的集合。什么是软件工程
指导计算机软件开发和维护的工程学科。它采用工程的概念、原理、技术和方法来开发与维护软件。
三要素:
Software Process
Methodology 方法论
Tool: CASE(computer-aided software engineering)广义地说,CASE是辅助软件开发的任何汁算机技术,其中主要包含两个含义:一是在软件开发和维护过程中提供计算机辅助支持;二是在软件开发和维护过程中引入工程化方法。
6)软件开发过程
起始阶段(Inception)-- 有一个好的想法:具体构想出终于产品的设想和它的业务案例,确定项目的范围 。
细化阶段(Elaboration)--计划必要的活动和所需资源,具体确定功能并设计构架 。
构建阶段(Construction)-- 构建产品, 发展最初的设想、构架和计划,直到一个能够交付给用户的产品(完毕后的设想)完毕。
移交阶段(Transition)-- 将产品移交用户使用,包含:制造、交付、培训、支持、维护,直到用户惬意。
7)面向对象与面向过程软件开发方法
8)迭代软件开发过程与瀑布软件开发过程
迭代软件开发流程:
迭代式开发也被称作迭代增量式开发或迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。
什么是迭代式开发?
1、每次只设计和实现这个产品的一部分
2、逐步逐步完成的方法叫迭代开发
3、每次设计和实现一个阶段叫做一个迭代
在迭代式开发方法中,整个开发工作被组织为一系列的短小的、固定长度(如3周)的小项目,被称为一系列的迭代。每一次迭代都包括了需求分析、设计、实现与测试。采用这种方法,开发工作可以在需求被完整地确定之前启动,并在一次迭代中完成系统的一部分功能或业务逻辑的开发工作。再通过客户的反馈来细化需求,并开始新一轮的迭代。
迭代式开发的优点:
- 降低风险
- 得到早期用户反馈
- 持续的测试和集成
- 使用变更
- 提高复用性
迭代模型的缺点:
- 它不适用于较小的项目。
- 可能需要更多资源。
- 由于不完善的要求, 可以一次又一次地更改设计。
- 需求变更可能会导致预算超支。
- 由于需求变更, 未确认项目完成日期。
瀑布软件开发流程:
瀑布模型式是最典型的预见性的方法,严格遵循预先计划的需求分析、设计、编码、集成、测试、维护的步骤顺序进行。步骤成果作为衡量进度的方法,例如需求规格,设计文档,测试计划和代码审阅等等。
优点:
- 需求非常明确
- 工作量十分可控
- 对质量要求比较低
- 业务建模也比较简单
- 功能构成较少
这种开发模式如果范围控制和风险控制做的比较好的话,就真的如瀑布一般,‘飞流直下三千尺’,迅速完成客户期望,部署运行,一般都是在外包公司常见
主要的问题:
- 开发过程一般不能逆转,否则代价太大;
- 实际的项目开发很难严格按该模型进行;
- 客户往往很难清楚地给出所有的需求,而该模型却要求如此。
- 软件的实际情况必须到项目开发的后期客户才能看到,这要求客户有足够的耐心。
9)开发软件需要的基本技能
分析,设计,编码,测试,维护
参考:13 Technical Skills You Should Have As A Developer - GeeksforGeeks
10)业务建模的目的和过程
业务建模目的:
to get requirements model(为了得到待引进软件系统的需求)
examine orginization to get correct requirements
业务建模过程:determine organization and the boss
figure out the visions(愿景)
examine organization to find problems according to visions
或者:
明确我们为谁服务(选定愿景、要改进的组织)
要改进的组织是什么现状(业务用例图、现状业务序列图)
我们如何改进(改进业务序列图)
11)需求的重要性与困难
- 用户与开发人员很难进行交流
- 用户的需求是动态变化的
- 系统变更的代价是非线性增长
12)需求模型
13)分析模型
采用UML用例分析技术分析软件需求,建立软件系统的分析模型。
14)软件设计
软件设计是把需求转化为软件系统的最重要的环节,一般会包含以下几大部分:体系结构设计、界面设计、数据结构和算法设计、数据库设计、接口设计、安全设计等。软件设计的优劣在根本上决定了软件系统的质量。
参考02:软件设计规范 - 新元子 - 博客园
(注:下文中的“组织”即一般意义上的“业务”(business),因为潘JY曾说,“业务建模”这个名字其实取得不好,应该叫“组织建模”更恰当。)
15)业务用例与系统用例
业务用例:
指业务执行者(BA)希望通过和组织交互达到的,而且组织能提供的“价值”
代表“组织”的“本质价值”
不会因为某个人或电脑系统的存在或消失而改变
e.g.:银行---存款(椭圆一杠)
系统用例:
系统能够为执行者提供的、涉众可以接受的价值。
e.g.:ATM---取钱(椭圆)
16)业务工人与业务实体
业务工人(BW):
“组织”内的人
e.g.:银行---银行接待员
业务实体(BE):
“组织”中的“非人”智能系统
e.g.:银行--- ATM、营业系统
注:随着技术进步,业务工人也许会被业务实体替代。
17)主参与者与辅助参与者
主参与者(Primary Actor):Those that trigger the use case
辅助参与者(Secondary Actor):帮助PA实现用例 or 被动参与用例实现
18)系统执行者与业务执行者
业务执行者(Business Actor):
以某“组织”为研究对象,在“组织外”与组织交互的人或机构。
e.g.:某商业银行---储户、企业、人民银行
系统执行者:
在所研究的“系统外”,与该系统发生“功能性交互”的“其他系统”(人或非人)
怎么找:业务序列图上与所研究系统有实线相连的对象
二、三、阅读模型题和建模题(30分,3小题)(40分,4小题)
参考01:基于UML的需求分析和系统设计(完整案例和UML图形演示)_qq_31059985的博客-CSDN博客_基于uml的系统完整案例
参考02: 一文掌握14种UML图 - 云+社区 - 腾讯云