微信小程序看到95集,学一半了,软考本周把以前的复习一遍,又刷一遍题,正确率80%,把错题又刷刷,知识点总结(目前感觉还是不够,以后要着重搞软考),实习报告写完,算法写完。
下周,三道算法 软考搞三章 教育见习报告写写 微信小程序 30集
软考知识
常见的软件生存周期模型有瀑布模型、演化模型、螺旋模型、喷泉模型等。
瀑布模型是将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型,适合于软件需求很明确的软件项目。固定流程缺乏灵活
V模型是瀑布模型的一种演变模型,将测试和分析与设计关联进行,加强分析与设计的验证。
原型模型是一种演化模型,通过快速构建可运行的原型系统,然后根据运行过程中获取的用户反馈进行改进。
演化模型特别适用于对软件需求缺乏准确认识的情况。
螺旋模型将瀑布模型和演化模型结合起来,加入了两种模型均忽略的风险分析。 需求分析确定软件要完成的功能及非功能性要求;
瀑布模型将开发阶段描述为从一个阶段瀑布般地转换到另一个阶段的过程。
原型模型中,开发人员快速地构造整个系统或者系统的一部分以理解或澄清问题。
螺旋模型将开发活动和风险管理结合起来,以减小风险。
喷泉模型开发过程模型以用户需求为动力,以对象为驱动,适合于面向对象的开发方法。 在这几种开发过程模型中,原型模型不适宜大规模软件的开发。
在利用增量模型进行开发时,如何进行模块的划分往往是难点所在,而不是这种模型的优点。
软件工程概述
程序的三种基本控制结构是顺序结构、选择结构和重复结构。
概要设计将需求转化为软件的模块划分,确定模块之间的调用关系;
详细设计将模块进行细化,得到详细的数据结构和算法;
编码根据详细设计进行代码的编写,得到可以运行的软件,并进行单元测试。
软件设计的任务是基于需求分析的结果建立各种设计模型,给出问题的解决方案。从工程管理的角度,可以将软件设计分为两个阶段:
概要设计阶段和详细设计阶段。
结构化设计方法中,概要设计阶段进行软件体系结构的设计、数据设计和接口设计;
详细设计阶段进行数据结构和算法的设计。面向对象设计方法中,概要设计阶段进行体系结构设计、初步的类设计/数据设计、结构设计;详细设计阶段进行构件设计。
结构化设计和面向对象设计是两种不同的设计方法,结构化设计根据系统的数据流图进行设计,模块体现为函数、过程及子程序;面向对象设计基于面向对象的基本概念进行,模块体现为类、对象和构件等。
起始阶段专注于项目的初创活动。
精化阶段理解了最初的领域范围之后,进行需求分析和架构演进。
构建阶段关注系统的构建,产生实现模型。移交阶段关注于软件提交方面的工作,产生软件增量。
产生阶段运行软件并监控软件的持续使用,提供运行环境的支持,提交并评估缺陷报告和变更请求。
需求不清晰且规模不太大时采用原型化方法最合适,而数据处理领域的不太复杂的软件,适于用结构化方法进行开发。
软件需求是软件系统必须完成的事以及必须具备的品质软件需求包括功能需求、非功能需求和设计约束三个方面的内容。
功能需求是所开发的软件必须具备什么样的功能:
非功能需求是指产品必须具备的属性或品质,如可靠性、性能、响应时间和扩展性等等;
设计约束通常对解决方案的一些约束说明。“软件产品必须能够在3秒内对用户请求作出响应”主要表述软件的响应时间,属于非功能需求。
I/O软件隐藏了I/O操作实现的细节。I/O软件向用户提供的是逻辑接口。I/O软件将硬件与较高层次的软件隔离开来,而最高层软件向应用提供一个友好的、清晰且统一的接口,方便用户使用。
瀑布模型从一种非常高层的角度描述了软件开发过程中进行的活动,并且提出了要求开发人员经过的事件序列。该模型适用于项目开始时需求已确定的情况。
V模型是瀑布模型的变种,它说明测试活动是如何与分析和设计相联系的。
原型模型允许开发人员快速地构造整个系统或系统的一部分以理解或澄清问题。原型的用途是获知用户的真正需求,因此原型模型可以有效地引发系统需求。
螺旋模型把开发活动和风险管理结合起来,以将风险减到最小并控制风险。
在这几种开发过程模型中,原型模型不适宜大规模软件的开发。
喷泉模型是典型的面向对象生命周期模型,是一种以用户需求为动力,以对象作为驱动的模型。该模型克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。“喷泉” 一词本身体现了迭代和无间隙特性。迭代意味着模型中的开发活动常常需要重复多次,在迭代过程中不断地完善软件系统;无间隙是指在开发活动之间不存在明显的边界。
对于原型模型和演化(迭代)模型,演化模型更合适,原型模型更适用于需求不明确时用以获取需求。
增量模型是一种非整体开发的模型,该模型具有较大的灵活性,适合于软件需求不明确的一种模型。使用该模型开发产品,一般是尽快构造出可运行的产品,然后在该产品的基础上再增加需要的新的构建,使产品更趋于完善。
UP (统一过程)模型是一种以用例和风险为驱动、以架构为中心、迭代并且增量的开发过程,由UML方法和工具支持。UP过程定义了五个阶段,起始阶段、精化阶段、构建阶段、移交阶段和产生阶段。开发过程中有多次迭代,每次迭代都包含计划、分析、 设计、构造、集成和测试,以及内部和外部发布。每个迭代有五个核心工作流,捕获系统应该做什么的需求工作流、精化和结构化需求的分析工作流、在系统结构内实现需求的设计工作流、构造软件的实现工作流和验证是否如期望那样工作的测试工作流。
软件复杂性度量是软件度量的一个重要分支。软件复杂性度量的参数有很多,主要包括:1.规模,即指令数或者源程序行数;2.难度,通常由程序中出现的操作数所决定的量来表示;3.结构,通常用与程序结构有关的度量来表示;4.智能度,即算法的难易程度。
软件过程管理
RUP应用了角色、活动、制品和工作流4种重要的模型元素,其中角色表述“谁做”,制品表述“做什么”,活动表述“怎么做”,工作流表述“什么时候做”。
初启阶段结束时产生一个构想文档、一个有关用例模型的调查、一个初始的业务用例、一个早期的风险评估和一个可以显示阶段和迭代的项目计划等制品;精化阶段结束时产生一个补充需求分析、一个软件架构描述和一个可执行的架构原型等制品;构建阶段结束时的成果是一个准备交到最终用户手中的产品,包括具有最初运作能力的在适当的平台上集成的软件产品、用户手册和对当前版本的描述;移交阶段结束时产生移交给用户产品发布版本。
极限编程XP是激发开发人员创造性、使得管理负担最小的一组技术;
敏捷开发方法XP是一种轻量级、高效、低风险、柔性、可预测的、科学的软件开发方法,其特性包含在12个最佳实践中。 1.计划游戏:快速制定计划、随着细节的不断变化而完善; 2.小型发布:系统的设计要能够尽可能早地交付; 3.隐喻:找到合适的比喻传达信息; 4.简单设计:只处理当前的需求使设计保持简单; 5.测试先行:先写测试代码再编写程序; 6.重构:重新审视需求和设计,重新明确地描述它们,以符合新的和现有的需求; 7.结队编程; 8.集体代码所有制; 9.持续集成:可以按日甚至按小时为客户提供可运行的版本; 10.每周工作40个小时; 11.现场客户; 12.编码标准。
Product Backlog 产品待办事项清单;Refactoring 重构,不属于scrum的步骤;Sprint Backlog,Sprint待办事项清单;Sprint,冲刺迭代。
水晶法Crystal认为每一个不同的项目都需要一套不同的策略、约定和方法论;
并列争球法(Scrum)使用迭代的方法,其中把每30天一次的迭代成为一个冲刺,并按需求的优先级来实现产品。多个自组织和自治小组并行地递增实现产品,并通过简短的日常情况会议进行协调。
CMM(Capability Maturity Model)是能力成熟度模型的缩写,CMM是国际公认的对软件公司进行成熟度等级认证的重要标准。CMM共分五级。在每一级中,定义了达到该级过程管理水平所应解决的关键问题和关键过程。每一较低级别是达到较高级别的基础。其中五级是最高级,即优化级,达到该级的软件公司过程可自发地不断改进,防止同类问题二次出现;四级称为已管理级,达到该级的软件公司已实现过程的定量化;三级为已定义级,即过程实现标准化;二级为可重复级,达到该级的软件公司过程已制度化,有纪律,可重复;一级为初始级,过程无序,进度、预算、功能和质量等方面不可预测。
过程能力成熟度模型基于这样的理念:改进过程将改进产品,尤其是软件产品。
软件组织为提高自身的过程能力,把不够成熟的过程提升到较成熟的过程涉及4个方面,这4个方面构成了软件过程改进的框架,即过程改进基础设施、过程改进线路图、软件过程评估方法和软件过程改进计划。
在进行评估后需要把发现的问题转化为软件过程改进计划。而过程改进通常不可能是一次性的,需要反复进行。每一次改进要经历4个步骤:评估、计划、改进和监控。
1.原型方法适用于用户需求不清、需求经常变化的情况,可以帮助导出系统需求并验证需求的有效性;
2.探索型原型的目的是弄清目标的要求,确定所希望的特性,并探讨多种方案的可行性,可以用来探索特殊的软件解决方案;
3.原型法能够迅速地开发出一个让用户看得见的系统框架,可以用来支持用户界面设计。 原型法不能用来指导代码优化。
软件开发项目管理
软件配置管理是一组管理整个软件生存期各阶段中变更的活动,主要包括变更标识、变更控制和版本控制。
软件项目计划的一个重要内容是安排进度,常用的方法有Gantt图和PERT图。
Gantt 图用水平条状图描述,它以日历为基准描述项目任务,可以清楚地表示任务的持续时间和任务之间的并行,但是不能清晰地描述各个任务之间的依赖关系。
PERT图是一种网络模型,描述一个项目的各任务之间的关系。可以明确表达任务之间的依赖关系,即哪些任务完成后才能开始另一些任务,以及如期完成整个工程的关键路径,但是不能清晰地描述各个任务之间的并行关系
结构化分析模型包括数据流图、实体联系图、状态迁移图和数据字典,因此这些模型是需求分析阶段的输出。而确定软件体系结构是在软件设计阶段进行的。
风险是一种具有负面后果的、人们不希望发生的事件。通常认为风险具有以下特点: 风险是可能发生的事件,其发生的可能性用风险概率来描述;风险是会给项目带来损失的事件;可能对风险进行干预,以期减少损失。针对每一种风险,应弄清可能减少造成损失或避免损失的程度。对风险加以控制,采取一些有效的措施来降低风险或是消除风险
在进行风险管理时,根据风险的优先级来确定风险控制策略,而优先级是根据风险暴露来确定的。风险暴露是一种量化风险影响的指标,等于风险影响乘以风险概率,风险影响是当风险发生时造成的损失。风险概率是风险发生的可能性。风险控制是风险管理的一个重要活动。
风险预测从风险发生的可能性大小以及风险发生所产生的后果是否严重两个方面评估风险。
风险分析实际上是4个不同的活动:风险识别、风险预测、风险评估和风险控制。 风险识别是试图系统化地确定对项目计划(估算、进度、资源分配)的威胁。风险预测又称为风险估算,它从两个方面评估一个风险:风险发生的可能性或概率;以及如果风险发生时所产生的后果。风险评估根据风险及其发生的概率和产生的影响预测是否影响 参考水平值。风险控制的目的是辅助项目组建立处理风险的策略,有效的策略应考虑风 险避免、风险监控、风险管理及意外事件计划。 风险避免即放弃或不进行可能带来损失的活动或工作。例如,为了避免洪水风险,可以把工厂建在地势较高、排水方便的地方,这是一种主动的风险控制方法。风险监控是指在决策主体的运行过程中,对风险的发展与变化情况进行全程监督,并根据需要进行应对策略的调整。风险管理是指在一个肯定有风险的环境里把风险减至最低的管理过程。对于风险我们可以转移,可以规避,但不能消除。
COCOMO用3个不同层次的模型来反映不同程度的复杂性,它们分别为:
基本模型(Basic Model):是一个静态单变量模型,它用一个以已估算出来的源代码行数(LOC)为自变量的函数来计算软件开发工作量。
中级模型(Intermediate Model):则在用LOC为自变量的函数计算软件开发工作量的基础上,再用涉及产品、硬件、人员、项目等方面属性的影响因素来调整工作量的估算。 在模型层次结构中有3种不同规模估算选择,即:对象点、功能点和代码行。
详细模型(Detailed Model):包括中级COCOMO型的所有特性,但用上述各种影响因素调整工作量估算时,还要考虑对软件工程过程中分析、设计等各步骤的影响。
目前常用的项目估算方法有专家判断方法,该方法受到专家经验和主观性等方面的影响;
算法方法,根据某个计算模型来估算项目开发成本,如启发式方法COCOMO 模型,但这些模型中的参数难以确定;
机器学习方法,如根据过去的项目开发数据,建立分类模型,预测新项目的开发成本,但这类方法难以定义训练数据的特征以及定义数据对象之间的相似性。即使结合多种方法,上述问题仍然存在,因此并不能得到精确地估算结果。
成本估算方法。其中专家估算方法主要依赖于专家的背景和经验,具有较大的主观性。Wolverton模型基于一个成本矩阵,定义不同的软件类型(如控制、输入/输出等)和难易(容易和困难)的成本,基于此计算软件开发的成本。COCOMO模型将规模视为成本的主要因素,考虑多个成本驱动因子。在COCOMO II中,还考虑了软件开发的不同阶段,包含三个阶段性模型,即应用组装模型、早期设计阶段模型和体系结构阶段模型。 COCOMOII模型也需要使用规模估算信息,在模型层次结构中有3种不同规模估算选择,即:对象点、功能点和代码行。
软件变更控制是变更管理的重要内容,要有效进行变更控制,需要借助配置数据库和基线的概念。配置数据库一般包括开发库、受控库和产品库。
软件配置管理SCM用于整个软件工程过程,其主要目标是标识变更、控制变更、确保变更正确的实现,报告变更。其主要内容包括版本管理、配置支持、变更支持、过程支持、团队支持、变化报告和审计支持等。
软件质量管理
易用性的自特性包括易理解性、易学性、易操作性,易分析性属于可维护性的子特性。
