软件工程

2020/4/4 软件工程第二次作业

南楼画角 提交于 2020-04-04 11:16:20
一、问题描述 题目 :   最大连续子数组和(最大子段和) 问题:   给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n   例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。 二、解决思路与方法   本问题可以通过暴力,动态规划等方法解决,在查询资料与研究后,我决定使用 分治策略 来解决该问题。 思路:   把序列分为左右两段,中间分界点为center = (right-left)/2+left;   递归计算左段的最大字段与leftsum;   递归计算右段的最大子段与rightsum;   记center到a 1 最大和S1;   记center到a n 最大和S2;   max{leftsum,rightsum,S1+S2}; 最大子段和可能出现在三个位置:   A:左子数组   B:右子数组   C:过center中间某部分组成的子数组 具体解决方法如下:   a.计算 left 到 center 的最大和,记作 leftSum。从 center出发

软件工程作业2

夙愿已清 提交于 2020-04-02 23:51:11
软件工程第二次作业 */ /*--> */ 博客信息 沈阳航空航天大学计算机学院2020软件工程作业 作业要求 https://edu.cnblogs.com/campus/sau/Computer1701-1705/homework/10583 课程目标 熟悉一个“高质量”软件的开发过程 作业目标 单元测试练习 一、编程题目:最大连续子数组和(最大子段和) 给定n个整数(可能为负数)组成的序列a 1 ,a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n 例如,当(a 1 ,a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。 二、代码地址 我的代码 三、程序运行结果 四、条件/判定覆盖测试用例 4.1 条件/判断组合 a.n<0&&元组去任意数 b.n>0&&aSum>bSum c.n>0&&aSum<bSum 4.2 测试数据 a.n=0,k[]={1,2},max=0; b.n=5,k[]={-1,-2,-3,-4,-5},max=0; c.n=6,k[]={-2,11,-4,13,-5,-2},max=20. 4.3 程序测试代码

软件工程第一周预备作业

假装没事ソ 提交于 2020-04-02 15:33:43
软件工程实践课程的自我目标 对于学习软件工程这门课还是很有压力的,由于自身知识的匮乏和编程能力的不熟练,对于这门课还是有些害怕的,学之前我也略微翻了翻这本书的前言--给任课老师和助教的建议,我觉得既然自己没有更好地办法,跟着要求一步一步的完成也不失为一个好办法。每周一篇博客的更新是对自己的最基础的要求,但也不能忽视,要监督自己每周的学习。课程按从易到难安排了个人项目,结对项目和团队项目,对于初步学习的我来说,不要求项目做得有多出彩,只有是“有用”的就是好的,要努力按照老师和助教的要求完成项目。 1.学习到的能力的预期 希望对基础的知识和能力有一个很深的巩固,能够对实现阶段很得心应手,在设计阶段有自己的想法。同时我还希望学习到快速准确的调试程序并修复BUG的方法,毕竟BUG是所有程序员的大敌,不管我以后会用什么语言编写什么软件,调试和修复BUG的方法都能让我受益终生。 2.对项目课程的期望 前言里说老师和学生的关系不是什么什么样的,最好是健身教练和健身学院的关系,每一个来学习这门课的学生都是想学好这门课来的,是想提高自己的水平。所以我比较希望我们能在老师和助教的引导下合作完成项目,但是并不会给与我们最细致的帮助,主要还是靠我们自己学习进步。让我们有一定的实践经验。 3.对项目的愿景规划 希望能做出“有用”的项目,不求项目做得有多出彩,但一定要肯花费时间和精力去好好的完成。 来源:

专家解析:程序员到软件架构师培训与认证之路

北城余情 提交于 2020-04-02 07:41:57
如果你对项目管理、系统架构有兴趣,请加微信订阅号“softjg”,加入这个PM、架构师的大家庭 软件架构师一般都是具备计算机科学或软件工程的知识,由程序员做起,然后再慢慢发展为架构师的。 软件架构师的培养 软件架构师一般都是具备计算机科学或软件工程的知识,由程序员做起,然后再慢慢发展为架构师的。在国内,很多大学目前还没有设立软件架构的学位课程,虽然IT业界对设计和架构的兴趣日渐高涨,但各学校还无法在课程中增加相应的内容来体现这一趋势。从这个方面来说,学校教育已经远远落后于产业发展。因此,促进和发展软件架构学课程的任务将落在现在的软件架构师身上。目前的软件架构师应该帮助各大院校建立相关课程体系,一旦教育课程建立起来,知识体将不仅通过新毕业生的工作成果来得到扩展,同时也会从适合软件架构的教育研究和出版物中得到扩展。 虽然大学要加强软件架构学课程的建设,但是,软件架构师的成长应该有一个实践的教育过程,并不是简单的学校的理论学习或者通过大型软件公司的认证就能成为合格的软件架构师。除了信息系统综合知识在学校学习外,软件架构师的大部分知识和经验将来自实际开发工作。根据软件架构师的任职条件,一名合格的软件架构师的成长应该经历8年以上的软件项目开发实际工作经验。一般需要经历程序员、软件设计师等阶段,然后再发展成为软件架构师。 当然,并不是每一位程序员经过8年后都可以成长为软件架构师的

c++为什么要面向对象?

夙愿已清 提交于 2020-04-01 07:58:13
前言   c和c++的区别是什么?不可置否,最重要的就是c++的编程思想是面向对象,而c的编程思想是面向过程,这是它们的本质区别,如果你在使用c++编程时使用的还是面向过程的编程思想,那么还不如使用c,因为这样的做法已经丢掉了c++的思想精髓。在学习一门语言时,最重要的是学习它的设计思想,因为语法都是大同小异的,很快便可以掌握。那么面向过程和面向对象编程的发展历史如何,区别是什么,各自的优缺点是什么,且听我一一道来。    一、“自顶向下,逐步求精”的面向过程程序设计    面向过程程序设计的思想即这样的一种解决思路 - 提出问题,分析问题的处理流程,将大问题分解为小问题,如果小问题比较复杂,就继续划分小问题为更小的问题,然后通过小模块一一解决小问题,最后再根据整个业务流程将这些小问题串在一起(调用函数),这样就达到了解决所有问题的目的,如下:   于是,这样从问题出发,自顶向下、逐步求精的开发思想我们称之为“面向过程程序设计思想”,因为它主要是解决问题中的一个个过程。这种思想也是最早的编程语言的思想,因为它比较符合我们解决问题的方法,其他语言比如早期的Fortran、JavaScript等都是如此。它的优点如下: 优点1:程序结构简单 - 仅由三种基本结构组成   面向过程编程的思想在程序实现上只需要三种控制结构,即顺序、选择、循环。通过这三种基本结构,我们就可以解决任何问题

个人总结

烈酒焚心 提交于 2020-03-31 06:29:22
  一学期的软件工程课就此结束,边做边学的理念,这门课教导的不仅仅是软件的开发。老师用他的经验来传道受业,用各种现实状况来讲解软件工程,讲解以后的工作态度,讲做事的习惯等等。我觉得这门课程的开设很大一定程度上提高了我们的思想认识,了解自己当前的状况。   一开始我以为软件工程就是编写代码做出一款软件,直到这门课的开设,我才真正了解到软件工程是一项工程,工程就意味着要有团队合作,要有效率体现,要有人员分配,要有人员管理,要有维护维修,要有安全监测,要有推销。它涉及的是很多流程和环节,面临的是用户的体验和需求,投向的是市场。这些都是从这门课的学习中所体会到的。   软件工程课很新颖,因为课程的学习中掺杂了不少从课本上学习不到的知识,我觉得更多的是素养和习惯。我曾思考老师为什么没有简单教我们如何编程,如何做框架,如何解决编程语言以及语法的一些问题,而却是让首先让我们去做,然后再去讲一些软件工程流程,软件工程开发的注意事项意见软件工程开发的方法。现在也明白了其中的一些道理,如果我们只去学习开发,提高的只是编程能力,提高不了大脑的思考能力以及开发水平和更高的素养。   翻了翻这一学期写的几篇博客,读了几本书,写了几篇读书笔记,对独立作业和结对作业以及团队项目做些了总结。学到的还是蛮多的。团队开发,我学会了要多做事,做实事才能提高;产品的发布,我学会了只有真正的了解用户的体验才知道如何改变

软件工程网络201521123106阅读作业2-提出问题

瘦欲@ 提交于 2020-03-31 06:19:23
提出问题 快速通读教材《构建之法》,并参照提问模板,提出5个问题。 如何提出有价值的问题? 请看这个文章: http://www.cnblogs.com/rocedu/p/5167941.html ,以及 在互联网时代如何提问题。 还有这些要点: 在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文 列出一些事例或资料,支持你的提问。 说说你提问题的原因,你说因为自己的假设和书中的不同而提问,还是不懂书中的术语,还是对推理过程有疑问,还是书中的描述和你的经验(直接经验或间接经验)矛盾? 一个模板可以是这样: 我看了这一段文字 (引用文字),有这个问题(提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。 或者这样: 我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 大学生应该能写出自己的思考, 而不是摘抄书本内容。 提示:编程经验不多的同学,建议看16章 “创新”, 提出自己的问题。 Q1:我们程序员在软件工程团队里面充当什么样的角色?是只要埋头写代码还是各方面都进行考量? p15 1.2.4软件工程的目标--创造“足够好”的软件 我认为创造一个好的软件需要的不仅仅只是代码,软件还要符合实际的需求,考虑大众的想法,而在一个团队中,是否有分工专门收集资料,编写代码

软件工程实践总结-黄紫仪

China☆狼群 提交于 2020-03-31 06:12:37
一、请回望暑假时的第一次作业,你对于软件工程课程的想象 1)对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?     总的来说,最初对于课程目标和期待,也算是达成了一些。从最开始什么都不知道,到后面自己学会百度自学。从最开始以为做软件就是拿到分析然后开始敲代码,到之后意识到事前的分析规划,还有文档整理的重要性。从最初都不知道服务器是啥,到后来跟着大佬一点点熟悉了整个服务器搭建的流程。从最开始的单兵作战,到后来的通力协作,并且开始用git进行协同工作。总的来说自己整体的开发实力都有很明显的提升。但是还是存在很多的不足。首先是对于文档的重要性还是认识不够。再者对于协同化的理解跟认识也有所不足。这些在之后还需要很多的提升。 2)总结这门课程的实践总结和给你带来的提升,包括以下内容:然后 1、统计一下,你在这门软件工程实践中,完成了多少行的代码; 2、软工实践的各次作业分别花了多少时间?(做一个列表) 3、哪一次作业让你印象最深刻?为什么? 4、累计花了多少个小时在软工实践上?平均每周花多少个小时? 5、学习和使用的新软件; 6、学习和使用的新工具; 7、学习和掌握的新语言、新平台; 8、学习和掌握的新方法; 9、其他方面的提升。 提升 量 代码完成量 1000+

软件工程 期末复习(1)

自作多情 提交于 2020-03-30 09:43:56
第一章 概 述 主要内容: 软件?软件的特点?软件的分类?计算机软件的发展 软件危机?表现?原因?克服的方法? 软件工程?七条基本原理? 软件过程?软件的生命周期? 软件过程模型? 软件开发方法 软件工具与软件开发环境 要求 : (1)识记:软件、软件的特点?软件工程? (2)领会:软件危机的出现,表现?原因?克服的方法,软件生命周期各阶段任务,软件工程方法学及常见软件过程模型。 1.1 软件 定义: 软件 == 程序 + 数据 + 文档 1.数据:程序加工处理的对象。包括数据的表示、组织与存储。 数据 == 初始化数据 + 测试数据 2.文档(document) :开发、使用和维护程序所需的图文资料 。 文档 == 开发文档 + 管理文档。 3.程序(program) :能完成预定功能和性能的指令集合。 4.软件和程序的区别 程序只是完整软件产品的一部分。 编写程序只是软件开发过程数据中的一个阶段,一般来说,其工作量仅仅是软件开发全部工作量的10%-20% 软件的特点 抽象性:逻辑实体。可记录。但看不到(Intangible),开发过程可视化程度低,开发结果难以直观表示。 可复制性:与开发成本相比,复制成本很低 无折旧 受硬件制约 未完全摆脱手工工艺 开发费用高 软件分类 1、按适用范围分: 定制软件(Custom Software)项目软件 通用软件(Generic

20194616 第一次作业

孤街浪徒 提交于 2020-03-30 06:48:50
(一)《构建之法——现代软件工程》 第一章 概论 (计算机相关术语整理) 1.1 软件=程序+软件工程 程序在这里指 源程序 ,程序还要对 数据 进行操作,这些操作有时候是 静态 的,有时候是 动态 的。但是光有代码和静态数据还不行,工程师要把它们构建成机器能懂的 可执行代码 。构建不仅仅是cc和link命令,一个复杂的软件不但要有合理的 软件架构(Software Architecture) 、 软件设计与实现(Software Design,Implementation and Debug) 、还要有各种文件和数据来描述各个程序文件之间的 依赖关系 、 编译参数 、 链接参数 等等,这些都是 构建 的过程。 怎么保证软件在修改过程中质量不断提高,至少要维持以前的质量的问题被称为 源代码管理(Source Code Control)又叫 配置管理(Software Configuration Management) 用一系列高质量的工具、流程、文档来保证程序的正确性,这就是 质量保障(Quality Assurance),具体的验证过程叫做 软件测试(Test) 把合适的需求梳理出来,然后逐步展开后续工作被叫做 需求分析(Requirment Analysis) 团体里的新成员要尽快读懂已有的程序,了解程序的设计,这叫 程序理解(Program Conprehension)