-
2018-02-27 18:01:44
成长是一个学习的过程,我们经历过各种的错误经历并进行反思才能进步。错误的出现是为了帮助我们成长而不是阻碍我们进步。所以我们要端正对待错误和超纲需求的态度。以下是我在极客时间专栏中学习到的内容。稍作修改记录下来方便以后查阅。
1,伸展性错误:在完成工作中,涉及到了自己从未了解过的知识或者从未涉足过的领域时。就会发生犯一些伸展性错误。这种错误是由于自己对新的内容完全不清楚。属于学习新的内容必经的一个过程。在新的技术上犯过错误后才能更加了解新技术的使用场景。
伸展性错误是在实际工作中能够真正的提高自己的工作能力的毕竟错误。但是自己也需要在这个过程中不断地总结新技术的特点。让自己犯得错误是值得的。在犯了这种错误后需要自己总结学习遇到这种问题后的思想感悟。在下次遇到类似问题时能够有所进步。
2,无知性错误:这种错误是指自己对业务场景或者是和其他小组成员一起协作开发时得不到及时沟通。但是一旦完成沟通后就能够在后续开发中有效避免类似的问题 【忘记处理异常,没有考虑某些数值的边界值,没有进行安全校验】。
有效的信息共享制度,增强开发中的信息透明度,以及有效的错误记录回顾能够有效的降低此类错误的发生。
如果这个参数为空的话会怎样?如果这些条件都不为真的话呢?这个方法是线程安全的吗?为了弄清楚程序到底需要解决哪类的问题,你可能会问自己:如果队列为空的话怎么办?或者这个请求没有响应?如果这个服务器重启的时候,别的服务器也在重启该怎么办?这些错误是只有自己经历过的项目多了,亲手敲的代码多了,自然就能够写出更加健壮的代码。
3,粗心性错误:粗心错误就是自己命名知道这样写会出错,但是还是码错了。这样的错误是最不应该犯的,而且在debug过程中年,此类错误也是最不容易发现的。会消耗我们很多的debug时间。出现此类错误时,应该多问自己为什么。为什么会出现此类错误。当时在想什么。从自身找原因。避免再次出现此类错误。
4,高风险错误:对于一些结果不确定的任务,我们就会犯高风险错误。这类错误不可避免。因为这类错误只在特定场景下出现。所以很难避免这类错误的出现。
更多相关内容 -
常见编程错误及解决方法,避免踩雷
2021-03-25 22:24:09编程常见问题分析,以及错误解决办法! 作为程序员,如果哪一天没有了错误或警告的提示,一定会有一种不祥的预感吧,自从开始编程...提示:以下是本篇文章正文内容,下面案例可供参考 编程常见三种错误 1.语法错误 概编程常见问题分析
作为程序员,如果哪一天没有了错误或警告的提示,一定会有一种不祥的预感吧,自从开始编程以来,碰到过很多问题,在遇到错误的时候不要慌,首先看报错,中文直接看,英文翻译看。根据报错找到错误发生的行数,一般错误就在这一行的上下几行代码。
提示:以下是本篇文章正文内容,下面案例可供参考
编程常见三种错误
1.语法错误
概念:是指程序中含有不符合语法规定的语句
成因分析:
- 编程语言基础语法掌握不熟练
- 编写代码时急于求成,不细心
- 对某些知识点没有了解透彻,不知道怎么使用
常见错误:
- 引号、逗号、分号错误(中文英文逗号、引号等是不同的,注意切换输入法)
- 变量未定义(这个不用多说了吧,一写就明了的…)
- 变量赋值、运算时显示类型不匹配(如:int a=6;float b=3.14;当使a=b时,会显示类型不兼容,会导致数据丢失。)
- 循环条件判断后面是跟着{大括号},不要加上分号,否则循环不完整起不到作用。这种错误也是编程小白会出现的错误。
for(int i=0;i++;i<100) { Console.Write(i); };
- 函数参数不匹配(了解函数的作用,需要传什么参数,对照形参传实参)。
- 头文件未包含(有时候你在别处看见一个函数,你自己拿来用,发现此函数竟然未定义,你要知道此函数在哪个头文件里面,或者是否是自己定义的)。
2.逻辑错误
概念:是指程序中没有语法错误,可以通过编译、连接生成可执行程序, 但程序运行的结果与预期不相符的错误。
成因分析:
- 和语法错误一样,就是不细心
比如你想判断一个人的名字是不是叫nanyu,但编写程序时却少写了一个n,变成了nayu,在运行时就会发生逻辑错误。 - 对于内存不够了解,指针运用不娴熟。
常见错误:
- 进行if判断时使用了赋值运算符=,而不是逻辑运算符==(if(a=b)和if(a==b)是完全不同的,相信大家都遇到过)。
- 这个是最让人头疼的错误,运行一下代码,好,没问题!随着你的输入等操作,接着弹出一个窗口,大致意思是访问冲突,然后看着代码一脸懵。这个问题错误也有好多:
(1). 数组越界访问或者越界存数据
(2). 指针指向了没有权限访问的内存
(3). 数据转换时数据溢出 - 一元运算符 – 和 *的优先级相同,注意使用括号
- 在主函数的内部,定义局部变量一定要放在任何函数或语句执行之前,否则肯定报错。
一定要细心细心再细心
3.系统(编译)错误
概念:是指程序没有语法错误和逻辑错误,但程序的正常运行依赖于某 些外部条件的存在,如果这些外部条件缺失,则程序将不能运行。成因分析:
- 外部依赖项路径不正确
- 外部依赖项不存在
- 路径错误,使用某些函数时找不到此函数
常见错误:
- CS1061错误:当你尝试调用一个不存的方法或者访问一个不存的成员时(或者是与关键字冲突),就会引发CS1061号错误。
error CS1061: Type `__’ does not contain a definition for `__’ and no extension method `__’ of type `__’ could be found (are you missing a using directive or an assembly reference?)
- CS1526错误:出现CS1526错误的原因是new运算符用法不正确。
error CS1526: A new expression requires () or [] after type
- CS0619错误:当一个类型成员使用Obsolete属性标记时(当该实体再也不建议使用时)会发生这样的状况,所以引用这样子的成员时会形成错误。
error CS0619: `__’ is obsolete: `__ is not supported any more. Use __’
- CS1922错误:当错误地使用集合对象初始化表达式时就会引发CS1922号错误。集合对象初始化表达式可以被用作在同一行里初始化多个变量或者一次性给数组赋予多个初值的便捷方式。
error CS1922: A field or property `__’ cannot be initialized with a collection object initializer because type `__’ does not implement `__’ interface
解决方案:
想要解决CS1922号错误,你需要找出错误地使用集合对象初始化表达式的代码段。双击Console里的错误,将会把你带到引起该错误的那一行代码上。
- CS0266错误:当尝试把一个double类型的值赋给一个float变量时,会引起CS0266号错误。
error CS0266: Cannot implicitly convert type double’ to float’. An explicit conversion exists (are you missing a cast?)
解决方案:
想解决CS0266错误,要么将double值转型为float,要么干脆使用float代替double。
- CS0664错误:当声明一个float变量时,输入一个含有小数的数但却并不含“f”后缀时,将会引发CS0664号错误。
error CS0664: Literal of type double cannot be implicitly converted to type `float’. Add suffix `f’ to create a literal of this type
解决方案:
通过添加“f”后缀到小数的末尾,就能解决CS0664错误。
- CS1031错误:引起CS0131号错误的原因是,“=”赋值运算符的左侧不是一个变量、不是一个属性、不是一个索引器。
error CS0131: The left-hand side of an assignment must be a variable, a property or an indexer
解决方案:
在“=”赋值运算符左侧添加变量、属性或者索引器就可以解决CS0131号错误。
- CS0120错误:在一个静态的方法里尝试直接引用一个非静态的变量时会发生该错误。(在一个静态的方法里调用另一个非静态的方法时会发生该错误。)
error CS0120: An object reference is required to access non-static member `__’
解决方案:
CS0120错误可以通过创建一个实例来引用这个非静态变量来解决(可以通过创建一个实例来引用这个非静态方法来解决)
-
一个神奇的大学科目《软件工程》,知识点总结+测试题,包你不挂科
2021-04-13 12:37:49谁能告诉我这科的理论在哪可以实用呀?搞不懂,只能收藏一下包不挂科谁能告诉我这科的理论在哪可以实用呀?搞不懂,只能收藏一下包不挂科
知识点总结
第一章:
软件工程定义:
1968年10月,Fritz Bauer 首次提出了“软件工程”的概念,并将“软件工程”定义为:为了经济地获得能够在实际机器上有效运行的可靠软件,而建立并使用的一系列工程化原则。
1993年IEEE对软件工程的定义:软件工程是将系统化的、规范化的、可度量的途径应用于软件的开发、运行和维护的过程,即将工程化应用于软件的方法的研究。
软件工程原则:
抽象与自顶向下,逐层细化 信息隐蔽和数据封装 模块化 局部化 确定性 一致性和标准化 完备性和可验证性
瀑布模型:
开发活动的特征:(1)以上一项活动方产生的工作对象为输入(2)利用这一输入,实施本项活动应完成的内容(3)给出该项活动的工作结果,作为输出传给下一项活动(4)对实施该项活动的工作结果进行评审,若其工作得到确认,则继续进行下一项活动,否则返回前项,甚至更前项的活动进行返工
瀑布模型的优点:
(1)可强迫开发人员采用规范化的方法
(2)严格地规定了每个阶段必须提交的文档
瀑布模型的缺点
(1)由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要。如果需求规格说明与用户需求之间有差异,就会发生这种情况(2)瀑布模型只适用于项目开始时需求已确定的情况。总地来说,瀑布模型是一种应付需求变化能力较弱的开发模型,因此,很多在该模型基础上开发出来的软件产品不能够真正满足用户需求
第二章:
可行性研究的过程:
- 复查系统规模和目标
复查系统定义,改正含糊或不确切的叙述,清晰地描述对目标系统的一切限制和约束
- 研究目前正在使用的系统
现有的系统是信息的重要来源。若一个软件是对旧系统的改造,那开发新系统时,要充分了解老系统存在的问题,需要增加的功能,新系统实际上是老系统的部分功能加上一些新增功能形成的系统
- 导出新系统的高层逻辑模型
- 重新定义问题
新系统的逻辑模型实质上表达了分析员对系统必须做什么的看法,得到新系统的高层逻辑模型之后,可能会发现前面问题定义的范畴过大,分析员还要和用户一起再复查问题定义,对问题进行重新定义和修正。
- 导出和评价供选择的解法
分析员应该从系统逻辑模型出发,研究问题的几个组成部分,细化各功能点,导出若干个较高层次的物理解法供比较和选择
- 推荐行动方针
- 草拟开发计划
任务分解 进度规划 财务预算 风险分析及对策
- 书写文档提交复查
第三章:
一.软件需求的定义:
以清晰、简单、一致且无二义性的方式,描述用户对目标软件系统在功能、行为、性能、设计约束等方面的期望,是在开发过程中对软件系统的约束。
二.需求分析的任务:
- 业务需求:是客户对于软件系统的高层次目标要求,定义了项目的远景和范围
- 用户需求:从用户角度描述软件系统的功能需求与非功能需求,通常只涉及系统的外部行为。
- 功能需求:功能需求描述软件系统应该提供的功能或务,通常涉及用户或其他外部系统与目标系统之间的交互,不考虑目标系统内部的实现细节
- 非功能需求:非功能需求即性能需求,反映了客户对软件系统质量和性能的额外要求
- 约束条件: 约束条件是软件系统设计和实现时必须满足的限制条件
- 业务规则: 业务规则是对某些功能的可执行性成内部执行速制的一些限定条件
- 外部接口需求: 外部接口需求是描述目标系统与外部环境之间的交互接口
- 数据定义:当用户描达一个数据项或一个复杂的业务数据结构的格式或缺省值时,正在进行数据定义
第四章:
启发规则:
启发规则是软件结构设计优化准则,软件概要设计的任务就是软件结构的设计,为了提高设计的质量,必须根据软件设计原理设计软件,利用启发规则优化软件结构。
1.改进软件结构提高模块独立性2.模块规模适中3.适当控制深度、宽度、扇出、扇入
4.模块的作用域应该在控制域之内5.力争降低模块接口的复杂程度
6.设计单入口单出口的模块7.模块功能可预测
第五章:
详细设计的过程
软作详细设计是软件工程的重要阶段,在详细设计过程中,细化了高层的体系结构设计,将软件结构中的主要部件划分为能独立编码、编译和测试的软件单元,并进行软件单元的设计,同时确定了软件单元和单元之间的外部接口。
一.详细设计的基本任务:
- 算法设计:用某种图形、表格、语言等工具将每个模块处理过程的详细算法描述出来
- 数据结构设计:对于需求分析,概要设计确定的概念性的数据类型进行确切的定义
- 物理设计: 对数据库进行物理设计,即确定数据库的物理结构
- 其他设计
a.代码设计:为了提高数据的输入、分类、存储及检索等操作的效率,对数据库中的某些数据项的值要进行代码设计b.输入/输出格式设计c.人机对话设计
- 编写详细设计说明书 6 . 评审:对处理过程的算法和数据库的物理结构要进行评审
二.详细设计方法:
- 自顶向下,逐步求精 2.具有单入、单出的控制结构 3. 五种控制结构:顺序结构,选择,先判断型循环结构,后断型循环结构,多选择分支结构
第七章:
一.测试用例设计:
白盒测试是对软件的过程细节做细致的检查。这一方法把测试对象看作 个打开的盒子,允许测试人员利用程序内部的逻辑结构及有关信息设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序的状态,确定实际的状态是否与期望的状态一致。
覆盖标准:
- 语句覆盖
含义:就是选择足够多的测试用例,运行被测程序,使得程序中每条语句至少执行一次。
- 判定覆盖
含义:又称为分支覆盖,在设计测试用例,针对程序中具有分支结构的部分,为了测试所有的可能结果,需要将每个分支都至少执行一次,查看相应的语句执行情况和结果
(1)a=2,b=0,x=4,覆盖RACBDE
(2)a=3,b=1,x=1覆盖 RABE
- 条件覆盖
条件覆盖是指设计测试用例时,除了保证每条语句执行一次,还要使判定表达式的每个条件的各种可能取值都至少执行一次,为了实现条件覆盖,保证各种可能的条件都取值,即保证
第一个判断有以下取值:a>1,a<=1,b=0,b≠0
第二个判断有以下取值:a=2,a≠2,x>1,x<=1
选择两组测试用例:
(1)a=2,b=2,x=2(满足a>1,b≠0,a=2,x>1的条件),执行路径为 RABDE
(2)a=1,b=0,x=0(满足a<=1,b=0,a≠2,x<=1的条件),执行路径为RABE
- 判定/条件覆盖
单独使用判定覆盖和条件覆盖测试结果都不够全面, 若将两种覆盖结合,就会相互补充,判定/条件覆盖就是设计足够多的测试用例,使得每个判定表达式中的每个条件都取到各种可能的值,并且使每个判断语句的所有判断结果至少出现一次。
(1)a=2,b=0,x=2(满足a>1,b=0,a=2,x>1的条件),执行路径RACBDE
(2)a=1,b=1,x=1(满足a<=1,b≠0,a≠2,x<=1的条件),执行路径RABE
- 条件组合覆盖
条件组合覆盖就是设计足够多的测试用例,使得每个判定表达式中条件取值的各种组合都至少出现一次。根据每个判定表达式情况,列出如下条件组合
(1)a>1,b=0,A表达式为真;(2)a>1,b≠0,A表达式为假;(3)a<=1,b=0,A表达式为假
(4)a<=1,b≠0,A表达式为假;(5)a=2,x>1,B表达式为真(6)a=2,x<=1,B表达式为真;
(7)a≠2,x>1,B表达式为真;(8)a≠2,x<=1,B表达式为假。
选择以下四组测试用例
选择条件a=2,b=0,x=2,(1)、(5)组合,执行路径 RACBDE
选择条件a=2,b=1,x=1,(2)、(6)组合,执行路径 RABDE
选择条件a=1,b=0,x=2,(3)、(7)组合,执行路径 RABDE
选择条件a=1,b=1,x=1,(4)、(8)组合,执行路径 RABE
- 路径覆盖
就是选取足够多的用例,保证程序的所有路径都至少执行一次,如果存在环形结构,也要保证此环的所有路径都至少执行一次。
(1)a=1,b=1,x=1(满足a<=1,b≠0,a≠2,x<=1的条件),执行路径为RABE
(2)a=2,b=0,x=2(满足a>1,b=0,a=2,x>1的条件),执行路径为 RACBDE
(3)a=2,b=1,x=2(满足a>1,b≠0,a=2,x>1的条件),执行路径为 RABDE;
(4)a=3,b=0,x=1(满足a>1,b=0,a≠2,x<=1的条件),执行路径为 RACBE
二.测试的步骤:
- 单元测试
a.单元测试的主要任务
单元测试针对每个模块,主要解决五个方面的问题:(1)模块接口(2)局部数据结构(3)路径测试 (4)过界条件 (5)出错处理
b.单元测试的执行过程
- 集成测试
a.非增式集成测试方法 b. 增式集成测试方法
- 确认测试
确认测试的标准 配置审查的内容 Alpha Beta 测试
- 系统测试
方法:恢复测试方法 安全测试方法 强度 性能
第八章:
一.软件维护的概念
软件维护是指在软件运行或维护阶段对软件产品所进行的修改,这些修改可能是改
正软件中的错误,也可能是增加新的功能以适应新的需求,但是一般不包括软件系统结
构上的重大改变。根据软件维护的不同原因,软件维护可以分成四种类型
(1)改正性维护
在软件交付使用后,由于开发时测试得不彻底或不完全,在运行阶段会暴露一些开
发时未能测试出来的错误,为了识别和纠正软件错误,改正软件性能上的缺陷,避免实
施中的错误使用,应当进行的诊断和改正错误的过程,这就是改正性维护
(2)适应性维护
随着计算机技术的飞速发展和更新换代,软件系统所需的外部环境或数据环境可能
会更新和升级,如操作系统或数据库系统的更换等。为了使软件系统适应这种变化,需
要对软件进行相应的修改,这种维护活动称为适应性维护
(3)完善性维护
在软件的使用过程中,用户往往会对软件提出新的功能与性能要求,为了满足这些
要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件
的可维护性,这种情况下进行的维护活动叫作完善性维护,完善性维护不一定是救火
式的紧急维修,而可以是有计划的一种再开发活动
4)预防性地护
这类维护是为了提高软件的可维护性,可靠性等,为以后进一步改进软件打下良好
的基础的维护活动,具体来讲,就是采用先进的软件工程方法对需要维护的软件或软件中的某一部分重新设计、编码和测试的活动。
二.软件维护的特点
1.软件维护受开发过程影响大
2.软件维护困难多
3.软件维护成本高
三.软件维护的步骤
软件维护工作包括建立维护组织、报告与评估维护申请、实施维护流程等步骤。
在影响分析和版本规划的过程中,不同的维护类型需要采用不同的维护策略
(1)改正性维护:首先应该评价软件错误的严重程度,对于十分严重的错误,维护
员应该立即实施维护对于一般性的错误,维护人员可以将有关的维护工作与其他开发
任务一起进行现划。在有些情况下,有的错误非常严重,以致不得不临时放弃正常的维
护控制工作程序,既不对修改可能带来的副作用作出评价,也不对文档作相应的更新,而
是立即进行代码的修改。这是一种救火式的改正性维护,只有在非常紧急的情况下才使
用,这种维护在全部维护中只占很小的比例。应当说明的是,救火式不是取消,只是推迟
了维护所需要的控制和评价。一旦危机取消,这些控制和评价活动必须进行,以确保当
前的修改不会增加更为重要的问题
(2)适应性维护:首先确定软件维护的优先顺序,再与其他开发任务一起进行规划
(3)定善性维护,根据商业的需求和软件的发展,有些完善性维护可能不会被接受。对于被接受的维护中请,应该确定其优先次序井现划其开发工作
第九章
质量保证
产品的生命,不论生产何种产品,质量都是极端重要的。软件产品开发周期长,耗费巨大的人力和物力,更必须特别注意保证质量。
软件质量:概括地说,软件质量就是“软件与明确地和隐含地定义的需求相一致的程度”。更具体地说,软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。
软件质量因素的定义:
正确性:系统满足规格说明和用户目标的程度,即,在预定环境下能正确地完成预期功能的程度
建壮性:在硬件发生故障、输人的数据无效或操作错误等意外环境下,系统能做出适当响应的程度
完整性(安全性):对未经授权的人使用软件或数据的企图,系统能够控制(禁止)的程度
效率:为了完成预定的功能,系统需要的计算资源的多少
可用性:系统在完成预定应该完成的功能时令人满意的程度
风险:按预定的成本和进度把系统开发出来,并且为用户所满意的概率
可理解性:理解和使用该系统的容易程度
可维修性:诊断和改正在运行现场发现的错误所需要的工作量的大小
灵活性(适应性):修改或改进正在运行的系统需要的工作量的多少
可测试性:软件容易测试的程度
可移植性:把程序从一种硬件配置和(或)软件系统环境转移到另一种配置和环境时,需要的工作量多少,有一种定量度量的方法是:用原来程序设计和调试的成本除移植时需用的费用
可再用性:在其他应用中该程序可以被再次使用的程度(或范围)
互运行性:把该系统和另一个系统结合起来需要的工作量的多少
软件质量保证的措施主要有:基于非执行的测试(也称为复审或评审),基于执行的测试(即以前讲过的软件测试)和程序正确性证明。
复审主要用来保证在编码之前各阶段产生的文档的质量;基于执行的测试需要在程序编写出来之后进行,它是保证软件质量的最后一道防线;程序正确性证明使用数学方法严格验证程序是否与对它的说明完全一致
技术复审的必要性:
正式技术复审的显著优点是,能够较早发现软件错误,从而可防止错误被传播到软件过程的后续阶段。
正式技术复审是软件质量保证措施的一种,包括走查和审查等具体方法。走查的步骤比审查少,而且没有审查正规。
走查主要有下述两种方式。
(1) 参与者驱动法。参与者按照事先准备好的列表,提出他们不理解的术语和认为不正确的术语。文档编写组的代表必须回答每个质疑,要么承认确实有错误,要么对质疑做出解释。
(2) 文档驱动法。文档编写者向走查组成员仔细解释文档。走查组成员在此过程中不时针对事先准备好的问题或解释过程中发现的问题提出质疑。这种方法可能比第一种方法更有效,往往能检测出更多错误。经验表明,使用文档驱动法时许多错误是由文档讲解者自己发现的。
审查步骤:
(1) 综述。由负责编写文档的一名成员向审查组综述该文档。在综述会结束时把文档分发给每位与会者。
(2) 准备。评审员仔细阅读文档。最好列出在审查中发现的错误的类型,并按发生频率把错误类型分级,以辅助审查工作。这些列表有助于评审员们把注意力集中到最常发生错误的区域。
(3) 审查。评审组仔细走查整个文档。和走查一样,这一步的目的也是发现文档中的错误,而不是改正它们。通常每次审查会不超过90分钟。审查组组长应该在一天之内写出一份关于审查的报告。
(4) 返工。文档的作者负责解决在审查报告中列出的所有错误及问题。
(5) 跟踪。组长必须确保所提出的每个问题都得到了圆满的解决(要么修正了文档,要么澄清了被误认为是错误的条目)。必须仔细检查对文档所做的每个修正,以确保没有引入新的错误。如果在审查过程中返工量超过5%,则应该由审查组再对文档全面地审查一遍。
程序正确性证明:
测试可以暴露程序中的错误,因此是保证软件可靠性的重要手段;但是,测试只能证明程序中有错误,并不能证明程序中没有错误。因此,对于保证软件可靠性来说,测试是一种不完善的技术,人们自然希望研究出完善的正确性证明技术。
软件工程一测
- 软件工程三要素:______________、_________________、_________________
- 获取愿景的三部曲:
- 愿景_______(是/否)功能。
- 愿景必须指出__________
- 迭代与增量的定义
- UML静态图包括(4个)
- UML动态图包括(5个)
- 为什么使用UML语言
- ______________是软件成功的基础。
答案:
- 工具(系统)、方法(技能)、开发过程(框架)
- 第一步:找到软件项目的“老大”;第二步:得到“老大”对项目的期望(愿景);第三步:描述出愿景的度量指标。
- 否
- 度量指标
- 迭代是反复求精,增量是逐块建造
- 类图、对象图、组件图、部署图
- 时序图、协作图、状态图、活动图、用例图
- 主要用于交流,有利于清晰,有利于精确
- 需求
软件工程二测
- 在项目失败的因素中,与 相关的比例最高。
- 是解决需求噩梦的手段。
- 简要分析项目开发过程中,公司老板、中层经理、一线员工的需求分别有什么特点。
- ICONIX过程从把需求文档变成可运作的代码过程只需四步,需要使用哪四张UML图?
- 若某公司设有公司老总、市场总监与财务总监,实现强化客户管理功能、提升财务效率功能、优化公司资源功能的三种软件,“老大”分别是谁?
答案:
1.需求
2.需求工程
3.公司老板:企业战略、开源节流(定于愿景)
中层经理:简化管理、优化流程(业务建模)
一线员工:工作简单(用例分析)
4.用例图、序列图、类图、健壮性图
5.强化客户管理:市场总监
提升财务效率:财务总监
优化公司资源:公司老总
软件过程三测
- 业务建模序列图阶段要注意什么?
- 业务序列图中,alt表示( ),loop表示( ),opt表示( );
- Alt和opt在使用的时候有什么区别?
- 业务序列图中,消息的名字表示什么?
- 业务序列图中,消息的方向表示什么?
- 把( )看作特殊的业务实体。
- 业务建模结果复核目的有两点,分别是什么?
答案:
- 本阶段不要考虑要实现什么系统
- 分支,循环,可选分支
- Alt表示分支,是需要条件的;opt表示可选分支,没有条件,有选择性。
- 代表责任和目的
- 责任委托,不是数据流动
- 时间
- 一是完善业务建模成果,寻找是否有遗漏或错误的地方进行修正,如果问题明显,就需要迭代回去继续做业务建模工作;
二是关键干系人在信息和意见上达成一致,并共同签字确认,作为下一阶段启动的标志。
软件工程四测
- 业务建模要求我们把视角从_______,以达到清晰准确地“诊断”,对症“开方”
答案:软件系统转向客户组织,站在客户角度看问题
2、业务建模三步骤:
1、___________2、____________3、____________
答案:
- 明确我们为谁服务(选定愿景要改进的组织)。
- 要改进的组织是什么现状(业务用例图、现状业务序列图)。
- 我们如何改进(改进业务序列图)。
3、了解组织现状:
(1)从外部看:组织是____的集合,用业务用例图来建模
(2)从内部看:组织是____的集合
答案:价值、系统
4、业务用例图帮助我们从______了解组织的______。
答案:高层次 、业务构成
5、业务执行者是在业务组织之外,与其交互,享受其价值的_______
答案:人或组织
6、业务用例是业务组织为业务执行者提供的______.
答案:价值
7、业务序列图帮助我们从______了解组织的______。
答案:细节上、 业务流程
8、业务序列图详细描述________、_______、________之间如何交互,以完成某个业务用例的实现流程
答案:业务执行者、业务工人、业务实体
9、举个简单的例子并识别其中的业务对象:业务执行者、业务工人、业务实体
答案:自由发挥
10、我们如何改进(改进业务序列图)
答案:了解业务组织现状的目的——发现流程中的改进点:
- 信息自动流转
- 封装复杂业务逻辑
- 职责转移
- 访问和操作业务对象
其他……
软件过程五测
- 域建模_____不等于_____(等于或不等于)数据模型
- ___用例分析________前做域建模
- 需求分析的主流分析方法有___原型法____、______用例法_______
- 绘制系统用例图的步骤
1. 确定系统边界
2. 识别系统执行者
3. 识别系统用例
4. 确定用例间的关系
- 怎样区别主执行者和辅执行者
主执行者:
1.用例发起者;
2.用例为其实现有价值的目标;
辅执行者:
1.用例支持者;
2.用例的完成需要与其交互,得到其支持
- 如何找到执行者
谁使用该系统?
• 谁改变系统的数据?
• 谁从系统获取信息?
• 谁负责维护、管理并保持系统正常运行?
• 系统需要应付哪些硬件设备?
• 系统需要和那些外部系统交互?
• 谁对系统运行产生的结果感兴趣?
• 有没有自动发生的事件?
- 系统用例是执行者通过系统____达到某个目标______
- 用例的关系____泛化____、_____包含_______、______扩展__________
- 先发现执行者还是先发现用例?为什么?
执行者比用例明显。
• 执行者的个数远比用例的个数少。
• 找到一个执行者,就可以找到一堆用例。
• 执行者是系统外部人物的代表,所以当然是要先找到执行者,才能够从执行者的角度去寻找用例。
- 用例命名的三个条件是什么?
用例名称必须是动宾短语。
• 采用域建模中的名词术语。
• 慎用弱动词弱名词——会掩盖真正的业务
- 用例_____不等于______功能,用例____不等于______步骤
软件过程六测
- 每个用例必须对应有___愿景目标______
- 用例描述的基本组成__干系人利益_____________、_____基本路径____________、________扩展路径_______、_______业务规则_______________
- _________用例_______是干系人利益的平衡点。
- 基本路径的书写要求。
以主动语态、“名词-动词-名词”格式来书写。
主语只能是执行者或系统。
- 基本路径与扩展路径是否要分开。
要
-
什么是段错误
2013-09-19 09:10:18段错误是指程序尝试访问一段不可访问的内存。 在类Unix系统中,当出现段错误时,系统发送信号量SIGSEGV给产生段错误的进程;在Windows系统中,系统会发送异常STATUS_ACCESS_VIOLATION给产生段错误的进程。 产生段...什么是段错误
段错误是指程序尝试访问一段不可访问的内存。
在类Unix系统中,当出现段错误时,系统发送信号量SIGSEGV给产生段错误的进程;在Windows系统中,系统会发送异常STATUS_ACCESS_VIOLATION给产生段错误的进程。
产生段错误的原因
程序运行过程中能访问到的内存空间主要有栈和堆。栈存放了函数的本地变量,堆是程序运行过程中能够自由分配和使用的内存空间。产生段错误和栈、堆的访问密切相关。
产生段错误的原因主要有:
- 解引用空指针
- 访问不可访问的内存空间(如内核空间)
- 访问不存在的内存地址
- 试图写一个只读内存空间(如代码段)
- 栈溢出(函数递归调用)
- 使用未初始化的指针(定义时没有初始化或者已经回收)
避免段错误
- 定义指针后初始化
- 数组下标是否越界
- 在堆上分配空间是否足够(内存限制)
- 变量处理时格式控制是否合理
调试段错误
在Linux系统下,首先开启
core dump
:ulimit -c unlimited
然后执行段错误的程序:
./a.out
程序出现段错误后,会出现如下提示:
Segmentation fault (core dumped)
表明生成了
core
文件,存放在/proc/sys/kernel/core_pattern
目录下,然后可以使用GDB进行调试。$ gdb ./a.out core
用来查看文件出错的情况。
执行
bt
命令可以查看段出错的过程中调用的函数,如:#0 0x0000000000441337 in ReorderBySort::Reorder (this=<value optimized out>, index_files=@0x7fff704326b0, order=ReorderBySort::ORIGIN) at /usr/include/c++/4.3/bits/stl_vector.h:688 #1 0x00000000004424e7 in ReorderProcessor::Reorder (this=0x7fff704326b0) at src/reorder.cpp:57 #2 0x00000000004458a9 in Reorder () at src/indexer.cc:396 #3 0x00000000004497ed in main (argc=3, argv=<value optimized out>) at src/indexer.cc:1169
调用顺序是
main -> Reorder -> ReorderProcessor::Reorder -> stl_vector.h
输入
up
和down
可以在#0, #1, #2和#3
之间切换,输入list
查看源代码。要准确定位到出现段错误的位置,还需要细细查看源代码。
-
你知道什么是 XSS 攻击,如何避免??
2020-08-29 22:01:46总的来说: 不管是用户端从任何的输入到任何输出都进行过滤,转义,让攻击者的代码注入不能识别,就可以避免攻击了 看完恭喜你,又知道了一点点!!! 你知道的越多,不知道的越多! ~感谢志同道合的你阅读, 你的支持是我... -
什么是死锁,发生原因是什么,如何解决和避免产生死锁?
2018-05-14 19:16:50一、什么是死锁? 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在... -
《可复制的领导力》学习总结
2019-08-18 16:43:56一、什么是可复制的领导力 1.领导力是可以学会的 领导力可以学会吗?很多人会摇头。在东方,“领导力”被神话为一种“感觉”,似乎无法通过学习学会。 但在樊登的领导力课程中,成千上万的创业者、企业老板通过学习... -
段错误?打的就是段错误!!
2020-05-22 11:56:03文章目录①一段有段错误的代码②跟我一起 -> 直达病灶③看我对症下药 呵,段错误?自从我看了这篇文章,我还会怕你个小小段错误? 请打开你的Linux终端,跟紧咯,准备发车!!嘟嘟嘟哒~~ ①一段有段错误的代码 #... -
关于你看得懂看不懂的罗永浩
2021-01-14 12:55:24做电子烟,“野”完不到二十分钟国家发布了禁烟令。 于是被人笑称“行业冥灯”。 “收购苹果啥进展了” “你的子弹短信什么时候干掉微信啊” 这个发福,驼背,秃顶的中年男人在镜头前,拿出网络上的舆论来质问自己。... -
犯错误很正常,可怕的是同样的错误重复在犯!
2019-01-27 22:39:45我们不是圣人,无论是在生活中还是职场中,很难避免犯错误。如起床穿反衣服,公交车坐过站等。犯错误很正常,可怕的是同样的错误重复在犯。 生活中和工作中常见的错误类型大体有上三种。 1.非智商导致、... -
打开要素类错误.几何形状数量与表的纪录数不匹配
2020-07-09 09:15:14在Arcgis中打开Shapefile文件遇到这种问题,返回错误:“打开要素类错误.几何形状数量与表的纪录数不匹配。” 问题分析 Arcgis提示已很明确,形状数与表记录数不一致,即图形与属性表的记录数不一致,情况也就两... -
神奇的 Swift 错误处理
2016-08-01 10:54:02Swift 中的错误处理从 O-C 沿袭而来,但 Swift 1.0 之后逐渐发生了巨大改变。重要的改变发生在 Swift 2,它率先使用了“处理非异常的状态和条件”的做法,使你的 app 变得更加简单。类似于其它编程语言,在 Swift 中... -
可综合&不可综合
2014-06-09 23:54:15Verilog HDL和VHDL相比有很多优点,有C语言基础的话很容易上手。搜集了一些网上大神的经验总结和书上的例子...HDL 是 Hardware Description Language 的缩写,中文名“硬件描述语言”,并不是“硬件设计语言(Hardwa -
vs使用未初始化的内存怎么解决_遇到C语言内存错误怎么办?一定要找准这六个原因...
2020-11-22 06:32:38浅显的例子就不举了,这里举几个比较隐蔽的例子。1、结构体成员指针未初始化struct student { char *name; int score; }stu,*pstu; int main() { strcpy(stu.name,"Jimy"); stu.score = 99; return ... -
C语言新手的100个报错解法 已更新11个错误
2020-11-16 14:59:59在python中进行逻辑判断其实指的是流程控制,那什么是流程控制呢?流程控制指的是在编写代码时,有不同条件下需要执行的代码,满足该条件后将会执行这部分流程;这一部分流程可以是一条代码、空或多条代码。那我们的... -
ALLEGRO-DRC-错误代码
2017-09-02 12:17:20ALLEGRO-DRC-错误代码 (2013-01-04 10:54:48) 转载▼ 标签: 杂谈 Q: Allegra中颜色设置好以后,应该可以导出相关设置文件,下次碰到不同设置 的板子,看着难受就可以直接读入自己的文件改变... -
什么叫大数据 大数据的概念
2017-05-31 20:23:061、大数据定义 ...大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。换言之,如果把大数据比作一种产业,那么这种产业实现盈利的关键,在于提高对数据的“加工 -
初学者必看:C++常见错误及解决方法
2019-05-28 18:51:52C++程序作为一种计算机语言,具有功能丰富等优点,广泛应用于工业软件研发当中,不仅...因此加深对常见错误的认识与掌握有效的解决方法显得尤为重要,本文就给大家列举几个C++常见错误及解决方法。 返回值返回... -
Java千百问_04异常处理(001)_什么是java中的异常
2016-04-06 22:02:341、java异常是什么 java在执行期间产生了某些问题,导致执行中断,这一问题就称为异常。 不同的原因都可能产生异常,包括以下内容: ==用户输入无效数据。 ==需要打开的文件不存在。 ==网络连接已丢失。 ==JVM已经... -
gdb设置断点出现Cannot access memory at address的错误
2021-10-13 16:21:27今天在给一个可执行c程序的entry point address设置断点的时候,出现了Cannot access memory at address的错误(为了测试为什么gcc -e指定一个函数foo先运行的时候,foo函数用return会出现core dump的错误,这个后面... -
Kubernetes安装方法及使用教程(史上最全,不全不要钱系列)
2018-11-18 22:17:13这些容器的所有的镜像都托管在gcr的仓库当中,gcr的仓库出于某种不可描述的原因(国内访问不了) ,是不能直接访问的。 实现一种自我管理的方式把k8s自己也部署为pod,至少核心组件部署为pod,包括master和各node... -
从个人发展的角度看,为什么不建议你考虑QA岗位?
2016-02-23 22:08:21:QA岗位对公司来说其实没啥核心价值,或者说没有达到不可替换的地位。 很简单的问题就可以测试出来:如果你们公司经营不善要裁员,你觉得老板会不会首先裁QA?如果老板看你不顺眼炒掉你这个QA,对公司有啥影响?你... -
计算机网络期末复习题
2020-12-31 08:48:25满足什么条件时进入拥塞避免阶段?拥塞避免阶段拥塞窗口的大小如何变化? (2)在TCP Reno版本中,执行快重传算法的条件是什么?执行快重传算法后的ssthresh值及拥塞窗口值如何设置? (3)说出已废弃的TCP Tahoe... -
大学四年,工作2年我总结了后端面试的所有知识点(持续更新)
2020-05-08 11:41:36zoo与eur区别 zookeeper保证cp(一致性) eureka保证ap(可用性) zoo在选举期间注册服务瘫痪,期间不可用 eur各个节点平等关系,只要有一台就可保证服务可用,而查询到的数据可能不是最新的,可以很好应对网络故障... -
Spring Framework(框架)整体架构(不知道就有些搞笑了哈)
2018-04-24 11:16:41在这个Spring框架大行其道的软件开发世界里,尚有很多工程师天天在用,但是从来不会去思考下,Spring框架的整体架构到底是什么样子的啊。 一、首先通过维基百科看看什么是Spring框架 维基百科的地址:Spring框架的... -
内存访问错误
2015-04-26 17:26:26大内高手—常见内存错误 随着诸如代码重构和单元测试等方法引入实践,调试技能渐渐弱化了,甚至有人主张废除调试器。这是有道理的,原因在于调试的代价往往太大了,特别是调试系统集成之后的BUG,一个BUG花了几天... -
iOS之深入解析文件内存映射MMAP
2021-08-31 19:33:16一、常规文件操作 常规文件操作(read/write)有以下重要...如果不存在,则通过 inode 定位到文件磁盘地址,将数据从磁盘复制到内核页高速缓冲,之后再次发起读页面过程,进而将内核页高速缓冲中的数据发给用户进程。 -
C/C++段错误问题排查和解决方法
2016-06-16 16:58:09Segment fault 之所以能够流行于世,是与Glibc库中基本所有的函数都默认型参指针为非空有着密切关系的。 背景 最近一段时间在linux下用C做一些学习和开发,但是由于经验不足,问题多多。...段错误为什么是 -
sqlite3常见错误原因
2017-03-25 22:54:16SQLITE_SCHEMA error是什么错误?为什么会出现该错误? 当一个准备好的(prepared)SQL语句不再有效或者无法执行时, 将返回一个 SQLITE_SCHEMA 错误。发生该错误时,SQL语句必须使用 sqlite3_prepare() API来...