Introduction Chapter One
1.1 software program = + Software Engineering
1.1.1 software is beginning to understand
Algorithms + data structures = programs.
Program : here refers to the source, is the code line by line. They are some of the algorithms based on the data structure. Programs also operate on the data, some of which this data is static (such as software icon, message), some are dynamic (eg random number generated by the program, the program data downloaded over the network, the user's text or voice output people, etc.).
Software build process: the building is not just cc command and ink, a complex piece of software not only have a reasonable software architecture (Software Architecture), software design and implementation (Software Design, Implementation and Debug) , but also various documents and data to describe the dependencies between the various program files, compiling parameters, link parameters, and so on. .
Source Control (Source Code Control) problem : also known as configuration management (Software Configuration Management), for example, some programs you want to configure different interface, running on the operating system in Chinese, English or other languages; some programs as well as 32-bit versions 64-bit version.
Quality Assurance (at Quality Assurance) : a series of tools, processes, and documentation to ensure the correctness of the program, these tools (and software), the process should achieve high quality in order to ensure the quality of developed software.
Software testing (the Test) : specific validation process for the software testing.
Software publishing process: software team from requirements analysis (Requirement Analysis) started to sort out the appropriate requirements, and then gradually expand the follow-up work, such as design (software architecture), implement (write data structures and algorithms), testing, to final publishing software.
Program Understanding (Program comprehensions across) : software team of staff will flow, new members to read the existing program as soon as possible to understand the design process.
Software Maintenance (Software Maintenance) : or service operators (Service Operation) software during operation will be out this or that problem, maybe we should from time to time to make a patch to the software, or maintenance of a large number of services, new and old members of the team to be together fix a variety of problems.
Software Life Cycle (Software Life Cycle, SLC) : This series of process is the software life cycle.
Software Project Management (Project Management) : in the software life cycle, someone was responsible for managing the software project.
Software user experience (the User preference Experience) : a good software, even if not very different functions and similar software, but it will make people feel very easy to use. User experience and data structures, algorithms are not directly related, but a lot of very successful software win in this respect.
Internationalization and localization of software (Globalization & Localization) : software to deal with different languages, different needs of users in different parts of the interface and functionality.
Note: Some software business model is reasonable and also some legitimate, but some seemingly reasonable but not how legitimate; some practices unreasonable, but has not issued the relevant laws, before the relevant legislation improved, the software industry there is a norm, That should have professional ethics to constrain IT human behavior
These software development activities and above (build management, source code management, software design, software testing, project management) relevant content is the core part of the software engineering. Software engineering in a broad sense also includes user experience, user interface design.
Therefore, a corollary is:
Software = programs + Software Engineering
An extension of inference is:
Software companies = Software + Business Model
1.1.2 The different phases of software development
Toy stage hobby stage
exploration stage
mature industrial stage
1. 2 What is software engineering
|
Software tool system: in the Microsoft Visual Studio, GitHub, the Eclipse, ClearCase and ClearQuest, and so on.
1.2.1 particularity software
Software: run ordered collection of instructions and data in the computer and electronic equipment.
Software Category:
● System software: operating system, device drivers, and other software tools
● Applications: Users use them to complete the work, from the management of nuclear power plants to write articles or communications, games, web browsing, video playback and so on.
● malicious software: software virus.
Software (nature) particularity:
● complexity (Complexity ): large software (operating systems, office software, search engine) has over one million lines of source code, tens of thousands of different files. There are a variety of explicit or implicit dependencies between software modules, and modules with the increase in the growth of the system, the number of these relationships are often geometrically rate.
● invisibility (Invisibility ): software machine code in the form of high-speed operation, may also run on several CPU cores, an error occurred commercial software, engineers can see some traces of the program in the wrong moment left ( error code, object code location roughly, an error message), but almost impossible to reproduce the full program in the end what went wrong.
● volatility (changeability ): it is natural to expect the software can "change" in the following two cases: a) let the software do a new thing; b) allow the software to adapt to the new hardware. But at the same time, the right to modify the software is a very difficult thing.
● obedience (Conformity ): Software can not exist, it is always to be run on top of the hardware, it should be subordinated to other components of the system requirements. It also subject to the requirements of users, the system requirements of the industry (such as changes in bank interest rates ).
● discontinuous (Discontinuity ): Many software systems do not have such a continuous characteristic, sometimes a small change input, can lead to significant changes to the output.
Software (Other) particularity:
● There are many different programming languages, software tools and software development platform.
● There are many different software development process.
● software team in many different roles exist.
● software can either be stored on magnetic tape, it can also be stored on CD / DVD.
1.2.2 The relationship between software engineering and computer science
Software engineering "project" the word is also a great history, people referred to the project following activities: creative use of scientific principles, design and implementation of buildings, machinery, equipment or process; or the use of a practice or the plurality of entities; or the implementation of these entities.
Advances in computer theory will help software engineering (such as analysis of program correctness); progress in software engineering (better tools, more applications) will help computer scientists to more effectively carry out experiments and exploration.
Tony Hall (Tony Hoare) comparing different emphasis in computer science and software engineering, as Figure 1.2.2 .
computer science |
Software Engineering |
Discovery and study of long-term, objective truth |
The actual short-term results (specific software become obsolete |
Idealized |
Compromise of various factors |
Certainty, perfection, versatility |
Uncertainty and risk management, good enough, the specific application |
Various disciplines independent in-depth study, made achievements |
Attention and knowledge of the various disciplines related applications, to solve the problem |
Unified theory |
Flourishing practices |
Emphasis on originality |
The best, proven practices |
Formal pursuit concise formula |
Established in practice, inspiration and intuition |
Correctness |
plasticity |
Figure 1.2.2 Different emphasis in computer science and software engineering |
1.2.3 knowledge of the field of software engineering
2014, IEEE announced the SWEBOK V3.0 (Software Engineering Body of Knowledge), complete answer to this question, which is mentioned in the following 15 areas of knowledge (Knowledge Area, KA). In 15 KA, three are three categories of software engineering basics areas: basic computing, basic mathematics and engineering fundamentals.
The life cycle |
Software requirements, software design, software builds, software testing, software maintenance |
Specialized areas |
Software configuration management, software project management, software engineering processes, software engineering models and methods of software quality |
Theoretical basis |
Computing infrastructure, basic mathematics, engineering basis |
1.2.4软件工程的目标——创造“足够好”的软件
●用户满意度:用户在使用时发现了软件的很多问题,影响了用户使用软件的效率。
●可靠性:某个软件经常会崩溃,某个操作系统会时不时死机,某个网站往往在最需要的时候登不上去。
●软件流程的质量:软件团队和开发流程的问题太多,导致团队成员无法互相协作,按时交付软件。这也可以说是软件团队的bug。
●可维护性:某个软件太难维护了,按下葫芦起了瓢,修复了一个问题,另一个问题又出来了。也没有足够的文档,维护人员需要更多的资金和时间来维护这个软件,甚至建议推倒重写。
1.3练习与讨论 (P18)
P18-2
1)在问题后面说明哪一章节的什么内容引起了你的提问,提供一些上下文。
2)列出一些事例或资料,支持你的提供。
3)说说你提问题的原因,你是因为自己的假设和书中的不同而提问,还有不懂书中的术语,
还是对推理过程有疑问,还是对推理过程有疑问,还有书中的描述和经验(直接或间接经验)相矛盾。
答:问题一:怎样才算一个好的单元测试?
第二章个人技术和流程中的术语我没有怎么理解,单元测试应该准确、快速地保证程序基本极块的正确性。
单元测试应该在最基本的功能/参数上验证程序的正确性;单元测试必须由最熟悉代码的人(程序的作者)来写;单元测试过后,机器状态保持不变;单元测试要快(运行时间几秒);单元测试应该产生可重复、一致的结果;独立性,可以人为构造数据;单元测试应该覆盖所有代码路径。
问题二:学什么,怎么学,核心竞争力是什么?
1.学什么:第三章软件工程师的成长中我认为软件工程是培养适应计算机应用学科的发展,具备计算机软件的基础理论、基本知识和基本技能,具有用软件工程的思想、方法和技术来分析、设计和实现计算机软件系统的能力的高级软件工程技术人才。
2.怎么学:学习软件工程最好把这些基础课程打扎实,以便能理解以后一些更抽象的东西。无论有没有开始学习开发语言,都应该慢慢去接触它,实践它,积累你的想法、开发自己的软件开发思维,从小的程序开始实践它。这个时期,最好先自学理解,尽量自己想办法解决问题,不懂的也一定要请教或者百度弄懂。其次尽量一面提高自己的编程能力和发展编程思维,一面广学博文,多去接触一些跟专业有关的各种信息知识,最好关注几个专业网站,学习和浏览里面的专业技术或者专业修养、前景、最新技术发展等内容。最后要大量地实践项目,提高编程能力,要用架构师的眼光去看待软件开发,就是达到了一个专业人士的水平。这个时候不懂就要去弄懂,不要积累太多问题,学得更加踏实。
3.核心竞争力:我查找思考出了很多答案:技术、代码、天赋激情、经验、想象力等等.....我思考过这些答案,觉得答案挺好,但是还没有突出核心竞争力,没有展现软件工程师的特点。
例如技术和代码的能力,这个是属于基础能力;天赋和激情哪个行业都需要,何况天赋不是决定性的因素。经验也很重要,但不能说明太多问题,也许有三年开发经验的程序员只是把一年的经验重复了三次罢了;想象力我觉得更适合搞艺术和科研的,因为他们需要通过想象力在未知的领域去探索,而我们软件工程师是利用已有的知识去打造产品。
我觉得软件工程师的核心竞争力,不是单一能力的体现,而应该是多种能力和价值的综合体,学习能力、解决问题能力和影响力构成了软件工程师的核心竞争力。
问题三:团队模式和团队的开发模式有什么关系?
在第五章团队和流程中我查资料了解了一下,团队模式,更偏向于多人合作的那种,而且我理解的“团队”会是一种多人合作的情况下,长期磨合后的一个组织,他们是相互了解的,是拥有巨大的默契存在的。
对于团队的开发模式我并没有查到具体的解释,但对于开发模式,是有查到几种开发模式,比如瀑布开发模式、快速应用开发模式等等,我们的课本上有这些模式,所以我在这里认为开发模式是更偏向于后边的“模式”两个字的,更注重方法,用什么方法。
我个人认为他们之间的关系是:团队模式是一种组织的存在,而团队的开发模式更注重于方法,团队采用什么样的方法开开发项目。
P18-3
1)这些软件的开发者是怎么说服你(陌生人)成为他们的用户的?他们的目标都是盈利么?他们的目标都是赚取用户的现金么?还是别的
2)这些软件是如何到你手里的(邮购、下载、互相拷贝)?你当时上几年级?你对这个软件的感觉如何?
我的手机软件分成以下七类:
常用设备:QQ、微信、浏览器、电话、相机、联系人;
系统设备:天气、计算器、镜子、日历、闹钟、设置、手电筒、文件管理;
支付软件:美团APP、招商银行APP、中国工商银行App、云闪付APP、支付宝;
购物软件:京东App、淘宝App、小红书APP;
办公学习软件:Wps office、百度网盘、网易有道词典、考虫APP、一起学网校APP、作业帮APP、知米背单词、驾考宝典、运动世
界校园APP、番茄TODOAPP;
娱乐软件:王者荣耀APP、腾讯视频、人人视频APP、爱奇艺APP、芒果TVAPP、抖音APP、网易云音乐、QQ音乐、微博;
生活软件:高德地图、铁路12306App、美团外卖、美颜相机、最美证件照;
答:以常用设备的QQ为例子,当时这个软件是初中的时候在应用商店里下载的,安装它是为了和小伙伴们更好的联系,随着时间的推移,QQ软件实现了更多快捷的功能(远程控制电脑,发送大文件等等),使我对这款软件的黏着性更大,更喜欢这个软件。QQ的目标据我个人看来是盈利性的,他们会采用会员制的营销模式,开通黄钻、绿钻、蓝钻、紫钻、黑钻、超级会员等等花费一大笔钱在这上面,当然开通之后会和普通用户的权限不一样,会员拥有更多更好的皮肤、网速、画质等等,让消费者拥有更优秀的用户体验。